From 56247130c1ae5b1fc59fb24d59ad6d42d0ee60ca Mon Sep 17 00:00:00 2001 From: Giovanni Mascellani Date: Fri, 28 Mar 2025 15:19:31 +0100 Subject: [PATCH] vkd3d-shader/ir: Validate UAV flags in vsir programs. --- libs/vkd3d-shader/ir.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libs/vkd3d-shader/ir.c b/libs/vkd3d-shader/ir.c index 2cba46e12..0e7116235 100644 --- a/libs/vkd3d-shader/ir.c +++ b/libs/vkd3d-shader/ir.c @@ -10479,7 +10479,7 @@ static void vsir_validate_descriptors(struct validation_context *ctx) for (i = 0; i < descriptors->descriptor_count; ++i) { const struct vkd3d_shader_descriptor_info1 *descriptor = &descriptors->descriptors[i]; - uint32_t flags_mask = 0; + uint32_t flags_mask = 0, uav_flags_mask = 0; if (descriptor->type >= VKD3D_SHADER_DESCRIPTOR_TYPE_COUNT) validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_DESCRIPTOR_TYPE, @@ -10520,6 +10520,9 @@ static void vsir_validate_descriptors(struct validation_context *ctx) | VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_READ | VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_UAV_ATOMICS | VKD3D_SHADER_DESCRIPTOR_INFO_FLAG_RAW_BUFFER; + uav_flags_mask = VKD3DSUF_GLOBALLY_COHERENT + | VKD3DSUF_RASTERISER_ORDERED_VIEW + | VKD3DSUF_ORDER_PRESERVING_COUNTER; break; case VKD3D_SHADER_DESCRIPTOR_TYPE_CBV: @@ -10537,6 +10540,11 @@ static void vsir_validate_descriptors(struct validation_context *ctx) validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_FLAGS, "Descriptor %u of type %#x has invalid flags %#x.", i, descriptor->type, descriptor->flags); + + if (descriptor->uav_flags & ~uav_flags_mask) + validator_error(ctx, VKD3D_SHADER_ERROR_VSIR_INVALID_FLAGS, + "Descriptor %u of type %#x has invalid UAV flags %#x.", + i, descriptor->type, descriptor->uav_flags); } }