2 * Mesa 3-D graphics library
4 * Copyright (c) 2011 VMware, Inc.
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
20 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 #include "format_unpack.h"
28 #include "../../gallium/auxiliary/util/u_format_rgb9e5.h"
29 #include "../../gallium/auxiliary/util/u_format_r11g11b10f.h"
32 /** Helper struct for MESA_FORMAT_Z32_FLOAT_X24S8 */
40 /* Expand 1, 2, 3, 4, 5, 6-bit values to fill 8 bits */
42 #define EXPAND_1_8(X) ( (X) ? 0xff : 0x0 )
44 #define EXPAND_2_8(X) ( ((X) << 6) | ((X) << 4) | ((X) << 2) | (X) )
46 #define EXPAND_3_8(X) ( ((X) << 5) | ((X) << 2) | ((X) >> 1) )
48 #define EXPAND_4_8(X) ( ((X) << 4) | (X) )
50 #define EXPAND_5_8(X) ( ((X) << 3) | ((X) >> 2) )
52 #define EXPAND_6_8(X) ( ((X) << 2) | ((X) >> 4) )
56 * Convert an 8-bit sRGB value from non-linear space to a
57 * linear RGB value in [0, 1].
58 * Implemented with a 256-entry lookup table.
61 _mesa_nonlinear_to_linear(GLubyte cs8
)
63 static GLfloat table
[256];
64 static GLboolean tableReady
= GL_FALSE
;
66 /* compute lookup table now */
68 for (i
= 0; i
< 256; i
++) {
69 const GLfloat cs
= UBYTE_TO_FLOAT(i
);
71 table
[i
] = cs
/ 12.92f
;
74 table
[i
] = (GLfloat
) pow((cs
+ 0.055) / 1.055, 2.4);
83 /**********************************************************************/
84 /* Unpack, returning GLfloat colors */
85 /**********************************************************************/
87 typedef void (*unpack_rgba_func
)(const void *src
, GLfloat dst
[][4], GLuint n
);
91 unpack_RGBA8888(const void *src
, GLfloat dst
[][4], GLuint n
)
93 const GLuint
*s
= ((const GLuint
*) src
);
95 for (i
= 0; i
< n
; i
++) {
96 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 24) );
97 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 16) & 0xff );
98 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 8) & 0xff );
99 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( (s
[i
] ) & 0xff );
104 unpack_RGBA8888_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
106 const GLuint
*s
= ((const GLuint
*) src
);
108 for (i
= 0; i
< n
; i
++) {
109 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( (s
[i
] ) & 0xff );
110 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 8) & 0xff );
111 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 16) & 0xff );
112 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 24) );
117 unpack_ARGB8888(const void *src
, GLfloat dst
[][4], GLuint n
)
119 const GLuint
*s
= ((const GLuint
*) src
);
121 for (i
= 0; i
< n
; i
++) {
122 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 16) & 0xff );
123 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 8) & 0xff );
124 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( (s
[i
] ) & 0xff );
125 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 24) );
130 unpack_ARGB8888_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
132 const GLuint
*s
= ((const GLuint
*) src
);
134 for (i
= 0; i
< n
; i
++) {
135 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 8) & 0xff );
136 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 16) & 0xff );
137 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 24) );
138 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( (s
[i
] ) & 0xff );
143 unpack_RGBX8888(const void *src
, GLfloat dst
[][4], GLuint n
)
145 const GLuint
*s
= ((const GLuint
*) src
);
147 for (i
= 0; i
< n
; i
++) {
148 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 24) );
149 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 16) & 0xff );
150 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 8) & 0xff );
151 dst
[i
][ACOMP
] = 1.0f
;
156 unpack_RGBX8888_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
158 const GLuint
*s
= ((const GLuint
*) src
);
160 for (i
= 0; i
< n
; i
++) {
161 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( (s
[i
] ) & 0xff );
162 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 8) & 0xff );
163 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 16) & 0xff );
164 dst
[i
][ACOMP
] = 1.0f
;
169 unpack_XRGB8888(const void *src
, GLfloat dst
[][4], GLuint n
)
171 const GLuint
*s
= ((const GLuint
*) src
);
173 for (i
= 0; i
< n
; i
++) {
174 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 16) & 0xff );
175 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 8) & 0xff );
176 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( (s
[i
] ) & 0xff );
177 dst
[i
][ACOMP
] = 1.0f
;
182 unpack_XRGB8888_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
184 const GLuint
*s
= ((const GLuint
*) src
);
186 for (i
= 0; i
< n
; i
++) {
187 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 8) & 0xff );
188 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 16) & 0xff );
189 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( (s
[i
] >> 24) );
190 dst
[i
][ACOMP
] = 1.0f
;
195 unpack_RGB888(const void *src
, GLfloat dst
[][4], GLuint n
)
197 const GLubyte
*s
= (const GLubyte
*) src
;
199 for (i
= 0; i
< n
; i
++) {
200 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( s
[i
*3+2] );
201 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( s
[i
*3+1] );
202 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( s
[i
*3+0] );
203 dst
[i
][ACOMP
] = 1.0F
;
208 unpack_BGR888(const void *src
, GLfloat dst
[][4], GLuint n
)
210 const GLubyte
*s
= (const GLubyte
*) src
;
212 for (i
= 0; i
< n
; i
++) {
213 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( s
[i
*3+0] );
214 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( s
[i
*3+1] );
215 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( s
[i
*3+2] );
216 dst
[i
][ACOMP
] = 1.0F
;
221 unpack_RGB565(const void *src
, GLfloat dst
[][4], GLuint n
)
223 const GLushort
*s
= ((const GLushort
*) src
);
225 for (i
= 0; i
< n
; i
++) {
226 dst
[i
][RCOMP
] = ((s
[i
] >> 11) & 0x1f) * (1.0F
/ 31.0F
);
227 dst
[i
][GCOMP
] = ((s
[i
] >> 5 ) & 0x3f) * (1.0F
/ 63.0F
);
228 dst
[i
][BCOMP
] = ((s
[i
] ) & 0x1f) * (1.0F
/ 31.0F
);
229 dst
[i
][ACOMP
] = 1.0F
;
234 unpack_RGB565_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
236 const GLushort
*s
= ((const GLushort
*) src
);
238 for (i
= 0; i
< n
; i
++) {
239 GLuint t
= (s
[i
] >> 8) | (s
[i
] << 8); /* byte swap */
240 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( ((t
>> 8) & 0xf8) | ((t
>> 13) & 0x7) );
241 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( ((t
>> 3) & 0xfc) | ((t
>> 9) & 0x3) );
242 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( ((t
<< 3) & 0xf8) | ((t
>> 2) & 0x7) );
243 dst
[i
][ACOMP
] = 1.0F
;
248 unpack_ARGB4444(const void *src
, GLfloat dst
[][4], GLuint n
)
250 const GLushort
*s
= ((const GLushort
*) src
);
252 for (i
= 0; i
< n
; i
++) {
253 dst
[i
][RCOMP
] = ((s
[i
] >> 8) & 0xf) * (1.0F
/ 15.0F
);
254 dst
[i
][GCOMP
] = ((s
[i
] >> 4) & 0xf) * (1.0F
/ 15.0F
);
255 dst
[i
][BCOMP
] = ((s
[i
] ) & 0xf) * (1.0F
/ 15.0F
);
256 dst
[i
][ACOMP
] = ((s
[i
] >> 12) & 0xf) * (1.0F
/ 15.0F
);
261 unpack_ARGB4444_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
263 const GLushort
*s
= ((const GLushort
*) src
);
265 for (i
= 0; i
< n
; i
++) {
266 dst
[i
][RCOMP
] = ((s
[i
] ) & 0xf) * (1.0F
/ 15.0F
);
267 dst
[i
][GCOMP
] = ((s
[i
] >> 12) & 0xf) * (1.0F
/ 15.0F
);
268 dst
[i
][BCOMP
] = ((s
[i
] >> 8) & 0xf) * (1.0F
/ 15.0F
);
269 dst
[i
][ACOMP
] = ((s
[i
] >> 4) & 0xf) * (1.0F
/ 15.0F
);
274 unpack_RGBA5551(const void *src
, GLfloat dst
[][4], GLuint n
)
276 const GLushort
*s
= ((const GLushort
*) src
);
278 for (i
= 0; i
< n
; i
++) {
279 dst
[i
][RCOMP
] = ((s
[i
] >> 11) & 0x1f) * (1.0F
/ 31.0F
);
280 dst
[i
][GCOMP
] = ((s
[i
] >> 6) & 0x1f) * (1.0F
/ 31.0F
);
281 dst
[i
][BCOMP
] = ((s
[i
] >> 1) & 0x1f) * (1.0F
/ 31.0F
);
282 dst
[i
][ACOMP
] = ((s
[i
] ) & 0x01) * 1.0F
;
287 unpack_ARGB1555(const void *src
, GLfloat dst
[][4], GLuint n
)
289 const GLushort
*s
= ((const GLushort
*) src
);
291 for (i
= 0; i
< n
; i
++) {
292 dst
[i
][RCOMP
] = ((s
[i
] >> 10) & 0x1f) * (1.0F
/ 31.0F
);
293 dst
[i
][GCOMP
] = ((s
[i
] >> 5) & 0x1f) * (1.0F
/ 31.0F
);
294 dst
[i
][BCOMP
] = ((s
[i
] >> 0) & 0x1f) * (1.0F
/ 31.0F
);
295 dst
[i
][ACOMP
] = ((s
[i
] >> 15) & 0x01) * 1.0F
;
300 unpack_ARGB1555_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
302 const GLushort
*s
= ((const GLushort
*) src
);
304 for (i
= 0; i
< n
; i
++) {
305 GLushort tmp
= (s
[i
] << 8) | (s
[i
] >> 8); /* byteswap */
306 dst
[i
][RCOMP
] = ((tmp
>> 10) & 0x1f) * (1.0F
/ 31.0F
);
307 dst
[i
][GCOMP
] = ((tmp
>> 5) & 0x1f) * (1.0F
/ 31.0F
);
308 dst
[i
][BCOMP
] = ((tmp
>> 0) & 0x1f) * (1.0F
/ 31.0F
);
309 dst
[i
][ACOMP
] = ((tmp
>> 15) & 0x01) * 1.0F
;
314 unpack_AL44(const void *src
, GLfloat dst
[][4], GLuint n
)
316 const GLubyte
*s
= ((const GLubyte
*) src
);
318 for (i
= 0; i
< n
; i
++) {
321 dst
[i
][BCOMP
] = (s
[i
] & 0xf) * (1.0F
/ 15.0F
);
322 dst
[i
][ACOMP
] = ((s
[i
] >> 4) & 0xf) * (1.0F
/ 15.0F
);
327 unpack_AL88(const void *src
, GLfloat dst
[][4], GLuint n
)
329 const GLushort
*s
= ((const GLushort
*) src
);
331 for (i
= 0; i
< n
; i
++) {
334 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( s
[i
] & 0xff );
335 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( s
[i
] >> 8 );
340 unpack_AL88_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
342 const GLushort
*s
= ((const GLushort
*) src
);
344 for (i
= 0; i
< n
; i
++) {
347 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT( s
[i
] >> 8 );
348 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( s
[i
] & 0xff );
353 unpack_AL1616(const void *src
, GLfloat dst
[][4], GLuint n
)
355 const GLuint
*s
= ((const GLuint
*) src
);
357 for (i
= 0; i
< n
; i
++) {
360 dst
[i
][BCOMP
] = USHORT_TO_FLOAT( s
[i
] & 0xffff );
361 dst
[i
][ACOMP
] = USHORT_TO_FLOAT( s
[i
] >> 16 );
366 unpack_AL1616_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
368 const GLuint
*s
= ((const GLuint
*) src
);
370 for (i
= 0; i
< n
; i
++) {
373 dst
[i
][BCOMP
] = USHORT_TO_FLOAT( s
[i
] >> 16 );
374 dst
[i
][ACOMP
] = USHORT_TO_FLOAT( s
[i
] & 0xffff );
379 unpack_RGB332(const void *src
, GLfloat dst
[][4], GLuint n
)
381 const GLubyte
*s
= ((const GLubyte
*) src
);
383 for (i
= 0; i
< n
; i
++) {
384 dst
[i
][RCOMP
] = ((s
[i
] >> 5) & 0x7) * (1.0F
/ 7.0F
);
385 dst
[i
][GCOMP
] = ((s
[i
] >> 2) & 0x7) * (1.0F
/ 7.0F
);
386 dst
[i
][BCOMP
] = ((s
[i
] ) & 0x3) * (1.0F
/ 3.0F
);
387 dst
[i
][ACOMP
] = 1.0F
;
393 unpack_A8(const void *src
, GLfloat dst
[][4], GLuint n
)
395 const GLubyte
*s
= ((const GLubyte
*) src
);
397 for (i
= 0; i
< n
; i
++) {
400 dst
[i
][BCOMP
] = 0.0F
;
401 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT(s
[i
]);
406 unpack_A16(const void *src
, GLfloat dst
[][4], GLuint n
)
408 const GLushort
*s
= ((const GLushort
*) src
);
410 for (i
= 0; i
< n
; i
++) {
413 dst
[i
][BCOMP
] = 0.0F
;
414 dst
[i
][ACOMP
] = USHORT_TO_FLOAT(s
[i
]);
419 unpack_L8(const void *src
, GLfloat dst
[][4], GLuint n
)
421 const GLubyte
*s
= ((const GLubyte
*) src
);
423 for (i
= 0; i
< n
; i
++) {
426 dst
[i
][BCOMP
] = UBYTE_TO_FLOAT(s
[i
]);
427 dst
[i
][ACOMP
] = 1.0F
;
432 unpack_L16(const void *src
, GLfloat dst
[][4], GLuint n
)
434 const GLushort
*s
= ((const GLushort
*) src
);
436 for (i
= 0; i
< n
; i
++) {
439 dst
[i
][BCOMP
] = USHORT_TO_FLOAT(s
[i
]);
440 dst
[i
][ACOMP
] = 1.0F
;
445 unpack_I8(const void *src
, GLfloat dst
[][4], GLuint n
)
447 const GLubyte
*s
= ((const GLubyte
*) src
);
449 for (i
= 0; i
< n
; i
++) {
453 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT(s
[i
]);
458 unpack_I16(const void *src
, GLfloat dst
[][4], GLuint n
)
460 const GLushort
*s
= ((const GLushort
*) src
);
462 for (i
= 0; i
< n
; i
++) {
466 dst
[i
][ACOMP
] = USHORT_TO_FLOAT(s
[i
]);
471 unpack_YCBCR(const void *src
, GLfloat dst
[][4], GLuint n
)
474 for (i
= 0; i
< n
; i
++) {
475 const GLushort
*src0
= ((const GLushort
*) src
) + i
* 2; /* even */
476 const GLushort
*src1
= src0
+ 1; /* odd */
477 const GLubyte y0
= (*src0
>> 8) & 0xff; /* luminance */
478 const GLubyte cb
= *src0
& 0xff; /* chroma U */
479 const GLubyte y1
= (*src1
>> 8) & 0xff; /* luminance */
480 const GLubyte cr
= *src1
& 0xff; /* chroma V */
481 const GLubyte y
= (i
& 1) ? y1
: y0
; /* choose even/odd luminance */
482 GLfloat r
= 1.164F
* (y
- 16) + 1.596F
* (cr
- 128);
483 GLfloat g
= 1.164F
* (y
- 16) - 0.813F
* (cr
- 128) - 0.391F
* (cb
- 128);
484 GLfloat b
= 1.164F
* (y
- 16) + 2.018F
* (cb
- 128);
485 r
*= (1.0F
/ 255.0F
);
486 g
*= (1.0F
/ 255.0F
);
487 b
*= (1.0F
/ 255.0F
);
488 dst
[i
][RCOMP
] = CLAMP(r
, 0.0F
, 1.0F
);
489 dst
[i
][GCOMP
] = CLAMP(g
, 0.0F
, 1.0F
);
490 dst
[i
][BCOMP
] = CLAMP(b
, 0.0F
, 1.0F
);
491 dst
[i
][ACOMP
] = 1.0F
;
496 unpack_YCBCR_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
499 for (i
= 0; i
< n
; i
++) {
500 const GLushort
*src0
= ((const GLushort
*) src
) + i
* 2; /* even */
501 const GLushort
*src1
= src0
+ 1; /* odd */
502 const GLubyte y0
= *src0
& 0xff; /* luminance */
503 const GLubyte cr
= (*src0
>> 8) & 0xff; /* chroma V */
504 const GLubyte y1
= *src1
& 0xff; /* luminance */
505 const GLubyte cb
= (*src1
>> 8) & 0xff; /* chroma U */
506 const GLubyte y
= (i
& 1) ? y1
: y0
; /* choose even/odd luminance */
507 GLfloat r
= 1.164F
* (y
- 16) + 1.596F
* (cr
- 128);
508 GLfloat g
= 1.164F
* (y
- 16) - 0.813F
* (cr
- 128) - 0.391F
* (cb
- 128);
509 GLfloat b
= 1.164F
* (y
- 16) + 2.018F
* (cb
- 128);
510 r
*= (1.0F
/ 255.0F
);
511 g
*= (1.0F
/ 255.0F
);
512 b
*= (1.0F
/ 255.0F
);
513 dst
[i
][RCOMP
] = CLAMP(r
, 0.0F
, 1.0F
);
514 dst
[i
][GCOMP
] = CLAMP(g
, 0.0F
, 1.0F
);
515 dst
[i
][BCOMP
] = CLAMP(b
, 0.0F
, 1.0F
);
516 dst
[i
][ACOMP
] = 1.0F
;
521 unpack_R8(const void *src
, GLfloat dst
[][4], GLuint n
)
523 const GLubyte
*s
= ((const GLubyte
*) src
);
525 for (i
= 0; i
< n
; i
++) {
526 dst
[i
][0] = UBYTE_TO_FLOAT(s
[i
]);
534 unpack_GR88(const void *src
, GLfloat dst
[][4], GLuint n
)
536 const GLushort
*s
= ((const GLushort
*) src
);
538 for (i
= 0; i
< n
; i
++) {
539 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( s
[i
] & 0xff );
540 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( s
[i
] >> 8 );
547 unpack_RG88(const void *src
, GLfloat dst
[][4], GLuint n
)
549 const GLushort
*s
= ((const GLushort
*) src
);
551 for (i
= 0; i
< n
; i
++) {
552 dst
[i
][RCOMP
] = UBYTE_TO_FLOAT( s
[i
] >> 8 );
553 dst
[i
][GCOMP
] = UBYTE_TO_FLOAT( s
[i
] & 0xff );
560 unpack_R16(const void *src
, GLfloat dst
[][4], GLuint n
)
562 const GLushort
*s
= ((const GLushort
*) src
);
564 for (i
= 0; i
< n
; i
++) {
565 dst
[i
][RCOMP
] = USHORT_TO_FLOAT(s
[i
]);
573 unpack_GR1616(const void *src
, GLfloat dst
[][4], GLuint n
)
575 const GLuint
*s
= ((const GLuint
*) src
);
577 for (i
= 0; i
< n
; i
++) {
578 dst
[i
][RCOMP
] = USHORT_TO_FLOAT( s
[i
] & 0xffff );
579 dst
[i
][GCOMP
] = USHORT_TO_FLOAT( s
[i
] >> 16 );
586 unpack_RG1616(const void *src
, GLfloat dst
[][4], GLuint n
)
588 const GLuint
*s
= ((const GLuint
*) src
);
590 for (i
= 0; i
< n
; i
++) {
591 dst
[i
][RCOMP
] = USHORT_TO_FLOAT( s
[i
] >> 16 );
592 dst
[i
][GCOMP
] = USHORT_TO_FLOAT( s
[i
] & 0xffff );
599 unpack_ARGB2101010(const void *src
, GLfloat dst
[][4], GLuint n
)
601 const GLuint
*s
= ((const GLuint
*) src
);
603 for (i
= 0; i
< n
; i
++) {
604 dst
[i
][RCOMP
] = ((s
[i
] >> 20) & 0x3ff) * (1.0F
/ 1023.0F
);
605 dst
[i
][GCOMP
] = ((s
[i
] >> 10) & 0x3ff) * (1.0F
/ 1023.0F
);
606 dst
[i
][BCOMP
] = ((s
[i
] >> 0) & 0x3ff) * (1.0F
/ 1023.0F
);
607 dst
[i
][ACOMP
] = ((s
[i
] >> 30) & 0x03) * (1.0F
/ 3.0F
);
613 unpack_ABGR2101010_UINT(const void *src
, GLfloat dst
[][4], GLuint n
)
615 const GLuint
*s
= ((const GLuint
*) src
);
617 for (i
= 0; i
< n
; i
++) {
618 dst
[i
][RCOMP
] = (GLfloat
)((s
[i
] >> 0) & 0x3ff);
619 dst
[i
][GCOMP
] = (GLfloat
)((s
[i
] >> 10) & 0x3ff);
620 dst
[i
][BCOMP
] = (GLfloat
)((s
[i
] >> 20) & 0x3ff);
621 dst
[i
][ACOMP
] = (GLfloat
)((s
[i
] >> 30) & 0x03);
627 unpack_Z24_S8(const void *src
, GLfloat dst
[][4], GLuint n
)
629 /* only return Z, not stencil data */
630 const GLuint
*s
= ((const GLuint
*) src
);
631 const GLdouble scale
= 1.0 / (GLdouble
) 0xffffff;
633 for (i
= 0; i
< n
; i
++) {
636 dst
[i
][2] = (GLfloat
) ((s
[i
] >> 8) * scale
);
638 ASSERT(dst
[i
][0] >= 0.0F
);
639 ASSERT(dst
[i
][0] <= 1.0F
);
644 unpack_S8_Z24(const void *src
, GLfloat dst
[][4], GLuint n
)
646 /* only return Z, not stencil data */
647 const GLuint
*s
= ((const GLuint
*) src
);
648 const GLdouble scale
= 1.0 / (GLdouble
) 0xffffff;
650 for (i
= 0; i
< n
; i
++) {
653 dst
[i
][2] = (float) ((s
[i
] & 0x00ffffff) * scale
);
655 ASSERT(dst
[i
][0] >= 0.0F
);
656 ASSERT(dst
[i
][0] <= 1.0F
);
661 unpack_Z16(const void *src
, GLfloat dst
[][4], GLuint n
)
663 const GLushort
*s
= ((const GLushort
*) src
);
665 for (i
= 0; i
< n
; i
++) {
668 dst
[i
][2] = s
[i
] * (1.0F
/ 65535.0F
);
674 unpack_X8_Z24(const void *src
, GLfloat dst
[][4], GLuint n
)
676 unpack_S8_Z24(src
, dst
, n
);
680 unpack_Z24_X8(const void *src
, GLfloat dst
[][4], GLuint n
)
682 unpack_Z24_S8(src
, dst
, n
);
686 unpack_Z32(const void *src
, GLfloat dst
[][4], GLuint n
)
688 const GLuint
*s
= ((const GLuint
*) src
);
690 for (i
= 0; i
< n
; i
++) {
693 dst
[i
][2] = s
[i
] * (1.0F
/ 0xffffffff);
699 unpack_Z32_FLOAT(const void *src
, GLfloat dst
[][4], GLuint n
)
701 const GLfloat
*s
= ((const GLfloat
*) src
);
703 for (i
= 0; i
< n
; i
++) {
706 dst
[i
][2] = s
[i
* 2];
712 unpack_Z32_FLOAT_X24S8(const void *src
, GLfloat dst
[][4], GLuint n
)
714 const GLfloat
*s
= ((const GLfloat
*) src
);
716 for (i
= 0; i
< n
; i
++) {
726 unpack_S8(const void *src
, GLfloat dst
[][4], GLuint n
)
728 /* should never be used */
730 for (i
= 0; i
< n
; i
++) {
740 unpack_SRGB8(const void *src
, GLfloat dst
[][4], GLuint n
)
742 const GLubyte
*s
= (const GLubyte
*) src
;
744 for (i
= 0; i
< n
; i
++) {
745 dst
[i
][RCOMP
] = _mesa_nonlinear_to_linear(s
[i
*3+2]);
746 dst
[i
][GCOMP
] = _mesa_nonlinear_to_linear(s
[i
*3+1]);
747 dst
[i
][BCOMP
] = _mesa_nonlinear_to_linear(s
[i
*3+0]);
748 dst
[i
][ACOMP
] = 1.0F
;
753 unpack_SRGBA8(const void *src
, GLfloat dst
[][4], GLuint n
)
755 const GLuint
*s
= ((const GLuint
*) src
);
757 for (i
= 0; i
< n
; i
++) {
758 dst
[i
][RCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] >> 24) );
759 dst
[i
][GCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] >> 16) & 0xff );
760 dst
[i
][BCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] >> 8) & 0xff );
761 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( s
[i
] & 0xff ); /* linear! */
766 unpack_SARGB8(const void *src
, GLfloat dst
[][4], GLuint n
)
768 const GLuint
*s
= ((const GLuint
*) src
);
770 for (i
= 0; i
< n
; i
++) {
771 dst
[i
][RCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] >> 16) & 0xff );
772 dst
[i
][GCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] >> 8) & 0xff );
773 dst
[i
][BCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] ) & 0xff );
774 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( s
[i
] >> 24 ); /* linear! */
779 unpack_SL8(const void *src
, GLfloat dst
[][4], GLuint n
)
781 const GLubyte
*s
= ((const GLubyte
*) src
);
783 for (i
= 0; i
< n
; i
++) {
786 dst
[i
][BCOMP
] = _mesa_nonlinear_to_linear(s
[i
]);
787 dst
[i
][ACOMP
] = 1.0F
;
792 unpack_SLA8(const void *src
, GLfloat dst
[][4], GLuint n
)
794 const GLushort
*s
= (const GLushort
*) src
;
796 for (i
= 0; i
< n
; i
++) {
799 dst
[i
][BCOMP
] = _mesa_nonlinear_to_linear(s
[i
] & 0xff);
800 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT(s
[i
] >> 8); /* linear! */
805 unpack_SRGB_DXT1(const void *src
, GLfloat dst
[][4], GLuint n
)
810 unpack_SRGBA_DXT1(const void *src
, GLfloat dst
[][4], GLuint n
)
815 unpack_SRGBA_DXT3(const void *src
, GLfloat dst
[][4], GLuint n
)
820 unpack_SRGBA_DXT5(const void *src
, GLfloat dst
[][4], GLuint n
)
825 unpack_RGB_FXT1(const void *src
, GLfloat dst
[][4], GLuint n
)
830 unpack_RGBA_FXT1(const void *src
, GLfloat dst
[][4], GLuint n
)
835 unpack_RGB_DXT1(const void *src
, GLfloat dst
[][4], GLuint n
)
840 unpack_RGBA_DXT1(const void *src
, GLfloat dst
[][4], GLuint n
)
845 unpack_RGBA_DXT3(const void *src
, GLfloat dst
[][4], GLuint n
)
850 unpack_RGBA_DXT5(const void *src
, GLfloat dst
[][4], GLuint n
)
856 unpack_RGBA_FLOAT32(const void *src
, GLfloat dst
[][4], GLuint n
)
858 const GLfloat
*s
= (const GLfloat
*) src
;
860 for (i
= 0; i
< n
; i
++) {
861 dst
[i
][RCOMP
] = s
[i
*4+0];
862 dst
[i
][GCOMP
] = s
[i
*4+1];
863 dst
[i
][BCOMP
] = s
[i
*4+2];
864 dst
[i
][ACOMP
] = s
[i
*4+3];
869 unpack_RGBA_FLOAT16(const void *src
, GLfloat dst
[][4], GLuint n
)
871 const GLhalfARB
*s
= (const GLhalfARB
*) src
;
873 for (i
= 0; i
< n
; i
++) {
874 dst
[i
][RCOMP
] = _mesa_half_to_float(s
[i
*4+0]);
875 dst
[i
][GCOMP
] = _mesa_half_to_float(s
[i
*4+1]);
876 dst
[i
][BCOMP
] = _mesa_half_to_float(s
[i
*4+2]);
877 dst
[i
][ACOMP
] = _mesa_half_to_float(s
[i
*4+3]);
882 unpack_RGB_FLOAT32(const void *src
, GLfloat dst
[][4], GLuint n
)
884 const GLfloat
*s
= (const GLfloat
*) src
;
886 for (i
= 0; i
< n
; i
++) {
887 dst
[i
][RCOMP
] = s
[i
*3+0];
888 dst
[i
][GCOMP
] = s
[i
*3+1];
889 dst
[i
][BCOMP
] = s
[i
*3+2];
890 dst
[i
][ACOMP
] = 1.0F
;
895 unpack_RGB_FLOAT16(const void *src
, GLfloat dst
[][4], GLuint n
)
897 const GLhalfARB
*s
= (const GLhalfARB
*) src
;
899 for (i
= 0; i
< n
; i
++) {
900 dst
[i
][RCOMP
] = _mesa_half_to_float(s
[i
*3+0]);
901 dst
[i
][GCOMP
] = _mesa_half_to_float(s
[i
*3+1]);
902 dst
[i
][BCOMP
] = _mesa_half_to_float(s
[i
*3+2]);
903 dst
[i
][ACOMP
] = 1.0F
;
908 unpack_ALPHA_FLOAT32(const void *src
, GLfloat dst
[][4], GLuint n
)
910 const GLfloat
*s
= (const GLfloat
*) src
;
912 for (i
= 0; i
< n
; i
++) {
915 dst
[i
][BCOMP
] = 0.0F
;
916 dst
[i
][ACOMP
] = s
[i
];
921 unpack_ALPHA_FLOAT16(const void *src
, GLfloat dst
[][4], GLuint n
)
923 const GLhalfARB
*s
= (const GLhalfARB
*) src
;
925 for (i
= 0; i
< n
; i
++) {
928 dst
[i
][BCOMP
] = 0.0F
;
929 dst
[i
][ACOMP
] = _mesa_half_to_float(s
[i
]);
934 unpack_LUMINANCE_FLOAT32(const void *src
, GLfloat dst
[][4], GLuint n
)
936 const GLfloat
*s
= (const GLfloat
*) src
;
938 for (i
= 0; i
< n
; i
++) {
941 dst
[i
][BCOMP
] = s
[i
];
942 dst
[i
][ACOMP
] = 1.0F
;
947 unpack_LUMINANCE_FLOAT16(const void *src
, GLfloat dst
[][4], GLuint n
)
949 const GLhalfARB
*s
= (const GLhalfARB
*) src
;
951 for (i
= 0; i
< n
; i
++) {
954 dst
[i
][BCOMP
] = _mesa_half_to_float(s
[i
]);
955 dst
[i
][ACOMP
] = 1.0F
;
960 unpack_LUMINANCE_ALPHA_FLOAT32(const void *src
, GLfloat dst
[][4], GLuint n
)
962 const GLfloat
*s
= (const GLfloat
*) src
;
964 for (i
= 0; i
< n
; i
++) {
967 dst
[i
][BCOMP
] = s
[i
*2+0];
968 dst
[i
][ACOMP
] = s
[i
*2+1];
973 unpack_LUMINANCE_ALPHA_FLOAT16(const void *src
, GLfloat dst
[][4], GLuint n
)
975 const GLhalfARB
*s
= (const GLhalfARB
*) src
;
977 for (i
= 0; i
< n
; i
++) {
980 dst
[i
][BCOMP
] = _mesa_half_to_float(s
[i
*2+0]);
981 dst
[i
][ACOMP
] = _mesa_half_to_float(s
[i
*2+1]);
986 unpack_INTENSITY_FLOAT32(const void *src
, GLfloat dst
[][4], GLuint n
)
988 const GLfloat
*s
= (const GLfloat
*) src
;
990 for (i
= 0; i
< n
; i
++) {
994 dst
[i
][ACOMP
] = s
[i
];
999 unpack_INTENSITY_FLOAT16(const void *src
, GLfloat dst
[][4], GLuint n
)
1001 const GLhalfARB
*s
= (const GLhalfARB
*) src
;
1003 for (i
= 0; i
< n
; i
++) {
1007 dst
[i
][ACOMP
] = _mesa_half_to_float(s
[i
]);
1012 unpack_R_FLOAT32(const void *src
, GLfloat dst
[][4], GLuint n
)
1014 const GLfloat
*s
= (const GLfloat
*) src
;
1016 for (i
= 0; i
< n
; i
++) {
1017 dst
[i
][RCOMP
] = s
[i
];
1018 dst
[i
][GCOMP
] = 0.0F
;
1019 dst
[i
][BCOMP
] = 0.0F
;
1020 dst
[i
][ACOMP
] = 1.0F
;
1025 unpack_R_FLOAT16(const void *src
, GLfloat dst
[][4], GLuint n
)
1027 const GLhalfARB
*s
= (const GLhalfARB
*) src
;
1029 for (i
= 0; i
< n
; i
++) {
1030 dst
[i
][RCOMP
] = _mesa_half_to_float(s
[i
]);
1031 dst
[i
][GCOMP
] = 0.0F
;
1032 dst
[i
][BCOMP
] = 0.0F
;
1033 dst
[i
][ACOMP
] = 1.0F
;
1038 unpack_RG_FLOAT32(const void *src
, GLfloat dst
[][4], GLuint n
)
1040 const GLfloat
*s
= (const GLfloat
*) src
;
1042 for (i
= 0; i
< n
; i
++) {
1043 dst
[i
][RCOMP
] = s
[i
*2+0];
1044 dst
[i
][GCOMP
] = s
[i
*2+1];
1045 dst
[i
][BCOMP
] = 0.0F
;
1046 dst
[i
][ACOMP
] = 1.0F
;
1051 unpack_RG_FLOAT16(const void *src
, GLfloat dst
[][4], GLuint n
)
1053 const GLhalfARB
*s
= (const GLhalfARB
*) src
;
1055 for (i
= 0; i
< n
; i
++) {
1056 dst
[i
][RCOMP
] = _mesa_half_to_float(s
[i
*2+0]);
1057 dst
[i
][GCOMP
] = _mesa_half_to_float(s
[i
*2+1]);
1058 dst
[i
][BCOMP
] = 0.0F
;
1059 dst
[i
][ACOMP
] = 1.0F
;
1065 unpack_RGBA_INT8(const void *src
, GLfloat dst
[][4], GLuint n
)
1067 const GLbyte
*s
= (const GLbyte
*) src
;
1069 for (i
= 0; i
< n
; i
++) {
1070 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1071 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1072 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1073 dst
[i
][ACOMP
] = (GLfloat
) s
[i
*4+3];
1078 unpack_RGBA_INT16(const void *src
, GLfloat dst
[][4], GLuint n
)
1080 const GLshort
*s
= (const GLshort
*) src
;
1082 for (i
= 0; i
< n
; i
++) {
1083 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1084 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1085 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1086 dst
[i
][ACOMP
] = (GLfloat
) s
[i
*4+3];
1091 unpack_RGBA_INT32(const void *src
, GLfloat dst
[][4], GLuint n
)
1093 const GLint
*s
= (const GLint
*) src
;
1095 for (i
= 0; i
< n
; i
++) {
1096 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1097 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1098 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1099 dst
[i
][ACOMP
] = (GLfloat
) s
[i
*4+3];
1104 unpack_RGBA_UINT8(const void *src
, GLfloat dst
[][4], GLuint n
)
1106 const GLubyte
*s
= (const GLubyte
*) src
;
1108 for (i
= 0; i
< n
; i
++) {
1109 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1110 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1111 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1112 dst
[i
][ACOMP
] = (GLfloat
) s
[i
*4+3];
1117 unpack_RGBA_UINT16(const void *src
, GLfloat dst
[][4], GLuint n
)
1119 const GLushort
*s
= (const GLushort
*) src
;
1121 for (i
= 0; i
< n
; i
++) {
1122 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1123 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1124 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1125 dst
[i
][ACOMP
] = (GLfloat
) s
[i
*4+3];
1130 unpack_RGBA_UINT32(const void *src
, GLfloat dst
[][4], GLuint n
)
1132 const GLuint
*s
= (const GLuint
*) src
;
1134 for (i
= 0; i
< n
; i
++) {
1135 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1136 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1137 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1138 dst
[i
][ACOMP
] = (GLfloat
) s
[i
*4+3];
1143 unpack_DUDV8(const void *src
, GLfloat dst
[][4], GLuint n
)
1145 const GLbyte
*s
= (const GLbyte
*) src
;
1147 for (i
= 0; i
< n
; i
++) {
1148 dst
[i
][RCOMP
] = BYTE_TO_FLOAT(s
[i
*2+0]);
1149 dst
[i
][GCOMP
] = BYTE_TO_FLOAT(s
[i
*2+1]);
1156 unpack_SIGNED_R8(const void *src
, GLfloat dst
[][4], GLuint n
)
1158 const GLbyte
*s
= ((const GLbyte
*) src
);
1160 for (i
= 0; i
< n
; i
++) {
1161 dst
[i
][RCOMP
] = BYTE_TO_FLOAT_TEX( s
[i
] );
1162 dst
[i
][GCOMP
] = 0.0F
;
1163 dst
[i
][BCOMP
] = 0.0F
;
1164 dst
[i
][ACOMP
] = 1.0F
;
1169 unpack_SIGNED_RG88_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
1171 const GLushort
*s
= ((const GLushort
*) src
);
1173 for (i
= 0; i
< n
; i
++) {
1174 dst
[i
][RCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] & 0xff) );
1175 dst
[i
][GCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 8) );
1176 dst
[i
][BCOMP
] = 0.0F
;
1177 dst
[i
][ACOMP
] = 1.0F
;
1182 unpack_SIGNED_RGBX8888(const void *src
, GLfloat dst
[][4], GLuint n
)
1184 const GLuint
*s
= ((const GLuint
*) src
);
1186 for (i
= 0; i
< n
; i
++) {
1187 dst
[i
][RCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 24) );
1188 dst
[i
][GCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 16) );
1189 dst
[i
][BCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 8) );
1190 dst
[i
][ACOMP
] = 1.0f
;
1195 unpack_SIGNED_RGBA8888(const void *src
, GLfloat dst
[][4], GLuint n
)
1197 const GLuint
*s
= ((const GLuint
*) src
);
1199 for (i
= 0; i
< n
; i
++) {
1200 dst
[i
][RCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 24) );
1201 dst
[i
][GCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 16) );
1202 dst
[i
][BCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 8) );
1203 dst
[i
][ACOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] ) );
1208 unpack_SIGNED_RGBA8888_REV(const void *src
, GLfloat dst
[][4], GLuint n
)
1210 const GLuint
*s
= ((const GLuint
*) src
);
1212 for (i
= 0; i
< n
; i
++) {
1213 dst
[i
][RCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] ) );
1214 dst
[i
][GCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 8) );
1215 dst
[i
][BCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 16) );
1216 dst
[i
][ACOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 24) );
1221 unpack_SIGNED_R16(const void *src
, GLfloat dst
[][4], GLuint n
)
1223 const GLshort
*s
= ((const GLshort
*) src
);
1225 for (i
= 0; i
< n
; i
++) {
1226 dst
[i
][RCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
] );
1227 dst
[i
][GCOMP
] = 0.0F
;
1228 dst
[i
][BCOMP
] = 0.0F
;
1229 dst
[i
][ACOMP
] = 1.0F
;
1234 unpack_SIGNED_GR1616(const void *src
, GLfloat dst
[][4], GLuint n
)
1236 const GLuint
*s
= ((const GLuint
*) src
);
1238 for (i
= 0; i
< n
; i
++) {
1239 dst
[i
][RCOMP
] = SHORT_TO_FLOAT_TEX( (GLshort
) (s
[i
] & 0xffff) );
1240 dst
[i
][GCOMP
] = SHORT_TO_FLOAT_TEX( (GLshort
) (s
[i
] >> 16) );
1241 dst
[i
][BCOMP
] = 0.0F
;
1242 dst
[i
][ACOMP
] = 1.0F
;
1247 unpack_SIGNED_RGB_16(const void *src
, GLfloat dst
[][4], GLuint n
)
1249 const GLshort
*s
= (const GLshort
*) src
;
1251 for (i
= 0; i
< n
; i
++) {
1252 dst
[i
][RCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*3+0] );
1253 dst
[i
][GCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*3+1] );
1254 dst
[i
][BCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*3+2] );
1255 dst
[i
][ACOMP
] = 1.0F
;
1260 unpack_SIGNED_RGBA_16(const void *src
, GLfloat dst
[][4], GLuint n
)
1262 const GLshort
*s
= (const GLshort
*) src
;
1264 for (i
= 0; i
< n
; i
++) {
1265 dst
[i
][RCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*4+0] );
1266 dst
[i
][GCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*4+1] );
1267 dst
[i
][BCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*4+2] );
1268 dst
[i
][ACOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*4+3] );
1273 unpack_RGBA_16(const void *src
, GLfloat dst
[][4], GLuint n
)
1275 const GLushort
*s
= (const GLushort
*) src
;
1277 for (i
= 0; i
< n
; i
++) {
1278 dst
[i
][RCOMP
] = USHORT_TO_FLOAT( s
[i
*4+0] );
1279 dst
[i
][GCOMP
] = USHORT_TO_FLOAT( s
[i
*4+1] );
1280 dst
[i
][BCOMP
] = USHORT_TO_FLOAT( s
[i
*4+2] );
1281 dst
[i
][ACOMP
] = USHORT_TO_FLOAT( s
[i
*4+3] );
1286 unpack_RED_RGTC1(const void *src
, GLfloat dst
[][4], GLuint n
)
1292 unpack_SIGNED_RED_RGTC1(const void *src
, GLfloat dst
[][4], GLuint n
)
1298 unpack_RG_RGTC2(const void *src
, GLfloat dst
[][4], GLuint n
)
1304 unpack_SIGNED_RG_RGTC2(const void *src
, GLfloat dst
[][4], GLuint n
)
1310 unpack_L_LATC1(const void *src
, GLfloat dst
[][4], GLuint n
)
1316 unpack_SIGNED_L_LATC1(const void *src
, GLfloat dst
[][4], GLuint n
)
1322 unpack_LA_LATC2(const void *src
, GLfloat dst
[][4], GLuint n
)
1328 unpack_SIGNED_LA_LATC2(const void *src
, GLfloat dst
[][4], GLuint n
)
1334 unpack_ETC1_RGB8(const void *src
, GLfloat dst
[][4], GLuint n
)
1340 unpack_ETC2_RGB8(const void *src
, GLfloat dst
[][4], GLuint n
)
1346 unpack_ETC2_SRGB8(const void *src
, GLfloat dst
[][4], GLuint n
)
1352 unpack_ETC2_RGBA8_EAC(const void *src
, GLfloat dst
[][4], GLuint n
)
1358 unpack_ETC2_SRGB8_ALPHA8_EAC(const void *src
, GLfloat dst
[][4], GLuint n
)
1364 unpack_ETC2_R11_EAC(const void *src
, GLfloat dst
[][4], GLuint n
)
1370 unpack_ETC2_RG11_EAC(const void *src
, GLfloat dst
[][4], GLuint n
)
1376 unpack_ETC2_SIGNED_R11_EAC(const void *src
, GLfloat dst
[][4], GLuint n
)
1382 unpack_ETC2_SIGNED_RG11_EAC(const void *src
, GLfloat dst
[][4], GLuint n
)
1388 unpack_ETC2_RGB8_PUNCHTHROUGH_ALPHA1(const void *src
, GLfloat dst
[][4],
1395 unpack_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1(const void *src
, GLfloat dst
[][4],
1402 unpack_SIGNED_A8(const void *src
, GLfloat dst
[][4], GLuint n
)
1404 const GLbyte
*s
= ((const GLbyte
*) src
);
1406 for (i
= 0; i
< n
; i
++) {
1407 dst
[i
][RCOMP
] = 0.0F
;
1408 dst
[i
][GCOMP
] = 0.0F
;
1409 dst
[i
][BCOMP
] = 0.0F
;
1410 dst
[i
][ACOMP
] = BYTE_TO_FLOAT_TEX( s
[i
] );
1415 unpack_SIGNED_L8(const void *src
, GLfloat dst
[][4], GLuint n
)
1417 const GLbyte
*s
= ((const GLbyte
*) src
);
1419 for (i
= 0; i
< n
; i
++) {
1422 dst
[i
][BCOMP
] = BYTE_TO_FLOAT_TEX( s
[i
] );
1423 dst
[i
][ACOMP
] = 1.0F
;
1428 unpack_SIGNED_AL88(const void *src
, GLfloat dst
[][4], GLuint n
)
1430 const GLshort
*s
= ((const GLshort
*) src
);
1432 for (i
= 0; i
< n
; i
++) {
1435 dst
[i
][BCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] & 0xff) );
1436 dst
[i
][ACOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 8) );
1441 unpack_SIGNED_I8(const void *src
, GLfloat dst
[][4], GLuint n
)
1443 const GLbyte
*s
= ((const GLbyte
*) src
);
1445 for (i
= 0; i
< n
; i
++) {
1449 dst
[i
][ACOMP
] = BYTE_TO_FLOAT_TEX( s
[i
] );
1454 unpack_SIGNED_A16(const void *src
, GLfloat dst
[][4], GLuint n
)
1456 const GLshort
*s
= ((const GLshort
*) src
);
1458 for (i
= 0; i
< n
; i
++) {
1459 dst
[i
][RCOMP
] = 0.0F
;
1460 dst
[i
][GCOMP
] = 0.0F
;
1461 dst
[i
][BCOMP
] = 0.0F
;
1462 dst
[i
][ACOMP
] = SHORT_TO_FLOAT_TEX( s
[i
] );
1467 unpack_SIGNED_L16(const void *src
, GLfloat dst
[][4], GLuint n
)
1469 const GLshort
*s
= ((const GLshort
*) src
);
1471 for (i
= 0; i
< n
; i
++) {
1474 dst
[i
][BCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
] );
1475 dst
[i
][ACOMP
] = 1.0F
;
1480 unpack_SIGNED_AL1616(const void *src
, GLfloat dst
[][4], GLuint n
)
1482 const GLshort
*s
= (const GLshort
*) src
;
1484 for (i
= 0; i
< n
; i
++) {
1487 dst
[i
][BCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*2+0] );
1488 dst
[i
][ACOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*2+1] );
1493 unpack_SIGNED_I16(const void *src
, GLfloat dst
[][4], GLuint n
)
1495 const GLshort
*s
= ((const GLshort
*) src
);
1497 for (i
= 0; i
< n
; i
++) {
1501 dst
[i
][ACOMP
] = SHORT_TO_FLOAT_TEX( s
[i
] );
1506 unpack_RGB9_E5_FLOAT(const void *src
, GLfloat dst
[][4], GLuint n
)
1508 const GLuint
*s
= (const GLuint
*) src
;
1510 for (i
= 0; i
< n
; i
++) {
1511 rgb9e5_to_float3(s
[i
], dst
[i
]);
1512 dst
[i
][ACOMP
] = 1.0F
;
1517 unpack_R11_G11_B10_FLOAT(const void *src
, GLfloat dst
[][4], GLuint n
)
1519 const GLuint
*s
= (const GLuint
*) src
;
1521 for (i
= 0; i
< n
; i
++) {
1522 r11g11b10f_to_float3(s
[i
], dst
[i
]);
1523 dst
[i
][ACOMP
] = 1.0F
;
1528 unpack_XRGB4444_UNORM(const void *src
, GLfloat dst
[][4], GLuint n
)
1530 const GLushort
*s
= ((const GLushort
*) src
);
1532 for (i
= 0; i
< n
; i
++) {
1533 dst
[i
][RCOMP
] = ((s
[i
] >> 8) & 0xf) * (1.0F
/ 15.0F
);
1534 dst
[i
][GCOMP
] = ((s
[i
] >> 4) & 0xf) * (1.0F
/ 15.0F
);
1535 dst
[i
][BCOMP
] = ((s
[i
] ) & 0xf) * (1.0F
/ 15.0F
);
1536 dst
[i
][ACOMP
] = 1.0;
1541 unpack_XRGB1555_UNORM(const void *src
, GLfloat dst
[][4], GLuint n
)
1543 const GLushort
*s
= ((const GLushort
*) src
);
1545 for (i
= 0; i
< n
; i
++) {
1546 dst
[i
][RCOMP
] = ((s
[i
] >> 10) & 0x1f) * (1.0F
/ 31.0F
);
1547 dst
[i
][GCOMP
] = ((s
[i
] >> 5) & 0x1f) * (1.0F
/ 31.0F
);
1548 dst
[i
][BCOMP
] = ((s
[i
] >> 0) & 0x1f) * (1.0F
/ 31.0F
);
1549 dst
[i
][ACOMP
] = 1.0;
1554 unpack_XBGR8888_SNORM(const void *src
, GLfloat dst
[][4], GLuint n
)
1556 const GLuint
*s
= ((const GLuint
*) src
);
1558 for (i
= 0; i
< n
; i
++) {
1559 dst
[i
][RCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] ) );
1560 dst
[i
][GCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 8) );
1561 dst
[i
][BCOMP
] = BYTE_TO_FLOAT_TEX( (GLbyte
) (s
[i
] >> 16) );
1562 dst
[i
][ACOMP
] = 1.0;
1567 unpack_XBGR8888_SRGB(const void *src
, GLfloat dst
[][4], GLuint n
)
1569 const GLuint
*s
= ((const GLuint
*) src
);
1571 for (i
= 0; i
< n
; i
++) {
1572 dst
[i
][RCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] ) & 0xff );
1573 dst
[i
][GCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] >> 8) & 0xff );
1574 dst
[i
][BCOMP
] = _mesa_nonlinear_to_linear( (s
[i
] >> 16) & 0xff );
1575 dst
[i
][ACOMP
] = UBYTE_TO_FLOAT( s
[i
] >> 24 ); /* linear! */
1580 unpack_XBGR8888_UINT(const void *src
, GLfloat dst
[][4], GLuint n
)
1582 const GLbyte
*s
= (const GLbyte
*) src
;
1584 for (i
= 0; i
< n
; i
++) {
1585 dst
[i
][RCOMP
] = s
[i
*4+0];
1586 dst
[i
][GCOMP
] = s
[i
*4+1];
1587 dst
[i
][BCOMP
] = s
[i
*4+2];
1588 dst
[i
][ACOMP
] = 1.0;
1593 unpack_XBGR8888_SINT(const void *src
, GLfloat dst
[][4], GLuint n
)
1595 const GLbyte
*s
= (const GLbyte
*) src
;
1597 for (i
= 0; i
< n
; i
++) {
1598 dst
[i
][RCOMP
] = s
[i
*4+0];
1599 dst
[i
][GCOMP
] = s
[i
*4+1];
1600 dst
[i
][BCOMP
] = s
[i
*4+2];
1601 dst
[i
][ACOMP
] = 1.0;
1606 unpack_XRGB2101010_UNORM(const void *src
, GLfloat dst
[][4], GLuint n
)
1608 const GLuint
*s
= ((const GLuint
*) src
);
1610 for (i
= 0; i
< n
; i
++) {
1611 dst
[i
][RCOMP
] = ((s
[i
] >> 20) & 0x3ff) * (1.0F
/ 1023.0F
);
1612 dst
[i
][GCOMP
] = ((s
[i
] >> 10) & 0x3ff) * (1.0F
/ 1023.0F
);
1613 dst
[i
][BCOMP
] = ((s
[i
] >> 0) & 0x3ff) * (1.0F
/ 1023.0F
);
1614 dst
[i
][ACOMP
] = 1.0;
1619 unpack_XBGR16161616_UNORM(const void *src
, GLfloat dst
[][4], GLuint n
)
1621 const GLushort
*s
= (const GLushort
*) src
;
1623 for (i
= 0; i
< n
; i
++) {
1624 dst
[i
][RCOMP
] = USHORT_TO_FLOAT( s
[i
*4+0] );
1625 dst
[i
][GCOMP
] = USHORT_TO_FLOAT( s
[i
*4+1] );
1626 dst
[i
][BCOMP
] = USHORT_TO_FLOAT( s
[i
*4+2] );
1627 dst
[i
][ACOMP
] = 1.0;
1632 unpack_XBGR16161616_SNORM(const void *src
, GLfloat dst
[][4], GLuint n
)
1634 const GLshort
*s
= (const GLshort
*) src
;
1636 for (i
= 0; i
< n
; i
++) {
1637 dst
[i
][RCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*4+0] );
1638 dst
[i
][GCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*4+1] );
1639 dst
[i
][BCOMP
] = SHORT_TO_FLOAT_TEX( s
[i
*4+2] );
1640 dst
[i
][ACOMP
] = 1.0;
1645 unpack_XBGR16161616_FLOAT(const void *src
, GLfloat dst
[][4], GLuint n
)
1647 const GLshort
*s
= (const GLshort
*) src
;
1649 for (i
= 0; i
< n
; i
++) {
1650 dst
[i
][RCOMP
] = _mesa_half_to_float(s
[i
*4+0]);
1651 dst
[i
][GCOMP
] = _mesa_half_to_float(s
[i
*4+1]);
1652 dst
[i
][BCOMP
] = _mesa_half_to_float(s
[i
*4+2]);
1653 dst
[i
][ACOMP
] = 1.0;
1658 unpack_XBGR16161616_UINT(const void *src
, GLfloat dst
[][4], GLuint n
)
1660 const GLushort
*s
= (const GLushort
*) src
;
1662 for (i
= 0; i
< n
; i
++) {
1663 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1664 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1665 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1666 dst
[i
][ACOMP
] = 1.0;
1671 unpack_XBGR16161616_SINT(const void *src
, GLfloat dst
[][4], GLuint n
)
1673 const GLshort
*s
= (const GLshort
*) src
;
1675 for (i
= 0; i
< n
; i
++) {
1676 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1677 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1678 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1679 dst
[i
][ACOMP
] = 1.0;
1684 unpack_XBGR32323232_FLOAT(const void *src
, GLfloat dst
[][4], GLuint n
)
1686 const GLfloat
*s
= (const GLfloat
*) src
;
1688 for (i
= 0; i
< n
; i
++) {
1689 dst
[i
][RCOMP
] = s
[i
*4+0];
1690 dst
[i
][GCOMP
] = s
[i
*4+1];
1691 dst
[i
][BCOMP
] = s
[i
*4+2];
1692 dst
[i
][ACOMP
] = 1.0;
1697 unpack_XBGR32323232_UINT(const void *src
, GLfloat dst
[][4], GLuint n
)
1699 const GLuint
*s
= (const GLuint
*) src
;
1701 for (i
= 0; i
< n
; i
++) {
1702 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1703 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1704 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1705 dst
[i
][ACOMP
] = 1.0;
1710 unpack_XBGR32323232_SINT(const void *src
, GLfloat dst
[][4], GLuint n
)
1712 const GLint
*s
= (const GLint
*) src
;
1714 for (i
= 0; i
< n
; i
++) {
1715 dst
[i
][RCOMP
] = (GLfloat
) s
[i
*4+0];
1716 dst
[i
][GCOMP
] = (GLfloat
) s
[i
*4+1];
1717 dst
[i
][BCOMP
] = (GLfloat
) s
[i
*4+2];
1718 dst
[i
][ACOMP
] = 1.0;
1724 * Return the unpacker function for the given format.
1726 static unpack_rgba_func
1727 get_unpack_rgba_function(gl_format format
)
1729 static unpack_rgba_func table
[MESA_FORMAT_COUNT
];
1730 static GLboolean initialized
= GL_FALSE
;
1733 table
[MESA_FORMAT_NONE
] = NULL
;
1735 table
[MESA_FORMAT_RGBA8888
] = unpack_RGBA8888
;
1736 table
[MESA_FORMAT_RGBA8888_REV
] = unpack_RGBA8888_REV
;
1737 table
[MESA_FORMAT_ARGB8888
] = unpack_ARGB8888
;
1738 table
[MESA_FORMAT_ARGB8888_REV
] = unpack_ARGB8888_REV
;
1739 table
[MESA_FORMAT_RGBX8888
] = unpack_RGBX8888
;
1740 table
[MESA_FORMAT_RGBX8888_REV
] = unpack_RGBX8888_REV
;
1741 table
[MESA_FORMAT_XRGB8888
] = unpack_XRGB8888
;
1742 table
[MESA_FORMAT_XRGB8888_REV
] = unpack_XRGB8888_REV
;
1743 table
[MESA_FORMAT_RGB888
] = unpack_RGB888
;
1744 table
[MESA_FORMAT_BGR888
] = unpack_BGR888
;
1745 table
[MESA_FORMAT_RGB565
] = unpack_RGB565
;
1746 table
[MESA_FORMAT_RGB565_REV
] = unpack_RGB565_REV
;
1747 table
[MESA_FORMAT_ARGB4444
] = unpack_ARGB4444
;
1748 table
[MESA_FORMAT_ARGB4444_REV
] = unpack_ARGB4444_REV
;
1749 table
[MESA_FORMAT_RGBA5551
] = unpack_RGBA5551
;
1750 table
[MESA_FORMAT_ARGB1555
] = unpack_ARGB1555
;
1751 table
[MESA_FORMAT_ARGB1555_REV
] = unpack_ARGB1555_REV
;
1752 table
[MESA_FORMAT_AL44
] = unpack_AL44
;
1753 table
[MESA_FORMAT_AL88
] = unpack_AL88
;
1754 table
[MESA_FORMAT_AL88_REV
] = unpack_AL88_REV
;
1755 table
[MESA_FORMAT_AL1616
] = unpack_AL1616
;
1756 table
[MESA_FORMAT_AL1616_REV
] = unpack_AL1616_REV
;
1757 table
[MESA_FORMAT_RGB332
] = unpack_RGB332
;
1758 table
[MESA_FORMAT_A8
] = unpack_A8
;
1759 table
[MESA_FORMAT_A16
] = unpack_A16
;
1760 table
[MESA_FORMAT_L8
] = unpack_L8
;
1761 table
[MESA_FORMAT_L16
] = unpack_L16
;
1762 table
[MESA_FORMAT_I8
] = unpack_I8
;
1763 table
[MESA_FORMAT_I16
] = unpack_I16
;
1764 table
[MESA_FORMAT_YCBCR
] = unpack_YCBCR
;
1765 table
[MESA_FORMAT_YCBCR_REV
] = unpack_YCBCR_REV
;
1766 table
[MESA_FORMAT_R8
] = unpack_R8
;
1767 table
[MESA_FORMAT_GR88
] = unpack_GR88
;
1768 table
[MESA_FORMAT_RG88
] = unpack_RG88
;
1769 table
[MESA_FORMAT_R16
] = unpack_R16
;
1770 table
[MESA_FORMAT_GR1616
] = unpack_GR1616
;
1771 table
[MESA_FORMAT_RG1616
] = unpack_RG1616
;
1772 table
[MESA_FORMAT_ARGB2101010
] = unpack_ARGB2101010
;
1773 table
[MESA_FORMAT_ABGR2101010_UINT
] = unpack_ABGR2101010_UINT
;
1774 table
[MESA_FORMAT_Z24_S8
] = unpack_Z24_S8
;
1775 table
[MESA_FORMAT_S8_Z24
] = unpack_S8_Z24
;
1776 table
[MESA_FORMAT_Z16
] = unpack_Z16
;
1777 table
[MESA_FORMAT_X8_Z24
] = unpack_X8_Z24
;
1778 table
[MESA_FORMAT_Z24_X8
] = unpack_Z24_X8
;
1779 table
[MESA_FORMAT_Z32
] = unpack_Z32
;
1780 table
[MESA_FORMAT_S8
] = unpack_S8
;
1781 table
[MESA_FORMAT_SRGB8
] = unpack_SRGB8
;
1782 table
[MESA_FORMAT_SRGBA8
] = unpack_SRGBA8
;
1783 table
[MESA_FORMAT_SARGB8
] = unpack_SARGB8
;
1784 table
[MESA_FORMAT_SL8
] = unpack_SL8
;
1785 table
[MESA_FORMAT_SLA8
] = unpack_SLA8
;
1786 table
[MESA_FORMAT_SRGB_DXT1
] = unpack_SRGB_DXT1
;
1787 table
[MESA_FORMAT_SRGBA_DXT1
] = unpack_SRGBA_DXT1
;
1788 table
[MESA_FORMAT_SRGBA_DXT3
] = unpack_SRGBA_DXT3
;
1789 table
[MESA_FORMAT_SRGBA_DXT5
] = unpack_SRGBA_DXT5
;
1791 table
[MESA_FORMAT_RGB_FXT1
] = unpack_RGB_FXT1
;
1792 table
[MESA_FORMAT_RGBA_FXT1
] = unpack_RGBA_FXT1
;
1793 table
[MESA_FORMAT_RGB_DXT1
] = unpack_RGB_DXT1
;
1794 table
[MESA_FORMAT_RGBA_DXT1
] = unpack_RGBA_DXT1
;
1795 table
[MESA_FORMAT_RGBA_DXT3
] = unpack_RGBA_DXT3
;
1796 table
[MESA_FORMAT_RGBA_DXT5
] = unpack_RGBA_DXT5
;
1798 table
[MESA_FORMAT_RGBA_FLOAT32
] = unpack_RGBA_FLOAT32
;
1799 table
[MESA_FORMAT_RGBA_FLOAT16
] = unpack_RGBA_FLOAT16
;
1800 table
[MESA_FORMAT_RGB_FLOAT32
] = unpack_RGB_FLOAT32
;
1801 table
[MESA_FORMAT_RGB_FLOAT16
] = unpack_RGB_FLOAT16
;
1802 table
[MESA_FORMAT_ALPHA_FLOAT32
] = unpack_ALPHA_FLOAT32
;
1803 table
[MESA_FORMAT_ALPHA_FLOAT16
] = unpack_ALPHA_FLOAT16
;
1804 table
[MESA_FORMAT_LUMINANCE_FLOAT32
] = unpack_LUMINANCE_FLOAT32
;
1805 table
[MESA_FORMAT_LUMINANCE_FLOAT16
] = unpack_LUMINANCE_FLOAT16
;
1806 table
[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT32
] = unpack_LUMINANCE_ALPHA_FLOAT32
;
1807 table
[MESA_FORMAT_LUMINANCE_ALPHA_FLOAT16
] = unpack_LUMINANCE_ALPHA_FLOAT16
;
1808 table
[MESA_FORMAT_INTENSITY_FLOAT32
] = unpack_INTENSITY_FLOAT32
;
1809 table
[MESA_FORMAT_INTENSITY_FLOAT16
] = unpack_INTENSITY_FLOAT16
;
1810 table
[MESA_FORMAT_R_FLOAT32
] = unpack_R_FLOAT32
;
1811 table
[MESA_FORMAT_R_FLOAT16
] = unpack_R_FLOAT16
;
1812 table
[MESA_FORMAT_RG_FLOAT32
] = unpack_RG_FLOAT32
;
1813 table
[MESA_FORMAT_RG_FLOAT16
] = unpack_RG_FLOAT16
;
1815 table
[MESA_FORMAT_RGBA_INT8
] = unpack_RGBA_INT8
;
1816 table
[MESA_FORMAT_RGBA_INT16
] = unpack_RGBA_INT16
;
1817 table
[MESA_FORMAT_RGBA_INT32
] = unpack_RGBA_INT32
;
1818 table
[MESA_FORMAT_RGBA_UINT8
] = unpack_RGBA_UINT8
;
1819 table
[MESA_FORMAT_RGBA_UINT16
] = unpack_RGBA_UINT16
;
1820 table
[MESA_FORMAT_RGBA_UINT32
] = unpack_RGBA_UINT32
;
1822 table
[MESA_FORMAT_DUDV8
] = unpack_DUDV8
;
1823 table
[MESA_FORMAT_SIGNED_R8
] = unpack_SIGNED_R8
;
1824 table
[MESA_FORMAT_SIGNED_RG88_REV
] = unpack_SIGNED_RG88_REV
;
1825 table
[MESA_FORMAT_SIGNED_RGBX8888
] = unpack_SIGNED_RGBX8888
;
1826 table
[MESA_FORMAT_SIGNED_RGBA8888
] = unpack_SIGNED_RGBA8888
;
1827 table
[MESA_FORMAT_SIGNED_RGBA8888_REV
] = unpack_SIGNED_RGBA8888_REV
;
1828 table
[MESA_FORMAT_SIGNED_R16
] = unpack_SIGNED_R16
;
1829 table
[MESA_FORMAT_SIGNED_GR1616
] = unpack_SIGNED_GR1616
;
1830 table
[MESA_FORMAT_SIGNED_RGB_16
] = unpack_SIGNED_RGB_16
;
1831 table
[MESA_FORMAT_SIGNED_RGBA_16
] = unpack_SIGNED_RGBA_16
;
1832 table
[MESA_FORMAT_RGBA_16
] = unpack_RGBA_16
;
1834 table
[MESA_FORMAT_RED_RGTC1
] = unpack_RED_RGTC1
;
1835 table
[MESA_FORMAT_SIGNED_RED_RGTC1
] = unpack_SIGNED_RED_RGTC1
;
1836 table
[MESA_FORMAT_RG_RGTC2
] = unpack_RG_RGTC2
;
1837 table
[MESA_FORMAT_SIGNED_RG_RGTC2
] = unpack_SIGNED_RG_RGTC2
;
1839 table
[MESA_FORMAT_L_LATC1
] = unpack_L_LATC1
;
1840 table
[MESA_FORMAT_SIGNED_L_LATC1
] = unpack_SIGNED_L_LATC1
;
1841 table
[MESA_FORMAT_LA_LATC2
] = unpack_LA_LATC2
;
1842 table
[MESA_FORMAT_SIGNED_LA_LATC2
] = unpack_SIGNED_LA_LATC2
;
1844 table
[MESA_FORMAT_ETC1_RGB8
] = unpack_ETC1_RGB8
;
1845 table
[MESA_FORMAT_ETC2_RGB8
] = unpack_ETC2_RGB8
;
1846 table
[MESA_FORMAT_ETC2_SRGB8
] = unpack_ETC2_SRGB8
;
1847 table
[MESA_FORMAT_ETC2_RGBA8_EAC
] = unpack_ETC2_RGBA8_EAC
;
1848 table
[MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC
] = unpack_ETC2_SRGB8_ALPHA8_EAC
;
1849 table
[MESA_FORMAT_ETC2_R11_EAC
] = unpack_ETC2_R11_EAC
;
1850 table
[MESA_FORMAT_ETC2_RG11_EAC
] = unpack_ETC2_RG11_EAC
;
1851 table
[MESA_FORMAT_ETC2_SIGNED_R11_EAC
] = unpack_ETC2_SIGNED_R11_EAC
;
1852 table
[MESA_FORMAT_ETC2_SIGNED_RG11_EAC
] = unpack_ETC2_SIGNED_RG11_EAC
;
1853 table
[MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
] =
1854 unpack_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
;
1855 table
[MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1
] =
1856 unpack_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1
;
1857 table
[MESA_FORMAT_SIGNED_A8
] = unpack_SIGNED_A8
;
1858 table
[MESA_FORMAT_SIGNED_L8
] = unpack_SIGNED_L8
;
1859 table
[MESA_FORMAT_SIGNED_AL88
] = unpack_SIGNED_AL88
;
1860 table
[MESA_FORMAT_SIGNED_I8
] = unpack_SIGNED_I8
;
1861 table
[MESA_FORMAT_SIGNED_A16
] = unpack_SIGNED_A16
;
1862 table
[MESA_FORMAT_SIGNED_L16
] = unpack_SIGNED_L16
;
1863 table
[MESA_FORMAT_SIGNED_AL1616
] = unpack_SIGNED_AL1616
;
1864 table
[MESA_FORMAT_SIGNED_I16
] = unpack_SIGNED_I16
;
1866 table
[MESA_FORMAT_RGB9_E5_FLOAT
] = unpack_RGB9_E5_FLOAT
;
1867 table
[MESA_FORMAT_R11_G11_B10_FLOAT
] = unpack_R11_G11_B10_FLOAT
;
1869 table
[MESA_FORMAT_Z32_FLOAT
] = unpack_Z32_FLOAT
;
1870 table
[MESA_FORMAT_Z32_FLOAT_X24S8
] = unpack_Z32_FLOAT_X24S8
;
1872 table
[MESA_FORMAT_XRGB4444_UNORM
] = unpack_XRGB4444_UNORM
;
1873 table
[MESA_FORMAT_XRGB1555_UNORM
] = unpack_XRGB1555_UNORM
;
1874 table
[MESA_FORMAT_XBGR8888_SNORM
] = unpack_XBGR8888_SNORM
;
1875 table
[MESA_FORMAT_XBGR8888_SRGB
] = unpack_XBGR8888_SRGB
;
1876 table
[MESA_FORMAT_XBGR8888_UINT
] = unpack_XBGR8888_UINT
;
1877 table
[MESA_FORMAT_XBGR8888_SINT
] = unpack_XBGR8888_SINT
;
1878 table
[MESA_FORMAT_XRGB2101010_UNORM
] = unpack_XRGB2101010_UNORM
;
1879 table
[MESA_FORMAT_XBGR16161616_UNORM
] = unpack_XBGR16161616_UNORM
;
1880 table
[MESA_FORMAT_XBGR16161616_SNORM
] = unpack_XBGR16161616_SNORM
;
1881 table
[MESA_FORMAT_XBGR16161616_FLOAT
] = unpack_XBGR16161616_FLOAT
;
1882 table
[MESA_FORMAT_XBGR16161616_UINT
] = unpack_XBGR16161616_UINT
;
1883 table
[MESA_FORMAT_XBGR16161616_SINT
] = unpack_XBGR16161616_SINT
;
1884 table
[MESA_FORMAT_XBGR32323232_FLOAT
] = unpack_XBGR32323232_FLOAT
;
1885 table
[MESA_FORMAT_XBGR32323232_UINT
] = unpack_XBGR32323232_UINT
;
1886 table
[MESA_FORMAT_XBGR32323232_SINT
] = unpack_XBGR32323232_SINT
;
1888 initialized
= GL_TRUE
;
1891 if (table
[format
] == NULL
) {
1892 _mesa_problem(NULL
, "unsupported unpack for format %s",
1893 _mesa_get_format_name(format
));
1896 return table
[format
];
1901 * Unpack rgba colors, returning as GLfloat values.
1904 _mesa_unpack_rgba_row(gl_format format
, GLuint n
,
1905 const void *src
, GLfloat dst
[][4])
1907 unpack_rgba_func unpack
= get_unpack_rgba_function(format
);
1908 unpack(src
, dst
, n
);
1912 /**********************************************************************/
1913 /* Unpack, returning GLubyte colors */
1914 /**********************************************************************/
1918 unpack_ubyte_RGBA8888(const void *src
, GLubyte dst
[][4], GLuint n
)
1920 const GLuint
*s
= ((const GLuint
*) src
);
1922 for (i
= 0; i
< n
; i
++) {
1923 dst
[i
][RCOMP
] = (s
[i
] >> 24);
1924 dst
[i
][GCOMP
] = (s
[i
] >> 16) & 0xff;
1925 dst
[i
][BCOMP
] = (s
[i
] >> 8) & 0xff;
1926 dst
[i
][ACOMP
] = (s
[i
] ) & 0xff;
1931 unpack_ubyte_RGBA8888_REV(const void *src
, GLubyte dst
[][4], GLuint n
)
1933 const GLuint
*s
= ((const GLuint
*) src
);
1935 for (i
= 0; i
< n
; i
++) {
1936 dst
[i
][RCOMP
] = (s
[i
] ) & 0xff;
1937 dst
[i
][GCOMP
] = (s
[i
] >> 8) & 0xff;
1938 dst
[i
][BCOMP
] = (s
[i
] >> 16) & 0xff;
1939 dst
[i
][ACOMP
] = (s
[i
] >> 24);
1944 unpack_ubyte_ARGB8888(const void *src
, GLubyte dst
[][4], GLuint n
)
1946 const GLuint
*s
= ((const GLuint
*) src
);
1948 for (i
= 0; i
< n
; i
++) {
1949 dst
[i
][RCOMP
] = (s
[i
] >> 16) & 0xff;
1950 dst
[i
][GCOMP
] = (s
[i
] >> 8) & 0xff;
1951 dst
[i
][BCOMP
] = (s
[i
] ) & 0xff;
1952 dst
[i
][ACOMP
] = (s
[i
] >> 24);
1957 unpack_ubyte_ARGB8888_REV(const void *src
, GLubyte dst
[][4], GLuint n
)
1959 const GLuint
*s
= ((const GLuint
*) src
);
1961 for (i
= 0; i
< n
; i
++) {
1962 dst
[i
][RCOMP
] = (s
[i
] >> 8) & 0xff;
1963 dst
[i
][GCOMP
] = (s
[i
] >> 16) & 0xff;
1964 dst
[i
][BCOMP
] = (s
[i
] >> 24);
1965 dst
[i
][ACOMP
] = (s
[i
] ) & 0xff;
1970 unpack_ubyte_RGBX8888(const void *src
, GLubyte dst
[][4], GLuint n
)
1972 const GLuint
*s
= ((const GLuint
*) src
);
1974 for (i
= 0; i
< n
; i
++) {
1975 dst
[i
][RCOMP
] = (s
[i
] >> 24);
1976 dst
[i
][GCOMP
] = (s
[i
] >> 16) & 0xff;
1977 dst
[i
][BCOMP
] = (s
[i
] >> 8) & 0xff;
1978 dst
[i
][ACOMP
] = 0xff;
1983 unpack_ubyte_RGBX8888_REV(const void *src
, GLubyte dst
[][4], GLuint n
)
1985 const GLuint
*s
= ((const GLuint
*) src
);
1987 for (i
= 0; i
< n
; i
++) {
1988 dst
[i
][RCOMP
] = (s
[i
] ) & 0xff;
1989 dst
[i
][GCOMP
] = (s
[i
] >> 8) & 0xff;
1990 dst
[i
][BCOMP
] = (s
[i
] >> 16) & 0xff;
1991 dst
[i
][ACOMP
] = 0xff;
1996 unpack_ubyte_XRGB8888(const void *src
, GLubyte dst
[][4], GLuint n
)
1998 const GLuint
*s
= ((const GLuint
*) src
);
2000 for (i
= 0; i
< n
; i
++) {
2001 dst
[i
][RCOMP
] = (s
[i
] >> 16) & 0xff;
2002 dst
[i
][GCOMP
] = (s
[i
] >> 8) & 0xff;
2003 dst
[i
][BCOMP
] = (s
[i
] ) & 0xff;
2004 dst
[i
][ACOMP
] = 0xff;
2009 unpack_ubyte_XRGB8888_REV(const void *src
, GLubyte dst
[][4], GLuint n
)
2011 const GLuint
*s
= ((const GLuint
*) src
);
2013 for (i
= 0; i
< n
; i
++) {
2014 dst
[i
][RCOMP
] = (s
[i
] >> 8) & 0xff;
2015 dst
[i
][GCOMP
] = (s
[i
] >> 16) & 0xff;
2016 dst
[i
][BCOMP
] = (s
[i
] >> 24);
2017 dst
[i
][ACOMP
] = 0xff;
2022 unpack_ubyte_RGB888(const void *src
, GLubyte dst
[][4], GLuint n
)
2024 const GLubyte
*s
= (const GLubyte
*) src
;
2026 for (i
= 0; i
< n
; i
++) {
2027 dst
[i
][RCOMP
] = s
[i
*3+2];
2028 dst
[i
][GCOMP
] = s
[i
*3+1];
2029 dst
[i
][BCOMP
] = s
[i
*3+0];
2030 dst
[i
][ACOMP
] = 0xff;
2035 unpack_ubyte_BGR888(const void *src
, GLubyte dst
[][4], GLuint n
)
2037 const GLubyte
*s
= (const GLubyte
*) src
;
2039 for (i
= 0; i
< n
; i
++) {
2040 dst
[i
][RCOMP
] = s
[i
*3+0];
2041 dst
[i
][GCOMP
] = s
[i
*3+1];
2042 dst
[i
][BCOMP
] = s
[i
*3+2];
2043 dst
[i
][ACOMP
] = 0xff;
2048 unpack_ubyte_RGB565(const void *src
, GLubyte dst
[][4], GLuint n
)
2050 const GLushort
*s
= ((const GLushort
*) src
);
2052 for (i
= 0; i
< n
; i
++) {
2053 dst
[i
][RCOMP
] = EXPAND_5_8((s
[i
] >> 11) & 0x1f);
2054 dst
[i
][GCOMP
] = EXPAND_6_8((s
[i
] >> 5 ) & 0x3f);
2055 dst
[i
][BCOMP
] = EXPAND_5_8( s
[i
] & 0x1f);
2056 dst
[i
][ACOMP
] = 0xff;
2061 unpack_ubyte_RGB565_REV(const void *src
, GLubyte dst
[][4], GLuint n
)
2063 const GLushort
*s
= ((const GLushort
*) src
);
2065 for (i
= 0; i
< n
; i
++) {
2066 GLuint t
= (s
[i
] >> 8) | (s
[i
] << 8); /* byte swap */
2067 dst
[i
][RCOMP
] = EXPAND_5_8((t
>> 11) & 0x1f);
2068 dst
[i
][GCOMP
] = EXPAND_6_8((t
>> 5 ) & 0x3f);
2069 dst
[i
][BCOMP
] = EXPAND_5_8( t
& 0x1f);
2070 dst
[i
][ACOMP
] = 0xff;
2075 unpack_ubyte_ARGB4444(const void *src
, GLubyte dst
[][4], GLuint n
)
2077 const GLushort
*s
= ((const GLushort
*) src
);
2079 for (i
= 0; i
< n
; i
++) {
2080 dst
[i
][RCOMP
] = EXPAND_4_8((s
[i
] >> 8) & 0xf);
2081 dst
[i
][GCOMP
] = EXPAND_4_8((s
[i
] >> 4) & 0xf);
2082 dst
[i
][BCOMP
] = EXPAND_4_8((s
[i
] ) & 0xf);
2083 dst
[i
][ACOMP
] = EXPAND_4_8((s
[i
] >> 12) & 0xf);
2088 unpack_ubyte_ARGB4444_REV(const void *src
, GLubyte dst
[][4], GLuint n
)
2090 const GLushort
*s
= ((const GLushort
*) src
);
2092 for (i
= 0; i
< n
; i
++) {
2093 dst
[i
][RCOMP
] = EXPAND_4_8((s
[i
] ) & 0xf);
2094 dst
[i
][GCOMP
] = EXPAND_4_8((s
[i
] >> 12) & 0xf);
2095 dst
[i
][BCOMP
] = EXPAND_4_8((s
[i
] >> 8) & 0xf);
2096 dst
[i
][ACOMP
] = EXPAND_4_8((s
[i
] >> 4) & 0xf);
2101 unpack_ubyte_RGBA5551(const void *src
, GLubyte dst
[][4], GLuint n
)
2103 const GLushort
*s
= ((const GLushort
*) src
);
2105 for (i
= 0; i
< n
; i
++) {
2106 dst
[i
][RCOMP
] = EXPAND_5_8((s
[i
] >> 11) & 0x1f);
2107 dst
[i
][GCOMP
] = EXPAND_5_8((s
[i
] >> 6) & 0x1f);
2108 dst
[i
][BCOMP
] = EXPAND_5_8((s
[i
] >> 1) & 0x1f);
2109 dst
[i
][ACOMP
] = EXPAND_1_8((s
[i
] ) & 0x01);
2114 unpack_ubyte_ARGB1555(const void *src
, GLubyte dst
[][4], GLuint n
)
2116 const GLushort
*s
= ((const GLushort
*) src
);
2118 for (i
= 0; i
< n
; i
++) {
2119 dst
[i
][RCOMP
] = EXPAND_5_8((s
[i
] >> 10) & 0x1f);
2120 dst
[i
][GCOMP
] = EXPAND_5_8((s
[i
] >> 5) & 0x1f);
2121 dst
[i
][BCOMP
] = EXPAND_5_8((s
[i
] >> 0) & 0x1f);
2122 dst
[i
][ACOMP
] = EXPAND_1_8((s
[i
] >> 15) & 0x01);
2127 unpack_ubyte_ARGB1555_REV(const void *src
, GLubyte dst
[][4], GLuint n
)
2129 const GLushort
*s
= ((const GLushort
*) src
);
2131 for (i
= 0; i
< n
; i
++) {
2132 GLushort tmp
= (s
[i
] << 8) | (s
[i
] >> 8); /* byteswap */
2133 dst
[i
][RCOMP
] = EXPAND_5_8((tmp
>> 10) & 0x1f);
2134 dst
[i
][GCOMP
] = EXPAND_5_8((tmp
>> 5) & 0x1f);
2135 dst
[i
][BCOMP
] = EXPAND_5_8((tmp
>> 0) & 0x1f);
2136 dst
[i
][ACOMP
] = EXPAND_1_8((tmp
>> 15) & 0x01);
2141 unpack_ubyte_AL44(const void *src
, GLubyte dst
[][4], GLuint n
)
2143 const GLubyte
*s
= ((const GLubyte
*) src
);
2145 for (i
= 0; i
< n
; i
++) {
2148 dst
[i
][BCOMP
] = EXPAND_4_8(s
[i
] & 0xf);
2149 dst
[i
][ACOMP
] = EXPAND_4_8(s
[i
] >> 4);
2154 unpack_ubyte_AL88(const void *src
, GLubyte dst
[][4], GLuint n
)
2156 const GLushort
*s
= ((const GLushort
*) src
);
2158 for (i
= 0; i
< n
; i
++) {
2161 dst
[i
][BCOMP
] = EXPAND_4_8(s
[i
] & 0xff);
2162 dst
[i
][ACOMP
] = EXPAND_4_8(s
[i
] >> 8);
2167 unpack_ubyte_AL88_REV(const void *src
, GLubyte dst
[][4], GLuint n
)
2169 const GLushort
*s
= ((const GLushort
*) src
);
2171 for (i
= 0; i
< n
; i
++) {
2174 dst
[i
][BCOMP
] = EXPAND_4_8(s
[i
] >> 8);
2175 dst
[i
][ACOMP
] = EXPAND_4_8(s
[i
] & 0xff);
2180 unpack_ubyte_RGB332(const void *src
, GLubyte dst
[][4], GLuint n
)
2182 const GLubyte
*s
= ((const GLubyte
*) src
);
2184 for (i
= 0; i
< n
; i
++) {
2185 dst
[i
][RCOMP
] = EXPAND_3_8((s
[i
] >> 5) & 0x7);
2186 dst
[i
][GCOMP
] = EXPAND_3_8((s
[i
] >> 2) & 0x7);
2187 dst
[i
][BCOMP
] = EXPAND_2_8((s
[i
] ) & 0x3);
2188 dst
[i
][ACOMP
] = 0xff;
2193 unpack_ubyte_A8(const void *src
, GLubyte dst
[][4], GLuint n
)
2195 const GLubyte
*s
= ((const GLubyte
*) src
);
2197 for (i
= 0; i
< n
; i
++) {
2201 dst
[i
][ACOMP
] = s
[i
];
2206 unpack_ubyte_L8(const void *src
, GLubyte dst
[][4], GLuint n
)
2208 const GLubyte
*s
= ((const GLubyte
*) src
);
2210 for (i
= 0; i
< n
; i
++) {
2213 dst
[i
][BCOMP
] = s
[i
];
2214 dst
[i
][ACOMP
] = 0xff;
2220 unpack_ubyte_I8(const void *src
, GLubyte dst
[][4], GLuint n
)
2222 const GLubyte
*s
= ((const GLubyte
*) src
);
2224 for (i
= 0; i
< n
; i
++) {
2228 dst
[i
][ACOMP
] = s
[i
];
2233 unpack_ubyte_R8(const void *src
, GLubyte dst
[][4], GLuint n
)
2235 const GLubyte
*s
= ((const GLubyte
*) src
);
2237 for (i
= 0; i
< n
; i
++) {
2246 unpack_ubyte_GR88(const void *src
, GLubyte dst
[][4], GLuint n
)
2248 const GLushort
*s
= ((const GLushort
*) src
);
2250 for (i
= 0; i
< n
; i
++) {
2251 dst
[i
][RCOMP
] = s
[i
] & 0xff;
2252 dst
[i
][GCOMP
] = s
[i
] >> 8;
2254 dst
[i
][ACOMP
] = 0xff;
2259 unpack_ubyte_RG88(const void *src
, GLubyte dst
[][4], GLuint n
)
2261 const GLushort
*s
= ((const GLushort
*) src
);
2263 for (i
= 0; i
< n
; i
++) {
2264 dst
[i
][RCOMP
] = s
[i
] >> 8;
2265 dst
[i
][GCOMP
] = s
[i
] & 0xff;
2267 dst
[i
][ACOMP
] = 0xff;
2273 * Unpack rgba colors, returning as GLubyte values. This should usually
2274 * only be used for unpacking formats that use 8 bits or less per channel.
2277 _mesa_unpack_ubyte_rgba_row(gl_format format
, GLuint n
,
2278 const void *src
, GLubyte dst
[][4])
2281 case MESA_FORMAT_RGBA8888
:
2282 unpack_ubyte_RGBA8888(src
, dst
, n
);
2284 case MESA_FORMAT_RGBA8888_REV
:
2285 unpack_ubyte_RGBA8888_REV(src
, dst
, n
);
2287 case MESA_FORMAT_ARGB8888
:
2288 unpack_ubyte_ARGB8888(src
, dst
, n
);
2290 case MESA_FORMAT_ARGB8888_REV
:
2291 unpack_ubyte_ARGB8888_REV(src
, dst
, n
);
2293 case MESA_FORMAT_RGBX8888
:
2294 unpack_ubyte_RGBX8888(src
, dst
, n
);
2296 case MESA_FORMAT_RGBX8888_REV
:
2297 unpack_ubyte_RGBX8888_REV(src
, dst
, n
);
2299 case MESA_FORMAT_XRGB8888
:
2300 unpack_ubyte_XRGB8888(src
, dst
, n
);
2302 case MESA_FORMAT_XRGB8888_REV
:
2303 unpack_ubyte_XRGB8888_REV(src
, dst
, n
);
2305 case MESA_FORMAT_RGB888
:
2306 unpack_ubyte_RGB888(src
, dst
, n
);
2308 case MESA_FORMAT_BGR888
:
2309 unpack_ubyte_BGR888(src
, dst
, n
);
2311 case MESA_FORMAT_RGB565
:
2312 unpack_ubyte_RGB565(src
, dst
, n
);
2314 case MESA_FORMAT_RGB565_REV
:
2315 unpack_ubyte_RGB565_REV(src
, dst
, n
);
2317 case MESA_FORMAT_ARGB4444
:
2318 unpack_ubyte_ARGB4444(src
, dst
, n
);
2320 case MESA_FORMAT_ARGB4444_REV
:
2321 unpack_ubyte_ARGB4444_REV(src
, dst
, n
);
2323 case MESA_FORMAT_RGBA5551
:
2324 unpack_ubyte_RGBA5551(src
, dst
, n
);
2326 case MESA_FORMAT_ARGB1555
:
2327 unpack_ubyte_ARGB1555(src
, dst
, n
);
2329 case MESA_FORMAT_ARGB1555_REV
:
2330 unpack_ubyte_ARGB1555_REV(src
, dst
, n
);
2332 case MESA_FORMAT_AL44
:
2333 unpack_ubyte_AL44(src
, dst
, n
);
2335 case MESA_FORMAT_AL88
:
2336 unpack_ubyte_AL88(src
, dst
, n
);
2338 case MESA_FORMAT_AL88_REV
:
2339 unpack_ubyte_AL88_REV(src
, dst
, n
);
2341 case MESA_FORMAT_RGB332
:
2342 unpack_ubyte_RGB332(src
, dst
, n
);
2344 case MESA_FORMAT_A8
:
2345 unpack_ubyte_A8(src
, dst
, n
);
2347 case MESA_FORMAT_L8
:
2348 unpack_ubyte_L8(src
, dst
, n
);
2350 case MESA_FORMAT_I8
:
2351 unpack_ubyte_I8(src
, dst
, n
);
2353 case MESA_FORMAT_R8
:
2354 unpack_ubyte_R8(src
, dst
, n
);
2356 case MESA_FORMAT_GR88
:
2357 unpack_ubyte_GR88(src
, dst
, n
);
2359 case MESA_FORMAT_RG88
:
2360 unpack_ubyte_RG88(src
, dst
, n
);
2363 /* get float values, convert to ubyte */
2365 GLfloat
*tmp
= malloc(n
* 4 * sizeof(GLfloat
));
2368 _mesa_unpack_rgba_row(format
, n
, src
, (GLfloat (*)[4]) tmp
);
2369 for (i
= 0; i
< n
; i
++) {
2370 UNCLAMPED_FLOAT_TO_UBYTE(dst
[i
][0], tmp
[i
*4+0]);
2371 UNCLAMPED_FLOAT_TO_UBYTE(dst
[i
][1], tmp
[i
*4+1]);
2372 UNCLAMPED_FLOAT_TO_UBYTE(dst
[i
][2], tmp
[i
*4+2]);
2373 UNCLAMPED_FLOAT_TO_UBYTE(dst
[i
][3], tmp
[i
*4+3]);
2383 /**********************************************************************/
2384 /* Unpack, returning GLuint colors */
2385 /**********************************************************************/
2388 unpack_int_rgba_RGBA_UINT32(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2390 memcpy(dst
, src
, n
* 4 * sizeof(GLuint
));
2394 unpack_int_rgba_RGBA_UINT16(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2398 for (i
= 0; i
< n
; i
++) {
2399 dst
[i
][0] = src
[i
* 4 + 0];
2400 dst
[i
][1] = src
[i
* 4 + 1];
2401 dst
[i
][2] = src
[i
* 4 + 2];
2402 dst
[i
][3] = src
[i
* 4 + 3];
2407 unpack_int_rgba_RGBA_INT16(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2411 for (i
= 0; i
< n
; i
++) {
2412 dst
[i
][0] = src
[i
* 4 + 0];
2413 dst
[i
][1] = src
[i
* 4 + 1];
2414 dst
[i
][2] = src
[i
* 4 + 2];
2415 dst
[i
][3] = src
[i
* 4 + 3];
2420 unpack_int_rgba_RGBA_UINT8(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2424 for (i
= 0; i
< n
; i
++) {
2425 dst
[i
][0] = src
[i
* 4 + 0];
2426 dst
[i
][1] = src
[i
* 4 + 1];
2427 dst
[i
][2] = src
[i
* 4 + 2];
2428 dst
[i
][3] = src
[i
* 4 + 3];
2433 unpack_int_rgba_RGBA_INT8(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2437 for (i
= 0; i
< n
; i
++) {
2438 dst
[i
][0] = src
[i
* 4 + 0];
2439 dst
[i
][1] = src
[i
* 4 + 1];
2440 dst
[i
][2] = src
[i
* 4 + 2];
2441 dst
[i
][3] = src
[i
* 4 + 3];
2446 unpack_int_rgba_ARGB8888(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2450 for (i
= 0; i
< n
; i
++) {
2451 dst
[i
][RCOMP
] = (GLubyte
) src
[i
* 4 + 2];
2452 dst
[i
][GCOMP
] = (GLubyte
) src
[i
* 4 + 1];
2453 dst
[i
][BCOMP
] = (GLubyte
) src
[i
* 4 + 0];
2454 dst
[i
][ACOMP
] = (GLubyte
) src
[i
* 4 + 3];
2459 unpack_int_rgba_XRGB8888(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2463 for (i
= 0; i
< n
; i
++) {
2464 dst
[i
][RCOMP
] = (GLubyte
) src
[i
* 4 + 2];
2465 dst
[i
][GCOMP
] = (GLubyte
) src
[i
* 4 + 1];
2466 dst
[i
][BCOMP
] = (GLubyte
) src
[i
* 4 + 0];
2467 dst
[i
][ACOMP
] = (GLubyte
) 0xff;
2472 unpack_int_rgba_RGB_UINT32(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2476 for (i
= 0; i
< n
; i
++) {
2477 dst
[i
][0] = src
[i
* 3 + 0];
2478 dst
[i
][1] = src
[i
* 3 + 1];
2479 dst
[i
][2] = src
[i
* 3 + 2];
2485 unpack_int_rgba_RGB_UINT16(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2489 for (i
= 0; i
< n
; i
++) {
2490 dst
[i
][0] = src
[i
* 3 + 0];
2491 dst
[i
][1] = src
[i
* 3 + 1];
2492 dst
[i
][2] = src
[i
* 3 + 2];
2498 unpack_int_rgba_RGB_INT16(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2502 for (i
= 0; i
< n
; i
++) {
2503 dst
[i
][0] = src
[i
* 3 + 0];
2504 dst
[i
][1] = src
[i
* 3 + 1];
2505 dst
[i
][2] = src
[i
* 3 + 2];
2511 unpack_int_rgba_RGB_UINT8(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2515 for (i
= 0; i
< n
; i
++) {
2516 dst
[i
][0] = src
[i
* 3 + 0];
2517 dst
[i
][1] = src
[i
* 3 + 1];
2518 dst
[i
][2] = src
[i
* 3 + 2];
2524 unpack_int_rgba_RGB_INT8(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2528 for (i
= 0; i
< n
; i
++) {
2529 dst
[i
][0] = src
[i
* 3 + 0];
2530 dst
[i
][1] = src
[i
* 3 + 1];
2531 dst
[i
][2] = src
[i
* 3 + 2];
2537 unpack_int_rgba_RG_UINT32(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2541 for (i
= 0; i
< n
; i
++) {
2542 dst
[i
][0] = src
[i
* 2 + 0];
2543 dst
[i
][1] = src
[i
* 2 + 1];
2550 unpack_int_rgba_RG_UINT16(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2554 for (i
= 0; i
< n
; i
++) {
2555 dst
[i
][0] = src
[i
* 2 + 0];
2556 dst
[i
][1] = src
[i
* 2 + 1];
2563 unpack_int_rgba_RG_INT16(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2567 for (i
= 0; i
< n
; i
++) {
2568 dst
[i
][0] = src
[i
* 2 + 0];
2569 dst
[i
][1] = src
[i
* 2 + 1];
2576 unpack_int_rgba_RG_UINT8(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2580 for (i
= 0; i
< n
; i
++) {
2581 dst
[i
][0] = src
[i
* 2 + 0];
2582 dst
[i
][1] = src
[i
* 2 + 1];
2589 unpack_int_rgba_RG_INT8(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2593 for (i
= 0; i
< n
; i
++) {
2594 dst
[i
][0] = src
[i
* 2 + 0];
2595 dst
[i
][1] = src
[i
* 2 + 1];
2602 unpack_int_rgba_R_UINT32(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2606 for (i
= 0; i
< n
; i
++) {
2615 unpack_int_rgba_R_UINT16(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2619 for (i
= 0; i
< n
; i
++) {
2628 unpack_int_rgba_R_INT16(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2632 for (i
= 0; i
< n
; i
++) {
2641 unpack_int_rgba_R_UINT8(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2645 for (i
= 0; i
< n
; i
++) {
2654 unpack_int_rgba_R_INT8(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2658 for (i
= 0; i
< n
; i
++) {
2667 unpack_int_rgba_ALPHA_UINT32(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2671 for (i
= 0; i
< n
; i
++) {
2672 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = 0;
2678 unpack_int_rgba_ALPHA_UINT16(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2682 for (i
= 0; i
< n
; i
++) {
2683 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = 0;
2689 unpack_int_rgba_ALPHA_INT16(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2693 for (i
= 0; i
< n
; i
++) {
2694 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = 0;
2700 unpack_int_rgba_ALPHA_UINT8(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2704 for (i
= 0; i
< n
; i
++) {
2705 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = 0;
2711 unpack_int_rgba_ALPHA_INT8(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2715 for (i
= 0; i
< n
; i
++) {
2716 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = 0;
2722 unpack_int_rgba_LUMINANCE_UINT32(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2726 for (i
= 0; i
< n
; i
++) {
2727 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
];
2733 unpack_int_rgba_LUMINANCE_UINT16(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2737 for (i
= 0; i
< n
; i
++) {
2738 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
];
2744 unpack_int_rgba_LUMINANCE_INT16(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2748 for (i
= 0; i
< n
; i
++) {
2749 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
];
2755 unpack_int_rgba_LUMINANCE_UINT8(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2759 for (i
= 0; i
< n
; i
++) {
2760 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
];
2766 unpack_int_rgba_LUMINANCE_INT8(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2770 for (i
= 0; i
< n
; i
++) {
2771 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
];
2778 unpack_int_rgba_LUMINANCE_ALPHA_UINT32(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2782 for (i
= 0; i
< n
; i
++) {
2783 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
* 2 + 0];
2784 dst
[i
][3] = src
[i
* 2 + 1];
2789 unpack_int_rgba_LUMINANCE_ALPHA_UINT16(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2793 for (i
= 0; i
< n
; i
++) {
2794 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
* 2 + 0];
2795 dst
[i
][3] = src
[i
* 2 + 1];
2800 unpack_int_rgba_LUMINANCE_ALPHA_INT16(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2804 for (i
= 0; i
< n
; i
++) {
2805 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
* 2 + 0];
2806 dst
[i
][3] = src
[i
* 2 + 1];
2811 unpack_int_rgba_LUMINANCE_ALPHA_UINT8(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2815 for (i
= 0; i
< n
; i
++) {
2816 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
* 2 + 0];
2817 dst
[i
][3] = src
[i
* 2 + 1];
2822 unpack_int_rgba_LUMINANCE_ALPHA_INT8(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2826 for (i
= 0; i
< n
; i
++) {
2827 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = src
[i
* 2 + 0];
2828 dst
[i
][3] = src
[i
* 2 + 1];
2833 unpack_int_rgba_INTENSITY_UINT32(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2837 for (i
= 0; i
< n
; i
++) {
2838 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = dst
[i
][3] = src
[i
];
2843 unpack_int_rgba_INTENSITY_UINT16(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2847 for (i
= 0; i
< n
; i
++) {
2848 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = dst
[i
][3] = src
[i
];
2853 unpack_int_rgba_INTENSITY_INT16(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2857 for (i
= 0; i
< n
; i
++) {
2858 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = dst
[i
][3] = src
[i
];
2863 unpack_int_rgba_INTENSITY_UINT8(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2867 for (i
= 0; i
< n
; i
++) {
2868 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = dst
[i
][3] = src
[i
];
2873 unpack_int_rgba_INTENSITY_INT8(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2877 for (i
= 0; i
< n
; i
++) {
2878 dst
[i
][0] = dst
[i
][1] = dst
[i
][2] = dst
[i
][3] = src
[i
];
2883 unpack_int_rgba_ARGB2101010_UINT(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2887 for (i
= 0; i
< n
; i
++) {
2888 GLuint tmp
= src
[i
];
2889 dst
[i
][0] = (tmp
>> 20) & 0x3ff;
2890 dst
[i
][1] = (tmp
>> 10) & 0x3ff;
2891 dst
[i
][2] = (tmp
>> 0) & 0x3ff;
2892 dst
[i
][3] = (tmp
>> 30) & 0x3;
2897 unpack_int_rgba_ABGR2101010_UINT(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2901 for (i
= 0; i
< n
; i
++) {
2902 GLuint tmp
= src
[i
];
2903 dst
[i
][0] = (tmp
>> 0) & 0x3ff;
2904 dst
[i
][1] = (tmp
>> 10) & 0x3ff;
2905 dst
[i
][2] = (tmp
>> 20) & 0x3ff;
2906 dst
[i
][3] = (tmp
>> 30) & 0x3;
2911 unpack_int_rgba_ARGB2101010(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2915 for (i
= 0; i
< n
; i
++) {
2916 GLuint tmp
= src
[i
];
2917 dst
[i
][0] = (tmp
>> 20) & 0x3ff;
2918 dst
[i
][1] = (tmp
>> 10) & 0x3ff;
2919 dst
[i
][2] = (tmp
>> 0) & 0x3ff;
2920 dst
[i
][3] = (tmp
>> 30) & 0x3;
2925 unpack_int_rgba_XBGR8888_UINT(const GLubyte
*src
, GLuint dst
[][4], GLuint n
)
2929 for (i
= 0; i
< n
; i
++) {
2930 dst
[i
][0] = src
[i
* 4 + 0];
2931 dst
[i
][1] = src
[i
* 4 + 1];
2932 dst
[i
][2] = src
[i
* 4 + 2];
2938 unpack_int_rgba_XBGR8888_SINT(const GLbyte
*src
, GLuint dst
[][4], GLuint n
)
2942 for (i
= 0; i
< n
; i
++) {
2943 dst
[i
][0] = src
[i
* 4 + 0];
2944 dst
[i
][1] = src
[i
* 4 + 1];
2945 dst
[i
][2] = src
[i
* 4 + 2];
2951 unpack_int_rgba_XBGR16161616_UINT(const GLushort
*src
, GLuint dst
[][4], GLuint n
)
2955 for (i
= 0; i
< n
; i
++) {
2956 dst
[i
][0] = src
[i
* 4 + 0];
2957 dst
[i
][1] = src
[i
* 4 + 1];
2958 dst
[i
][2] = src
[i
* 4 + 2];
2964 unpack_int_rgba_XBGR16161616_SINT(const GLshort
*src
, GLuint dst
[][4], GLuint n
)
2968 for (i
= 0; i
< n
; i
++) {
2969 dst
[i
][0] = src
[i
* 4 + 0];
2970 dst
[i
][1] = src
[i
* 4 + 1];
2971 dst
[i
][2] = src
[i
* 4 + 2];
2977 unpack_int_rgba_XBGR32323232_UINT(const GLuint
*src
, GLuint dst
[][4], GLuint n
)
2981 for (i
= 0; i
< n
; i
++) {
2982 dst
[i
][0] = src
[i
* 4 + 0];
2983 dst
[i
][1] = src
[i
* 4 + 1];
2984 dst
[i
][2] = src
[i
* 4 + 2];
2990 _mesa_unpack_uint_rgba_row(gl_format format
, GLuint n
,
2991 const void *src
, GLuint dst
[][4])
2994 /* Since there won't be any sign extension happening, there's no need to
2995 * make separate paths for 32-bit-to-32-bit integer unpack.
2997 case MESA_FORMAT_RGBA_UINT32
:
2998 case MESA_FORMAT_RGBA_INT32
:
2999 unpack_int_rgba_RGBA_UINT32(src
, dst
, n
);
3002 case MESA_FORMAT_RGBA_UINT16
:
3003 unpack_int_rgba_RGBA_UINT16(src
, dst
, n
);
3005 case MESA_FORMAT_RGBA_INT16
:
3006 unpack_int_rgba_RGBA_INT16(src
, dst
, n
);
3009 case MESA_FORMAT_RGBA_UINT8
:
3010 unpack_int_rgba_RGBA_UINT8(src
, dst
, n
);
3012 case MESA_FORMAT_RGBA_INT8
:
3013 unpack_int_rgba_RGBA_INT8(src
, dst
, n
);
3016 case MESA_FORMAT_ARGB8888
:
3017 unpack_int_rgba_ARGB8888(src
, dst
, n
);
3020 case MESA_FORMAT_XRGB8888
:
3021 unpack_int_rgba_XRGB8888(src
, dst
, n
);
3024 case MESA_FORMAT_RGB_UINT32
:
3025 case MESA_FORMAT_RGB_INT32
:
3026 unpack_int_rgba_RGB_UINT32(src
, dst
, n
);
3029 case MESA_FORMAT_RGB_UINT16
:
3030 unpack_int_rgba_RGB_UINT16(src
, dst
, n
);
3032 case MESA_FORMAT_RGB_INT16
:
3033 unpack_int_rgba_RGB_INT16(src
, dst
, n
);
3036 case MESA_FORMAT_RGB_UINT8
:
3037 unpack_int_rgba_RGB_UINT8(src
, dst
, n
);
3039 case MESA_FORMAT_RGB_INT8
:
3040 unpack_int_rgba_RGB_INT8(src
, dst
, n
);
3043 case MESA_FORMAT_RG_UINT32
:
3044 case MESA_FORMAT_RG_INT32
:
3045 unpack_int_rgba_RG_UINT32(src
, dst
, n
);
3048 case MESA_FORMAT_RG_UINT16
:
3049 unpack_int_rgba_RG_UINT16(src
, dst
, n
);
3051 case MESA_FORMAT_RG_INT16
:
3052 unpack_int_rgba_RG_INT16(src
, dst
, n
);
3055 case MESA_FORMAT_RG_UINT8
:
3056 unpack_int_rgba_RG_UINT8(src
, dst
, n
);
3058 case MESA_FORMAT_RG_INT8
:
3059 unpack_int_rgba_RG_INT8(src
, dst
, n
);
3062 case MESA_FORMAT_R_UINT32
:
3063 case MESA_FORMAT_R_INT32
:
3064 unpack_int_rgba_R_UINT32(src
, dst
, n
);
3067 case MESA_FORMAT_R_UINT16
:
3068 unpack_int_rgba_R_UINT16(src
, dst
, n
);
3070 case MESA_FORMAT_R_INT16
:
3071 unpack_int_rgba_R_INT16(src
, dst
, n
);
3074 case MESA_FORMAT_R_UINT8
:
3075 unpack_int_rgba_R_UINT8(src
, dst
, n
);
3077 case MESA_FORMAT_R_INT8
:
3078 unpack_int_rgba_R_INT8(src
, dst
, n
);
3081 case MESA_FORMAT_ALPHA_UINT32
:
3082 case MESA_FORMAT_ALPHA_INT32
:
3083 unpack_int_rgba_ALPHA_UINT32(src
, dst
, n
);
3086 case MESA_FORMAT_ALPHA_UINT16
:
3087 unpack_int_rgba_ALPHA_UINT16(src
, dst
, n
);
3089 case MESA_FORMAT_ALPHA_INT16
:
3090 unpack_int_rgba_ALPHA_INT16(src
, dst
, n
);
3093 case MESA_FORMAT_ALPHA_UINT8
:
3094 unpack_int_rgba_ALPHA_UINT8(src
, dst
, n
);
3096 case MESA_FORMAT_ALPHA_INT8
:
3097 unpack_int_rgba_ALPHA_INT8(src
, dst
, n
);
3100 case MESA_FORMAT_LUMINANCE_UINT32
:
3101 case MESA_FORMAT_LUMINANCE_INT32
:
3102 unpack_int_rgba_LUMINANCE_UINT32(src
, dst
, n
);
3104 case MESA_FORMAT_LUMINANCE_UINT16
:
3105 unpack_int_rgba_LUMINANCE_UINT16(src
, dst
, n
);
3107 case MESA_FORMAT_LUMINANCE_INT16
:
3108 unpack_int_rgba_LUMINANCE_INT16(src
, dst
, n
);
3111 case MESA_FORMAT_LUMINANCE_UINT8
:
3112 unpack_int_rgba_LUMINANCE_UINT8(src
, dst
, n
);
3114 case MESA_FORMAT_LUMINANCE_INT8
:
3115 unpack_int_rgba_LUMINANCE_INT8(src
, dst
, n
);
3118 case MESA_FORMAT_LUMINANCE_ALPHA_UINT32
:
3119 case MESA_FORMAT_LUMINANCE_ALPHA_INT32
:
3120 unpack_int_rgba_LUMINANCE_ALPHA_UINT32(src
, dst
, n
);
3123 case MESA_FORMAT_LUMINANCE_ALPHA_UINT16
:
3124 unpack_int_rgba_LUMINANCE_ALPHA_UINT16(src
, dst
, n
);
3126 case MESA_FORMAT_LUMINANCE_ALPHA_INT16
:
3127 unpack_int_rgba_LUMINANCE_ALPHA_INT16(src
, dst
, n
);
3130 case MESA_FORMAT_LUMINANCE_ALPHA_UINT8
:
3131 unpack_int_rgba_LUMINANCE_ALPHA_UINT8(src
, dst
, n
);
3133 case MESA_FORMAT_LUMINANCE_ALPHA_INT8
:
3134 unpack_int_rgba_LUMINANCE_ALPHA_INT8(src
, dst
, n
);
3137 case MESA_FORMAT_INTENSITY_UINT32
:
3138 case MESA_FORMAT_INTENSITY_INT32
:
3139 unpack_int_rgba_INTENSITY_UINT32(src
, dst
, n
);
3142 case MESA_FORMAT_INTENSITY_UINT16
:
3143 unpack_int_rgba_INTENSITY_UINT16(src
, dst
, n
);
3145 case MESA_FORMAT_INTENSITY_INT16
:
3146 unpack_int_rgba_INTENSITY_INT16(src
, dst
, n
);
3149 case MESA_FORMAT_INTENSITY_UINT8
:
3150 unpack_int_rgba_INTENSITY_UINT8(src
, dst
, n
);
3152 case MESA_FORMAT_INTENSITY_INT8
:
3153 unpack_int_rgba_INTENSITY_INT8(src
, dst
, n
);
3156 case MESA_FORMAT_ARGB2101010_UINT
:
3157 unpack_int_rgba_ARGB2101010_UINT(src
, dst
, n
);
3160 case MESA_FORMAT_ABGR2101010_UINT
:
3161 unpack_int_rgba_ABGR2101010_UINT(src
, dst
, n
);
3164 case MESA_FORMAT_ARGB2101010
:
3165 unpack_int_rgba_ARGB2101010(src
, dst
, n
);
3168 case MESA_FORMAT_XBGR8888_UINT
:
3169 unpack_int_rgba_XBGR8888_UINT(src
, dst
, n
);
3172 case MESA_FORMAT_XBGR8888_SINT
:
3173 unpack_int_rgba_XBGR8888_SINT(src
, dst
, n
);
3176 case MESA_FORMAT_XBGR16161616_UINT
:
3177 unpack_int_rgba_XBGR16161616_UINT(src
, dst
, n
);
3180 case MESA_FORMAT_XBGR16161616_SINT
:
3181 unpack_int_rgba_XBGR16161616_SINT(src
, dst
, n
);
3184 case MESA_FORMAT_XBGR32323232_UINT
:
3185 case MESA_FORMAT_XBGR32323232_SINT
:
3186 unpack_int_rgba_XBGR32323232_UINT(src
, dst
, n
);
3190 _mesa_problem(NULL
, "%s: bad format %s", __FUNCTION__
,
3191 _mesa_get_format_name(format
));
3197 * Unpack a 2D rect of pixels returning float RGBA colors.
3198 * \param format the source image format
3199 * \param src start address of the source image
3200 * \param srcRowStride source image row stride in bytes
3201 * \param dst start address of the dest image
3202 * \param dstRowStride dest image row stride in bytes
3203 * \param x source image start X pos
3204 * \param y source image start Y pos
3205 * \param width width of rect region to convert
3206 * \param height height of rect region to convert
3209 _mesa_unpack_rgba_block(gl_format format
,
3210 const void *src
, GLint srcRowStride
,
3211 GLfloat dst
[][4], GLint dstRowStride
,
3212 GLuint x
, GLuint y
, GLuint width
, GLuint height
)
3214 unpack_rgba_func unpack
= get_unpack_rgba_function(format
);
3215 const GLuint srcPixStride
= _mesa_get_format_bytes(format
);
3216 const GLuint dstPixStride
= 4 * sizeof(GLfloat
);
3217 const GLubyte
*srcRow
;
3221 /* XXX needs to be fixed for compressed formats */
3223 srcRow
= ((const GLubyte
*) src
) + srcRowStride
* y
+ srcPixStride
* x
;
3224 dstRow
= ((GLubyte
*) dst
) + dstRowStride
* y
+ dstPixStride
* x
;
3226 for (i
= 0; i
< height
; i
++) {
3227 unpack(srcRow
, (GLfloat (*)[4]) dstRow
, width
);
3229 dstRow
+= dstRowStride
;
3230 srcRow
+= srcRowStride
;
3237 typedef void (*unpack_float_z_func
)(GLuint n
, const void *src
, GLfloat
*dst
);
3240 unpack_float_z_Z24_X8(GLuint n
, const void *src
, GLfloat
*dst
)
3242 /* only return Z, not stencil data */
3243 const GLuint
*s
= ((const GLuint
*) src
);
3244 const GLdouble scale
= 1.0 / (GLdouble
) 0xffffff;
3246 for (i
= 0; i
< n
; i
++) {
3247 dst
[i
] = (GLfloat
) ((s
[i
] >> 8) * scale
);
3248 ASSERT(dst
[i
] >= 0.0F
);
3249 ASSERT(dst
[i
] <= 1.0F
);
3254 unpack_float_z_X8_Z24(GLuint n
, const void *src
, GLfloat
*dst
)
3256 /* only return Z, not stencil data */
3257 const GLuint
*s
= ((const GLuint
*) src
);
3258 const GLdouble scale
= 1.0 / (GLdouble
) 0xffffff;
3260 for (i
= 0; i
< n
; i
++) {
3261 dst
[i
] = (GLfloat
) ((s
[i
] & 0x00ffffff) * scale
);
3262 ASSERT(dst
[i
] >= 0.0F
);
3263 ASSERT(dst
[i
] <= 1.0F
);
3268 unpack_float_z_Z16(GLuint n
, const void *src
, GLfloat
*dst
)
3270 const GLushort
*s
= ((const GLushort
*) src
);
3272 for (i
= 0; i
< n
; i
++) {
3273 dst
[i
] = s
[i
] * (1.0F
/ 65535.0F
);
3278 unpack_float_z_Z32(GLuint n
, const void *src
, GLfloat
*dst
)
3280 const GLuint
*s
= ((const GLuint
*) src
);
3282 for (i
= 0; i
< n
; i
++) {
3283 dst
[i
] = s
[i
] * (1.0F
/ 0xffffffff);
3288 unpack_float_z_Z32F(GLuint n
, const void *src
, GLfloat
*dst
)
3290 memcpy(dst
, src
, n
* sizeof(float));
3294 unpack_float_z_Z32X24S8(GLuint n
, const void *src
, GLfloat
*dst
)
3296 const struct z32f_x24s8
*s
= (const struct z32f_x24s8
*) src
;
3298 for (i
= 0; i
< n
; i
++) {
3307 * The returned values will always be in the range [0.0, 1.0].
3310 _mesa_unpack_float_z_row(gl_format format
, GLuint n
,
3311 const void *src
, GLfloat
*dst
)
3313 unpack_float_z_func unpack
;
3316 case MESA_FORMAT_Z24_S8
:
3317 case MESA_FORMAT_Z24_X8
:
3318 unpack
= unpack_float_z_Z24_X8
;
3320 case MESA_FORMAT_S8_Z24
:
3321 case MESA_FORMAT_X8_Z24
:
3322 unpack
= unpack_float_z_X8_Z24
;
3324 case MESA_FORMAT_Z16
:
3325 unpack
= unpack_float_z_Z16
;
3327 case MESA_FORMAT_Z32
:
3328 unpack
= unpack_float_z_Z32
;
3330 case MESA_FORMAT_Z32_FLOAT
:
3331 unpack
= unpack_float_z_Z32F
;
3333 case MESA_FORMAT_Z32_FLOAT_X24S8
:
3334 unpack
= unpack_float_z_Z32X24S8
;
3337 _mesa_problem(NULL
, "bad format %s in _mesa_unpack_float_z_row",
3338 _mesa_get_format_name(format
));
3342 unpack(n
, src
, dst
);
3347 typedef void (*unpack_uint_z_func
)(const void *src
, GLuint
*dst
, GLuint n
);
3350 unpack_uint_z_Z24_X8(const void *src
, GLuint
*dst
, GLuint n
)
3352 /* only return Z, not stencil data */
3353 const GLuint
*s
= ((const GLuint
*) src
);
3355 for (i
= 0; i
< n
; i
++) {
3356 dst
[i
] = (s
[i
] & 0xffffff00) | (s
[i
] >> 24);
3361 unpack_uint_z_X8_Z24(const void *src
, GLuint
*dst
, GLuint n
)
3363 /* only return Z, not stencil data */
3364 const GLuint
*s
= ((const GLuint
*) src
);
3366 for (i
= 0; i
< n
; i
++) {
3367 dst
[i
] = (s
[i
] << 8) | ((s
[i
] >> 16) & 0xff);
3372 unpack_uint_z_Z16(const void *src
, GLuint
*dst
, GLuint n
)
3374 const GLushort
*s
= ((const GLushort
*)src
);
3376 for (i
= 0; i
< n
; i
++) {
3377 dst
[i
] = (s
[i
] << 16) | s
[i
];
3382 unpack_uint_z_Z32(const void *src
, GLuint
*dst
, GLuint n
)
3384 memcpy(dst
, src
, n
* sizeof(GLuint
));
3388 unpack_uint_z_Z32_FLOAT(const void *src
, GLuint
*dst
, GLuint n
)
3390 const float *s
= (const float *)src
;
3392 for (i
= 0; i
< n
; i
++) {
3393 dst
[i
] = FLOAT_TO_UINT(CLAMP(s
[i
], 0.0F
, 1.0F
));
3398 unpack_uint_z_Z32_FLOAT_X24S8(const void *src
, GLuint
*dst
, GLuint n
)
3400 const struct z32f_x24s8
*s
= (const struct z32f_x24s8
*) src
;
3403 for (i
= 0; i
< n
; i
++) {
3404 dst
[i
] = FLOAT_TO_UINT(CLAMP(s
[i
].z
, 0.0F
, 1.0F
));
3411 * The returned values will always be in the range [0, 0xffffffff].
3414 _mesa_unpack_uint_z_row(gl_format format
, GLuint n
,
3415 const void *src
, GLuint
*dst
)
3417 unpack_uint_z_func unpack
;
3418 const GLubyte
*srcPtr
= (GLubyte
*) src
;
3421 case MESA_FORMAT_Z24_S8
:
3422 case MESA_FORMAT_Z24_X8
:
3423 unpack
= unpack_uint_z_Z24_X8
;
3425 case MESA_FORMAT_S8_Z24
:
3426 case MESA_FORMAT_X8_Z24
:
3427 unpack
= unpack_uint_z_X8_Z24
;
3429 case MESA_FORMAT_Z16
:
3430 unpack
= unpack_uint_z_Z16
;
3432 case MESA_FORMAT_Z32
:
3433 unpack
= unpack_uint_z_Z32
;
3435 case MESA_FORMAT_Z32_FLOAT
:
3436 unpack
= unpack_uint_z_Z32_FLOAT
;
3438 case MESA_FORMAT_Z32_FLOAT_X24S8
:
3439 unpack
= unpack_uint_z_Z32_FLOAT_X24S8
;
3442 _mesa_problem(NULL
, "bad format %s in _mesa_unpack_uint_z_row",
3443 _mesa_get_format_name(format
));
3447 unpack(srcPtr
, dst
, n
);
3452 unpack_ubyte_s_S8(const void *src
, GLubyte
*dst
, GLuint n
)
3454 memcpy(dst
, src
, n
);
3458 unpack_ubyte_s_Z24_S8(const void *src
, GLubyte
*dst
, GLuint n
)
3461 const GLuint
*src32
= src
;
3463 for (i
= 0; i
< n
; i
++)
3464 dst
[i
] = src32
[i
] & 0xff;
3468 unpack_ubyte_s_S8_Z24(const void *src
, GLubyte
*dst
, GLuint n
)
3471 const GLuint
*src32
= src
;
3473 for (i
= 0; i
< n
; i
++)
3474 dst
[i
] = src32
[i
] >> 24;
3478 unpack_ubyte_s_Z32_FLOAT_X24S8(const void *src
, GLubyte
*dst
, GLuint n
)
3481 const struct z32f_x24s8
*s
= (const struct z32f_x24s8
*) src
;
3483 for (i
= 0; i
< n
; i
++)
3484 dst
[i
] = s
[i
].x24s8
& 0xff;
3488 _mesa_unpack_ubyte_stencil_row(gl_format format
, GLuint n
,
3489 const void *src
, GLubyte
*dst
)
3492 case MESA_FORMAT_S8
:
3493 unpack_ubyte_s_S8(src
, dst
, n
);
3495 case MESA_FORMAT_Z24_S8
:
3496 unpack_ubyte_s_Z24_S8(src
, dst
, n
);
3498 case MESA_FORMAT_S8_Z24
:
3499 unpack_ubyte_s_S8_Z24(src
, dst
, n
);
3501 case MESA_FORMAT_Z32_FLOAT_X24S8
:
3502 unpack_ubyte_s_Z32_FLOAT_X24S8(src
, dst
, n
);
3505 _mesa_problem(NULL
, "bad format %s in _mesa_unpack_ubyte_s_row",
3506 _mesa_get_format_name(format
));
3512 unpack_uint_24_8_depth_stencil_S8_Z24(const GLuint
*src
, GLuint
*dst
, GLuint n
)
3516 for (i
= 0; i
< n
; i
++) {
3517 GLuint val
= src
[i
];
3518 dst
[i
] = val
>> 24 | val
<< 8;
3523 unpack_uint_24_8_depth_stencil_Z24_S8(const GLuint
*src
, GLuint
*dst
, GLuint n
)
3525 memcpy(dst
, src
, n
* 4);
3529 _mesa_unpack_uint_24_8_depth_stencil_row(gl_format format
, GLuint n
,
3530 const void *src
, GLuint
*dst
)
3533 case MESA_FORMAT_Z24_S8
:
3534 unpack_uint_24_8_depth_stencil_Z24_S8(src
, dst
, n
);
3536 case MESA_FORMAT_S8_Z24
:
3537 unpack_uint_24_8_depth_stencil_S8_Z24(src
, dst
, n
);
3541 "bad format %s in _mesa_unpack_uint_24_8_depth_stencil_row",
3542 _mesa_get_format_name(format
));