diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/r300/r300_fragprog.c | 13 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r300/r500_fragprog.c | 19 | 
2 files changed, 32 insertions, 0 deletions
| diff --git a/src/mesa/drivers/dri/r300/r300_fragprog.c b/src/mesa/drivers/dri/r300/r300_fragprog.c index 4ef7f2bd78..8d030c63fb 100644 --- a/src/mesa/drivers/dri/r300/r300_fragprog.c +++ b/src/mesa/drivers/dri/r300/r300_fragprog.c @@ -163,6 +163,19 @@ static GLboolean transform_TEX(  		}  	} +	if (inst.SrcReg[0].File != PROGRAM_TEMPORARY && inst.SrcReg[0].File != PROGRAM_INPUT) { +		int tmpreg = radeonFindFreeTemporary(t); +		tgt = radeonAppendInstructions(t->Program, 1); +		tgt->Opcode = OPCODE_MOV; +		tgt->DstReg.File = PROGRAM_TEMPORARY; +		tgt->DstReg.Index = tmpreg; +		tgt->SrcReg[0] = inst.SrcReg[0]; + +		reset_srcreg(&inst.SrcReg[0]); +		inst.SrcReg[0].File = PROGRAM_TEMPORARY; +		inst.SrcReg[0].Index = tmpreg; +	} +	  	tgt = radeonAppendInstructions(t->Program, 1);  	_mesa_copy_instructions(tgt, &inst, 1); diff --git a/src/mesa/drivers/dri/r300/r500_fragprog.c b/src/mesa/drivers/dri/r300/r500_fragprog.c index 75dae86fa8..926ddd5964 100644 --- a/src/mesa/drivers/dri/r300/r500_fragprog.c +++ b/src/mesa/drivers/dri/r300/r500_fragprog.c @@ -31,6 +31,12 @@  #include "radeon_program_alu.h" +static void reset_srcreg(struct prog_src_register* reg) +{ +	_mesa_bzero(reg, sizeof(*reg)); +	reg->Swizzle = SWIZZLE_NOOP; +} +  static struct prog_src_register shadow_ambient(struct gl_program *program, int tmu)  {  	gl_state_index fail_value_tokens[STATE_LENGTH] = { @@ -99,6 +105,19 @@ static GLboolean transform_TEX(  		destredirect = GL_TRUE;  	} +	if (inst.SrcReg[0].File != PROGRAM_TEMPORARY && inst.SrcReg[0].File != PROGRAM_INPUT) { +		int tmpreg = radeonFindFreeTemporary(t); +		tgt = radeonAppendInstructions(t->Program, 1); +		tgt->Opcode = OPCODE_MOV; +		tgt->DstReg.File = PROGRAM_TEMPORARY; +		tgt->DstReg.Index = tmpreg; +		tgt->SrcReg[0] = inst.SrcReg[0]; + +		reset_srcreg(&inst.SrcReg[0]); +		inst.SrcReg[0].File = PROGRAM_TEMPORARY; +		inst.SrcReg[0].Index = tmpreg; +	} +  	tgt = radeonAppendInstructions(t->Program, 1);  	_mesa_copy_instructions(tgt, &inst, 1); | 
