vkd3d-shader/ir: Validate the output control point count.

This commit is contained in:
Giovanni Mascellani 2024-10-11 11:23:09 +02:00 committed by Henri Verbeet
parent bd3ba87747
commit 859b911b3a
Notes: Henri Verbeet 2024-10-15 17:05:01 +02:00
Approved-by: Giovanni Mascellani (@giomasce)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1181

View File

@ -7518,6 +7518,21 @@ enum vkd3d_result vsir_program_validate(struct vsir_program *program, uint64_t c
program->input_control_point_count); program->input_control_point_count);
} }
switch (program->shader_version.type)
{
case VKD3D_SHADER_TYPE_HULL:
if (program->output_control_point_count == 0)
validator_error(&ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_SIGNATURE,
"Invalid zero output control point count.");
break;
default:
if (program->output_control_point_count != 0)
validator_error(&ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_SIGNATURE,
"Invalid output control point count %u.",
program->output_control_point_count);
}
vsir_validate_signature(&ctx, &program->input_signature, SIGNATURE_TYPE_INPUT); vsir_validate_signature(&ctx, &program->input_signature, SIGNATURE_TYPE_INPUT);
vsir_validate_signature(&ctx, &program->output_signature, SIGNATURE_TYPE_OUTPUT); vsir_validate_signature(&ctx, &program->output_signature, SIGNATURE_TYPE_OUTPUT);
vsir_validate_signature(&ctx, &program->patch_constant_signature, SIGNATURE_TYPE_PATCH_CONSTANT); vsir_validate_signature(&ctx, &program->patch_constant_signature, SIGNATURE_TYPE_PATCH_CONSTANT);