mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-15 09:58:05 +02:00
i965/fs: Clear result before visiting shadow comparitor and LOD info.
Commit53c89c67f3("i965: Avoid generating MOVs for assignments of expressions.") added the line "this->result = reg_undef" all over the code. Unfortunately, since Eric developed his patch before I landed Ivybridge support, he missed adding it to fs_visitor::emit_texture_gen7() after rebasing. Furthermore, since I developed TXD support before Eric's patch, I neglected to add it to the gradient handling when I rebased. Neglecting to set this causes the visitor to use this->result as storage rather than generating a new temporary. These missing statements resulted in the same register being used to store several different values. Fixes the following piglit tests on Ivybridge: - glsl-fs-shadow2dproj.shader_test - glsl-fs-shadow2dproj-bias.shader_test NOTE: This is a candidate for the 7.11 branch. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Eric Anholt <eric@anholt.net> (cherry picked from commit156cef0fba)
This commit is contained in:
parent
7d6c37b0c2
commit
67aa20d9d5
1 changed files with 10 additions and 0 deletions
|
|
@ -595,9 +595,11 @@ fs_visitor::emit_texture_gen4(ir_texture *ir, fs_reg dst, fs_reg coordinate,
|
|||
/* gen4's SIMD8 sampler always has the slots for u,v,r present. */
|
||||
mlen += 3;
|
||||
} else if (ir->op == ir_txd) {
|
||||
this->result = reg_undef;
|
||||
ir->lod_info.grad.dPdx->accept(this);
|
||||
fs_reg dPdx = this->result;
|
||||
|
||||
this->result = reg_undef;
|
||||
ir->lod_info.grad.dPdy->accept(this);
|
||||
fs_reg dPdy = this->result;
|
||||
|
||||
|
|
@ -778,9 +780,11 @@ fs_visitor::emit_texture_gen5(ir_texture *ir, fs_reg dst, fs_reg coordinate,
|
|||
inst = emit(FS_OPCODE_TXL, dst);
|
||||
break;
|
||||
case ir_txd: {
|
||||
this->result = reg_undef;
|
||||
ir->lod_info.grad.dPdx->accept(this);
|
||||
fs_reg dPdx = this->result;
|
||||
|
||||
this->result = reg_undef;
|
||||
ir->lod_info.grad.dPdy->accept(this);
|
||||
fs_reg dPdy = this->result;
|
||||
|
||||
|
|
@ -842,6 +846,7 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate,
|
|||
}
|
||||
|
||||
if (ir->shadow_comparitor && ir->op != ir_txd) {
|
||||
this->result = reg_undef;
|
||||
ir->shadow_comparitor->accept(this);
|
||||
emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
|
||||
mlen += reg_width;
|
||||
|
|
@ -852,11 +857,13 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate,
|
|||
case ir_tex:
|
||||
break;
|
||||
case ir_txb:
|
||||
this->result = reg_undef;
|
||||
ir->lod_info.bias->accept(this);
|
||||
emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
|
||||
mlen += reg_width;
|
||||
break;
|
||||
case ir_txl:
|
||||
this->result = reg_undef;
|
||||
ir->lod_info.lod->accept(this);
|
||||
emit(BRW_OPCODE_MOV, fs_reg(MRF, base_mrf + mlen), this->result);
|
||||
mlen += reg_width;
|
||||
|
|
@ -865,9 +872,11 @@ fs_visitor::emit_texture_gen7(ir_texture *ir, fs_reg dst, fs_reg coordinate,
|
|||
if (c->dispatch_width == 16)
|
||||
fail("Gen7 does not support sample_d/sample_d_c in SIMD16 mode.");
|
||||
|
||||
this->result = reg_undef;
|
||||
ir->lod_info.grad.dPdx->accept(this);
|
||||
fs_reg dPdx = this->result;
|
||||
|
||||
this->result = reg_undef;
|
||||
ir->lod_info.grad.dPdy->accept(this);
|
||||
fs_reg dPdy = this->result;
|
||||
|
||||
|
|
@ -1062,6 +1071,7 @@ fs_visitor::visit(ir_texture *ir)
|
|||
if (hw_compare_supported) {
|
||||
inst->shadow_compare = true;
|
||||
} else {
|
||||
this->result = reg_undef;
|
||||
ir->shadow_comparitor->accept(this);
|
||||
fs_reg ref = this->result;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue