Module: Mesa
Branch: master
Commit: ddede497b831fb98e3540247b570968532cdacc9
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=ddede497b831fb98e3540247b570968532cdacc9

Author: Rob Clark <[email protected]>
Date:   Fri Jan 15 17:07:02 2016 -0500

freedreno/ir3: workaround bug/feature

Seems like in certain cases, we cannot use c<a0.x+0> as the third src to
cat3 instructions.  This may be slightly conservative, we may only have
this restriction when the first src is also const.

This fixes, for example, +24/-0 of the variable-indexing piglit tests.

Signed-off-by: Rob Clark <[email protected]>

---

 src/gallium/drivers/freedreno/ir3/ir3_cp.c |    9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/gallium/drivers/freedreno/ir3/ir3_cp.c 
b/src/gallium/drivers/freedreno/ir3/ir3_cp.c
index 0d88e7b..1cc211a 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_cp.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_cp.c
@@ -288,6 +288,15 @@ reg_cp(struct ir3_instruction *instr, struct ir3_register 
*reg, unsigned n)
                                        conflicts(instr->address, 
reg->instr->address))
                                return;
 
+                       /* This seems to be a hw bug, or something where the 
timings
+                        * just somehow don't work out.  This restriction may 
only
+                        * apply if the first src is also CONST.
+                        */
+                       if ((instr->category == 3) && (n == 2) &&
+                                       (src_reg->flags & IR3_REG_RELATIV) &&
+                                       (src_reg->array.offset == 0))
+                               return;
+
                        src_reg = ir3_reg_clone(instr->block->shader, src_reg);
                        src_reg->flags = new_flags;
                        instr->regs[n+1] = src_reg;

_______________________________________________
mesa-commit mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to