libs/vkd3d-shader: Factor out shader_dump_instruction().

Signed-off-by: Józef Kucia <jkucia@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Józef Kucia 2018-06-05 13:52:58 +02:00 committed by Alexandre Julliard
parent 49e936ae2a
commit 3d74e65a1f

View File

@ -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)