RADEON HD 5870 手に入れました。
とりあえず各機能の対応状況は以下の通り。(caps viewer より)
Direct3D 11 Feature Level D3D_FEATURE_LEVEL_11_0 Driver Concurrent Creates No Driver Command Lists No Double-precision Shaders Yes Compute Shader 4.x Yes D3D_FEATURE_LEVEL_11_0 Shader Model 5.0 Geometry Shader Yes Stream Out Yes Compute Shader Yes Hull & Domain Shaders Yes Texture Resource Arrays Yes Cubemap Resource Arrays Yes BC4/BC5 Compression Yes BC6H/BC7 Compression Yes Alpha-to-coverage Yes Extended Formats (BGRA, etc.) Yes 10-bit XR High Color Format Yes
ShaderModel 5.0 も、ComputeShader も、BC6H/BC7 も、Yes です。
去年末くらいに実験していたテセレータ周りのプログラムもそのまま動きました。
Compute Shader 4~5 も動いてます。OpenCL の方は不明。
唯一 Thread 周りが未対応で、Concurrent Creates と Command Lists が No に
なっています。ドライバがまだ完全ではないのかもしれません。
使用したドライバは Radeon_HD5800_8.66RC6_Vista_Win7_Sep21 。
倍精度演算のコンパイルを試しました。hlsl の出力は下記の通り。
cs_5_0 dcl_globalFlags refactoringAllowed | enableDoublePrecisionFloatOps dcl_uav_structured u0, 4 dcl_input vThreadIDInGroupFlattened dcl_input vThreadGroupID.xy dcl_input vThreadIDInGroup.xy dcl_input vThreadID.xy dcl_temps 2 ~ add r0.y, r0.z, r0.y add r0.y, r0.w, r0.y ftod r0.zw, r0.y dmul r0.zw, d(0.000000, 100000.000000), r0.zwzw dadd r0.zw, d(0.000000, 0.000000), r0.zwzw imul null, r1.xy, l(10000, 1000, 0, 0), vThreadIDInGroup.xyxx utof r1.xy, r1.xyxx ftod r1.xyzw, r1.xyxx dadd r0.zw, r0.zwzw, r1.xyxy ~
d がついているのが double 命令です。
倍精度演算はレジスタを 2 個使って表現していることがわかります。
レジスタのペアを {} で表現すると
ftod r0.zw, r0.y ↓ r0.{zw} = FloatToDouble( r0.y ) utof r1.xy, r1.xyxx ftod r1.xyzw, r1.xyxx dadd r0.zw, r0.zwzw, r1.xyxy ↓ r0.x = UIntToFloat( r1.x ) r0.y = UIntToFloat( r1.y ) r1.{xy} = FloatToDouble( r0.x ) r1.{zw} = FloatToDouble( r0.y ) r0.{zw} = r0.{zw} + r1.{xy}
でも実際に走らせると落ちました。
単純な加算や型変換だけなら動くのですが、まだ何らかの問題があるようです。
関連エントリ
・RADEON HD 5870 と DirectX 11
・Direct3D11/DirectX11 (18) GPU を使ったアウトラインフォントの描画の(6)