mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-01-28 13:05:02 -08:00
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:
parent
49e936ae2a
commit
3d74e65a1f
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user