summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Ekstrand <jason@jlekstrand.net>2017-12-07 23:42:13 -0800
committerJason Ekstrand <jason.ekstrand@intel.com>2017-12-12 07:34:46 -0800
commitaaeda8d7d4e78e9f9fb63c3ec6879a436871f51e (patch)
treec70e1b24e5a1f5fbd7493a7b5af19e0769cc7887
parentec0a4fcec03cacfc3e075cf9e5e6584b672e4c82 (diff)
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 <siglesias@igalia.com>
-rw-r--r--src/compiler/spirv/spirv_to_nir.c5
-rw-r--r--src/compiler/spirv/vtn_private.h7
2 files changed, 11 insertions, 1 deletions
diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c
index 6c61eb423b..0493dd3a8b 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 a0a4f3a4fa..7cb69d7843 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 */