nir: Add a ptr_as_array deref type
authorJason Ekstrand <jason.ekstrand@intel.com>
Wed, 28 Nov 2018 18:26:52 +0000 (12:26 -0600)
committerJason Ekstrand <jason@jlekstrand.net>
Tue, 8 Jan 2019 00:38:30 +0000 (00:38 +0000)
commite94a027af8953ba22f4daa3009ab71479b35c78f
tree03a9b69081808ff3bd79f9bfcb257ac7023719ad
parentfc9c4f89b85c0116c0dc22a3eaf25f5df88ad657
nir: Add a ptr_as_array deref type

These correspond directly to SPIR-V's OpPtrAccessChain.  As such, they
treat whatever their parent gives them as if it's the first element in
some array and dereferences that array.  If the parent is, itself, an
array deref, then the two indices can just be added together to get the
final array deref.  However, it can also be used in cases where what you
have is a dereference to some random vec2 value somewhere.  In this
case, we require a cast before the ptr_as_array and use the ptr_stride
field in the cast to provide a stride for the ptr_as_array derefs.

Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
12 files changed:
src/compiler/nir/nir.c
src/compiler/nir/nir.h
src/compiler/nir/nir_builder.h
src/compiler/nir/nir_clone.c
src/compiler/nir/nir_deref.c
src/compiler/nir/nir_instr_set.c
src/compiler/nir/nir_opt_copy_propagate.c
src/compiler/nir/nir_print.c
src/compiler/nir/nir_serialize.c
src/compiler/nir/nir_validate.c
src/compiler/spirv/vtn_cfg.c
src/compiler/spirv/vtn_variables.c