r600g: fixup AR handling (v5)
authorDave Airlie <airlied@redhat.com>
Wed, 18 Jan 2012 15:16:55 +0000 (15:16 +0000)
committerDave Airlie <airlied@redhat.com>
Fri, 20 Jan 2012 17:58:53 +0000 (17:58 +0000)
commitc96b9834032952492efbd2d1f5511fe225704918
tree783d9d5e44adff586afbd3079c916f0d0a7a0db9
parent0e019cbd1ca4ad8a11c9310d701ca4aab11b5951
r600g: fixup AR handling (v5)

So it appears R600s (except rv670) do AR handling different using a different
opcode. This patch fixes up r600g to work properly on r600.

This fixes ~100 piglit tests here (in GLSL1.30 mode) on rv610.

v3: add index_mode as per the docs.

This still fails any dst relative tests for some reason I can't quite see yet,
but it passes a lot more tests than without.

v4: add a nop after dst.rel this could be improved using a second pass,
where we only insert nops if two instructions are sure to collide.
The docs say r600, rv610, rv630 needs this, and not rv670, rs780, rs880,
need AMD to confirm rv620, rv635.

v5: add is_nop_inst.

NOTE: This is a candidate for stable branches.

Signed-off-by: Dave Airlie <airlied@redhat.com>
src/gallium/drivers/r600/r600_asm.c
src/gallium/drivers/r600/r600_asm.h
src/gallium/drivers/r600/r600_shader.c
src/gallium/drivers/r600/r600_sq.h