vkd3d-shader/ir: Validate descriptor types in vsir programs.

This commit is contained in:
Giovanni Mascellani
2025-03-28 10:39:43 +01:00
committed by Henri Verbeet
parent 869e6ef583
commit 0da80c1f25
Notes: Henri Verbeet 2025-04-16 16:52:04 +02:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1447
2 changed files with 19 additions and 0 deletions

View File

@@ -8857,6 +8857,21 @@ static void vsir_validate_signature(struct validation_context *ctx, const struct
}
}
static void vsir_validate_descriptors(struct validation_context *ctx)
{
const struct vkd3d_shader_scan_descriptor_info1 *descriptors = &ctx->program->descriptors;
unsigned int i;
for (i = 0; i < descriptors->descriptor_count; ++i)
{
const struct vkd3d_shader_descriptor_info1 *descriptor = &descriptors->descriptors[i];
if (descriptor->type >= VKD3D_SHADER_DESCRIPTOR_TYPE_COUNT)
validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_DESCRIPTOR_TYPE,
"Descriptor %u has invalid type %#x.", i, descriptor->type);
}
}
static const char *name_from_cf_type(enum vsir_control_flow_type type)
{
switch (type)
@@ -9823,6 +9838,8 @@ enum vkd3d_result vsir_program_validate(struct vsir_program *program, uint64_t c
}
}
vsir_validate_descriptors(&ctx);
if (!(ctx.temps = vkd3d_calloc(ctx.program->temp_count, sizeof(*ctx.temps))))
goto fail;

View File

@@ -61,6 +61,7 @@
#define VKD3D_SHADER_COMPONENT_TYPE_COUNT (VKD3D_SHADER_COMPONENT_INT16 + 1)
#define VKD3D_SHADER_MINIMUM_PRECISION_COUNT (VKD3D_SHADER_MINIMUM_PRECISION_UINT_16 + 1)
#define VKD3D_SHADER_DESCRIPTOR_TYPE_COUNT (VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER + 1)
#define VKD3D_MAX_STREAM_COUNT 4
@@ -257,6 +258,7 @@ enum vkd3d_shader_error
VKD3D_SHADER_ERROR_VSIR_MISSING_SEMANTIC = 9021,
VKD3D_SHADER_ERROR_VSIR_INVALID_SIGNATURE = 9022,
VKD3D_SHADER_ERROR_VSIR_INVALID_RANGE = 9023,
VKD3D_SHADER_ERROR_VSIR_INVALID_DESCRIPTOR_TYPE = 9024,
VKD3D_SHADER_WARNING_VSIR_DYNAMIC_DESCRIPTOR_ARRAY = 9300,