nir/spirv: Array lengths are constants not literals

This commit is contained in:
Jason Ekstrand
2015-12-17 16:36:23 -08:00
parent 1473a8dc6f
commit d7f66f9f6f

View File

@@ -515,8 +515,14 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode,
struct vtn_type *array_element = struct vtn_type *array_element =
vtn_value(b, w[2], vtn_value_type_type)->type; vtn_value(b, w[2], vtn_value_type_type)->type;
/* A length of 0 is used to denote unsized arrays */ unsigned length;
unsigned length = (opcode == SpvOpTypeArray) ? w[3] : 0; if (opcode == SpvOpTypeRuntimeArray) {
/* A length of 0 is used to denote unsized arrays */
length = 0;
} else {
length =
vtn_value(b, w[3], vtn_value_type_constant)->constant->value.u[0];
}
val->type->type = glsl_array_type(array_element->type, length); val->type->type = glsl_array_type(array_element->type, length);
val->type->array_element = array_element; val->type->array_element = array_element;