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: 9d0ae777dd "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>
This commit is contained in:
Jason Ekstrand
2020-07-10 15:58:39 -05:00
committed by Marge Bot
parent 81773b4b44
commit 351b5137d7
2 changed files with 3 additions and 1 deletions

View File

@@ -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, "{ ");

View File

@@ -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++) {