Mesa (master): r600g/sb: fix handling of PS in source bytecode on cayman

Vadim Girlin vadimg at kemper.freedesktop.org
Wed Jul 17 14:33:32 UTC 2013


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

Author: Vadim Girlin <vadimgirlin at gmail.com>
Date:   Wed Jul 17 12:00:43 2013 +0400

r600g/sb: fix handling of PS in source bytecode on cayman

Actually PS doesn't make sense for cayman and isn't even mentioned in
cayman docs, but llvm backend currently uses it in bytecode and, assuming
that hw seems to be mostly ok with it, this will allow sb to parse such
source bytecode correctly.

Signed-off-by: Vadim Girlin <vadimgirlin at gmail.com>

---

 src/gallium/drivers/r600/sb/sb_bc_parser.cpp |    5 +++++
 1 files changed, 5 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/r600/sb/sb_bc_parser.cpp b/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
index a7e7128..67e6c3a 100644
--- a/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
+++ b/src/gallium/drivers/r600/sb/sb_bc_parser.cpp
@@ -385,6 +385,11 @@ int bc_parser::prepare_alu_group(cf_node* cf, alu_group_node *g) {
 			} else if (src.sel == ALU_SRC_PS || src.sel == ALU_SRC_PV) {
 				unsigned pgroup = !cgroup, prev_slot = src.sel == ALU_SRC_PS ?
 						SLOT_TRANS : src.chan;
+
+				// XXX shouldn't happen but llvm backend uses PS on cayman
+				if (prev_slot == SLOT_TRANS && ctx.is_cayman())
+					prev_slot = SLOT_X;
+
 				alu_node *prev_alu = slots[pgroup][prev_slot];
 
 				assert(prev_alu);




More information about the mesa-commit mailing list