mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-04 09:48:07 +02:00
i965/fs: Port texture projection avoidance optimization from the old backend.
This is part of fixing a ~1% performance regression in OpenArena when changing the fixed function fragment shader to using the new backend. Right now this just avoids the LINTERP of the projector, not the math using it.
This commit is contained in:
parent
652ef8569c
commit
eb30820f26
1 changed files with 15 additions and 3 deletions
|
|
@ -463,9 +463,21 @@ fs_visitor::emit_general_interpolation(ir_variable *ir)
|
|||
} else {
|
||||
/* Perspective interpolation case. */
|
||||
for (unsigned int k = 0; k < type->vector_elements; k++) {
|
||||
struct brw_reg interp = interp_reg(location, k);
|
||||
emit(FS_OPCODE_LINTERP, attr,
|
||||
this->delta_x, this->delta_y, fs_reg(interp));
|
||||
/* FINISHME: At some point we probably want to push
|
||||
* this farther by giving similar treatment to the
|
||||
* other potentially constant components of the
|
||||
* attribute, as well as making brw_vs_constval.c
|
||||
* handle varyings other than gl_TexCoord.
|
||||
*/
|
||||
if (location >= FRAG_ATTRIB_TEX0 &&
|
||||
location <= FRAG_ATTRIB_TEX7 &&
|
||||
k == 3 && !(c->key.proj_attrib_mask & (1 << location))) {
|
||||
emit(BRW_OPCODE_MOV, attr, fs_reg(1.0f));
|
||||
} else {
|
||||
struct brw_reg interp = interp_reg(location, k);
|
||||
emit(FS_OPCODE_LINTERP, attr,
|
||||
this->delta_x, this->delta_y, fs_reg(interp));
|
||||
}
|
||||
attr.reg_offset++;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue