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

ID3D11ShaderReflection

COM
IID8d536ca1-0cca-4956-a837-786963755584継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

シェーダーリフレクションインターフェイスは、シェーダーの情報にアクセスします。(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。

vtbl 3 HRESULT GetDesc(D3D11_SHADER_DESC* pDesc)

シェーダーの記述を取得します。(ID3D11ShaderReflection.GetDesc)

pDescD3D11_SHADER_DESC*outシェーダーの記述へのポインター。D3D11_SHADER_DESC を参照してください。

戻り値

型: HRESULT

Direct3D 11 の戻り値コードのいずれかを返します。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 4 ID3D11ShaderReflectionConstantBuffer* GetConstantBufferByIndex(DWORD Index)

ID3D11ShaderReflection::GetConstantBufferByIndex (d3d11shader.h) メソッドは、インデックスを指定して定数バッファーを取得します。

IndexDWORDin0 から始まるインデックス。

戻り値

型: ID3D11ShaderReflectionConstantBuffer*

定数バッファーへのポインター(ID3D11ShaderReflectionConstantBuffer インターフェイスを参照)。

解説(Remarks)

定数バッファーは、スカラー定数またはテクスチャ定数をシェーダーに供給します。1 つのシェーダーは 1 つ以上の定数バッファーを使用できます。最良のパフォーマンスを得るには、更新頻度に基づいて定数をバッファーに分けてください。

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 5 ID3D11ShaderReflectionConstantBuffer* GetConstantBufferByName(LPSTR Name)

名前を指定して定数バッファーを取得します。(ID3D11ShaderReflection.GetConstantBufferByName)

NameLPSTRin定数バッファーの名前。

戻り値

型: ID3D11ShaderReflectionConstantBuffer*

定数バッファーへのポインター(ID3D11ShaderReflectionConstantBuffer インターフェイスを参照)。

解説(Remarks)

定数バッファーは、スカラー定数またはテクスチャ定数をシェーダーに供給します。1 つのシェーダーは 1 つ以上の定数バッファーを使用できます。最良のパフォーマンスを得るには、更新頻度に基づいて定数をバッファーに分けてください。

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 6 HRESULT GetResourceBindingDesc(DWORD ResourceIndex, D3D11_SHADER_INPUT_BIND_DESC* pDesc)

リソースがシェーダーにどのようにバインドされているかを示す記述を取得します。(ID3D11ShaderReflection.GetResourceBindingDesc)

ResourceIndexDWORDin0 から始まるリソースのインデックス。
pDescD3D11_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 でホストされます。

vtbl 7 HRESULT GetInputParameterDesc(DWORD ParameterIndex, D3D11_SIGNATURE_PARAMETER_DESC* pDesc)

シェーダーの入力パラメーターの記述を取得します。(ID3D11ShaderReflection.GetInputParameterDesc)

ParameterIndexDWORDin0 から始まるパラメーターのインデックス。
pDescD3D11_SIGNATURE_PARAMETER_DESC*outシェーダー入力シグネチャの記述へのポインター。D3D11_SIGNATURE_PARAMETER_DESC を参照してください。

戻り値

型: HRESULT

Direct3D 11 の戻り値コードのいずれかを返します。

解説(Remarks)

入力パラメーターの記述は、シェーダーシグネチャとも呼ばれます。シェーダーシグネチャには、パラメーターの順序、データ型、パラメーターのセマンティクスなど、入力パラメーターに関する情報が含まれます。

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 8 HRESULT GetOutputParameterDesc(DWORD ParameterIndex, D3D11_SIGNATURE_PARAMETER_DESC* pDesc)

シェーダーの出力パラメーターの記述を取得します。(ID3D11ShaderReflection.GetOutputParameterDesc)

ParameterIndexDWORDin0 から始まるパラメーターのインデックス。
pDescD3D11_SIGNATURE_PARAMETER_DESC*outシェーダー出力パラメーターの記述へのポインター。D3D11_SIGNATURE_PARAMETER_DESC を参照してください。

戻り値

型: HRESULT

Direct3D 11 の戻り値コードのいずれかを返します。

解説(Remarks)

出力パラメーターの記述は、シェーダーシグネチャとも呼ばれます。シェーダーシグネチャには、パラメーターの順序、データ型、パラメーターのセマンティクスなど、出力パラメーターに関する情報が含まれます。

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 9 HRESULT GetPatchConstantParameterDesc(DWORD ParameterIndex, D3D11_SIGNATURE_PARAMETER_DESC* pDesc)

シェーダーのパッチ定数パラメーターの記述を取得します。

ParameterIndexDWORDin0 から始まるパラメーターのインデックス。
pDescD3D11_SIGNATURE_PARAMETER_DESC*outシェーダー入力シグネチャの記述へのポインター。D3D11_SIGNATURE_PARAMETER_DESC を参照してください。

戻り値

型: HRESULT

Direct3D 11 の戻り値コードのいずれかを返します。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 10 ID3D11ShaderReflectionVariable* GetVariableByName(LPSTR Name)

名前を指定して変数を取得します。(ID3D11ShaderReflection.GetVariableByName)

NameLPSTRin変数名を含む文字列へのポインター。

戻り値

型: ID3D11ShaderReflectionVariable*

ID3D11ShaderReflectionVariable インターフェイスを返します。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 11 HRESULT GetResourceBindingDescByName(LPSTR Name, D3D11_SHADER_INPUT_BIND_DESC* pDesc)

リソースがシェーダーにどのようにバインドされているかを示す記述を取得します。(ID3D11ShaderReflection.GetResourceBindingDescByName)

NameLPSTRinリソースの定数バッファー名。
pDescD3D11_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 でホストされます。

vtbl 12 DWORD GetMovInstructionCount()

Mov 命令の数を取得します。(ID3D11ShaderReflection.GetMovInstructionCount)

戻り値

型: UINT

Mov 命令の数を返します。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 13 DWORD GetMovcInstructionCount()

Movc 命令の数を取得します。(ID3D11ShaderReflection.GetMovcInstructionCount)

戻り値

型: UINT

Movc 命令の数を返します。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 14 DWORD GetConversionInstructionCount()

変換命令の数を取得します。(ID3D11ShaderReflection.GetConversionInstructionCount)

戻り値

型: UINT

変換命令の数を返します。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 15 DWORD GetBitwiseInstructionCount()

ビット演算命令の数を取得します。(ID3D11ShaderReflection.GetBitwiseInstructionCount)

戻り値

型: UINT

ビット演算命令の数。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 16 D3D_PRIMITIVE GetGSInputPrimitive()

ジオメトリシェーダーの入力プリミティブの記述を取得します。(ID3D11ShaderReflection.GetGSInputPrimitive)

戻り値

型: D3D_PRIMITIVE

入力プリミティブの記述。 D3D_PRIMITIVE_TOPOLOGYD3D11_PRIMITIVE_TOPOLOGY、または D3D10_PRIMITIVE_TOPOLOGY を参照してください。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 17 BOOL IsSampleFrequencyShader()

シェーダーがサンプル周波数シェーダーであるかどうかを示します。(ID3D11ShaderReflection.IsSampleFrequencyShader)

戻り値

型: BOOL

シェーダーがサンプル周波数シェーダーの場合は true を返します。それ以外の場合は false を返します。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 18 DWORD GetNumInterfaceSlots()

シェーダー内のインターフェイススロットの数を取得します。(ID3D11ShaderReflection.GetNumInterfaceSlots)

戻り値

型: UINT

シェーダー内のインターフェイススロットの数。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 19 HRESULT GetMinFeatureLevel(D3D_FEATURE_LEVEL* pLevel)

最小の機能レベルを取得します。(ID3D11ShaderReflection.GetMinFeatureLevel)

pLevelD3D_FEATURE_LEVEL*out最小の機能レベルを表す D3D_FEATURE_LEVEL の列挙値のいずれかへのポインター。

戻り値

型: HRESULT

Direct3D 11 の戻り値コードのいずれかを返します。

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

vtbl 20 DWORD GetThreadGroupSize(DWORD* pSizeX, DWORD* pSizeY, DWORD* pSizeZ)

シェーダーのスレッドグループグリッドの X、Y、Z 各次元のサイズを、スレッド数単位で取得します。(ID3D11ShaderReflection.GetThreadGroupSize)

pSizeXDWORD*outoptionalスレッドグループグリッドの x 次元のサイズ(スレッド数単位)へのポインター。最大サイズは 1024 です。
pSizeYDWORD*outoptionalスレッドグループグリッドの y 次元のサイズ(スレッド数単位)へのポインター。最大サイズは 1024 です。
pSizeZDWORD*outoptionalスレッドグループグリッドの z 次元のサイズ(スレッド数単位)へのポインター。最大サイズは 64 です。

戻り値

型: UINT

各次元のサイズの積を計算して、スレッドグループグリッドの合計サイズ(スレッド数単位)を返します。

*pSizeX * *pSizeY * *pSizeZ;

解説(Remarks)

このメソッドのインターフェイスは、Out-of-Box DLL である D3DCompiler_xx.dll でホストされます。

コンピュートシェーダーを記述する際には、単一のスレッドグループの動作のみを定義します。複数のスレッドグループが必要な場合、それらを発行するのは ID3D11DeviceContext::Dispatch 呼び出しの役割です。

vtbl 21 ULONGLONG GetRequiresFlags()

シェーダーの要件を示すフラグのグループを取得します。(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_OPTIONSExtendedDoublesShaderInstructions メンバーを参照してください。
D3D_SHADER_REQUIRES_11_1_SHADER_EXTENSIONS シェーダーは、グラフィックスドライバーとハードウェアがシェーダー内の msad4 組み込み関数をサポートしていることを必要とします。詳細については、D3D11_FEATURE_DATA_D3D11_OPTIONSSAD4ShaderInstructions メンバーを参照してください。
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 の 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_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 方式にも切替可。