mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-08 01:38:16 +02:00
r300: Redirect constant TEX coordinates
R3xx/R5xx fragment program texture constants must come from a hardware register instead of the constant file, so we redirect if necessary during the native rewrite phase. The symptoms of this bug started appearing when the Mesa fixed function texenvprogram code started using STATE_CURRENT_ATTRIB constants for texture coordinates when the corresponding attributes were constant across all vertices. Signed-off-by: Nicolai Haehnle <nhaehnle@gmail.com>
This commit is contained in:
parent
5f3ab230ea
commit
9a26164f35
2 changed files with 32 additions and 0 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue