Mesa (master): freedreno/ir3: disable cp for indirect src's

Rob Clark robclark at kemper.freedesktop.org
Mon May 23 19:57:44 UTC 2016


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

Author: Rob Clark <robclark at freedesktop.org>
Date:   Mon May 23 15:53:23 2016 -0400

freedreno/ir3: disable cp for indirect src's

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 at freedesktop.org>

---

 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 6e71bee..57c37e2 100644
--- a/src/gallium/drivers/freedreno/ir3/ir3_cp.c
+++ b/src/gallium/drivers/freedreno/ir3/ir3_cp.c
@@ -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:




More information about the mesa-commit mailing list