2 ##########################################################################
4 # Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
7 # Permission is hereby granted, free of charge, to any person obtaining a
8 # copy of this software and associated documentation files (the
9 # "Software"), to deal in the Software without restriction, including
10 # without limitation the rights to use, copy, modify, merge, publish,
11 # distribute, sub license, and/or sell copies of the Software, and to
12 # permit persons to whom the Software is furnished to do so, subject to
13 # the following conditions:
15 # The above copyright notice and this permission notice (including the
16 # next paragraph) shall be included in all copies or substantial portions
19 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
22 # IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
23 # ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 ##########################################################################
33 import Image
# http://www.pythonware.com/products/pil/
35 PIPE_FORMAT_LAYOUT_RGBAZS
= 0
36 PIPE_FORMAT_LAYOUT_YCBCR
= 1
37 PIPE_FORMAT_LAYOUT_DXT
= 2
38 PIPE_FORMAT_LAYOUT_MIXED
= 3
40 PIPE_FORMAT_COMP_R
= 0
41 PIPE_FORMAT_COMP_G
= 1
42 PIPE_FORMAT_COMP_B
= 2
43 PIPE_FORMAT_COMP_A
= 3
44 PIPE_FORMAT_COMP_0
= 4
45 PIPE_FORMAT_COMP_1
= 5
46 PIPE_FORMAT_COMP_Z
= 6
47 PIPE_FORMAT_COMP_S
= 7
49 PIPE_FORMAT_TYPE_UNKNOWN
= 0
50 PIPE_FORMAT_TYPE_FLOAT
= 1
51 PIPE_FORMAT_TYPE_UNORM
= 2
52 PIPE_FORMAT_TYPE_SNORM
= 3
53 PIPE_FORMAT_TYPE_USCALED
= 4
54 PIPE_FORMAT_TYPE_SSCALED
= 5
55 PIPE_FORMAT_TYPE_SRGB
= 6
56 PIPE_FORMAT_TYPE_FIXED
= 7
58 def _PIPE_FORMAT_RGBAZS( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, EXP2
, TYPE
):
59 return ((PIPE_FORMAT_LAYOUT_RGBAZS
<< 0) |\
68 def _PIPE_FORMAT_SWZ( SWZX
, SWZY
, SWZZ
, SWZW
):
69 return (((SWZX
) << 0) |
((SWZY
) << 3) |
((SWZZ
) << 6) |
((SWZW
) << 9))
71 def _PIPE_FORMAT_RGBAZS_1( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, TYPE
):
72 return _PIPE_FORMAT_RGBAZS( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, 0, TYPE
)
74 def _PIPE_FORMAT_RGBAZS_2( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, TYPE
):
75 _PIPE_FORMAT_RGBAZS( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, 1, TYPE
)
77 def _PIPE_FORMAT_RGBAZS_8( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, TYPE
):
78 return _PIPE_FORMAT_RGBAZS( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, 3, TYPE
)
80 def _PIPE_FORMAT_RGBAZS_64( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, TYPE
):
81 return _PIPE_FORMAT_RGBAZS( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, 6, TYPE
)
83 def _PIPE_FORMAT_MIXED( SWZ
, SIZEX
, SIZEY
, SIZEZ
, SIZEW
, SIGNX
, SIGNY
, SIGNZ
, SIGNW
, NORMALIZED
, SCALE8
):
84 return ((PIPE_FORMAT_LAYOUT_MIXED
<< 0) |\
94 ((NORMALIZED
) << 30) |\
98 _PIPE_FORMAT_R001
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_1
)
99 _PIPE_FORMAT_RG01
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_1
)
100 _PIPE_FORMAT_RGB1
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_B
, PIPE_FORMAT_COMP_1
)
101 _PIPE_FORMAT_RGBA
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_B
, PIPE_FORMAT_COMP_A
)
102 _PIPE_FORMAT_ARGB
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_A
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_B
)
103 _PIPE_FORMAT_ABGR
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_A
, PIPE_FORMAT_COMP_B
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_R
)
104 _PIPE_FORMAT_BGRA
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_B
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_A
)
105 _PIPE_FORMAT_1RGB
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_1
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_B
)
106 _PIPE_FORMAT_1BGR
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_1
, PIPE_FORMAT_COMP_B
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_R
)
107 _PIPE_FORMAT_BGR1
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_B
, PIPE_FORMAT_COMP_G
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_1
)
108 _PIPE_FORMAT_0000
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
)
109 _PIPE_FORMAT_000R
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_R
)
110 _PIPE_FORMAT_RRR1
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_1
)
111 _PIPE_FORMAT_RRRR
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_R
)
112 _PIPE_FORMAT_RRRG
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_R
, PIPE_FORMAT_COMP_G
)
113 _PIPE_FORMAT_Z000
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_Z
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
)
114 _PIPE_FORMAT_0Z00
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_Z
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
)
115 _PIPE_FORMAT_SZ00
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_S
, PIPE_FORMAT_COMP_Z
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
)
116 _PIPE_FORMAT_ZS00
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_Z
, PIPE_FORMAT_COMP_S
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
)
117 _PIPE_FORMAT_S000
= _PIPE_FORMAT_SWZ( PIPE_FORMAT_COMP_S
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
, PIPE_FORMAT_COMP_0
)
119 def _PIPE_FORMAT_YCBCR( REV
):
120 return ((PIPE_FORMAT_LAYOUT_YCBCR
<< 0) |\
123 def _PIPE_FORMAT_DXT( LEVEL
, RSIZE
, GSIZE
, BSIZE
, ASIZE
):
124 return ((PIPE_FORMAT_LAYOUT_DXT
<< 0) | \
131 PIPE_FORMAT_NONE
= _PIPE_FORMAT_RGBAZS_1 ( _PIPE_FORMAT_0000
, 0, 0, 0, 0, PIPE_FORMAT_TYPE_UNKNOWN
)
132 PIPE_FORMAT_A8R8G8B8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_ARGB
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_UNORM
)
133 PIPE_FORMAT_X8R8G8B8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_1RGB
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_UNORM
)
134 PIPE_FORMAT_B8G8R8A8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_BGRA
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_UNORM
)
135 PIPE_FORMAT_B8G8R8X8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_BGR1
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_UNORM
)
136 PIPE_FORMAT_A1R5G5B5_UNORM
= _PIPE_FORMAT_RGBAZS_1 ( _PIPE_FORMAT_ARGB
, 1, 5, 5, 5, PIPE_FORMAT_TYPE_UNORM
)
137 PIPE_FORMAT_A4R4G4B4_UNORM
= _PIPE_FORMAT_RGBAZS_1 ( _PIPE_FORMAT_ARGB
, 4, 4, 4, 4, PIPE_FORMAT_TYPE_UNORM
)
138 PIPE_FORMAT_R5G6B5_UNORM
= _PIPE_FORMAT_RGBAZS_1 ( _PIPE_FORMAT_RGB1
, 5, 6, 5, 0, PIPE_FORMAT_TYPE_UNORM
)
139 PIPE_FORMAT_A2B10G10R10_UNORM
= _PIPE_FORMAT_RGBAZS_2 ( _PIPE_FORMAT_ABGR
, 1, 5, 5, 5, PIPE_FORMAT_TYPE_UNORM
)
140 PIPE_FORMAT_L8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RRR1
, 1, 1, 1, 0, PIPE_FORMAT_TYPE_UNORM
)
141 PIPE_FORMAT_A8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_000R
, 0, 0, 0, 1, PIPE_FORMAT_TYPE_UNORM
)
142 PIPE_FORMAT_I8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RRRR
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_UNORM
)
143 PIPE_FORMAT_A8L8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RRRG
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_UNORM
)
144 PIPE_FORMAT_L16_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RRR1
, 2, 2, 2, 0, PIPE_FORMAT_TYPE_UNORM
)
145 PIPE_FORMAT_YCBCR
= _PIPE_FORMAT_YCBCR( 0 )
146 PIPE_FORMAT_YCBCR_REV
= _PIPE_FORMAT_YCBCR( 1 )
147 PIPE_FORMAT_Z16_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_Z000
, 2, 0, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
148 PIPE_FORMAT_Z32_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_Z000
, 4, 0, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
149 PIPE_FORMAT_Z32_FLOAT
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_Z000
, 4, 0, 0, 0, PIPE_FORMAT_TYPE_FLOAT
)
150 PIPE_FORMAT_S8Z24_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_SZ00
, 1, 3, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
151 PIPE_FORMAT_Z24S8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_ZS00
, 3, 1, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
152 PIPE_FORMAT_X8Z24_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_0Z00
, 1, 3, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
153 PIPE_FORMAT_Z24X8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_Z000
, 3, 1, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
154 PIPE_FORMAT_S8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_S000
, 1, 0, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
155 PIPE_FORMAT_R64_FLOAT
= _PIPE_FORMAT_RGBAZS_64( _PIPE_FORMAT_R001
, 1, 0, 0, 0, PIPE_FORMAT_TYPE_FLOAT
)
156 PIPE_FORMAT_R64G64_FLOAT
= _PIPE_FORMAT_RGBAZS_64( _PIPE_FORMAT_RG01
, 1, 1, 0, 0, PIPE_FORMAT_TYPE_FLOAT
)
157 PIPE_FORMAT_R64G64B64_FLOAT
= _PIPE_FORMAT_RGBAZS_64( _PIPE_FORMAT_RGB1
, 1, 1, 1, 0, PIPE_FORMAT_TYPE_FLOAT
)
158 PIPE_FORMAT_R64G64B64A64_FLOAT
= _PIPE_FORMAT_RGBAZS_64( _PIPE_FORMAT_RGBA
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_FLOAT
)
159 PIPE_FORMAT_R32_FLOAT
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 4, 0, 0, 0, PIPE_FORMAT_TYPE_FLOAT
)
160 PIPE_FORMAT_R32G32_FLOAT
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 4, 4, 0, 0, PIPE_FORMAT_TYPE_FLOAT
)
161 PIPE_FORMAT_R32G32B32_FLOAT
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 4, 4, 4, 0, PIPE_FORMAT_TYPE_FLOAT
)
162 PIPE_FORMAT_R32G32B32A32_FLOAT
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 4, 4, 4, 4, PIPE_FORMAT_TYPE_FLOAT
)
163 PIPE_FORMAT_R32_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 4, 0, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
164 PIPE_FORMAT_R32G32_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 4, 4, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
165 PIPE_FORMAT_R32G32B32_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 4, 4, 4, 0, PIPE_FORMAT_TYPE_UNORM
)
166 PIPE_FORMAT_R32G32B32A32_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 4, 4, 4, 4, PIPE_FORMAT_TYPE_UNORM
)
167 PIPE_FORMAT_R32_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 4, 0, 0, 0, PIPE_FORMAT_TYPE_USCALED
)
168 PIPE_FORMAT_R32G32_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 4, 4, 0, 0, PIPE_FORMAT_TYPE_USCALED
)
169 PIPE_FORMAT_R32G32B32_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 4, 4, 4, 0, PIPE_FORMAT_TYPE_USCALED
)
170 PIPE_FORMAT_R32G32B32A32_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 4, 4, 4, 4, PIPE_FORMAT_TYPE_USCALED
)
171 PIPE_FORMAT_R32_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 4, 0, 0, 0, PIPE_FORMAT_TYPE_SNORM
)
172 PIPE_FORMAT_R32G32_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 4, 4, 0, 0, PIPE_FORMAT_TYPE_SNORM
)
173 PIPE_FORMAT_R32G32B32_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 4, 4, 4, 0, PIPE_FORMAT_TYPE_SNORM
)
174 PIPE_FORMAT_R32G32B32A32_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 4, 4, 4, 4, PIPE_FORMAT_TYPE_SNORM
)
175 PIPE_FORMAT_R32_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 4, 0, 0, 0, PIPE_FORMAT_TYPE_SSCALED
)
176 PIPE_FORMAT_R32G32_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 4, 4, 0, 0, PIPE_FORMAT_TYPE_SSCALED
)
177 PIPE_FORMAT_R32G32B32_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 4, 4, 4, 0, PIPE_FORMAT_TYPE_SSCALED
)
178 PIPE_FORMAT_R32G32B32A32_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 4, 4, 4, 4, PIPE_FORMAT_TYPE_SSCALED
)
179 PIPE_FORMAT_R16_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 2, 0, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
180 PIPE_FORMAT_R16G16_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 2, 2, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
181 PIPE_FORMAT_R16G16B16_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 2, 2, 2, 0, PIPE_FORMAT_TYPE_UNORM
)
182 PIPE_FORMAT_R16G16B16A16_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 2, 2, 2, 2, PIPE_FORMAT_TYPE_UNORM
)
183 PIPE_FORMAT_R16_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 2, 0, 0, 0, PIPE_FORMAT_TYPE_USCALED
)
184 PIPE_FORMAT_R16G16_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 2, 2, 0, 0, PIPE_FORMAT_TYPE_USCALED
)
185 PIPE_FORMAT_R16G16B16_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 2, 2, 2, 0, PIPE_FORMAT_TYPE_USCALED
)
186 PIPE_FORMAT_R16G16B16A16_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 2, 2, 2, 2, PIPE_FORMAT_TYPE_USCALED
)
187 PIPE_FORMAT_R16_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 2, 0, 0, 0, PIPE_FORMAT_TYPE_SNORM
)
188 PIPE_FORMAT_R16G16_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 2, 2, 0, 0, PIPE_FORMAT_TYPE_SNORM
)
189 PIPE_FORMAT_R16G16B16_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 2, 2, 2, 0, PIPE_FORMAT_TYPE_SNORM
)
190 PIPE_FORMAT_R16G16B16A16_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 2, 2, 2, 2, PIPE_FORMAT_TYPE_SNORM
)
191 PIPE_FORMAT_R16_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 2, 0, 0, 0, PIPE_FORMAT_TYPE_SSCALED
)
192 PIPE_FORMAT_R16G16_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 2, 2, 0, 0, PIPE_FORMAT_TYPE_SSCALED
)
193 PIPE_FORMAT_R16G16B16_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 2, 2, 2, 0, PIPE_FORMAT_TYPE_SSCALED
)
194 PIPE_FORMAT_R16G16B16A16_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 2, 2, 2, 2, PIPE_FORMAT_TYPE_SSCALED
)
195 PIPE_FORMAT_R8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 1, 0, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
196 PIPE_FORMAT_R8G8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 1, 1, 0, 0, PIPE_FORMAT_TYPE_UNORM
)
197 PIPE_FORMAT_R8G8B8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 0, PIPE_FORMAT_TYPE_UNORM
)
198 PIPE_FORMAT_R8G8B8A8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_UNORM
)
199 PIPE_FORMAT_R8G8B8X8_UNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_UNORM
)
200 PIPE_FORMAT_R8_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 1, 0, 0, 0, PIPE_FORMAT_TYPE_USCALED
)
201 PIPE_FORMAT_R8G8_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 1, 1, 0, 0, PIPE_FORMAT_TYPE_USCALED
)
202 PIPE_FORMAT_R8G8B8_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 0, PIPE_FORMAT_TYPE_USCALED
)
203 PIPE_FORMAT_R8G8B8A8_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_USCALED
)
204 PIPE_FORMAT_R8G8B8X8_USCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_USCALED
)
205 PIPE_FORMAT_R8_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 1, 0, 0, 0, PIPE_FORMAT_TYPE_SNORM
)
206 PIPE_FORMAT_R8G8_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 1, 1, 0, 0, PIPE_FORMAT_TYPE_SNORM
)
207 PIPE_FORMAT_R8G8B8_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 0, PIPE_FORMAT_TYPE_SNORM
)
208 PIPE_FORMAT_R8G8B8A8_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SNORM
)
209 PIPE_FORMAT_R8G8B8X8_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SNORM
)
210 PIPE_FORMAT_B6G5R5_SNORM
= _PIPE_FORMAT_RGBAZS_1 ( _PIPE_FORMAT_BGR1
, 6, 5, 5, 0, PIPE_FORMAT_TYPE_SNORM
)
211 PIPE_FORMAT_A8B8G8R8_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_BGRA
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SNORM
)
212 PIPE_FORMAT_X8B8G8R8_SNORM
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SNORM
)
213 PIPE_FORMAT_R8_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 1, 0, 0, 0, PIPE_FORMAT_TYPE_SSCALED
)
214 PIPE_FORMAT_R8G8_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 1, 1, 0, 0, PIPE_FORMAT_TYPE_SSCALED
)
215 PIPE_FORMAT_R8G8B8_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 0, PIPE_FORMAT_TYPE_SSCALED
)
216 PIPE_FORMAT_R8G8B8A8_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SSCALED
)
217 PIPE_FORMAT_R8G8B8X8_SSCALED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SSCALED
)
218 PIPE_FORMAT_R32_FIXED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_R001
, 4, 0, 0, 0, PIPE_FORMAT_TYPE_FIXED
)
219 PIPE_FORMAT_R32G32_FIXED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RG01
, 4, 4, 0, 0, PIPE_FORMAT_TYPE_FIXED
)
220 PIPE_FORMAT_R32G32B32_FIXED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 4, 4, 4, 0, PIPE_FORMAT_TYPE_FIXED
)
221 PIPE_FORMAT_R32G32B32A32_FIXED
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 4, 4, 4, 4, PIPE_FORMAT_TYPE_FIXED
)
222 PIPE_FORMAT_L8_SRGB
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RRR1
, 1, 1, 1, 0, PIPE_FORMAT_TYPE_SRGB
)
223 PIPE_FORMAT_A8_L8_SRGB
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RRRG
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SRGB
)
224 PIPE_FORMAT_R8G8B8_SRGB
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 0, PIPE_FORMAT_TYPE_SRGB
)
225 PIPE_FORMAT_R8G8B8A8_SRGB
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGBA
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SRGB
)
226 PIPE_FORMAT_R8G8B8X8_SRGB
= _PIPE_FORMAT_RGBAZS_8 ( _PIPE_FORMAT_RGB1
, 1, 1, 1, 1, PIPE_FORMAT_TYPE_SRGB
)
227 PIPE_FORMAT_X8UB8UG8SR8S_NORM
= _PIPE_FORMAT_MIXED( _PIPE_FORMAT_1BGR
, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1 )
228 PIPE_FORMAT_B6UG5SR5S_NORM
= _PIPE_FORMAT_MIXED( _PIPE_FORMAT_BGR1
, 6, 5, 5, 0, 0, 1, 1, 0, 1, 0 )
229 PIPE_FORMAT_DXT1_RGB
= _PIPE_FORMAT_DXT( 1, 8, 8, 8, 0 )
230 PIPE_FORMAT_DXT1_RGBA
= _PIPE_FORMAT_DXT( 1, 8, 8, 8, 8 )
231 PIPE_FORMAT_DXT3_RGBA
= _PIPE_FORMAT_DXT( 3, 8, 8, 8, 8 )
232 PIPE_FORMAT_DXT5_RGBA
= _PIPE_FORMAT_DXT( 5, 8, 8, 8, 8 )
236 for name
, value
in globals().items():
237 if name
.startswith("PIPE_FORMAT_") and isinstance(value
, int):
238 formats
[value
] = name
242 return min(max(g
, 0), 255)
245 def yuv2rgb(y
, u
, v
):
250 r
= clip(( 298 * C
+ 409 * E
+ 128) >> 8)
251 g
= clip(( 298 * C
- 100 * D
- 208 * E
+ 128) >> 8)
252 b
= clip(( 298 * C
+ 516 * D
+ 128) >> 8)
257 def translate_r5g6b5(data
):
258 value
, = struct
.unpack_from("H", data
)
259 r
= ((value
>> 11) & 0x1f)*0xff/0x1f
260 g
= ((value
>> 5) & 0x3f)*0xff/0x3f
261 b
= ((value
>> 0) & 0x1f)*0xff/0x1f
263 return [[(r
, g
, b
, a
)]]
265 def translate_a8r8g8b8(data
):
266 b
, g
, r
, a
= struct
.unpack_from("BBBB", data
)
267 return [[(r
, g
, b
, a
)]]
270 def translate_x8r8g8b8(data
):
271 b
, g
, r
, x
= struct
.unpack_from("BBBB", data
)
273 return [[(r
, g
, b
, a
)]]
275 def translate_r8g8b8a8(data
):
276 r
, g
, b
, a
= struct
.unpack_from("BBBB", data
)
277 return [[(r
, g
, b
, a
)]]
279 def translate_ycbcr(data
):
280 y1
, u
, y2
, v
= struct
.unpack_from("BBBB", data
)
281 r1
, g1
, b1
= yuv2rgb(y1
, u
, v
)
282 r2
, g2
, b2
= yuv2rgb(y1
, u
, v
)
283 return [[(r1
, g1
, b1
, 255), (r2
, g2
, b2
, 255)]]
285 def translate_ycbcr_rev(data
):
286 v
, y2
, u
, y1
= struct
.unpack_from("BBBB", data
)
287 r1
, g1
, b1
= yuv2rgb(y1
, u
, v
)
288 r2
, g2
, b2
= yuv2rgb(y1
, u
, v
)
289 return [[(r1
, g1
, b1
, 255), (r2
, g2
, b2
, 255)]]
291 def translate_x8z24(data
):
292 value
, = struct
.unpack_from("I", data
)
293 r
= g
= b
= (value
& 0xffffff)*0xff/0xffffff
295 return [[(r
, g
, b
, a
)]]
297 def translate_s8z24(data
):
298 value
, = struct
.unpack_from("I", data
)
299 r
= (value
& 0xffffff)*0xff/0xffffff
303 return [[(r
, g
, b
, a
)]]
307 PIPE_FORMAT_A8R8G8B8_UNORM
: (4, 1, 1, translate_a8r8g8b8
),
308 PIPE_FORMAT_X8R8G8B8_UNORM
: (4, 1, 1, translate_x8r8g8b8
),
309 PIPE_FORMAT_B8G8R8A8_UNORM
: (4, 1, 1, translate_r8g8b8a8
),
310 PIPE_FORMAT_B8G8R8X8_UNORM
: (4, 1, 1, translate_r8g8b8a8
),
311 PIPE_FORMAT_A8B8G8R8_SNORM
: (4, 1, 1, translate_r8g8b8a8
),
312 PIPE_FORMAT_R5G6B5_UNORM
: (2, 1, 1, translate_r5g6b5
),
313 PIPE_FORMAT_YCBCR
: (4, 2, 1, translate_ycbcr
),
314 PIPE_FORMAT_YCBCR_REV
: (4, 2, 1, translate_ycbcr_rev
),
315 PIPE_FORMAT_S8Z24_UNORM
: (4, 1, 1, translate_s8z24
),
316 PIPE_FORMAT_X8Z24_UNORM
: (4, 1, 1, translate_x8z24
),
319 def read_header(infile
):
321 header
= infile
.read(struct
.calcsize(header_fmt
))
322 return struct
.unpack_from(header_fmt
, header
)
324 def process(infilename
, outfilename
):
325 sys
.stderr
.write("%s -> %s\n" % (infilename
, outfilename
))
326 infile
= open(infilename
, "rb")
327 format
, cpp
, width
, height
= read_header(infile
)
328 sys
.stderr
.write(" %ux%ux%ubpp %s\n" % (width
, height
, cpp
*8, formats
[format
]))
329 outimage
= Image
.new(
331 size
=(width
, height
),
333 outpixels
= outimage
.load()
335 bsize
, bwidth
, bheight
, translate_func
= translate
[format
]
337 sys
.stderr
.write('error: unsupported format %s\n' % formats
[format
])
339 for y
in range(0, height
, bheight
):
340 for x
in range(0, width
, bwidth
):
341 indata
= infile
.read(bsize
)
342 outdata
= translate_func(indata
)
343 for j
in range(bheight
):
344 for i
in range(bwidth
):
345 r
, g
, b
, a
= outdata
[j
][i
]
346 outpixels
[x
+i
, y
+j
] = r
, g
, b
347 outimage
.save(outfilename
, "PNG")
351 if sys
.platform
== 'win32':
353 from glob
import glob
355 for arg
in sys
.argv
[1:]:
356 args
.extend(glob(arg
))
359 for infilename
in args
:
360 root
, ext
= os
.path
.splitext(infilename
)
361 outfilename
= root
+ ".png"
362 process(infilename
, outfilename
)
365 if __name__
== '__main__':