ID3D12PipelineLibrary1
COM公式ドキュメント
パイプラインライブラリを管理します。このインターフェイスは ID3D12PipelineLibrary を拡張し、パイプラインステートストリームの記述から PSO を読み込めるようにします。
メソッド 1
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
要求された PSO をライブラリから取得します。パイプラインストリームの記述はライブラリのデータベースと照合され、PSO の内容が重複しないように記憶されます。
| pName | LPWSTR | in | SAL: PSO の一意な名前です。 |
| pDesc | D3D12_PIPELINE_STATE_STREAM_DESC* | in | SAL: 必要な PSO を D3D12_PIPELINE_STATE_STREAM_DESC 構造体で記述します。この記述はライブラリのデータベースと照合され、PSO の内容が重複しないように保存されます。 |
| riid | GUID* | in | ID3D12PipelineState オブジェクトの REFIID を指定します。 通常、アプリではこの引数と次の引数 ppPipelineState を、マクロ IID_PPV_ARGS(&PSO1) を使用して設定します(PSO1 はオブジェクトの名前です)。 |
| ppPipelineState | void** | out | SAL: 関数が正常に終了した後に PSO を参照するポインターを指定します。 |
戻り値
型: HRESULT
このメソッドは HRESULT の成功コードまたはエラーコードを返します。名前が存在しない場合やストリームの記述がライブラリ内のデータと一致しない場合は E_INVALIDARG、結果として生成される PSO を割り当てられない場合は E_OUTOFMEMORY が返されることがあります。
解説(Remarks)
この関数はパイプラインの記述を D3D12_PIPELINE_STATE_STREAM_DESC として受け取り、ID3D12PipelineLibrary::LoadGraphicsPipeline および ID3D12PipelineLibrary::LoadComputePipeline 関数の代替となります。これらの関数は、それぞれ柔軟性の低い D3D12_GRAPHICS_PIPELINE_STATE_DESC 構造体と D3D12_COMPUTE_PIPELINE_STATE_DESC 構造体でパイプラインの記述を受け取ります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D12PipelineLibrary1 "{80EABF42-2568-4E5E-BD82-C37F86961DC3}" #usecom global ID3D12PipelineLibrary1 IID_ID3D12PipelineLibrary1 "{}" #comfunc global ID3D12PipelineLibrary1_LoadPipeline 13 wstr,var,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID3D12PipelineLibrary1 "{80EABF42-2568-4E5E-BD82-C37F86961DC3}" #usecom global ID3D12PipelineLibrary1 IID_ID3D12PipelineLibrary1 "{}" #comfunc global ID3D12PipelineLibrary1_LoadPipeline 13 wstr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。