次の方法で共有


API レイヤー (Direct3D 10)

Direct3D 10 ランタイムはレイヤーを使って作成されています。レイヤーはコアにある基本機能から始まり、外側のレイヤーでは開発者を支援するオプション機能を構築します。

コア レイヤー

コア レイヤーは既定の状態で存在します。コア レイヤーでは、API とデバイス ドライバー間に短い経路のマッピングが適用され、呼び出しが高い頻度で発生する場合もオーバーヘッドが最小限に抑えられます。コア レイヤーではパフォーマンスが重視されるため、検証は重要なもののみが実行されます。

これ以外のレイヤーは省略可能です。一般に、レイヤーは機能を追加しますが、既存の動作を変更することはありません。たとえば、コア関数は、インスタンス化されたデバッグ レイヤーとは関係なく、同じ値を返しますが、デバッグ レイヤーがインスタンス化されている場合は、追加のデバッグ出力が返されることがあります。

デバイスが作成されているときに、D3D10CreateDevice を呼び出し、1 つまたは複数の D3D10_CREATE_DEVICE_FLAG 値を指定してレイヤーを作成します。

デバッグ レイヤー

デバッグ レイヤーでは多くの追加パラメーター使用し、一貫性の検証を行うことができます (シェーダーのリンク状態とリソースのバインド状態の検証やパラメーターの一貫性の検証、エラーの説明のレポートなど)。デバッグ レイヤーにより生成された出力は、文字列のキューで構成されます。この文字列にアクセスするには ID3D10InfoQueue インターフェイス を使用します (「ID3D10InfoQueue によるデバッグ出力のカスタマイズ (Direct3D 10)」を参照)。コア レイヤーにより生成されたエラーは、デバッグ レイヤーによって警告と共に強調表示されます。

デバッグ レイヤーをサポートするデバイスを作成するには、DirectX SDK をインストールし (D3D10SDKLayers.DLL の取得)、D3D10CreateDevice を呼び出すときに、D3D10_CREATE_DEVICE_DEBUG フラグを指定する必要があります。デバッグ レイヤーを持つアプリケーションの実行には、当然ながら相当の時間がかかります。D3DX10 API のデバッグ メッセージを有効化または無効化するには、D3DX10DebugMute を呼び出します。

リファレンス切り替えレイヤー

このレイヤーは、ハードウェア デバイス (HAL) とリファレンスまたはソフトウェア デバイス (REF) の間でのアプリケーションの移行を可能にします。デバイスを切り替えるには、まず、リファレンス切り替えレイヤーをサポートするデバイスを作成 (「D3D10CreateDevice」を参照) してから、ID3D10SwitchToRef::SetUseRef を呼び出す必要があります。

デバイスを移行しても、すべてのデバイス ステート、リソース、およびオブジェクトは保持されます。しかし、リソース データを厳密に一致させることはできないこともあります。これは、ハードウェア デバイスで使用できる情報の一部が、リファレンス デバイスでは使用できないためです。

実際、リアルタイム アプリケーションはすべて、パイプラインの HAL 実装を使用しています。このパイプラインをハードウェア デバイスからリファレンス デバイスに切り替えると、ハードウェアとソフトウェアの両方で同時にレンダリング処理が行われます。ソフトウェア デバイスのレンダリング時には、リソースをシステム メモリーにダウンロードする必要があります。スペースを確保するために、システム メモリーにキャッシュされたその他のリソースの削除が必要になることがあります。

スレッドセーフ レイヤー

このレイヤーは、マルチスレッド アプリケーションが、複数のスレッドからデバイスへアクセスできるように設計されています。

Direct3D 10 アプリケーションは、デバイス関数を使用して、デバイスの同期を制御できます。これにより、アプリケーションでは重要なセクションを有効化または無効化 (一時的にマルチスレッド保護を有効化または無効化) し、複数の Direct3D 10 API エントリ ポイントにわたって、重要なセクションをロックまたはロック解除できるようになります。既定では、スレッドセーフ レイヤーは有効化されています。スレッドセーフ レイヤーは、シングルスレッド アプリケーションのパフォーマンスには影響しません。

Direct3D 9 と Direct3D 10 の違い :

Direct3D 9 とは異なり、Direct3D 10 API は既定で完全にスレッドセーフになっています。

関連項目

API の機能 (Direct3D 10)