[Mesa-dev] [PATCH 1/2] radeon/llvm: PS/PS are not set if PRED_SEL* does not match

Vincent Lejeune vljn at ovi.com
Wed Aug 1 13:52:53 PDT 2012


---
 src/gallium/drivers/r600/r600_asm.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_asm.c b/src/gallium/drivers/r600/r600_asm.c
index 0cca829..0f28824 100644
--- a/src/gallium/drivers/r600/r600_asm.c
+++ b/src/gallium/drivers/r600/r600_asm.c
@@ -927,7 +927,8 @@ static int replace_gpr_with_pv_ps(struct r600_bytecode *bc,
 
 			if (bc->chip_class < CAYMAN) {
 				if (alu->src[src].sel == gpr[4] &&
-				    alu->src[src].chan == chan[4]) {
+				    alu->src[src].chan == chan[4] &&
+				    alu_prev->pred_sel == alu->pred_sel) {
 					alu->src[src].sel = V_SQ_ALU_SRC_PS;
 					alu->src[src].chan = 0;
 					continue;
@@ -936,7 +937,8 @@ static int replace_gpr_with_pv_ps(struct r600_bytecode *bc,
 
 			for (j = 0; j < 4; ++j) {
 				if (alu->src[src].sel == gpr[j] &&
-					alu->src[src].chan == j) {
+					alu->src[src].chan == j &&
+				      alu_prev->pred_sel == alu->pred_sel) {
 					alu->src[src].sel = V_SQ_ALU_SRC_PV;
 					alu->src[src].chan = chan[j];
 					break;
-- 
1.7.11.2



More information about the mesa-dev mailing list