r300-gallium: Decode passthrough shader for r300.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 23 Feb 2009 12:25:29 +0000 (04:25 -0800)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Mon, 23 Feb 2009 12:37:58 +0000 (04:37 -0800)
Looks pretty sane.

src/gallium/drivers/r300/r300_reg.h
src/gallium/drivers/r300/r300_state_shader.h

index be26b13b0b0973a883d20e51b24d2cd1f8a7aaf8..8888b39a2f9a9074a074d1d0fb944e35dfe82b30 100644 (file)
@@ -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)
index 1d5d9ee943bc9a95131f8eeb3548dcea9f18f349..73025b2dcc4b9ffeeb656cf9a0df45663fb4a221 100644 (file)
@@ -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 = {