1 /**************************************************************************
3 * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 **************************************************************************/
29 * RGBA/float tile get/put functions.
30 * Usable both by drivers and state trackers.
34 #include "pipe/p_defines.h"
35 #include "pipe/p_inlines.h"
37 #include "util/u_math.h"
38 #include "util/u_memory.h"
39 #include "util/u_rect.h"
40 #include "util/u_tile.h"
41 #include "lp_tile_cache.h"
42 #include "lp_tile_soa.h"
45 #define PIXEL(_p, _x, _y, _c) ((_p)[(_c)*TILE_SIZE*TILE_SIZE + (_y)*TILE_SIZE + (_x)])
49 /*** PIPE_FORMAT_A8R8G8B8_UNORM ***/
52 a8r8g8b8_get_tile_rgba(const unsigned *src
,
53 unsigned w
, unsigned h
,
58 for (i
= 0; i
< h
; i
++) {
59 for (j
= 0; j
< w
; j
++) {
60 const unsigned pixel
= *src
++;
61 PIXEL(p
, j
, i
, 0) = (pixel
>> 16) & 0xff;
62 PIXEL(p
, j
, i
, 1) = (pixel
>> 8) & 0xff;
63 PIXEL(p
, j
, i
, 2) = (pixel
>> 0) & 0xff;
64 PIXEL(p
, j
, i
, 3) = (pixel
>> 24) & 0xff;
71 a8r8g8b8_put_tile_rgba(unsigned *dst
,
72 unsigned w
, unsigned h
,
77 for (i
= 0; i
< h
; i
++) {
78 for (j
= 0; j
< w
; j
++) {
80 r
= PIXEL(p
, j
, i
, 0);
81 g
= PIXEL(p
, j
, i
, 1);
82 b
= PIXEL(p
, j
, i
, 2);
83 a
= PIXEL(p
, j
, i
, 3);
84 *dst
++ = (a
<< 24) | (r
<< 16) | (g
<< 8) | b
;
90 /*** PIPE_FORMAT_A8R8G8B8_UNORM ***/
93 x8r8g8b8_get_tile_rgba(const unsigned *src
,
94 unsigned w
, unsigned h
,
99 for (i
= 0; i
< h
; i
++) {
100 for (j
= 0; j
< w
; j
++) {
101 const unsigned pixel
= *src
++;
102 PIXEL(p
, j
, i
, 0) = (pixel
>> 16) & 0xff;
103 PIXEL(p
, j
, i
, 1) = (pixel
>> 8) & 0xff;
104 PIXEL(p
, j
, i
, 2) = (pixel
>> 0) & 0xff;
105 PIXEL(p
, j
, i
, 3) = 0xff;
112 x8r8g8b8_put_tile_rgba(unsigned *dst
,
113 unsigned w
, unsigned h
,
118 for (i
= 0; i
< h
; i
++) {
119 for (j
= 0; j
< w
; j
++) {
121 r
= PIXEL(p
, j
, i
, 0);
122 g
= PIXEL(p
, j
, i
, 1);
123 b
= PIXEL(p
, j
, i
, 2);
124 *dst
++ = (0xff << 24) | (r
<< 16) | (g
<< 8) | b
;
130 /*** PIPE_FORMAT_B8G8R8A8_UNORM ***/
133 b8g8r8a8_get_tile_rgba(const unsigned *src
,
134 unsigned w
, unsigned h
,
139 for (i
= 0; i
< h
; i
++) {
140 for (j
= 0; j
< w
; j
++) {
141 const unsigned pixel
= *src
++;
142 PIXEL(p
, j
, i
, 0) = (pixel
>> 8) & 0xff;
143 PIXEL(p
, j
, i
, 1) = (pixel
>> 16) & 0xff;
144 PIXEL(p
, j
, i
, 2) = (pixel
>> 24) & 0xff;
145 PIXEL(p
, j
, i
, 3) = (pixel
>> 0) & 0xff;
152 b8g8r8a8_put_tile_rgba(unsigned *dst
,
153 unsigned w
, unsigned h
,
158 for (i
= 0; i
< h
; i
++) {
159 for (j
= 0; j
< w
; j
++) {
161 r
= PIXEL(p
, j
, i
, 0);
162 g
= PIXEL(p
, j
, i
, 1);
163 b
= PIXEL(p
, j
, i
, 2);
164 a
= PIXEL(p
, j
, i
, 3);
165 *dst
++ = (b
<< 24) | (g
<< 16) | (r
<< 8) | a
;
171 /*** PIPE_FORMAT_A1R5G5B5_UNORM ***/
174 a1r5g5b5_get_tile_rgba(const ushort
*src
,
175 unsigned w
, unsigned h
,
180 for (i
= 0; i
< h
; i
++) {
181 for (j
= 0; j
< w
; j
++) {
182 const ushort pixel
= *src
++;
183 PIXEL(p
, j
, i
, 0) = ((pixel
>> 10) & 0x1f) * 255 / 31;
184 PIXEL(p
, j
, i
, 1) = ((pixel
>> 5) & 0x1f) * 255 / 31;
185 PIXEL(p
, j
, i
, 2) = ((pixel
) & 0x1f) * 255 / 31;
186 PIXEL(p
, j
, i
, 3) = ((pixel
>> 15) ) * 255;
193 a1r5g5b5_put_tile_rgba(ushort
*dst
,
194 unsigned w
, unsigned h
,
199 for (i
= 0; i
< h
; i
++) {
200 for (j
= 0; j
< w
; j
++) {
202 r
= PIXEL(p
, j
, i
, 0);
203 g
= PIXEL(p
, j
, i
, 1);
204 b
= PIXEL(p
, j
, i
, 2);
205 a
= PIXEL(p
, j
, i
, 3);
206 r
= r
>> 3; /* 5 bits */
207 g
= g
>> 3; /* 5 bits */
208 b
= b
>> 3; /* 5 bits */
209 a
= a
>> 7; /* 1 bit */
210 *dst
++ = (a
<< 15) | (r
<< 10) | (g
<< 5) | b
;
216 /*** PIPE_FORMAT_A4R4G4B4_UNORM ***/
219 a4r4g4b4_get_tile_rgba(const ushort
*src
,
220 unsigned w
, unsigned h
,
225 for (i
= 0; i
< h
; i
++) {
226 for (j
= 0; j
< w
; j
++) {
227 const ushort pixel
= *src
++;
228 PIXEL(p
, j
, i
, 0) = ((pixel
>> 8) & 0xf) * 255 / 15;
229 PIXEL(p
, j
, i
, 1) = ((pixel
>> 4) & 0xf) * 255 / 15;
230 PIXEL(p
, j
, i
, 2) = ((pixel
) & 0xf) * 255 / 15;
231 PIXEL(p
, j
, i
, 3) = ((pixel
>> 12) ) * 255 / 15;
238 a4r4g4b4_put_tile_rgba(ushort
*dst
,
239 unsigned w
, unsigned h
,
244 for (i
= 0; i
< h
; i
++) {
245 for (j
= 0; j
< w
; j
++) {
247 r
= PIXEL(p
, j
, i
, 0);
248 g
= PIXEL(p
, j
, i
, 1);
249 b
= PIXEL(p
, j
, i
, 2);
250 a
= PIXEL(p
, j
, i
, 3);
255 *dst
++ = (a
<< 12) | (r
<< 16) | (g
<< 4) | b
;
261 /*** PIPE_FORMAT_R5G6B5_UNORM ***/
264 r5g6b5_get_tile_rgba(const ushort
*src
,
265 unsigned w
, unsigned h
,
270 for (i
= 0; i
< h
; i
++) {
271 for (j
= 0; j
< w
; j
++) {
272 const ushort pixel
= *src
++;
273 PIXEL(p
, j
, i
, 0) = ((pixel
>> 11) & 0x1f) * 255 / 31;
274 PIXEL(p
, j
, i
, 1) = ((pixel
>> 5) & 0x3f) * 255 / 63;
275 PIXEL(p
, j
, i
, 2) = ((pixel
) & 0x1f) * 255 / 31;
276 PIXEL(p
, j
, i
, 3) = 255;
283 r5g6b5_put_tile_rgba(ushort
*dst
,
284 unsigned w
, unsigned h
,
289 for (i
= 0; i
< h
; i
++) {
290 for (j
= 0; j
< w
; j
++) {
291 uint r
= (uint
) PIXEL(p
, j
, i
, 0) * 31 / 255;
292 uint g
= (uint
) PIXEL(p
, j
, i
, 1) * 63 / 255;
293 uint b
= (uint
) PIXEL(p
, j
, i
, 2) * 31 / 255;
294 *dst
++ = (r
<< 11) | (g
<< 5) | (b
);
301 /*** PIPE_FORMAT_Z16_UNORM ***/
304 * Return each Z value as four floats in [0,1].
307 z16_get_tile_rgba(const ushort
*src
,
308 unsigned w
, unsigned h
,
311 const float scale
= 1.0f
/ 65535.0f
;
314 for (i
= 0; i
< h
; i
++) {
315 for (j
= 0; j
< w
; j
++) {
319 PIXEL(p
, j
, i
, 3) = *src
++ * scale
;
327 /*** PIPE_FORMAT_L8_UNORM ***/
330 l8_get_tile_rgba(const ubyte
*src
,
331 unsigned w
, unsigned h
,
336 for (i
= 0; i
< h
; i
++) {
337 for (j
= 0; j
< w
; j
++, src
++) {
340 PIXEL(p
, j
, i
, 2) = *src
;
341 PIXEL(p
, j
, i
, 3) = 255;
348 l8_put_tile_rgba(ubyte
*dst
,
349 unsigned w
, unsigned h
,
354 for (i
= 0; i
< h
; i
++) {
355 for (j
= 0; j
< w
; j
++) {
357 r
= PIXEL(p
, j
, i
, 0);
365 /*** PIPE_FORMAT_A8_UNORM ***/
368 a8_get_tile_rgba(const ubyte
*src
,
369 unsigned w
, unsigned h
,
374 for (i
= 0; i
< h
; i
++) {
375 for (j
= 0; j
< w
; j
++, src
++) {
378 PIXEL(p
, j
, i
, 2) = 0;
379 PIXEL(p
, j
, i
, 3) = *src
;
386 a8_put_tile_rgba(ubyte
*dst
,
387 unsigned w
, unsigned h
,
392 for (i
= 0; i
< h
; i
++) {
393 for (j
= 0; j
< w
; j
++) {
395 a
= PIXEL(p
, j
, i
, 3);
403 /*** PIPE_FORMAT_R16_SNORM ***/
406 r16_get_tile_rgba(const short *src
,
407 unsigned w
, unsigned h
,
412 for (i
= 0; i
< h
; i
++) {
413 for (j
= 0; j
< w
; j
++, src
++) {
414 PIXEL(p
, j
, i
, 0) = MAX2(src
[0] >> 7, 0);
416 PIXEL(p
, j
, i
, 2) = 0;
417 PIXEL(p
, j
, i
, 3) = 255;
424 r16_put_tile_rgba(short *dst
,
425 unsigned w
, unsigned h
,
430 for (i
= 0; i
< h
; i
++) {
431 for (j
= 0; j
< w
; j
++, dst
++) {
432 dst
[0] = PIXEL(p
, j
, i
, 0) << 7;
438 /*** PIPE_FORMAT_R16G16B16A16_SNORM ***/
441 r16g16b16a16_get_tile_rgba(const short *src
,
442 unsigned w
, unsigned h
,
447 for (i
= 0; i
< h
; i
++) {
448 for (j
= 0; j
< w
; j
++, src
+= 4) {
449 PIXEL(p
, j
, i
, 0) = src
[0] >> 8;
450 PIXEL(p
, j
, i
, 1) = src
[1] >> 8;
451 PIXEL(p
, j
, i
, 2) = src
[2] >> 8;
452 PIXEL(p
, j
, i
, 3) = src
[3] >> 8;
459 r16g16b16a16_put_tile_rgba(short *dst
,
460 unsigned w
, unsigned h
,
465 for (i
= 0; i
< h
; i
++) {
466 for (j
= 0; j
< w
; j
++, dst
+= 4) {
467 dst
[0] = PIXEL(p
, j
, i
, 0) << 8;
468 dst
[1] = PIXEL(p
, j
, i
, 1) << 8;
469 dst
[2] = PIXEL(p
, j
, i
, 2) << 8;
470 dst
[3] = PIXEL(p
, j
, i
, 3) << 8;
477 /*** PIPE_FORMAT_I8_UNORM ***/
480 i8_get_tile_rgba(const ubyte
*src
,
481 unsigned w
, unsigned h
,
486 for (i
= 0; i
< h
; i
++) {
487 for (j
= 0; j
< w
; j
++, src
++) {
491 PIXEL(p
, j
, i
, 3) = *src
;
498 i8_put_tile_rgba(ubyte
*dst
,
499 unsigned w
, unsigned h
,
504 for (i
= 0; i
< h
; i
++) {
505 for (j
= 0; j
< w
; j
++) {
507 r
= PIXEL(p
, j
, i
, 0);
514 /*** PIPE_FORMAT_A8L8_UNORM ***/
517 a8l8_get_tile_rgba(const ushort
*src
,
518 unsigned w
, unsigned h
,
523 for (i
= 0; i
< h
; i
++) {
524 for (j
= 0; j
< w
; j
++) {
528 PIXEL(p
, j
, i
, 2) = ra
& 0xff;
529 PIXEL(p
, j
, i
, 3) = ra
>> 8;
536 a8l8_put_tile_rgba(ushort
*dst
,
537 unsigned w
, unsigned h
,
542 for (i
= 0; i
< h
; i
++) {
543 for (j
= 0; j
< w
; j
++) {
545 r
= PIXEL(p
, j
, i
, 0);
546 a
= PIXEL(p
, j
, i
, 3);
547 *dst
++ = (a
<< 8) | r
;
555 /*** PIPE_FORMAT_Z32_UNORM ***/
558 * Return each Z value as four floats in [0,1].
561 z32_get_tile_rgba(const unsigned *src
,
562 unsigned w
, unsigned h
,
565 const double scale
= 1.0 / (double) 0xffffffff;
568 for (i
= 0; i
< h
; i
++) {
569 for (j
= 0; j
< w
; j
++) {
573 PIXEL(p
, j
, i
, 3) = (float) (*src
++ * scale
);
579 /*** PIPE_FORMAT_S8Z24_UNORM ***/
582 * Return Z component as four float in [0,1]. Stencil part ignored.
585 s8z24_get_tile_rgba(const unsigned *src
,
586 unsigned w
, unsigned h
,
589 const double scale
= 1.0 / ((1 << 24) - 1);
592 for (i
= 0; i
< h
; i
++) {
593 for (j
= 0; j
< w
; j
++) {
597 PIXEL(p
, j
, i
, 3) = (float) (scale
* (*src
++ & 0xffffff));
603 /*** PIPE_FORMAT_Z24S8_UNORM ***/
606 * Return Z component as four float in [0,1]. Stencil part ignored.
609 z24s8_get_tile_rgba(const unsigned *src
,
610 unsigned w
, unsigned h
,
613 const double scale
= 1.0 / ((1 << 24) - 1);
616 for (i
= 0; i
< h
; i
++) {
617 for (j
= 0; j
< w
; j
++) {
621 PIXEL(p
, j
, i
, 3) = (float) (scale
* (*src
++ >> 8));
627 /*** PIPE_FORMAT_Z32_FLOAT ***/
630 * Return each Z value as four floats in [0,1].
633 z32f_get_tile_rgba(const float *src
,
634 unsigned w
, unsigned h
,
639 for (i
= 0; i
< h
; i
++) {
640 for (j
= 0; j
< w
; j
++) {
644 PIXEL(p
, j
, i
, 3) = *src
++;
650 /*** PIPE_FORMAT_YCBCR / PIPE_FORMAT_YCBCR_REV ***/
653 * Convert YCbCr (or YCrCb) to RGBA.
656 ycbcr_get_tile_rgba(const ushort
*src
,
657 unsigned w
, unsigned h
,
663 for (i
= 0; i
< h
; i
++) {
664 /* do two texels at a time */
665 for (j
= 0; j
< (w
& ~1); j
+= 2, src
+= 2) {
666 const ushort t0
= src
[0];
667 const ushort t1
= src
[1];
668 const ubyte y0
= (t0
>> 8) & 0xff; /* luminance */
669 const ubyte y1
= (t1
>> 8) & 0xff; /* luminance */
674 cb
= t1
& 0xff; /* chroma U */
675 cr
= t0
& 0xff; /* chroma V */
678 cb
= t0
& 0xff; /* chroma U */
679 cr
= t1
& 0xff; /* chroma V */
682 /* even pixel: y0,cr,cb */
683 r
= 1.164f
* (y0
-16) + 1.596f
* (cr
-128);
684 g
= 1.164f
* (y0
-16) - 0.813f
* (cr
-128) - 0.391f
* (cb
-128);
685 b
= 1.164f
* (y0
-16) + 2.018f
* (cb
-128);
686 PIXEL(p
, j
, i
, 0) = r
;
687 PIXEL(p
, j
, i
, 1) = g
;
688 PIXEL(p
, j
, i
, 2) = b
;
689 PIXEL(p
, j
, i
, 3) = 255;
691 /* odd pixel: use y1,cr,cb */
692 r
= 1.164f
* (y1
-16) + 1.596f
* (cr
-128);
693 g
= 1.164f
* (y1
-16) - 0.813f
* (cr
-128) - 0.391f
* (cb
-128);
694 b
= 1.164f
* (y1
-16) + 2.018f
* (cb
-128);
695 PIXEL(p
, j
+ 1, i
, 0) = r
;
696 PIXEL(p
, j
+ 1, i
, 1) = g
;
697 PIXEL(p
, j
+ 1, i
, 2) = b
;
698 PIXEL(p
, j
+ 1, i
, 3) = 255;
700 /* do the last texel */
702 const ushort t0
= src
[0];
703 const ushort t1
= src
[1];
704 const ubyte y0
= (t0
>> 8) & 0xff; /* luminance */
709 cb
= t1
& 0xff; /* chroma U */
710 cr
= t0
& 0xff; /* chroma V */
713 cb
= t0
& 0xff; /* chroma U */
714 cr
= t1
& 0xff; /* chroma V */
717 /* even pixel: y0,cr,cb */
718 r
= 1.164f
* (y0
-16) + 1.596f
* (cr
-128);
719 g
= 1.164f
* (y0
-16) - 0.813f
* (cr
-128) - 0.391f
* (cb
-128);
720 b
= 1.164f
* (y0
-16) + 2.018f
* (cb
-128);
721 PIXEL(p
, j
, i
, 0) = r
;
722 PIXEL(p
, j
, i
, 1) = g
;
723 PIXEL(p
, j
, i
, 2) = b
;
724 PIXEL(p
, j
, i
, 3) = 255;
731 fake_get_tile_rgba(const ushort
*src
,
732 unsigned w
, unsigned h
,
737 for (i
= 0; i
< h
; i
++) {
738 for (j
= 0; j
< w
; j
++) {
742 PIXEL(p
, j
, i
, 3) = (i
^ j
) & 1 ? 255 : 0;
749 lp_tile_raw_to_rgba_soa(enum pipe_format format
,
755 case PIPE_FORMAT_A8R8G8B8_UNORM
:
756 a8r8g8b8_get_tile_rgba((unsigned *) src
, w
, h
, p
);
758 case PIPE_FORMAT_X8R8G8B8_UNORM
:
759 x8r8g8b8_get_tile_rgba((unsigned *) src
, w
, h
, p
);
761 case PIPE_FORMAT_B8G8R8A8_UNORM
:
762 b8g8r8a8_get_tile_rgba((unsigned *) src
, w
, h
, p
);
764 case PIPE_FORMAT_A1R5G5B5_UNORM
:
765 a1r5g5b5_get_tile_rgba((ushort
*) src
, w
, h
, p
);
767 case PIPE_FORMAT_A4R4G4B4_UNORM
:
768 a4r4g4b4_get_tile_rgba((ushort
*) src
, w
, h
, p
);
770 case PIPE_FORMAT_R5G6B5_UNORM
:
771 r5g6b5_get_tile_rgba((ushort
*) src
, w
, h
, p
);
773 case PIPE_FORMAT_L8_UNORM
:
774 l8_get_tile_rgba((ubyte
*) src
, w
, h
, p
);
776 case PIPE_FORMAT_A8_UNORM
:
777 a8_get_tile_rgba((ubyte
*) src
, w
, h
, p
);
779 case PIPE_FORMAT_I8_UNORM
:
780 i8_get_tile_rgba((ubyte
*) src
, w
, h
, p
);
782 case PIPE_FORMAT_A8L8_UNORM
:
783 a8l8_get_tile_rgba((ushort
*) src
, w
, h
, p
);
785 case PIPE_FORMAT_R16_SNORM
:
786 r16_get_tile_rgba((short *) src
, w
, h
, p
);
788 case PIPE_FORMAT_R16G16B16A16_SNORM
:
789 r16g16b16a16_get_tile_rgba((short *) src
, w
, h
, p
);
791 case PIPE_FORMAT_Z16_UNORM
:
792 z16_get_tile_rgba((ushort
*) src
, w
, h
, p
);
794 case PIPE_FORMAT_Z32_UNORM
:
795 z32_get_tile_rgba((unsigned *) src
, w
, h
, p
);
797 case PIPE_FORMAT_S8Z24_UNORM
:
798 case PIPE_FORMAT_X8Z24_UNORM
:
799 s8z24_get_tile_rgba((unsigned *) src
, w
, h
, p
);
801 case PIPE_FORMAT_Z24S8_UNORM
:
802 case PIPE_FORMAT_Z24X8_UNORM
:
803 z24s8_get_tile_rgba((unsigned *) src
, w
, h
, p
);
805 case PIPE_FORMAT_Z32_FLOAT
:
806 z32f_get_tile_rgba((float *) src
, w
, h
, p
);
808 case PIPE_FORMAT_YCBCR
:
809 ycbcr_get_tile_rgba((ushort
*) src
, w
, h
, p
, FALSE
);
811 case PIPE_FORMAT_YCBCR_REV
:
812 ycbcr_get_tile_rgba((ushort
*) src
, w
, h
, p
, TRUE
);
815 debug_printf("%s: unsupported format %s\n", __FUNCTION__
, pf_name(format
));
816 fake_get_tile_rgba(src
, w
, h
, p
);
822 lp_get_tile_rgba_soa(struct pipe_transfer
*pt
,
826 uint w
= TILE_SIZE
, h
= TILE_SIZE
;
829 if (pipe_clip_tile(x
, y
, &w
, &h
, pt
))
832 packed
= MALLOC(pf_get_nblocks(&pt
->block
, w
, h
) * pt
->block
.size
);
837 if(pt
->format
== PIPE_FORMAT_YCBCR
|| pt
->format
== PIPE_FORMAT_YCBCR_REV
)
838 assert((x
& 1) == 0);
840 pipe_get_tile_raw(pt
, x
, y
, w
, h
, packed
, 0);
842 lp_tile_raw_to_rgba_soa(pt
->format
, packed
, w
, h
, p
);
849 lp_put_tile_rgba_soa(struct pipe_transfer
*pt
,
853 uint w
= TILE_SIZE
, h
= TILE_SIZE
;
856 if (pipe_clip_tile(x
, y
, &w
, &h
, pt
))
859 packed
= MALLOC(pf_get_nblocks(&pt
->block
, w
, h
) * pt
->block
.size
);
864 switch (pt
->format
) {
865 case PIPE_FORMAT_A8R8G8B8_UNORM
:
866 a8r8g8b8_put_tile_rgba((unsigned *) packed
, w
, h
, p
);
868 case PIPE_FORMAT_X8R8G8B8_UNORM
:
869 x8r8g8b8_put_tile_rgba((unsigned *) packed
, w
, h
, p
);
871 case PIPE_FORMAT_B8G8R8A8_UNORM
:
872 b8g8r8a8_put_tile_rgba((unsigned *) packed
, w
, h
, p
);
874 case PIPE_FORMAT_A1R5G5B5_UNORM
:
875 a1r5g5b5_put_tile_rgba((ushort
*) packed
, w
, h
, p
);
877 case PIPE_FORMAT_R5G6B5_UNORM
:
878 r5g6b5_put_tile_rgba((ushort
*) packed
, w
, h
, p
);
880 case PIPE_FORMAT_R8G8B8A8_UNORM
:
883 case PIPE_FORMAT_A4R4G4B4_UNORM
:
884 a4r4g4b4_put_tile_rgba((ushort
*) packed
, w
, h
, p
);
886 case PIPE_FORMAT_L8_UNORM
:
887 l8_put_tile_rgba((ubyte
*) packed
, w
, h
, p
);
889 case PIPE_FORMAT_A8_UNORM
:
890 a8_put_tile_rgba((ubyte
*) packed
, w
, h
, p
);
892 case PIPE_FORMAT_I8_UNORM
:
893 i8_put_tile_rgba((ubyte
*) packed
, w
, h
, p
);
895 case PIPE_FORMAT_A8L8_UNORM
:
896 a8l8_put_tile_rgba((ushort
*) packed
, w
, h
, p
);
898 case PIPE_FORMAT_R16_SNORM
:
899 r16_put_tile_rgba((short *) packed
, w
, h
, p
);
901 case PIPE_FORMAT_R16G16B16A16_SNORM
:
902 r16g16b16a16_put_tile_rgba((short *) packed
, w
, h
, p
);
904 case PIPE_FORMAT_Z16_UNORM
:
905 /*z16_put_tile_rgba((ushort *) packed, w, h, p);*/
907 case PIPE_FORMAT_Z32_UNORM
:
908 /*z32_put_tile_rgba((unsigned *) packed, w, h, p);*/
910 case PIPE_FORMAT_S8Z24_UNORM
:
911 case PIPE_FORMAT_X8Z24_UNORM
:
912 /*s8z24_put_tile_rgba((unsigned *) packed, w, h, p);*/
914 case PIPE_FORMAT_Z24S8_UNORM
:
915 case PIPE_FORMAT_Z24X8_UNORM
:
916 /*z24s8_put_tile_rgba((unsigned *) packed, w, h, p);*/
919 debug_printf("%s: unsupported format %s\n", __FUNCTION__
, pf_name(pt
->format
));
922 pipe_put_tile_raw(pt
, x
, y
, w
, h
, packed
, 0);