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:

committed by
Marge Bot

parent
81773b4b44
commit
351b5137d7
@@ -399,6 +399,7 @@ print_constant(nir_constant *c, const struct glsl_type *type, print_state *state
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case GLSL_TYPE_STRUCT:
|
case GLSL_TYPE_STRUCT:
|
||||||
|
case GLSL_TYPE_INTERFACE:
|
||||||
for (i = 0; i < c->num_elements; i++) {
|
for (i = 0; i < c->num_elements; i++) {
|
||||||
if (i > 0) fprintf(fp, ", ");
|
if (i > 0) fprintf(fp, ", ");
|
||||||
fprintf(fp, "{ ");
|
fprintf(fp, "{ ");
|
||||||
|
@@ -256,7 +256,8 @@ vtn_const_ssa_value(struct vtn_builder *b, nir_constant *constant,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case GLSL_TYPE_STRUCT: {
|
case GLSL_TYPE_STRUCT:
|
||||||
|
case GLSL_TYPE_INTERFACE: {
|
||||||
unsigned elems = glsl_get_length(val->type);
|
unsigned elems = glsl_get_length(val->type);
|
||||||
val->elems = ralloc_array(b, struct vtn_ssa_value *, elems);
|
val->elems = ralloc_array(b, struct vtn_ssa_value *, elems);
|
||||||
for (unsigned i = 0; i < elems; i++) {
|
for (unsigned i = 0; i < elems; i++) {
|
||||||
|
Reference in New Issue
Block a user