nv50/ir: set position before i instead of i->next in NV50LoweringPreSSA::visit
authorBryan Cain <bryancain3@gmail.com>
Wed, 18 Jul 2012 04:46:39 +0000 (23:46 -0500)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Fri, 20 Jul 2012 18:30:07 +0000 (20:30 +0200)
Fixes rendering glitches in Psychonauts such as Raz's eyes flickering white.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=51962.

src/gallium/drivers/nv50/codegen/nv50_ir_lowering_nv50.cpp

index 39e0cfa613db44c22f90f85e9d1969d57cbdb4e1..3e0dc755d5671d62a3627370f9cf6e2516aebadc 100644 (file)
@@ -701,6 +701,7 @@ NV50LoweringPreSSA::handleTXL(TexInstruction *i)
    BasicBlock *texiBB = i->bb->splitBefore(i, false);
    BasicBlock *joinBB = i->bb->splitAfter(i);
 
+   bld.setPosition(currBB, true);
    currBB->joinAt = bld.mkFlow(OP_JOINAT, joinBB, CC_ALWAYS, NULL);
 
    for (int l = 0; l <= 3; ++l) {
@@ -1030,13 +1031,7 @@ NV50LoweringPreSSA::checkPredicate(Instruction *insn)
 bool
 NV50LoweringPreSSA::visit(Instruction *i)
 {
-   if (i->prev)
-      bld.setPosition(i->prev, true);
-   else
-   if (i->next)
-      bld.setPosition(i->next, false);
-   else
-      bld.setPosition(i->bb, true);
+   bld.setPosition(i, false);
 
    if (i->cc != CC_ALWAYS)
       checkPredicate(i);