diff options
author | Jason Ekstrand <jason@jlekstrand.net> | 2017-12-07 23:42:13 -0800 |
---|---|---|
committer | Jason Ekstrand <jason.ekstrand@intel.com> | 2017-12-12 07:34:46 -0800 |
commit | aaeda8d7d4e78e9f9fb63c3ec6879a436871f51e (patch) | |
tree | c70e1b24e5a1f5fbd7493a7b5af19e0769cc7887 | |
parent | ec0a4fcec03cacfc3e075cf9e5e6584b672e4c82 (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.c | 5 | ||||
-rw-r--r-- | src/compiler/spirv/vtn_private.h | 7 |
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 */ |