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

ID3D12Device9

COM
IID4c80e962-f032-4f60-bc9e-ebc2cfa1d83c継承元ID3D12Device8自前メソッド開始 vtbl73

公式ドキュメント

仮想アダプターを表します。このインターフェイスは ID3D12Device8 を拡張し、シェーダーキャッシュを管理するためのメソッドを追加します。

メソッド 3

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

vtbl 73 HRESULT CreateShaderCacheSession(D3D12_SHADER_CACHE_SESSION_DESC* pDesc, GUID* riid, void** ppvSession)

シェーダーキャッシュへのアクセスを提供するオブジェクトを作成します。既存のキャッシュを開く場合と、新しいキャッシュを作成する場合があります。

pDescD3D12_SHADER_CACHE_SESSION_DESC*in作成するシェーダーキャッシュセッションを記述する D3D12_SHADER_CACHE_SESSION_DESC 構造体です。
riidGUID*inシェーダーキャッシュセッションインターフェイスのグローバル一意識別子 (GUID) です。
ppvSessionvoid**outoptionalシェーダーキャッシュセッションの ID3D12ShaderCacheSession インターフェイスへのポインターを受け取るメモリブロックへのポインターです。

戻り値

型: HRESULT

関数が成功した場合は S_OK を返します。それ以外の場合は HRESULTエラーコードを返します。

戻り値 説明
DXGI_ERROR_ALREADY_EXISTS 既存の識別子を使用してキャッシュを作成しようとしました。D3D12_SHADER_CACHE_SESSION_DESC::Identifier を参照してください。
vtbl 74 HRESULT ShaderCacheControl(D3D12_SHADER_CACHE_KIND_FLAGS Kinds, D3D12_SHADER_CACHE_CONTROL_FLAGS Control)

Direct3D またはドライバーが内部的に使用するキャッシュの動作を変更します。

KindsD3D12_SHADER_CACHE_KIND_FLAGSin変更対象のキャッシュです。これらのキャッシュはそれぞれ存在する場合と存在しない場合があります。
ControlD3D12_SHADER_CACHE_CONTROL_FLAGSinキャッシュを変更する方法です。DISABLEENABLE を同時に渡すことはできません。また、少なくとも 1 つのフラグを渡す必要があります。
vtbl 75 HRESULT CreateCommandQueue1(D3D12_COMMAND_QUEUE_DESC* pDesc, GUID* CreatorID, GUID* riid, void** ppCommandQueue)

作成者 ID を指定してコマンドキューを作成します。

pDescD3D12_COMMAND_QUEUE_DESC*inコマンドキューを記述する D3D12_COMMAND_QUEUE_DESC を指定します。
CreatorIDGUID*in作成者 ID です。解説を参照してください。
riidGUID*inコマンドキューインターフェイスのグローバル一意識別子 (GUID) です。
ppCommandQueuevoid**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 の 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_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 指定が可能。