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::GetWrittenRegisterwritenRegisterIndex パラメーターにレジスタ番号を渡して、個々の書き込みレジスタ情報を取得できます。

NumRegistersRead

読み取り元の命令のレジスタの数。 レジスタの範囲は [0...NumRegistersRead-1] です。 ID3D11ShaderTrace::GetReadRegisterreadRegisterIndex パラメーターにレジスタ番号を渡して、個々の読み取りレジスタ情報を取得できます。

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

命令の種類 ( addmul など) を指定する数値。 命令の種類の番号がわからない場合は、このメンバーを無視できます。 このメンバーは、トレースを少し膨らむコストで若干の利便性を提供します。 ID メンバーを使用し、元のシェーダー コードにマップし直して、命令に関する完全な情報を取得できます。

CurrentGlobalCycle

このステップのグローバルサイクルカウント。 このメンバーを使用すると、コンピューティング シェーダーなど、複数の同時トレースを介して並列スレッド実行を関連付けることができます。

メモ 実行中の同じ時点で複数のスレッドが同じ CurrentGlobalCycle をログに記録する場合があります。
 

解説

この API には、Windows 8 用 Windows ソフトウェア開発キット (SDK) が必要です。

要件

   
サポートされている最小のクライアント Windows 8 [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2012 [デスクトップ アプリのみ]
Header d3d11shadertracing.h

関連項目

シェーダー構造体