Mesa (master): nvfx: properly return fogcoord.w == 1

Luca Barbieri lb at kemper.freedesktop.org
Sun Sep 5 15:52:38 UTC 2010


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

Author: Luca Barbieri <luca at luca-barbieri.com>
Date:   Sun Sep  5 06:42:04 2010 +0200

nvfx: properly return fogcoord.w == 1

Hardware sets it to 0, so we add an ADD to put an 1 there if the
application really wants the alpha channel.

---

 src/gallium/drivers/nvfx/nvfx_fragprog.c |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/src/gallium/drivers/nvfx/nvfx_fragprog.c b/src/gallium/drivers/nvfx/nvfx_fragprog.c
index 86df7f0..23121eb 100644
--- a/src/gallium/drivers/nvfx/nvfx_fragprog.c
+++ b/src/gallium/drivers/nvfx/nvfx_fragprog.c
@@ -493,7 +493,21 @@ nvfx_fragprog_parse_instruction(struct nvfx_context* nvfx, struct nvfx_fpc *fpc,
 
 		switch (fsrc->Register.File) {
 		case TGSI_FILE_INPUT:
-			if (ai == -1 || ai == fsrc->Register.Index) {
+			if(fpc->pfp->info.input_semantic_name[fsrc->Register.Index] == TGSI_SEMANTIC_FOG && (0
+					|| fsrc->Register.SwizzleX == PIPE_SWIZZLE_ALPHA
+					|| fsrc->Register.SwizzleY == PIPE_SWIZZLE_ALPHA
+					|| fsrc->Register.SwizzleZ == PIPE_SWIZZLE_ALPHA
+					|| fsrc->Register.SwizzleW == PIPE_SWIZZLE_ALPHA
+					)) {
+				/* hardware puts 0 in fogcoord.w, but GL/Gallium want 1 there */
+				struct nvfx_src addend = nvfx_src(nvfx_fp_imm(fpc, 0, 0, 0, 1));
+				addend.swz[0] = fsrc->Register.SwizzleX;
+				addend.swz[1] = fsrc->Register.SwizzleY;
+				addend.swz[2] = fsrc->Register.SwizzleZ;
+				addend.swz[3] = fsrc->Register.SwizzleW;
+				src[i] = nvfx_src(temp(fpc));
+				nvfx_fp_emit(fpc, arith(0, ADD, src[i].reg, NVFX_FP_MASK_ALL, tgsi_src(fpc, fsrc), addend, none));
+			} else if (ai == -1 || ai == fsrc->Register.Index) {
 				ai = fsrc->Register.Index;
 				src[i] = tgsi_src(fpc, fsrc);
 			} else {




More information about the mesa-commit mailing list