ID3D11ShaderReflection
COM公式ドキュメント
シェーダーリフレクションインターフェイスは、シェーダーの情報にアクセスします。(ID3D11ShaderReflection)
解説(Remarks)
シェーダーの ID3D11ShaderReflection インターフェイスは、D3DReflect を使用して取得できます。次のコードは、シェーダーから ID3D11ShaderReflection を取得する例です。
pd3dDevice->CreatePixelShader( pPixelShaderBuffer->GetBufferPointer(),
pPixelShaderBuffer->GetBufferSize(), g_pPSClassLinkage, &g_pPixelShader );
ID3D11ShaderReflection* pReflector = NULL;
D3DReflect( pPixelShaderBuffer->GetBufferPointer(), pPixelShaderBuffer->GetBufferSize(),
IID_ID3D11ShaderReflection, (void**) &pReflector);
メソッド 19
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
シェーダーの記述を取得します。(ID3D11ShaderReflection.GetDesc)
| pDesc | D3D11_SHADER_DESC* | out | シェーダーの記述へのポインター。D3D11_SHADER_DESC を参照してください。 |
戻り値
型: HRESULT
Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
ID3D11ShaderReflection::GetConstantBufferByIndex (d3d11shader.h) メソッドは、インデックスを指定して定数バッファーを取得します。
| Index | DWORD | in | 0 から始まるインデックス。 |
戻り値
型: ID3D11ShaderReflectionConstantBuffer*
定数バッファーへのポインター(ID3D11ShaderReflectionConstantBuffer インターフェイスを参照)。
解説(Remarks)
定数バッファーは、スカラー定数またはテクスチャ定数をシェーダーに供給します。1 つのシェーダーは 1 つ以上の定数バッファーを使用できます。最良のパフォーマンスを得るには、更新頻度に基づいて定数をバッファーに分けてください。
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
名前を指定して定数バッファーを取得します。(ID3D11ShaderReflection.GetConstantBufferByName)
| Name | LPSTR | in | 定数バッファーの名前。 |
戻り値
型: ID3D11ShaderReflectionConstantBuffer*
定数バッファーへのポインター(ID3D11ShaderReflectionConstantBuffer インターフェイスを参照)。
解説(Remarks)
定数バッファーは、スカラー定数またはテクスチャ定数をシェーダーに供給します。1 つのシェーダーは 1 つ以上の定数バッファーを使用できます。最良のパフォーマンスを得るには、更新頻度に基づいて定数をバッファーに分けてください。
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
リソースがシェーダーにどのようにバインドされているかを示す記述を取得します。(ID3D11ShaderReflection.GetResourceBindingDesc)
| ResourceIndex | DWORD | in | 0 から始まるリソースのインデックス。 |
| pDesc | D3D11_SHADER_INPUT_BIND_DESC* | out | 入力バインドの記述へのポインター。D3D11_SHADER_INPUT_BIND_DESC を参照してください。 |
戻り値
型: HRESULT
Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
シェーダーは、実行可能コード(コンパイル済みの HLSL 関数)と、シェーダーに入力データを供給する一連のリソースで構成されます。GetResourceBindingDesc は、その一連のリソースのうち 1 つが、シェーダーへの入力としてどのようにバインドされているかについての情報を取得します。ResourceIndex パラメーターでリソースのインデックスを指定します。
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
シェーダーの入力パラメーターの記述を取得します。(ID3D11ShaderReflection.GetInputParameterDesc)
| ParameterIndex | DWORD | in | 0 から始まるパラメーターのインデックス。 |
| pDesc | D3D11_SIGNATURE_PARAMETER_DESC* | out | シェーダー入力シグネチャの記述へのポインター。D3D11_SIGNATURE_PARAMETER_DESC を参照してください。 |
戻り値
型: HRESULT
Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
入力パラメーターの記述は、シェーダーシグネチャとも呼ばれます。シェーダーシグネチャには、パラメーターの順序、データ型、パラメーターのセマンティクスなど、入力パラメーターに関する情報が含まれます。
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
シェーダーの出力パラメーターの記述を取得します。(ID3D11ShaderReflection.GetOutputParameterDesc)
| ParameterIndex | DWORD | in | 0 から始まるパラメーターのインデックス。 |
| pDesc | D3D11_SIGNATURE_PARAMETER_DESC* | out | シェーダー出力パラメーターの記述へのポインター。D3D11_SIGNATURE_PARAMETER_DESC を参照してください。 |
戻り値
型: HRESULT
Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
出力パラメーターの記述は、シェーダーシグネチャとも呼ばれます。シェーダーシグネチャには、パラメーターの順序、データ型、パラメーターのセマンティクスなど、出力パラメーターに関する情報が含まれます。
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
シェーダーのパッチ定数パラメーターの記述を取得します。
| ParameterIndex | DWORD | in | 0 から始まるパラメーターのインデックス。 |
| pDesc | D3D11_SIGNATURE_PARAMETER_DESC* | out | シェーダー入力シグネチャの記述へのポインター。D3D11_SIGNATURE_PARAMETER_DESC を参照してください。 |
戻り値
型: HRESULT
Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
名前を指定して変数を取得します。(ID3D11ShaderReflection.GetVariableByName)
| Name | LPSTR | in | 変数名を含む文字列へのポインター。 |
戻り値
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
リソースがシェーダーにどのようにバインドされているかを示す記述を取得します。(ID3D11ShaderReflection.GetResourceBindingDescByName)
| Name | LPSTR | in | リソースの定数バッファー名。 |
| pDesc | D3D11_SHADER_INPUT_BIND_DESC* | out | 入力バインドの記述へのポインター。D3D11_SHADER_INPUT_BIND_DESC を参照してください。 |
戻り値
型: HRESULT
Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
シェーダーは、実行可能コード(コンパイル済みの HLSL 関数)と、シェーダーに入力データを供給する一連のリソースで構成されます。GetResourceBindingDescByName は、その一連のリソースのうち 1 つが、シェーダーへの入力としてどのようにバインドされているかについての情報を取得します。Name パラメーターでリソースの名前を指定します。
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
Mov 命令の数を取得します。(ID3D11ShaderReflection.GetMovInstructionCount)
戻り値
型: UINT
Mov 命令の数を返します。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
Movc 命令の数を取得します。(ID3D11ShaderReflection.GetMovcInstructionCount)
戻り値
型: UINT
Movc 命令の数を返します。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
変換命令の数を取得します。(ID3D11ShaderReflection.GetConversionInstructionCount)
戻り値
型: UINT
変換命令の数を返します。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
ビット演算命令の数を取得します。(ID3D11ShaderReflection.GetBitwiseInstructionCount)
戻り値
型: UINT
ビット演算命令の数。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
ジオメトリシェーダーの入力プリミティブの記述を取得します。(ID3D11ShaderReflection.GetGSInputPrimitive)
戻り値
入力プリミティブの記述。 D3D_PRIMITIVE_TOPOLOGY、 D3D11_PRIMITIVE_TOPOLOGY、または D3D10_PRIMITIVE_TOPOLOGY を参照してください。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
シェーダーがサンプル周波数シェーダーであるかどうかを示します。(ID3D11ShaderReflection.IsSampleFrequencyShader)
戻り値
型: BOOL
シェーダーがサンプル周波数シェーダーの場合は true を返します。それ以外の場合は false を返します。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
シェーダー内のインターフェイススロットの数を取得します。(ID3D11ShaderReflection.GetNumInterfaceSlots)
戻り値
型: UINT
シェーダー内のインターフェイススロットの数。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
最小の機能レベルを取得します。(ID3D11ShaderReflection.GetMinFeatureLevel)
| pLevel | D3D_FEATURE_LEVEL* | out | 最小の機能レベルを表す D3D_FEATURE_LEVEL の列挙値のいずれかへのポインター。 |
戻り値
型: HRESULT
Direct3D 11 の戻り値コードのいずれかを返します。
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
シェーダーのスレッドグループグリッドの X、Y、Z 各次元のサイズを、スレッド数単位で取得します。(ID3D11ShaderReflection.GetThreadGroupSize)
| pSizeX | DWORD* | outoptional | スレッドグループグリッドの x 次元のサイズ(スレッド数単位)へのポインター。最大サイズは 1024 です。 |
| pSizeY | DWORD* | outoptional | スレッドグループグリッドの y 次元のサイズ(スレッド数単位)へのポインター。最大サイズは 1024 です。 |
| pSizeZ | DWORD* | outoptional | スレッドグループグリッドの z 次元のサイズ(スレッド数単位)へのポインター。最大サイズは 64 です。 |
戻り値
解説(Remarks)
このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。
コンピュートシェーダーを記述する際には、単一のスレッドグループの動作のみを定義します。複数のスレッドグループが必要な場合、それらを発行するのは ID3D11DeviceContext::Dispatch 呼び出しの役割です。
シェーダーの要件を示すフラグのグループを取得します。(ID3D11ShaderReflection.GetRequiresFlags)
戻り値
型: UINT64
1 つ以上のシェーダー要件フラグの組み合わせを含む値。各フラグはシェーダーの要件を指定します。既定値の 0 は要件がないことを意味します。
| シェーダー要件フラグ | 説明 |
|---|---|
| D3D_SHADER_REQUIRES_DOUBLES | シェーダーは、グラフィックスドライバーとハードウェアが double データ型をサポートしていることを必要とします。詳細については、D3D11_FEATURE_DATA_DOUBLES を参照してください。 |
| D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL | シェーダーは早期深度ステンシルを必要とします。 |
| D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE | シェーダーは、すべてのパイプラインステージでのアンオーダードアクセスビュー (UAV) を必要とします。 |
| D3D_SHADER_REQUIRES_64_UAVS | シェーダーは 64 個の UAV を必要とします。 |
| D3D_SHADER_REQUIRES_MINIMUM_PRECISION | シェーダーは、グラフィックスドライバーとハードウェアが最小精度をサポートしていることを必要とします。詳細については、HLSL の最小精度の使用を参照してください。 |
| D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS | シェーダーは、グラフィックスドライバーとハードウェアが拡張 double 命令をサポートしていることを必要とします。詳細については、D3D11_FEATURE_DATA_D3D11_OPTIONS の ExtendedDoublesShaderInstructions メンバーを参照してください。 |
| D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS | シェーダーは、グラフィックスドライバーとハードウェアがシェーダー内の msad4 組み込み関数をサポートしていることを必要とします。詳細については、D3D11_FEATURE_DATA_D3D11_OPTIONS の SAD4ShaderInstructions メンバーを参照してください。 |
| D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING | シェーダーは、グラフィックスドライバーとハードウェアが Direct3D 9 のシャドウサポートに対応していることを必要とします。詳細については、D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT を参照してください。 |
| D3D_SHADER_REQUIRES_TILED_RESOURCES | シェーダーは、グラフィックスドライバーとハードウェアがタイルリソースをサポートしていることを必要とします。詳細については、GetResourceTiling を参照してください。 |
解説(Remarks)
D3D11Shader.h ヘッダーでは、シェーダー要件フラグは次のように定義されています。
#define D3D_SHADER_REQUIRES_DOUBLES 0x00000001
#define D3D_SHADER_REQUIRES_EARLY_DEPTH_STENCIL 0x00000002
#define D3D_SHADER_REQUIRES_UAVS_AT_EVERY_STAGE 0x00000004
#define D3D_SHADER_REQUIRES_64_UAVS 0x00000008
#define D3D_SHADER_REQUIRES_MINIMUM_PRECISION 0x00000010
#define D3D_SHADER_REQUIRES_11_1_DOUBLE_EXTENSIONS 0x00000020
#define D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS 0x00000040
#define D3D_SHADER_REQUIRES_LEVEL_9_COMPARISON_FILTERING 0x00000080
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_ID3D11ShaderReflection "{8D536CA1-0CCA-4956-A837-786963755584}" #usecom global ID3D11ShaderReflection IID_ID3D11ShaderReflection "{}" #comfunc global ID3D11ShaderReflection_GetDesc 3 var #comfunc global ID3D11ShaderReflection_GetConstantBufferByIndex 4 int #comfunc global ID3D11ShaderReflection_GetConstantBufferByName 5 str #comfunc global ID3D11ShaderReflection_GetResourceBindingDesc 6 int,var #comfunc global ID3D11ShaderReflection_GetInputParameterDesc 7 int,var #comfunc global ID3D11ShaderReflection_GetOutputParameterDesc 8 int,var #comfunc global ID3D11ShaderReflection_GetPatchConstantParameterDesc 9 int,var #comfunc global ID3D11ShaderReflection_GetVariableByName 10 str #comfunc global ID3D11ShaderReflection_GetResourceBindingDescByName 11 str,var #comfunc global ID3D11ShaderReflection_GetMovInstructionCount 12 #comfunc global ID3D11ShaderReflection_GetMovcInstructionCount 13 #comfunc global ID3D11ShaderReflection_GetConversionInstructionCount 14 #comfunc global ID3D11ShaderReflection_GetBitwiseInstructionCount 15 #comfunc global ID3D11ShaderReflection_GetGSInputPrimitive 16 #comfunc global ID3D11ShaderReflection_IsSampleFrequencyShader 17 #comfunc global ID3D11ShaderReflection_GetNumInterfaceSlots 18 #comfunc global ID3D11ShaderReflection_GetMinFeatureLevel 19 var #comfunc global ID3D11ShaderReflection_GetThreadGroupSize 20 var,var,var #comfunc global ID3D11ShaderReflection_GetRequiresFlags 21 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_ID3D11ShaderReflection "{8D536CA1-0CCA-4956-A837-786963755584}" #usecom global ID3D11ShaderReflection IID_ID3D11ShaderReflection "{}" #comfunc global ID3D11ShaderReflection_GetDesc 3 sptr #comfunc global ID3D11ShaderReflection_GetConstantBufferByIndex 4 int #comfunc global ID3D11ShaderReflection_GetConstantBufferByName 5 str #comfunc global ID3D11ShaderReflection_GetResourceBindingDesc 6 int,sptr #comfunc global ID3D11ShaderReflection_GetInputParameterDesc 7 int,sptr #comfunc global ID3D11ShaderReflection_GetOutputParameterDesc 8 int,sptr #comfunc global ID3D11ShaderReflection_GetPatchConstantParameterDesc 9 int,sptr #comfunc global ID3D11ShaderReflection_GetVariableByName 10 str #comfunc global ID3D11ShaderReflection_GetResourceBindingDescByName 11 str,sptr #comfunc global ID3D11ShaderReflection_GetMovInstructionCount 12 #comfunc global ID3D11ShaderReflection_GetMovcInstructionCount 13 #comfunc global ID3D11ShaderReflection_GetConversionInstructionCount 14 #comfunc global ID3D11ShaderReflection_GetBitwiseInstructionCount 15 #comfunc global ID3D11ShaderReflection_GetGSInputPrimitive 16 #comfunc global ID3D11ShaderReflection_IsSampleFrequencyShader 17 #comfunc global ID3D11ShaderReflection_GetNumInterfaceSlots 18 #comfunc global ID3D11ShaderReflection_GetMinFeatureLevel 19 sptr #comfunc global ID3D11ShaderReflection_GetThreadGroupSize 20 sptr,sptr,sptr #comfunc global ID3D11ShaderReflection_GetRequiresFlags 21 ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。