Mesa (master): r300-gallium: Decode passthrough shader for r300.

Corbin Simpson csimpson at kemper.freedesktop.org
Mon Feb 23 12:39:05 UTC 2009


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

Author: Corbin Simpson <MostAwesomeDude at gmail.com>
Date:   Mon Feb 23 04:25:29 2009 -0800

r300-gallium: Decode passthrough shader for r300.

Looks pretty sane.

---

 src/gallium/drivers/r300/r300_reg.h          |   15 ++++++++++++++-
 src/gallium/drivers/r300/r300_state_shader.h |   17 ++++++++++++-----
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_reg.h b/src/gallium/drivers/r300/r300_reg.h
index be26b13..8888b39 100644
--- a/src/gallium/drivers/r300/r300_reg.h
+++ b/src/gallium/drivers/r300/r300_reg.h
@@ -1796,6 +1796,10 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_ALU_DSTC_OUTPUT_X           (1 << 26)
 #       define R300_ALU_DSTC_OUTPUT_Y           (1 << 27)
 #       define R300_ALU_DSTC_OUTPUT_Z           (1 << 28)
+#       define R300_ALU_DSTC_OUTPUT_XYZ         (7 << 26)
+#       define R300_RGB_ADDR0(x)                ((x) << 0)
+#       define R300_RGB_ADDR1(x)                ((x) << 6)
+#       define R300_RGB_ADDR2(x)                ((x) << 12)
 
 #define R300_US_ALU_ALPHA_ADDR_0                 0x47C0
 #       define R300_ALU_SRC0A_SHIFT             0
@@ -1813,6 +1817,9 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_ALU_DSTA_REG                (1 << 23)
 #       define R300_ALU_DSTA_OUTPUT             (1 << 24)
 #		define R300_ALU_DSTA_DEPTH              (1 << 27)
+#       define R300_ALPHA_ADDR0(x)                ((x) << 0)
+#       define R300_ALPHA_ADDR1(x)                ((x) << 6)
+#       define R300_ALPHA_ADDR2(x)                ((x) << 12)
 
 #define R300_US_ALU_RGB_INST_0                   0x48C0
 #       define R300_ALU_ARGC_SRC0C_XYZ          0
@@ -1847,6 +1854,9 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_ALU_ARGC_SRC0CA_WZY         29
 #       define R300_ALU_ARGC_SRC1CA_WZY         30
 #       define R300_ALU_ARGC_SRC2CA_WZY         31
+#       define R300_RGB_SWIZA(x)                ((x) << 0)
+#       define R300_RGB_SWIZB(x)                ((x) << 7)
+#       define R300_RGB_SWIZC(x)                ((x) << 14)
 
 #       define R300_ALU_ARG0C_SHIFT             0
 #       define R300_ALU_ARG0C_MASK              (31 << 0)
@@ -1910,10 +1920,13 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #       define R300_ALU_ARGA_SRCP_Y             13
 #       define R300_ALU_ARGA_SRCP_Z             14
 #       define R300_ALU_ARGA_SRCP_W             15
-
 #       define R300_ALU_ARGA_ZERO               16
 #       define R300_ALU_ARGA_ONE                17
 #       define R300_ALU_ARGA_HALF               18
+#       define R300_ALPHA_SWIZA(x)              ((x) << 0)
+#       define R300_ALPHA_SWIZB(x)              ((x) << 7)
+#       define R300_ALPHA_SWIZC(x)              ((x) << 14)
+
 #       define R300_ALU_ARG0A_SHIFT             0
 #       define R300_ALU_ARG0A_MASK              (31 << 0)
 #       define R300_ALU_ARG0A_NOP               (0 << 5)
diff --git a/src/gallium/drivers/r300/r300_state_shader.h b/src/gallium/drivers/r300/r300_state_shader.h
index 1d5d9ee..73025b2 100644
--- a/src/gallium/drivers/r300/r300_state_shader.h
+++ b/src/gallium/drivers/r300/r300_state_shader.h
@@ -47,11 +47,18 @@ static const struct r300_fragment_shader r300_passthrough_fragment_shader = {
     .indirections = 1,
     .shader.stack_size = 2,
 
-    /* XXX decode these */
-    .instructions[0].alu_rgb_inst = 0x50A80,
-    .instructions[0].alu_rgb_inst = 0x1C000000,
-    .instructions[0].alu_alpha_inst = 0x40889,
-    .instructions[0].alu_alpha_inst = 0x1000000,
+    .instructions[0].alu_rgb_inst = R300_RGB_SWIZA(R300_ALU_ARGC_SRC0C_XYZ) |
+        R300_RGB_SWIZB(R300_ALU_ARGC_ONE) |
+        R300_RGB_SWIZC(R300_ALU_ARGC_ZERO) |
+        R300_ALU_OUTC_MAD,
+    .instructions[0].alu_rgb_addr = R300_RGB_ADDR0(0) | R300_RGB_ADDR1(0) |
+        R300_RGB_ADDR2(0) | R300_ALU_DSTC_OUTPUT_XYZ,
+    .instructions[0].alu_alpha_inst = R300_ALPHA_SWIZA(R300_ALU_ARGA_SRC0A) |
+        R300_ALPHA_SWIZB(R300_ALU_ARGA_ONE) |
+        R300_ALPHA_SWIZC(R300_ALU_ARGA_ZERO) |
+        R300_ALU_OUTA_MAD,
+    .instructions[0].alu_alpha_addr = R300_ALPHA_ADDR0(0) |
+        R300_ALPHA_ADDR1(0) | R300_ALPHA_ADDR2(0) | R300_ALU_DSTA_OUTPUT,
 };
 
 static const struct r500_fragment_shader r500_passthrough_fragment_shader = {




More information about the mesa-commit mailing list