diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 696984367..43af09a06 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -8869,6 +8869,15 @@ static void vsir_validate_descriptors(struct validation_context *ctx) 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); + + if (descriptor->resource_type >= VKD3D_SHADER_RESOURCE_TYPE_COUNT) + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_RESOURCE_TYPE, + "Descriptor %u has invalid resource type %#x.", i, descriptor->resource_type); + else if ((descriptor->resource_type == VKD3D_SHADER_RESOURCE_NONE) + != (descriptor->type == VKD3D_SHADER_DESCRIPTOR_TYPE_SAMPLER)) + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_RESOURCE_TYPE, + "Descriptor %u has invalid resource type %#x for descriptor type %#x.", + i, descriptor->resource_type, descriptor->type); } } diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h index 61fb6b9f4..2b8ec09de 100644 --- a/libs/vkd3d-shader/vkd3d_shader_private.h +++ b/libs/vkd3d-shader/vkd3d_shader_private.h @@ -62,6 +62,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_SHADER_RESOURCE_TYPE_COUNT (VKD3D_SHADER_RESOURCE_TEXTURE_CUBEARRAY + 1) #define VKD3D_MAX_STREAM_COUNT 4 @@ -259,6 +260,7 @@ enum vkd3d_shader_error VKD3D_SHADER_ERROR_VSIR_INVALID_SIGNATURE = 9022, VKD3D_SHADER_ERROR_VSIR_INVALID_RANGE = 9023, VKD3D_SHADER_ERROR_VSIR_INVALID_DESCRIPTOR_TYPE = 9024, + VKD3D_SHADER_ERROR_VSIR_INVALID_RESOURCE_TYPE = 9025, VKD3D_SHADER_WARNING_VSIR_DYNAMIC_DESCRIPTOR_ARRAY = 9300,