vkd3d-shader/ir: Move the outpointid_param field out of struct vkd3d_shader_instruction_array.

It is worth noting that previously, the case of
vsir_program_create_outpointid_param() failing on
sm6_parser_init_signature() wasn't properly handled.
This commit is contained in:
Francisco Casas
2025-09-12 15:28:26 -03:00
committed by Henri Verbeet
parent 84b89f0675
commit 9323dc429c
Notes: Henri Verbeet 2025-09-17 12:56:43 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1725
3 changed files with 13 additions and 7 deletions

View File

@@ -919,6 +919,7 @@ struct sm6_parser
struct vkd3d_shader_dst_param *input_params;
struct vkd3d_shader_dst_param *patch_constant_params;
uint32_t io_regs_declared[VKD3D_BITMAP_SIZE(VKD3DSPR_COUNT)];
struct vkd3d_shader_src_param *outpointid_param;
struct sm6_function *functions;
size_t function_count;
@@ -4217,7 +4218,10 @@ static void sm6_parser_init_signature(struct sm6_parser *sm6, const struct shade
if (is_control_point)
{
if (reg_type == VKD3DSPR_OUTPUT)
param->reg.idx[count].rel_addr = vsir_program_create_outpointid_param(sm6->program);
{
VKD3D_ASSERT(sm6->outpointid_param);
param->reg.idx[count].rel_addr = sm6->outpointid_param;
}
param->reg.idx[count++].offset = 0;
}
@@ -10007,6 +10011,14 @@ static enum vkd3d_result sm6_parser_signatures_init(struct sm6_parser *sm6, cons
&program->patch_constant_signature, tessellator_domain, false)) < 0)
return ret;
if (sm6->program->shader_version.type == VKD3D_SHADER_TYPE_HULL
&& !(sm6->outpointid_param = vsir_program_create_outpointid_param(sm6->program)))
{
vkd3d_shader_parser_error(&sm6->p, VKD3D_SHADER_ERROR_DXIL_OUT_OF_MEMORY,
"Failed to allocate outpointid parameter.");
return VKD3D_ERROR_OUT_OF_MEMORY;
}
if ((ret = sm6_parser_init_input_signature(sm6, &program->input_signature)) < 0)
return ret;