From: Francisco Casas fcasas@codeweavers.com
Since spirv.c only consumes vkd3d-shader IR, and doesn't output it, in most cases we don't care about the register's dimension or data_type, so I am just preserving the current initialization scheme for both fields. --- libs/vkd3d-shader/ir.c | 3 +-- libs/vkd3d-shader/spirv.c | 50 ++++++++++++--------------------------- 2 files changed, 16 insertions(+), 37 deletions(-)
diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 899e027a..9620e077 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -1214,11 +1214,10 @@ static void shader_register_normalise_flat_constants(struct vkd3d_shader_src_par } }
- param->reg.type = VKD3DSPR_CONSTBUFFER; + shader_register_init(¶m->reg, VKD3DSPR_CONSTBUFFER, 0, 3); param->reg.idx[0].offset = set; /* register ID */ param->reg.idx[1].offset = set; /* register index */ param->reg.idx[2].offset = index; /* buffer index */ - param->reg.idx_count = 3; }
static enum vkd3d_result instruction_array_normalise_flat_constants(struct vkd3d_shader_parser *parser) diff --git a/libs/vkd3d-shader/spirv.c b/libs/vkd3d-shader/spirv.c index ed9303e0..a96bf051 100644 --- a/libs/vkd3d-shader/spirv.c +++ b/libs/vkd3d-shader/spirv.c @@ -4333,11 +4333,7 @@ static uint32_t spirv_compiler_get_invocation_id(struct spirv_compiler *compiler
assert(compiler->shader_type == VKD3D_SHADER_TYPE_HULL);
- memset(&r, 0, sizeof(r)); - r.type = VKD3DSPR_OUTPOINTID; - r.idx[0].offset = ~0u; - r.idx[1].offset = ~0u; - r.idx_count = 0; + shader_register_init(&r, VKD3DSPR_OUTPOINTID, 0, 0); return spirv_compiler_get_register_id(compiler, &r); }
@@ -5237,10 +5233,7 @@ static void spirv_compiler_emit_hull_shader_builtins(struct spirv_compiler *comp struct vkd3d_shader_dst_param dst;
memset(&dst, 0, sizeof(dst)); - dst.reg.type = VKD3DSPR_OUTPOINTID; - dst.reg.idx[0].offset = ~0u; - dst.reg.idx[1].offset = ~0u; - dst.reg.idx_count = 0; + shader_register_init(&dst.reg, VKD3DSPR_OUTPOINTID, 0, 0); dst.write_mask = VKD3DSP_WRITEMASK_0; spirv_compiler_emit_input_register(compiler, &dst); } @@ -5363,11 +5356,8 @@ static void spirv_compiler_emit_dcl_indexable_temp(struct spirv_compiler *compil if (temp->component_count != 4) FIXME("Unhandled component count %u.\n", temp->component_count);
- memset(®, 0, sizeof(reg)); - reg.type = VKD3DSPR_IDXTEMP; + shader_register_init(®, VKD3DSPR_IDXTEMP, 0, 1); reg.idx[0].offset = temp->register_idx; - reg.idx[1].offset = ~0u; - reg.idx_count = 1;
function_location = spirv_compiler_get_current_function_location(compiler); vkd3d_spirv_begin_function_stream_insertion(builder, function_location); @@ -5620,8 +5610,7 @@ static void spirv_compiler_emit_dcl_immediate_constant_buffer(struct spirv_compi vkd3d_spirv_build_op_name(builder, icb_id, "icb"); vkd3d_free(elements);
- memset(®, 0, sizeof(reg)); - reg.type = VKD3DSPR_IMMCONSTBUFFER; + shader_register_init(®, VKD3DSPR_IMMCONSTBUFFER, 0, 0); vkd3d_symbol_make_register(®_symbol, ®); vkd3d_symbol_set_register_info(®_symbol, icb_id, SpvStorageClassPrivate, VKD3D_SHADER_COMPONENT_FLOAT, VKD3DSP_WRITEMASK_ALL); @@ -6375,20 +6364,13 @@ static void spirv_compiler_emit_default_control_point_phase(struct spirv_compile invocation_id = spirv_compiler_emit_load_invocation_id(compiler);
memset(&invocation, 0, sizeof(invocation)); - invocation.reg.type = VKD3DSPR_OUTPOINTID; - invocation.reg.data_type = VKD3D_DATA_INT; - invocation.reg.idx[0].offset = ~0u; - invocation.reg.idx[1].offset = ~0u; - invocation.reg.idx[2].offset = ~0u; - invocation.reg.idx_count = 0; + shader_register_init(&invocation.reg, VKD3DSPR_OUTPOINTID, VKD3D_DATA_INT, 0); invocation.swizzle = VKD3D_SHADER_NO_SWIZZLE;
- memset(&input_reg, 0, sizeof(input_reg)); - input_reg.type = VKD3DSPR_INPUT; - input_reg.data_type = VKD3D_DATA_FLOAT; + shader_register_init(&input_reg, VKD3DSPR_INPUT, VKD3D_DATA_FLOAT, 2); + input_reg.idx[0].offset = 0; input_reg.idx[0].rel_addr = &invocation; - input_reg.idx[2].offset = ~0u; - input_reg.idx_count = 2; + input_reg.idx[1].offset = 0; input_id = spirv_compiler_get_register_id(compiler, &input_reg);
assert(input_signature->element_count == output_signature->element_count); @@ -9509,15 +9491,13 @@ static void spirv_compiler_emit_sm1_constant_buffer(struct spirv_compiler *compi { struct vkd3d_shader_register_range range = {.space = 0, .first = set, .last = set}; uint32_t count = desc->flat_constant_count[set].external; - struct vkd3d_shader_register reg = - { - .type = VKD3DSPR_CONSTBUFFER, - .idx[0].offset = set, /* register ID */ - .idx[1].offset = set, /* register index */ - .idx[2].offset = count, /* size */ - .idx_count = 3, - .data_type = data_type, - }; + struct vkd3d_shader_register reg; + + + shader_register_init(®, VKD3DSPR_CONSTBUFFER, data_type, 3); + reg.idx[0].offset = set; /* register ID */ + reg.idx[1].offset = set; /* register index */ + reg.idx[2].offset = count; /* size */
if (count) spirv_compiler_emit_constant_buffer(compiler, count, &range, ®);