spirv: Add a guard for OpTypeForwardPointer storage classes
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6479>
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index f400c32..c22f2b2 100644
--- a/src/compiler/spirv/spirv_to_nir.c
+++ b/src/compiler/spirv/spirv_to_nir.c
@@ -1518,6 +1518,12 @@
SpvStorageClass storage_class = w[2];
+ vtn_fail_if(opcode == SpvOpTypeForwardPointer &&
+ b->shader->info.stage != MESA_SHADER_KERNEL &&
+ storage_class != SpvStorageClassPhysicalStorageBuffer,
+ "OpTypeForwardPointer is only allowed in Vulkan with "
+ "the PhysicalStorageBuffer storage class");
+
if (val->value_type == vtn_value_type_invalid) {
val->value_type = vtn_value_type_type;
val->type = rzalloc(b, struct vtn_type);