0

ソフトウェア レンダリングのサポートを追加したい DX11 アプリケーションがあります。これは、状況によっては、GPU のないマシンで実行されるためです。私が行った調査から、私の最善の策はWARPのようです。

WARP を使用するようにアプリを変更するのは驚くほど簡単でした。

hr = D3D11CreateDevice(
    NULL, 
    D3D_DRIVER_TYPE_WARP, // was D3D_DRIVER_TYPE_HARDWARE
    NULL,
    creationFlag,
    featureLevels,
    ARRAYSIZE(featureLevels),
    D3D11_SDK_VERSION,
    &mDevice,
    &mFeatureLevel,
    &mDeviceContext
    );

それはうまく実行されます。私が苦労しているのは、DriverType をハードウェアではなく WARP に設定するタイミングを決定することです。システムでハードウェア サポートが利用可能かどうかを教えてくれる呼び出し可能な関数はありますか?

DX 11 機能レベル 9_1 を使用しています。

4

2 に答える 2

2

これは通常の方法です:D3D11CreateDevice()適切であると予想されるすべてのパラメーターを使用してみてD3D_DRIVER_TYPE_HARDWAREください (最適なものを見つけるために、ループ内でさまざまな機能レベルを試してください)。これが失敗する場合は、WARP にロールバックします。WARP が失敗した場合は、ソフトウェア、D3D9、GL などにロールバックします。考えられるすべてのバリアントが失敗した場合は、マシンや OS をアップグレードする必要があることをユーザーに通知します =)

毎回、戻りコード、およびデバイスとコンテキストのポインターを確認してください。見つけたら(HRESULT == S_OK) && (device != 0) && (context != 0)ビンゴ!

それが役に立てば幸い。

于 2014-02-10T22:35:19.290 に答える