nir: Fix deref offset calculation for structs.
authorEric Anholt <eric@anholt.net>
Wed, 17 Apr 2019 17:09:14 +0000 (10:09 -0700)
committerEric Anholt <eric@anholt.net>
Fri, 19 Apr 2019 15:45:14 +0000 (08:45 -0700)
We were calcuating the offset for the field within the struct, and just
dropping it on the floor.  Fixes a regression in
KHR-GLES3.shaders.struct.local.nested_struct_array_dynamic_index_fragment
and a few of its friends since the scratch lowering commit.

Fixes: e8e159e9df40 ("nir/deref: Add helpers for getting offsets")
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/nir/nir_deref.c

index 460d3bf465682343b740e8deb21054928cea95ca..93412b1eb6de0662b84abaccc1531f9bae4617f3 100644 (file)
@@ -215,7 +215,7 @@ nir_build_deref_offset(nir_builder *b, nir_deref_instr *deref,
          unsigned field_offset =
             struct_type_get_field_offset(parent->type, size_align,
                                          (*p)->strct.index);
-         nir_iadd(b, offset, nir_imm_int(b, field_offset));
+         offset = nir_iadd(b, offset, nir_imm_int(b, field_offset));
       } else {
          unreachable("Unsupported deref type");
       }