From d546df4d9c090656c506e8a959646a48ed00efc2 Mon Sep 17 00:00:00 2001 From: Christoph Bumiller Date: Sun, 10 Apr 2011 13:55:01 +0200 Subject: [PATCH] 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(+) diff --git a/src/gallium/drivers/nvc0/nvc0_pc_emit.c b/src/gallium/drivers/nvc0/nvc0_pc_emit.c index 76ad40dbcf8..6f409a9e925 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 3c59213176e..383bc30f20b 100644 --- a/src/gallium/drivers/nvc0/nvc0_program.c +++ b/src/gallium/drivers/nvc0/nvc0_program.c @@ -224,6 +224,9 @@ nvc0_interp_mode(const struct tgsi_full_declaration *decl) else 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; -- 2.30.2