mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 20:18:12 +02:00
i965: Remove bad constant buffer constant-reg-already-loaded optimization.
Thanks to branching, the state of c->current_const[i].index at the point
of emitting constant loads for this instruction may not match the actual
constant currently loaded in the reg at runtime. Fixes a regression in my
GLSL program for idr's class since b58b3a786a.
This commit is contained in:
parent
156a79f5bd
commit
3d048e5750
1 changed files with 11 additions and 13 deletions
|
|
@ -407,23 +407,21 @@ static void fetch_constants(struct brw_wm_compile *c,
|
||||||
if (src->File == PROGRAM_STATE_VAR ||
|
if (src->File == PROGRAM_STATE_VAR ||
|
||||||
src->File == PROGRAM_CONSTANT ||
|
src->File == PROGRAM_CONSTANT ||
|
||||||
src->File == PROGRAM_UNIFORM) {
|
src->File == PROGRAM_UNIFORM) {
|
||||||
if (c->current_const[i].index != src->Index) {
|
c->current_const[i].index = src->Index;
|
||||||
c->current_const[i].index = src->Index;
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
printf(" fetch const[%d] for arg %d into reg %d\n",
|
printf(" fetch const[%d] for arg %d into reg %d\n",
|
||||||
src->Index, i, c->current_const[i].reg.nr);
|
src->Index, i, c->current_const[i].reg.nr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* need to fetch the constant now */
|
/* need to fetch the constant now */
|
||||||
brw_dp_READ_4(p,
|
brw_dp_READ_4(p,
|
||||||
c->current_const[i].reg, /* writeback dest */
|
c->current_const[i].reg, /* writeback dest */
|
||||||
1, /* msg_reg */
|
1, /* msg_reg */
|
||||||
src->RelAddr, /* relative indexing? */
|
src->RelAddr, /* relative indexing? */
|
||||||
16 * src->Index, /* byte offset */
|
16 * src->Index, /* byte offset */
|
||||||
SURF_INDEX_FRAG_CONST_BUFFER/* binding table index */
|
SURF_INDEX_FRAG_CONST_BUFFER/* binding table index */
|
||||||
);
|
);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue