From: Józef Kucia jkucia@codeweavers.com
Signed-off-by: Józef Kucia jkucia@codeweavers.com --- libs/vkd3d-shader/trace.c | 484 ++++++++++++++++++++++++---------------------- 1 file changed, 249 insertions(+), 235 deletions(-)
diff --git a/libs/vkd3d-shader/trace.c b/libs/vkd3d-shader/trace.c index f987e3caa877..420ccea37f94 100644 --- a/libs/vkd3d-shader/trace.c +++ b/libs/vkd3d-shader/trace.c @@ -1340,13 +1340,260 @@ static void shader_dump_instruction_flags(struct vkd3d_string_buffer *buffer, } }
+static void shader_dump_instruction(struct vkd3d_string_buffer *buffer, + const struct vkd3d_shader_instruction *ins, const struct vkd3d_shader_version *shader_version) +{ + unsigned int i; + + switch (ins->handler_idx) + { + case VKD3DSIH_DCL: + case VKD3DSIH_DCL_UAV_TYPED: + shader_dump_decl_usage(buffer, &ins->declaration.semantic, ins->flags, shader_version); + shader_dump_ins_modifiers(buffer, &ins->declaration.semantic.reg); + shader_addline(buffer, " "); + shader_dump_dst_param(buffer, &ins->declaration.semantic.reg, shader_version); + break; + + case VKD3DSIH_DCL_CONSTANT_BUFFER: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_src_param(buffer, &ins->declaration.src, shader_version); + shader_addline(buffer, ", %s", + ins->flags & VKD3DSI_INDEXED_DYNAMIC ? "dynamicIndexed" : "immediateIndexed"); + break; + + case VKD3DSIH_DCL_FUNCTION_BODY: + shader_addline(buffer, "%s fb%u", + shader_opcode_names[ins->handler_idx], ins->declaration.index); + break; + + case VKD3DSIH_DCL_FUNCTION_TABLE: + shader_addline(buffer, "%s ft%u = {...}", + shader_opcode_names[ins->handler_idx], ins->declaration.index); + break; + + case VKD3DSIH_DCL_GLOBAL_FLAGS: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_global_flags(buffer, ins->flags); + break; + + case VKD3DSIH_DCL_HS_MAX_TESSFACTOR: + shader_addline(buffer, "%s %.8e", shader_opcode_names[ins->handler_idx], + ins->declaration.max_tessellation_factor); + break; + + case VKD3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER: + shader_addline(buffer, "%s {\n", shader_opcode_names[ins->handler_idx]); + for (i = 0; i < ins->declaration.icb->vec4_count; ++i) + { + shader_addline(buffer, " {0x%08x, 0x%08x, 0x%08x, 0x%08x},\n", + ins->declaration.icb->data[4 * i + 0], + ins->declaration.icb->data[4 * i + 1], + ins->declaration.icb->data[4 * i + 2], + ins->declaration.icb->data[4 * i + 3]); + } + shader_addline(buffer, "}"); + break; + + case VKD3DSIH_DCL_INDEX_RANGE: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_dst_param(buffer, &ins->declaration.index_range.first_register, shader_version); + shader_addline(buffer, " %u", ins->declaration.index_range.last_register); + break; + + case VKD3DSIH_DCL_INDEXABLE_TEMP: + shader_addline(buffer, "%s x[%u][%u], %u", shader_opcode_names[ins->handler_idx], + ins->declaration.indexable_temp.register_idx, + ins->declaration.indexable_temp.register_size, + ins->declaration.indexable_temp.component_count); + break; + + case VKD3DSIH_DCL_INPUT_PS: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_interpolation_mode(buffer, ins->flags); + shader_addline(buffer, " "); + shader_dump_dst_param(buffer, &ins->declaration.dst, shader_version); + break; + + case VKD3DSIH_DCL_INPUT_PS_SGV: + case VKD3DSIH_DCL_INPUT_SGV: + case VKD3DSIH_DCL_INPUT_SIV: + case VKD3DSIH_DCL_OUTPUT_SIV: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_dst_param(buffer, &ins->declaration.register_semantic.reg, shader_version); + shader_addline(buffer, ", "); + shader_dump_shader_input_sysval_semantic(buffer, ins->declaration.register_semantic.sysval_semantic); + break; + + case VKD3DSIH_DCL_INPUT_PS_SIV: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_interpolation_mode(buffer, ins->flags); + shader_addline(buffer, " "); + shader_dump_dst_param(buffer, &ins->declaration.register_semantic.reg, shader_version); + shader_addline(buffer, ", "); + shader_dump_shader_input_sysval_semantic(buffer, ins->declaration.register_semantic.sysval_semantic); + break; + + case VKD3DSIH_DCL_INPUT: + case VKD3DSIH_DCL_OUTPUT: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_dst_param(buffer, &ins->declaration.dst, shader_version); + break; + + case VKD3DSIH_DCL_INPUT_PRIMITIVE: + case VKD3DSIH_DCL_OUTPUT_TOPOLOGY: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_primitive_type(buffer, &ins->declaration.primitive_type); + break; + + case VKD3DSIH_DCL_INTERFACE: + shader_addline(buffer, "%s fp[%u][%u][%u] = {...}", + shader_opcode_names[ins->handler_idx], ins->declaration.fp.index, + ins->declaration.fp.array_size, ins->declaration.fp.body_count); + break; + + case VKD3DSIH_DCL_RESOURCE_RAW: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_dst_param(buffer, &ins->declaration.dst, shader_version); + break; + + case VKD3DSIH_DCL_RESOURCE_STRUCTURED: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_dst_param(buffer, &ins->declaration.structured_resource.reg, shader_version); + shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride); + break; + + case VKD3DSIH_DCL_SAMPLER: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_dst_param(buffer, &ins->declaration.dst, shader_version); + if (ins->flags == VKD3DSI_SAMPLER_COMPARISON_MODE) + shader_addline(buffer, ", comparisonMode"); + break; + + case VKD3DSIH_DCL_TEMPS: + case VKD3DSIH_DCL_GS_INSTANCES: + case VKD3DSIH_DCL_HS_FORK_PHASE_INSTANCE_COUNT: + case VKD3DSIH_DCL_HS_JOIN_PHASE_INSTANCE_COUNT: + case VKD3DSIH_DCL_INPUT_CONTROL_POINT_COUNT: + case VKD3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT: + case VKD3DSIH_DCL_VERTICES_OUT: + shader_addline(buffer, "%s %u", shader_opcode_names[ins->handler_idx], ins->declaration.count); + break; + + case VKD3DSIH_DCL_TESSELLATOR_DOMAIN: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_tessellator_domain(buffer, ins->declaration.tessellator_domain); + break; + + case VKD3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_tessellator_output_primitive(buffer, ins->declaration.tessellator_output_primitive); + break; + + case VKD3DSIH_DCL_TESSELLATOR_PARTITIONING: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_tessellator_partitioning(buffer, ins->declaration.tessellator_partitioning); + break; + + case VKD3DSIH_DCL_TGSM_RAW: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_dst_param(buffer, &ins->declaration.tgsm_raw.reg, shader_version); + shader_addline(buffer, ", %u", ins->declaration.tgsm_raw.byte_count); + break; + + case VKD3DSIH_DCL_TGSM_STRUCTURED: + shader_addline(buffer, "%s ", shader_opcode_names[ins->handler_idx]); + shader_dump_dst_param(buffer, &ins->declaration.tgsm_structured.reg, shader_version); + shader_addline(buffer, ", %u, %u", ins->declaration.tgsm_structured.byte_stride, + ins->declaration.tgsm_structured.structure_count); + break; + + case VKD3DSIH_DCL_THREAD_GROUP: + shader_addline(buffer, "%s %u, %u, %u", shader_opcode_names[ins->handler_idx], + ins->declaration.thread_group_size.x, + ins->declaration.thread_group_size.y, + ins->declaration.thread_group_size.z); + break; + + case VKD3DSIH_DCL_UAV_RAW: + shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]); + shader_dump_uav_flags(buffer, ins->flags); + shader_addline(buffer, " "); + shader_dump_dst_param(buffer, &ins->declaration.dst, shader_version); + break; + + case VKD3DSIH_DCL_UAV_STRUCTURED: + shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]); + shader_dump_uav_flags(buffer, ins->flags); + shader_addline(buffer, " "); + shader_dump_dst_param(buffer, &ins->declaration.structured_resource.reg, shader_version); + shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride); + break; + + case VKD3DSIH_DEF: + shader_addline(buffer, "def c%u = %.8e, %.8e, %.8e, %.8e", + shader_get_float_offset(ins->dst[0].reg.type, ins->dst[0].reg.idx[0].offset), + ins->src[0].reg.u.immconst_float[0], ins->src[0].reg.u.immconst_float[1], + ins->src[0].reg.u.immconst_float[2], ins->src[0].reg.u.immconst_float[3]); + break; + + case VKD3DSIH_DEFI: + shader_addline(buffer, "defi i%u = %d, %d, %d, %d", ins->dst[0].reg.idx[0].offset, + ins->src[0].reg.u.immconst_uint[0], ins->src[0].reg.u.immconst_uint[1], + ins->src[0].reg.u.immconst_uint[2], ins->src[0].reg.u.immconst_uint[3]); + break; + + case VKD3DSIH_DEFB: + shader_addline(buffer, "defb b%u = %s", + ins->dst[0].reg.idx[0].offset, ins->src[0].reg.u.immconst_uint[0] ? "true" : "false"); + break; + + default: + if (ins->predicate) + { + shader_addline(buffer, "("); + shader_dump_src_param(buffer, ins->predicate, shader_version); + shader_addline(buffer, ") "); + } + + /* PixWin marks instructions with the coissue flag with a '+' */ + if (ins->coissue) + shader_addline(buffer, "+"); + + shader_addline(buffer, "%s", shader_opcode_names[ins->handler_idx]); + + shader_dump_instruction_flags(buffer, ins, shader_version); + if (vkd3d_shader_instruction_has_texel_offset(ins)) + { + shader_addline(buffer, "(%d,%d,%d)", + ins->texel_offset.u, ins->texel_offset.v, ins->texel_offset.w); + } + + for (i = 0; i < ins->dst_count; ++i) + { + shader_dump_ins_modifiers(buffer, &ins->dst[i]); + shader_addline(buffer, !i ? " " : ", "); + shader_dump_dst_param(buffer, &ins->dst[i], shader_version); + } + + /* Other source tokens */ + for (i = ins->dst_count; i < (ins->dst_count + ins->src_count); ++i) + { + shader_addline(buffer, !i ? " " : ", "); + shader_dump_src_param(buffer, &ins->src[i - ins->dst_count], shader_version); + } + break; + } + + shader_addline(buffer, "\n"); +} + void vkd3d_shader_trace(void *data) { struct vkd3d_shader_version shader_version; struct vkd3d_string_buffer buffer; const char *p, *q; const DWORD *ptr; - DWORD i;
if (!string_buffer_init(&buffer)) { @@ -1369,240 +1616,7 @@ void vkd3d_shader_trace(void *data) continue; }
- if (ins.handler_idx == VKD3DSIH_DCL || ins.handler_idx == VKD3DSIH_DCL_UAV_TYPED) - { - shader_dump_decl_usage(&buffer, &ins.declaration.semantic, ins.flags, &shader_version); - shader_dump_ins_modifiers(&buffer, &ins.declaration.semantic.reg); - shader_addline(&buffer, " "); - shader_dump_dst_param(&buffer, &ins.declaration.semantic.reg, &shader_version); - } - else if (ins.handler_idx == VKD3DSIH_DCL_CONSTANT_BUFFER) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_src_param(&buffer, &ins.declaration.src, &shader_version); - shader_addline(&buffer, ", %s", - ins.flags & VKD3DSI_INDEXED_DYNAMIC ? "dynamicIndexed" : "immediateIndexed"); - } - else if (ins.handler_idx == VKD3DSIH_DCL_FUNCTION_BODY) - { - shader_addline(&buffer, "%s fb%u", - shader_opcode_names[ins.handler_idx], ins.declaration.index); - } - else if (ins.handler_idx == VKD3DSIH_DCL_FUNCTION_TABLE) - { - shader_addline(&buffer, "%s ft%u = {...}", - shader_opcode_names[ins.handler_idx], ins.declaration.index); - } - else if (ins.handler_idx == VKD3DSIH_DCL_GLOBAL_FLAGS) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_global_flags(&buffer, ins.flags); - } - else if (ins.handler_idx == VKD3DSIH_DCL_HS_MAX_TESSFACTOR) - { - shader_addline(&buffer, "%s %.8e", shader_opcode_names[ins.handler_idx], - ins.declaration.max_tessellation_factor); - } - else if (ins.handler_idx == VKD3DSIH_DCL_IMMEDIATE_CONSTANT_BUFFER) - { - shader_addline(&buffer, "%s {\n", shader_opcode_names[ins.handler_idx]); - for (i = 0; i < ins.declaration.icb->vec4_count; ++i) - { - shader_addline(&buffer, " {0x%08x, 0x%08x, 0x%08x, 0x%08x},\n", - ins.declaration.icb->data[4 * i + 0], - ins.declaration.icb->data[4 * i + 1], - ins.declaration.icb->data[4 * i + 2], - ins.declaration.icb->data[4 * i + 3]); - } - shader_addline(&buffer, "}"); - } - else if (ins.handler_idx == VKD3DSIH_DCL_INDEX_RANGE) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_dst_param(&buffer, &ins.declaration.index_range.first_register, &shader_version); - shader_addline(&buffer, " %u", ins.declaration.index_range.last_register); - } - else if (ins.handler_idx == VKD3DSIH_DCL_INDEXABLE_TEMP) - { - shader_addline(&buffer, "%s x[%u][%u], %u", shader_opcode_names[ins.handler_idx], - ins.declaration.indexable_temp.register_idx, - ins.declaration.indexable_temp.register_size, - ins.declaration.indexable_temp.component_count); - } - else if (ins.handler_idx == VKD3DSIH_DCL_INPUT_PS) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_interpolation_mode(&buffer, ins.flags); - shader_addline(&buffer, " "); - shader_dump_dst_param(&buffer, &ins.declaration.dst, &shader_version); - } - else if (ins.handler_idx == VKD3DSIH_DCL_INPUT_PS_SGV - || ins.handler_idx == VKD3DSIH_DCL_INPUT_SGV - || ins.handler_idx == VKD3DSIH_DCL_INPUT_SIV - || ins.handler_idx == VKD3DSIH_DCL_OUTPUT_SIV) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_dst_param(&buffer, &ins.declaration.register_semantic.reg, &shader_version); - shader_addline(&buffer, ", "); - shader_dump_shader_input_sysval_semantic(&buffer, ins.declaration.register_semantic.sysval_semantic); - } - else if (ins.handler_idx == VKD3DSIH_DCL_INPUT_PS_SIV) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_interpolation_mode(&buffer, ins.flags); - shader_addline(&buffer, " "); - shader_dump_dst_param(&buffer, &ins.declaration.register_semantic.reg, &shader_version); - shader_addline(&buffer, ", "); - shader_dump_shader_input_sysval_semantic(&buffer, ins.declaration.register_semantic.sysval_semantic); - } - else if (ins.handler_idx == VKD3DSIH_DCL_INPUT - || ins.handler_idx == VKD3DSIH_DCL_OUTPUT) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_dst_param(&buffer, &ins.declaration.dst, &shader_version); - } - else if (ins.handler_idx == VKD3DSIH_DCL_INPUT_PRIMITIVE - || ins.handler_idx == VKD3DSIH_DCL_OUTPUT_TOPOLOGY) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_primitive_type(&buffer, &ins.declaration.primitive_type); - } - else if (ins.handler_idx == VKD3DSIH_DCL_INTERFACE) - { - shader_addline(&buffer, "%s fp[%u][%u][%u] = {...}", - shader_opcode_names[ins.handler_idx], ins.declaration.fp.index, - ins.declaration.fp.array_size, ins.declaration.fp.body_count); - } - else if (ins.handler_idx == VKD3DSIH_DCL_RESOURCE_RAW) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_dst_param(&buffer, &ins.declaration.dst, &shader_version); - } - else if (ins.handler_idx == VKD3DSIH_DCL_RESOURCE_STRUCTURED) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_dst_param(&buffer, &ins.declaration.structured_resource.reg, &shader_version); - shader_addline(&buffer, ", %u", ins.declaration.structured_resource.byte_stride); - } - else if (ins.handler_idx == VKD3DSIH_DCL_SAMPLER) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_dst_param(&buffer, &ins.declaration.dst, &shader_version); - if (ins.flags == VKD3DSI_SAMPLER_COMPARISON_MODE) - shader_addline(&buffer, ", comparisonMode"); - } - else if (ins.handler_idx == VKD3DSIH_DCL_TEMPS - || ins.handler_idx == VKD3DSIH_DCL_GS_INSTANCES - || ins.handler_idx == VKD3DSIH_DCL_HS_FORK_PHASE_INSTANCE_COUNT - || ins.handler_idx == VKD3DSIH_DCL_HS_JOIN_PHASE_INSTANCE_COUNT - || ins.handler_idx == VKD3DSIH_DCL_INPUT_CONTROL_POINT_COUNT - || ins.handler_idx == VKD3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT - || ins.handler_idx == VKD3DSIH_DCL_VERTICES_OUT) - { - shader_addline(&buffer, "%s %u", shader_opcode_names[ins.handler_idx], ins.declaration.count); - } - else if (ins.handler_idx == VKD3DSIH_DCL_TESSELLATOR_DOMAIN) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_tessellator_domain(&buffer, ins.declaration.tessellator_domain); - } - else if (ins.handler_idx == VKD3DSIH_DCL_TESSELLATOR_OUTPUT_PRIMITIVE) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_tessellator_output_primitive(&buffer, ins.declaration.tessellator_output_primitive); - } - else if (ins.handler_idx == VKD3DSIH_DCL_TESSELLATOR_PARTITIONING) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_tessellator_partitioning(&buffer, ins.declaration.tessellator_partitioning); - } - else if (ins.handler_idx == VKD3DSIH_DCL_TGSM_RAW) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_dst_param(&buffer, &ins.declaration.tgsm_raw.reg, &shader_version); - shader_addline(&buffer, ", %u", ins.declaration.tgsm_raw.byte_count); - } - else if (ins.handler_idx == VKD3DSIH_DCL_TGSM_STRUCTURED) - { - shader_addline(&buffer, "%s ", shader_opcode_names[ins.handler_idx]); - shader_dump_dst_param(&buffer, &ins.declaration.tgsm_structured.reg, &shader_version); - shader_addline(&buffer, ", %u, %u", ins.declaration.tgsm_structured.byte_stride, - ins.declaration.tgsm_structured.structure_count); - } - else if (ins.handler_idx == VKD3DSIH_DCL_THREAD_GROUP) - { - shader_addline(&buffer, "%s %u, %u, %u", shader_opcode_names[ins.handler_idx], - ins.declaration.thread_group_size.x, - ins.declaration.thread_group_size.y, - ins.declaration.thread_group_size.z); - } - else if (ins.handler_idx == VKD3DSIH_DCL_UAV_RAW) - { - shader_addline(&buffer, "%s", shader_opcode_names[ins.handler_idx]); - shader_dump_uav_flags(&buffer, ins.flags); - shader_addline(&buffer, " "); - shader_dump_dst_param(&buffer, &ins.declaration.dst, &shader_version); - } - else if (ins.handler_idx == VKD3DSIH_DCL_UAV_STRUCTURED) - { - shader_addline(&buffer, "%s", shader_opcode_names[ins.handler_idx]); - shader_dump_uav_flags(&buffer, ins.flags); - shader_addline(&buffer, " "); - shader_dump_dst_param(&buffer, &ins.declaration.structured_resource.reg, &shader_version); - shader_addline(&buffer, ", %u", ins.declaration.structured_resource.byte_stride); - } - else if (ins.handler_idx == VKD3DSIH_DEF) - { - shader_addline(&buffer, "def c%u = %.8e, %.8e, %.8e, %.8e", - shader_get_float_offset(ins.dst[0].reg.type, ins.dst[0].reg.idx[0].offset), - ins.src[0].reg.u.immconst_float[0], ins.src[0].reg.u.immconst_float[1], - ins.src[0].reg.u.immconst_float[2], ins.src[0].reg.u.immconst_float[3]); - } - else if (ins.handler_idx == VKD3DSIH_DEFI) - { - shader_addline(&buffer, "defi i%u = %d, %d, %d, %d", ins.dst[0].reg.idx[0].offset, - ins.src[0].reg.u.immconst_uint[0], ins.src[0].reg.u.immconst_uint[1], - ins.src[0].reg.u.immconst_uint[2], ins.src[0].reg.u.immconst_uint[3]); - } - else if (ins.handler_idx == VKD3DSIH_DEFB) - { - shader_addline(&buffer, "defb b%u = %s", - ins.dst[0].reg.idx[0].offset, ins.src[0].reg.u.immconst_uint[0] ? "true" : "false"); - } - else - { - if (ins.predicate) - { - shader_addline(&buffer, "("); - shader_dump_src_param(&buffer, ins.predicate, &shader_version); - shader_addline(&buffer, ") "); - } - - /* PixWin marks instructions with the coissue flag with a '+' */ - if (ins.coissue) - shader_addline(&buffer, "+"); - - shader_addline(&buffer, "%s", shader_opcode_names[ins.handler_idx]); - - shader_dump_instruction_flags(&buffer, &ins, &shader_version); - if (vkd3d_shader_instruction_has_texel_offset(&ins)) - shader_addline(&buffer, "(%d,%d,%d)", ins.texel_offset.u, ins.texel_offset.v, ins.texel_offset.w); - - for (i = 0; i < ins.dst_count; ++i) - { - shader_dump_ins_modifiers(&buffer, &ins.dst[i]); - shader_addline(&buffer, !i ? " " : ", "); - shader_dump_dst_param(&buffer, &ins.dst[i], &shader_version); - } - - /* Other source tokens */ - for (i = ins.dst_count; i < (ins.dst_count + ins.src_count); ++i) - { - shader_addline(&buffer, !i ? " " : ", "); - shader_dump_src_param(&buffer, &ins.src[i - ins.dst_count], &shader_version); - } - } - shader_addline(&buffer, "\n"); + shader_dump_instruction(&buffer, &ins, &shader_version); }
for (p = buffer.buffer; *p; p = q)