diff options
| author | Andre Maasikas <amaasikas@gmail.com> | 2009-12-07 11:51:36 +0200 | 
|---|---|---|
| committer | Andre Maasikas <amaasikas@gmail.com> | 2009-12-08 15:39:45 +0200 | 
| commit | 17e212e2631cd652c28378399806c3b3bd293e9a (patch) | |
| tree | e780d6916b45402f6d2fe4287ef4a8779fdf34c9 | |
| parent | 50ab51101e4c5e64ab92c260c324fb66a98851a8 (diff) | |
r600: add ABS support for source regs to assembler
use it in tex cube instruction sequence
| -rw-r--r-- | src/mesa/drivers/dri/r600/r700_assembler.c | 27 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r600/r700_assembler.h | 7 | 
2 files changed, 9 insertions, 25 deletions
| diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c index 158c5fa549..2f8038adb3 100644 --- a/src/mesa/drivers/dri/r600/r700_assembler.c +++ b/src/mesa/drivers/dri/r600/r700_assembler.c @@ -2350,8 +2350,8 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm)              {                  alu_instruction_ptr->m_Word1_OP2.f6.alu_inst           = pAsm->D.dst.opcode; -                alu_instruction_ptr->m_Word1_OP2.f6.src0_abs           = 0x0; -                alu_instruction_ptr->m_Word1_OP2.f6.src1_abs           = 0x0; +                alu_instruction_ptr->m_Word1_OP2.f6.src0_abs           = pAsm->S[0].src.abs; +                alu_instruction_ptr->m_Word1_OP2.f6.src1_abs           = pAsm->S[1].src.abs;                  //alu_instruction_ptr->m_Word1_OP2.f6.update_execute_mask = 0x0;                  //alu_instruction_ptr->m_Word1_OP2.f6.update_pred         = 0x0; @@ -2379,8 +2379,8 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm)              {                  alu_instruction_ptr->m_Word1_OP2.f.alu_inst           = pAsm->D.dst.opcode; -                alu_instruction_ptr->m_Word1_OP2.f.src0_abs           = 0x0; -                alu_instruction_ptr->m_Word1_OP2.f.src1_abs           = 0x0; +                alu_instruction_ptr->m_Word1_OP2.f.src0_abs           = pAsm->S[0].src.abs; +                alu_instruction_ptr->m_Word1_OP2.f.src1_abs           = pAsm->S[1].src.abs;                  //alu_instruction_ptr->m_Word1_OP2.f.update_execute_mask = 0x0;                  //alu_instruction_ptr->m_Word1_OP2.f.update_pred         = 0x0; @@ -4721,24 +4721,6 @@ GLboolean assemble_TEX(r700_AssemblerBase *pAsm)              return GL_FALSE;          } -        /* tmp1.z = ABS(tmp1.z) dont have abs support in assembler currently -         * have to do explicit instruction -         */ -        pAsm->D.dst.opcode = SQ_OP2_INST_MAX; -        setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); -        pAsm->D.dst.rtype = DST_REG_TEMPORARY; -        pAsm->D.dst.reg   = tmp1; -        pAsm->D.dst.writez = 1; - -        setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE); -        pAsm->S[0].src.rtype = SRC_REG_TEMPORARY; -        pAsm->S[0].src.reg = tmp1; -	noswizzle_PVSSRC(&(pAsm->S[0].src)); -        pAsm->S[1].bits = pAsm->S[0].bits; -        flipneg_PVSSRC(&(pAsm->S[1].src)); -         -        next_ins(pAsm); -          /* tmp1.z = RCP_e(|tmp1.z|) */          pAsm->D.dst.opcode = SQ_OP2_INST_RECIP_IEEE;          pAsm->D.dst.math = 1; @@ -4751,6 +4733,7 @@ GLboolean assemble_TEX(r700_AssemblerBase *pAsm)          pAsm->S[0].src.rtype = SRC_REG_TEMPORARY;          pAsm->S[0].src.reg = tmp1;          pAsm->S[0].src.swizzlex = SQ_SEL_Z; +        pAsm->S[0].src.abs = 1;          next_ins(pAsm); diff --git a/src/mesa/drivers/dri/r600/r700_assembler.h b/src/mesa/drivers/dri/r600/r700_assembler.h index 48ffef501f..cfa2610a55 100644 --- a/src/mesa/drivers/dri/r600/r700_assembler.h +++ b/src/mesa/drivers/dri/r600/r700_assembler.h @@ -120,14 +120,15 @@ typedef struct PVSINSTtag  typedef struct PVSSRCtag   { -	BITS rtype:4;             +	BITS rtype:3;              	BITS addrmode0:1;         -	BITS reg:10;      //15     (8) +	BITS reg:10;      //14     (8)  	BITS swizzlex:3;  	BITS swizzley:3;  	BITS swizzlez:3; -	BITS swizzlew:3;  //27         +	BITS swizzlew:3;  //26         +	BITS abs:1;  	BITS negx:1;  	BITS negy:1;  	BITS negz:1; | 
