Mesa (master): r300g: fix vertex colors with 8 bits per channel

Corbin Simpson csimpson at kemper.freedesktop.org
Sun Jan 17 09:14:58 UTC 2010


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

Author: Marek Olšák <maraeo at gmail.com>
Date:   Sun Jan 17 04:41:51 2010 +0100

r300g: fix vertex colors with 8 bits per channel

The piglit BGRA tests pass now.

---

 src/gallium/drivers/r300/r300_state_inlines.h |   22 +++++++++++++++++-----
 1 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/src/gallium/drivers/r300/r300_state_inlines.h b/src/gallium/drivers/r300/r300_state_inlines.h
index 35be00e..a9ee0a2 100644
--- a/src/gallium/drivers/r300/r300_state_inlines.h
+++ b/src/gallium/drivers/r300/r300_state_inlines.h
@@ -537,6 +537,7 @@ r300_translate_vertex_data_type(enum pipe_format format) {
 static INLINE uint16_t
 r300_translate_vertex_data_swizzle(enum pipe_format format) {
     const struct util_format_description *desc = util_format_description(format);
+    unsigned swizzle[4], i;
 
     assert(format);
 
@@ -547,11 +548,22 @@ r300_translate_vertex_data_swizzle(enum pipe_format format) {
         return 0;
     }
 
-    return ((desc->swizzle[0] << R300_SWIZZLE_SELECT_X_SHIFT) |
-        (desc->swizzle[1] << R300_SWIZZLE_SELECT_Y_SHIFT) |
-        (desc->swizzle[2] << R300_SWIZZLE_SELECT_Z_SHIFT) |
-        (desc->swizzle[3] << R300_SWIZZLE_SELECT_W_SHIFT) |
-        (0xf << R300_WRITE_ENA_SHIFT));
+    /* Swizzles for 8bits formats are in the reversed order, not sure why. */
+    if (desc->channel[0].size == 8) {
+        for (i = 0; i < 4; i++) {
+            swizzle[i] = 3 - desc->swizzle[i];
+        }
+    } else {
+        for (i = 0; i < 4; i++) {
+            swizzle[i] = desc->swizzle[i];
+        }
+    }
+
+    return ((swizzle[0] << R300_SWIZZLE_SELECT_X_SHIFT) |
+            (swizzle[1] << R300_SWIZZLE_SELECT_Y_SHIFT) |
+            (swizzle[2] << R300_SWIZZLE_SELECT_Z_SHIFT) |
+            (swizzle[3] << R300_SWIZZLE_SELECT_W_SHIFT) |
+            (0xf << R300_WRITE_ENA_SHIFT));
 }
 
 #endif /* R300_STATE_INLINES_H */




More information about the mesa-commit mailing list