Mesa (master): r300/compiler: implement SGT+SLE opcodes

Marek Olšák mareko at kemper.freedesktop.org
Wed May 26 02:50:00 UTC 2010


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Wed May 26 04:36:29 2010 +0200

r300/compiler: implement SGT+SLE opcodes

Reported-by: Gianluca Anzolin <gianluca at sottospazio.it>

---

 .../drivers/dri/r300/compiler/radeon_program_alu.c |   20 ++++++++++++++++++++
 1 files changed, 20 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c b/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c
index 6e8a0d2..d07843c 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c
@@ -600,6 +600,24 @@ static void transform_r300_vertex_fix_LIT(struct radeon_compiler* c,
 	inst->U.I.SrcReg[0] = srcreg(RC_FILE_TEMPORARY, tempreg);
 }
 
+static void transform_r300_vertex_SGT(struct radeon_compiler* c,
+	struct rc_instruction* inst)
+{
+	/* x > y  <==>  -x < -y */
+	inst->U.I.Opcode = RC_OPCODE_SLT;
+	inst->U.I.SrcReg[0].Negate ^= RC_MASK_XYZW;
+	inst->U.I.SrcReg[1].Negate ^= RC_MASK_XYZW;
+}
+
+static void transform_r300_vertex_SLE(struct radeon_compiler* c,
+	struct rc_instruction* inst)
+{
+	/* x <= y  <==>  -x >= -y */
+	inst->U.I.Opcode = RC_OPCODE_SGE;
+	inst->U.I.SrcReg[0].Negate ^= RC_MASK_XYZW;
+	inst->U.I.SrcReg[1].Negate ^= RC_MASK_XYZW;
+}
+
 /**
  * For use with radeonLocalTransform, this transforms non-native ALU
  * instructions of the r300 up to r500 vertex engine.
@@ -621,6 +639,8 @@ int r300_transform_vertex_alu(
 	case RC_OPCODE_SUB: transform_SUB(c, inst); return 1;
 	case RC_OPCODE_SWZ: transform_SWZ(c, inst); return 1;
 	case RC_OPCODE_XPD: transform_XPD(c, inst); return 1;
+	case RC_OPCODE_SLE: transform_r300_vertex_SLE(c, inst); return 1;
+	case RC_OPCODE_SGT: transform_r300_vertex_SGT(c, inst); return 1;
 	default:
 		return 0;
 	}




More information about the mesa-commit mailing list