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 参数,以检索单个 write-register 信息。
NumRegistersRead
从中读取指令的寄存器数。 寄存器的范围是 [0...NumRegistersRead-1]。 可以将寄存器号传递给 ID3D11ShaderTrace::GetReadRegister 的 readRegisterIndex 参数,以检索单个读取注册信息。
MiscOperations
使用以下值的组合,这些值通过使用按位 OR 运算进行组合。 生成的值指定跟踪杂项操作的掩码。 这些标志指示着色器操作在未写入任何输出寄存器时可能的效果。 例如,“添加 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
一个数字,指定指令 (的类型,例如 ,add、 mul 等) 。 如果不知道指令类型的编号,则可以忽略此成员。 此成员提供少量便利,代价是稍微膨胀跟踪。 可以使用 ID 成员并映射回原始着色器代码,以检索有关指令的完整信息。
CurrentGlobalCycle
此步骤的全局周期计数。 可以使用此成员通过多个同时跟踪(例如,计算着色器)关联并行线程执行。
备注
此 API 需要 Windows 8 的 Windows 软件开发工具包 (SDK) 。
要求
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
标头 | d3d11shadertracing.h |