diff options
author | Rob Clark <[email protected]> | 2014-12-30 20:02:36 -0500 |
---|---|---|
committer | Rob Clark <[email protected]> | 2015-01-07 19:37:28 -0500 |
commit | 1e5c207dba4dbd07919bff2efe57ad361a44ac84 (patch) | |
tree | 5c138ae76d07d4de3648ae8bdf78fbc72c72e1ec /src/gallium/drivers/freedreno/ir3/ir3.h | |
parent | 63e5b72da8b1df4bbb0fcf46524d106f51264605 (diff) |
freedreno/ir3: start on indirect gpr reads
Handle TEMP[ADDR[]] src registers by generating a fanin to group array
elements, similarly to how texture fetch instructions work.
NOTE:
For all the scalar instructions generated for a single tgsi vector
operation which uses an array src (or possibly even uses the same array
as multiple srcs), re-use the same fanin node. Since a vector operation
operates on all components at the same time, it should never see more
than one version of the same array.
Signed-off-by: Rob Clark <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/ir3/ir3.h')
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3.h | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3.h b/src/gallium/drivers/freedreno/ir3/ir3.h index b1fb08fcec5..a3bbba941ce 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3.h +++ b/src/gallium/drivers/freedreno/ir3/ir3.h @@ -209,6 +209,9 @@ struct ir3_instruction { struct { struct ir3_block *block; } inout; + struct { + int off; /* offset relative to addr reg */ + } deref; /* XXX keep this as big as all other union members! */ uint32_t info[3]; @@ -465,7 +468,7 @@ static inline struct ir3_instruction *ssa(struct ir3_register *reg) static inline bool reg_gpr(struct ir3_register *r) { - if (r->flags & (IR3_REG_CONST | IR3_REG_IMMED | IR3_REG_RELATIV | IR3_REG_ADDR)) + if (r->flags & (IR3_REG_CONST | IR3_REG_IMMED | IR3_REG_ADDR)) return false; if ((reg_num(r) == REG_A0) || (reg_num(r) == REG_P0)) return false; |