mirror of
https://gitlab.winehq.org/wine/vkd3d.git
synced 2025-12-15 08:03:30 -08:00
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:
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
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user