Mesa (master): nvc0: force perspective correction hint to nicest

Christoph Bumiller chrisbmr at kemper.freedesktop.org
Sun Apr 10 05:07:43 PDT 2011


Module: Mesa
Branch: master
Commit: d546df4d9c090656c506e8a959646a48ed00efc2
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d546df4d9c090656c506e8a959646a48ed00efc2

Author: Christoph Bumiller <e0425955 at student.tuwien.ac.at>
Date:   Sun Apr 10 13:55:01 2011 +0200

nvc0: force perspective correction hint to nicest

Fixes issues in e.g. nexuiz (desertfactory) or supertuxkart that
look like lighting bugs.

They're not visible with the software rasterizers because their
notion of linear interpolation seems to be different from that
of nv50/nvc0.

---

 src/gallium/drivers/nvc0/nvc0_pc_emit.c |    4 ++++
 src/gallium/drivers/nvc0/nvc0_program.c |    3 +++
 2 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/src/gallium/drivers/nvc0/nvc0_pc_emit.c b/src/gallium/drivers/nvc0/nvc0_pc_emit.c
index 76ad40d..6f409a9 100644
--- a/src/gallium/drivers/nvc0/nvc0_pc_emit.c
+++ b/src/gallium/drivers/nvc0/nvc0_pc_emit.c
@@ -715,6 +715,10 @@ emit_interp(struct nv_pc *pc, struct nv_instruction *i)
    if (i->opcode == NV_OP_PINTERP) {
       pc->emit[0] |= 0x040;
       SID(pc, i->src[1], 26);
+
+      if (i->src[0]->value->reg.address >= 0x280 &&
+          i->src[0]->value->reg.address <= 0x29c)
+         pc->emit[0] |= 0x080; /* XXX: ? */
    } else {
       SID(pc, NULL, 26);
    }
diff --git a/src/gallium/drivers/nvc0/nvc0_program.c b/src/gallium/drivers/nvc0/nvc0_program.c
index 3c59213..383bc30 100644
--- a/src/gallium/drivers/nvc0/nvc0_program.c
+++ b/src/gallium/drivers/nvc0/nvc0_program.c
@@ -225,6 +225,9 @@ nvc0_interp_mode(const struct tgsi_full_declaration *decl)
    if (decl->Declaration.Interpolate == TGSI_INTERPOLATE_PERSPECTIVE)
       mode = NVC0_INTERP_PERSPECTIVE;
    else
+   if (decl->Declaration.Semantic && decl->Semantic.Name == TGSI_SEMANTIC_COLOR)
+      mode = NVC0_INTERP_PERSPECTIVE;
+   else
       mode = NVC0_INTERP_LINEAR;
 
    if (decl->Declaration.Centroid)



More information about the mesa-commit mailing list