Mesa (master): r600: use the new inline constants feature to fix COS
Andre Maasikas
andrem at kemper.freedesktop.org
Tue Dec 8 14:21:48 UTC 2009
Module: Mesa
Branch: master
Commit: 2b8b16f6a6ce6091d4939cfb567a65a52757dff0
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=2b8b16f6a6ce6091d4939cfb567a65a52757dff0
Author: Andre Maasikas <amaasikas at gmail.com>
Date: Mon Dec 7 16:09:10 2009 +0200
r600: use the new inline constants feature to fix COS
---
src/mesa/drivers/dri/r600/r700_assembler.c | 37 +++++++++++++++++++++++++++-
1 files changed, 36 insertions(+), 1 deletions(-)
diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c
index c1e3377..660410f 100644
--- a/src/mesa/drivers/dri/r600/r700_assembler.c
+++ b/src/mesa/drivers/dri/r600/r700_assembler.c
@@ -3041,7 +3041,42 @@ GLboolean assemble_CMP(r700_AssemblerBase *pAsm)
GLboolean assemble_COS(r700_AssemblerBase *pAsm)
{
- return assemble_math_function(pAsm, SQ_OP2_INST_COS);
+ int tmp;
+ //return assemble_math_function(pAsm, SQ_OP2_INST_COS);
+ checkop1(pAsm);
+
+ tmp = gethelpr(pAsm);
+
+ pAsm->D.dst.opcode = SQ_OP2_INST_MUL;
+ setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE);
+ pAsm->D.dst.rtype = DST_REG_TEMPORARY;
+ pAsm->D.dst.reg = tmp;
+ pAsm->D.dst.writex = 1;
+
+ assemble_src(pAsm, 0, -1);
+
+ pAsm->S[1].src.rtype = SRC_REC_LITERAL;
+ setswizzle_PVSSRC(&(pAsm->S[1].src), SQ_SEL_X);
+ pAsm->D2.dst2.literal_slots = 1;
+ pAsm->C[0].f = 1/(3.1415926535 * 2);
+ pAsm->C[1].f = 0.0F;
+ next_ins(pAsm);
+
+ pAsm->D.dst.opcode = SQ_OP2_INST_COS;
+ pAsm->D.dst.math = 1;
+
+ assemble_dst(pAsm);
+
+ setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE);
+ pAsm->S[0].src.rtype = SRC_REG_TEMPORARY;
+ pAsm->S[0].src.reg = tmp;
+ setswizzle_PVSSRC(&(pAsm->S[0].src), SQ_SEL_X);
+ noneg_PVSSRC(&(pAsm->S[0].src));
+
+ next_ins(pAsm);
+
+ return GL_TRUE;
+
}
GLboolean assemble_DOT(r700_AssemblerBase *pAsm)
More information about the mesa-commit
mailing list