diff options
author | Rob Clark <[email protected]> | 2016-05-23 15:53:23 -0400 |
---|---|---|
committer | Rob Clark <[email protected]> | 2016-05-23 15:57:13 -0400 |
commit | 46ff17559b1369f0fe7dca000f51f077ffd1dae5 (patch) | |
tree | 7f0fac93b0984640fb9b97a562035329c927181c /src/gallium/drivers/freedreno/ir3 | |
parent | c3c43702991d1590c98039aab18e202d33ca07c0 (diff) |
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 <[email protected]>
Diffstat (limited to 'src/gallium/drivers/freedreno/ir3')
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3_cp.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3_cp.c b/src/gallium/drivers/freedreno/ir3/ir3_cp.c index 6e71beed458..57c37e26372 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: |