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 指令會與一組識別碼相符。 然後,您可以將識別碼對應至可向使用者顯示的反組譯字串。
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) | 與D3D11_TRACE_MISC_GS_EMIT相同,但 著色器模型 5 除外,您可以在其中指定要發出的特定資料流程。 |
D3D11_TRACE_MISC_GS_CUT_STREAM (0x10) | 與D3D11_TRACE_MISC_GS_CUT相同,但 著色器模型 5 除外,您可以在其中指定要切割的特定資料流程。 |
D3D11_TRACE_MISC_HALT (0x20) | 作業是著色器停止指令,可停止著色器執行。 HLSL 中止 內建函式會導致停止。 |
D3D11_TRACE_MISC_MESSAGE (0x40) | 作業是著色器訊息輸出,可記錄到資訊佇列。 HLSL printf 和 errorf 內建函式會造成訊息。 |
如果 NumRegistersWritten 成員為 0,請檢查此成員,雖然此成員仍然可能是空的 (0) 。
OpcodeType
指定指令類型的數位 (例如 ,新增、 mul等) 。 如果您不知道指令類型的數位,可以忽略此成員。 此成員會提供一些便利性,但代價是略過追蹤。 您可以使用 識別碼 成員,並對應回原始著色器程式碼,以擷取指示的完整資訊。
CurrentGlobalCycle
此步驟的全域週期計數。 您可以使用這個成員,透過多個同時追蹤相互關聯平行線程執行,例如計算著色器。
備註
此 API 需要適用于 Windows 8 的 Windows 軟體發展工具組 (SDK) 。
需求
最低支援的用戶端 | Windows 8 [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2012 [僅限傳統型應用程式] |
標頭 | d3d11shadertracing.h |