mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
vkd3d-shader/dxil: Allow creating signed parameters in src_param_init_from_value().
This commit is contained in:
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
@@ -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(¶m->reg, src, 0, sm6);
|
vsir_register_from_dxil_value(¶m->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], ®);
|
src_param_init_vector_from_reg(&src_params[0], ®);
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user