ID3D12Device9
COM公式ドキュメント
仮想アダプターを表します。このインターフェイスは ID3D12Device8 を拡張し、シェーダーキャッシュを管理するためのメソッドを追加します。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
シェーダーキャッシュへのアクセスを提供するオブジェクトを作成します。既存のキャッシュを開く場合と、新しいキャッシュを作成する場合があります。
| pDesc | D3D12_SHADER_CACHE_SESSION_DESC* | in | 作成するシェーダーキャッシュセッションを記述する D3D12_SHADER_CACHE_SESSION_DESC 構造体です。 |
| riid | GUID* | in | シェーダーキャッシュセッションインターフェイスのグローバル一意識別子 (GUID) です。 |
| ppvSession | void** | outoptional | シェーダーキャッシュセッションの ID3D12ShaderCacheSession インターフェイスへのポインターを受け取るメモリブロックへのポインターです。 |
戻り値
型: HRESULT
関数が成功した場合は S_OK を返します。それ以外の場合は HRESULT のエラーコードを返します。
| 戻り値 | 説明 |
|---|---|
| DXGI_ERROR_ALREADY_EXISTS | 既存の識別子を使用してキャッシュを作成しようとしました。D3D12_SHADER_CACHE_SESSION_DESC::Identifier を参照してください。 |
Direct3D またはドライバーが内部的に使用するキャッシュの動作を変更します。
| Kinds | D3D12_SHADER_CACHE_KIND_FLAGS | in | 変更対象のキャッシュです。これらのキャッシュはそれぞれ存在する場合と存在しない場合があります。 |
| Control | D3D12_SHADER_CACHE_CONTROL_FLAGS | in | キャッシュを変更する方法です。DISABLE と ENABLE を同時に渡すことはできません。また、少なくとも 1 つのフラグを渡す必要があります。 |
作成者 ID を指定してコマンドキューを作成します。
| pDesc | D3D12_COMMAND_QUEUE_DESC* | in | コマンドキューを記述する D3D12_COMMAND_QUEUE_DESC を指定します。 |
| CreatorID | GUID* | in | 作成者 ID です。解説を参照してください。 |
| riid | GUID* | in | コマンドキューインターフェイスのグローバル一意識別子 (GUID) です。 |
| ppCommandQueue | void** | out | コマンドキューの ID3D12CommandQueue インターフェイスへのポインターを受け取るメモリブロックへのポインターです。 |
戻り値
型: HRESULT
コマンドキューを作成するためのメモリが不足している場合は E_OUTOFMEMORY を返します。それ以外の場合は S_OK を返します。その他の戻り値については、Direct3D 12 の戻りコードを参照してください。
解説(Remarks)
同一プロセス内の複数のコンポーネントが 1 つの Direct3D 12 デバイスを共有する場合、多くはそれぞれ独立したコマンドキュー上で個別のワークロードを実行することになります。ハードウェア実装によっては、独立したキューが並列に実行できるのは特定の他のコマンドキューとの組み合わせに限られることがあります。
Direct3D 12 はキューを先着順にグループ化しますが、これがすべてのアプリケーションやコンポーネントの設計に適しているとは限りません。Direct3D 12 によるキューのグループ化を制御するために、作成者 ID (コンポーネントごとに一意) を指定して、同じ ID を持つキューだけがグループ化されるように制限できます。可能な場合、コンポーネントは自身のすべてのキューに対して同じ一意の ID を選択してください。なお、Microsoft は Direct3D 12 上に構築される API の Microsoft 製実装で使用するために、いくつかの既知の作成者 ID を予約しています。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D12Device9 "{4C80E962-F032-4F60-BC9E-EBC2CFA1D83C}" #usecom global ID3D12Device9 IID_ID3D12Device9 "{}" #comfunc global ID3D12Device9_CreateShaderCacheSession 73 var,var,sptr #comfunc global ID3D12Device9_ShaderCacheControl 74 int,int #comfunc global ID3D12Device9_CreateCommandQueue1 75 var,var,var,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_ID3D12Device9 "{4C80E962-F032-4F60-BC9E-EBC2CFA1D83C}" #usecom global ID3D12Device9 IID_ID3D12Device9 "{}" #comfunc global ID3D12Device9_CreateShaderCacheSession 73 sptr,sptr,sptr #comfunc global ID3D12Device9_ShaderCacheControl 74 int,int #comfunc global ID3D12Device9_CreateCommandQueue1 75 sptr,sptr,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。