From aaeda8d7d4e78e9f9fb63c3ec6879a436871f51e Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 7 Dec 2017 23:42:13 -0800 Subject: [PATCH] spirv: Make sampled images a real type MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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 --- src/compiler/spirv/spirv_to_nir.c | 5 ++++- src/compiler/spirv/vtn_private.h | 7 +++++++ 2 files changed, 11 insertions(+), 1 deletion(-) 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 */ -- 2.30.2