vkd3d-shader/dxil: Allow creating signed parameters in src_param_init_from_value().

This commit is contained in:
Henri Verbeet
2025-09-02 17:38:55 +02:00
parent b023b67b95
commit 8fb8cca0d7
Notes: Henri Verbeet 2025-09-16 16:19:58 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1727

View File

@@ -2740,11 +2740,11 @@ static void src_param_init_vector(struct vkd3d_shader_src_param *param, unsigned
param->modifiers = VKD3DSPSM_NONE; param->modifiers = VKD3DSPSM_NONE;
} }
static void src_param_init_from_value(struct vkd3d_shader_src_param *param, const struct sm6_value *src, static void src_param_init_from_value(struct vkd3d_shader_src_param *param,
struct sm6_parser *sm6) const struct sm6_value *src, uint32_t type_flags, struct sm6_parser *dxil)
{ {
src_param_init(param); src_param_init(param);
vsir_register_from_dxil_value(&param->reg, src, 0, sm6); vsir_register_from_dxil_value(&param->reg, src, type_flags, dxil);
} }
static void src_param_init_vector_from_reg(struct vkd3d_shader_src_param *param, static void src_param_init_vector_from_reg(struct vkd3d_shader_src_param *param,
@@ -2778,7 +2778,7 @@ static void register_index_address_init(struct vkd3d_shader_register_index *idx,
{ {
struct vkd3d_shader_src_param *rel_addr = vsir_program_get_src_params(sm6->program, 1); struct vkd3d_shader_src_param *rel_addr = vsir_program_get_src_params(sm6->program, 1);
if (rel_addr) if (rel_addr)
src_param_init_from_value(rel_addr, address, sm6); src_param_init_from_value(rel_addr, address, 0, sm6);
idx->offset = 0; idx->offset = 0;
idx->rel_addr = rel_addr; idx->rel_addr = rel_addr;
} }
@@ -4128,7 +4128,9 @@ static void src_params_init_from_operands(struct vkd3d_shader_src_param *src_par
unsigned int i; unsigned int i;
for (i = 0; i < count; ++i) for (i = 0; i < count; ++i)
src_param_init_from_value(&src_params[i], operands[i], sm6); {
src_param_init_from_value(&src_params[i], operands[i], 0, sm6);
}
} }
static enum vkd3d_shader_register_type register_type_from_dxil_semantic_kind( static enum vkd3d_shader_register_type register_type_from_dxil_semantic_kind(
@@ -4506,7 +4508,7 @@ static void sm6_parser_emit_atomicrmw(struct sm6_parser *sm6, const struct dxil_
src_param_init_vector_from_reg(&src_params[0], &coord); src_param_init_vector_from_reg(&src_params[0], &coord);
else else
src_param_make_constant_uint(&src_params[0], 0); src_param_make_constant_uint(&src_params[0], 0);
src_param_init_from_value(&src_params[1], src, sm6); src_param_init_from_value(&src_params[1], src, 0, sm6);
sm6_parser_init_ssa_value(sm6, dst); sm6_parser_init_ssa_value(sm6, dst);
@@ -4686,8 +4688,8 @@ static void sm6_parser_emit_binop(struct sm6_parser *sm6, const struct dxil_reco
if (!(src_params = instruction_src_params_alloc(ins, 2, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 2, sm6)))
return; return;
src_param_init_from_value(&src_params[0], a, sm6); src_param_init_from_value(&src_params[0], a, 0, sm6);
src_param_init_from_value(&src_params[1], b, sm6); src_param_init_from_value(&src_params[1], b, 0, sm6);
if (code == BINOP_SUB) if (code == BINOP_SUB)
src_params[1].modifiers = VKD3DSPSM_NEG; src_params[1].modifiers = VKD3DSPSM_NEG;
@@ -4961,7 +4963,7 @@ static void sm6_parser_emit_dx_unary(struct sm6_parser *sm6, enum dx_intrinsic_o
vsir_instruction_init(ins, &sm6->p.location, map_dx_unary_op(op)); vsir_instruction_init(ins, &sm6->p.location, map_dx_unary_op(op));
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -5000,8 +5002,8 @@ static void sm6_parser_emit_dx_binary(struct sm6_parser *sm6, enum dx_intrinsic_
vsir_instruction_init(ins, &sm6->p.location, map_dx_binary_op(op, operands[0]->type)); vsir_instruction_init(ins, &sm6->p.location, map_dx_binary_op(op, operands[0]->type));
if (!(src_params = instruction_src_params_alloc(ins, 2, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 2, sm6)))
return; return;
src_param_init_from_value(&src_params[0], operands[0], sm6); src_param_init_from_value(&src_params[0], operands[0], 0, sm6);
src_param_init_from_value(&src_params[1], operands[1], sm6); src_param_init_from_value(&src_params[1], operands[1], 0, sm6);
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -5093,8 +5095,8 @@ static void sm6_parser_emit_dx_atomic_binop(struct sm6_parser *sm6, enum dx_intr
return; return;
src_param_init_vector_from_reg(&src_params[0], &reg); src_param_init_vector_from_reg(&src_params[0], &reg);
if (is_cmp_xchg) if (is_cmp_xchg)
src_param_init_from_value(&src_params[1], operands[4], sm6); src_param_init_from_value(&src_params[1], operands[4], 0, sm6);
src_param_init_from_value(&src_params[1 + is_cmp_xchg], operands[5], sm6); src_param_init_from_value(&src_params[1 + is_cmp_xchg], operands[5], 0, sm6);
sm6_parser_init_ssa_value(sm6, dst); sm6_parser_init_ssa_value(sm6, dst);
@@ -5365,7 +5367,7 @@ static void sm6_parser_emit_dx_discard(struct sm6_parser *sm6, enum dx_intrinsic
vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_DISCARD); vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_DISCARD);
if ((src_param = instruction_src_params_alloc(ins, 1, sm6))) if ((src_param = instruction_src_params_alloc(ins, 1, sm6)))
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
} }
static void sm6_parser_emit_dx_domain_location(struct sm6_parser *sm6, enum dx_intrinsic_opcode op, static void sm6_parser_emit_dx_domain_location(struct sm6_parser *sm6, enum dx_intrinsic_opcode op,
@@ -5479,7 +5481,7 @@ static void sm6_parser_emit_dx_eval_attrib(struct sm6_parser *sm6, enum dx_intri
register_index_address_init(&src_params[0].reg.idx[0], operands[1], sm6); register_index_address_init(&src_params[0].reg.idx[0], operands[1], sm6);
if (op == DX_EVAL_SAMPLE_INDEX) if (op == DX_EVAL_SAMPLE_INDEX)
src_param_init_from_value(&src_params[1], operands[3], sm6); src_param_init_from_value(&src_params[1], operands[3], 0, sm6);
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -5493,7 +5495,7 @@ static void sm6_parser_emit_dx_fabs(struct sm6_parser *sm6, enum dx_intrinsic_op
vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_MOV); vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_MOV);
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
src_param->modifiers = VKD3DSPSM_ABS; src_param->modifiers = VKD3DSPSM_ABS;
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
@@ -5566,7 +5568,9 @@ static void sm6_parser_emit_dx_ma(struct sm6_parser *sm6, enum dx_intrinsic_opco
if (!(src_params = instruction_src_params_alloc(ins, 3, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 3, sm6)))
return; return;
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
src_param_init_from_value(&src_params[i], operands[i], sm6); {
src_param_init_from_value(&src_params[i], operands[i], 0, sm6);
}
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -5596,7 +5600,7 @@ static void sm6_parser_emit_dx_get_dimensions(struct sm6_parser *sm6, enum dx_in
if (is_texture) if (is_texture)
{ {
ins->flags = VKD3DSI_RESINFO_UINT; ins->flags = VKD3DSI_RESINFO_UINT;
src_param_init_from_value(&src_params[0], operands[1], sm6); src_param_init_from_value(&src_params[0], operands[1], 0, sm6);
component_count = VKD3D_VEC4_SIZE; component_count = VKD3D_VEC4_SIZE;
if (resource_kind_is_multisampled(resource_kind)) if (resource_kind_is_multisampled(resource_kind))
@@ -5669,7 +5673,9 @@ static void sm6_parser_emit_dx_tertiary(struct sm6_parser *sm6, enum dx_intrinsi
if (!(src_params = instruction_src_params_alloc(ins, 3, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 3, sm6)))
return; return;
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
src_param_init_from_value(&src_params[i], operands[i], sm6); {
src_param_init_from_value(&src_params[i], operands[i], 0, sm6);
}
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -5810,7 +5816,7 @@ static void sm6_parser_emit_dx_quad_op(struct sm6_parser *sm6, enum dx_intrinsic
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -5957,7 +5963,7 @@ static void sm6_parser_emit_dx_buffer_load(struct sm6_parser *sm6, enum dx_intri
if (!(src_params = instruction_src_params_alloc(ins, 2, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 2, sm6)))
return; return;
src_param_init_from_value(&src_params[0], operands[1], sm6); src_param_init_from_value(&src_params[0], operands[1], 0, sm6);
if (!sm6_value_is_undef(operands[2])) if (!sm6_value_is_undef(operands[2]))
{ {
/* Constant zero would be ok, but is not worth checking for unless it shows up. */ /* Constant zero would be ok, but is not worth checking for unless it shows up. */
@@ -6022,7 +6028,7 @@ static void sm6_parser_emit_dx_buffer_store(struct sm6_parser *sm6, enum dx_intr
if (!(src_params = instruction_src_params_alloc(ins, 2, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 2, sm6)))
return; return;
src_param_init_from_value(&src_params[0], operands[1], sm6); src_param_init_from_value(&src_params[0], operands[1], 0, sm6);
if (!sm6_value_is_undef(operands[2])) if (!sm6_value_is_undef(operands[2]))
{ {
/* Constant zero would have no effect, but is not worth checking for unless it shows up. */ /* Constant zero would have no effect, but is not worth checking for unless it shows up. */
@@ -6077,14 +6083,14 @@ static void sm6_parser_emit_dx_get_sample_pos(struct sm6_parser *sm6, enum dx_in
if (op == DX_TEX2DMS_GET_SAMPLE_POS) if (op == DX_TEX2DMS_GET_SAMPLE_POS)
{ {
src_param_init_vector_from_handle(sm6, &src_params[0], &resource->u.handle); src_param_init_vector_from_handle(sm6, &src_params[0], &resource->u.handle);
src_param_init_from_value(&src_params[1], operands[1], sm6); src_param_init_from_value(&src_params[1], operands[1], 0, sm6);
} }
else else
{ {
src_param_init_vector(&src_params[0], 2); src_param_init_vector(&src_params[0], 2);
vsir_register_init(&src_params[0].reg, VKD3DSPR_RASTERIZER, VSIR_DATA_F32, 0); vsir_register_init(&src_params[0].reg, VKD3DSPR_RASTERIZER, VSIR_DATA_F32, 0);
src_params[0].reg.dimension = VSIR_DIMENSION_VEC4; src_params[0].reg.dimension = VSIR_DIMENSION_VEC4;
src_param_init_from_value(&src_params[1], operands[0], sm6); src_param_init_from_value(&src_params[1], operands[0], 0, sm6);
} }
instruction_dst_param_init_ssa_vector(ins, 2, sm6); instruction_dst_param_init_ssa_vector(ins, 2, sm6);
@@ -6146,7 +6152,7 @@ static void sm6_parser_emit_dx_sample(struct sm6_parser *sm6, enum dx_intrinsic_
instruction_init_with_resource(ins, (op == DX_SAMPLE_B) ? VSIR_OP_SAMPLE_B : VSIR_OP_SAMPLE_LOD, instruction_init_with_resource(ins, (op == DX_SAMPLE_B) ? VSIR_OP_SAMPLE_B : VSIR_OP_SAMPLE_LOD,
resource, sm6); resource, sm6);
src_params = instruction_src_params_alloc(ins, 4, sm6); src_params = instruction_src_params_alloc(ins, 4, sm6);
src_param_init_from_value(&src_params[3], operands[9], sm6); src_param_init_from_value(&src_params[3], operands[9], 0, sm6);
break; break;
case DX_SAMPLE_C: case DX_SAMPLE_C:
clamp_idx = 10; clamp_idx = 10;
@@ -6155,7 +6161,7 @@ static void sm6_parser_emit_dx_sample(struct sm6_parser *sm6, enum dx_intrinsic_
instruction_init_with_resource(ins, (op == DX_SAMPLE_C_LZ) ? VSIR_OP_SAMPLE_C_LZ : VSIR_OP_SAMPLE_C, instruction_init_with_resource(ins, (op == DX_SAMPLE_C_LZ) ? VSIR_OP_SAMPLE_C_LZ : VSIR_OP_SAMPLE_C,
resource, sm6); resource, sm6);
src_params = instruction_src_params_alloc(ins, 4, sm6); src_params = instruction_src_params_alloc(ins, 4, sm6);
src_param_init_from_value(&src_params[3], operands[9], sm6); src_param_init_from_value(&src_params[3], operands[9], 0, sm6);
component_count = 1; component_count = 1;
break; break;
case DX_SAMPLE_GRAD: case DX_SAMPLE_GRAD:
@@ -6224,7 +6230,7 @@ static void sm6_parser_emit_dx_saturate(struct sm6_parser *sm6, enum dx_intrinsi
vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_MOV); vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_MOV);
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
if (instruction_dst_param_init_ssa_scalar(ins, 0, sm6)) if (instruction_dst_param_init_ssa_scalar(ins, 0, sm6))
ins->dst->modifiers = VKD3DSPDM_SATURATE; ins->dst->modifiers = VKD3DSPDM_SATURATE;
@@ -6239,7 +6245,7 @@ static void sm6_parser_emit_dx_split_double(struct sm6_parser *sm6, enum dx_intr
vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_MOV); vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_MOV);
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
instruction_dst_param_init_ssa_vector(ins, 2, sm6); instruction_dst_param_init_ssa_vector(ins, 2, sm6);
} }
@@ -6305,7 +6311,7 @@ static void sm6_parser_emit_dx_store_output(struct sm6_parser *sm6, enum dx_intr
} }
if ((src_param = instruction_src_params_alloc(ins, 1, sm6))) if ((src_param = instruction_src_params_alloc(ins, 1, sm6)))
src_param_init_from_value(src_param, value, sm6); src_param_init_from_value(src_param, value, 0, sm6);
} }
static void sm6_parser_emit_dx_texture_gather(struct sm6_parser *sm6, enum dx_intrinsic_opcode op, static void sm6_parser_emit_dx_texture_gather(struct sm6_parser *sm6, enum dx_intrinsic_opcode op,
@@ -6351,7 +6357,7 @@ static void sm6_parser_emit_dx_texture_gather(struct sm6_parser *sm6, enum dx_in
instruction_init_with_resource(ins, extended_offset ? VSIR_OP_GATHER4_PO_C : VSIR_OP_GATHER4_C, resource, sm6); instruction_init_with_resource(ins, extended_offset ? VSIR_OP_GATHER4_PO_C : VSIR_OP_GATHER4_C, resource, sm6);
if (!(src_params = instruction_src_params_alloc(ins, 4 + extended_offset, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 4 + extended_offset, sm6)))
return; return;
src_param_init_from_value(&src_params[3 + extended_offset], operands[9], sm6); src_param_init_from_value(&src_params[3 + extended_offset], operands[9], 0, sm6);
} }
src_param_init_vector_from_reg(&src_params[0], &coord); src_param_init_vector_from_reg(&src_params[0], &coord);
@@ -6414,7 +6420,7 @@ static void sm6_parser_emit_dx_texture_load(struct sm6_parser *sm6, enum dx_intr
src_param_init_vector_from_reg(&src_params[0], &coord); src_param_init_vector_from_reg(&src_params[0], &coord);
src_param_init_vector_from_handle(sm6, &src_params[1], &resource->u.handle); src_param_init_vector_from_handle(sm6, &src_params[1], &resource->u.handle);
if (is_multisample) if (is_multisample)
src_param_init_from_value(&src_params[2], mip_level_or_sample_count, sm6); src_param_init_from_value(&src_params[2], mip_level_or_sample_count, 0, sm6);
instruction_dst_param_init_ssa_vector(ins, VKD3D_VEC4_SIZE, sm6); instruction_dst_param_init_ssa_vector(ins, VKD3D_VEC4_SIZE, sm6);
} }
@@ -6478,7 +6484,7 @@ static void sm6_parser_emit_dx_wave_active_ballot(struct sm6_parser *sm6, enum d
vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_WAVE_ACTIVE_BALLOT); vsir_instruction_init(ins, &sm6->p.location, VSIR_OP_WAVE_ACTIVE_BALLOT);
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
instruction_dst_param_init_ssa_vector(ins, VKD3D_VEC4_SIZE, sm6); instruction_dst_param_init_ssa_vector(ins, VKD3D_VEC4_SIZE, sm6);
} }
@@ -6518,7 +6524,7 @@ static void sm6_parser_emit_dx_wave_active_bit(struct sm6_parser *sm6, enum dx_i
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -6569,7 +6575,7 @@ static void sm6_parser_emit_dx_wave_op(struct sm6_parser *sm6, enum dx_intrinsic
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, operands[0], sm6); src_param_init_from_value(src_param, operands[0], 0, sm6);
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -7116,7 +7122,7 @@ static void sm6_parser_emit_cast(struct sm6_parser *sm6, const struct dxil_recor
if (!(src_param = instruction_src_params_alloc(ins, 1, sm6))) if (!(src_param = instruction_src_params_alloc(ins, 1, sm6)))
return; return;
src_param_init_from_value(src_param, value, sm6); src_param_init_from_value(src_param, value, 0, sm6);
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
@@ -7264,8 +7270,8 @@ static void sm6_parser_emit_cmp2(struct sm6_parser *sm6, const struct dxil_recor
if (!(src_params = instruction_src_params_alloc(ins, 2, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 2, sm6)))
return; return;
src_param_init_from_value(&src_params[0 ^ cmp->src_swap], a, sm6); src_param_init_from_value(&src_params[0 ^ cmp->src_swap], a, 0, sm6);
src_param_init_from_value(&src_params[1 ^ cmp->src_swap], b, sm6); src_param_init_from_value(&src_params[1 ^ cmp->src_swap], b, 0, sm6);
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }
@@ -7342,8 +7348,8 @@ static void sm6_parser_emit_cmpxchg(struct sm6_parser *sm6, const struct dxil_re
if (!(src_params = instruction_src_params_alloc(ins, 3, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 3, sm6)))
return; return;
src_param_make_constant_uint(&src_params[0], 0); src_param_make_constant_uint(&src_params[0], 0);
src_param_init_from_value(&src_params[1], cmp, sm6); src_param_init_from_value(&src_params[1], cmp, 0, sm6);
src_param_init_from_value(&src_params[2], new, sm6); src_param_init_from_value(&src_params[2], new, 0, sm6);
sm6_parser_init_ssa_value(sm6, dst); sm6_parser_init_ssa_value(sm6, dst);
@@ -7572,7 +7578,7 @@ static void sm6_parser_emit_load(struct sm6_parser *sm6, const struct dxil_recor
src_param_make_constant_uint(&src_params[0], reg.idx[1].offset); src_param_make_constant_uint(&src_params[0], reg.idx[1].offset);
/* Struct offset is always zero as there is no struct, just an array. */ /* Struct offset is always zero as there is no struct, just an array. */
src_param_make_constant_uint(&src_params[1], 0); src_param_make_constant_uint(&src_params[1], 0);
src_param_init_from_value(&src_params[2], ptr, sm6); src_param_init_from_value(&src_params[2], ptr, 0, sm6);
src_params[2].reg.alignment = alignment; src_params[2].reg.alignment = alignment;
/* The offset is already in src_params[0]. */ /* The offset is already in src_params[0]. */
src_params[2].reg.idx_count = 1; src_params[2].reg.idx_count = 1;
@@ -7586,7 +7592,7 @@ static void sm6_parser_emit_load(struct sm6_parser *sm6, const struct dxil_recor
return; return;
if (operand_count > 1) if (operand_count > 1)
src_param_make_constant_uint(&src_params[0], 0); src_param_make_constant_uint(&src_params[0], 0);
src_param_init_from_value(&src_params[operand_count - 1], ptr, sm6); src_param_init_from_value(&src_params[operand_count - 1], ptr, 0, sm6);
src_params[operand_count - 1].reg.alignment = alignment; src_params[operand_count - 1].reg.alignment = alignment;
} }
@@ -7759,7 +7765,7 @@ static void sm6_parser_emit_store(struct sm6_parser *sm6, const struct dxil_reco
src_param_make_constant_uint(&src_params[0], reg.idx[1].offset); src_param_make_constant_uint(&src_params[0], reg.idx[1].offset);
/* Struct offset is always zero as there is no struct, just an array. */ /* Struct offset is always zero as there is no struct, just an array. */
src_param_make_constant_uint(&src_params[1], 0); src_param_make_constant_uint(&src_params[1], 0);
src_param_init_from_value(&src_params[2], src, sm6); src_param_init_from_value(&src_params[2], src, 0, sm6);
} }
else else
{ {
@@ -7770,7 +7776,7 @@ static void sm6_parser_emit_store(struct sm6_parser *sm6, const struct dxil_reco
return; return;
if (operand_count > 1) if (operand_count > 1)
src_param_make_constant_uint(&src_params[0], 0); src_param_make_constant_uint(&src_params[0], 0);
src_param_init_from_value(&src_params[operand_count - 1], src, sm6); src_param_init_from_value(&src_params[operand_count - 1], src, 0, sm6);
} }
dst_param = instruction_dst_params_alloc(ins, 1, sm6); dst_param = instruction_dst_params_alloc(ins, 1, sm6);
@@ -7896,7 +7902,9 @@ static void sm6_parser_emit_vselect(struct sm6_parser *sm6, const struct dxil_re
if (!(src_params = instruction_src_params_alloc(ins, 3, sm6))) if (!(src_params = instruction_src_params_alloc(ins, 3, sm6)))
return; return;
for (i = 0; i < 3; ++i) for (i = 0; i < 3; ++i)
src_param_init_from_value(&src_params[i], src[i], sm6); {
src_param_init_from_value(&src_params[i], src[i], 0, sm6);
}
instruction_dst_param_init_ssa_scalar(ins, 0, sm6); instruction_dst_param_init_ssa_scalar(ins, 0, sm6);
} }