freedreno/ir3: disable cp for indirect src's
authorRob Clark <robclark@freedesktop.org>
Mon, 23 May 2016 19:53:23 +0000 (15:53 -0400)
committerRob Clark <robclark@freedesktop.org>
Mon, 23 May 2016 19:57:13 +0000 (15:57 -0400)
The variable-indexing tests always had a few random fails, which I
usually couldn't reproduce when running tests manually.  Somehow
recently this got a lot worse.  I ported a couple of the shaders to
GLES to see what blob does, and it also seems to be avoiding to cp
indirect srcs.  So I guess indirect w/ instructions other than cat1
(mov) are not totally reliable.  Let's just switch that off until
this is better understood.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
src/gallium/drivers/freedreno/ir3/ir3_cp.c

index 6e71beed458607973a8e8f0caceef6312e9b8fc2..57c37e26372ee22c454f9b341104532317b3f1cf 100644 (file)
@@ -102,6 +102,15 @@ static bool valid_flags(struct ir3_instruction *instr, unsigned n,
                        (flags & IR3_REG_RELATIV))
                return false;
 
+       /* TODO it seems to *mostly* work to cp RELATIV, except we get some
+        * intermittent piglit variable-indexing fails.  Newer blob driver
+        * doesn't seem to cp these.  Possibly this is hw workaround?  Not
+        * sure, but until that is understood better, lets just switch off
+        * cp for indirect src's:
+        */
+       if (flags & IR3_REG_RELATIV)
+               return false;
+
        /* clear flags that are 'ok' */
        switch (opc_cat(instr->opc)) {
        case 1: