diff options
author | Rob Clark <[email protected]> | 2014-10-18 15:28:16 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2014-10-20 21:42:44 -0400 |
commit | 8a0ffedd8de51eaf980855283c4525dba6dc5847 (patch) | |
tree | 91b1a9e527826679fac39959538678896a4c4328 /src/gallium/drivers/freedreno/ir3/ir3.h | |
parent | ab33a240890a7ef147d4b8cf35c27ae1932a1dbe (diff) |
freedreno/ir3: fix potential gpu lockup with kill
It seems like the hardware is unhappy if we execute a kill instruction
prior to last input (ei). Probably the shader thread stops executing
and the end-input flag is never set.
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 | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3.h b/src/gallium/drivers/freedreno/ir3/ir3.h index d2d3dcaadb9..21992f68ced 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3.h +++ b/src/gallium/drivers/freedreno/ir3/ir3.h @@ -210,7 +210,11 @@ struct ir3_instruction { * result of moving a const to a reg would have a low cost, so to * it could make sense to duplicate the instruction at various * points where the result is needed to reduce register footprint. + * + * DEPTH_UNUSED used to mark unused instructions after depth + * calculation pass. */ +#define DEPTH_UNUSED ~0 unsigned depth; }; struct ir3_instruction *next; @@ -224,6 +228,8 @@ struct ir3_heap_chunk; struct ir3 { unsigned instrs_count, instrs_sz; struct ir3_instruction **instrs; + unsigned baryfs_count, baryfs_sz; + struct ir3_instruction **baryfs; unsigned heap_idx; struct ir3_heap_chunk *chunk; }; @@ -272,6 +278,10 @@ static inline void ir3_clear_mark(struct ir3 *shader) /* TODO would be nice to drop the instruction array.. for * new compiler, _clear_mark() is all we use it for, and * we could probably manage a linked list instead.. + * + * Also, we'll probably want to mark instructions within + * a block, so tracking the list of instrs globally is + * unlikely to be what we want. */ unsigned i; for (i = 0; i < shader->instrs_count; i++) { |