From 351b5137d71b8dc944bad6dcb83cd93e6d38c44e Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 10 Jul 2020 15:58:39 -0500 Subject: [PATCH] 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 Part-of: --- src/compiler/nir/nir_print.c | 1 + src/compiler/spirv/spirv_to_nir.c | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir_print.c b/src/compiler/nir/nir_print.c index e83d411..fe73746 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 2e351cc..b9f35ad 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++) { -- 2.7.4