diff options
author | Jason Ekstrand <[email protected]> | 2018-10-25 10:34:34 -0500 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2019-01-08 00:38:29 +0000 |
commit | 639c236e74e99524245c22f1fa0758603f558cf2 (patch) | |
tree | 51ba30915624b144e1e416789593619d196a324e /src/compiler/spirv/vtn_private.h | |
parent | c59f07684c0c99fad0c246dd4a475f6bef5d3cbc (diff) |
spirv: Emit NIR deref instructions on-the-fly
This simplifies our deref handling by emitting the actual NIR deref
instructions on-the-fly instead of of building up a deref chain and then
emitting them at the last moment. In order for this to work with the
parts of the compiler that assume they can chase deref chains, we have
to run nir_rematerialize_derefs_in_use_blocks_impl to put the derefs
back in the right places. Otherwise, in cases such as loop continues
where the SPIR-V blocks are not in the same order as the NIR blocks, we
may end up with a deref chain with a parent that does not dominate it's
child and nir_repair_ssa_impl will insert phis in the deref chain.
Reviewed-by: Alejandro PiƱeiro <[email protected]>
Reviewed-by: Caio Marcelo de Oliveira Filho <[email protected]>
Diffstat (limited to 'src/compiler/spirv/vtn_private.h')
-rw-r--r-- | src/compiler/spirv/vtn_private.h | 13 |
1 files changed, 1 insertions, 12 deletions
diff --git a/src/compiler/spirv/vtn_private.h b/src/compiler/spirv/vtn_private.h index da7a04ce59f..defcbb8e69d 100644 --- a/src/compiler/spirv/vtn_private.h +++ b/src/compiler/spirv/vtn_private.h @@ -443,20 +443,9 @@ struct vtn_pointer { */ struct vtn_variable *var; - /** The deref at the base of the chain - * - * This field may be NULL if the pointer uses a (block_index, offset) pair - * instead of an access chain or if the access chain starts at a variable. - */ + /** The NIR deref corresponding to this pointer */ nir_deref_instr *deref; - /** An access chain describing how to get from var to the referenced data - * - * This field may be NULL if the pointer references the entire variable or - * if a (block_index, offset) pair is used instead of an access chain. - */ - struct vtn_access_chain *chain; - /** A (block_index, offset) pair representing a UBO or SSBO position. */ struct nir_ssa_def *block_index; struct nir_ssa_def *offset; |