ID3D11On12Device2
COM公式ドキュメント
Direct3D 11 API で作成したリソースを Direct3D 12 で使用できるようにします。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
Direct3D 11 リソースオブジェクトのラップを解除し、Direct3D 12 リソースオブジェクトとして取得します。
| pResource11 | ID3D11Resource* | in | ラップを解除する Direct3D 11 リソースオブジェクト。 |
| pCommandQueue | ID3D12CommandQueue* | in | アプリケーションがこのリソースを使用する予定のコマンドキュー。リソースにアクセスする保留中の作業があると、このキューにフェンス待機がスケジュールされます。その後、呼び出し元が所有するフェンスへのシグナルを含め、このキューにさらに作業をキューイングできます。 |
| riid | GUID* | in | ppvResource12 で返してほしいインターフェイスのグローバル一意識別子 (GUID) への参照。 |
| ppvResource12 | void** | out | Direct3D 12 リソースへのポインターを受け取るメモリブロックへのポインター。 |
戻り値
解説(Remarks)
リソースは (まだその状態でない場合) D3D12_RESOURCE_STATE_COMMON に遷移し、コマンドキュー (pCommandQueue) に適切な待機が挿入されます。
ラップ解除できる対象にはいくつかの制限があります。キー付きミューテックスのリソース、GDI 互換リソース、およびバッファーはラップ解除できません。ただし、UnwrapUnderlyingResource は、ID3D11On12Device::CreateWrappedResource メソッドで作成したリソースのほか、ID3D11Device::CreateTexture2D で作成したリソースのラップ解除にも使用できます。
一般に、Direct3D 11 で再び使用する前に、オブジェクトを Direct3D11on12 に返却する必要があります (ID3D11On12Device2::ReturnUnderlyingResource を参照)。
UnwrapUnderlyingResource はスワップチェーンバッファーのラップ解除にも使用できます。この場合も、Present を呼び出す前 (またはそのリソースを他の用途で使用する前) に、リソースを Direct3D11on12 に返却する必要があります。
リソースのラップを解除すると、そのリソースは Direct3D11On12 変換レイヤーからチェックアウトされます。リソースがチェックアウトされている間は、(いずれのバージョンの API を通じても) 変換レイヤーによる使用をスケジュールすることはできません。ID3D11On12Device2::ReturnUnderlyingResource でリソースをチェックインしてください (リソースの返却とも呼ばれます)。
UnwrapUnderlyingResource はフラッシュを行いませんが、GPU 作業をスケジュールする場合があります。外部で完了を待機する場合は、UnwrapUnderlyingResource の呼び出し後にフラッシュしてください。
このメソッドを使用すると、Direct3D 11 リソースオブジェクトを Direct3D11On12 に返却し、そのリソースがいつ利用可能になるかを示すことができます。
| pResource11 | ID3D11Resource* | in | 返却する Direct3D 11 リソースオブジェクト。 |
| NumSync | DWORD | in | pSignalValues および ppFences が指す配列の要素数。 |
| pSignalValues | ULONGLONG* | in | フェンスのシグナル値の配列へのポインター。 |
| ppFences | ID3D12Fence** | in | フェンスオブジェクトの配列へのポインター。 |
戻り値
解説(Remarks)
リソースを返却する際には、一連のフェンスとフェンスのシグナル値を指定します。それらが完了することで、リソースが D3D12_RESOURCE_STATE_COMMON 状態に戻り、Direct3D11On12 が使用できる状態になったことを示します。
並列配列である pSignalValues と ppFences には、そのリソースに対する保留中の作業をすべて含めてください。Direct3D11On12 変換レイヤーは、これらの引数に対する待機を、リソースに対する作業がスケジュールされるまで遅延させます。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D11On12Device2 "{DC90F331-4740-43FA-866E-67F12CB58223}" #usecom global ID3D11On12Device2 IID_ID3D11On12Device2 "{}" #comfunc global ID3D11On12Device2_UnwrapUnderlyingResource 7 sptr,sptr,var,sptr #comfunc global ID3D11On12Device2_ReturnUnderlyingResource 8 sptr,int,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID3D11On12Device2 "{DC90F331-4740-43FA-866E-67F12CB58223}" #usecom global ID3D11On12Device2 IID_ID3D11On12Device2 "{}" #comfunc global ID3D11On12Device2_UnwrapUnderlyingResource 7 sptr,sptr,sptr,sptr #comfunc global ID3D11On12Device2_ReturnUnderlyingResource 8 sptr,int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。