mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-09-12 18:50:22 -07:00
vkd3d-shader/dxil: Store a SM6 value in sm6_phi.
Rather than a VSIR register.
This commit is contained in:
committed by
Henri Verbeet
parent
a9a3100cca
commit
00b3fb96d9
Notes:
Henri Verbeet
2025-06-05 16:19:21 +02:00
Approved-by: Henri Verbeet (@hverbeet) Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1539
@@ -748,7 +748,7 @@ struct incoming_value
|
|||||||
|
|
||||||
struct sm6_phi
|
struct sm6_phi
|
||||||
{
|
{
|
||||||
struct vkd3d_shader_register reg;
|
struct sm6_value value;
|
||||||
struct incoming_value *incoming;
|
struct incoming_value *incoming;
|
||||||
size_t incoming_capacity;
|
size_t incoming_capacity;
|
||||||
size_t incoming_count;
|
size_t incoming_count;
|
||||||
@@ -7480,7 +7480,6 @@ static void sm6_parser_emit_phi(struct sm6_parser *sm6, const struct dxil_record
|
|||||||
|
|
||||||
if (!(phi = sm6_block_phi_require_space(code_block, sm6)))
|
if (!(phi = sm6_block_phi_require_space(code_block, sm6)))
|
||||||
return;
|
return;
|
||||||
sm6_register_from_value(&phi->reg, dst, sm6);
|
|
||||||
phi->incoming_count = record->operand_count / 2u;
|
phi->incoming_count = record->operand_count / 2u;
|
||||||
|
|
||||||
if (!vkd3d_array_reserve((void **)&phi->incoming, &phi->incoming_capacity, phi->incoming_count,
|
if (!vkd3d_array_reserve((void **)&phi->incoming, &phi->incoming_capacity, phi->incoming_count,
|
||||||
@@ -8079,7 +8078,7 @@ static enum vkd3d_result sm6_function_resolve_phi_incomings(const struct sm6_fun
|
|||||||
"A PHI incoming value is not a constant or SSA register.");
|
"A PHI incoming value is not a constant or SSA register.");
|
||||||
return VKD3D_ERROR_INVALID_SHADER;
|
return VKD3D_ERROR_INVALID_SHADER;
|
||||||
}
|
}
|
||||||
if (src->reg.data_type != phi->reg.data_type)
|
if (src->type != phi->value.type)
|
||||||
{
|
{
|
||||||
WARN("Type mismatch.\n");
|
WARN("Type mismatch.\n");
|
||||||
vkd3d_shader_parser_warning(&sm6->p, VKD3D_SHADER_WARNING_DXIL_TYPE_MISMATCH,
|
vkd3d_shader_parser_warning(&sm6->p, VKD3D_SHADER_WARNING_DXIL_TYPE_MISMATCH,
|
||||||
@@ -8252,6 +8251,10 @@ static enum vkd3d_result sm6_parser_function_init(struct sm6_parser *sm6, const
|
|||||||
if (record->attachment)
|
if (record->attachment)
|
||||||
metadata_attachment_record_apply(record->attachment, record->code, ins, dst, sm6);
|
metadata_attachment_record_apply(record->attachment, record->code, ins, dst, sm6);
|
||||||
|
|
||||||
|
/* This is specific for PHI nodes, but must happen after attachments have been applied. */
|
||||||
|
if (record->code == FUNC_CODE_INST_PHI)
|
||||||
|
code_block->phi[code_block->phi_count - 1].value = *dst;
|
||||||
|
|
||||||
if (is_terminator)
|
if (is_terminator)
|
||||||
{
|
{
|
||||||
++block_idx;
|
++block_idx;
|
||||||
@@ -8398,7 +8401,7 @@ static void sm6_block_emit_phi(const struct sm6_block *block, struct sm6_parser
|
|||||||
}
|
}
|
||||||
|
|
||||||
dst_param_init(dst_param);
|
dst_param_init(dst_param);
|
||||||
dst_param->reg = src_phi->reg;
|
sm6_register_from_value(&dst_param->reg, &src_phi->value, sm6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user