diff options
author | Jason Ekstrand <jason@jlekstrand.net> | 2020-07-10 15:58:39 -0500 |
---|---|---|
committer | Eric Engestrom <eric@engestrom.ch> | 2020-07-22 22:30:04 +0200 |
commit | fd3caf582843dfe4bf70b51d05890affa8830e6c (patch) | |
tree | f74aaf2942bb0bf8785f33c3774ee399f917fe42 | |
parent | 32d2431a553945ccf44edb419a003c1070eb4694 (diff) |
spirv: Allow block-decorated struct types for constants
Whenever a struct type is decorated Block or BufferBlock we turn that
into a GLSL_TYPE_INTERFACE. Since these decorations can end up random
places, we should allow them for constants.
Closes: #3252
Fixes: 9d0ae777dd6 "spirv: Use interface type for block and buffer..."
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5855>
(cherry picked from commit 351b5137d71b8dc944bad6dcb83cd93e6d38c44e)
-rw-r--r-- | .pick_status.json | 2 | ||||
-rw-r--r-- | src/compiler/nir/nir_print.c | 1 | ||||
-rw-r--r-- | src/compiler/spirv/spirv_to_nir.c | 3 |
3 files changed, 4 insertions, 2 deletions
diff --git a/.pick_status.json b/.pick_status.json index 7c6813904a8..ba29c80a0fe 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -3829,7 +3829,7 @@ "description": "spirv: Allow block-decorated struct types for constants", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "master_sha": null, "because_sha": "9d0ae777dd68dad682dcc7768726996639ae2684" }, diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index 6fc8fc9b5c1..d1959d4d5f5 100644 --- a/src/compiler/nir/nir_print.c +++ b/src/compiler/nir/nir_print.c @@ -399,6 +399,7 @@ print_constant(nir_constant *c, const struct glsl_type *type, print_state *state break; case GLSL_TYPE_STRUCT: + case GLSL_TYPE_INTERFACE: for (i = 0; i < c->num_elements; i++) { if (i > 0) fprintf(fp, ", "); fprintf(fp, "{ "); diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 795f4c8bdcf..ed11b19e6b7 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -256,7 +256,8 @@ vtn_const_ssa_value(struct vtn_builder *b, nir_constant *constant, break; } - case GLSL_TYPE_STRUCT: { + case GLSL_TYPE_STRUCT: + case GLSL_TYPE_INTERFACE: { unsigned elems = glsl_get_length(val->type); val->elems = ralloc_array(b, struct vtn_ssa_value *, elems); for (unsigned i = 0; i < elems; i++) { |