Win32 API 日本語リファレンス
ホームGraphics.Direct3D11 › ID3D11Multithread

ID3D11Multithread

COM
IID9b7e4e00-342c-4106-a19f-4f2704f689f0継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

マルチスレッドアプリケーションのクリティカルセクションに対するスレッド保護を提供します。

解説(Remarks)

このインターフェイスは、ID3D11DeviceContext(またはそれ以降のバージョン)インターフェイスで作成されたイミディエイトデバイスコンテキストに対して、IUnknown::QueryInterface を使用して問い合わせることで取得します。

D3D10 とは異なり、D3D11 にはマルチスレッド層がありません。既定ではマルチスレッド保護は無効になっています。SetMultithreadProtected を使用して有効にし、特定の順序で実行する必要のあるグラフィックスコマンドを EnterLeave で囲みます。

D3D11 では既定で、アプリケーションは一度に 1 つのスレッドからのみイミディエイトコンテキストを使用できます。しかし、このインターフェイスを使用すればその制限を変更できます。このインターフェイスによりイミディエイトコンテキストのスレッド保護を有効にできますが、1 つのコンテキストを複数のスレッドで共有するために、イミディエイトコンテキストの各呼び出しのオーバーヘッドは増加します。

メソッド 4

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 3 void Enter()

デバイスのクリティカルセクションに入ります。(ID3D11Multithread.Enter)

解説(Remarks)

SetMultithreadProtected が true に設定されている場合、デバイスのクリティカルセクションに入ると、他のスレッドが同時にそのデバイスのメソッド、DXGI のメソッド、およびすべてのリソース、ビュー、シェーダー、ステート、非同期の各インターフェイスのメソッドを呼び出すことを防止します。

この関数は、マルチスレッドアプリケーションにおいて、順序どおりに実行しなければならない一連のグラフィックスコマンドがある場合に使用します。通常、この関数は一連のグラフィックスコマンドの開始時に呼び出し、それらのグラフィックスコマンドの後に Leave を呼び出します。

vtbl 4 void Leave()

デバイスのクリティカルセクションから出ます。(ID3D11Multithread.Leave)

解説(Remarks)

この関数は通常、マルチスレッドアプリケーションにおいて、順序どおりに実行しなければならない一連のグラフィックスコマンドがある場合に使用します。通常、一連のグラフィックスコマンドの開始時に Enter を呼び出し、それらのグラフィックスコマンドの後にこの関数を呼び出します。

vtbl 5 BOOL SetMultithreadProtected(BOOL bMTProtect)

マルチスレッド保護の有効/無効を切り替えます。

bMTProtectBOOLinマルチスレッド保護を有効にする場合は true、無効にする場合は false を指定します。

戻り値

型: BOOL

このメソッドを呼び出す前にすでにマルチスレッド保護が有効になっていた場合は true、それ以外の場合は false を返します。

vtbl 6 BOOL GetMultithreadProtected()

マルチスレッド保護が有効かどうかを調べます。

戻り値

型: BOOL

マルチスレッド保護が有効な場合は true、それ以外の場合は false を返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

#define global IID_ID3D11Multithread "{9B7E4E00-342C-4106-A19F-4F2704F689F0}"
#usecom global ID3D11Multithread IID_ID3D11Multithread "{}"
#comfunc global ID3D11Multithread_Enter                    3
#comfunc global ID3D11Multithread_Leave                    4
#comfunc global ID3D11Multithread_SetMultithreadProtected  5 int
#comfunc global ID3D11Multithread_GetMultithreadProtected  6
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。