diff options
| author | Andre Maasikas <amaasikas@gmail.com> | 2009-12-07 17:22:03 +0200 | 
|---|---|---|
| committer | Andre Maasikas <amaasikas@gmail.com> | 2009-12-08 15:45:26 +0200 | 
| commit | 629a648b059d8a2653b6a9cdf7f460533de0e1da (patch) | |
| tree | 4b19f2fcd222d540c5aebc68620df0eb402940b3 | |
| parent | 0f854105f5a430ab36281c9bed530eccb8b8f44c (diff) | |
r600: and finally fix SCS
| -rw-r--r-- | src/mesa/drivers/dri/r600/r700_assembler.c | 97 | 
1 files changed, 46 insertions, 51 deletions
diff --git a/src/mesa/drivers/dri/r600/r700_assembler.c b/src/mesa/drivers/dri/r600/r700_assembler.c index dd1199756d..aed84fc3bd 100644 --- a/src/mesa/drivers/dri/r600/r700_assembler.c +++ b/src/mesa/drivers/dri/r600/r700_assembler.c @@ -2237,7 +2237,7 @@ GLboolean assemble_alu_instruction(r700_AssemblerBase *pAsm)      contiguous_slots_needed = 0; -    if(GL_TRUE == is_reduction_opcode(&(pAsm->D)) )  +    if(!is_single_scalar_operation)       {          contiguous_slots_needed = 4;      } @@ -3920,68 +3920,63 @@ GLboolean assemble_SCS(r700_AssemblerBase *pAsm)  {      BITS tmp; -	checkop1(pAsm); - -	tmp = gethelpr(pAsm); - -	// COS tmp.x,    a.x -	pAsm->D.dst.opcode = SQ_OP2_INST_COS; -	pAsm->D.dst.math = 1; +    checkop1(pAsm); -	setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); -	pAsm->D.dst.rtype = DST_REG_TEMPORARY; -	pAsm->D.dst.reg = tmp; -	pAsm->D.dst.writex = 1; +    tmp = gethelpr(pAsm); +    /* tmp.x = src /2*PI */ +    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; -	if( GL_FALSE == assemble_src(pAsm, 0, -1) ) -	{ -		return GL_FALSE; -	} +    assemble_src(pAsm, 0, -1); -	if ( GL_FALSE == next_ins(pAsm) ) -	{ -		return GL_FALSE; -	} +    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; -	// SIN tmp.y,    a.x -	pAsm->D.dst.opcode = SQ_OP2_INST_SIN; -	pAsm->D.dst.math = 1; +    next_ins(pAsm); -	setaddrmode_PVSDST(&(pAsm->D.dst), ADDR_ABSOLUTE); -	pAsm->D.dst.rtype = DST_REG_TEMPORARY; -	pAsm->D.dst.reg = tmp; -	pAsm->D.dst.writey = 1; +    // COS dst.x,    a.x +    pAsm->D.dst.opcode = SQ_OP2_INST_COS; +    pAsm->D.dst.math = 1; -	if( GL_FALSE == assemble_src(pAsm, 0, -1) ) -	{ -		return GL_FALSE; -	} +    assemble_dst(pAsm); +    /* mask y */ +    pAsm->D.dst.writey = 0; -	if( GL_FALSE == next_ins(pAsm) ) -	{ -		return GL_FALSE; -	} +    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)); -	// MOV dst.mask,     tmp -	pAsm->D.dst.opcode = SQ_OP2_INST_MOV; +    if ( GL_FALSE == next_ins(pAsm) ) +    { +        return GL_FALSE; +    } -	if( GL_FALSE == assemble_dst(pAsm) ) -	{ -		return GL_FALSE; -	} +    // SIN dst.y,    a.x +    pAsm->D.dst.opcode = SQ_OP2_INST_SIN; +    pAsm->D.dst.math = 1; -	setaddrmode_PVSSRC(&(pAsm->S[0].src), ADDR_ABSOLUTE); -	pAsm->S[0].src.rtype = DST_REG_TEMPORARY; -	pAsm->S[0].src.reg = tmp; +    assemble_dst(pAsm); +    /* mask x */ +    pAsm->D.dst.writex = 0; -	noswizzle_PVSSRC(&(pAsm->S[0].src)); -	pAsm->S[0].src.swizzlez = SQ_SEL_0; -	pAsm->S[0].src.swizzlew = SQ_SEL_0; +    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)); -	if ( GL_FALSE == next_ins(pAsm) ) -	{ -		return GL_FALSE; -	} +    if( GL_FALSE == next_ins(pAsm) ) +    { +        return GL_FALSE; +    }      return GL_TRUE;  }  | 
