From: Jason Ekstrand Date: Fri, 8 Dec 2017 07:42:13 +0000 (-0800) Subject: spirv: Make sampled images a real type X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=aaeda8d7d4e78e9f9fb63c3ec6879a436871f51e;p=mesa.git spirv: Make sampled images a real type Previously, we just gave them exactly the same type as the respective image (which already had a sampler2D or similar type). Now they have their own base type and a pointer to the vtn_type for the image. Reviewed-by: Samuel Iglesias Gonsálvez --- diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 6c61eb423b3..0493dd3a8b1 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -511,6 +511,7 @@ vtn_type_copy(struct vtn_builder *b, struct vtn_type *src) case vtn_base_type_pointer: case vtn_base_type_image: case vtn_base_type_sampler: + case vtn_base_type_sampled_image: /* Nothing more to do */ break; @@ -1130,7 +1131,9 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode, } case SpvOpTypeSampledImage: - val->type = vtn_value(b, w[2], vtn_value_type_type)->type; + val->type->base_type = vtn_base_type_sampled_image; + val->type->image = vtn_value(b, w[2], vtn_value_type_type)->type; + val->type->type = val->type->image->type; break; case SpvOpTypeSampler: diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h index a0a4f3a4fae..7cb69d78430 100644 --- a/src/compiler/spirv/vtn_private.h +++ b/src/compiler/spirv/vtn_private.h @@ -265,6 +265,7 @@ enum vtn_base_type { vtn_base_type_pointer, vtn_base_type_image, vtn_base_type_sampler, + vtn_base_type_sampled_image, vtn_base_type_function, }; @@ -347,6 +348,12 @@ struct vtn_type { SpvAccessQualifier access_qualifier; }; + /* Members for sampled image types */ + struct { + /* For sampled images, the image type */ + struct vtn_type *image; + }; + /* Members for function types */ struct { /* For functions, the vtn_type for each parameter */