Mesa (master): r600g: Fixed SIN/COS/ SCS for the case where the operand is a literal.

Tilman Sauerbeck tilman at kemper.freedesktop.org
Tue Jan 11 21:41:21 UTC 2011


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

Author: Tilman Sauerbeck <tilman at code-monkey.de>
Date:   Thu Jan  6 21:35:19 2011 +0100

r600g: Fixed SIN/COS/SCS for the case where the operand is a literal.

Signed-off-by: Tilman Sauerbeck <tilman at code-monkey.de>
Reviewed-by: Alex Deucher <alexdeucher at gmail.com>

---

 src/gallium/drivers/r600/r600_shader.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c
index 51ff7db..a2fec20 100644
--- a/src/gallium/drivers/r600/r600_shader.c
+++ b/src/gallium/drivers/r600/r600_shader.c
@@ -952,7 +952,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
 			   struct r600_bc_alu_src r600_src[3])
 {
 	struct tgsi_full_instruction *inst = &ctx->parse.FullToken.FullInstruction;
-	int r;
+	int r, src0_chan;
 	uint32_t lit_vals[4];
 	struct r600_bc_alu alu;
 
@@ -964,6 +964,19 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
 	if (r)
 		return r;
 
+	src0_chan = tgsi_chan(&inst->Src[0], 0);
+
+	/* We are going to feed two literals to the MAD below,
+	 * which means that if the first operand is a literal as well,
+	 * we need to copy its value manually.
+	 */
+	if (r600_src[0].sel == V_SQ_ALU_SRC_LITERAL) {
+		unsigned index = inst->Src[0].Register.Index;
+
+		lit_vals[2] = ctx->literals[index * 4 + src0_chan];
+		src0_chan = 2;
+	}
+
 	lit_vals[0] = fui(1.0 /(3.1415926535 * 2));
 	lit_vals[1] = fui(0.5f);
 
@@ -976,7 +989,7 @@ static int tgsi_setup_trig(struct r600_shader_ctx *ctx,
 	alu.dst.write = 1;
 
 	alu.src[0] = r600_src[0];
-	alu.src[0].chan = tgsi_chan(&inst->Src[0], 0);
+	alu.src[0].chan = src0_chan;
 
 	alu.src[1].sel = V_SQ_ALU_SRC_LITERAL;
 	alu.src[1].chan = 0;




More information about the mesa-commit mailing list