From d7f66f9f6fb47ddf30c782961eb2fc1dcc593975 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Thu, 17 Dec 2015 16:36:23 -0800 Subject: [PATCH] nir/spirv: Array lengths are constants not literals --- src/glsl/nir/spirv_to_nir.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/glsl/nir/spirv_to_nir.c b/src/glsl/nir/spirv_to_nir.c index 1b1d7b5098f..07d47891770 100644 --- a/src/glsl/nir/spirv_to_nir.c +++ b/src/glsl/nir/spirv_to_nir.c @@ -515,8 +515,14 @@ vtn_handle_type(struct vtn_builder *b, SpvOp opcode, struct vtn_type *array_element = vtn_value(b, w[2], vtn_value_type_type)->type; - /* A length of 0 is used to denote unsized arrays */ - unsigned length = (opcode == SpvOpTypeArray) ? w[3] : 0; + unsigned length; + 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->array_element = array_element; -- 2.30.2