From d91d552a5e64e77d1c030b1c4efe9ebff0865e87 Mon Sep 17 00:00:00 2001 From: Elizabeth Figura Date: Fri, 7 Mar 2025 17:22:55 -0600 Subject: [PATCH] vkd3d-shader/ir: Introduce a vsir_dst_param_init_null() helper. --- libs/vkd3d-shader/dxil.c | 4 ++-- libs/vkd3d-shader/hlsl_codegen.c | 6 ++---- libs/vkd3d-shader/ir.c | 13 ++++++++++--- libs/vkd3d-shader/vkd3d_shader_private.h | 1 + 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/libs/vkd3d-shader/dxil.c b/libs/vkd3d-shader/dxil.c index ac4828d6f..a3813c39b 100644 --- a/libs/vkd3d-shader/dxil.c +++ b/libs/vkd3d-shader/dxil.c @@ -4382,7 +4382,7 @@ static void sm6_parser_emit_binop(struct sm6_parser *sm6, const struct dxil_reco dst_param_init(&dst_params[0]); dst_param_init(&dst_params[1]); register_init_ssa_scalar(&dst_params[index].reg, a->type, dst, sm6); - vsir_register_init(&dst_params[index ^ 1].reg, VKD3DSPR_NULL, VKD3D_DATA_UNUSED, 0); + vsir_dst_param_init_null(&dst_params[index ^ 1]); dst->u.reg = dst_params[index].reg; } else @@ -5942,7 +5942,7 @@ static void sm6_parser_emit_dx_sincos(struct sm6_parser *sm6, enum dx_intrinsic_ dst_param_init(&dst_params[0]); dst_param_init(&dst_params[1]); register_init_ssa_scalar(&dst_params[index].reg, dst->type, dst, sm6); - vsir_register_init(&dst_params[index ^ 1].reg, VKD3DSPR_NULL, VKD3D_DATA_UNUSED, 0); + vsir_dst_param_init_null(&dst_params[index ^ 1]); dst->u.reg = dst_params[index].reg; } diff --git a/libs/vkd3d-shader/hlsl_codegen.c b/libs/vkd3d-shader/hlsl_codegen.c index f0468d2c7..792da9086 100644 --- a/libs/vkd3d-shader/hlsl_codegen.c +++ b/libs/vkd3d-shader/hlsl_codegen.c @@ -10019,8 +10019,8 @@ static bool sm4_generate_vsir_instr_expr_cast(struct hlsl_ctx *ctx, static void sm4_generate_vsir_expr_with_two_destinations(struct hlsl_ctx *ctx, struct vsir_program *program, enum vkd3d_shader_opcode opcode, const struct hlsl_ir_expr *expr, unsigned int dst_idx) { - struct vkd3d_shader_dst_param *dst_param, *null_param; const struct hlsl_ir_node *instr = &expr->node; + struct vkd3d_shader_dst_param *dst_param; struct vkd3d_shader_instruction *ins; unsigned int i, src_count; @@ -10038,9 +10038,7 @@ static void sm4_generate_vsir_expr_with_two_destinations(struct hlsl_ctx *ctx, s dst_param = &ins->dst[dst_idx]; vsir_dst_from_hlsl_node(dst_param, ctx, instr); - null_param = &ins->dst[1 - dst_idx]; - vsir_dst_param_init(null_param, VKD3DSPR_NULL, VKD3D_DATA_FLOAT, 0); - null_param->reg.dimension = VSIR_DIMENSION_NONE; + vsir_dst_param_init_null(&ins->dst[1 - dst_idx]); for (i = 0; i < src_count; ++i) vsir_src_from_hlsl_node(&ins->src[i], ctx, expr->operands[i].node, dst_param->write_mask); diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 72cf53761..3fe03167c 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -312,6 +312,13 @@ static void vsir_dst_param_init_io(struct vkd3d_shader_dst_param *dst, enum vkd3 dst->write_mask = e->mask; } +void vsir_dst_param_init_null(struct vkd3d_shader_dst_param *dst) +{ + vsir_dst_param_init(dst, VKD3DSPR_NULL, VKD3D_DATA_UNUSED, 0); + dst->reg.dimension = VSIR_DIMENSION_NONE; + dst->write_mask = 0; +} + static void dst_param_init_ssa_bool(struct vkd3d_shader_dst_param *dst, unsigned int idx) { vsir_dst_param_init(dst, VKD3DSPR_SSA, VKD3D_DATA_BOOL, 1); @@ -763,7 +770,7 @@ static enum vkd3d_result vsir_program_lower_sm1_sincos(struct vsir_program *prog } else { - vsir_dst_param_init(&ins->dst[0], VKD3DSPR_NULL, VKD3D_DATA_UNUSED, 0); + vsir_dst_param_init_null(&ins->dst[0]); } if (sincos->dst->write_mask & VKD3DSP_WRITEMASK_0) @@ -773,7 +780,7 @@ static enum vkd3d_result vsir_program_lower_sm1_sincos(struct vsir_program *prog } else { - vsir_dst_param_init(&ins->dst[1], VKD3DSPR_NULL, VKD3D_DATA_UNUSED, 0); + vsir_dst_param_init_null(&ins->dst[1]); } /* Make the original instruction no-op */ @@ -1299,7 +1306,7 @@ static void remove_unread_output_components(const struct shader_signature *signa if (ins->dst_count == 1) vkd3d_shader_instruction_make_nop(ins); else - vsir_dst_param_init(dst, VKD3DSPR_NULL, VKD3D_DATA_UNUSED, 0); + vsir_dst_param_init_null(dst); } } diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index d7d281ae1..c7b79efd2 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -1006,6 +1006,7 @@ void vsir_src_param_init(struct vkd3d_shader_src_param *param, enum vkd3d_shader enum vkd3d_data_type data_type, unsigned int idx_count); void vsir_dst_param_init(struct vkd3d_shader_dst_param *param, enum vkd3d_shader_register_type reg_type, enum vkd3d_data_type data_type, unsigned int idx_count); +void vsir_dst_param_init_null(struct vkd3d_shader_dst_param *dst); void vsir_src_param_init_label(struct vkd3d_shader_src_param *param, unsigned int label_id); struct vkd3d_shader_index_range