ID3D12VersionedRootSignatureDeserializer
COM公式ドキュメント
任意のバージョンのシリアル化されたルートシグネチャについて、逆シリアル化された D3D12_ROOT_SIGNATURE_DESC1 データ構造を返すメソッドを含みます。
解説(Remarks)
このインターフェイスは ID3D12RootSignatureDeserializer に代わるものです。
メソッド 2
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
ルートシグネチャ記述構造体を、要求されたバージョンに変換します。
| convertToVersion | D3D_ROOT_SIGNATURE_VERSION | in | 必要とする D3D_ROOT_SIGNATURE_VERSION を指定します。 |
| ppDesc | D3D12_VERSIONED_ROOT_SIGNATURE_DESC** | out | 逆シリアル化されたルートシグネチャを D3D12_VERSIONED_ROOT_SIGNATURE_DESC 構造体として格納します。 |
戻り値
型: HRESULT
このメソッドは HRESULT の成功コードまたはエラーコードを返します。このメソッドは E_OUTOFMEMORY で失敗することがあります。
解説(Remarks)
このメソッドは、変換後のルートシグネチャのために必要であれば追加のストレージを割り当てます (メモリはデシリアライザー インターフェイスが所有します)。変換が行われた場合でも、デシリアライザー インターフェイスは元の逆シリアル化されたルートシグネチャのメモリを解放しません。変換を要求されたすべてのバージョンは、デシリアライザーが破棄されるまで利用できます。
ルートシグネチャを 1.1 から 1.0 に変換すると、すべての D3D12_DESCRIPTOR_RANGE_FLAGS および D3D12_ROOT_DESCRIPTOR_FLAGS が失われます。これは最適化の機会は失われるものの、古いオペレーティング システム上で動作する必要のある互換性のあるルートシグネチャを生成するのに役立ちます。たとえば、複数のバージョンのルートシグネチャをシリアル化してアプリケーションのアセットとともに保存しておき、実行時にオペレーティング システムの機能に応じて適切なバージョンを使用することができます。
ルートシグネチャを 1.0 から 1.1 に変換する場合は、1.0 のセマンティクスに合致するよう適切なフラグが追加されるだけです。
ルートシグネチャのバージョン間の変換を行わずに、ルートシグネチャのレイアウトを取得します。
戻り値
型: D3D12_VERSIONED_ROOT_SIGNATURE_DESC
このメソッドは、ルートシグネチャのレイアウトを記述する D3D12_VERSIONED_ROOT_SIGNATURE_DESC 構造体として、逆シリアル化されたルートシグネチャを返します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D12VersionedRootSignatureDeserializer "{7F91CE67-090C-4BB7-B78E-ED8FF2E31DA0}" #usecom global ID3D12VersionedRootSignatureDeserializer IID_ID3D12VersionedRootSignatureDeserializer "{}" #comfunc global ID3D12VersionedRootSignatureDeserializer_GetRootSignatureDescAtVersion 3 int,var #comfunc global ID3D12VersionedRootSignatureDeserializer_GetUnconvertedRootSignatureDesc 4 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_ID3D12VersionedRootSignatureDeserializer "{7F91CE67-090C-4BB7-B78E-ED8FF2E31DA0}" #usecom global ID3D12VersionedRootSignatureDeserializer IID_ID3D12VersionedRootSignatureDeserializer "{}" #comfunc global ID3D12VersionedRootSignatureDeserializer_GetRootSignatureDescAtVersion 3 int,sptr #comfunc global ID3D12VersionedRootSignatureDeserializer_GetUnconvertedRootSignatureDesc 4 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。