Direct3D 10.1 は、Windows Vista と Windows 7 が動作するPC上の任意のグラフィックス ハードウェアで、WDDMドライバがなくても、動作します。残念ながら Windows XP では動作しませんが...
Direct3D を使ったことのある開発者であれば、Direct3D #がDirect3D #-1のハードウェアでは動作しない(例えば、Direct3D 9 は Direct3D 8 のハードウェアでは動作しない)ことをご存じでしょう。あるいは Caps に無い機能は動作しませんでした。Direct3D 10.1 は、Direct3D の歴史始まって以来初めて、高速なソフトウェア ラスタライザを持ち、下位互換性を保証します。
Direct3D 10.1には Direct3D 10, Direct3D 9, Software の3種類のドライバがあり、デバイス作成時に選択できます。Direct3D 10, 9 ドライバにはそれぞれハードウェアの機能に対応したフィーチャーレベル(Feature Level 10_1, Feature Level 10_0, Feature Level 9_3, Feature Level 9_2, Feature Level 9_1)があります。
実装時には以下のようにD3D10デバイスを作成します。
static const D3D10_FEATURE_LEVEL1 levelAttempts[] = { D3D10_FEATURE_LEVEL_10_1, D3D10_FEATURE_LEVEL_10_0, D3D10_FEATURE_LEVEL_9_3, D3D10_FEATURE_LEVEL_9_2, D3D10_FEATURE_LEVEL_9_1, };
for (UINT level = 0; level < ARRAY_SIZE(levelAttempts); level++) { hr = D3D10CreateDevice1( pAdapter, driverType, softwareRasterizer, flags, levelAttempts[level], D3D10_1_SDK_VERSION, &spDevice );
if (SUCCEEDED(hr)) { if (DoesBGRASupportExist(spDevice)) { *ppDevice = spDevice.Detach(); break; }
hr = E_FAIL; } }
WDDMドライバが動作するDirect3D 10 あるいは Direct3D 9 ハードウェアであれば、これで Direct3D 10.1 が動作する Direct3D 10 デバイスが作成できます。WDDMでない、あるいはDirect3D 9以前のハードウェアの場合(たとえばサーバーなど)には、さらに以下のコードを追加し WARPドライバを使ってソフトウェアで動作する Direct3D 10デバイスを作成します。
if !(SUCCEEDED(hr)) { HANDLE hWarp = LoadLibrary(L”D3D10WARP.dll"); if(NULL == hWarp) <error> hr = D3D10CreateDevice1( NULL, D3D10_DRIVER_TYPE_SOFTWARE, hWarp, 0, D3D10_FEATURE_LEVEL_10_1, D3D10_1_SDK_VERSION, &pDevice ); }
Windows 7 SDK (Beta) をダウンロードすると、Direct2DやDirectWriteのサンプルに上記のコードが使われています。