From: Jason Ekstrand Date: Sat, 11 Apr 2015 00:38:17 +0000 (-0700) Subject: nir/locals_to_regs: Hanadle indirect accesses of length-1 arrays X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d61bd972d861d9246fe7f9de71158aa79368bb79;p=mesa.git nir/locals_to_regs: Hanadle indirect accesses of length-1 arrays Reviewed-by: Connor Abbott --- 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;