IMFD3D12SynchronizationObjectCommands
COM公式ドキュメント
D3D12 リソースのプロデューサーまたはコンシューマーが、リソースが使用可能になったとき、または解放可能になったときに下流のコンポーネントへ通知するためのコマンドを提供します。
メソッド 4
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
指定したプロデューサーコマンドキューにフェンスをキューイングします。このフェンスは、関連付けられた D3D12 リソースが使用可能になったことを下流のコンシューマーに通知します。
| pProducerCommandQueue | ID3D12CommandQueue* | in | フェンスを挿入するプロデューサーコマンドキューを表す ID3D12CommandQueue へのポインター。 |
戻り値
次の値を含む(ただしこれらに限定されない) HRESULT。
| Value | Description |
|---|---|
| S_OK | 成功 |
| MF_E_OPERATION_UNSUPPORTED_AT_D3D_FEATURE_LEVEL | 試行された呼び出しまたはコマンドは、コンポーネントが使用している DirectX のバージョンではサポートされていません。 |
| o MF_E_UNSUPPORTED_MEDIATYPE_AT_D3D_FEATURE_LEVEL | 指定されたメディアタイプは、コンポーネントが使用している DirectX のバージョンではサポートされていません。 |
解説(Remarks)
このメソッドは、プロデューサーがリソースに対してスケジュールしたすべての GPU コマンドが処理されたことを、下流のコンシューマーに通知するためにプロデューサーによって使用されます。このシグナルは、リソースがコンシューマーによる消費の準備が整ったことを示します。
指定したコンシューマーコマンドキューに待機コマンドをキューイングし、プロデューサーコマンドキューからのリソース準備完了シグナルの待機を開始します。
| pConsumerCommandQueue | ID3D12CommandQueue* | in | 待機をキューイングするコンシューマーコマンドキューを表す ID3D12CommandQueue へのポインター。 |
戻り値
次の値を含む(ただしこれらに限定されない) HRESULT。
| Value | Description |
|---|---|
| S_OK | 成功 |
| MF_E_OPERATION_UNSUPPORTED_AT_D3D_FEATURE_LEVEL | 試行された呼び出しまたはコマンドは、コンポーネントが使用している DirectX のバージョンではサポートされていません。 |
| o MF_E_UNSUPPORTED_MEDIATYPE_AT_D3D_FEATURE_LEVEL | 指定されたメディアタイプは、コンポーネントが使用している DirectX のバージョンではサポートされていません。 |
解説(Remarks)
この関数により、コンシューマーは自身の GPU エンジンに対するコマンドのスケジュールを直ちに開始できます。この待機によって、待機の後にスケジュールされたコマンドは、プロデューサーの GPU エンジンによって対応する準備完了シグナルが発行されるまで実行されないことが保証されます。
D3D12 リソースが準備完了になったときにセットされるイベントハンドルを格納します。
| hEvent | HANDLE | in | リソースが準備完了になったときにセットされるイベントへのハンドル。 |
戻り値
| Value | Description |
|---|---|
| S_OK | 成功 |
| MF_E_OPERATION_UNSUPPORTED_AT_D3D_FEATURE_LEVEL | 試行された呼び出しまたはコマンドは、コンポーネントが使用している DirectX のバージョンではサポートされていません。 |
| o MF_E_UNSUPPORTED_MEDIATYPE_AT_D3D_FEATURE_LEVEL | 指定されたメディアタイプは、コンポーネントが使用している DirectX のバージョンではサポートされていません。 |
解説(Remarks)
イベントハンドルのアクセス権が制限されている場合、そのハンドルは少なくとも EVENT_MODIFY_STATE 権限を持っている必要があります。ハンドルを閉じるのは呼び出し元の責任です。
指定したコマンドキューにフェンスをキューイングします。このフェンスは、GPU がコンシューマーコマンドの処理を完了したときに同期オブジェクトへ通知します。
| pConsumerCommandQueue | ID3D12CommandQueue* | in | フェンスをキューイングするコンシューマーコマンドキューを表す ID3D12CommandQueue へのポインター。 |
戻り値
| Value | Description |
|---|---|
| S_OK | 成功 |
| MF_E_OPERATION_UNSUPPORTED_AT_D3D_FEATURE_LEVEL | 試行された呼び出しまたはコマンドは、コンポーネントが使用している DirectX のバージョンではサポートされていません。 |
| o MF_E_UNSUPPORTED_MEDIATYPE_AT_D3D_FEATURE_LEVEL | 指定されたメディアタイプは、コンポーネントが使用している DirectX のバージョンではサポートされていません。 |
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IMFD3D12SynchronizationObjectCommands "{09D0F835-92FF-4E53-8EFA-40FAA551F233}"
#usecom global IMFD3D12SynchronizationObjectCommands IID_IMFD3D12SynchronizationObjectCommands "{}"
#comfunc global IMFD3D12SynchronizationObjectCommands_EnqueueResourceReady 3 sptr
#comfunc global IMFD3D12SynchronizationObjectCommands_EnqueueResourceReadyWait 4 sptr
#comfunc global IMFD3D12SynchronizationObjectCommands_SignalEventOnResourceReady 5 sptr
#comfunc global IMFD3D12SynchronizationObjectCommands_EnqueueResourceRelease 6 sptr
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。