D3D11_TRACE_STEP構造体 (d3d11shadertracing.h)
トレース ステップ (命令) について説明します。
構文
typedef struct D3D11_TRACE_STEP {
UINT ID;
BOOL InstructionActive;
UINT8 NumRegistersWritten;
UINT8 NumRegistersRead;
D3D11_TRACE_MISC_OPERATIONS_MASK MiscOperations;
UINT OpcodeType;
UINT64 CurrentGlobalCycle;
} D3D11_TRACE_STEP;
メンバー
ID
シェーダーに存在する実行可能命令へのオフセットとして命令を識別する数値。
HLSL デバッグ情報では、同じ規則が使用されます。 したがって、HLSL 命令は一連の ID と一致します。 その後、ユーザーに表示できる逆アセンブルされた文字列に ID をマップできます。
InstructionActive
命令がアクティブかどうかを示す 値です。 何かが発生した場合、この値は TRUE です。そのため、この構造体内の他のデータを解析する必要があります。 それ以外の場合は何も起こりません。たとえば、スタンプ内の他のピクセルが実行してもフロー制御のために命令が無効になっている場合などです。
NumRegistersWritten
書き込まれる命令のレジスタの数。 レジスタの範囲は [0...NumRegistersWritten-1] です。 ID3D11ShaderTrace::GetWrittenRegister の writenRegisterIndex パラメーターにレジスタ番号を渡して、個々の書き込みレジスタ情報を取得できます。
NumRegistersRead
読み取り元の命令のレジスタの数。 レジスタの範囲は [0...NumRegistersRead-1] です。 ID3D11ShaderTrace::GetReadRegister の readRegisterIndex パラメーターにレジスタ番号を渡して、個々の読み取りレジスタ情報を取得できます。
MiscOperations
ビットごとの OR 演算を使用して結合される次の値の組み合わせ。 結果の値は、トレースのその他の操作のマスクを指定します。 これらのフラグは、出力レジスタを書き込まないシェーダー操作の影響を示します。 たとえば、"add r0, r1 ,r2" 操作は r0 レジスタに書き込みます。そのため、トレース書き込みレジスタの情報を確認して、操作の変更を確認できます。 ただし、一部のシェーダー命令ではレジスタは書き込まれませんが、それらのレジスタには引き続き影響します。
フラグ | 説明 |
---|---|
D3D11_TRACE_MISC_GS_EMIT (0x1) | 操作は、ジオメトリ シェーダー のデータ出力でした。 |
D3D11_TRACE_MISC_GS_CUT (0x2) | 操作はジオメトリ シェーダー ストリップ カットでした。 |
D3D11_TRACE_MISC_PS_DISCARD (0x4) | この操作はピクセル シェーダーの破棄であり、ピクセルは拒否されます。 |
D3D11_TRACE_MISC_GS_EMIT_STREAM (0x8) | 出力先の特定のストリームを指定できる シェーダー モデル 5 を除き、D3D11_TRACE_MISC_GS_EMITと同じです。 |
D3D11_TRACE_MISC_GS_CUT_STREAM (0x10) | D3D11_TRACE_MISC_GS_CUTと同じですが、 シェーダー モデル 5 では、ストリップ カットする特定のストリームを指定できます。 |
D3D11_TRACE_MISC_HALT (0x20) | この操作は、シェーダーの実行を停止するシェーダー停止命令でした。 HLSL abort 組み込み関数によって停止が発生します。 |
D3D11_TRACE_MISC_MESSAGE (0x40) | 操作はシェーダー メッセージ出力であり、情報キューにログに記録できます。 HLSL printf 関数と errorf 組み込み関数によってメッセージが発生します。 |
NumRegistersWritten メンバーが 0 の場合は、このメンバーがまだ空である可能性がありますが、このメンバーを調べます (0)。
OpcodeType
命令の種類 ( add、 mul など) を指定する数値。 命令の種類の番号がわからない場合は、このメンバーを無視できます。 このメンバーは、トレースを少し膨らむコストで若干の利便性を提供します。 ID メンバーを使用し、元のシェーダー コードにマップし直して、命令に関する完全な情報を取得できます。
CurrentGlobalCycle
このステップのグローバルサイクルカウント。 このメンバーを使用すると、コンピューティング シェーダーなど、複数の同時トレースを介して並列スレッド実行を関連付けることができます。
解説
この API には、Windows 8 用 Windows ソフトウェア開発キット (SDK) が必要です。
要件
サポートされている最小のクライアント | Windows 8 [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows Server 2012 [デスクトップ アプリのみ] |
Header | d3d11shadertracing.h |