r300g: fix texture border for 16-bits-per-channel formats
authorMarek Olšák <maraeo@gmail.com>
Tue, 5 Oct 2010 00:52:03 +0000 (02:52 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sun, 24 Oct 2010 21:43:13 +0000 (23:43 +0200)
This is kinda hacky, but it's hard to come up with a generic solution for
all formats when only a few are used in practice (I mostly get B8G8R8*8).

src/gallium/drivers/r300/r300_state_derived.c

index 904736ef06d13b7ecf300c7bf6215ecb2aa7ee53..730ef7a3ee26b01ec6c474e1803d9d42bd9bc7e2 100644 (file)
@@ -620,14 +620,19 @@ static uint32_t r300_get_border_color(enum pipe_format format,
             }
             break;
 
-        default:
-            /* I think the fat formats (16, 32) are specified
-             * as the 8-bit ones. I am not sure how compressed formats
-             * work here. */
+        case 8:
             r = ((float_to_ubyte(border_swizzled[0]) & 0xff) << 0) |
                 ((float_to_ubyte(border_swizzled[1]) & 0xff) << 8) |
                 ((float_to_ubyte(border_swizzled[2]) & 0xff) << 16) |
                 ((float_to_ubyte(border_swizzled[3]) & 0xff) << 24);
+            break;
+
+        case 16:
+            r = ((float_to_ubyte(border_swizzled[2]) & 0xff) << 0) |
+                ((float_to_ubyte(border_swizzled[1]) & 0xff) << 8) |
+                ((float_to_ubyte(border_swizzled[0]) & 0xff) << 16) |
+                ((float_to_ubyte(border_swizzled[3]) & 0xff) << 24);
+            break;
     }
 
     return r;