DXGI1.1 のアダプタ列挙を試します。
●EeePC901-X で実行した場合 (Windows7 RC x86)
// EeePC 901-X [Mobile Intel(R) 945 Express Chipset Family (Microsoft Corporation - WDDM 1.0)] vmem:0MB sysmem:64MB shmem:192MB flag=0
945 内蔵 GPU が列挙できています。
実際に Direct3D10 / 11 デバイスを作るとエラーなので、ドライバがまだ D3D10 Level9
に対応していないことがわかります。
●デスクトップ PC で実行した場合 (Windows7 RC x64)
// Desktop PC [ATI Radeon HD 4800 Series ] vmem:504MB sysmem:0MB shmem:2811MB flag=0 (Direct3D11) *HARDWARE = 10.1 (a100) [ATI Radeon HD 4670] vmem:504MB sysmem:0MB shmem:2811MB flag=0 (Direct3D11) *HARDWARE = 10.1 (a100)
2枚差したビデオカードが両方とも列挙されています。
それぞれ 10.1 でデバイスの作成ができます。
●リモートデスクトップ経由で実行した場合
[Mobile Intel(R) 945 Express Chipset Family (Microsoft Corporation - WDDM 1.0)] vmem:0MB sysmem:64MB shmem:192MB flag=1 REMOTE [ATI Radeon HD 4800 Series ] vmem:504MB sysmem:0MB shmem:2811MB flag=0 (Direct3D11) *HARDWARE = 10.1 (a100) [ATI Radeon HD 4670] vmem:504MB sysmem:0MB shmem:2811MB flag=0 (Direct3D11) *HARDWARE = 10.1 (a100)
EeePC 901 からデスクトップ PC に接続しています。
予想通り両方のマシン、すべてのアダプタが見えていることがわかります。
EeePC の 945 では DXGI_ADAPTER_DESC1 の Flags に DXGI_ADAPTER_FLAG_REMOTE bit が立っており、このデバイスを区別することが可能です。
プログラム自体はホスト側のデスクトップ PC で走っているので、プログラムから見れば
クライアントである EeePC の方がリモートです。
もし Remote のアダプタが Command Remoting に対応していれば
ネットワークを経由していてもクライアント側の PC でリアルタイムに
レンダリングすることが可能となります。
ちなみに DXGI1.0 で列挙するとホスト側の最初のアダプタ “RADEON HD4850” しか
見えませんでした。
● Feature
各アダプタの詳細を調べると下記の通り。
いわば Direct3D11 における caps です。
[DEFAULT] (Direct3D11) *HARDWARE = 10.1 (a100) feature threading DriverConcurrentCreates=0 feature threading DriverCommandLists=0 feature d3d10_x ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x=0 feature doubles DoublePrecisionFloatShaderOps=0 *REFERENCE = 11.0 (b000) feature threading DriverConcurrentCreates=0 feature threading DriverCommandLists=0 feature d3d10_x ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x=1 feature doubles DoublePrecisionFloatShaderOps=1 *WARP = 10.1 (a100) feature threading DriverConcurrentCreates=0 feature threading DriverCommandLists=0 feature d3d10_x ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x=0 feature doubles DoublePrecisionFloatShaderOps=0 [ATI Radeon HD 4800 Series ] (V:4098 D:37954 S:84021250 R:0) luid:000097b2 00000000 vmem:504MB sysmem:0MB shmem:2811MB flag=0 (Direct3D11) *HARDWARE = 10.1 (a100) feature threading DriverConcurrentCreates=0 feature threading DriverCommandLists=0 feature d3d10_x ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x=0 feature doubles DoublePrecisionFloatShaderOps=0 [ATI Radeon HD 4670] (V:4098 D:38032 S:625086466 R:0) luid:0000b18e 00000000 vmem:504MB sysmem:0MB shmem:2811MB flag=0 (Direct3D11) *HARDWARE = 10.1 (a100) feature threading DriverConcurrentCreates=0 feature threading DriverCommandLists=0 feature d3d10_x ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_x=0 feature doubles DoublePrecisionFloatShaderOps=0
以前 DirectX SDK Nov2008 時点で調べた結果はこちら。
ほとんどのオプションは 0 のままですが、よく見ると REFERENCE で
DoublePrecisionFloatShaderOps が 1 になっていました。
REFERENCE を使えばシェーダーの double 演算命令もテストできるようになったということです。
同記事 でも触れていますが ComputeShader 4.0/4.1 については November の時点ですでに対応していますね。
関連エントリ
・Direct3D DXGI とマルチ GPU (アダプタ)
・Windows7 リモートデスクトップと Direct3D
・Direct3D11/DirectX11 (4) FeatureLevel と旧 GPU の互換性、テクスチャ形式など