vkd3d-shader: Introduce a helper to print d3d-asm unsigned integer literals.

Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Henri Verbeet
2021-02-17 12:21:11 +01:00
committed by Alexandre Julliard
parent 03c34076e8
commit 66694cd385

View File

@@ -714,6 +714,12 @@ static void shader_print_int_literal(struct vkd3d_d3d_asm_compiler *compiler,
vkd3d_string_buffer_printf(&compiler->buffer, "%s%d%s", prefix, i, suffix); vkd3d_string_buffer_printf(&compiler->buffer, "%s%d%s", prefix, i, suffix);
} }
static void shader_print_uint_literal(struct vkd3d_d3d_asm_compiler *compiler,
const char *prefix, unsigned int i, const char *suffix)
{
vkd3d_string_buffer_printf(&compiler->buffer, "%s%u%s", prefix, i, suffix);
}
static void shader_print_subscript(struct vkd3d_d3d_asm_compiler *compiler, static void shader_print_subscript(struct vkd3d_d3d_asm_compiler *compiler,
unsigned int offset, const struct vkd3d_shader_src_param *rel_addr) unsigned int offset, const struct vkd3d_shader_src_param *rel_addr)
{ {
@@ -723,7 +729,7 @@ static void shader_print_subscript(struct vkd3d_d3d_asm_compiler *compiler,
shader_dump_src_param(compiler, rel_addr); shader_dump_src_param(compiler, rel_addr);
vkd3d_string_buffer_printf(&compiler->buffer, " + "); vkd3d_string_buffer_printf(&compiler->buffer, " + ");
} }
vkd3d_string_buffer_printf(&compiler->buffer, "%u]", offset); shader_print_uint_literal(compiler, "", offset, "]");
} }
static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const struct vkd3d_shader_register *reg) static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const struct vkd3d_shader_register *reg)
@@ -959,7 +965,7 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const
case VKD3D_DATA_RESOURCE: case VKD3D_DATA_RESOURCE:
case VKD3D_DATA_SAMPLER: case VKD3D_DATA_SAMPLER:
case VKD3D_DATA_UINT: case VKD3D_DATA_UINT:
shader_addline(buffer, "%u", reg->u.immconst_uint[0]); shader_print_uint_literal(compiler, "", reg->u.immconst_uint[0], "");
break; break;
default: default:
shader_addline(buffer, "<unhandled data type %#x>", reg->data_type); shader_addline(buffer, "<unhandled data type %#x>", reg->data_type);
@@ -985,9 +991,10 @@ static void shader_dump_register(struct vkd3d_d3d_asm_compiler *compiler, const
case VKD3D_DATA_RESOURCE: case VKD3D_DATA_RESOURCE:
case VKD3D_DATA_SAMPLER: case VKD3D_DATA_SAMPLER:
case VKD3D_DATA_UINT: case VKD3D_DATA_UINT:
shader_addline(buffer, "%u, %u, %u, %u", shader_print_uint_literal(compiler, "", reg->u.immconst_uint[0], "");
reg->u.immconst_uint[0], reg->u.immconst_uint[1], shader_print_uint_literal(compiler, ", ", reg->u.immconst_uint[1], "");
reg->u.immconst_uint[2], reg->u.immconst_uint[3]); shader_print_uint_literal(compiler, ", ", reg->u.immconst_uint[2], "");
shader_print_uint_literal(compiler, ", ", reg->u.immconst_uint[3], "");
break; break;
default: default:
shader_addline(buffer, "<unhandled data type %#x>", reg->data_type); shader_addline(buffer, "<unhandled data type %#x>", reg->data_type);
@@ -1351,7 +1358,7 @@ static void shader_dump_instruction_flags(struct vkd3d_d3d_asm_compiler *compile
static void shader_dump_register_space(struct vkd3d_d3d_asm_compiler *compiler, unsigned int register_space) static void shader_dump_register_space(struct vkd3d_d3d_asm_compiler *compiler, unsigned int register_space)
{ {
if (shader_ver_ge(&compiler->shader_version, 5, 1)) if (shader_ver_ge(&compiler->shader_version, 5, 1))
vkd3d_string_buffer_printf(&compiler->buffer, ", space=%u", register_space); shader_print_uint_literal(compiler, ", space=", register_space, "");
} }
static void shader_print_opcode(struct vkd3d_d3d_asm_compiler *compiler, enum vkd3d_shader_opcode opcode) static void shader_print_opcode(struct vkd3d_d3d_asm_compiler *compiler, enum vkd3d_shader_opcode opcode)
@@ -1434,14 +1441,14 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INDEX_RANGE: case VKD3DSIH_DCL_INDEX_RANGE:
vkd3d_string_buffer_printf(buffer, " "); vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.index_range.dst); shader_dump_dst_param(compiler, &ins->declaration.index_range.dst);
shader_addline(buffer, " %u", ins->declaration.index_range.register_count); shader_print_uint_literal(compiler, " ", ins->declaration.index_range.register_count, "");
break; break;
case VKD3DSIH_DCL_INDEXABLE_TEMP: case VKD3DSIH_DCL_INDEXABLE_TEMP:
vkd3d_string_buffer_printf(buffer, " %sx%u%s", compiler->colours.reg, vkd3d_string_buffer_printf(buffer, " %sx%u%s", compiler->colours.reg,
ins->declaration.indexable_temp.register_idx, compiler->colours.reset); ins->declaration.indexable_temp.register_idx, compiler->colours.reset);
shader_print_subscript(compiler, ins->declaration.indexable_temp.register_size, NULL); shader_print_subscript(compiler, ins->declaration.indexable_temp.register_size, NULL);
vkd3d_string_buffer_printf(buffer, ", %u", ins->declaration.indexable_temp.component_count); shader_print_uint_literal(compiler, ", ", ins->declaration.indexable_temp.component_count, "");
break; break;
case VKD3DSIH_DCL_INPUT_PS: case VKD3DSIH_DCL_INPUT_PS:
@@ -1498,7 +1505,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_RESOURCE_STRUCTURED: case VKD3DSIH_DCL_RESOURCE_STRUCTURED:
vkd3d_string_buffer_printf(buffer, " "); vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg); shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg);
shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride); shader_print_uint_literal(compiler, ", ", ins->declaration.structured_resource.byte_stride, "");
shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.register_space); shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.register_space);
break; break;
@@ -1517,7 +1524,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_INPUT_CONTROL_POINT_COUNT: case VKD3DSIH_DCL_INPUT_CONTROL_POINT_COUNT:
case VKD3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT: case VKD3DSIH_DCL_OUTPUT_CONTROL_POINT_COUNT:
case VKD3DSIH_DCL_VERTICES_OUT: case VKD3DSIH_DCL_VERTICES_OUT:
vkd3d_string_buffer_printf(buffer, " %u", ins->declaration.count); shader_print_uint_literal(compiler, " ", ins->declaration.count, "");
break; break;
case VKD3DSIH_DCL_TESSELLATOR_DOMAIN: case VKD3DSIH_DCL_TESSELLATOR_DOMAIN:
@@ -1538,21 +1545,20 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
case VKD3DSIH_DCL_TGSM_RAW: case VKD3DSIH_DCL_TGSM_RAW:
vkd3d_string_buffer_printf(buffer, " "); vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.tgsm_raw.reg); shader_dump_dst_param(compiler, &ins->declaration.tgsm_raw.reg);
shader_addline(buffer, ", %u", ins->declaration.tgsm_raw.byte_count); shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_raw.byte_count, "");
break; break;
case VKD3DSIH_DCL_TGSM_STRUCTURED: case VKD3DSIH_DCL_TGSM_STRUCTURED:
vkd3d_string_buffer_printf(buffer, " "); vkd3d_string_buffer_printf(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.tgsm_structured.reg); shader_dump_dst_param(compiler, &ins->declaration.tgsm_structured.reg);
shader_addline(buffer, ", %u, %u", ins->declaration.tgsm_structured.byte_stride, shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_structured.byte_stride, "");
ins->declaration.tgsm_structured.structure_count); shader_print_uint_literal(compiler, ", ", ins->declaration.tgsm_structured.structure_count, "");
break; break;
case VKD3DSIH_DCL_THREAD_GROUP: case VKD3DSIH_DCL_THREAD_GROUP:
vkd3d_string_buffer_printf(buffer, " %u, %u, %u", shader_print_uint_literal(compiler, " ", ins->declaration.thread_group_size.x, "");
ins->declaration.thread_group_size.x, shader_print_uint_literal(compiler, ", ", ins->declaration.thread_group_size.y, "");
ins->declaration.thread_group_size.y, shader_print_uint_literal(compiler, ", ", ins->declaration.thread_group_size.z, "");
ins->declaration.thread_group_size.z);
break; break;
case VKD3DSIH_DCL_UAV_RAW: case VKD3DSIH_DCL_UAV_RAW:
@@ -1566,7 +1572,7 @@ static void shader_dump_instruction(struct vkd3d_d3d_asm_compiler *compiler,
shader_dump_uav_flags(compiler, ins->flags); shader_dump_uav_flags(compiler, ins->flags);
shader_addline(buffer, " "); shader_addline(buffer, " ");
shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg); shader_dump_dst_param(compiler, &ins->declaration.structured_resource.resource.reg);
shader_addline(buffer, ", %u", ins->declaration.structured_resource.byte_stride); shader_print_uint_literal(compiler, ", ", ins->declaration.structured_resource.byte_stride, "");
shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.register_space); shader_dump_register_space(compiler, ins->declaration.structured_resource.resource.register_space);
break; break;