Attached is a patch to fix constant folding in the r300 compiler
implemented in commit c704933 of Nicolai's r300g-glsl branch
(git://anongit.freedesktop.org/~nh/mesa).

With this patch, the constant folding implementation can be cherry-picked
to master without breaking any piglit tests.

-Tom
>From 1a05bb4f0785fdec64a83b18fd7d25b40175c0c3 Mon Sep 17 00:00:00 2001
From: Tom Stellard <tstel...@gmail.com>
Date: Mon, 17 May 2010 23:29:19 -0700
Subject: [PATCH] r300/compiler: Emit half float constant when necessary.

---
 .../dri/r300/compiler/r300_fragprog_swizzle.c      |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/r300_fragprog_swizzle.c 
b/src/mesa/drivers/dri/r300/compiler/r300_fragprog_swizzle.c
index cfa48a5..5d5de2f 100644
--- a/src/mesa/drivers/dri/r300/compiler/r300_fragprog_swizzle.c
+++ b/src/mesa/drivers/dri/r300/compiler/r300_fragprog_swizzle.c
@@ -56,7 +56,8 @@ static const struct swizzle_data native_swizzles[] = {
        {MAKE_SWZ3(Z, X, Y), R300_ALU_ARGC_SRC0C_ZXY, 1},
        {MAKE_SWZ3(W, Z, Y), R300_ALU_ARGC_SRC0CA_WZY, 1},
        {MAKE_SWZ3(ONE, ONE, ONE), R300_ALU_ARGC_ONE, 0},
-       {MAKE_SWZ3(ZERO, ZERO, ZERO), R300_ALU_ARGC_ZERO, 0}
+       {MAKE_SWZ3(ZERO, ZERO, ZERO), R300_ALU_ARGC_ZERO, 0},
+       {MAKE_SWZ3(HALF, HALF, HALF), R300_ALU_ARGC_HALF, 0}
 };
 
 static const int num_native_swizzles = 
sizeof(native_swizzles)/sizeof(native_swizzles[0]);
@@ -221,6 +222,7 @@ unsigned int r300FPTranslateAlphaSwizzle(unsigned int src, 
unsigned int swizzle)
        case RC_SWIZZLE_W: return R300_ALU_ARGA_SRC0A + src;
        case RC_SWIZZLE_ONE: return R300_ALU_ARGA_ONE;
        case RC_SWIZZLE_ZERO: return R300_ALU_ARGA_ZERO;
+       case RC_SWIZZLE_HALF: return R300_ALU_ARGA_HALF;
        default: return R300_ALU_ARGA_ONE;
        }
 }
-- 
1.6.4.4

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to