Merge commit 'origin/gallium-0.1' into gallium-0.2
[mesa.git] / bin / raw2png.py
index 880dc89f5502da408801a7111c9c469faea30268..f01e7990a139f1b025fede4e6990dbb55e6a2c07 100755 (executable)
@@ -254,32 +254,66 @@ def yuv2rgb(y, u, v):
        return r, g, b
 
        
-def translate_rgba(data):
-       r, g, b, a = data
+def translate_r5g6b5(data):
+       value, = struct.unpack_from("H", data)
+       r = ((value >> 11) & 0x1f)*0xff/0x1f
+       g = ((value >>  5) & 0x3f)*0xff/0x3f
+       b = ((value >>  0) & 0x1f)*0xff/0x1f
+       a = 255
        return [[(r, g, b, a)]]
 
+def translate_a8r8g8b8(data):
+    b, g, r, a = struct.unpack_from("BBBB", data)
+    return [[(r, g, b, a)]]
+
+
+def translate_x8r8g8b8(data):
+    b, g, r, x = struct.unpack_from("BBBB", data)
+    a = 255
+    return [[(r, g, b, a)]]
+
+def translate_r8g8b8a8(data):
+       r, g, b, a = struct.unpack_from("BBBB", data)
+       return [[(r, g, b, a)]]
 
 def translate_ycbcr(data):
-       y1, u, y2, v = data
+       y1, u, y2, v = struct.unpack_from("BBBB", data)
        r1, g1, b1 = yuv2rgb(y1, u, v)
        r2, g2, b2 = yuv2rgb(y1, u, v)
        return [[(r1, g1, b1, 255), (r2, g2, b2, 255)]]
 
 def translate_ycbcr_rev(data):
-    v, y2, u, y1 = data
+    v, y2, u, y1 = struct.unpack_from("BBBB", data)
     r1, g1, b1 = yuv2rgb(y1, u, v)
     r2, g2, b2 = yuv2rgb(y1, u, v)
     return [[(r1, g1, b1, 255), (r2, g2, b2, 255)]]
 
+def translate_x8z24(data):
+    value, = struct.unpack_from("I", data)
+    r = g = b = (value & 0xffffff)*0xff/0xffffff
+    a = 255
+    return [[(r, g, b, a)]]
+
+def translate_s8z24(data):
+    value, = struct.unpack_from("I", data)
+    r = (value & 0xffffff)*0xff/0xffffff
+    g = value >> 24
+    b = 0
+    a = 255
+    return [[(r, g, b, a)]]
+
 
 translate = {
-       PIPE_FORMAT_A8R8G8B8_UNORM: (4, 1, 1, translate_rgba),
-       PIPE_FORMAT_X8R8G8B8_UNORM: (4, 1, 1, translate_rgba),
-       PIPE_FORMAT_B8G8R8A8_UNORM: (4, 1, 1, translate_rgba),
-       PIPE_FORMAT_B8G8R8X8_UNORM: (4, 1, 1, translate_rgba),
-       PIPE_FORMAT_A8B8G8R8_SNORM: (4, 1, 1, translate_rgba),
+       PIPE_FORMAT_A8R8G8B8_UNORM: (4, 1, 1, translate_a8r8g8b8),
+       PIPE_FORMAT_X8R8G8B8_UNORM: (4, 1, 1, translate_x8r8g8b8),
+       PIPE_FORMAT_B8G8R8A8_UNORM: (4, 1, 1, translate_r8g8b8a8),
+       PIPE_FORMAT_B8G8R8X8_UNORM: (4, 1, 1, translate_r8g8b8a8),
+       PIPE_FORMAT_A8B8G8R8_SNORM: (4, 1, 1, translate_r8g8b8a8),
+       PIPE_FORMAT_R5G6B5_UNORM: (2, 1, 1, translate_r5g6b5),
        PIPE_FORMAT_YCBCR: (4, 2, 1, translate_ycbcr),
        PIPE_FORMAT_YCBCR_REV: (4, 2, 1, translate_ycbcr_rev),
+    PIPE_FORMAT_S8Z24_UNORM: (4, 1, 1, translate_s8z24),
+    PIPE_FORMAT_X8Z24_UNORM: (4, 1, 1, translate_x8z24),
 }
 
 def read_header(infile):
@@ -304,7 +338,7 @@ def process(infilename, outfilename):
                return
        for y in range(0, height, bheight):
                for x in range(0, width, bwidth):
-                       indata = map(ord, infile.read(4))
+                       indata = infile.read(bsize)
                        outdata = translate_func(indata)
                        for j in range(bheight):
                                for i in range(bwidth):