From d61bd972d861d9246fe7f9de71158aa79368bb79 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Fri, 10 Apr 2015 17:38:17 -0700 Subject: [PATCH] nir/locals_to_regs: Hanadle indirect accesses of length-1 arrays Reviewed-by: Connor Abbott --- src/glsl/nir/nir_lower_locals_to_regs.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/glsl/nir/nir_lower_locals_to_regs.c b/src/glsl/nir/nir_lower_locals_to_regs.c index 48459f735ab..bc6a3d320c4 100644 --- a/src/glsl/nir/nir_lower_locals_to_regs.c +++ b/src/glsl/nir/nir_lower_locals_to_regs.c @@ -135,6 +135,14 @@ get_deref_reg_src(nir_deref_var *deref, nir_instr *instr, src.reg.base_offset = 0; src.reg.indirect = NULL; + /* It is possible for a user to create a shader that has an array with a + * single element and then proceed to access it indirectly. Indirectly + * accessing a non-array register is not allowed in NIR. In order to + * handle this case we just convert it to a direct reference. + */ + if (src.reg.reg->num_array_elems == 0) + return src; + nir_deref *tail = &deref->deref; while (tail->child != NULL) { const struct glsl_type *parent_type = tail->type; -- 2.30.2