Mesa (master): nv50: fix handling of FragCoord input

Christoph Bumiller chrisbmr at kemper.freedesktop.org
Sun Jan 24 14:20:02 UTC 2010


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

Author: Christoph Bumiller <e0425955 at student.tuwien.ac.at>
Date:   Sun Jan 24 14:22:41 2010 +0100

nv50: fix handling of FragCoord input

---

 src/gallium/drivers/nv50/nv50_program.c |   23 +++++++++++------------
 1 files changed, 11 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/nv50/nv50_program.c b/src/gallium/drivers/nv50/nv50_program.c
index 20db510..cd2fd0a 100644
--- a/src/gallium/drivers/nv50/nv50_program.c
+++ b/src/gallium/drivers/nv50/nv50_program.c
@@ -3728,13 +3728,21 @@ nv50_program_tx_prep(struct nv50_pc *pc)
 		copy_semantic_info(p);
 	} else
 	if (p->type == PIPE_SHADER_FRAGMENT) {
-		int rid, aid, base;
+		int rid, aid;
 		unsigned n = 0, m = pc->attr_nr - flat_nr;
 
 		pc->allow32 = TRUE;
 
-		base = (TGSI_SEMANTIC_POSITION ==
-			p->info.input_semantic_name[0]) ? 0 : 1;
+		/* do we read FragCoord ? */
+		if (pc->attr_nr &&
+		    p->info.input_semantic_name[0] == TGSI_SEMANTIC_POSITION) {
+			/* select FCRD components we want accessible */
+			for (c = 0; c < 4; ++c)
+				if (pc->attr[c].acc)
+					p->cfg.regs[1] |= 1 << (24 + c);
+			aid = 0;
+		} else /* offset by 1 if FCRD.w is needed for pinterp */
+			aid = popcnt4(p->cfg.regs[1] >> 24);
 
 		/* non-flat interpolants have to be mapped to
 		 * the lower hardware IDs, so sort them:
@@ -3750,12 +3758,6 @@ nv50_program_tx_prep(struct nv50_pc *pc)
 		}
 		copy_semantic_info(p);
 
-		if (!base) /* set w-coordinate mask from perspective interp */
-			p->cfg.in[0].mask |= p->cfg.regs[1] >> 24;
-
-		aid = popcnt4( /* if fcrd isn't contained in cfg.io */
-			base ? (p->cfg.regs[1] >> 24) : p->cfg.in[0].mask);
-
 		for (n = 0; n < pc->attr_nr; ++n) {
 			p->cfg.in[n].hw = rid = aid;
 			i = p->cfg.in[n].id;
@@ -3777,9 +3779,6 @@ nv50_program_tx_prep(struct nv50_pc *pc)
 			aid += popcnt4(p->cfg.in[n].mask);
 		}
 
-		if (!base)
-			p->cfg.regs[1] |= p->cfg.in[0].mask << 24;
-
 		m = popcnt4(p->cfg.regs[1] >> 24);
 
 		/* set count of non-position inputs and of non-flat




More information about the mesa-commit mailing list