r600g/sb: implement r600 gpr index workaround. (v3.1)

Graphics / Mesa 3D Graphics Library / Mesa - Dave Airlie [redhat.com] - 15 December 2014 20:44 UTC

r600, rv610 and rv630 all have a bug in their GPR indexing and how the hw inserts access to PV.

If the base index for the src is the same as the dst gpr in a previous group, then it will use PV instead of using the indexed gpr correctly.

The workaround is to insert a NOP when you detect this.

v2: add second part of fix detecting DST rel writes followed by same src base index reads.

v3: forget adding stuff to structs, just iterate over the previous node group again, makes it more obvious.
v3.1: drop local_nop.

Fixes ~200 piglit regressions on rv635 since SB was introduced.

3c8ef3a r600g/sb: implement r600 gpr index workaround. (v3.1)
src/gallium/drivers/r600/sb/sb_bc.h | 2 +
src/gallium/drivers/r600/sb/sb_bc_finalize.cpp | 57 +++++++++++++++++++++---
src/gallium/drivers/r600/sb/sb_context.cpp | 2 +
src/gallium/drivers/r600/sb/sb_pass.h | 5 ++-
4 files changed, 57 insertions(+), 9 deletions(-)

Upstream: cgit.freedesktop.org


  • Share