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

実装時には以下のように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のサンプルに上記のコードが使われています。