Share via


ドライバーの内部エラー (Direct3D 9)

Direct3D 9 では、Direct3D はドライバーがE_OUTOFMEMORY、D3DERR_OUTOFVIDEOMEMORY、D3DERR_UNSUPPORTEDCOLORARGなどのエラー コードを返して、アプリケーションが応答できるようにします。 ただし、これらの戻り値の型を生成した API 呼び出しがコマンド バッファーに読み込まれ、GPU に送信されるようにバッチ処理される場合があります ( ランタイムとドライバーの最適化の制御に関するページを参照)。 この場合、アクションを実行する必要がある場合にエラーをアプリケーションに中継できないため、ランタイムによってエラー コードが使用され、デバイス オブジェクトに対してこのエラーが発生したことをメモします。 後でアプリケーションが IDirect3DDevice9::P resent を呼び出すと、 IDirect3DDevice9::P resent はD3DERR_DRIVERINTERNALERRORを返します。 このため、 IDirect3DDevice9::P resent からD3DERR_DRIVERINTERNALERRORを受け取るときにアプリケーションが実行する最善の方法は、デバイスを破棄して再作成することです。

さらにデバッグする場合は、エラーを生成している API 呼び出しを調べるためのいくつかの提案を次に示します。

  • 可能な戻り値の一覧は完全ではないので、次のように各 API 呼び出しを囲むことで、失敗している呼び出しを見つけることができます。

    TRACE ( "Calling DrawPrimitive" );
    d3ddev->DrawPrim(...);
    TRACE ( "done\n" );
    

    その後、出力デバッグ ストリームに、問題の原因となっている呼び出しが表示されます。

  • さらに、デバッグのために、各 IDirect3DDevice9::D rawPrimitive の直前に IDirect3DDevice9::ValidateDevice を呼び出して、デバイス ドライバーに追加の問題があるかどうかを確認してください (サポートされていない操作、テクスチャ形式の使用できない組み合わせなど)。

    Note

    IDirect3DDevice9::ValidateDevice は、ドライバーが応答を返すために実行する必要がある検証作業の量のため、慎重かつ控えめに使用する必要があります。

     

プログラミングのヒント