• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Mesa 3-D graphics library
3  *
4  * Copyright (c) 2011 VMware, Inc.
5  * Copyright (c) 2014 Intel Corporation.
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation
10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11  * and/or sell copies of the Software, and to permit persons to whom the
12  * Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included
15  * in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
21  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
22  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
23  * OTHER DEALINGS IN THE SOFTWARE.
24  */
25 
26 
27 /**
28  * Color, depth, stencil packing functions.
29  * Used to pack basic color, depth and stencil formats to specific
30  * hardware formats.
31  *
32  * There are both per-pixel and per-row packing functions:
33  * - The former will be used by swrast to write values to the color, depth,
34  *   stencil buffers when drawing points, lines and masked spans.
35  * - The later will be used for image-oriented functions like glDrawPixels,
36  *   glAccum, and glTexImage.
37  */
38 
39 #include <stdint.h>
40 
41 #include "format_pack.h"
42 #include "format_utils.h"
43 #include "macros.h"
44 #include "util/format_rgb9e5.h"
45 #include "util/format_r11g11b10f.h"
46 #include "util/format_srgb.h"
47 
48 #define UNPACK(SRC, OFFSET, BITS) (((SRC) >> (OFFSET)) & MAX_UINT(BITS))
49 #define PACK(SRC, OFFSET, BITS) (((SRC) & MAX_UINT(BITS)) << (OFFSET))
50 
51 
52 
53 /* ubyte packing functions */
54 
55 
56 static inline void
pack_ubyte_a8b8g8r8_unorm(const GLubyte src[4],void * dst)57 pack_ubyte_a8b8g8r8_unorm(const GLubyte src[4], void *dst)
58 {
59 
60 
61       uint8_t a =
62             _mesa_unorm_to_unorm(src[3], 8, 8);
63 
64 
65       uint8_t b =
66             _mesa_unorm_to_unorm(src[2], 8, 8);
67 
68 
69       uint8_t g =
70             _mesa_unorm_to_unorm(src[1], 8, 8);
71 
72 
73       uint8_t r =
74             _mesa_unorm_to_unorm(src[0], 8, 8);
75 
76       uint32_t d = 0;
77          d |= PACK(a, 0, 8);
78          d |= PACK(b, 8, 8);
79          d |= PACK(g, 16, 8);
80          d |= PACK(r, 24, 8);
81       (*(uint32_t *)dst) = d;
82 }
83 
84 static inline void
pack_ubyte_x8b8g8r8_unorm(const GLubyte src[4],void * dst)85 pack_ubyte_x8b8g8r8_unorm(const GLubyte src[4], void *dst)
86 {
87 
88 
89 
90       uint8_t b =
91             _mesa_unorm_to_unorm(src[2], 8, 8);
92 
93 
94       uint8_t g =
95             _mesa_unorm_to_unorm(src[1], 8, 8);
96 
97 
98       uint8_t r =
99             _mesa_unorm_to_unorm(src[0], 8, 8);
100 
101       uint32_t d = 0;
102                      d |= PACK(b, 8, 8);
103          d |= PACK(g, 16, 8);
104          d |= PACK(r, 24, 8);
105       (*(uint32_t *)dst) = d;
106 }
107 
108 static inline void
pack_ubyte_r8g8b8a8_unorm(const GLubyte src[4],void * dst)109 pack_ubyte_r8g8b8a8_unorm(const GLubyte src[4], void *dst)
110 {
111 
112 
113       uint8_t r =
114             _mesa_unorm_to_unorm(src[0], 8, 8);
115 
116 
117       uint8_t g =
118             _mesa_unorm_to_unorm(src[1], 8, 8);
119 
120 
121       uint8_t b =
122             _mesa_unorm_to_unorm(src[2], 8, 8);
123 
124 
125       uint8_t a =
126             _mesa_unorm_to_unorm(src[3], 8, 8);
127 
128       uint32_t d = 0;
129          d |= PACK(r, 0, 8);
130          d |= PACK(g, 8, 8);
131          d |= PACK(b, 16, 8);
132          d |= PACK(a, 24, 8);
133       (*(uint32_t *)dst) = d;
134 }
135 
136 static inline void
pack_ubyte_r8g8b8x8_unorm(const GLubyte src[4],void * dst)137 pack_ubyte_r8g8b8x8_unorm(const GLubyte src[4], void *dst)
138 {
139 
140 
141       uint8_t r =
142             _mesa_unorm_to_unorm(src[0], 8, 8);
143 
144 
145       uint8_t g =
146             _mesa_unorm_to_unorm(src[1], 8, 8);
147 
148 
149       uint8_t b =
150             _mesa_unorm_to_unorm(src[2], 8, 8);
151 
152 
153       uint32_t d = 0;
154          d |= PACK(r, 0, 8);
155          d |= PACK(g, 8, 8);
156          d |= PACK(b, 16, 8);
157                   (*(uint32_t *)dst) = d;
158 }
159 
160 static inline void
pack_ubyte_b8g8r8a8_unorm(const GLubyte src[4],void * dst)161 pack_ubyte_b8g8r8a8_unorm(const GLubyte src[4], void *dst)
162 {
163 
164 
165       uint8_t b =
166             _mesa_unorm_to_unorm(src[2], 8, 8);
167 
168 
169       uint8_t g =
170             _mesa_unorm_to_unorm(src[1], 8, 8);
171 
172 
173       uint8_t r =
174             _mesa_unorm_to_unorm(src[0], 8, 8);
175 
176 
177       uint8_t a =
178             _mesa_unorm_to_unorm(src[3], 8, 8);
179 
180       uint32_t d = 0;
181          d |= PACK(b, 0, 8);
182          d |= PACK(g, 8, 8);
183          d |= PACK(r, 16, 8);
184          d |= PACK(a, 24, 8);
185       (*(uint32_t *)dst) = d;
186 }
187 
188 static inline void
pack_ubyte_b8g8r8x8_unorm(const GLubyte src[4],void * dst)189 pack_ubyte_b8g8r8x8_unorm(const GLubyte src[4], void *dst)
190 {
191 
192 
193       uint8_t b =
194             _mesa_unorm_to_unorm(src[2], 8, 8);
195 
196 
197       uint8_t g =
198             _mesa_unorm_to_unorm(src[1], 8, 8);
199 
200 
201       uint8_t r =
202             _mesa_unorm_to_unorm(src[0], 8, 8);
203 
204 
205       uint32_t d = 0;
206          d |= PACK(b, 0, 8);
207          d |= PACK(g, 8, 8);
208          d |= PACK(r, 16, 8);
209                   (*(uint32_t *)dst) = d;
210 }
211 
212 static inline void
pack_ubyte_a8r8g8b8_unorm(const GLubyte src[4],void * dst)213 pack_ubyte_a8r8g8b8_unorm(const GLubyte src[4], void *dst)
214 {
215 
216 
217       uint8_t a =
218             _mesa_unorm_to_unorm(src[3], 8, 8);
219 
220 
221       uint8_t r =
222             _mesa_unorm_to_unorm(src[0], 8, 8);
223 
224 
225       uint8_t g =
226             _mesa_unorm_to_unorm(src[1], 8, 8);
227 
228 
229       uint8_t b =
230             _mesa_unorm_to_unorm(src[2], 8, 8);
231 
232       uint32_t d = 0;
233          d |= PACK(a, 0, 8);
234          d |= PACK(r, 8, 8);
235          d |= PACK(g, 16, 8);
236          d |= PACK(b, 24, 8);
237       (*(uint32_t *)dst) = d;
238 }
239 
240 static inline void
pack_ubyte_x8r8g8b8_unorm(const GLubyte src[4],void * dst)241 pack_ubyte_x8r8g8b8_unorm(const GLubyte src[4], void *dst)
242 {
243 
244 
245 
246       uint8_t r =
247             _mesa_unorm_to_unorm(src[0], 8, 8);
248 
249 
250       uint8_t g =
251             _mesa_unorm_to_unorm(src[1], 8, 8);
252 
253 
254       uint8_t b =
255             _mesa_unorm_to_unorm(src[2], 8, 8);
256 
257       uint32_t d = 0;
258                      d |= PACK(r, 8, 8);
259          d |= PACK(g, 16, 8);
260          d |= PACK(b, 24, 8);
261       (*(uint32_t *)dst) = d;
262 }
263 
264 static inline void
pack_ubyte_l16a16_unorm(const GLubyte src[4],void * dst)265 pack_ubyte_l16a16_unorm(const GLubyte src[4], void *dst)
266 {
267 
268 
269       uint16_t l =
270             _mesa_unorm_to_unorm(src[0], 8, 16);
271 
272 
273       uint16_t a =
274             _mesa_unorm_to_unorm(src[3], 8, 16);
275 
276       uint32_t d = 0;
277          d |= PACK(l, 0, 16);
278          d |= PACK(a, 16, 16);
279       (*(uint32_t *)dst) = d;
280 }
281 
282 static inline void
pack_ubyte_a16l16_unorm(const GLubyte src[4],void * dst)283 pack_ubyte_a16l16_unorm(const GLubyte src[4], void *dst)
284 {
285 
286 
287       uint16_t a =
288             _mesa_unorm_to_unorm(src[3], 8, 16);
289 
290 
291       uint16_t l =
292             _mesa_unorm_to_unorm(src[0], 8, 16);
293 
294       uint32_t d = 0;
295          d |= PACK(a, 0, 16);
296          d |= PACK(l, 16, 16);
297       (*(uint32_t *)dst) = d;
298 }
299 
300 static inline void
pack_ubyte_b5g6r5_unorm(const GLubyte src[4],void * dst)301 pack_ubyte_b5g6r5_unorm(const GLubyte src[4], void *dst)
302 {
303 
304 
305       uint8_t b =
306             _mesa_unorm_to_unorm(src[2], 8, 5);
307 
308 
309       uint8_t g =
310             _mesa_unorm_to_unorm(src[1], 8, 6);
311 
312 
313       uint8_t r =
314             _mesa_unorm_to_unorm(src[0], 8, 5);
315 
316       uint16_t d = 0;
317          d |= PACK(b, 0, 5);
318          d |= PACK(g, 5, 6);
319          d |= PACK(r, 11, 5);
320       (*(uint16_t *)dst) = d;
321 }
322 
323 static inline void
pack_ubyte_r5g6b5_unorm(const GLubyte src[4],void * dst)324 pack_ubyte_r5g6b5_unorm(const GLubyte src[4], void *dst)
325 {
326 
327 
328       uint8_t r =
329             _mesa_unorm_to_unorm(src[0], 8, 5);
330 
331 
332       uint8_t g =
333             _mesa_unorm_to_unorm(src[1], 8, 6);
334 
335 
336       uint8_t b =
337             _mesa_unorm_to_unorm(src[2], 8, 5);
338 
339       uint16_t d = 0;
340          d |= PACK(r, 0, 5);
341          d |= PACK(g, 5, 6);
342          d |= PACK(b, 11, 5);
343       (*(uint16_t *)dst) = d;
344 }
345 
346 static inline void
pack_ubyte_b4g4r4a4_unorm(const GLubyte src[4],void * dst)347 pack_ubyte_b4g4r4a4_unorm(const GLubyte src[4], void *dst)
348 {
349 
350 
351       uint8_t b =
352             _mesa_unorm_to_unorm(src[2], 8, 4);
353 
354 
355       uint8_t g =
356             _mesa_unorm_to_unorm(src[1], 8, 4);
357 
358 
359       uint8_t r =
360             _mesa_unorm_to_unorm(src[0], 8, 4);
361 
362 
363       uint8_t a =
364             _mesa_unorm_to_unorm(src[3], 8, 4);
365 
366       uint16_t d = 0;
367          d |= PACK(b, 0, 4);
368          d |= PACK(g, 4, 4);
369          d |= PACK(r, 8, 4);
370          d |= PACK(a, 12, 4);
371       (*(uint16_t *)dst) = d;
372 }
373 
374 static inline void
pack_ubyte_b4g4r4x4_unorm(const GLubyte src[4],void * dst)375 pack_ubyte_b4g4r4x4_unorm(const GLubyte src[4], void *dst)
376 {
377 
378 
379       uint8_t b =
380             _mesa_unorm_to_unorm(src[2], 8, 4);
381 
382 
383       uint8_t g =
384             _mesa_unorm_to_unorm(src[1], 8, 4);
385 
386 
387       uint8_t r =
388             _mesa_unorm_to_unorm(src[0], 8, 4);
389 
390 
391       uint16_t d = 0;
392          d |= PACK(b, 0, 4);
393          d |= PACK(g, 4, 4);
394          d |= PACK(r, 8, 4);
395                   (*(uint16_t *)dst) = d;
396 }
397 
398 static inline void
pack_ubyte_a4r4g4b4_unorm(const GLubyte src[4],void * dst)399 pack_ubyte_a4r4g4b4_unorm(const GLubyte src[4], void *dst)
400 {
401 
402 
403       uint8_t a =
404             _mesa_unorm_to_unorm(src[3], 8, 4);
405 
406 
407       uint8_t r =
408             _mesa_unorm_to_unorm(src[0], 8, 4);
409 
410 
411       uint8_t g =
412             _mesa_unorm_to_unorm(src[1], 8, 4);
413 
414 
415       uint8_t b =
416             _mesa_unorm_to_unorm(src[2], 8, 4);
417 
418       uint16_t d = 0;
419          d |= PACK(a, 0, 4);
420          d |= PACK(r, 4, 4);
421          d |= PACK(g, 8, 4);
422          d |= PACK(b, 12, 4);
423       (*(uint16_t *)dst) = d;
424 }
425 
426 static inline void
pack_ubyte_a1b5g5r5_unorm(const GLubyte src[4],void * dst)427 pack_ubyte_a1b5g5r5_unorm(const GLubyte src[4], void *dst)
428 {
429 
430 
431       uint8_t a =
432             _mesa_unorm_to_unorm(src[3], 8, 1);
433 
434 
435       uint8_t b =
436             _mesa_unorm_to_unorm(src[2], 8, 5);
437 
438 
439       uint8_t g =
440             _mesa_unorm_to_unorm(src[1], 8, 5);
441 
442 
443       uint8_t r =
444             _mesa_unorm_to_unorm(src[0], 8, 5);
445 
446       uint16_t d = 0;
447          d |= PACK(a, 0, 1);
448          d |= PACK(b, 1, 5);
449          d |= PACK(g, 6, 5);
450          d |= PACK(r, 11, 5);
451       (*(uint16_t *)dst) = d;
452 }
453 
454 static inline void
pack_ubyte_b5g5r5a1_unorm(const GLubyte src[4],void * dst)455 pack_ubyte_b5g5r5a1_unorm(const GLubyte src[4], void *dst)
456 {
457 
458 
459       uint8_t b =
460             _mesa_unorm_to_unorm(src[2], 8, 5);
461 
462 
463       uint8_t g =
464             _mesa_unorm_to_unorm(src[1], 8, 5);
465 
466 
467       uint8_t r =
468             _mesa_unorm_to_unorm(src[0], 8, 5);
469 
470 
471       uint8_t a =
472             _mesa_unorm_to_unorm(src[3], 8, 1);
473 
474       uint16_t d = 0;
475          d |= PACK(b, 0, 5);
476          d |= PACK(g, 5, 5);
477          d |= PACK(r, 10, 5);
478          d |= PACK(a, 15, 1);
479       (*(uint16_t *)dst) = d;
480 }
481 
482 static inline void
pack_ubyte_b5g5r5x1_unorm(const GLubyte src[4],void * dst)483 pack_ubyte_b5g5r5x1_unorm(const GLubyte src[4], void *dst)
484 {
485 
486 
487       uint8_t b =
488             _mesa_unorm_to_unorm(src[2], 8, 5);
489 
490 
491       uint8_t g =
492             _mesa_unorm_to_unorm(src[1], 8, 5);
493 
494 
495       uint8_t r =
496             _mesa_unorm_to_unorm(src[0], 8, 5);
497 
498 
499       uint16_t d = 0;
500          d |= PACK(b, 0, 5);
501          d |= PACK(g, 5, 5);
502          d |= PACK(r, 10, 5);
503                   (*(uint16_t *)dst) = d;
504 }
505 
506 static inline void
pack_ubyte_a1r5g5b5_unorm(const GLubyte src[4],void * dst)507 pack_ubyte_a1r5g5b5_unorm(const GLubyte src[4], void *dst)
508 {
509 
510 
511       uint8_t a =
512             _mesa_unorm_to_unorm(src[3], 8, 1);
513 
514 
515       uint8_t r =
516             _mesa_unorm_to_unorm(src[0], 8, 5);
517 
518 
519       uint8_t g =
520             _mesa_unorm_to_unorm(src[1], 8, 5);
521 
522 
523       uint8_t b =
524             _mesa_unorm_to_unorm(src[2], 8, 5);
525 
526       uint16_t d = 0;
527          d |= PACK(a, 0, 1);
528          d |= PACK(r, 1, 5);
529          d |= PACK(g, 6, 5);
530          d |= PACK(b, 11, 5);
531       (*(uint16_t *)dst) = d;
532 }
533 
534 static inline void
pack_ubyte_l8a8_unorm(const GLubyte src[4],void * dst)535 pack_ubyte_l8a8_unorm(const GLubyte src[4], void *dst)
536 {
537 
538 
539       uint8_t l =
540             _mesa_unorm_to_unorm(src[0], 8, 8);
541 
542 
543       uint8_t a =
544             _mesa_unorm_to_unorm(src[3], 8, 8);
545 
546       uint16_t d = 0;
547          d |= PACK(l, 0, 8);
548          d |= PACK(a, 8, 8);
549       (*(uint16_t *)dst) = d;
550 }
551 
552 static inline void
pack_ubyte_a8l8_unorm(const GLubyte src[4],void * dst)553 pack_ubyte_a8l8_unorm(const GLubyte src[4], void *dst)
554 {
555 
556 
557       uint8_t a =
558             _mesa_unorm_to_unorm(src[3], 8, 8);
559 
560 
561       uint8_t l =
562             _mesa_unorm_to_unorm(src[0], 8, 8);
563 
564       uint16_t d = 0;
565          d |= PACK(a, 0, 8);
566          d |= PACK(l, 8, 8);
567       (*(uint16_t *)dst) = d;
568 }
569 
570 static inline void
pack_ubyte_r8g8_unorm(const GLubyte src[4],void * dst)571 pack_ubyte_r8g8_unorm(const GLubyte src[4], void *dst)
572 {
573 
574 
575       uint8_t r =
576             _mesa_unorm_to_unorm(src[0], 8, 8);
577 
578 
579       uint8_t g =
580             _mesa_unorm_to_unorm(src[1], 8, 8);
581 
582       uint16_t d = 0;
583          d |= PACK(r, 0, 8);
584          d |= PACK(g, 8, 8);
585       (*(uint16_t *)dst) = d;
586 }
587 
588 static inline void
pack_ubyte_g8r8_unorm(const GLubyte src[4],void * dst)589 pack_ubyte_g8r8_unorm(const GLubyte src[4], void *dst)
590 {
591 
592 
593       uint8_t g =
594             _mesa_unorm_to_unorm(src[1], 8, 8);
595 
596 
597       uint8_t r =
598             _mesa_unorm_to_unorm(src[0], 8, 8);
599 
600       uint16_t d = 0;
601          d |= PACK(g, 0, 8);
602          d |= PACK(r, 8, 8);
603       (*(uint16_t *)dst) = d;
604 }
605 
606 static inline void
pack_ubyte_l4a4_unorm(const GLubyte src[4],void * dst)607 pack_ubyte_l4a4_unorm(const GLubyte src[4], void *dst)
608 {
609 
610 
611       uint8_t l =
612             _mesa_unorm_to_unorm(src[0], 8, 4);
613 
614 
615       uint8_t a =
616             _mesa_unorm_to_unorm(src[3], 8, 4);
617 
618       uint8_t d = 0;
619          d |= PACK(l, 0, 4);
620          d |= PACK(a, 4, 4);
621       (*(uint8_t *)dst) = d;
622 }
623 
624 static inline void
pack_ubyte_b2g3r3_unorm(const GLubyte src[4],void * dst)625 pack_ubyte_b2g3r3_unorm(const GLubyte src[4], void *dst)
626 {
627 
628 
629       uint8_t b =
630             _mesa_unorm_to_unorm(src[2], 8, 2);
631 
632 
633       uint8_t g =
634             _mesa_unorm_to_unorm(src[1], 8, 3);
635 
636 
637       uint8_t r =
638             _mesa_unorm_to_unorm(src[0], 8, 3);
639 
640       uint8_t d = 0;
641          d |= PACK(b, 0, 2);
642          d |= PACK(g, 2, 3);
643          d |= PACK(r, 5, 3);
644       (*(uint8_t *)dst) = d;
645 }
646 
647 static inline void
pack_ubyte_r16g16_unorm(const GLubyte src[4],void * dst)648 pack_ubyte_r16g16_unorm(const GLubyte src[4], void *dst)
649 {
650 
651 
652       uint16_t r =
653             _mesa_unorm_to_unorm(src[0], 8, 16);
654 
655 
656       uint16_t g =
657             _mesa_unorm_to_unorm(src[1], 8, 16);
658 
659       uint32_t d = 0;
660          d |= PACK(r, 0, 16);
661          d |= PACK(g, 16, 16);
662       (*(uint32_t *)dst) = d;
663 }
664 
665 static inline void
pack_ubyte_g16r16_unorm(const GLubyte src[4],void * dst)666 pack_ubyte_g16r16_unorm(const GLubyte src[4], void *dst)
667 {
668 
669 
670       uint16_t g =
671             _mesa_unorm_to_unorm(src[1], 8, 16);
672 
673 
674       uint16_t r =
675             _mesa_unorm_to_unorm(src[0], 8, 16);
676 
677       uint32_t d = 0;
678          d |= PACK(g, 0, 16);
679          d |= PACK(r, 16, 16);
680       (*(uint32_t *)dst) = d;
681 }
682 
683 static inline void
pack_ubyte_b10g10r10a2_unorm(const GLubyte src[4],void * dst)684 pack_ubyte_b10g10r10a2_unorm(const GLubyte src[4], void *dst)
685 {
686 
687 
688       uint16_t b =
689             _mesa_unorm_to_unorm(src[2], 8, 10);
690 
691 
692       uint16_t g =
693             _mesa_unorm_to_unorm(src[1], 8, 10);
694 
695 
696       uint16_t r =
697             _mesa_unorm_to_unorm(src[0], 8, 10);
698 
699 
700       uint8_t a =
701             _mesa_unorm_to_unorm(src[3], 8, 2);
702 
703       uint32_t d = 0;
704          d |= PACK(b, 0, 10);
705          d |= PACK(g, 10, 10);
706          d |= PACK(r, 20, 10);
707          d |= PACK(a, 30, 2);
708       (*(uint32_t *)dst) = d;
709 }
710 
711 static inline void
pack_ubyte_b10g10r10x2_unorm(const GLubyte src[4],void * dst)712 pack_ubyte_b10g10r10x2_unorm(const GLubyte src[4], void *dst)
713 {
714 
715 
716       uint16_t b =
717             _mesa_unorm_to_unorm(src[2], 8, 10);
718 
719 
720       uint16_t g =
721             _mesa_unorm_to_unorm(src[1], 8, 10);
722 
723 
724       uint16_t r =
725             _mesa_unorm_to_unorm(src[0], 8, 10);
726 
727 
728       uint32_t d = 0;
729          d |= PACK(b, 0, 10);
730          d |= PACK(g, 10, 10);
731          d |= PACK(r, 20, 10);
732                   (*(uint32_t *)dst) = d;
733 }
734 
735 static inline void
pack_ubyte_r10g10b10a2_unorm(const GLubyte src[4],void * dst)736 pack_ubyte_r10g10b10a2_unorm(const GLubyte src[4], void *dst)
737 {
738 
739 
740       uint16_t r =
741             _mesa_unorm_to_unorm(src[0], 8, 10);
742 
743 
744       uint16_t g =
745             _mesa_unorm_to_unorm(src[1], 8, 10);
746 
747 
748       uint16_t b =
749             _mesa_unorm_to_unorm(src[2], 8, 10);
750 
751 
752       uint8_t a =
753             _mesa_unorm_to_unorm(src[3], 8, 2);
754 
755       uint32_t d = 0;
756          d |= PACK(r, 0, 10);
757          d |= PACK(g, 10, 10);
758          d |= PACK(b, 20, 10);
759          d |= PACK(a, 30, 2);
760       (*(uint32_t *)dst) = d;
761 }
762 
763 static inline void
pack_ubyte_r10g10b10x2_unorm(const GLubyte src[4],void * dst)764 pack_ubyte_r10g10b10x2_unorm(const GLubyte src[4], void *dst)
765 {
766 
767 
768       uint16_t r =
769             _mesa_unorm_to_unorm(src[0], 8, 10);
770 
771 
772       uint16_t g =
773             _mesa_unorm_to_unorm(src[1], 8, 10);
774 
775 
776       uint16_t b =
777             _mesa_unorm_to_unorm(src[2], 8, 10);
778 
779 
780       uint32_t d = 0;
781          d |= PACK(r, 0, 10);
782          d |= PACK(g, 10, 10);
783          d |= PACK(b, 20, 10);
784                   (*(uint32_t *)dst) = d;
785 }
786 
787 static inline void
pack_ubyte_r3g3b2_unorm(const GLubyte src[4],void * dst)788 pack_ubyte_r3g3b2_unorm(const GLubyte src[4], void *dst)
789 {
790 
791 
792       uint8_t r =
793             _mesa_unorm_to_unorm(src[0], 8, 3);
794 
795 
796       uint8_t g =
797             _mesa_unorm_to_unorm(src[1], 8, 3);
798 
799 
800       uint8_t b =
801             _mesa_unorm_to_unorm(src[2], 8, 2);
802 
803       uint8_t d = 0;
804          d |= PACK(r, 0, 3);
805          d |= PACK(g, 3, 3);
806          d |= PACK(b, 6, 2);
807       (*(uint8_t *)dst) = d;
808 }
809 
810 static inline void
pack_ubyte_a4b4g4r4_unorm(const GLubyte src[4],void * dst)811 pack_ubyte_a4b4g4r4_unorm(const GLubyte src[4], void *dst)
812 {
813 
814 
815       uint8_t a =
816             _mesa_unorm_to_unorm(src[3], 8, 4);
817 
818 
819       uint8_t b =
820             _mesa_unorm_to_unorm(src[2], 8, 4);
821 
822 
823       uint8_t g =
824             _mesa_unorm_to_unorm(src[1], 8, 4);
825 
826 
827       uint8_t r =
828             _mesa_unorm_to_unorm(src[0], 8, 4);
829 
830       uint16_t d = 0;
831          d |= PACK(a, 0, 4);
832          d |= PACK(b, 4, 4);
833          d |= PACK(g, 8, 4);
834          d |= PACK(r, 12, 4);
835       (*(uint16_t *)dst) = d;
836 }
837 
838 static inline void
pack_ubyte_r4g4b4a4_unorm(const GLubyte src[4],void * dst)839 pack_ubyte_r4g4b4a4_unorm(const GLubyte src[4], void *dst)
840 {
841 
842 
843       uint8_t r =
844             _mesa_unorm_to_unorm(src[0], 8, 4);
845 
846 
847       uint8_t g =
848             _mesa_unorm_to_unorm(src[1], 8, 4);
849 
850 
851       uint8_t b =
852             _mesa_unorm_to_unorm(src[2], 8, 4);
853 
854 
855       uint8_t a =
856             _mesa_unorm_to_unorm(src[3], 8, 4);
857 
858       uint16_t d = 0;
859          d |= PACK(r, 0, 4);
860          d |= PACK(g, 4, 4);
861          d |= PACK(b, 8, 4);
862          d |= PACK(a, 12, 4);
863       (*(uint16_t *)dst) = d;
864 }
865 
866 static inline void
pack_ubyte_r5g5b5a1_unorm(const GLubyte src[4],void * dst)867 pack_ubyte_r5g5b5a1_unorm(const GLubyte src[4], void *dst)
868 {
869 
870 
871       uint8_t r =
872             _mesa_unorm_to_unorm(src[0], 8, 5);
873 
874 
875       uint8_t g =
876             _mesa_unorm_to_unorm(src[1], 8, 5);
877 
878 
879       uint8_t b =
880             _mesa_unorm_to_unorm(src[2], 8, 5);
881 
882 
883       uint8_t a =
884             _mesa_unorm_to_unorm(src[3], 8, 1);
885 
886       uint16_t d = 0;
887          d |= PACK(r, 0, 5);
888          d |= PACK(g, 5, 5);
889          d |= PACK(b, 10, 5);
890          d |= PACK(a, 15, 1);
891       (*(uint16_t *)dst) = d;
892 }
893 
894 static inline void
pack_ubyte_a2b10g10r10_unorm(const GLubyte src[4],void * dst)895 pack_ubyte_a2b10g10r10_unorm(const GLubyte src[4], void *dst)
896 {
897 
898 
899       uint8_t a =
900             _mesa_unorm_to_unorm(src[3], 8, 2);
901 
902 
903       uint16_t b =
904             _mesa_unorm_to_unorm(src[2], 8, 10);
905 
906 
907       uint16_t g =
908             _mesa_unorm_to_unorm(src[1], 8, 10);
909 
910 
911       uint16_t r =
912             _mesa_unorm_to_unorm(src[0], 8, 10);
913 
914       uint32_t d = 0;
915          d |= PACK(a, 0, 2);
916          d |= PACK(b, 2, 10);
917          d |= PACK(g, 12, 10);
918          d |= PACK(r, 22, 10);
919       (*(uint32_t *)dst) = d;
920 }
921 
922 static inline void
pack_ubyte_a2r10g10b10_unorm(const GLubyte src[4],void * dst)923 pack_ubyte_a2r10g10b10_unorm(const GLubyte src[4], void *dst)
924 {
925 
926 
927       uint8_t a =
928             _mesa_unorm_to_unorm(src[3], 8, 2);
929 
930 
931       uint16_t r =
932             _mesa_unorm_to_unorm(src[0], 8, 10);
933 
934 
935       uint16_t g =
936             _mesa_unorm_to_unorm(src[1], 8, 10);
937 
938 
939       uint16_t b =
940             _mesa_unorm_to_unorm(src[2], 8, 10);
941 
942       uint32_t d = 0;
943          d |= PACK(a, 0, 2);
944          d |= PACK(r, 2, 10);
945          d |= PACK(g, 12, 10);
946          d |= PACK(b, 22, 10);
947       (*(uint32_t *)dst) = d;
948 }
949 
950 static inline void
pack_ubyte_a_unorm8(const GLubyte src[4],void * dst)951 pack_ubyte_a_unorm8(const GLubyte src[4], void *dst)
952 {
953 
954 
955       uint8_t a =
956             _mesa_unorm_to_unorm(src[3], 8, 8);
957 
958       uint8_t *d = (uint8_t *)dst;
959          d[0] = a;
960 }
961 
962 static inline void
pack_ubyte_a_unorm16(const GLubyte src[4],void * dst)963 pack_ubyte_a_unorm16(const GLubyte src[4], void *dst)
964 {
965 
966 
967       uint16_t a =
968             _mesa_unorm_to_unorm(src[3], 8, 16);
969 
970       uint16_t *d = (uint16_t *)dst;
971          d[0] = a;
972 }
973 
974 static inline void
pack_ubyte_l_unorm8(const GLubyte src[4],void * dst)975 pack_ubyte_l_unorm8(const GLubyte src[4], void *dst)
976 {
977 
978 
979       uint8_t l =
980             _mesa_unorm_to_unorm(src[0], 8, 8);
981 
982       uint8_t *d = (uint8_t *)dst;
983          d[0] = l;
984 }
985 
986 static inline void
pack_ubyte_l_unorm16(const GLubyte src[4],void * dst)987 pack_ubyte_l_unorm16(const GLubyte src[4], void *dst)
988 {
989 
990 
991       uint16_t l =
992             _mesa_unorm_to_unorm(src[0], 8, 16);
993 
994       uint16_t *d = (uint16_t *)dst;
995          d[0] = l;
996 }
997 
998 static inline void
pack_ubyte_i_unorm8(const GLubyte src[4],void * dst)999 pack_ubyte_i_unorm8(const GLubyte src[4], void *dst)
1000 {
1001 
1002 
1003       uint8_t i =
1004             _mesa_unorm_to_unorm(src[0], 8, 8);
1005 
1006       uint8_t *d = (uint8_t *)dst;
1007          d[0] = i;
1008 }
1009 
1010 static inline void
pack_ubyte_i_unorm16(const GLubyte src[4],void * dst)1011 pack_ubyte_i_unorm16(const GLubyte src[4], void *dst)
1012 {
1013 
1014 
1015       uint16_t i =
1016             _mesa_unorm_to_unorm(src[0], 8, 16);
1017 
1018       uint16_t *d = (uint16_t *)dst;
1019          d[0] = i;
1020 }
1021 
1022 static inline void
pack_ubyte_r_unorm8(const GLubyte src[4],void * dst)1023 pack_ubyte_r_unorm8(const GLubyte src[4], void *dst)
1024 {
1025 
1026 
1027       uint8_t r =
1028             _mesa_unorm_to_unorm(src[0], 8, 8);
1029 
1030       uint8_t *d = (uint8_t *)dst;
1031          d[0] = r;
1032 }
1033 
1034 static inline void
pack_ubyte_r_unorm16(const GLubyte src[4],void * dst)1035 pack_ubyte_r_unorm16(const GLubyte src[4], void *dst)
1036 {
1037 
1038 
1039       uint16_t r =
1040             _mesa_unorm_to_unorm(src[0], 8, 16);
1041 
1042       uint16_t *d = (uint16_t *)dst;
1043          d[0] = r;
1044 }
1045 
1046 static inline void
pack_ubyte_bgr_unorm8(const GLubyte src[4],void * dst)1047 pack_ubyte_bgr_unorm8(const GLubyte src[4], void *dst)
1048 {
1049 
1050 
1051       uint8_t b =
1052             _mesa_unorm_to_unorm(src[2], 8, 8);
1053 
1054 
1055       uint8_t g =
1056             _mesa_unorm_to_unorm(src[1], 8, 8);
1057 
1058 
1059       uint8_t r =
1060             _mesa_unorm_to_unorm(src[0], 8, 8);
1061 
1062       uint8_t *d = (uint8_t *)dst;
1063          d[0] = b;
1064          d[1] = g;
1065          d[2] = r;
1066 }
1067 
1068 static inline void
pack_ubyte_rgb_unorm8(const GLubyte src[4],void * dst)1069 pack_ubyte_rgb_unorm8(const GLubyte src[4], void *dst)
1070 {
1071 
1072 
1073       uint8_t r =
1074             _mesa_unorm_to_unorm(src[0], 8, 8);
1075 
1076 
1077       uint8_t g =
1078             _mesa_unorm_to_unorm(src[1], 8, 8);
1079 
1080 
1081       uint8_t b =
1082             _mesa_unorm_to_unorm(src[2], 8, 8);
1083 
1084       uint8_t *d = (uint8_t *)dst;
1085          d[0] = r;
1086          d[1] = g;
1087          d[2] = b;
1088 }
1089 
1090 static inline void
pack_ubyte_rgba_unorm16(const GLubyte src[4],void * dst)1091 pack_ubyte_rgba_unorm16(const GLubyte src[4], void *dst)
1092 {
1093 
1094 
1095       uint16_t r =
1096             _mesa_unorm_to_unorm(src[0], 8, 16);
1097 
1098 
1099       uint16_t g =
1100             _mesa_unorm_to_unorm(src[1], 8, 16);
1101 
1102 
1103       uint16_t b =
1104             _mesa_unorm_to_unorm(src[2], 8, 16);
1105 
1106 
1107       uint16_t a =
1108             _mesa_unorm_to_unorm(src[3], 8, 16);
1109 
1110       uint16_t *d = (uint16_t *)dst;
1111          d[0] = r;
1112          d[1] = g;
1113          d[2] = b;
1114          d[3] = a;
1115 }
1116 
1117 static inline void
pack_ubyte_rgbx_unorm16(const GLubyte src[4],void * dst)1118 pack_ubyte_rgbx_unorm16(const GLubyte src[4], void *dst)
1119 {
1120 
1121 
1122       uint16_t r =
1123             _mesa_unorm_to_unorm(src[0], 8, 16);
1124 
1125 
1126       uint16_t g =
1127             _mesa_unorm_to_unorm(src[1], 8, 16);
1128 
1129 
1130       uint16_t b =
1131             _mesa_unorm_to_unorm(src[2], 8, 16);
1132 
1133 
1134       uint16_t *d = (uint16_t *)dst;
1135          d[0] = r;
1136          d[1] = g;
1137          d[2] = b;
1138             }
1139 
1140 static inline void
pack_ubyte_a8b8g8r8_snorm(const GLubyte src[4],void * dst)1141 pack_ubyte_a8b8g8r8_snorm(const GLubyte src[4], void *dst)
1142 {
1143 
1144 
1145       int8_t a =
1146          _mesa_unorm_to_snorm(src[3], 8, 8);
1147 
1148 
1149       int8_t b =
1150          _mesa_unorm_to_snorm(src[2], 8, 8);
1151 
1152 
1153       int8_t g =
1154          _mesa_unorm_to_snorm(src[1], 8, 8);
1155 
1156 
1157       int8_t r =
1158          _mesa_unorm_to_snorm(src[0], 8, 8);
1159 
1160       uint32_t d = 0;
1161          d |= PACK(a, 0, 8);
1162          d |= PACK(b, 8, 8);
1163          d |= PACK(g, 16, 8);
1164          d |= PACK(r, 24, 8);
1165       (*(uint32_t *)dst) = d;
1166 }
1167 
1168 static inline void
pack_ubyte_x8b8g8r8_snorm(const GLubyte src[4],void * dst)1169 pack_ubyte_x8b8g8r8_snorm(const GLubyte src[4], void *dst)
1170 {
1171 
1172 
1173 
1174       int8_t b =
1175          _mesa_unorm_to_snorm(src[2], 8, 8);
1176 
1177 
1178       int8_t g =
1179          _mesa_unorm_to_snorm(src[1], 8, 8);
1180 
1181 
1182       int8_t r =
1183          _mesa_unorm_to_snorm(src[0], 8, 8);
1184 
1185       uint32_t d = 0;
1186                      d |= PACK(b, 8, 8);
1187          d |= PACK(g, 16, 8);
1188          d |= PACK(r, 24, 8);
1189       (*(uint32_t *)dst) = d;
1190 }
1191 
1192 static inline void
pack_ubyte_r8g8b8a8_snorm(const GLubyte src[4],void * dst)1193 pack_ubyte_r8g8b8a8_snorm(const GLubyte src[4], void *dst)
1194 {
1195 
1196 
1197       int8_t r =
1198          _mesa_unorm_to_snorm(src[0], 8, 8);
1199 
1200 
1201       int8_t g =
1202          _mesa_unorm_to_snorm(src[1], 8, 8);
1203 
1204 
1205       int8_t b =
1206          _mesa_unorm_to_snorm(src[2], 8, 8);
1207 
1208 
1209       int8_t a =
1210          _mesa_unorm_to_snorm(src[3], 8, 8);
1211 
1212       uint32_t d = 0;
1213          d |= PACK(r, 0, 8);
1214          d |= PACK(g, 8, 8);
1215          d |= PACK(b, 16, 8);
1216          d |= PACK(a, 24, 8);
1217       (*(uint32_t *)dst) = d;
1218 }
1219 
1220 static inline void
pack_ubyte_r8g8b8x8_snorm(const GLubyte src[4],void * dst)1221 pack_ubyte_r8g8b8x8_snorm(const GLubyte src[4], void *dst)
1222 {
1223 
1224 
1225       int8_t r =
1226          _mesa_unorm_to_snorm(src[0], 8, 8);
1227 
1228 
1229       int8_t g =
1230          _mesa_unorm_to_snorm(src[1], 8, 8);
1231 
1232 
1233       int8_t b =
1234          _mesa_unorm_to_snorm(src[2], 8, 8);
1235 
1236 
1237       uint32_t d = 0;
1238          d |= PACK(r, 0, 8);
1239          d |= PACK(g, 8, 8);
1240          d |= PACK(b, 16, 8);
1241                   (*(uint32_t *)dst) = d;
1242 }
1243 
1244 static inline void
pack_ubyte_r16g16_snorm(const GLubyte src[4],void * dst)1245 pack_ubyte_r16g16_snorm(const GLubyte src[4], void *dst)
1246 {
1247 
1248 
1249       int16_t r =
1250          _mesa_unorm_to_snorm(src[0], 8, 16);
1251 
1252 
1253       int16_t g =
1254          _mesa_unorm_to_snorm(src[1], 8, 16);
1255 
1256       uint32_t d = 0;
1257          d |= PACK(r, 0, 16);
1258          d |= PACK(g, 16, 16);
1259       (*(uint32_t *)dst) = d;
1260 }
1261 
1262 static inline void
pack_ubyte_g16r16_snorm(const GLubyte src[4],void * dst)1263 pack_ubyte_g16r16_snorm(const GLubyte src[4], void *dst)
1264 {
1265 
1266 
1267       int16_t g =
1268          _mesa_unorm_to_snorm(src[1], 8, 16);
1269 
1270 
1271       int16_t r =
1272          _mesa_unorm_to_snorm(src[0], 8, 16);
1273 
1274       uint32_t d = 0;
1275          d |= PACK(g, 0, 16);
1276          d |= PACK(r, 16, 16);
1277       (*(uint32_t *)dst) = d;
1278 }
1279 
1280 static inline void
pack_ubyte_r8g8_snorm(const GLubyte src[4],void * dst)1281 pack_ubyte_r8g8_snorm(const GLubyte src[4], void *dst)
1282 {
1283 
1284 
1285       int8_t r =
1286          _mesa_unorm_to_snorm(src[0], 8, 8);
1287 
1288 
1289       int8_t g =
1290          _mesa_unorm_to_snorm(src[1], 8, 8);
1291 
1292       uint16_t d = 0;
1293          d |= PACK(r, 0, 8);
1294          d |= PACK(g, 8, 8);
1295       (*(uint16_t *)dst) = d;
1296 }
1297 
1298 static inline void
pack_ubyte_g8r8_snorm(const GLubyte src[4],void * dst)1299 pack_ubyte_g8r8_snorm(const GLubyte src[4], void *dst)
1300 {
1301 
1302 
1303       int8_t g =
1304          _mesa_unorm_to_snorm(src[1], 8, 8);
1305 
1306 
1307       int8_t r =
1308          _mesa_unorm_to_snorm(src[0], 8, 8);
1309 
1310       uint16_t d = 0;
1311          d |= PACK(g, 0, 8);
1312          d |= PACK(r, 8, 8);
1313       (*(uint16_t *)dst) = d;
1314 }
1315 
1316 static inline void
pack_ubyte_l8a8_snorm(const GLubyte src[4],void * dst)1317 pack_ubyte_l8a8_snorm(const GLubyte src[4], void *dst)
1318 {
1319 
1320 
1321       int8_t l =
1322          _mesa_unorm_to_snorm(src[0], 8, 8);
1323 
1324 
1325       int8_t a =
1326          _mesa_unorm_to_snorm(src[3], 8, 8);
1327 
1328       uint16_t d = 0;
1329          d |= PACK(l, 0, 8);
1330          d |= PACK(a, 8, 8);
1331       (*(uint16_t *)dst) = d;
1332 }
1333 
1334 static inline void
pack_ubyte_a8l8_snorm(const GLubyte src[4],void * dst)1335 pack_ubyte_a8l8_snorm(const GLubyte src[4], void *dst)
1336 {
1337 
1338 
1339       int8_t a =
1340          _mesa_unorm_to_snorm(src[3], 8, 8);
1341 
1342 
1343       int8_t l =
1344          _mesa_unorm_to_snorm(src[0], 8, 8);
1345 
1346       uint16_t d = 0;
1347          d |= PACK(a, 0, 8);
1348          d |= PACK(l, 8, 8);
1349       (*(uint16_t *)dst) = d;
1350 }
1351 
1352 static inline void
pack_ubyte_a_snorm8(const GLubyte src[4],void * dst)1353 pack_ubyte_a_snorm8(const GLubyte src[4], void *dst)
1354 {
1355 
1356 
1357       int8_t a =
1358          _mesa_unorm_to_snorm(src[3], 8, 8);
1359 
1360       int8_t *d = (int8_t *)dst;
1361          d[0] = a;
1362 }
1363 
1364 static inline void
pack_ubyte_a_snorm16(const GLubyte src[4],void * dst)1365 pack_ubyte_a_snorm16(const GLubyte src[4], void *dst)
1366 {
1367 
1368 
1369       int16_t a =
1370          _mesa_unorm_to_snorm(src[3], 8, 16);
1371 
1372       int16_t *d = (int16_t *)dst;
1373          d[0] = a;
1374 }
1375 
1376 static inline void
pack_ubyte_l_snorm8(const GLubyte src[4],void * dst)1377 pack_ubyte_l_snorm8(const GLubyte src[4], void *dst)
1378 {
1379 
1380 
1381       int8_t l =
1382          _mesa_unorm_to_snorm(src[0], 8, 8);
1383 
1384       int8_t *d = (int8_t *)dst;
1385          d[0] = l;
1386 }
1387 
1388 static inline void
pack_ubyte_l_snorm16(const GLubyte src[4],void * dst)1389 pack_ubyte_l_snorm16(const GLubyte src[4], void *dst)
1390 {
1391 
1392 
1393       int16_t l =
1394          _mesa_unorm_to_snorm(src[0], 8, 16);
1395 
1396       int16_t *d = (int16_t *)dst;
1397          d[0] = l;
1398 }
1399 
1400 static inline void
pack_ubyte_i_snorm8(const GLubyte src[4],void * dst)1401 pack_ubyte_i_snorm8(const GLubyte src[4], void *dst)
1402 {
1403 
1404 
1405       int8_t i =
1406          _mesa_unorm_to_snorm(src[0], 8, 8);
1407 
1408       int8_t *d = (int8_t *)dst;
1409          d[0] = i;
1410 }
1411 
1412 static inline void
pack_ubyte_i_snorm16(const GLubyte src[4],void * dst)1413 pack_ubyte_i_snorm16(const GLubyte src[4], void *dst)
1414 {
1415 
1416 
1417       int16_t i =
1418          _mesa_unorm_to_snorm(src[0], 8, 16);
1419 
1420       int16_t *d = (int16_t *)dst;
1421          d[0] = i;
1422 }
1423 
1424 static inline void
pack_ubyte_r_snorm8(const GLubyte src[4],void * dst)1425 pack_ubyte_r_snorm8(const GLubyte src[4], void *dst)
1426 {
1427 
1428 
1429       int8_t r =
1430          _mesa_unorm_to_snorm(src[0], 8, 8);
1431 
1432       int8_t *d = (int8_t *)dst;
1433          d[0] = r;
1434 }
1435 
1436 static inline void
pack_ubyte_r_snorm16(const GLubyte src[4],void * dst)1437 pack_ubyte_r_snorm16(const GLubyte src[4], void *dst)
1438 {
1439 
1440 
1441       int16_t r =
1442          _mesa_unorm_to_snorm(src[0], 8, 16);
1443 
1444       int16_t *d = (int16_t *)dst;
1445          d[0] = r;
1446 }
1447 
1448 static inline void
pack_ubyte_la_snorm16(const GLubyte src[4],void * dst)1449 pack_ubyte_la_snorm16(const GLubyte src[4], void *dst)
1450 {
1451 
1452 
1453       int16_t l =
1454          _mesa_unorm_to_snorm(src[0], 8, 16);
1455 
1456 
1457       int16_t a =
1458          _mesa_unorm_to_snorm(src[3], 8, 16);
1459 
1460       int16_t *d = (int16_t *)dst;
1461          d[0] = l;
1462          d[1] = a;
1463 }
1464 
1465 static inline void
pack_ubyte_rgb_snorm16(const GLubyte src[4],void * dst)1466 pack_ubyte_rgb_snorm16(const GLubyte src[4], void *dst)
1467 {
1468 
1469 
1470       int16_t r =
1471          _mesa_unorm_to_snorm(src[0], 8, 16);
1472 
1473 
1474       int16_t g =
1475          _mesa_unorm_to_snorm(src[1], 8, 16);
1476 
1477 
1478       int16_t b =
1479          _mesa_unorm_to_snorm(src[2], 8, 16);
1480 
1481       int16_t *d = (int16_t *)dst;
1482          d[0] = r;
1483          d[1] = g;
1484          d[2] = b;
1485 }
1486 
1487 static inline void
pack_ubyte_rgba_snorm16(const GLubyte src[4],void * dst)1488 pack_ubyte_rgba_snorm16(const GLubyte src[4], void *dst)
1489 {
1490 
1491 
1492       int16_t r =
1493          _mesa_unorm_to_snorm(src[0], 8, 16);
1494 
1495 
1496       int16_t g =
1497          _mesa_unorm_to_snorm(src[1], 8, 16);
1498 
1499 
1500       int16_t b =
1501          _mesa_unorm_to_snorm(src[2], 8, 16);
1502 
1503 
1504       int16_t a =
1505          _mesa_unorm_to_snorm(src[3], 8, 16);
1506 
1507       int16_t *d = (int16_t *)dst;
1508          d[0] = r;
1509          d[1] = g;
1510          d[2] = b;
1511          d[3] = a;
1512 }
1513 
1514 static inline void
pack_ubyte_rgbx_snorm16(const GLubyte src[4],void * dst)1515 pack_ubyte_rgbx_snorm16(const GLubyte src[4], void *dst)
1516 {
1517 
1518 
1519       int16_t r =
1520          _mesa_unorm_to_snorm(src[0], 8, 16);
1521 
1522 
1523       int16_t g =
1524          _mesa_unorm_to_snorm(src[1], 8, 16);
1525 
1526 
1527       int16_t b =
1528          _mesa_unorm_to_snorm(src[2], 8, 16);
1529 
1530 
1531       int16_t *d = (int16_t *)dst;
1532          d[0] = r;
1533          d[1] = g;
1534          d[2] = b;
1535             }
1536 
1537 static inline void
pack_ubyte_a8b8g8r8_srgb(const GLubyte src[4],void * dst)1538 pack_ubyte_a8b8g8r8_srgb(const GLubyte src[4], void *dst)
1539 {
1540 
1541 
1542       uint8_t a =
1543             _mesa_unorm_to_unorm(src[3], 8, 8);
1544 
1545 
1546       uint8_t b =
1547 
1548             util_format_linear_to_srgb_8unorm(src[2]);
1549 
1550 
1551       uint8_t g =
1552 
1553             util_format_linear_to_srgb_8unorm(src[1]);
1554 
1555 
1556       uint8_t r =
1557 
1558             util_format_linear_to_srgb_8unorm(src[0]);
1559 
1560       uint32_t d = 0;
1561          d |= PACK(a, 0, 8);
1562          d |= PACK(b, 8, 8);
1563          d |= PACK(g, 16, 8);
1564          d |= PACK(r, 24, 8);
1565       (*(uint32_t *)dst) = d;
1566 }
1567 
1568 static inline void
pack_ubyte_b8g8r8a8_srgb(const GLubyte src[4],void * dst)1569 pack_ubyte_b8g8r8a8_srgb(const GLubyte src[4], void *dst)
1570 {
1571 
1572 
1573       uint8_t b =
1574 
1575             util_format_linear_to_srgb_8unorm(src[2]);
1576 
1577 
1578       uint8_t g =
1579 
1580             util_format_linear_to_srgb_8unorm(src[1]);
1581 
1582 
1583       uint8_t r =
1584 
1585             util_format_linear_to_srgb_8unorm(src[0]);
1586 
1587 
1588       uint8_t a =
1589             _mesa_unorm_to_unorm(src[3], 8, 8);
1590 
1591       uint32_t d = 0;
1592          d |= PACK(b, 0, 8);
1593          d |= PACK(g, 8, 8);
1594          d |= PACK(r, 16, 8);
1595          d |= PACK(a, 24, 8);
1596       (*(uint32_t *)dst) = d;
1597 }
1598 
1599 static inline void
pack_ubyte_a8r8g8b8_srgb(const GLubyte src[4],void * dst)1600 pack_ubyte_a8r8g8b8_srgb(const GLubyte src[4], void *dst)
1601 {
1602 
1603 
1604       uint8_t a =
1605             _mesa_unorm_to_unorm(src[3], 8, 8);
1606 
1607 
1608       uint8_t r =
1609 
1610             util_format_linear_to_srgb_8unorm(src[0]);
1611 
1612 
1613       uint8_t g =
1614 
1615             util_format_linear_to_srgb_8unorm(src[1]);
1616 
1617 
1618       uint8_t b =
1619 
1620             util_format_linear_to_srgb_8unorm(src[2]);
1621 
1622       uint32_t d = 0;
1623          d |= PACK(a, 0, 8);
1624          d |= PACK(r, 8, 8);
1625          d |= PACK(g, 16, 8);
1626          d |= PACK(b, 24, 8);
1627       (*(uint32_t *)dst) = d;
1628 }
1629 
1630 static inline void
pack_ubyte_b8g8r8x8_srgb(const GLubyte src[4],void * dst)1631 pack_ubyte_b8g8r8x8_srgb(const GLubyte src[4], void *dst)
1632 {
1633 
1634 
1635       uint8_t b =
1636 
1637             util_format_linear_to_srgb_8unorm(src[2]);
1638 
1639 
1640       uint8_t g =
1641 
1642             util_format_linear_to_srgb_8unorm(src[1]);
1643 
1644 
1645       uint8_t r =
1646 
1647             util_format_linear_to_srgb_8unorm(src[0]);
1648 
1649 
1650       uint32_t d = 0;
1651          d |= PACK(b, 0, 8);
1652          d |= PACK(g, 8, 8);
1653          d |= PACK(r, 16, 8);
1654                   (*(uint32_t *)dst) = d;
1655 }
1656 
1657 static inline void
pack_ubyte_x8r8g8b8_srgb(const GLubyte src[4],void * dst)1658 pack_ubyte_x8r8g8b8_srgb(const GLubyte src[4], void *dst)
1659 {
1660 
1661 
1662 
1663       uint8_t r =
1664 
1665             util_format_linear_to_srgb_8unorm(src[0]);
1666 
1667 
1668       uint8_t g =
1669 
1670             util_format_linear_to_srgb_8unorm(src[1]);
1671 
1672 
1673       uint8_t b =
1674 
1675             util_format_linear_to_srgb_8unorm(src[2]);
1676 
1677       uint32_t d = 0;
1678                      d |= PACK(r, 8, 8);
1679          d |= PACK(g, 16, 8);
1680          d |= PACK(b, 24, 8);
1681       (*(uint32_t *)dst) = d;
1682 }
1683 
1684 static inline void
pack_ubyte_r8g8b8a8_srgb(const GLubyte src[4],void * dst)1685 pack_ubyte_r8g8b8a8_srgb(const GLubyte src[4], void *dst)
1686 {
1687 
1688 
1689       uint8_t r =
1690 
1691             util_format_linear_to_srgb_8unorm(src[0]);
1692 
1693 
1694       uint8_t g =
1695 
1696             util_format_linear_to_srgb_8unorm(src[1]);
1697 
1698 
1699       uint8_t b =
1700 
1701             util_format_linear_to_srgb_8unorm(src[2]);
1702 
1703 
1704       uint8_t a =
1705             _mesa_unorm_to_unorm(src[3], 8, 8);
1706 
1707       uint32_t d = 0;
1708          d |= PACK(r, 0, 8);
1709          d |= PACK(g, 8, 8);
1710          d |= PACK(b, 16, 8);
1711          d |= PACK(a, 24, 8);
1712       (*(uint32_t *)dst) = d;
1713 }
1714 
1715 static inline void
pack_ubyte_r8g8b8x8_srgb(const GLubyte src[4],void * dst)1716 pack_ubyte_r8g8b8x8_srgb(const GLubyte src[4], void *dst)
1717 {
1718 
1719 
1720       uint8_t r =
1721 
1722             util_format_linear_to_srgb_8unorm(src[0]);
1723 
1724 
1725       uint8_t g =
1726 
1727             util_format_linear_to_srgb_8unorm(src[1]);
1728 
1729 
1730       uint8_t b =
1731 
1732             util_format_linear_to_srgb_8unorm(src[2]);
1733 
1734 
1735       uint32_t d = 0;
1736          d |= PACK(r, 0, 8);
1737          d |= PACK(g, 8, 8);
1738          d |= PACK(b, 16, 8);
1739                   (*(uint32_t *)dst) = d;
1740 }
1741 
1742 static inline void
pack_ubyte_x8b8g8r8_srgb(const GLubyte src[4],void * dst)1743 pack_ubyte_x8b8g8r8_srgb(const GLubyte src[4], void *dst)
1744 {
1745 
1746 
1747 
1748       uint8_t b =
1749 
1750             util_format_linear_to_srgb_8unorm(src[2]);
1751 
1752 
1753       uint8_t g =
1754 
1755             util_format_linear_to_srgb_8unorm(src[1]);
1756 
1757 
1758       uint8_t r =
1759 
1760             util_format_linear_to_srgb_8unorm(src[0]);
1761 
1762       uint32_t d = 0;
1763                      d |= PACK(b, 8, 8);
1764          d |= PACK(g, 16, 8);
1765          d |= PACK(r, 24, 8);
1766       (*(uint32_t *)dst) = d;
1767 }
1768 
1769 static inline void
pack_ubyte_l8a8_srgb(const GLubyte src[4],void * dst)1770 pack_ubyte_l8a8_srgb(const GLubyte src[4], void *dst)
1771 {
1772 
1773 
1774       uint8_t l =
1775             _mesa_unorm_to_unorm(src[0], 8, 8);
1776 
1777 
1778       uint8_t a =
1779             _mesa_unorm_to_unorm(src[3], 8, 8);
1780 
1781       uint16_t d = 0;
1782          d |= PACK(l, 0, 8);
1783          d |= PACK(a, 8, 8);
1784       (*(uint16_t *)dst) = d;
1785 }
1786 
1787 static inline void
pack_ubyte_a8l8_srgb(const GLubyte src[4],void * dst)1788 pack_ubyte_a8l8_srgb(const GLubyte src[4], void *dst)
1789 {
1790 
1791 
1792       uint8_t a =
1793             _mesa_unorm_to_unorm(src[3], 8, 8);
1794 
1795 
1796       uint8_t l =
1797             _mesa_unorm_to_unorm(src[0], 8, 8);
1798 
1799       uint16_t d = 0;
1800          d |= PACK(a, 0, 8);
1801          d |= PACK(l, 8, 8);
1802       (*(uint16_t *)dst) = d;
1803 }
1804 
1805 static inline void
pack_ubyte_l_srgb8(const GLubyte src[4],void * dst)1806 pack_ubyte_l_srgb8(const GLubyte src[4], void *dst)
1807 {
1808 
1809 
1810       uint8_t l =
1811             _mesa_unorm_to_unorm(src[0], 8, 8);
1812 
1813       uint8_t *d = (uint8_t *)dst;
1814          d[0] = l;
1815 }
1816 
1817 static inline void
pack_ubyte_bgr_srgb8(const GLubyte src[4],void * dst)1818 pack_ubyte_bgr_srgb8(const GLubyte src[4], void *dst)
1819 {
1820 
1821 
1822       uint8_t b =
1823 
1824             util_format_linear_to_srgb_8unorm(src[2]);
1825 
1826 
1827       uint8_t g =
1828 
1829             util_format_linear_to_srgb_8unorm(src[1]);
1830 
1831 
1832       uint8_t r =
1833 
1834             util_format_linear_to_srgb_8unorm(src[0]);
1835 
1836       uint8_t *d = (uint8_t *)dst;
1837          d[0] = b;
1838          d[1] = g;
1839          d[2] = r;
1840 }
1841 
1842 static inline void
pack_ubyte_a_float16(const GLubyte src[4],void * dst)1843 pack_ubyte_a_float16(const GLubyte src[4], void *dst)
1844 {
1845 
1846 
1847       uint16_t a =
1848             _mesa_unorm_to_half(src[3], 8);
1849 
1850       uint16_t *d = (uint16_t *)dst;
1851          d[0] = a;
1852 }
1853 
1854 static inline void
pack_ubyte_a_float32(const GLubyte src[4],void * dst)1855 pack_ubyte_a_float32(const GLubyte src[4], void *dst)
1856 {
1857 
1858 
1859       float a =
1860             _mesa_unorm_to_float(src[3], 8);
1861 
1862       float *d = (float *)dst;
1863          d[0] = a;
1864 }
1865 
1866 static inline void
pack_ubyte_l_float16(const GLubyte src[4],void * dst)1867 pack_ubyte_l_float16(const GLubyte src[4], void *dst)
1868 {
1869 
1870 
1871       uint16_t l =
1872             _mesa_unorm_to_half(src[0], 8);
1873 
1874       uint16_t *d = (uint16_t *)dst;
1875          d[0] = l;
1876 }
1877 
1878 static inline void
pack_ubyte_l_float32(const GLubyte src[4],void * dst)1879 pack_ubyte_l_float32(const GLubyte src[4], void *dst)
1880 {
1881 
1882 
1883       float l =
1884             _mesa_unorm_to_float(src[0], 8);
1885 
1886       float *d = (float *)dst;
1887          d[0] = l;
1888 }
1889 
1890 static inline void
pack_ubyte_la_float16(const GLubyte src[4],void * dst)1891 pack_ubyte_la_float16(const GLubyte src[4], void *dst)
1892 {
1893 
1894 
1895       uint16_t l =
1896             _mesa_unorm_to_half(src[0], 8);
1897 
1898 
1899       uint16_t a =
1900             _mesa_unorm_to_half(src[3], 8);
1901 
1902       uint16_t *d = (uint16_t *)dst;
1903          d[0] = l;
1904          d[1] = a;
1905 }
1906 
1907 static inline void
pack_ubyte_la_float32(const GLubyte src[4],void * dst)1908 pack_ubyte_la_float32(const GLubyte src[4], void *dst)
1909 {
1910 
1911 
1912       float l =
1913             _mesa_unorm_to_float(src[0], 8);
1914 
1915 
1916       float a =
1917             _mesa_unorm_to_float(src[3], 8);
1918 
1919       float *d = (float *)dst;
1920          d[0] = l;
1921          d[1] = a;
1922 }
1923 
1924 static inline void
pack_ubyte_i_float16(const GLubyte src[4],void * dst)1925 pack_ubyte_i_float16(const GLubyte src[4], void *dst)
1926 {
1927 
1928 
1929       uint16_t i =
1930             _mesa_unorm_to_half(src[0], 8);
1931 
1932       uint16_t *d = (uint16_t *)dst;
1933          d[0] = i;
1934 }
1935 
1936 static inline void
pack_ubyte_i_float32(const GLubyte src[4],void * dst)1937 pack_ubyte_i_float32(const GLubyte src[4], void *dst)
1938 {
1939 
1940 
1941       float i =
1942             _mesa_unorm_to_float(src[0], 8);
1943 
1944       float *d = (float *)dst;
1945          d[0] = i;
1946 }
1947 
1948 static inline void
pack_ubyte_r_float16(const GLubyte src[4],void * dst)1949 pack_ubyte_r_float16(const GLubyte src[4], void *dst)
1950 {
1951 
1952 
1953       uint16_t r =
1954             _mesa_unorm_to_half(src[0], 8);
1955 
1956       uint16_t *d = (uint16_t *)dst;
1957          d[0] = r;
1958 }
1959 
1960 static inline void
pack_ubyte_r_float32(const GLubyte src[4],void * dst)1961 pack_ubyte_r_float32(const GLubyte src[4], void *dst)
1962 {
1963 
1964 
1965       float r =
1966             _mesa_unorm_to_float(src[0], 8);
1967 
1968       float *d = (float *)dst;
1969          d[0] = r;
1970 }
1971 
1972 static inline void
pack_ubyte_rg_float16(const GLubyte src[4],void * dst)1973 pack_ubyte_rg_float16(const GLubyte src[4], void *dst)
1974 {
1975 
1976 
1977       uint16_t r =
1978             _mesa_unorm_to_half(src[0], 8);
1979 
1980 
1981       uint16_t g =
1982             _mesa_unorm_to_half(src[1], 8);
1983 
1984       uint16_t *d = (uint16_t *)dst;
1985          d[0] = r;
1986          d[1] = g;
1987 }
1988 
1989 static inline void
pack_ubyte_rg_float32(const GLubyte src[4],void * dst)1990 pack_ubyte_rg_float32(const GLubyte src[4], void *dst)
1991 {
1992 
1993 
1994       float r =
1995             _mesa_unorm_to_float(src[0], 8);
1996 
1997 
1998       float g =
1999             _mesa_unorm_to_float(src[1], 8);
2000 
2001       float *d = (float *)dst;
2002          d[0] = r;
2003          d[1] = g;
2004 }
2005 
2006 static inline void
pack_ubyte_rgb_float16(const GLubyte src[4],void * dst)2007 pack_ubyte_rgb_float16(const GLubyte src[4], void *dst)
2008 {
2009 
2010 
2011       uint16_t r =
2012             _mesa_unorm_to_half(src[0], 8);
2013 
2014 
2015       uint16_t g =
2016             _mesa_unorm_to_half(src[1], 8);
2017 
2018 
2019       uint16_t b =
2020             _mesa_unorm_to_half(src[2], 8);
2021 
2022       uint16_t *d = (uint16_t *)dst;
2023          d[0] = r;
2024          d[1] = g;
2025          d[2] = b;
2026 }
2027 
2028 static inline void
pack_ubyte_rgb_float32(const GLubyte src[4],void * dst)2029 pack_ubyte_rgb_float32(const GLubyte src[4], void *dst)
2030 {
2031 
2032 
2033       float r =
2034             _mesa_unorm_to_float(src[0], 8);
2035 
2036 
2037       float g =
2038             _mesa_unorm_to_float(src[1], 8);
2039 
2040 
2041       float b =
2042             _mesa_unorm_to_float(src[2], 8);
2043 
2044       float *d = (float *)dst;
2045          d[0] = r;
2046          d[1] = g;
2047          d[2] = b;
2048 }
2049 
2050 static inline void
pack_ubyte_rgba_float16(const GLubyte src[4],void * dst)2051 pack_ubyte_rgba_float16(const GLubyte src[4], void *dst)
2052 {
2053 
2054 
2055       uint16_t r =
2056             _mesa_unorm_to_half(src[0], 8);
2057 
2058 
2059       uint16_t g =
2060             _mesa_unorm_to_half(src[1], 8);
2061 
2062 
2063       uint16_t b =
2064             _mesa_unorm_to_half(src[2], 8);
2065 
2066 
2067       uint16_t a =
2068             _mesa_unorm_to_half(src[3], 8);
2069 
2070       uint16_t *d = (uint16_t *)dst;
2071          d[0] = r;
2072          d[1] = g;
2073          d[2] = b;
2074          d[3] = a;
2075 }
2076 
2077 static inline void
pack_ubyte_rgba_float32(const GLubyte src[4],void * dst)2078 pack_ubyte_rgba_float32(const GLubyte src[4], void *dst)
2079 {
2080 
2081 
2082       float r =
2083             _mesa_unorm_to_float(src[0], 8);
2084 
2085 
2086       float g =
2087             _mesa_unorm_to_float(src[1], 8);
2088 
2089 
2090       float b =
2091             _mesa_unorm_to_float(src[2], 8);
2092 
2093 
2094       float a =
2095             _mesa_unorm_to_float(src[3], 8);
2096 
2097       float *d = (float *)dst;
2098          d[0] = r;
2099          d[1] = g;
2100          d[2] = b;
2101          d[3] = a;
2102 }
2103 
2104 static inline void
pack_ubyte_rgbx_float16(const GLubyte src[4],void * dst)2105 pack_ubyte_rgbx_float16(const GLubyte src[4], void *dst)
2106 {
2107 
2108 
2109       uint16_t r =
2110             _mesa_unorm_to_half(src[0], 8);
2111 
2112 
2113       uint16_t g =
2114             _mesa_unorm_to_half(src[1], 8);
2115 
2116 
2117       uint16_t b =
2118             _mesa_unorm_to_half(src[2], 8);
2119 
2120 
2121       uint16_t *d = (uint16_t *)dst;
2122          d[0] = r;
2123          d[1] = g;
2124          d[2] = b;
2125             }
2126 
2127 static inline void
pack_ubyte_rgbx_float32(const GLubyte src[4],void * dst)2128 pack_ubyte_rgbx_float32(const GLubyte src[4], void *dst)
2129 {
2130 
2131 
2132       float r =
2133             _mesa_unorm_to_float(src[0], 8);
2134 
2135 
2136       float g =
2137             _mesa_unorm_to_float(src[1], 8);
2138 
2139 
2140       float b =
2141             _mesa_unorm_to_float(src[2], 8);
2142 
2143 
2144       float *d = (float *)dst;
2145          d[0] = r;
2146          d[1] = g;
2147          d[2] = b;
2148             }
2149 
2150 static inline void
pack_ubyte_a8b8g8r8_uint(const GLubyte src[4],void * dst)2151 pack_ubyte_a8b8g8r8_uint(const GLubyte src[4], void *dst)
2152 {
2153 
2154 
2155       uint8_t a =
2156               _mesa_unsigned_to_unsigned(src[3], 8);
2157 
2158 
2159       uint8_t b =
2160               _mesa_unsigned_to_unsigned(src[2], 8);
2161 
2162 
2163       uint8_t g =
2164               _mesa_unsigned_to_unsigned(src[1], 8);
2165 
2166 
2167       uint8_t r =
2168               _mesa_unsigned_to_unsigned(src[0], 8);
2169 
2170       uint32_t d = 0;
2171          d |= PACK(a, 0, 8);
2172          d |= PACK(b, 8, 8);
2173          d |= PACK(g, 16, 8);
2174          d |= PACK(r, 24, 8);
2175       (*(uint32_t *)dst) = d;
2176 }
2177 
2178 static inline void
pack_ubyte_a8r8g8b8_uint(const GLubyte src[4],void * dst)2179 pack_ubyte_a8r8g8b8_uint(const GLubyte src[4], void *dst)
2180 {
2181 
2182 
2183       uint8_t a =
2184               _mesa_unsigned_to_unsigned(src[3], 8);
2185 
2186 
2187       uint8_t r =
2188               _mesa_unsigned_to_unsigned(src[0], 8);
2189 
2190 
2191       uint8_t g =
2192               _mesa_unsigned_to_unsigned(src[1], 8);
2193 
2194 
2195       uint8_t b =
2196               _mesa_unsigned_to_unsigned(src[2], 8);
2197 
2198       uint32_t d = 0;
2199          d |= PACK(a, 0, 8);
2200          d |= PACK(r, 8, 8);
2201          d |= PACK(g, 16, 8);
2202          d |= PACK(b, 24, 8);
2203       (*(uint32_t *)dst) = d;
2204 }
2205 
2206 static inline void
pack_ubyte_r8g8b8a8_uint(const GLubyte src[4],void * dst)2207 pack_ubyte_r8g8b8a8_uint(const GLubyte src[4], void *dst)
2208 {
2209 
2210 
2211       uint8_t r =
2212               _mesa_unsigned_to_unsigned(src[0], 8);
2213 
2214 
2215       uint8_t g =
2216               _mesa_unsigned_to_unsigned(src[1], 8);
2217 
2218 
2219       uint8_t b =
2220               _mesa_unsigned_to_unsigned(src[2], 8);
2221 
2222 
2223       uint8_t a =
2224               _mesa_unsigned_to_unsigned(src[3], 8);
2225 
2226       uint32_t d = 0;
2227          d |= PACK(r, 0, 8);
2228          d |= PACK(g, 8, 8);
2229          d |= PACK(b, 16, 8);
2230          d |= PACK(a, 24, 8);
2231       (*(uint32_t *)dst) = d;
2232 }
2233 
2234 static inline void
pack_ubyte_b8g8r8a8_uint(const GLubyte src[4],void * dst)2235 pack_ubyte_b8g8r8a8_uint(const GLubyte src[4], void *dst)
2236 {
2237 
2238 
2239       uint8_t b =
2240               _mesa_unsigned_to_unsigned(src[2], 8);
2241 
2242 
2243       uint8_t g =
2244               _mesa_unsigned_to_unsigned(src[1], 8);
2245 
2246 
2247       uint8_t r =
2248               _mesa_unsigned_to_unsigned(src[0], 8);
2249 
2250 
2251       uint8_t a =
2252               _mesa_unsigned_to_unsigned(src[3], 8);
2253 
2254       uint32_t d = 0;
2255          d |= PACK(b, 0, 8);
2256          d |= PACK(g, 8, 8);
2257          d |= PACK(r, 16, 8);
2258          d |= PACK(a, 24, 8);
2259       (*(uint32_t *)dst) = d;
2260 }
2261 
2262 static inline void
pack_ubyte_b10g10r10a2_uint(const GLubyte src[4],void * dst)2263 pack_ubyte_b10g10r10a2_uint(const GLubyte src[4], void *dst)
2264 {
2265 
2266 
2267       uint16_t b =
2268               _mesa_unsigned_to_unsigned(src[2], 10);
2269 
2270 
2271       uint16_t g =
2272               _mesa_unsigned_to_unsigned(src[1], 10);
2273 
2274 
2275       uint16_t r =
2276               _mesa_unsigned_to_unsigned(src[0], 10);
2277 
2278 
2279       uint8_t a =
2280               _mesa_unsigned_to_unsigned(src[3], 2);
2281 
2282       uint32_t d = 0;
2283          d |= PACK(b, 0, 10);
2284          d |= PACK(g, 10, 10);
2285          d |= PACK(r, 20, 10);
2286          d |= PACK(a, 30, 2);
2287       (*(uint32_t *)dst) = d;
2288 }
2289 
2290 static inline void
pack_ubyte_r10g10b10a2_uint(const GLubyte src[4],void * dst)2291 pack_ubyte_r10g10b10a2_uint(const GLubyte src[4], void *dst)
2292 {
2293 
2294 
2295       uint16_t r =
2296               _mesa_unsigned_to_unsigned(src[0], 10);
2297 
2298 
2299       uint16_t g =
2300               _mesa_unsigned_to_unsigned(src[1], 10);
2301 
2302 
2303       uint16_t b =
2304               _mesa_unsigned_to_unsigned(src[2], 10);
2305 
2306 
2307       uint8_t a =
2308               _mesa_unsigned_to_unsigned(src[3], 2);
2309 
2310       uint32_t d = 0;
2311          d |= PACK(r, 0, 10);
2312          d |= PACK(g, 10, 10);
2313          d |= PACK(b, 20, 10);
2314          d |= PACK(a, 30, 2);
2315       (*(uint32_t *)dst) = d;
2316 }
2317 
2318 static inline void
pack_ubyte_a2b10g10r10_uint(const GLubyte src[4],void * dst)2319 pack_ubyte_a2b10g10r10_uint(const GLubyte src[4], void *dst)
2320 {
2321 
2322 
2323       uint8_t a =
2324               _mesa_unsigned_to_unsigned(src[3], 2);
2325 
2326 
2327       uint16_t b =
2328               _mesa_unsigned_to_unsigned(src[2], 10);
2329 
2330 
2331       uint16_t g =
2332               _mesa_unsigned_to_unsigned(src[1], 10);
2333 
2334 
2335       uint16_t r =
2336               _mesa_unsigned_to_unsigned(src[0], 10);
2337 
2338       uint32_t d = 0;
2339          d |= PACK(a, 0, 2);
2340          d |= PACK(b, 2, 10);
2341          d |= PACK(g, 12, 10);
2342          d |= PACK(r, 22, 10);
2343       (*(uint32_t *)dst) = d;
2344 }
2345 
2346 static inline void
pack_ubyte_a2r10g10b10_uint(const GLubyte src[4],void * dst)2347 pack_ubyte_a2r10g10b10_uint(const GLubyte src[4], void *dst)
2348 {
2349 
2350 
2351       uint8_t a =
2352               _mesa_unsigned_to_unsigned(src[3], 2);
2353 
2354 
2355       uint16_t r =
2356               _mesa_unsigned_to_unsigned(src[0], 10);
2357 
2358 
2359       uint16_t g =
2360               _mesa_unsigned_to_unsigned(src[1], 10);
2361 
2362 
2363       uint16_t b =
2364               _mesa_unsigned_to_unsigned(src[2], 10);
2365 
2366       uint32_t d = 0;
2367          d |= PACK(a, 0, 2);
2368          d |= PACK(r, 2, 10);
2369          d |= PACK(g, 12, 10);
2370          d |= PACK(b, 22, 10);
2371       (*(uint32_t *)dst) = d;
2372 }
2373 
2374 static inline void
pack_ubyte_b5g6r5_uint(const GLubyte src[4],void * dst)2375 pack_ubyte_b5g6r5_uint(const GLubyte src[4], void *dst)
2376 {
2377 
2378 
2379       uint8_t b =
2380               _mesa_unsigned_to_unsigned(src[2], 5);
2381 
2382 
2383       uint8_t g =
2384               _mesa_unsigned_to_unsigned(src[1], 6);
2385 
2386 
2387       uint8_t r =
2388               _mesa_unsigned_to_unsigned(src[0], 5);
2389 
2390       uint16_t d = 0;
2391          d |= PACK(b, 0, 5);
2392          d |= PACK(g, 5, 6);
2393          d |= PACK(r, 11, 5);
2394       (*(uint16_t *)dst) = d;
2395 }
2396 
2397 static inline void
pack_ubyte_r5g6b5_uint(const GLubyte src[4],void * dst)2398 pack_ubyte_r5g6b5_uint(const GLubyte src[4], void *dst)
2399 {
2400 
2401 
2402       uint8_t r =
2403               _mesa_unsigned_to_unsigned(src[0], 5);
2404 
2405 
2406       uint8_t g =
2407               _mesa_unsigned_to_unsigned(src[1], 6);
2408 
2409 
2410       uint8_t b =
2411               _mesa_unsigned_to_unsigned(src[2], 5);
2412 
2413       uint16_t d = 0;
2414          d |= PACK(r, 0, 5);
2415          d |= PACK(g, 5, 6);
2416          d |= PACK(b, 11, 5);
2417       (*(uint16_t *)dst) = d;
2418 }
2419 
2420 static inline void
pack_ubyte_b2g3r3_uint(const GLubyte src[4],void * dst)2421 pack_ubyte_b2g3r3_uint(const GLubyte src[4], void *dst)
2422 {
2423 
2424 
2425       uint8_t b =
2426               _mesa_unsigned_to_unsigned(src[2], 2);
2427 
2428 
2429       uint8_t g =
2430               _mesa_unsigned_to_unsigned(src[1], 3);
2431 
2432 
2433       uint8_t r =
2434               _mesa_unsigned_to_unsigned(src[0], 3);
2435 
2436       uint8_t d = 0;
2437          d |= PACK(b, 0, 2);
2438          d |= PACK(g, 2, 3);
2439          d |= PACK(r, 5, 3);
2440       (*(uint8_t *)dst) = d;
2441 }
2442 
2443 static inline void
pack_ubyte_r3g3b2_uint(const GLubyte src[4],void * dst)2444 pack_ubyte_r3g3b2_uint(const GLubyte src[4], void *dst)
2445 {
2446 
2447 
2448       uint8_t r =
2449               _mesa_unsigned_to_unsigned(src[0], 3);
2450 
2451 
2452       uint8_t g =
2453               _mesa_unsigned_to_unsigned(src[1], 3);
2454 
2455 
2456       uint8_t b =
2457               _mesa_unsigned_to_unsigned(src[2], 2);
2458 
2459       uint8_t d = 0;
2460          d |= PACK(r, 0, 3);
2461          d |= PACK(g, 3, 3);
2462          d |= PACK(b, 6, 2);
2463       (*(uint8_t *)dst) = d;
2464 }
2465 
2466 static inline void
pack_ubyte_a4b4g4r4_uint(const GLubyte src[4],void * dst)2467 pack_ubyte_a4b4g4r4_uint(const GLubyte src[4], void *dst)
2468 {
2469 
2470 
2471       uint8_t a =
2472               _mesa_unsigned_to_unsigned(src[3], 4);
2473 
2474 
2475       uint8_t b =
2476               _mesa_unsigned_to_unsigned(src[2], 4);
2477 
2478 
2479       uint8_t g =
2480               _mesa_unsigned_to_unsigned(src[1], 4);
2481 
2482 
2483       uint8_t r =
2484               _mesa_unsigned_to_unsigned(src[0], 4);
2485 
2486       uint16_t d = 0;
2487          d |= PACK(a, 0, 4);
2488          d |= PACK(b, 4, 4);
2489          d |= PACK(g, 8, 4);
2490          d |= PACK(r, 12, 4);
2491       (*(uint16_t *)dst) = d;
2492 }
2493 
2494 static inline void
pack_ubyte_r4g4b4a4_uint(const GLubyte src[4],void * dst)2495 pack_ubyte_r4g4b4a4_uint(const GLubyte src[4], void *dst)
2496 {
2497 
2498 
2499       uint8_t r =
2500               _mesa_unsigned_to_unsigned(src[0], 4);
2501 
2502 
2503       uint8_t g =
2504               _mesa_unsigned_to_unsigned(src[1], 4);
2505 
2506 
2507       uint8_t b =
2508               _mesa_unsigned_to_unsigned(src[2], 4);
2509 
2510 
2511       uint8_t a =
2512               _mesa_unsigned_to_unsigned(src[3], 4);
2513 
2514       uint16_t d = 0;
2515          d |= PACK(r, 0, 4);
2516          d |= PACK(g, 4, 4);
2517          d |= PACK(b, 8, 4);
2518          d |= PACK(a, 12, 4);
2519       (*(uint16_t *)dst) = d;
2520 }
2521 
2522 static inline void
pack_ubyte_b4g4r4a4_uint(const GLubyte src[4],void * dst)2523 pack_ubyte_b4g4r4a4_uint(const GLubyte src[4], void *dst)
2524 {
2525 
2526 
2527       uint8_t b =
2528               _mesa_unsigned_to_unsigned(src[2], 4);
2529 
2530 
2531       uint8_t g =
2532               _mesa_unsigned_to_unsigned(src[1], 4);
2533 
2534 
2535       uint8_t r =
2536               _mesa_unsigned_to_unsigned(src[0], 4);
2537 
2538 
2539       uint8_t a =
2540               _mesa_unsigned_to_unsigned(src[3], 4);
2541 
2542       uint16_t d = 0;
2543          d |= PACK(b, 0, 4);
2544          d |= PACK(g, 4, 4);
2545          d |= PACK(r, 8, 4);
2546          d |= PACK(a, 12, 4);
2547       (*(uint16_t *)dst) = d;
2548 }
2549 
2550 static inline void
pack_ubyte_a4r4g4b4_uint(const GLubyte src[4],void * dst)2551 pack_ubyte_a4r4g4b4_uint(const GLubyte src[4], void *dst)
2552 {
2553 
2554 
2555       uint8_t a =
2556               _mesa_unsigned_to_unsigned(src[3], 4);
2557 
2558 
2559       uint8_t r =
2560               _mesa_unsigned_to_unsigned(src[0], 4);
2561 
2562 
2563       uint8_t g =
2564               _mesa_unsigned_to_unsigned(src[1], 4);
2565 
2566 
2567       uint8_t b =
2568               _mesa_unsigned_to_unsigned(src[2], 4);
2569 
2570       uint16_t d = 0;
2571          d |= PACK(a, 0, 4);
2572          d |= PACK(r, 4, 4);
2573          d |= PACK(g, 8, 4);
2574          d |= PACK(b, 12, 4);
2575       (*(uint16_t *)dst) = d;
2576 }
2577 
2578 static inline void
pack_ubyte_a1b5g5r5_uint(const GLubyte src[4],void * dst)2579 pack_ubyte_a1b5g5r5_uint(const GLubyte src[4], void *dst)
2580 {
2581 
2582 
2583       uint8_t a =
2584               _mesa_unsigned_to_unsigned(src[3], 1);
2585 
2586 
2587       uint8_t b =
2588               _mesa_unsigned_to_unsigned(src[2], 5);
2589 
2590 
2591       uint8_t g =
2592               _mesa_unsigned_to_unsigned(src[1], 5);
2593 
2594 
2595       uint8_t r =
2596               _mesa_unsigned_to_unsigned(src[0], 5);
2597 
2598       uint16_t d = 0;
2599          d |= PACK(a, 0, 1);
2600          d |= PACK(b, 1, 5);
2601          d |= PACK(g, 6, 5);
2602          d |= PACK(r, 11, 5);
2603       (*(uint16_t *)dst) = d;
2604 }
2605 
2606 static inline void
pack_ubyte_b5g5r5a1_uint(const GLubyte src[4],void * dst)2607 pack_ubyte_b5g5r5a1_uint(const GLubyte src[4], void *dst)
2608 {
2609 
2610 
2611       uint8_t b =
2612               _mesa_unsigned_to_unsigned(src[2], 5);
2613 
2614 
2615       uint8_t g =
2616               _mesa_unsigned_to_unsigned(src[1], 5);
2617 
2618 
2619       uint8_t r =
2620               _mesa_unsigned_to_unsigned(src[0], 5);
2621 
2622 
2623       uint8_t a =
2624               _mesa_unsigned_to_unsigned(src[3], 1);
2625 
2626       uint16_t d = 0;
2627          d |= PACK(b, 0, 5);
2628          d |= PACK(g, 5, 5);
2629          d |= PACK(r, 10, 5);
2630          d |= PACK(a, 15, 1);
2631       (*(uint16_t *)dst) = d;
2632 }
2633 
2634 static inline void
pack_ubyte_a1r5g5b5_uint(const GLubyte src[4],void * dst)2635 pack_ubyte_a1r5g5b5_uint(const GLubyte src[4], void *dst)
2636 {
2637 
2638 
2639       uint8_t a =
2640               _mesa_unsigned_to_unsigned(src[3], 1);
2641 
2642 
2643       uint8_t r =
2644               _mesa_unsigned_to_unsigned(src[0], 5);
2645 
2646 
2647       uint8_t g =
2648               _mesa_unsigned_to_unsigned(src[1], 5);
2649 
2650 
2651       uint8_t b =
2652               _mesa_unsigned_to_unsigned(src[2], 5);
2653 
2654       uint16_t d = 0;
2655          d |= PACK(a, 0, 1);
2656          d |= PACK(r, 1, 5);
2657          d |= PACK(g, 6, 5);
2658          d |= PACK(b, 11, 5);
2659       (*(uint16_t *)dst) = d;
2660 }
2661 
2662 static inline void
pack_ubyte_r5g5b5a1_uint(const GLubyte src[4],void * dst)2663 pack_ubyte_r5g5b5a1_uint(const GLubyte src[4], void *dst)
2664 {
2665 
2666 
2667       uint8_t r =
2668               _mesa_unsigned_to_unsigned(src[0], 5);
2669 
2670 
2671       uint8_t g =
2672               _mesa_unsigned_to_unsigned(src[1], 5);
2673 
2674 
2675       uint8_t b =
2676               _mesa_unsigned_to_unsigned(src[2], 5);
2677 
2678 
2679       uint8_t a =
2680               _mesa_unsigned_to_unsigned(src[3], 1);
2681 
2682       uint16_t d = 0;
2683          d |= PACK(r, 0, 5);
2684          d |= PACK(g, 5, 5);
2685          d |= PACK(b, 10, 5);
2686          d |= PACK(a, 15, 1);
2687       (*(uint16_t *)dst) = d;
2688 }
2689 
2690 static inline void
pack_ubyte_a_uint8(const GLubyte src[4],void * dst)2691 pack_ubyte_a_uint8(const GLubyte src[4], void *dst)
2692 {
2693 
2694 
2695       uint8_t a =
2696               _mesa_unsigned_to_unsigned(src[3], 8);
2697 
2698       uint8_t *d = (uint8_t *)dst;
2699          d[0] = a;
2700 }
2701 
2702 static inline void
pack_ubyte_a_uint16(const GLubyte src[4],void * dst)2703 pack_ubyte_a_uint16(const GLubyte src[4], void *dst)
2704 {
2705 
2706 
2707       uint16_t a =
2708               _mesa_unsigned_to_unsigned(src[3], 16);
2709 
2710       uint16_t *d = (uint16_t *)dst;
2711          d[0] = a;
2712 }
2713 
2714 static inline void
pack_ubyte_a_uint32(const GLubyte src[4],void * dst)2715 pack_ubyte_a_uint32(const GLubyte src[4], void *dst)
2716 {
2717 
2718 
2719       uint32_t a =
2720               _mesa_unsigned_to_unsigned(src[3], 32);
2721 
2722       uint32_t *d = (uint32_t *)dst;
2723          d[0] = a;
2724 }
2725 
2726 static inline void
pack_ubyte_a_sint8(const GLubyte src[4],void * dst)2727 pack_ubyte_a_sint8(const GLubyte src[4], void *dst)
2728 {
2729 
2730 
2731       int8_t a =
2732               _mesa_unsigned_to_signed(src[3], 8);
2733 
2734       int8_t *d = (int8_t *)dst;
2735          d[0] = a;
2736 }
2737 
2738 static inline void
pack_ubyte_a_sint16(const GLubyte src[4],void * dst)2739 pack_ubyte_a_sint16(const GLubyte src[4], void *dst)
2740 {
2741 
2742 
2743       int16_t a =
2744               _mesa_unsigned_to_signed(src[3], 16);
2745 
2746       int16_t *d = (int16_t *)dst;
2747          d[0] = a;
2748 }
2749 
2750 static inline void
pack_ubyte_a_sint32(const GLubyte src[4],void * dst)2751 pack_ubyte_a_sint32(const GLubyte src[4], void *dst)
2752 {
2753 
2754 
2755       int32_t a =
2756               _mesa_unsigned_to_signed(src[3], 32);
2757 
2758       int32_t *d = (int32_t *)dst;
2759          d[0] = a;
2760 }
2761 
2762 static inline void
pack_ubyte_i_uint8(const GLubyte src[4],void * dst)2763 pack_ubyte_i_uint8(const GLubyte src[4], void *dst)
2764 {
2765 
2766 
2767       uint8_t i =
2768               _mesa_unsigned_to_unsigned(src[0], 8);
2769 
2770       uint8_t *d = (uint8_t *)dst;
2771          d[0] = i;
2772 }
2773 
2774 static inline void
pack_ubyte_i_uint16(const GLubyte src[4],void * dst)2775 pack_ubyte_i_uint16(const GLubyte src[4], void *dst)
2776 {
2777 
2778 
2779       uint16_t i =
2780               _mesa_unsigned_to_unsigned(src[0], 16);
2781 
2782       uint16_t *d = (uint16_t *)dst;
2783          d[0] = i;
2784 }
2785 
2786 static inline void
pack_ubyte_i_uint32(const GLubyte src[4],void * dst)2787 pack_ubyte_i_uint32(const GLubyte src[4], void *dst)
2788 {
2789 
2790 
2791       uint32_t i =
2792               _mesa_unsigned_to_unsigned(src[0], 32);
2793 
2794       uint32_t *d = (uint32_t *)dst;
2795          d[0] = i;
2796 }
2797 
2798 static inline void
pack_ubyte_i_sint8(const GLubyte src[4],void * dst)2799 pack_ubyte_i_sint8(const GLubyte src[4], void *dst)
2800 {
2801 
2802 
2803       int8_t i =
2804               _mesa_unsigned_to_signed(src[0], 8);
2805 
2806       int8_t *d = (int8_t *)dst;
2807          d[0] = i;
2808 }
2809 
2810 static inline void
pack_ubyte_i_sint16(const GLubyte src[4],void * dst)2811 pack_ubyte_i_sint16(const GLubyte src[4], void *dst)
2812 {
2813 
2814 
2815       int16_t i =
2816               _mesa_unsigned_to_signed(src[0], 16);
2817 
2818       int16_t *d = (int16_t *)dst;
2819          d[0] = i;
2820 }
2821 
2822 static inline void
pack_ubyte_i_sint32(const GLubyte src[4],void * dst)2823 pack_ubyte_i_sint32(const GLubyte src[4], void *dst)
2824 {
2825 
2826 
2827       int32_t i =
2828               _mesa_unsigned_to_signed(src[0], 32);
2829 
2830       int32_t *d = (int32_t *)dst;
2831          d[0] = i;
2832 }
2833 
2834 static inline void
pack_ubyte_l_uint8(const GLubyte src[4],void * dst)2835 pack_ubyte_l_uint8(const GLubyte src[4], void *dst)
2836 {
2837 
2838 
2839       uint8_t l =
2840               _mesa_unsigned_to_unsigned(src[0], 8);
2841 
2842       uint8_t *d = (uint8_t *)dst;
2843          d[0] = l;
2844 }
2845 
2846 static inline void
pack_ubyte_l_uint16(const GLubyte src[4],void * dst)2847 pack_ubyte_l_uint16(const GLubyte src[4], void *dst)
2848 {
2849 
2850 
2851       uint16_t l =
2852               _mesa_unsigned_to_unsigned(src[0], 16);
2853 
2854       uint16_t *d = (uint16_t *)dst;
2855          d[0] = l;
2856 }
2857 
2858 static inline void
pack_ubyte_l_uint32(const GLubyte src[4],void * dst)2859 pack_ubyte_l_uint32(const GLubyte src[4], void *dst)
2860 {
2861 
2862 
2863       uint32_t l =
2864               _mesa_unsigned_to_unsigned(src[0], 32);
2865 
2866       uint32_t *d = (uint32_t *)dst;
2867          d[0] = l;
2868 }
2869 
2870 static inline void
pack_ubyte_l_sint8(const GLubyte src[4],void * dst)2871 pack_ubyte_l_sint8(const GLubyte src[4], void *dst)
2872 {
2873 
2874 
2875       int8_t l =
2876               _mesa_unsigned_to_signed(src[0], 8);
2877 
2878       int8_t *d = (int8_t *)dst;
2879          d[0] = l;
2880 }
2881 
2882 static inline void
pack_ubyte_l_sint16(const GLubyte src[4],void * dst)2883 pack_ubyte_l_sint16(const GLubyte src[4], void *dst)
2884 {
2885 
2886 
2887       int16_t l =
2888               _mesa_unsigned_to_signed(src[0], 16);
2889 
2890       int16_t *d = (int16_t *)dst;
2891          d[0] = l;
2892 }
2893 
2894 static inline void
pack_ubyte_l_sint32(const GLubyte src[4],void * dst)2895 pack_ubyte_l_sint32(const GLubyte src[4], void *dst)
2896 {
2897 
2898 
2899       int32_t l =
2900               _mesa_unsigned_to_signed(src[0], 32);
2901 
2902       int32_t *d = (int32_t *)dst;
2903          d[0] = l;
2904 }
2905 
2906 static inline void
pack_ubyte_la_uint8(const GLubyte src[4],void * dst)2907 pack_ubyte_la_uint8(const GLubyte src[4], void *dst)
2908 {
2909 
2910 
2911       uint8_t l =
2912               _mesa_unsigned_to_unsigned(src[0], 8);
2913 
2914 
2915       uint8_t a =
2916               _mesa_unsigned_to_unsigned(src[3], 8);
2917 
2918       uint8_t *d = (uint8_t *)dst;
2919          d[0] = l;
2920          d[1] = a;
2921 }
2922 
2923 static inline void
pack_ubyte_la_uint16(const GLubyte src[4],void * dst)2924 pack_ubyte_la_uint16(const GLubyte src[4], void *dst)
2925 {
2926 
2927 
2928       uint16_t l =
2929               _mesa_unsigned_to_unsigned(src[0], 16);
2930 
2931 
2932       uint16_t a =
2933               _mesa_unsigned_to_unsigned(src[3], 16);
2934 
2935       uint16_t *d = (uint16_t *)dst;
2936          d[0] = l;
2937          d[1] = a;
2938 }
2939 
2940 static inline void
pack_ubyte_la_uint32(const GLubyte src[4],void * dst)2941 pack_ubyte_la_uint32(const GLubyte src[4], void *dst)
2942 {
2943 
2944 
2945       uint32_t l =
2946               _mesa_unsigned_to_unsigned(src[0], 32);
2947 
2948 
2949       uint32_t a =
2950               _mesa_unsigned_to_unsigned(src[3], 32);
2951 
2952       uint32_t *d = (uint32_t *)dst;
2953          d[0] = l;
2954          d[1] = a;
2955 }
2956 
2957 static inline void
pack_ubyte_la_sint8(const GLubyte src[4],void * dst)2958 pack_ubyte_la_sint8(const GLubyte src[4], void *dst)
2959 {
2960 
2961 
2962       int8_t l =
2963               _mesa_unsigned_to_signed(src[0], 8);
2964 
2965 
2966       int8_t a =
2967               _mesa_unsigned_to_signed(src[3], 8);
2968 
2969       int8_t *d = (int8_t *)dst;
2970          d[0] = l;
2971          d[1] = a;
2972 }
2973 
2974 static inline void
pack_ubyte_la_sint16(const GLubyte src[4],void * dst)2975 pack_ubyte_la_sint16(const GLubyte src[4], void *dst)
2976 {
2977 
2978 
2979       int16_t l =
2980               _mesa_unsigned_to_signed(src[0], 16);
2981 
2982 
2983       int16_t a =
2984               _mesa_unsigned_to_signed(src[3], 16);
2985 
2986       int16_t *d = (int16_t *)dst;
2987          d[0] = l;
2988          d[1] = a;
2989 }
2990 
2991 static inline void
pack_ubyte_la_sint32(const GLubyte src[4],void * dst)2992 pack_ubyte_la_sint32(const GLubyte src[4], void *dst)
2993 {
2994 
2995 
2996       int32_t l =
2997               _mesa_unsigned_to_signed(src[0], 32);
2998 
2999 
3000       int32_t a =
3001               _mesa_unsigned_to_signed(src[3], 32);
3002 
3003       int32_t *d = (int32_t *)dst;
3004          d[0] = l;
3005          d[1] = a;
3006 }
3007 
3008 static inline void
pack_ubyte_r_uint8(const GLubyte src[4],void * dst)3009 pack_ubyte_r_uint8(const GLubyte src[4], void *dst)
3010 {
3011 
3012 
3013       uint8_t r =
3014               _mesa_unsigned_to_unsigned(src[0], 8);
3015 
3016       uint8_t *d = (uint8_t *)dst;
3017          d[0] = r;
3018 }
3019 
3020 static inline void
pack_ubyte_r_uint16(const GLubyte src[4],void * dst)3021 pack_ubyte_r_uint16(const GLubyte src[4], void *dst)
3022 {
3023 
3024 
3025       uint16_t r =
3026               _mesa_unsigned_to_unsigned(src[0], 16);
3027 
3028       uint16_t *d = (uint16_t *)dst;
3029          d[0] = r;
3030 }
3031 
3032 static inline void
pack_ubyte_r_uint32(const GLubyte src[4],void * dst)3033 pack_ubyte_r_uint32(const GLubyte src[4], void *dst)
3034 {
3035 
3036 
3037       uint32_t r =
3038               _mesa_unsigned_to_unsigned(src[0], 32);
3039 
3040       uint32_t *d = (uint32_t *)dst;
3041          d[0] = r;
3042 }
3043 
3044 static inline void
pack_ubyte_r_sint8(const GLubyte src[4],void * dst)3045 pack_ubyte_r_sint8(const GLubyte src[4], void *dst)
3046 {
3047 
3048 
3049       int8_t r =
3050               _mesa_unsigned_to_signed(src[0], 8);
3051 
3052       int8_t *d = (int8_t *)dst;
3053          d[0] = r;
3054 }
3055 
3056 static inline void
pack_ubyte_r_sint16(const GLubyte src[4],void * dst)3057 pack_ubyte_r_sint16(const GLubyte src[4], void *dst)
3058 {
3059 
3060 
3061       int16_t r =
3062               _mesa_unsigned_to_signed(src[0], 16);
3063 
3064       int16_t *d = (int16_t *)dst;
3065          d[0] = r;
3066 }
3067 
3068 static inline void
pack_ubyte_r_sint32(const GLubyte src[4],void * dst)3069 pack_ubyte_r_sint32(const GLubyte src[4], void *dst)
3070 {
3071 
3072 
3073       int32_t r =
3074               _mesa_unsigned_to_signed(src[0], 32);
3075 
3076       int32_t *d = (int32_t *)dst;
3077          d[0] = r;
3078 }
3079 
3080 static inline void
pack_ubyte_rg_uint8(const GLubyte src[4],void * dst)3081 pack_ubyte_rg_uint8(const GLubyte src[4], void *dst)
3082 {
3083 
3084 
3085       uint8_t r =
3086               _mesa_unsigned_to_unsigned(src[0], 8);
3087 
3088 
3089       uint8_t g =
3090               _mesa_unsigned_to_unsigned(src[1], 8);
3091 
3092       uint8_t *d = (uint8_t *)dst;
3093          d[0] = r;
3094          d[1] = g;
3095 }
3096 
3097 static inline void
pack_ubyte_rg_uint16(const GLubyte src[4],void * dst)3098 pack_ubyte_rg_uint16(const GLubyte src[4], void *dst)
3099 {
3100 
3101 
3102       uint16_t r =
3103               _mesa_unsigned_to_unsigned(src[0], 16);
3104 
3105 
3106       uint16_t g =
3107               _mesa_unsigned_to_unsigned(src[1], 16);
3108 
3109       uint16_t *d = (uint16_t *)dst;
3110          d[0] = r;
3111          d[1] = g;
3112 }
3113 
3114 static inline void
pack_ubyte_rg_uint32(const GLubyte src[4],void * dst)3115 pack_ubyte_rg_uint32(const GLubyte src[4], void *dst)
3116 {
3117 
3118 
3119       uint32_t r =
3120               _mesa_unsigned_to_unsigned(src[0], 32);
3121 
3122 
3123       uint32_t g =
3124               _mesa_unsigned_to_unsigned(src[1], 32);
3125 
3126       uint32_t *d = (uint32_t *)dst;
3127          d[0] = r;
3128          d[1] = g;
3129 }
3130 
3131 static inline void
pack_ubyte_rg_sint8(const GLubyte src[4],void * dst)3132 pack_ubyte_rg_sint8(const GLubyte src[4], void *dst)
3133 {
3134 
3135 
3136       int8_t r =
3137               _mesa_unsigned_to_signed(src[0], 8);
3138 
3139 
3140       int8_t g =
3141               _mesa_unsigned_to_signed(src[1], 8);
3142 
3143       int8_t *d = (int8_t *)dst;
3144          d[0] = r;
3145          d[1] = g;
3146 }
3147 
3148 static inline void
pack_ubyte_rg_sint16(const GLubyte src[4],void * dst)3149 pack_ubyte_rg_sint16(const GLubyte src[4], void *dst)
3150 {
3151 
3152 
3153       int16_t r =
3154               _mesa_unsigned_to_signed(src[0], 16);
3155 
3156 
3157       int16_t g =
3158               _mesa_unsigned_to_signed(src[1], 16);
3159 
3160       int16_t *d = (int16_t *)dst;
3161          d[0] = r;
3162          d[1] = g;
3163 }
3164 
3165 static inline void
pack_ubyte_rg_sint32(const GLubyte src[4],void * dst)3166 pack_ubyte_rg_sint32(const GLubyte src[4], void *dst)
3167 {
3168 
3169 
3170       int32_t r =
3171               _mesa_unsigned_to_signed(src[0], 32);
3172 
3173 
3174       int32_t g =
3175               _mesa_unsigned_to_signed(src[1], 32);
3176 
3177       int32_t *d = (int32_t *)dst;
3178          d[0] = r;
3179          d[1] = g;
3180 }
3181 
3182 static inline void
pack_ubyte_rgb_uint8(const GLubyte src[4],void * dst)3183 pack_ubyte_rgb_uint8(const GLubyte src[4], void *dst)
3184 {
3185 
3186 
3187       uint8_t r =
3188               _mesa_unsigned_to_unsigned(src[0], 8);
3189 
3190 
3191       uint8_t g =
3192               _mesa_unsigned_to_unsigned(src[1], 8);
3193 
3194 
3195       uint8_t b =
3196               _mesa_unsigned_to_unsigned(src[2], 8);
3197 
3198       uint8_t *d = (uint8_t *)dst;
3199          d[0] = r;
3200          d[1] = g;
3201          d[2] = b;
3202 }
3203 
3204 static inline void
pack_ubyte_rgb_uint16(const GLubyte src[4],void * dst)3205 pack_ubyte_rgb_uint16(const GLubyte src[4], void *dst)
3206 {
3207 
3208 
3209       uint16_t r =
3210               _mesa_unsigned_to_unsigned(src[0], 16);
3211 
3212 
3213       uint16_t g =
3214               _mesa_unsigned_to_unsigned(src[1], 16);
3215 
3216 
3217       uint16_t b =
3218               _mesa_unsigned_to_unsigned(src[2], 16);
3219 
3220       uint16_t *d = (uint16_t *)dst;
3221          d[0] = r;
3222          d[1] = g;
3223          d[2] = b;
3224 }
3225 
3226 static inline void
pack_ubyte_rgb_uint32(const GLubyte src[4],void * dst)3227 pack_ubyte_rgb_uint32(const GLubyte src[4], void *dst)
3228 {
3229 
3230 
3231       uint32_t r =
3232               _mesa_unsigned_to_unsigned(src[0], 32);
3233 
3234 
3235       uint32_t g =
3236               _mesa_unsigned_to_unsigned(src[1], 32);
3237 
3238 
3239       uint32_t b =
3240               _mesa_unsigned_to_unsigned(src[2], 32);
3241 
3242       uint32_t *d = (uint32_t *)dst;
3243          d[0] = r;
3244          d[1] = g;
3245          d[2] = b;
3246 }
3247 
3248 static inline void
pack_ubyte_rgb_sint8(const GLubyte src[4],void * dst)3249 pack_ubyte_rgb_sint8(const GLubyte src[4], void *dst)
3250 {
3251 
3252 
3253       int8_t r =
3254               _mesa_unsigned_to_signed(src[0], 8);
3255 
3256 
3257       int8_t g =
3258               _mesa_unsigned_to_signed(src[1], 8);
3259 
3260 
3261       int8_t b =
3262               _mesa_unsigned_to_signed(src[2], 8);
3263 
3264       int8_t *d = (int8_t *)dst;
3265          d[0] = r;
3266          d[1] = g;
3267          d[2] = b;
3268 }
3269 
3270 static inline void
pack_ubyte_rgb_sint16(const GLubyte src[4],void * dst)3271 pack_ubyte_rgb_sint16(const GLubyte src[4], void *dst)
3272 {
3273 
3274 
3275       int16_t r =
3276               _mesa_unsigned_to_signed(src[0], 16);
3277 
3278 
3279       int16_t g =
3280               _mesa_unsigned_to_signed(src[1], 16);
3281 
3282 
3283       int16_t b =
3284               _mesa_unsigned_to_signed(src[2], 16);
3285 
3286       int16_t *d = (int16_t *)dst;
3287          d[0] = r;
3288          d[1] = g;
3289          d[2] = b;
3290 }
3291 
3292 static inline void
pack_ubyte_rgb_sint32(const GLubyte src[4],void * dst)3293 pack_ubyte_rgb_sint32(const GLubyte src[4], void *dst)
3294 {
3295 
3296 
3297       int32_t r =
3298               _mesa_unsigned_to_signed(src[0], 32);
3299 
3300 
3301       int32_t g =
3302               _mesa_unsigned_to_signed(src[1], 32);
3303 
3304 
3305       int32_t b =
3306               _mesa_unsigned_to_signed(src[2], 32);
3307 
3308       int32_t *d = (int32_t *)dst;
3309          d[0] = r;
3310          d[1] = g;
3311          d[2] = b;
3312 }
3313 
3314 static inline void
pack_ubyte_rgba_uint8(const GLubyte src[4],void * dst)3315 pack_ubyte_rgba_uint8(const GLubyte src[4], void *dst)
3316 {
3317 
3318 
3319       uint8_t r =
3320               _mesa_unsigned_to_unsigned(src[0], 8);
3321 
3322 
3323       uint8_t g =
3324               _mesa_unsigned_to_unsigned(src[1], 8);
3325 
3326 
3327       uint8_t b =
3328               _mesa_unsigned_to_unsigned(src[2], 8);
3329 
3330 
3331       uint8_t a =
3332               _mesa_unsigned_to_unsigned(src[3], 8);
3333 
3334       uint8_t *d = (uint8_t *)dst;
3335          d[0] = r;
3336          d[1] = g;
3337          d[2] = b;
3338          d[3] = a;
3339 }
3340 
3341 static inline void
pack_ubyte_rgba_uint16(const GLubyte src[4],void * dst)3342 pack_ubyte_rgba_uint16(const GLubyte src[4], void *dst)
3343 {
3344 
3345 
3346       uint16_t r =
3347               _mesa_unsigned_to_unsigned(src[0], 16);
3348 
3349 
3350       uint16_t g =
3351               _mesa_unsigned_to_unsigned(src[1], 16);
3352 
3353 
3354       uint16_t b =
3355               _mesa_unsigned_to_unsigned(src[2], 16);
3356 
3357 
3358       uint16_t a =
3359               _mesa_unsigned_to_unsigned(src[3], 16);
3360 
3361       uint16_t *d = (uint16_t *)dst;
3362          d[0] = r;
3363          d[1] = g;
3364          d[2] = b;
3365          d[3] = a;
3366 }
3367 
3368 static inline void
pack_ubyte_rgba_uint32(const GLubyte src[4],void * dst)3369 pack_ubyte_rgba_uint32(const GLubyte src[4], void *dst)
3370 {
3371 
3372 
3373       uint32_t r =
3374               _mesa_unsigned_to_unsigned(src[0], 32);
3375 
3376 
3377       uint32_t g =
3378               _mesa_unsigned_to_unsigned(src[1], 32);
3379 
3380 
3381       uint32_t b =
3382               _mesa_unsigned_to_unsigned(src[2], 32);
3383 
3384 
3385       uint32_t a =
3386               _mesa_unsigned_to_unsigned(src[3], 32);
3387 
3388       uint32_t *d = (uint32_t *)dst;
3389          d[0] = r;
3390          d[1] = g;
3391          d[2] = b;
3392          d[3] = a;
3393 }
3394 
3395 static inline void
pack_ubyte_rgba_sint8(const GLubyte src[4],void * dst)3396 pack_ubyte_rgba_sint8(const GLubyte src[4], void *dst)
3397 {
3398 
3399 
3400       int8_t r =
3401               _mesa_unsigned_to_signed(src[0], 8);
3402 
3403 
3404       int8_t g =
3405               _mesa_unsigned_to_signed(src[1], 8);
3406 
3407 
3408       int8_t b =
3409               _mesa_unsigned_to_signed(src[2], 8);
3410 
3411 
3412       int8_t a =
3413               _mesa_unsigned_to_signed(src[3], 8);
3414 
3415       int8_t *d = (int8_t *)dst;
3416          d[0] = r;
3417          d[1] = g;
3418          d[2] = b;
3419          d[3] = a;
3420 }
3421 
3422 static inline void
pack_ubyte_rgba_sint16(const GLubyte src[4],void * dst)3423 pack_ubyte_rgba_sint16(const GLubyte src[4], void *dst)
3424 {
3425 
3426 
3427       int16_t r =
3428               _mesa_unsigned_to_signed(src[0], 16);
3429 
3430 
3431       int16_t g =
3432               _mesa_unsigned_to_signed(src[1], 16);
3433 
3434 
3435       int16_t b =
3436               _mesa_unsigned_to_signed(src[2], 16);
3437 
3438 
3439       int16_t a =
3440               _mesa_unsigned_to_signed(src[3], 16);
3441 
3442       int16_t *d = (int16_t *)dst;
3443          d[0] = r;
3444          d[1] = g;
3445          d[2] = b;
3446          d[3] = a;
3447 }
3448 
3449 static inline void
pack_ubyte_rgba_sint32(const GLubyte src[4],void * dst)3450 pack_ubyte_rgba_sint32(const GLubyte src[4], void *dst)
3451 {
3452 
3453 
3454       int32_t r =
3455               _mesa_unsigned_to_signed(src[0], 32);
3456 
3457 
3458       int32_t g =
3459               _mesa_unsigned_to_signed(src[1], 32);
3460 
3461 
3462       int32_t b =
3463               _mesa_unsigned_to_signed(src[2], 32);
3464 
3465 
3466       int32_t a =
3467               _mesa_unsigned_to_signed(src[3], 32);
3468 
3469       int32_t *d = (int32_t *)dst;
3470          d[0] = r;
3471          d[1] = g;
3472          d[2] = b;
3473          d[3] = a;
3474 }
3475 
3476 static inline void
pack_ubyte_rgbx_uint8(const GLubyte src[4],void * dst)3477 pack_ubyte_rgbx_uint8(const GLubyte src[4], void *dst)
3478 {
3479 
3480 
3481       uint8_t r =
3482               _mesa_unsigned_to_unsigned(src[0], 8);
3483 
3484 
3485       uint8_t g =
3486               _mesa_unsigned_to_unsigned(src[1], 8);
3487 
3488 
3489       uint8_t b =
3490               _mesa_unsigned_to_unsigned(src[2], 8);
3491 
3492 
3493       uint8_t *d = (uint8_t *)dst;
3494          d[0] = r;
3495          d[1] = g;
3496          d[2] = b;
3497             }
3498 
3499 static inline void
pack_ubyte_rgbx_uint16(const GLubyte src[4],void * dst)3500 pack_ubyte_rgbx_uint16(const GLubyte src[4], void *dst)
3501 {
3502 
3503 
3504       uint16_t r =
3505               _mesa_unsigned_to_unsigned(src[0], 16);
3506 
3507 
3508       uint16_t g =
3509               _mesa_unsigned_to_unsigned(src[1], 16);
3510 
3511 
3512       uint16_t b =
3513               _mesa_unsigned_to_unsigned(src[2], 16);
3514 
3515 
3516       uint16_t *d = (uint16_t *)dst;
3517          d[0] = r;
3518          d[1] = g;
3519          d[2] = b;
3520             }
3521 
3522 static inline void
pack_ubyte_rgbx_uint32(const GLubyte src[4],void * dst)3523 pack_ubyte_rgbx_uint32(const GLubyte src[4], void *dst)
3524 {
3525 
3526 
3527       uint32_t r =
3528               _mesa_unsigned_to_unsigned(src[0], 32);
3529 
3530 
3531       uint32_t g =
3532               _mesa_unsigned_to_unsigned(src[1], 32);
3533 
3534 
3535       uint32_t b =
3536               _mesa_unsigned_to_unsigned(src[2], 32);
3537 
3538 
3539       uint32_t *d = (uint32_t *)dst;
3540          d[0] = r;
3541          d[1] = g;
3542          d[2] = b;
3543             }
3544 
3545 static inline void
pack_ubyte_rgbx_sint8(const GLubyte src[4],void * dst)3546 pack_ubyte_rgbx_sint8(const GLubyte src[4], void *dst)
3547 {
3548 
3549 
3550       int8_t r =
3551               _mesa_unsigned_to_signed(src[0], 8);
3552 
3553 
3554       int8_t g =
3555               _mesa_unsigned_to_signed(src[1], 8);
3556 
3557 
3558       int8_t b =
3559               _mesa_unsigned_to_signed(src[2], 8);
3560 
3561 
3562       int8_t *d = (int8_t *)dst;
3563          d[0] = r;
3564          d[1] = g;
3565          d[2] = b;
3566             }
3567 
3568 static inline void
pack_ubyte_rgbx_sint16(const GLubyte src[4],void * dst)3569 pack_ubyte_rgbx_sint16(const GLubyte src[4], void *dst)
3570 {
3571 
3572 
3573       int16_t r =
3574               _mesa_unsigned_to_signed(src[0], 16);
3575 
3576 
3577       int16_t g =
3578               _mesa_unsigned_to_signed(src[1], 16);
3579 
3580 
3581       int16_t b =
3582               _mesa_unsigned_to_signed(src[2], 16);
3583 
3584 
3585       int16_t *d = (int16_t *)dst;
3586          d[0] = r;
3587          d[1] = g;
3588          d[2] = b;
3589             }
3590 
3591 static inline void
pack_ubyte_rgbx_sint32(const GLubyte src[4],void * dst)3592 pack_ubyte_rgbx_sint32(const GLubyte src[4], void *dst)
3593 {
3594 
3595 
3596       int32_t r =
3597               _mesa_unsigned_to_signed(src[0], 32);
3598 
3599 
3600       int32_t g =
3601               _mesa_unsigned_to_signed(src[1], 32);
3602 
3603 
3604       int32_t b =
3605               _mesa_unsigned_to_signed(src[2], 32);
3606 
3607 
3608       int32_t *d = (int32_t *)dst;
3609          d[0] = r;
3610          d[1] = g;
3611          d[2] = b;
3612             }
3613 
3614 static inline void
pack_ubyte_r9g9b9e5_float(const GLubyte src[4],void * dst)3615 pack_ubyte_r9g9b9e5_float(const GLubyte src[4], void *dst)
3616 {
3617    GLuint *d = (GLuint *) dst;
3618    GLfloat rgb[3];
3619    rgb[0] = _mesa_unorm_to_float(src[RCOMP], 8);
3620    rgb[1] = _mesa_unorm_to_float(src[GCOMP], 8);
3621    rgb[2] = _mesa_unorm_to_float(src[BCOMP], 8);
3622    *d = float3_to_rgb9e5(rgb);
3623 }
3624 
3625 static inline void
pack_ubyte_r11g11b10_float(const GLubyte src[4],void * dst)3626 pack_ubyte_r11g11b10_float(const GLubyte src[4], void *dst)
3627 {
3628    GLuint *d = (GLuint *) dst;
3629    GLfloat rgb[3];
3630    rgb[0] = _mesa_unorm_to_float(src[RCOMP], 8);
3631    rgb[1] = _mesa_unorm_to_float(src[GCOMP], 8);
3632    rgb[2] = _mesa_unorm_to_float(src[BCOMP], 8);
3633    *d = float3_to_r11g11b10f(rgb);
3634 }
3635 
3636 /* uint packing functions */
3637 
3638 
3639 static inline void
pack_uint_a8b8g8r8_uint(const GLuint src[4],void * dst)3640 pack_uint_a8b8g8r8_uint(const GLuint src[4], void *dst)
3641 {
3642 
3643 
3644       uint8_t a =
3645          _mesa_unsigned_to_unsigned(src[3], 8);
3646 
3647 
3648       uint8_t b =
3649          _mesa_unsigned_to_unsigned(src[2], 8);
3650 
3651 
3652       uint8_t g =
3653          _mesa_unsigned_to_unsigned(src[1], 8);
3654 
3655 
3656       uint8_t r =
3657          _mesa_unsigned_to_unsigned(src[0], 8);
3658 
3659       uint32_t d = 0;
3660          d |= PACK(a, 0, 8);
3661          d |= PACK(b, 8, 8);
3662          d |= PACK(g, 16, 8);
3663          d |= PACK(r, 24, 8);
3664       (*(uint32_t *)dst) = d;
3665 }
3666 
3667 static inline void
pack_uint_a8r8g8b8_uint(const GLuint src[4],void * dst)3668 pack_uint_a8r8g8b8_uint(const GLuint src[4], void *dst)
3669 {
3670 
3671 
3672       uint8_t a =
3673          _mesa_unsigned_to_unsigned(src[3], 8);
3674 
3675 
3676       uint8_t r =
3677          _mesa_unsigned_to_unsigned(src[0], 8);
3678 
3679 
3680       uint8_t g =
3681          _mesa_unsigned_to_unsigned(src[1], 8);
3682 
3683 
3684       uint8_t b =
3685          _mesa_unsigned_to_unsigned(src[2], 8);
3686 
3687       uint32_t d = 0;
3688          d |= PACK(a, 0, 8);
3689          d |= PACK(r, 8, 8);
3690          d |= PACK(g, 16, 8);
3691          d |= PACK(b, 24, 8);
3692       (*(uint32_t *)dst) = d;
3693 }
3694 
3695 static inline void
pack_uint_r8g8b8a8_uint(const GLuint src[4],void * dst)3696 pack_uint_r8g8b8a8_uint(const GLuint src[4], void *dst)
3697 {
3698 
3699 
3700       uint8_t r =
3701          _mesa_unsigned_to_unsigned(src[0], 8);
3702 
3703 
3704       uint8_t g =
3705          _mesa_unsigned_to_unsigned(src[1], 8);
3706 
3707 
3708       uint8_t b =
3709          _mesa_unsigned_to_unsigned(src[2], 8);
3710 
3711 
3712       uint8_t a =
3713          _mesa_unsigned_to_unsigned(src[3], 8);
3714 
3715       uint32_t d = 0;
3716          d |= PACK(r, 0, 8);
3717          d |= PACK(g, 8, 8);
3718          d |= PACK(b, 16, 8);
3719          d |= PACK(a, 24, 8);
3720       (*(uint32_t *)dst) = d;
3721 }
3722 
3723 static inline void
pack_uint_b8g8r8a8_uint(const GLuint src[4],void * dst)3724 pack_uint_b8g8r8a8_uint(const GLuint src[4], void *dst)
3725 {
3726 
3727 
3728       uint8_t b =
3729          _mesa_unsigned_to_unsigned(src[2], 8);
3730 
3731 
3732       uint8_t g =
3733          _mesa_unsigned_to_unsigned(src[1], 8);
3734 
3735 
3736       uint8_t r =
3737          _mesa_unsigned_to_unsigned(src[0], 8);
3738 
3739 
3740       uint8_t a =
3741          _mesa_unsigned_to_unsigned(src[3], 8);
3742 
3743       uint32_t d = 0;
3744          d |= PACK(b, 0, 8);
3745          d |= PACK(g, 8, 8);
3746          d |= PACK(r, 16, 8);
3747          d |= PACK(a, 24, 8);
3748       (*(uint32_t *)dst) = d;
3749 }
3750 
3751 static inline void
pack_uint_b10g10r10a2_uint(const GLuint src[4],void * dst)3752 pack_uint_b10g10r10a2_uint(const GLuint src[4], void *dst)
3753 {
3754 
3755 
3756       uint16_t b =
3757          _mesa_unsigned_to_unsigned(src[2], 10);
3758 
3759 
3760       uint16_t g =
3761          _mesa_unsigned_to_unsigned(src[1], 10);
3762 
3763 
3764       uint16_t r =
3765          _mesa_unsigned_to_unsigned(src[0], 10);
3766 
3767 
3768       uint8_t a =
3769          _mesa_unsigned_to_unsigned(src[3], 2);
3770 
3771       uint32_t d = 0;
3772          d |= PACK(b, 0, 10);
3773          d |= PACK(g, 10, 10);
3774          d |= PACK(r, 20, 10);
3775          d |= PACK(a, 30, 2);
3776       (*(uint32_t *)dst) = d;
3777 }
3778 
3779 static inline void
pack_uint_r10g10b10a2_uint(const GLuint src[4],void * dst)3780 pack_uint_r10g10b10a2_uint(const GLuint src[4], void *dst)
3781 {
3782 
3783 
3784       uint16_t r =
3785          _mesa_unsigned_to_unsigned(src[0], 10);
3786 
3787 
3788       uint16_t g =
3789          _mesa_unsigned_to_unsigned(src[1], 10);
3790 
3791 
3792       uint16_t b =
3793          _mesa_unsigned_to_unsigned(src[2], 10);
3794 
3795 
3796       uint8_t a =
3797          _mesa_unsigned_to_unsigned(src[3], 2);
3798 
3799       uint32_t d = 0;
3800          d |= PACK(r, 0, 10);
3801          d |= PACK(g, 10, 10);
3802          d |= PACK(b, 20, 10);
3803          d |= PACK(a, 30, 2);
3804       (*(uint32_t *)dst) = d;
3805 }
3806 
3807 static inline void
pack_uint_a2b10g10r10_uint(const GLuint src[4],void * dst)3808 pack_uint_a2b10g10r10_uint(const GLuint src[4], void *dst)
3809 {
3810 
3811 
3812       uint8_t a =
3813          _mesa_unsigned_to_unsigned(src[3], 2);
3814 
3815 
3816       uint16_t b =
3817          _mesa_unsigned_to_unsigned(src[2], 10);
3818 
3819 
3820       uint16_t g =
3821          _mesa_unsigned_to_unsigned(src[1], 10);
3822 
3823 
3824       uint16_t r =
3825          _mesa_unsigned_to_unsigned(src[0], 10);
3826 
3827       uint32_t d = 0;
3828          d |= PACK(a, 0, 2);
3829          d |= PACK(b, 2, 10);
3830          d |= PACK(g, 12, 10);
3831          d |= PACK(r, 22, 10);
3832       (*(uint32_t *)dst) = d;
3833 }
3834 
3835 static inline void
pack_uint_a2r10g10b10_uint(const GLuint src[4],void * dst)3836 pack_uint_a2r10g10b10_uint(const GLuint src[4], void *dst)
3837 {
3838 
3839 
3840       uint8_t a =
3841          _mesa_unsigned_to_unsigned(src[3], 2);
3842 
3843 
3844       uint16_t r =
3845          _mesa_unsigned_to_unsigned(src[0], 10);
3846 
3847 
3848       uint16_t g =
3849          _mesa_unsigned_to_unsigned(src[1], 10);
3850 
3851 
3852       uint16_t b =
3853          _mesa_unsigned_to_unsigned(src[2], 10);
3854 
3855       uint32_t d = 0;
3856          d |= PACK(a, 0, 2);
3857          d |= PACK(r, 2, 10);
3858          d |= PACK(g, 12, 10);
3859          d |= PACK(b, 22, 10);
3860       (*(uint32_t *)dst) = d;
3861 }
3862 
3863 static inline void
pack_uint_b5g6r5_uint(const GLuint src[4],void * dst)3864 pack_uint_b5g6r5_uint(const GLuint src[4], void *dst)
3865 {
3866 
3867 
3868       uint8_t b =
3869          _mesa_unsigned_to_unsigned(src[2], 5);
3870 
3871 
3872       uint8_t g =
3873          _mesa_unsigned_to_unsigned(src[1], 6);
3874 
3875 
3876       uint8_t r =
3877          _mesa_unsigned_to_unsigned(src[0], 5);
3878 
3879       uint16_t d = 0;
3880          d |= PACK(b, 0, 5);
3881          d |= PACK(g, 5, 6);
3882          d |= PACK(r, 11, 5);
3883       (*(uint16_t *)dst) = d;
3884 }
3885 
3886 static inline void
pack_uint_r5g6b5_uint(const GLuint src[4],void * dst)3887 pack_uint_r5g6b5_uint(const GLuint src[4], void *dst)
3888 {
3889 
3890 
3891       uint8_t r =
3892          _mesa_unsigned_to_unsigned(src[0], 5);
3893 
3894 
3895       uint8_t g =
3896          _mesa_unsigned_to_unsigned(src[1], 6);
3897 
3898 
3899       uint8_t b =
3900          _mesa_unsigned_to_unsigned(src[2], 5);
3901 
3902       uint16_t d = 0;
3903          d |= PACK(r, 0, 5);
3904          d |= PACK(g, 5, 6);
3905          d |= PACK(b, 11, 5);
3906       (*(uint16_t *)dst) = d;
3907 }
3908 
3909 static inline void
pack_uint_b2g3r3_uint(const GLuint src[4],void * dst)3910 pack_uint_b2g3r3_uint(const GLuint src[4], void *dst)
3911 {
3912 
3913 
3914       uint8_t b =
3915          _mesa_unsigned_to_unsigned(src[2], 2);
3916 
3917 
3918       uint8_t g =
3919          _mesa_unsigned_to_unsigned(src[1], 3);
3920 
3921 
3922       uint8_t r =
3923          _mesa_unsigned_to_unsigned(src[0], 3);
3924 
3925       uint8_t d = 0;
3926          d |= PACK(b, 0, 2);
3927          d |= PACK(g, 2, 3);
3928          d |= PACK(r, 5, 3);
3929       (*(uint8_t *)dst) = d;
3930 }
3931 
3932 static inline void
pack_uint_r3g3b2_uint(const GLuint src[4],void * dst)3933 pack_uint_r3g3b2_uint(const GLuint src[4], void *dst)
3934 {
3935 
3936 
3937       uint8_t r =
3938          _mesa_unsigned_to_unsigned(src[0], 3);
3939 
3940 
3941       uint8_t g =
3942          _mesa_unsigned_to_unsigned(src[1], 3);
3943 
3944 
3945       uint8_t b =
3946          _mesa_unsigned_to_unsigned(src[2], 2);
3947 
3948       uint8_t d = 0;
3949          d |= PACK(r, 0, 3);
3950          d |= PACK(g, 3, 3);
3951          d |= PACK(b, 6, 2);
3952       (*(uint8_t *)dst) = d;
3953 }
3954 
3955 static inline void
pack_uint_a4b4g4r4_uint(const GLuint src[4],void * dst)3956 pack_uint_a4b4g4r4_uint(const GLuint src[4], void *dst)
3957 {
3958 
3959 
3960       uint8_t a =
3961          _mesa_unsigned_to_unsigned(src[3], 4);
3962 
3963 
3964       uint8_t b =
3965          _mesa_unsigned_to_unsigned(src[2], 4);
3966 
3967 
3968       uint8_t g =
3969          _mesa_unsigned_to_unsigned(src[1], 4);
3970 
3971 
3972       uint8_t r =
3973          _mesa_unsigned_to_unsigned(src[0], 4);
3974 
3975       uint16_t d = 0;
3976          d |= PACK(a, 0, 4);
3977          d |= PACK(b, 4, 4);
3978          d |= PACK(g, 8, 4);
3979          d |= PACK(r, 12, 4);
3980       (*(uint16_t *)dst) = d;
3981 }
3982 
3983 static inline void
pack_uint_r4g4b4a4_uint(const GLuint src[4],void * dst)3984 pack_uint_r4g4b4a4_uint(const GLuint src[4], void *dst)
3985 {
3986 
3987 
3988       uint8_t r =
3989          _mesa_unsigned_to_unsigned(src[0], 4);
3990 
3991 
3992       uint8_t g =
3993          _mesa_unsigned_to_unsigned(src[1], 4);
3994 
3995 
3996       uint8_t b =
3997          _mesa_unsigned_to_unsigned(src[2], 4);
3998 
3999 
4000       uint8_t a =
4001          _mesa_unsigned_to_unsigned(src[3], 4);
4002 
4003       uint16_t d = 0;
4004          d |= PACK(r, 0, 4);
4005          d |= PACK(g, 4, 4);
4006          d |= PACK(b, 8, 4);
4007          d |= PACK(a, 12, 4);
4008       (*(uint16_t *)dst) = d;
4009 }
4010 
4011 static inline void
pack_uint_b4g4r4a4_uint(const GLuint src[4],void * dst)4012 pack_uint_b4g4r4a4_uint(const GLuint src[4], void *dst)
4013 {
4014 
4015 
4016       uint8_t b =
4017          _mesa_unsigned_to_unsigned(src[2], 4);
4018 
4019 
4020       uint8_t g =
4021          _mesa_unsigned_to_unsigned(src[1], 4);
4022 
4023 
4024       uint8_t r =
4025          _mesa_unsigned_to_unsigned(src[0], 4);
4026 
4027 
4028       uint8_t a =
4029          _mesa_unsigned_to_unsigned(src[3], 4);
4030 
4031       uint16_t d = 0;
4032          d |= PACK(b, 0, 4);
4033          d |= PACK(g, 4, 4);
4034          d |= PACK(r, 8, 4);
4035          d |= PACK(a, 12, 4);
4036       (*(uint16_t *)dst) = d;
4037 }
4038 
4039 static inline void
pack_uint_a4r4g4b4_uint(const GLuint src[4],void * dst)4040 pack_uint_a4r4g4b4_uint(const GLuint src[4], void *dst)
4041 {
4042 
4043 
4044       uint8_t a =
4045          _mesa_unsigned_to_unsigned(src[3], 4);
4046 
4047 
4048       uint8_t r =
4049          _mesa_unsigned_to_unsigned(src[0], 4);
4050 
4051 
4052       uint8_t g =
4053          _mesa_unsigned_to_unsigned(src[1], 4);
4054 
4055 
4056       uint8_t b =
4057          _mesa_unsigned_to_unsigned(src[2], 4);
4058 
4059       uint16_t d = 0;
4060          d |= PACK(a, 0, 4);
4061          d |= PACK(r, 4, 4);
4062          d |= PACK(g, 8, 4);
4063          d |= PACK(b, 12, 4);
4064       (*(uint16_t *)dst) = d;
4065 }
4066 
4067 static inline void
pack_uint_a1b5g5r5_uint(const GLuint src[4],void * dst)4068 pack_uint_a1b5g5r5_uint(const GLuint src[4], void *dst)
4069 {
4070 
4071 
4072       uint8_t a =
4073          _mesa_unsigned_to_unsigned(src[3], 1);
4074 
4075 
4076       uint8_t b =
4077          _mesa_unsigned_to_unsigned(src[2], 5);
4078 
4079 
4080       uint8_t g =
4081          _mesa_unsigned_to_unsigned(src[1], 5);
4082 
4083 
4084       uint8_t r =
4085          _mesa_unsigned_to_unsigned(src[0], 5);
4086 
4087       uint16_t d = 0;
4088          d |= PACK(a, 0, 1);
4089          d |= PACK(b, 1, 5);
4090          d |= PACK(g, 6, 5);
4091          d |= PACK(r, 11, 5);
4092       (*(uint16_t *)dst) = d;
4093 }
4094 
4095 static inline void
pack_uint_b5g5r5a1_uint(const GLuint src[4],void * dst)4096 pack_uint_b5g5r5a1_uint(const GLuint src[4], void *dst)
4097 {
4098 
4099 
4100       uint8_t b =
4101          _mesa_unsigned_to_unsigned(src[2], 5);
4102 
4103 
4104       uint8_t g =
4105          _mesa_unsigned_to_unsigned(src[1], 5);
4106 
4107 
4108       uint8_t r =
4109          _mesa_unsigned_to_unsigned(src[0], 5);
4110 
4111 
4112       uint8_t a =
4113          _mesa_unsigned_to_unsigned(src[3], 1);
4114 
4115       uint16_t d = 0;
4116          d |= PACK(b, 0, 5);
4117          d |= PACK(g, 5, 5);
4118          d |= PACK(r, 10, 5);
4119          d |= PACK(a, 15, 1);
4120       (*(uint16_t *)dst) = d;
4121 }
4122 
4123 static inline void
pack_uint_a1r5g5b5_uint(const GLuint src[4],void * dst)4124 pack_uint_a1r5g5b5_uint(const GLuint src[4], void *dst)
4125 {
4126 
4127 
4128       uint8_t a =
4129          _mesa_unsigned_to_unsigned(src[3], 1);
4130 
4131 
4132       uint8_t r =
4133          _mesa_unsigned_to_unsigned(src[0], 5);
4134 
4135 
4136       uint8_t g =
4137          _mesa_unsigned_to_unsigned(src[1], 5);
4138 
4139 
4140       uint8_t b =
4141          _mesa_unsigned_to_unsigned(src[2], 5);
4142 
4143       uint16_t d = 0;
4144          d |= PACK(a, 0, 1);
4145          d |= PACK(r, 1, 5);
4146          d |= PACK(g, 6, 5);
4147          d |= PACK(b, 11, 5);
4148       (*(uint16_t *)dst) = d;
4149 }
4150 
4151 static inline void
pack_uint_r5g5b5a1_uint(const GLuint src[4],void * dst)4152 pack_uint_r5g5b5a1_uint(const GLuint src[4], void *dst)
4153 {
4154 
4155 
4156       uint8_t r =
4157          _mesa_unsigned_to_unsigned(src[0], 5);
4158 
4159 
4160       uint8_t g =
4161          _mesa_unsigned_to_unsigned(src[1], 5);
4162 
4163 
4164       uint8_t b =
4165          _mesa_unsigned_to_unsigned(src[2], 5);
4166 
4167 
4168       uint8_t a =
4169          _mesa_unsigned_to_unsigned(src[3], 1);
4170 
4171       uint16_t d = 0;
4172          d |= PACK(r, 0, 5);
4173          d |= PACK(g, 5, 5);
4174          d |= PACK(b, 10, 5);
4175          d |= PACK(a, 15, 1);
4176       (*(uint16_t *)dst) = d;
4177 }
4178 
4179 static inline void
pack_uint_a_uint8(const GLuint src[4],void * dst)4180 pack_uint_a_uint8(const GLuint src[4], void *dst)
4181 {
4182 
4183 
4184       uint8_t a =
4185          _mesa_unsigned_to_unsigned(src[3], 8);
4186 
4187       uint8_t *d = (uint8_t *)dst;
4188          d[0] = a;
4189 }
4190 
4191 static inline void
pack_uint_a_uint16(const GLuint src[4],void * dst)4192 pack_uint_a_uint16(const GLuint src[4], void *dst)
4193 {
4194 
4195 
4196       uint16_t a =
4197          _mesa_unsigned_to_unsigned(src[3], 16);
4198 
4199       uint16_t *d = (uint16_t *)dst;
4200          d[0] = a;
4201 }
4202 
4203 static inline void
pack_uint_a_uint32(const GLuint src[4],void * dst)4204 pack_uint_a_uint32(const GLuint src[4], void *dst)
4205 {
4206 
4207 
4208       uint32_t a =
4209          _mesa_unsigned_to_unsigned(src[3], 32);
4210 
4211       uint32_t *d = (uint32_t *)dst;
4212          d[0] = a;
4213 }
4214 
4215 static inline void
pack_uint_a_sint8(const GLuint src[4],void * dst)4216 pack_uint_a_sint8(const GLuint src[4], void *dst)
4217 {
4218 
4219 
4220       int8_t a =
4221          _mesa_signed_to_signed(src[3], 8);
4222 
4223       int8_t *d = (int8_t *)dst;
4224          d[0] = a;
4225 }
4226 
4227 static inline void
pack_uint_a_sint16(const GLuint src[4],void * dst)4228 pack_uint_a_sint16(const GLuint src[4], void *dst)
4229 {
4230 
4231 
4232       int16_t a =
4233          _mesa_signed_to_signed(src[3], 16);
4234 
4235       int16_t *d = (int16_t *)dst;
4236          d[0] = a;
4237 }
4238 
4239 static inline void
pack_uint_a_sint32(const GLuint src[4],void * dst)4240 pack_uint_a_sint32(const GLuint src[4], void *dst)
4241 {
4242 
4243 
4244       int32_t a =
4245          _mesa_signed_to_signed(src[3], 32);
4246 
4247       int32_t *d = (int32_t *)dst;
4248          d[0] = a;
4249 }
4250 
4251 static inline void
pack_uint_i_uint8(const GLuint src[4],void * dst)4252 pack_uint_i_uint8(const GLuint src[4], void *dst)
4253 {
4254 
4255 
4256       uint8_t i =
4257          _mesa_unsigned_to_unsigned(src[0], 8);
4258 
4259       uint8_t *d = (uint8_t *)dst;
4260          d[0] = i;
4261 }
4262 
4263 static inline void
pack_uint_i_uint16(const GLuint src[4],void * dst)4264 pack_uint_i_uint16(const GLuint src[4], void *dst)
4265 {
4266 
4267 
4268       uint16_t i =
4269          _mesa_unsigned_to_unsigned(src[0], 16);
4270 
4271       uint16_t *d = (uint16_t *)dst;
4272          d[0] = i;
4273 }
4274 
4275 static inline void
pack_uint_i_uint32(const GLuint src[4],void * dst)4276 pack_uint_i_uint32(const GLuint src[4], void *dst)
4277 {
4278 
4279 
4280       uint32_t i =
4281          _mesa_unsigned_to_unsigned(src[0], 32);
4282 
4283       uint32_t *d = (uint32_t *)dst;
4284          d[0] = i;
4285 }
4286 
4287 static inline void
pack_uint_i_sint8(const GLuint src[4],void * dst)4288 pack_uint_i_sint8(const GLuint src[4], void *dst)
4289 {
4290 
4291 
4292       int8_t i =
4293          _mesa_signed_to_signed(src[0], 8);
4294 
4295       int8_t *d = (int8_t *)dst;
4296          d[0] = i;
4297 }
4298 
4299 static inline void
pack_uint_i_sint16(const GLuint src[4],void * dst)4300 pack_uint_i_sint16(const GLuint src[4], void *dst)
4301 {
4302 
4303 
4304       int16_t i =
4305          _mesa_signed_to_signed(src[0], 16);
4306 
4307       int16_t *d = (int16_t *)dst;
4308          d[0] = i;
4309 }
4310 
4311 static inline void
pack_uint_i_sint32(const GLuint src[4],void * dst)4312 pack_uint_i_sint32(const GLuint src[4], void *dst)
4313 {
4314 
4315 
4316       int32_t i =
4317          _mesa_signed_to_signed(src[0], 32);
4318 
4319       int32_t *d = (int32_t *)dst;
4320          d[0] = i;
4321 }
4322 
4323 static inline void
pack_uint_l_uint8(const GLuint src[4],void * dst)4324 pack_uint_l_uint8(const GLuint src[4], void *dst)
4325 {
4326 
4327 
4328       uint8_t l =
4329          _mesa_unsigned_to_unsigned(src[0], 8);
4330 
4331       uint8_t *d = (uint8_t *)dst;
4332          d[0] = l;
4333 }
4334 
4335 static inline void
pack_uint_l_uint16(const GLuint src[4],void * dst)4336 pack_uint_l_uint16(const GLuint src[4], void *dst)
4337 {
4338 
4339 
4340       uint16_t l =
4341          _mesa_unsigned_to_unsigned(src[0], 16);
4342 
4343       uint16_t *d = (uint16_t *)dst;
4344          d[0] = l;
4345 }
4346 
4347 static inline void
pack_uint_l_uint32(const GLuint src[4],void * dst)4348 pack_uint_l_uint32(const GLuint src[4], void *dst)
4349 {
4350 
4351 
4352       uint32_t l =
4353          _mesa_unsigned_to_unsigned(src[0], 32);
4354 
4355       uint32_t *d = (uint32_t *)dst;
4356          d[0] = l;
4357 }
4358 
4359 static inline void
pack_uint_l_sint8(const GLuint src[4],void * dst)4360 pack_uint_l_sint8(const GLuint src[4], void *dst)
4361 {
4362 
4363 
4364       int8_t l =
4365          _mesa_signed_to_signed(src[0], 8);
4366 
4367       int8_t *d = (int8_t *)dst;
4368          d[0] = l;
4369 }
4370 
4371 static inline void
pack_uint_l_sint16(const GLuint src[4],void * dst)4372 pack_uint_l_sint16(const GLuint src[4], void *dst)
4373 {
4374 
4375 
4376       int16_t l =
4377          _mesa_signed_to_signed(src[0], 16);
4378 
4379       int16_t *d = (int16_t *)dst;
4380          d[0] = l;
4381 }
4382 
4383 static inline void
pack_uint_l_sint32(const GLuint src[4],void * dst)4384 pack_uint_l_sint32(const GLuint src[4], void *dst)
4385 {
4386 
4387 
4388       int32_t l =
4389          _mesa_signed_to_signed(src[0], 32);
4390 
4391       int32_t *d = (int32_t *)dst;
4392          d[0] = l;
4393 }
4394 
4395 static inline void
pack_uint_la_uint8(const GLuint src[4],void * dst)4396 pack_uint_la_uint8(const GLuint src[4], void *dst)
4397 {
4398 
4399 
4400       uint8_t l =
4401          _mesa_unsigned_to_unsigned(src[0], 8);
4402 
4403 
4404       uint8_t a =
4405          _mesa_unsigned_to_unsigned(src[3], 8);
4406 
4407       uint8_t *d = (uint8_t *)dst;
4408          d[0] = l;
4409          d[1] = a;
4410 }
4411 
4412 static inline void
pack_uint_la_uint16(const GLuint src[4],void * dst)4413 pack_uint_la_uint16(const GLuint src[4], void *dst)
4414 {
4415 
4416 
4417       uint16_t l =
4418          _mesa_unsigned_to_unsigned(src[0], 16);
4419 
4420 
4421       uint16_t a =
4422          _mesa_unsigned_to_unsigned(src[3], 16);
4423 
4424       uint16_t *d = (uint16_t *)dst;
4425          d[0] = l;
4426          d[1] = a;
4427 }
4428 
4429 static inline void
pack_uint_la_uint32(const GLuint src[4],void * dst)4430 pack_uint_la_uint32(const GLuint src[4], void *dst)
4431 {
4432 
4433 
4434       uint32_t l =
4435          _mesa_unsigned_to_unsigned(src[0], 32);
4436 
4437 
4438       uint32_t a =
4439          _mesa_unsigned_to_unsigned(src[3], 32);
4440 
4441       uint32_t *d = (uint32_t *)dst;
4442          d[0] = l;
4443          d[1] = a;
4444 }
4445 
4446 static inline void
pack_uint_la_sint8(const GLuint src[4],void * dst)4447 pack_uint_la_sint8(const GLuint src[4], void *dst)
4448 {
4449 
4450 
4451       int8_t l =
4452          _mesa_signed_to_signed(src[0], 8);
4453 
4454 
4455       int8_t a =
4456          _mesa_signed_to_signed(src[3], 8);
4457 
4458       int8_t *d = (int8_t *)dst;
4459          d[0] = l;
4460          d[1] = a;
4461 }
4462 
4463 static inline void
pack_uint_la_sint16(const GLuint src[4],void * dst)4464 pack_uint_la_sint16(const GLuint src[4], void *dst)
4465 {
4466 
4467 
4468       int16_t l =
4469          _mesa_signed_to_signed(src[0], 16);
4470 
4471 
4472       int16_t a =
4473          _mesa_signed_to_signed(src[3], 16);
4474 
4475       int16_t *d = (int16_t *)dst;
4476          d[0] = l;
4477          d[1] = a;
4478 }
4479 
4480 static inline void
pack_uint_la_sint32(const GLuint src[4],void * dst)4481 pack_uint_la_sint32(const GLuint src[4], void *dst)
4482 {
4483 
4484 
4485       int32_t l =
4486          _mesa_signed_to_signed(src[0], 32);
4487 
4488 
4489       int32_t a =
4490          _mesa_signed_to_signed(src[3], 32);
4491 
4492       int32_t *d = (int32_t *)dst;
4493          d[0] = l;
4494          d[1] = a;
4495 }
4496 
4497 static inline void
pack_uint_r_uint8(const GLuint src[4],void * dst)4498 pack_uint_r_uint8(const GLuint src[4], void *dst)
4499 {
4500 
4501 
4502       uint8_t r =
4503          _mesa_unsigned_to_unsigned(src[0], 8);
4504 
4505       uint8_t *d = (uint8_t *)dst;
4506          d[0] = r;
4507 }
4508 
4509 static inline void
pack_uint_r_uint16(const GLuint src[4],void * dst)4510 pack_uint_r_uint16(const GLuint src[4], void *dst)
4511 {
4512 
4513 
4514       uint16_t r =
4515          _mesa_unsigned_to_unsigned(src[0], 16);
4516 
4517       uint16_t *d = (uint16_t *)dst;
4518          d[0] = r;
4519 }
4520 
4521 static inline void
pack_uint_r_uint32(const GLuint src[4],void * dst)4522 pack_uint_r_uint32(const GLuint src[4], void *dst)
4523 {
4524 
4525 
4526       uint32_t r =
4527          _mesa_unsigned_to_unsigned(src[0], 32);
4528 
4529       uint32_t *d = (uint32_t *)dst;
4530          d[0] = r;
4531 }
4532 
4533 static inline void
pack_uint_r_sint8(const GLuint src[4],void * dst)4534 pack_uint_r_sint8(const GLuint src[4], void *dst)
4535 {
4536 
4537 
4538       int8_t r =
4539          _mesa_signed_to_signed(src[0], 8);
4540 
4541       int8_t *d = (int8_t *)dst;
4542          d[0] = r;
4543 }
4544 
4545 static inline void
pack_uint_r_sint16(const GLuint src[4],void * dst)4546 pack_uint_r_sint16(const GLuint src[4], void *dst)
4547 {
4548 
4549 
4550       int16_t r =
4551          _mesa_signed_to_signed(src[0], 16);
4552 
4553       int16_t *d = (int16_t *)dst;
4554          d[0] = r;
4555 }
4556 
4557 static inline void
pack_uint_r_sint32(const GLuint src[4],void * dst)4558 pack_uint_r_sint32(const GLuint src[4], void *dst)
4559 {
4560 
4561 
4562       int32_t r =
4563          _mesa_signed_to_signed(src[0], 32);
4564 
4565       int32_t *d = (int32_t *)dst;
4566          d[0] = r;
4567 }
4568 
4569 static inline void
pack_uint_rg_uint8(const GLuint src[4],void * dst)4570 pack_uint_rg_uint8(const GLuint src[4], void *dst)
4571 {
4572 
4573 
4574       uint8_t r =
4575          _mesa_unsigned_to_unsigned(src[0], 8);
4576 
4577 
4578       uint8_t g =
4579          _mesa_unsigned_to_unsigned(src[1], 8);
4580 
4581       uint8_t *d = (uint8_t *)dst;
4582          d[0] = r;
4583          d[1] = g;
4584 }
4585 
4586 static inline void
pack_uint_rg_uint16(const GLuint src[4],void * dst)4587 pack_uint_rg_uint16(const GLuint src[4], void *dst)
4588 {
4589 
4590 
4591       uint16_t r =
4592          _mesa_unsigned_to_unsigned(src[0], 16);
4593 
4594 
4595       uint16_t g =
4596          _mesa_unsigned_to_unsigned(src[1], 16);
4597 
4598       uint16_t *d = (uint16_t *)dst;
4599          d[0] = r;
4600          d[1] = g;
4601 }
4602 
4603 static inline void
pack_uint_rg_uint32(const GLuint src[4],void * dst)4604 pack_uint_rg_uint32(const GLuint src[4], void *dst)
4605 {
4606 
4607 
4608       uint32_t r =
4609          _mesa_unsigned_to_unsigned(src[0], 32);
4610 
4611 
4612       uint32_t g =
4613          _mesa_unsigned_to_unsigned(src[1], 32);
4614 
4615       uint32_t *d = (uint32_t *)dst;
4616          d[0] = r;
4617          d[1] = g;
4618 }
4619 
4620 static inline void
pack_uint_rg_sint8(const GLuint src[4],void * dst)4621 pack_uint_rg_sint8(const GLuint src[4], void *dst)
4622 {
4623 
4624 
4625       int8_t r =
4626          _mesa_signed_to_signed(src[0], 8);
4627 
4628 
4629       int8_t g =
4630          _mesa_signed_to_signed(src[1], 8);
4631 
4632       int8_t *d = (int8_t *)dst;
4633          d[0] = r;
4634          d[1] = g;
4635 }
4636 
4637 static inline void
pack_uint_rg_sint16(const GLuint src[4],void * dst)4638 pack_uint_rg_sint16(const GLuint src[4], void *dst)
4639 {
4640 
4641 
4642       int16_t r =
4643          _mesa_signed_to_signed(src[0], 16);
4644 
4645 
4646       int16_t g =
4647          _mesa_signed_to_signed(src[1], 16);
4648 
4649       int16_t *d = (int16_t *)dst;
4650          d[0] = r;
4651          d[1] = g;
4652 }
4653 
4654 static inline void
pack_uint_rg_sint32(const GLuint src[4],void * dst)4655 pack_uint_rg_sint32(const GLuint src[4], void *dst)
4656 {
4657 
4658 
4659       int32_t r =
4660          _mesa_signed_to_signed(src[0], 32);
4661 
4662 
4663       int32_t g =
4664          _mesa_signed_to_signed(src[1], 32);
4665 
4666       int32_t *d = (int32_t *)dst;
4667          d[0] = r;
4668          d[1] = g;
4669 }
4670 
4671 static inline void
pack_uint_rgb_uint8(const GLuint src[4],void * dst)4672 pack_uint_rgb_uint8(const GLuint src[4], void *dst)
4673 {
4674 
4675 
4676       uint8_t r =
4677          _mesa_unsigned_to_unsigned(src[0], 8);
4678 
4679 
4680       uint8_t g =
4681          _mesa_unsigned_to_unsigned(src[1], 8);
4682 
4683 
4684       uint8_t b =
4685          _mesa_unsigned_to_unsigned(src[2], 8);
4686 
4687       uint8_t *d = (uint8_t *)dst;
4688          d[0] = r;
4689          d[1] = g;
4690          d[2] = b;
4691 }
4692 
4693 static inline void
pack_uint_rgb_uint16(const GLuint src[4],void * dst)4694 pack_uint_rgb_uint16(const GLuint src[4], void *dst)
4695 {
4696 
4697 
4698       uint16_t r =
4699          _mesa_unsigned_to_unsigned(src[0], 16);
4700 
4701 
4702       uint16_t g =
4703          _mesa_unsigned_to_unsigned(src[1], 16);
4704 
4705 
4706       uint16_t b =
4707          _mesa_unsigned_to_unsigned(src[2], 16);
4708 
4709       uint16_t *d = (uint16_t *)dst;
4710          d[0] = r;
4711          d[1] = g;
4712          d[2] = b;
4713 }
4714 
4715 static inline void
pack_uint_rgb_uint32(const GLuint src[4],void * dst)4716 pack_uint_rgb_uint32(const GLuint src[4], void *dst)
4717 {
4718 
4719 
4720       uint32_t r =
4721          _mesa_unsigned_to_unsigned(src[0], 32);
4722 
4723 
4724       uint32_t g =
4725          _mesa_unsigned_to_unsigned(src[1], 32);
4726 
4727 
4728       uint32_t b =
4729          _mesa_unsigned_to_unsigned(src[2], 32);
4730 
4731       uint32_t *d = (uint32_t *)dst;
4732          d[0] = r;
4733          d[1] = g;
4734          d[2] = b;
4735 }
4736 
4737 static inline void
pack_uint_rgb_sint8(const GLuint src[4],void * dst)4738 pack_uint_rgb_sint8(const GLuint src[4], void *dst)
4739 {
4740 
4741 
4742       int8_t r =
4743          _mesa_signed_to_signed(src[0], 8);
4744 
4745 
4746       int8_t g =
4747          _mesa_signed_to_signed(src[1], 8);
4748 
4749 
4750       int8_t b =
4751          _mesa_signed_to_signed(src[2], 8);
4752 
4753       int8_t *d = (int8_t *)dst;
4754          d[0] = r;
4755          d[1] = g;
4756          d[2] = b;
4757 }
4758 
4759 static inline void
pack_uint_rgb_sint16(const GLuint src[4],void * dst)4760 pack_uint_rgb_sint16(const GLuint src[4], void *dst)
4761 {
4762 
4763 
4764       int16_t r =
4765          _mesa_signed_to_signed(src[0], 16);
4766 
4767 
4768       int16_t g =
4769          _mesa_signed_to_signed(src[1], 16);
4770 
4771 
4772       int16_t b =
4773          _mesa_signed_to_signed(src[2], 16);
4774 
4775       int16_t *d = (int16_t *)dst;
4776          d[0] = r;
4777          d[1] = g;
4778          d[2] = b;
4779 }
4780 
4781 static inline void
pack_uint_rgb_sint32(const GLuint src[4],void * dst)4782 pack_uint_rgb_sint32(const GLuint src[4], void *dst)
4783 {
4784 
4785 
4786       int32_t r =
4787          _mesa_signed_to_signed(src[0], 32);
4788 
4789 
4790       int32_t g =
4791          _mesa_signed_to_signed(src[1], 32);
4792 
4793 
4794       int32_t b =
4795          _mesa_signed_to_signed(src[2], 32);
4796 
4797       int32_t *d = (int32_t *)dst;
4798          d[0] = r;
4799          d[1] = g;
4800          d[2] = b;
4801 }
4802 
4803 static inline void
pack_uint_rgba_uint8(const GLuint src[4],void * dst)4804 pack_uint_rgba_uint8(const GLuint src[4], void *dst)
4805 {
4806 
4807 
4808       uint8_t r =
4809          _mesa_unsigned_to_unsigned(src[0], 8);
4810 
4811 
4812       uint8_t g =
4813          _mesa_unsigned_to_unsigned(src[1], 8);
4814 
4815 
4816       uint8_t b =
4817          _mesa_unsigned_to_unsigned(src[2], 8);
4818 
4819 
4820       uint8_t a =
4821          _mesa_unsigned_to_unsigned(src[3], 8);
4822 
4823       uint8_t *d = (uint8_t *)dst;
4824          d[0] = r;
4825          d[1] = g;
4826          d[2] = b;
4827          d[3] = a;
4828 }
4829 
4830 static inline void
pack_uint_rgba_uint16(const GLuint src[4],void * dst)4831 pack_uint_rgba_uint16(const GLuint src[4], void *dst)
4832 {
4833 
4834 
4835       uint16_t r =
4836          _mesa_unsigned_to_unsigned(src[0], 16);
4837 
4838 
4839       uint16_t g =
4840          _mesa_unsigned_to_unsigned(src[1], 16);
4841 
4842 
4843       uint16_t b =
4844          _mesa_unsigned_to_unsigned(src[2], 16);
4845 
4846 
4847       uint16_t a =
4848          _mesa_unsigned_to_unsigned(src[3], 16);
4849 
4850       uint16_t *d = (uint16_t *)dst;
4851          d[0] = r;
4852          d[1] = g;
4853          d[2] = b;
4854          d[3] = a;
4855 }
4856 
4857 static inline void
pack_uint_rgba_uint32(const GLuint src[4],void * dst)4858 pack_uint_rgba_uint32(const GLuint src[4], void *dst)
4859 {
4860 
4861 
4862       uint32_t r =
4863          _mesa_unsigned_to_unsigned(src[0], 32);
4864 
4865 
4866       uint32_t g =
4867          _mesa_unsigned_to_unsigned(src[1], 32);
4868 
4869 
4870       uint32_t b =
4871          _mesa_unsigned_to_unsigned(src[2], 32);
4872 
4873 
4874       uint32_t a =
4875          _mesa_unsigned_to_unsigned(src[3], 32);
4876 
4877       uint32_t *d = (uint32_t *)dst;
4878          d[0] = r;
4879          d[1] = g;
4880          d[2] = b;
4881          d[3] = a;
4882 }
4883 
4884 static inline void
pack_uint_rgba_sint8(const GLuint src[4],void * dst)4885 pack_uint_rgba_sint8(const GLuint src[4], void *dst)
4886 {
4887 
4888 
4889       int8_t r =
4890          _mesa_signed_to_signed(src[0], 8);
4891 
4892 
4893       int8_t g =
4894          _mesa_signed_to_signed(src[1], 8);
4895 
4896 
4897       int8_t b =
4898          _mesa_signed_to_signed(src[2], 8);
4899 
4900 
4901       int8_t a =
4902          _mesa_signed_to_signed(src[3], 8);
4903 
4904       int8_t *d = (int8_t *)dst;
4905          d[0] = r;
4906          d[1] = g;
4907          d[2] = b;
4908          d[3] = a;
4909 }
4910 
4911 static inline void
pack_uint_rgba_sint16(const GLuint src[4],void * dst)4912 pack_uint_rgba_sint16(const GLuint src[4], void *dst)
4913 {
4914 
4915 
4916       int16_t r =
4917          _mesa_signed_to_signed(src[0], 16);
4918 
4919 
4920       int16_t g =
4921          _mesa_signed_to_signed(src[1], 16);
4922 
4923 
4924       int16_t b =
4925          _mesa_signed_to_signed(src[2], 16);
4926 
4927 
4928       int16_t a =
4929          _mesa_signed_to_signed(src[3], 16);
4930 
4931       int16_t *d = (int16_t *)dst;
4932          d[0] = r;
4933          d[1] = g;
4934          d[2] = b;
4935          d[3] = a;
4936 }
4937 
4938 static inline void
pack_uint_rgba_sint32(const GLuint src[4],void * dst)4939 pack_uint_rgba_sint32(const GLuint src[4], void *dst)
4940 {
4941 
4942 
4943       int32_t r =
4944          _mesa_signed_to_signed(src[0], 32);
4945 
4946 
4947       int32_t g =
4948          _mesa_signed_to_signed(src[1], 32);
4949 
4950 
4951       int32_t b =
4952          _mesa_signed_to_signed(src[2], 32);
4953 
4954 
4955       int32_t a =
4956          _mesa_signed_to_signed(src[3], 32);
4957 
4958       int32_t *d = (int32_t *)dst;
4959          d[0] = r;
4960          d[1] = g;
4961          d[2] = b;
4962          d[3] = a;
4963 }
4964 
4965 static inline void
pack_uint_rgbx_uint8(const GLuint src[4],void * dst)4966 pack_uint_rgbx_uint8(const GLuint src[4], void *dst)
4967 {
4968 
4969 
4970       uint8_t r =
4971          _mesa_unsigned_to_unsigned(src[0], 8);
4972 
4973 
4974       uint8_t g =
4975          _mesa_unsigned_to_unsigned(src[1], 8);
4976 
4977 
4978       uint8_t b =
4979          _mesa_unsigned_to_unsigned(src[2], 8);
4980 
4981 
4982       uint8_t *d = (uint8_t *)dst;
4983          d[0] = r;
4984          d[1] = g;
4985          d[2] = b;
4986             }
4987 
4988 static inline void
pack_uint_rgbx_uint16(const GLuint src[4],void * dst)4989 pack_uint_rgbx_uint16(const GLuint src[4], void *dst)
4990 {
4991 
4992 
4993       uint16_t r =
4994          _mesa_unsigned_to_unsigned(src[0], 16);
4995 
4996 
4997       uint16_t g =
4998          _mesa_unsigned_to_unsigned(src[1], 16);
4999 
5000 
5001       uint16_t b =
5002          _mesa_unsigned_to_unsigned(src[2], 16);
5003 
5004 
5005       uint16_t *d = (uint16_t *)dst;
5006          d[0] = r;
5007          d[1] = g;
5008          d[2] = b;
5009             }
5010 
5011 static inline void
pack_uint_rgbx_uint32(const GLuint src[4],void * dst)5012 pack_uint_rgbx_uint32(const GLuint src[4], void *dst)
5013 {
5014 
5015 
5016       uint32_t r =
5017          _mesa_unsigned_to_unsigned(src[0], 32);
5018 
5019 
5020       uint32_t g =
5021          _mesa_unsigned_to_unsigned(src[1], 32);
5022 
5023 
5024       uint32_t b =
5025          _mesa_unsigned_to_unsigned(src[2], 32);
5026 
5027 
5028       uint32_t *d = (uint32_t *)dst;
5029          d[0] = r;
5030          d[1] = g;
5031          d[2] = b;
5032             }
5033 
5034 static inline void
pack_uint_rgbx_sint8(const GLuint src[4],void * dst)5035 pack_uint_rgbx_sint8(const GLuint src[4], void *dst)
5036 {
5037 
5038 
5039       int8_t r =
5040          _mesa_signed_to_signed(src[0], 8);
5041 
5042 
5043       int8_t g =
5044          _mesa_signed_to_signed(src[1], 8);
5045 
5046 
5047       int8_t b =
5048          _mesa_signed_to_signed(src[2], 8);
5049 
5050 
5051       int8_t *d = (int8_t *)dst;
5052          d[0] = r;
5053          d[1] = g;
5054          d[2] = b;
5055             }
5056 
5057 static inline void
pack_uint_rgbx_sint16(const GLuint src[4],void * dst)5058 pack_uint_rgbx_sint16(const GLuint src[4], void *dst)
5059 {
5060 
5061 
5062       int16_t r =
5063          _mesa_signed_to_signed(src[0], 16);
5064 
5065 
5066       int16_t g =
5067          _mesa_signed_to_signed(src[1], 16);
5068 
5069 
5070       int16_t b =
5071          _mesa_signed_to_signed(src[2], 16);
5072 
5073 
5074       int16_t *d = (int16_t *)dst;
5075          d[0] = r;
5076          d[1] = g;
5077          d[2] = b;
5078             }
5079 
5080 static inline void
pack_uint_rgbx_sint32(const GLuint src[4],void * dst)5081 pack_uint_rgbx_sint32(const GLuint src[4], void *dst)
5082 {
5083 
5084 
5085       int32_t r =
5086          _mesa_signed_to_signed(src[0], 32);
5087 
5088 
5089       int32_t g =
5090          _mesa_signed_to_signed(src[1], 32);
5091 
5092 
5093       int32_t b =
5094          _mesa_signed_to_signed(src[2], 32);
5095 
5096 
5097       int32_t *d = (int32_t *)dst;
5098          d[0] = r;
5099          d[1] = g;
5100          d[2] = b;
5101             }
5102 
5103 /* float packing functions */
5104 
5105 
5106 static inline void
pack_float_a8b8g8r8_unorm(const GLfloat src[4],void * dst)5107 pack_float_a8b8g8r8_unorm(const GLfloat src[4], void *dst)
5108 {
5109 
5110 
5111       uint8_t a =
5112             _mesa_float_to_unorm(src[3], 8);
5113 
5114 
5115       uint8_t b =
5116             _mesa_float_to_unorm(src[2], 8);
5117 
5118 
5119       uint8_t g =
5120             _mesa_float_to_unorm(src[1], 8);
5121 
5122 
5123       uint8_t r =
5124             _mesa_float_to_unorm(src[0], 8);
5125 
5126       uint32_t d = 0;
5127          d |= PACK(a, 0, 8);
5128          d |= PACK(b, 8, 8);
5129          d |= PACK(g, 16, 8);
5130          d |= PACK(r, 24, 8);
5131       (*(uint32_t *)dst) = d;
5132 }
5133 
5134 static inline void
pack_float_x8b8g8r8_unorm(const GLfloat src[4],void * dst)5135 pack_float_x8b8g8r8_unorm(const GLfloat src[4], void *dst)
5136 {
5137 
5138 
5139 
5140       uint8_t b =
5141             _mesa_float_to_unorm(src[2], 8);
5142 
5143 
5144       uint8_t g =
5145             _mesa_float_to_unorm(src[1], 8);
5146 
5147 
5148       uint8_t r =
5149             _mesa_float_to_unorm(src[0], 8);
5150 
5151       uint32_t d = 0;
5152                      d |= PACK(b, 8, 8);
5153          d |= PACK(g, 16, 8);
5154          d |= PACK(r, 24, 8);
5155       (*(uint32_t *)dst) = d;
5156 }
5157 
5158 static inline void
pack_float_r8g8b8a8_unorm(const GLfloat src[4],void * dst)5159 pack_float_r8g8b8a8_unorm(const GLfloat src[4], void *dst)
5160 {
5161 
5162 
5163       uint8_t r =
5164             _mesa_float_to_unorm(src[0], 8);
5165 
5166 
5167       uint8_t g =
5168             _mesa_float_to_unorm(src[1], 8);
5169 
5170 
5171       uint8_t b =
5172             _mesa_float_to_unorm(src[2], 8);
5173 
5174 
5175       uint8_t a =
5176             _mesa_float_to_unorm(src[3], 8);
5177 
5178       uint32_t d = 0;
5179          d |= PACK(r, 0, 8);
5180          d |= PACK(g, 8, 8);
5181          d |= PACK(b, 16, 8);
5182          d |= PACK(a, 24, 8);
5183       (*(uint32_t *)dst) = d;
5184 }
5185 
5186 static inline void
pack_float_r8g8b8x8_unorm(const GLfloat src[4],void * dst)5187 pack_float_r8g8b8x8_unorm(const GLfloat src[4], void *dst)
5188 {
5189 
5190 
5191       uint8_t r =
5192             _mesa_float_to_unorm(src[0], 8);
5193 
5194 
5195       uint8_t g =
5196             _mesa_float_to_unorm(src[1], 8);
5197 
5198 
5199       uint8_t b =
5200             _mesa_float_to_unorm(src[2], 8);
5201 
5202 
5203       uint32_t d = 0;
5204          d |= PACK(r, 0, 8);
5205          d |= PACK(g, 8, 8);
5206          d |= PACK(b, 16, 8);
5207                   (*(uint32_t *)dst) = d;
5208 }
5209 
5210 static inline void
pack_float_b8g8r8a8_unorm(const GLfloat src[4],void * dst)5211 pack_float_b8g8r8a8_unorm(const GLfloat src[4], void *dst)
5212 {
5213 
5214 
5215       uint8_t b =
5216             _mesa_float_to_unorm(src[2], 8);
5217 
5218 
5219       uint8_t g =
5220             _mesa_float_to_unorm(src[1], 8);
5221 
5222 
5223       uint8_t r =
5224             _mesa_float_to_unorm(src[0], 8);
5225 
5226 
5227       uint8_t a =
5228             _mesa_float_to_unorm(src[3], 8);
5229 
5230       uint32_t d = 0;
5231          d |= PACK(b, 0, 8);
5232          d |= PACK(g, 8, 8);
5233          d |= PACK(r, 16, 8);
5234          d |= PACK(a, 24, 8);
5235       (*(uint32_t *)dst) = d;
5236 }
5237 
5238 static inline void
pack_float_b8g8r8x8_unorm(const GLfloat src[4],void * dst)5239 pack_float_b8g8r8x8_unorm(const GLfloat src[4], void *dst)
5240 {
5241 
5242 
5243       uint8_t b =
5244             _mesa_float_to_unorm(src[2], 8);
5245 
5246 
5247       uint8_t g =
5248             _mesa_float_to_unorm(src[1], 8);
5249 
5250 
5251       uint8_t r =
5252             _mesa_float_to_unorm(src[0], 8);
5253 
5254 
5255       uint32_t d = 0;
5256          d |= PACK(b, 0, 8);
5257          d |= PACK(g, 8, 8);
5258          d |= PACK(r, 16, 8);
5259                   (*(uint32_t *)dst) = d;
5260 }
5261 
5262 static inline void
pack_float_a8r8g8b8_unorm(const GLfloat src[4],void * dst)5263 pack_float_a8r8g8b8_unorm(const GLfloat src[4], void *dst)
5264 {
5265 
5266 
5267       uint8_t a =
5268             _mesa_float_to_unorm(src[3], 8);
5269 
5270 
5271       uint8_t r =
5272             _mesa_float_to_unorm(src[0], 8);
5273 
5274 
5275       uint8_t g =
5276             _mesa_float_to_unorm(src[1], 8);
5277 
5278 
5279       uint8_t b =
5280             _mesa_float_to_unorm(src[2], 8);
5281 
5282       uint32_t d = 0;
5283          d |= PACK(a, 0, 8);
5284          d |= PACK(r, 8, 8);
5285          d |= PACK(g, 16, 8);
5286          d |= PACK(b, 24, 8);
5287       (*(uint32_t *)dst) = d;
5288 }
5289 
5290 static inline void
pack_float_x8r8g8b8_unorm(const GLfloat src[4],void * dst)5291 pack_float_x8r8g8b8_unorm(const GLfloat src[4], void *dst)
5292 {
5293 
5294 
5295 
5296       uint8_t r =
5297             _mesa_float_to_unorm(src[0], 8);
5298 
5299 
5300       uint8_t g =
5301             _mesa_float_to_unorm(src[1], 8);
5302 
5303 
5304       uint8_t b =
5305             _mesa_float_to_unorm(src[2], 8);
5306 
5307       uint32_t d = 0;
5308                      d |= PACK(r, 8, 8);
5309          d |= PACK(g, 16, 8);
5310          d |= PACK(b, 24, 8);
5311       (*(uint32_t *)dst) = d;
5312 }
5313 
5314 static inline void
pack_float_l16a16_unorm(const GLfloat src[4],void * dst)5315 pack_float_l16a16_unorm(const GLfloat src[4], void *dst)
5316 {
5317 
5318 
5319       uint16_t l =
5320             _mesa_float_to_unorm(src[0], 16);
5321 
5322 
5323       uint16_t a =
5324             _mesa_float_to_unorm(src[3], 16);
5325 
5326       uint32_t d = 0;
5327          d |= PACK(l, 0, 16);
5328          d |= PACK(a, 16, 16);
5329       (*(uint32_t *)dst) = d;
5330 }
5331 
5332 static inline void
pack_float_a16l16_unorm(const GLfloat src[4],void * dst)5333 pack_float_a16l16_unorm(const GLfloat src[4], void *dst)
5334 {
5335 
5336 
5337       uint16_t a =
5338             _mesa_float_to_unorm(src[3], 16);
5339 
5340 
5341       uint16_t l =
5342             _mesa_float_to_unorm(src[0], 16);
5343 
5344       uint32_t d = 0;
5345          d |= PACK(a, 0, 16);
5346          d |= PACK(l, 16, 16);
5347       (*(uint32_t *)dst) = d;
5348 }
5349 
5350 static inline void
pack_float_b5g6r5_unorm(const GLfloat src[4],void * dst)5351 pack_float_b5g6r5_unorm(const GLfloat src[4], void *dst)
5352 {
5353 
5354 
5355       uint8_t b =
5356             _mesa_float_to_unorm(src[2], 5);
5357 
5358 
5359       uint8_t g =
5360             _mesa_float_to_unorm(src[1], 6);
5361 
5362 
5363       uint8_t r =
5364             _mesa_float_to_unorm(src[0], 5);
5365 
5366       uint16_t d = 0;
5367          d |= PACK(b, 0, 5);
5368          d |= PACK(g, 5, 6);
5369          d |= PACK(r, 11, 5);
5370       (*(uint16_t *)dst) = d;
5371 }
5372 
5373 static inline void
pack_float_r5g6b5_unorm(const GLfloat src[4],void * dst)5374 pack_float_r5g6b5_unorm(const GLfloat src[4], void *dst)
5375 {
5376 
5377 
5378       uint8_t r =
5379             _mesa_float_to_unorm(src[0], 5);
5380 
5381 
5382       uint8_t g =
5383             _mesa_float_to_unorm(src[1], 6);
5384 
5385 
5386       uint8_t b =
5387             _mesa_float_to_unorm(src[2], 5);
5388 
5389       uint16_t d = 0;
5390          d |= PACK(r, 0, 5);
5391          d |= PACK(g, 5, 6);
5392          d |= PACK(b, 11, 5);
5393       (*(uint16_t *)dst) = d;
5394 }
5395 
5396 static inline void
pack_float_b4g4r4a4_unorm(const GLfloat src[4],void * dst)5397 pack_float_b4g4r4a4_unorm(const GLfloat src[4], void *dst)
5398 {
5399 
5400 
5401       uint8_t b =
5402             _mesa_float_to_unorm(src[2], 4);
5403 
5404 
5405       uint8_t g =
5406             _mesa_float_to_unorm(src[1], 4);
5407 
5408 
5409       uint8_t r =
5410             _mesa_float_to_unorm(src[0], 4);
5411 
5412 
5413       uint8_t a =
5414             _mesa_float_to_unorm(src[3], 4);
5415 
5416       uint16_t d = 0;
5417          d |= PACK(b, 0, 4);
5418          d |= PACK(g, 4, 4);
5419          d |= PACK(r, 8, 4);
5420          d |= PACK(a, 12, 4);
5421       (*(uint16_t *)dst) = d;
5422 }
5423 
5424 static inline void
pack_float_b4g4r4x4_unorm(const GLfloat src[4],void * dst)5425 pack_float_b4g4r4x4_unorm(const GLfloat src[4], void *dst)
5426 {
5427 
5428 
5429       uint8_t b =
5430             _mesa_float_to_unorm(src[2], 4);
5431 
5432 
5433       uint8_t g =
5434             _mesa_float_to_unorm(src[1], 4);
5435 
5436 
5437       uint8_t r =
5438             _mesa_float_to_unorm(src[0], 4);
5439 
5440 
5441       uint16_t d = 0;
5442          d |= PACK(b, 0, 4);
5443          d |= PACK(g, 4, 4);
5444          d |= PACK(r, 8, 4);
5445                   (*(uint16_t *)dst) = d;
5446 }
5447 
5448 static inline void
pack_float_a4r4g4b4_unorm(const GLfloat src[4],void * dst)5449 pack_float_a4r4g4b4_unorm(const GLfloat src[4], void *dst)
5450 {
5451 
5452 
5453       uint8_t a =
5454             _mesa_float_to_unorm(src[3], 4);
5455 
5456 
5457       uint8_t r =
5458             _mesa_float_to_unorm(src[0], 4);
5459 
5460 
5461       uint8_t g =
5462             _mesa_float_to_unorm(src[1], 4);
5463 
5464 
5465       uint8_t b =
5466             _mesa_float_to_unorm(src[2], 4);
5467 
5468       uint16_t d = 0;
5469          d |= PACK(a, 0, 4);
5470          d |= PACK(r, 4, 4);
5471          d |= PACK(g, 8, 4);
5472          d |= PACK(b, 12, 4);
5473       (*(uint16_t *)dst) = d;
5474 }
5475 
5476 static inline void
pack_float_a1b5g5r5_unorm(const GLfloat src[4],void * dst)5477 pack_float_a1b5g5r5_unorm(const GLfloat src[4], void *dst)
5478 {
5479 
5480 
5481       uint8_t a =
5482             _mesa_float_to_unorm(src[3], 1);
5483 
5484 
5485       uint8_t b =
5486             _mesa_float_to_unorm(src[2], 5);
5487 
5488 
5489       uint8_t g =
5490             _mesa_float_to_unorm(src[1], 5);
5491 
5492 
5493       uint8_t r =
5494             _mesa_float_to_unorm(src[0], 5);
5495 
5496       uint16_t d = 0;
5497          d |= PACK(a, 0, 1);
5498          d |= PACK(b, 1, 5);
5499          d |= PACK(g, 6, 5);
5500          d |= PACK(r, 11, 5);
5501       (*(uint16_t *)dst) = d;
5502 }
5503 
5504 static inline void
pack_float_b5g5r5a1_unorm(const GLfloat src[4],void * dst)5505 pack_float_b5g5r5a1_unorm(const GLfloat src[4], void *dst)
5506 {
5507 
5508 
5509       uint8_t b =
5510             _mesa_float_to_unorm(src[2], 5);
5511 
5512 
5513       uint8_t g =
5514             _mesa_float_to_unorm(src[1], 5);
5515 
5516 
5517       uint8_t r =
5518             _mesa_float_to_unorm(src[0], 5);
5519 
5520 
5521       uint8_t a =
5522             _mesa_float_to_unorm(src[3], 1);
5523 
5524       uint16_t d = 0;
5525          d |= PACK(b, 0, 5);
5526          d |= PACK(g, 5, 5);
5527          d |= PACK(r, 10, 5);
5528          d |= PACK(a, 15, 1);
5529       (*(uint16_t *)dst) = d;
5530 }
5531 
5532 static inline void
pack_float_b5g5r5x1_unorm(const GLfloat src[4],void * dst)5533 pack_float_b5g5r5x1_unorm(const GLfloat src[4], void *dst)
5534 {
5535 
5536 
5537       uint8_t b =
5538             _mesa_float_to_unorm(src[2], 5);
5539 
5540 
5541       uint8_t g =
5542             _mesa_float_to_unorm(src[1], 5);
5543 
5544 
5545       uint8_t r =
5546             _mesa_float_to_unorm(src[0], 5);
5547 
5548 
5549       uint16_t d = 0;
5550          d |= PACK(b, 0, 5);
5551          d |= PACK(g, 5, 5);
5552          d |= PACK(r, 10, 5);
5553                   (*(uint16_t *)dst) = d;
5554 }
5555 
5556 static inline void
pack_float_a1r5g5b5_unorm(const GLfloat src[4],void * dst)5557 pack_float_a1r5g5b5_unorm(const GLfloat src[4], void *dst)
5558 {
5559 
5560 
5561       uint8_t a =
5562             _mesa_float_to_unorm(src[3], 1);
5563 
5564 
5565       uint8_t r =
5566             _mesa_float_to_unorm(src[0], 5);
5567 
5568 
5569       uint8_t g =
5570             _mesa_float_to_unorm(src[1], 5);
5571 
5572 
5573       uint8_t b =
5574             _mesa_float_to_unorm(src[2], 5);
5575 
5576       uint16_t d = 0;
5577          d |= PACK(a, 0, 1);
5578          d |= PACK(r, 1, 5);
5579          d |= PACK(g, 6, 5);
5580          d |= PACK(b, 11, 5);
5581       (*(uint16_t *)dst) = d;
5582 }
5583 
5584 static inline void
pack_float_l8a8_unorm(const GLfloat src[4],void * dst)5585 pack_float_l8a8_unorm(const GLfloat src[4], void *dst)
5586 {
5587 
5588 
5589       uint8_t l =
5590             _mesa_float_to_unorm(src[0], 8);
5591 
5592 
5593       uint8_t a =
5594             _mesa_float_to_unorm(src[3], 8);
5595 
5596       uint16_t d = 0;
5597          d |= PACK(l, 0, 8);
5598          d |= PACK(a, 8, 8);
5599       (*(uint16_t *)dst) = d;
5600 }
5601 
5602 static inline void
pack_float_a8l8_unorm(const GLfloat src[4],void * dst)5603 pack_float_a8l8_unorm(const GLfloat src[4], void *dst)
5604 {
5605 
5606 
5607       uint8_t a =
5608             _mesa_float_to_unorm(src[3], 8);
5609 
5610 
5611       uint8_t l =
5612             _mesa_float_to_unorm(src[0], 8);
5613 
5614       uint16_t d = 0;
5615          d |= PACK(a, 0, 8);
5616          d |= PACK(l, 8, 8);
5617       (*(uint16_t *)dst) = d;
5618 }
5619 
5620 static inline void
pack_float_r8g8_unorm(const GLfloat src[4],void * dst)5621 pack_float_r8g8_unorm(const GLfloat src[4], void *dst)
5622 {
5623 
5624 
5625       uint8_t r =
5626             _mesa_float_to_unorm(src[0], 8);
5627 
5628 
5629       uint8_t g =
5630             _mesa_float_to_unorm(src[1], 8);
5631 
5632       uint16_t d = 0;
5633          d |= PACK(r, 0, 8);
5634          d |= PACK(g, 8, 8);
5635       (*(uint16_t *)dst) = d;
5636 }
5637 
5638 static inline void
pack_float_g8r8_unorm(const GLfloat src[4],void * dst)5639 pack_float_g8r8_unorm(const GLfloat src[4], void *dst)
5640 {
5641 
5642 
5643       uint8_t g =
5644             _mesa_float_to_unorm(src[1], 8);
5645 
5646 
5647       uint8_t r =
5648             _mesa_float_to_unorm(src[0], 8);
5649 
5650       uint16_t d = 0;
5651          d |= PACK(g, 0, 8);
5652          d |= PACK(r, 8, 8);
5653       (*(uint16_t *)dst) = d;
5654 }
5655 
5656 static inline void
pack_float_l4a4_unorm(const GLfloat src[4],void * dst)5657 pack_float_l4a4_unorm(const GLfloat src[4], void *dst)
5658 {
5659 
5660 
5661       uint8_t l =
5662             _mesa_float_to_unorm(src[0], 4);
5663 
5664 
5665       uint8_t a =
5666             _mesa_float_to_unorm(src[3], 4);
5667 
5668       uint8_t d = 0;
5669          d |= PACK(l, 0, 4);
5670          d |= PACK(a, 4, 4);
5671       (*(uint8_t *)dst) = d;
5672 }
5673 
5674 static inline void
pack_float_b2g3r3_unorm(const GLfloat src[4],void * dst)5675 pack_float_b2g3r3_unorm(const GLfloat src[4], void *dst)
5676 {
5677 
5678 
5679       uint8_t b =
5680             _mesa_float_to_unorm(src[2], 2);
5681 
5682 
5683       uint8_t g =
5684             _mesa_float_to_unorm(src[1], 3);
5685 
5686 
5687       uint8_t r =
5688             _mesa_float_to_unorm(src[0], 3);
5689 
5690       uint8_t d = 0;
5691          d |= PACK(b, 0, 2);
5692          d |= PACK(g, 2, 3);
5693          d |= PACK(r, 5, 3);
5694       (*(uint8_t *)dst) = d;
5695 }
5696 
5697 static inline void
pack_float_r16g16_unorm(const GLfloat src[4],void * dst)5698 pack_float_r16g16_unorm(const GLfloat src[4], void *dst)
5699 {
5700 
5701 
5702       uint16_t r =
5703             _mesa_float_to_unorm(src[0], 16);
5704 
5705 
5706       uint16_t g =
5707             _mesa_float_to_unorm(src[1], 16);
5708 
5709       uint32_t d = 0;
5710          d |= PACK(r, 0, 16);
5711          d |= PACK(g, 16, 16);
5712       (*(uint32_t *)dst) = d;
5713 }
5714 
5715 static inline void
pack_float_g16r16_unorm(const GLfloat src[4],void * dst)5716 pack_float_g16r16_unorm(const GLfloat src[4], void *dst)
5717 {
5718 
5719 
5720       uint16_t g =
5721             _mesa_float_to_unorm(src[1], 16);
5722 
5723 
5724       uint16_t r =
5725             _mesa_float_to_unorm(src[0], 16);
5726 
5727       uint32_t d = 0;
5728          d |= PACK(g, 0, 16);
5729          d |= PACK(r, 16, 16);
5730       (*(uint32_t *)dst) = d;
5731 }
5732 
5733 static inline void
pack_float_b10g10r10a2_unorm(const GLfloat src[4],void * dst)5734 pack_float_b10g10r10a2_unorm(const GLfloat src[4], void *dst)
5735 {
5736 
5737 
5738       uint16_t b =
5739             _mesa_float_to_unorm(src[2], 10);
5740 
5741 
5742       uint16_t g =
5743             _mesa_float_to_unorm(src[1], 10);
5744 
5745 
5746       uint16_t r =
5747             _mesa_float_to_unorm(src[0], 10);
5748 
5749 
5750       uint8_t a =
5751             _mesa_float_to_unorm(src[3], 2);
5752 
5753       uint32_t d = 0;
5754          d |= PACK(b, 0, 10);
5755          d |= PACK(g, 10, 10);
5756          d |= PACK(r, 20, 10);
5757          d |= PACK(a, 30, 2);
5758       (*(uint32_t *)dst) = d;
5759 }
5760 
5761 static inline void
pack_float_b10g10r10x2_unorm(const GLfloat src[4],void * dst)5762 pack_float_b10g10r10x2_unorm(const GLfloat src[4], void *dst)
5763 {
5764 
5765 
5766       uint16_t b =
5767             _mesa_float_to_unorm(src[2], 10);
5768 
5769 
5770       uint16_t g =
5771             _mesa_float_to_unorm(src[1], 10);
5772 
5773 
5774       uint16_t r =
5775             _mesa_float_to_unorm(src[0], 10);
5776 
5777 
5778       uint32_t d = 0;
5779          d |= PACK(b, 0, 10);
5780          d |= PACK(g, 10, 10);
5781          d |= PACK(r, 20, 10);
5782                   (*(uint32_t *)dst) = d;
5783 }
5784 
5785 static inline void
pack_float_r10g10b10a2_unorm(const GLfloat src[4],void * dst)5786 pack_float_r10g10b10a2_unorm(const GLfloat src[4], void *dst)
5787 {
5788 
5789 
5790       uint16_t r =
5791             _mesa_float_to_unorm(src[0], 10);
5792 
5793 
5794       uint16_t g =
5795             _mesa_float_to_unorm(src[1], 10);
5796 
5797 
5798       uint16_t b =
5799             _mesa_float_to_unorm(src[2], 10);
5800 
5801 
5802       uint8_t a =
5803             _mesa_float_to_unorm(src[3], 2);
5804 
5805       uint32_t d = 0;
5806          d |= PACK(r, 0, 10);
5807          d |= PACK(g, 10, 10);
5808          d |= PACK(b, 20, 10);
5809          d |= PACK(a, 30, 2);
5810       (*(uint32_t *)dst) = d;
5811 }
5812 
5813 static inline void
pack_float_r10g10b10x2_unorm(const GLfloat src[4],void * dst)5814 pack_float_r10g10b10x2_unorm(const GLfloat src[4], void *dst)
5815 {
5816 
5817 
5818       uint16_t r =
5819             _mesa_float_to_unorm(src[0], 10);
5820 
5821 
5822       uint16_t g =
5823             _mesa_float_to_unorm(src[1], 10);
5824 
5825 
5826       uint16_t b =
5827             _mesa_float_to_unorm(src[2], 10);
5828 
5829 
5830       uint32_t d = 0;
5831          d |= PACK(r, 0, 10);
5832          d |= PACK(g, 10, 10);
5833          d |= PACK(b, 20, 10);
5834                   (*(uint32_t *)dst) = d;
5835 }
5836 
5837 static inline void
pack_float_r3g3b2_unorm(const GLfloat src[4],void * dst)5838 pack_float_r3g3b2_unorm(const GLfloat src[4], void *dst)
5839 {
5840 
5841 
5842       uint8_t r =
5843             _mesa_float_to_unorm(src[0], 3);
5844 
5845 
5846       uint8_t g =
5847             _mesa_float_to_unorm(src[1], 3);
5848 
5849 
5850       uint8_t b =
5851             _mesa_float_to_unorm(src[2], 2);
5852 
5853       uint8_t d = 0;
5854          d |= PACK(r, 0, 3);
5855          d |= PACK(g, 3, 3);
5856          d |= PACK(b, 6, 2);
5857       (*(uint8_t *)dst) = d;
5858 }
5859 
5860 static inline void
pack_float_a4b4g4r4_unorm(const GLfloat src[4],void * dst)5861 pack_float_a4b4g4r4_unorm(const GLfloat src[4], void *dst)
5862 {
5863 
5864 
5865       uint8_t a =
5866             _mesa_float_to_unorm(src[3], 4);
5867 
5868 
5869       uint8_t b =
5870             _mesa_float_to_unorm(src[2], 4);
5871 
5872 
5873       uint8_t g =
5874             _mesa_float_to_unorm(src[1], 4);
5875 
5876 
5877       uint8_t r =
5878             _mesa_float_to_unorm(src[0], 4);
5879 
5880       uint16_t d = 0;
5881          d |= PACK(a, 0, 4);
5882          d |= PACK(b, 4, 4);
5883          d |= PACK(g, 8, 4);
5884          d |= PACK(r, 12, 4);
5885       (*(uint16_t *)dst) = d;
5886 }
5887 
5888 static inline void
pack_float_r4g4b4a4_unorm(const GLfloat src[4],void * dst)5889 pack_float_r4g4b4a4_unorm(const GLfloat src[4], void *dst)
5890 {
5891 
5892 
5893       uint8_t r =
5894             _mesa_float_to_unorm(src[0], 4);
5895 
5896 
5897       uint8_t g =
5898             _mesa_float_to_unorm(src[1], 4);
5899 
5900 
5901       uint8_t b =
5902             _mesa_float_to_unorm(src[2], 4);
5903 
5904 
5905       uint8_t a =
5906             _mesa_float_to_unorm(src[3], 4);
5907 
5908       uint16_t d = 0;
5909          d |= PACK(r, 0, 4);
5910          d |= PACK(g, 4, 4);
5911          d |= PACK(b, 8, 4);
5912          d |= PACK(a, 12, 4);
5913       (*(uint16_t *)dst) = d;
5914 }
5915 
5916 static inline void
pack_float_r5g5b5a1_unorm(const GLfloat src[4],void * dst)5917 pack_float_r5g5b5a1_unorm(const GLfloat src[4], void *dst)
5918 {
5919 
5920 
5921       uint8_t r =
5922             _mesa_float_to_unorm(src[0], 5);
5923 
5924 
5925       uint8_t g =
5926             _mesa_float_to_unorm(src[1], 5);
5927 
5928 
5929       uint8_t b =
5930             _mesa_float_to_unorm(src[2], 5);
5931 
5932 
5933       uint8_t a =
5934             _mesa_float_to_unorm(src[3], 1);
5935 
5936       uint16_t d = 0;
5937          d |= PACK(r, 0, 5);
5938          d |= PACK(g, 5, 5);
5939          d |= PACK(b, 10, 5);
5940          d |= PACK(a, 15, 1);
5941       (*(uint16_t *)dst) = d;
5942 }
5943 
5944 static inline void
pack_float_a2b10g10r10_unorm(const GLfloat src[4],void * dst)5945 pack_float_a2b10g10r10_unorm(const GLfloat src[4], void *dst)
5946 {
5947 
5948 
5949       uint8_t a =
5950             _mesa_float_to_unorm(src[3], 2);
5951 
5952 
5953       uint16_t b =
5954             _mesa_float_to_unorm(src[2], 10);
5955 
5956 
5957       uint16_t g =
5958             _mesa_float_to_unorm(src[1], 10);
5959 
5960 
5961       uint16_t r =
5962             _mesa_float_to_unorm(src[0], 10);
5963 
5964       uint32_t d = 0;
5965          d |= PACK(a, 0, 2);
5966          d |= PACK(b, 2, 10);
5967          d |= PACK(g, 12, 10);
5968          d |= PACK(r, 22, 10);
5969       (*(uint32_t *)dst) = d;
5970 }
5971 
5972 static inline void
pack_float_a2r10g10b10_unorm(const GLfloat src[4],void * dst)5973 pack_float_a2r10g10b10_unorm(const GLfloat src[4], void *dst)
5974 {
5975 
5976 
5977       uint8_t a =
5978             _mesa_float_to_unorm(src[3], 2);
5979 
5980 
5981       uint16_t r =
5982             _mesa_float_to_unorm(src[0], 10);
5983 
5984 
5985       uint16_t g =
5986             _mesa_float_to_unorm(src[1], 10);
5987 
5988 
5989       uint16_t b =
5990             _mesa_float_to_unorm(src[2], 10);
5991 
5992       uint32_t d = 0;
5993          d |= PACK(a, 0, 2);
5994          d |= PACK(r, 2, 10);
5995          d |= PACK(g, 12, 10);
5996          d |= PACK(b, 22, 10);
5997       (*(uint32_t *)dst) = d;
5998 }
5999 
6000 static inline void
pack_float_a_unorm8(const GLfloat src[4],void * dst)6001 pack_float_a_unorm8(const GLfloat src[4], void *dst)
6002 {
6003 
6004 
6005       uint8_t a =
6006             _mesa_float_to_unorm(src[3], 8);
6007 
6008       uint8_t *d = (uint8_t *)dst;
6009          d[0] = a;
6010 }
6011 
6012 static inline void
pack_float_a_unorm16(const GLfloat src[4],void * dst)6013 pack_float_a_unorm16(const GLfloat src[4], void *dst)
6014 {
6015 
6016 
6017       uint16_t a =
6018             _mesa_float_to_unorm(src[3], 16);
6019 
6020       uint16_t *d = (uint16_t *)dst;
6021          d[0] = a;
6022 }
6023 
6024 static inline void
pack_float_l_unorm8(const GLfloat src[4],void * dst)6025 pack_float_l_unorm8(const GLfloat src[4], void *dst)
6026 {
6027 
6028 
6029       uint8_t l =
6030             _mesa_float_to_unorm(src[0], 8);
6031 
6032       uint8_t *d = (uint8_t *)dst;
6033          d[0] = l;
6034 }
6035 
6036 static inline void
pack_float_l_unorm16(const GLfloat src[4],void * dst)6037 pack_float_l_unorm16(const GLfloat src[4], void *dst)
6038 {
6039 
6040 
6041       uint16_t l =
6042             _mesa_float_to_unorm(src[0], 16);
6043 
6044       uint16_t *d = (uint16_t *)dst;
6045          d[0] = l;
6046 }
6047 
6048 static inline void
pack_float_i_unorm8(const GLfloat src[4],void * dst)6049 pack_float_i_unorm8(const GLfloat src[4], void *dst)
6050 {
6051 
6052 
6053       uint8_t i =
6054             _mesa_float_to_unorm(src[0], 8);
6055 
6056       uint8_t *d = (uint8_t *)dst;
6057          d[0] = i;
6058 }
6059 
6060 static inline void
pack_float_i_unorm16(const GLfloat src[4],void * dst)6061 pack_float_i_unorm16(const GLfloat src[4], void *dst)
6062 {
6063 
6064 
6065       uint16_t i =
6066             _mesa_float_to_unorm(src[0], 16);
6067 
6068       uint16_t *d = (uint16_t *)dst;
6069          d[0] = i;
6070 }
6071 
6072 static inline void
pack_float_r_unorm8(const GLfloat src[4],void * dst)6073 pack_float_r_unorm8(const GLfloat src[4], void *dst)
6074 {
6075 
6076 
6077       uint8_t r =
6078             _mesa_float_to_unorm(src[0], 8);
6079 
6080       uint8_t *d = (uint8_t *)dst;
6081          d[0] = r;
6082 }
6083 
6084 static inline void
pack_float_r_unorm16(const GLfloat src[4],void * dst)6085 pack_float_r_unorm16(const GLfloat src[4], void *dst)
6086 {
6087 
6088 
6089       uint16_t r =
6090             _mesa_float_to_unorm(src[0], 16);
6091 
6092       uint16_t *d = (uint16_t *)dst;
6093          d[0] = r;
6094 }
6095 
6096 static inline void
pack_float_bgr_unorm8(const GLfloat src[4],void * dst)6097 pack_float_bgr_unorm8(const GLfloat src[4], void *dst)
6098 {
6099 
6100 
6101       uint8_t b =
6102             _mesa_float_to_unorm(src[2], 8);
6103 
6104 
6105       uint8_t g =
6106             _mesa_float_to_unorm(src[1], 8);
6107 
6108 
6109       uint8_t r =
6110             _mesa_float_to_unorm(src[0], 8);
6111 
6112       uint8_t *d = (uint8_t *)dst;
6113          d[0] = b;
6114          d[1] = g;
6115          d[2] = r;
6116 }
6117 
6118 static inline void
pack_float_rgb_unorm8(const GLfloat src[4],void * dst)6119 pack_float_rgb_unorm8(const GLfloat src[4], void *dst)
6120 {
6121 
6122 
6123       uint8_t r =
6124             _mesa_float_to_unorm(src[0], 8);
6125 
6126 
6127       uint8_t g =
6128             _mesa_float_to_unorm(src[1], 8);
6129 
6130 
6131       uint8_t b =
6132             _mesa_float_to_unorm(src[2], 8);
6133 
6134       uint8_t *d = (uint8_t *)dst;
6135          d[0] = r;
6136          d[1] = g;
6137          d[2] = b;
6138 }
6139 
6140 static inline void
pack_float_rgba_unorm16(const GLfloat src[4],void * dst)6141 pack_float_rgba_unorm16(const GLfloat src[4], void *dst)
6142 {
6143 
6144 
6145       uint16_t r =
6146             _mesa_float_to_unorm(src[0], 16);
6147 
6148 
6149       uint16_t g =
6150             _mesa_float_to_unorm(src[1], 16);
6151 
6152 
6153       uint16_t b =
6154             _mesa_float_to_unorm(src[2], 16);
6155 
6156 
6157       uint16_t a =
6158             _mesa_float_to_unorm(src[3], 16);
6159 
6160       uint16_t *d = (uint16_t *)dst;
6161          d[0] = r;
6162          d[1] = g;
6163          d[2] = b;
6164          d[3] = a;
6165 }
6166 
6167 static inline void
pack_float_rgbx_unorm16(const GLfloat src[4],void * dst)6168 pack_float_rgbx_unorm16(const GLfloat src[4], void *dst)
6169 {
6170 
6171 
6172       uint16_t r =
6173             _mesa_float_to_unorm(src[0], 16);
6174 
6175 
6176       uint16_t g =
6177             _mesa_float_to_unorm(src[1], 16);
6178 
6179 
6180       uint16_t b =
6181             _mesa_float_to_unorm(src[2], 16);
6182 
6183 
6184       uint16_t *d = (uint16_t *)dst;
6185          d[0] = r;
6186          d[1] = g;
6187          d[2] = b;
6188             }
6189 
6190 static inline void
pack_float_a8b8g8r8_snorm(const GLfloat src[4],void * dst)6191 pack_float_a8b8g8r8_snorm(const GLfloat src[4], void *dst)
6192 {
6193 
6194 
6195       int8_t a =
6196          _mesa_float_to_snorm(src[3], 8);
6197 
6198 
6199       int8_t b =
6200          _mesa_float_to_snorm(src[2], 8);
6201 
6202 
6203       int8_t g =
6204          _mesa_float_to_snorm(src[1], 8);
6205 
6206 
6207       int8_t r =
6208          _mesa_float_to_snorm(src[0], 8);
6209 
6210       uint32_t d = 0;
6211          d |= PACK(a, 0, 8);
6212          d |= PACK(b, 8, 8);
6213          d |= PACK(g, 16, 8);
6214          d |= PACK(r, 24, 8);
6215       (*(uint32_t *)dst) = d;
6216 }
6217 
6218 static inline void
pack_float_x8b8g8r8_snorm(const GLfloat src[4],void * dst)6219 pack_float_x8b8g8r8_snorm(const GLfloat src[4], void *dst)
6220 {
6221 
6222 
6223 
6224       int8_t b =
6225          _mesa_float_to_snorm(src[2], 8);
6226 
6227 
6228       int8_t g =
6229          _mesa_float_to_snorm(src[1], 8);
6230 
6231 
6232       int8_t r =
6233          _mesa_float_to_snorm(src[0], 8);
6234 
6235       uint32_t d = 0;
6236                      d |= PACK(b, 8, 8);
6237          d |= PACK(g, 16, 8);
6238          d |= PACK(r, 24, 8);
6239       (*(uint32_t *)dst) = d;
6240 }
6241 
6242 static inline void
pack_float_r8g8b8a8_snorm(const GLfloat src[4],void * dst)6243 pack_float_r8g8b8a8_snorm(const GLfloat src[4], void *dst)
6244 {
6245 
6246 
6247       int8_t r =
6248          _mesa_float_to_snorm(src[0], 8);
6249 
6250 
6251       int8_t g =
6252          _mesa_float_to_snorm(src[1], 8);
6253 
6254 
6255       int8_t b =
6256          _mesa_float_to_snorm(src[2], 8);
6257 
6258 
6259       int8_t a =
6260          _mesa_float_to_snorm(src[3], 8);
6261 
6262       uint32_t d = 0;
6263          d |= PACK(r, 0, 8);
6264          d |= PACK(g, 8, 8);
6265          d |= PACK(b, 16, 8);
6266          d |= PACK(a, 24, 8);
6267       (*(uint32_t *)dst) = d;
6268 }
6269 
6270 static inline void
pack_float_r8g8b8x8_snorm(const GLfloat src[4],void * dst)6271 pack_float_r8g8b8x8_snorm(const GLfloat src[4], void *dst)
6272 {
6273 
6274 
6275       int8_t r =
6276          _mesa_float_to_snorm(src[0], 8);
6277 
6278 
6279       int8_t g =
6280          _mesa_float_to_snorm(src[1], 8);
6281 
6282 
6283       int8_t b =
6284          _mesa_float_to_snorm(src[2], 8);
6285 
6286 
6287       uint32_t d = 0;
6288          d |= PACK(r, 0, 8);
6289          d |= PACK(g, 8, 8);
6290          d |= PACK(b, 16, 8);
6291                   (*(uint32_t *)dst) = d;
6292 }
6293 
6294 static inline void
pack_float_r16g16_snorm(const GLfloat src[4],void * dst)6295 pack_float_r16g16_snorm(const GLfloat src[4], void *dst)
6296 {
6297 
6298 
6299       int16_t r =
6300          _mesa_float_to_snorm(src[0], 16);
6301 
6302 
6303       int16_t g =
6304          _mesa_float_to_snorm(src[1], 16);
6305 
6306       uint32_t d = 0;
6307          d |= PACK(r, 0, 16);
6308          d |= PACK(g, 16, 16);
6309       (*(uint32_t *)dst) = d;
6310 }
6311 
6312 static inline void
pack_float_g16r16_snorm(const GLfloat src[4],void * dst)6313 pack_float_g16r16_snorm(const GLfloat src[4], void *dst)
6314 {
6315 
6316 
6317       int16_t g =
6318          _mesa_float_to_snorm(src[1], 16);
6319 
6320 
6321       int16_t r =
6322          _mesa_float_to_snorm(src[0], 16);
6323 
6324       uint32_t d = 0;
6325          d |= PACK(g, 0, 16);
6326          d |= PACK(r, 16, 16);
6327       (*(uint32_t *)dst) = d;
6328 }
6329 
6330 static inline void
pack_float_r8g8_snorm(const GLfloat src[4],void * dst)6331 pack_float_r8g8_snorm(const GLfloat src[4], void *dst)
6332 {
6333 
6334 
6335       int8_t r =
6336          _mesa_float_to_snorm(src[0], 8);
6337 
6338 
6339       int8_t g =
6340          _mesa_float_to_snorm(src[1], 8);
6341 
6342       uint16_t d = 0;
6343          d |= PACK(r, 0, 8);
6344          d |= PACK(g, 8, 8);
6345       (*(uint16_t *)dst) = d;
6346 }
6347 
6348 static inline void
pack_float_g8r8_snorm(const GLfloat src[4],void * dst)6349 pack_float_g8r8_snorm(const GLfloat src[4], void *dst)
6350 {
6351 
6352 
6353       int8_t g =
6354          _mesa_float_to_snorm(src[1], 8);
6355 
6356 
6357       int8_t r =
6358          _mesa_float_to_snorm(src[0], 8);
6359 
6360       uint16_t d = 0;
6361          d |= PACK(g, 0, 8);
6362          d |= PACK(r, 8, 8);
6363       (*(uint16_t *)dst) = d;
6364 }
6365 
6366 static inline void
pack_float_l8a8_snorm(const GLfloat src[4],void * dst)6367 pack_float_l8a8_snorm(const GLfloat src[4], void *dst)
6368 {
6369 
6370 
6371       int8_t l =
6372          _mesa_float_to_snorm(src[0], 8);
6373 
6374 
6375       int8_t a =
6376          _mesa_float_to_snorm(src[3], 8);
6377 
6378       uint16_t d = 0;
6379          d |= PACK(l, 0, 8);
6380          d |= PACK(a, 8, 8);
6381       (*(uint16_t *)dst) = d;
6382 }
6383 
6384 static inline void
pack_float_a8l8_snorm(const GLfloat src[4],void * dst)6385 pack_float_a8l8_snorm(const GLfloat src[4], void *dst)
6386 {
6387 
6388 
6389       int8_t a =
6390          _mesa_float_to_snorm(src[3], 8);
6391 
6392 
6393       int8_t l =
6394          _mesa_float_to_snorm(src[0], 8);
6395 
6396       uint16_t d = 0;
6397          d |= PACK(a, 0, 8);
6398          d |= PACK(l, 8, 8);
6399       (*(uint16_t *)dst) = d;
6400 }
6401 
6402 static inline void
pack_float_a_snorm8(const GLfloat src[4],void * dst)6403 pack_float_a_snorm8(const GLfloat src[4], void *dst)
6404 {
6405 
6406 
6407       int8_t a =
6408          _mesa_float_to_snorm(src[3], 8);
6409 
6410       int8_t *d = (int8_t *)dst;
6411          d[0] = a;
6412 }
6413 
6414 static inline void
pack_float_a_snorm16(const GLfloat src[4],void * dst)6415 pack_float_a_snorm16(const GLfloat src[4], void *dst)
6416 {
6417 
6418 
6419       int16_t a =
6420          _mesa_float_to_snorm(src[3], 16);
6421 
6422       int16_t *d = (int16_t *)dst;
6423          d[0] = a;
6424 }
6425 
6426 static inline void
pack_float_l_snorm8(const GLfloat src[4],void * dst)6427 pack_float_l_snorm8(const GLfloat src[4], void *dst)
6428 {
6429 
6430 
6431       int8_t l =
6432          _mesa_float_to_snorm(src[0], 8);
6433 
6434       int8_t *d = (int8_t *)dst;
6435          d[0] = l;
6436 }
6437 
6438 static inline void
pack_float_l_snorm16(const GLfloat src[4],void * dst)6439 pack_float_l_snorm16(const GLfloat src[4], void *dst)
6440 {
6441 
6442 
6443       int16_t l =
6444          _mesa_float_to_snorm(src[0], 16);
6445 
6446       int16_t *d = (int16_t *)dst;
6447          d[0] = l;
6448 }
6449 
6450 static inline void
pack_float_i_snorm8(const GLfloat src[4],void * dst)6451 pack_float_i_snorm8(const GLfloat src[4], void *dst)
6452 {
6453 
6454 
6455       int8_t i =
6456          _mesa_float_to_snorm(src[0], 8);
6457 
6458       int8_t *d = (int8_t *)dst;
6459          d[0] = i;
6460 }
6461 
6462 static inline void
pack_float_i_snorm16(const GLfloat src[4],void * dst)6463 pack_float_i_snorm16(const GLfloat src[4], void *dst)
6464 {
6465 
6466 
6467       int16_t i =
6468          _mesa_float_to_snorm(src[0], 16);
6469 
6470       int16_t *d = (int16_t *)dst;
6471          d[0] = i;
6472 }
6473 
6474 static inline void
pack_float_r_snorm8(const GLfloat src[4],void * dst)6475 pack_float_r_snorm8(const GLfloat src[4], void *dst)
6476 {
6477 
6478 
6479       int8_t r =
6480          _mesa_float_to_snorm(src[0], 8);
6481 
6482       int8_t *d = (int8_t *)dst;
6483          d[0] = r;
6484 }
6485 
6486 static inline void
pack_float_r_snorm16(const GLfloat src[4],void * dst)6487 pack_float_r_snorm16(const GLfloat src[4], void *dst)
6488 {
6489 
6490 
6491       int16_t r =
6492          _mesa_float_to_snorm(src[0], 16);
6493 
6494       int16_t *d = (int16_t *)dst;
6495          d[0] = r;
6496 }
6497 
6498 static inline void
pack_float_la_snorm16(const GLfloat src[4],void * dst)6499 pack_float_la_snorm16(const GLfloat src[4], void *dst)
6500 {
6501 
6502 
6503       int16_t l =
6504          _mesa_float_to_snorm(src[0], 16);
6505 
6506 
6507       int16_t a =
6508          _mesa_float_to_snorm(src[3], 16);
6509 
6510       int16_t *d = (int16_t *)dst;
6511          d[0] = l;
6512          d[1] = a;
6513 }
6514 
6515 static inline void
pack_float_rgb_snorm16(const GLfloat src[4],void * dst)6516 pack_float_rgb_snorm16(const GLfloat src[4], void *dst)
6517 {
6518 
6519 
6520       int16_t r =
6521          _mesa_float_to_snorm(src[0], 16);
6522 
6523 
6524       int16_t g =
6525          _mesa_float_to_snorm(src[1], 16);
6526 
6527 
6528       int16_t b =
6529          _mesa_float_to_snorm(src[2], 16);
6530 
6531       int16_t *d = (int16_t *)dst;
6532          d[0] = r;
6533          d[1] = g;
6534          d[2] = b;
6535 }
6536 
6537 static inline void
pack_float_rgba_snorm16(const GLfloat src[4],void * dst)6538 pack_float_rgba_snorm16(const GLfloat src[4], void *dst)
6539 {
6540 
6541 
6542       int16_t r =
6543          _mesa_float_to_snorm(src[0], 16);
6544 
6545 
6546       int16_t g =
6547          _mesa_float_to_snorm(src[1], 16);
6548 
6549 
6550       int16_t b =
6551          _mesa_float_to_snorm(src[2], 16);
6552 
6553 
6554       int16_t a =
6555          _mesa_float_to_snorm(src[3], 16);
6556 
6557       int16_t *d = (int16_t *)dst;
6558          d[0] = r;
6559          d[1] = g;
6560          d[2] = b;
6561          d[3] = a;
6562 }
6563 
6564 static inline void
pack_float_rgbx_snorm16(const GLfloat src[4],void * dst)6565 pack_float_rgbx_snorm16(const GLfloat src[4], void *dst)
6566 {
6567 
6568 
6569       int16_t r =
6570          _mesa_float_to_snorm(src[0], 16);
6571 
6572 
6573       int16_t g =
6574          _mesa_float_to_snorm(src[1], 16);
6575 
6576 
6577       int16_t b =
6578          _mesa_float_to_snorm(src[2], 16);
6579 
6580 
6581       int16_t *d = (int16_t *)dst;
6582          d[0] = r;
6583          d[1] = g;
6584          d[2] = b;
6585             }
6586 
6587 static inline void
pack_float_a8b8g8r8_srgb(const GLfloat src[4],void * dst)6588 pack_float_a8b8g8r8_srgb(const GLfloat src[4], void *dst)
6589 {
6590 
6591 
6592       uint8_t a =
6593             _mesa_float_to_unorm(src[3], 8);
6594 
6595 
6596       uint8_t b =
6597 
6598             util_format_linear_float_to_srgb_8unorm(src[2]);
6599 
6600 
6601       uint8_t g =
6602 
6603             util_format_linear_float_to_srgb_8unorm(src[1]);
6604 
6605 
6606       uint8_t r =
6607 
6608             util_format_linear_float_to_srgb_8unorm(src[0]);
6609 
6610       uint32_t d = 0;
6611          d |= PACK(a, 0, 8);
6612          d |= PACK(b, 8, 8);
6613          d |= PACK(g, 16, 8);
6614          d |= PACK(r, 24, 8);
6615       (*(uint32_t *)dst) = d;
6616 }
6617 
6618 static inline void
pack_float_b8g8r8a8_srgb(const GLfloat src[4],void * dst)6619 pack_float_b8g8r8a8_srgb(const GLfloat src[4], void *dst)
6620 {
6621 
6622 
6623       uint8_t b =
6624 
6625             util_format_linear_float_to_srgb_8unorm(src[2]);
6626 
6627 
6628       uint8_t g =
6629 
6630             util_format_linear_float_to_srgb_8unorm(src[1]);
6631 
6632 
6633       uint8_t r =
6634 
6635             util_format_linear_float_to_srgb_8unorm(src[0]);
6636 
6637 
6638       uint8_t a =
6639             _mesa_float_to_unorm(src[3], 8);
6640 
6641       uint32_t d = 0;
6642          d |= PACK(b, 0, 8);
6643          d |= PACK(g, 8, 8);
6644          d |= PACK(r, 16, 8);
6645          d |= PACK(a, 24, 8);
6646       (*(uint32_t *)dst) = d;
6647 }
6648 
6649 static inline void
pack_float_a8r8g8b8_srgb(const GLfloat src[4],void * dst)6650 pack_float_a8r8g8b8_srgb(const GLfloat src[4], void *dst)
6651 {
6652 
6653 
6654       uint8_t a =
6655             _mesa_float_to_unorm(src[3], 8);
6656 
6657 
6658       uint8_t r =
6659 
6660             util_format_linear_float_to_srgb_8unorm(src[0]);
6661 
6662 
6663       uint8_t g =
6664 
6665             util_format_linear_float_to_srgb_8unorm(src[1]);
6666 
6667 
6668       uint8_t b =
6669 
6670             util_format_linear_float_to_srgb_8unorm(src[2]);
6671 
6672       uint32_t d = 0;
6673          d |= PACK(a, 0, 8);
6674          d |= PACK(r, 8, 8);
6675          d |= PACK(g, 16, 8);
6676          d |= PACK(b, 24, 8);
6677       (*(uint32_t *)dst) = d;
6678 }
6679 
6680 static inline void
pack_float_b8g8r8x8_srgb(const GLfloat src[4],void * dst)6681 pack_float_b8g8r8x8_srgb(const GLfloat src[4], void *dst)
6682 {
6683 
6684 
6685       uint8_t b =
6686 
6687             util_format_linear_float_to_srgb_8unorm(src[2]);
6688 
6689 
6690       uint8_t g =
6691 
6692             util_format_linear_float_to_srgb_8unorm(src[1]);
6693 
6694 
6695       uint8_t r =
6696 
6697             util_format_linear_float_to_srgb_8unorm(src[0]);
6698 
6699 
6700       uint32_t d = 0;
6701          d |= PACK(b, 0, 8);
6702          d |= PACK(g, 8, 8);
6703          d |= PACK(r, 16, 8);
6704                   (*(uint32_t *)dst) = d;
6705 }
6706 
6707 static inline void
pack_float_x8r8g8b8_srgb(const GLfloat src[4],void * dst)6708 pack_float_x8r8g8b8_srgb(const GLfloat src[4], void *dst)
6709 {
6710 
6711 
6712 
6713       uint8_t r =
6714 
6715             util_format_linear_float_to_srgb_8unorm(src[0]);
6716 
6717 
6718       uint8_t g =
6719 
6720             util_format_linear_float_to_srgb_8unorm(src[1]);
6721 
6722 
6723       uint8_t b =
6724 
6725             util_format_linear_float_to_srgb_8unorm(src[2]);
6726 
6727       uint32_t d = 0;
6728                      d |= PACK(r, 8, 8);
6729          d |= PACK(g, 16, 8);
6730          d |= PACK(b, 24, 8);
6731       (*(uint32_t *)dst) = d;
6732 }
6733 
6734 static inline void
pack_float_r8g8b8a8_srgb(const GLfloat src[4],void * dst)6735 pack_float_r8g8b8a8_srgb(const GLfloat src[4], void *dst)
6736 {
6737 
6738 
6739       uint8_t r =
6740 
6741             util_format_linear_float_to_srgb_8unorm(src[0]);
6742 
6743 
6744       uint8_t g =
6745 
6746             util_format_linear_float_to_srgb_8unorm(src[1]);
6747 
6748 
6749       uint8_t b =
6750 
6751             util_format_linear_float_to_srgb_8unorm(src[2]);
6752 
6753 
6754       uint8_t a =
6755             _mesa_float_to_unorm(src[3], 8);
6756 
6757       uint32_t d = 0;
6758          d |= PACK(r, 0, 8);
6759          d |= PACK(g, 8, 8);
6760          d |= PACK(b, 16, 8);
6761          d |= PACK(a, 24, 8);
6762       (*(uint32_t *)dst) = d;
6763 }
6764 
6765 static inline void
pack_float_r8g8b8x8_srgb(const GLfloat src[4],void * dst)6766 pack_float_r8g8b8x8_srgb(const GLfloat src[4], void *dst)
6767 {
6768 
6769 
6770       uint8_t r =
6771 
6772             util_format_linear_float_to_srgb_8unorm(src[0]);
6773 
6774 
6775       uint8_t g =
6776 
6777             util_format_linear_float_to_srgb_8unorm(src[1]);
6778 
6779 
6780       uint8_t b =
6781 
6782             util_format_linear_float_to_srgb_8unorm(src[2]);
6783 
6784 
6785       uint32_t d = 0;
6786          d |= PACK(r, 0, 8);
6787          d |= PACK(g, 8, 8);
6788          d |= PACK(b, 16, 8);
6789                   (*(uint32_t *)dst) = d;
6790 }
6791 
6792 static inline void
pack_float_x8b8g8r8_srgb(const GLfloat src[4],void * dst)6793 pack_float_x8b8g8r8_srgb(const GLfloat src[4], void *dst)
6794 {
6795 
6796 
6797 
6798       uint8_t b =
6799 
6800             util_format_linear_float_to_srgb_8unorm(src[2]);
6801 
6802 
6803       uint8_t g =
6804 
6805             util_format_linear_float_to_srgb_8unorm(src[1]);
6806 
6807 
6808       uint8_t r =
6809 
6810             util_format_linear_float_to_srgb_8unorm(src[0]);
6811 
6812       uint32_t d = 0;
6813                      d |= PACK(b, 8, 8);
6814          d |= PACK(g, 16, 8);
6815          d |= PACK(r, 24, 8);
6816       (*(uint32_t *)dst) = d;
6817 }
6818 
6819 static inline void
pack_float_l8a8_srgb(const GLfloat src[4],void * dst)6820 pack_float_l8a8_srgb(const GLfloat src[4], void *dst)
6821 {
6822 
6823 
6824       uint8_t l =
6825             _mesa_float_to_unorm(src[0], 8);
6826 
6827 
6828       uint8_t a =
6829             _mesa_float_to_unorm(src[3], 8);
6830 
6831       uint16_t d = 0;
6832          d |= PACK(l, 0, 8);
6833          d |= PACK(a, 8, 8);
6834       (*(uint16_t *)dst) = d;
6835 }
6836 
6837 static inline void
pack_float_a8l8_srgb(const GLfloat src[4],void * dst)6838 pack_float_a8l8_srgb(const GLfloat src[4], void *dst)
6839 {
6840 
6841 
6842       uint8_t a =
6843             _mesa_float_to_unorm(src[3], 8);
6844 
6845 
6846       uint8_t l =
6847             _mesa_float_to_unorm(src[0], 8);
6848 
6849       uint16_t d = 0;
6850          d |= PACK(a, 0, 8);
6851          d |= PACK(l, 8, 8);
6852       (*(uint16_t *)dst) = d;
6853 }
6854 
6855 static inline void
pack_float_l_srgb8(const GLfloat src[4],void * dst)6856 pack_float_l_srgb8(const GLfloat src[4], void *dst)
6857 {
6858 
6859 
6860       uint8_t l =
6861             _mesa_float_to_unorm(src[0], 8);
6862 
6863       uint8_t *d = (uint8_t *)dst;
6864          d[0] = l;
6865 }
6866 
6867 static inline void
pack_float_bgr_srgb8(const GLfloat src[4],void * dst)6868 pack_float_bgr_srgb8(const GLfloat src[4], void *dst)
6869 {
6870 
6871 
6872       uint8_t b =
6873 
6874             util_format_linear_float_to_srgb_8unorm(src[2]);
6875 
6876 
6877       uint8_t g =
6878 
6879             util_format_linear_float_to_srgb_8unorm(src[1]);
6880 
6881 
6882       uint8_t r =
6883 
6884             util_format_linear_float_to_srgb_8unorm(src[0]);
6885 
6886       uint8_t *d = (uint8_t *)dst;
6887          d[0] = b;
6888          d[1] = g;
6889          d[2] = r;
6890 }
6891 
6892 static inline void
pack_float_a_float16(const GLfloat src[4],void * dst)6893 pack_float_a_float16(const GLfloat src[4], void *dst)
6894 {
6895 
6896 
6897       uint16_t a =
6898             _mesa_float_to_half(src[3]);
6899 
6900       uint16_t *d = (uint16_t *)dst;
6901          d[0] = a;
6902 }
6903 
6904 static inline void
pack_float_a_float32(const GLfloat src[4],void * dst)6905 pack_float_a_float32(const GLfloat src[4], void *dst)
6906 {
6907 
6908 
6909       float a =
6910             src[3];
6911 
6912       float *d = (float *)dst;
6913          d[0] = a;
6914 }
6915 
6916 static inline void
pack_float_l_float16(const GLfloat src[4],void * dst)6917 pack_float_l_float16(const GLfloat src[4], void *dst)
6918 {
6919 
6920 
6921       uint16_t l =
6922             _mesa_float_to_half(src[0]);
6923 
6924       uint16_t *d = (uint16_t *)dst;
6925          d[0] = l;
6926 }
6927 
6928 static inline void
pack_float_l_float32(const GLfloat src[4],void * dst)6929 pack_float_l_float32(const GLfloat src[4], void *dst)
6930 {
6931 
6932 
6933       float l =
6934             src[0];
6935 
6936       float *d = (float *)dst;
6937          d[0] = l;
6938 }
6939 
6940 static inline void
pack_float_la_float16(const GLfloat src[4],void * dst)6941 pack_float_la_float16(const GLfloat src[4], void *dst)
6942 {
6943 
6944 
6945       uint16_t l =
6946             _mesa_float_to_half(src[0]);
6947 
6948 
6949       uint16_t a =
6950             _mesa_float_to_half(src[3]);
6951 
6952       uint16_t *d = (uint16_t *)dst;
6953          d[0] = l;
6954          d[1] = a;
6955 }
6956 
6957 static inline void
pack_float_la_float32(const GLfloat src[4],void * dst)6958 pack_float_la_float32(const GLfloat src[4], void *dst)
6959 {
6960 
6961 
6962       float l =
6963             src[0];
6964 
6965 
6966       float a =
6967             src[3];
6968 
6969       float *d = (float *)dst;
6970          d[0] = l;
6971          d[1] = a;
6972 }
6973 
6974 static inline void
pack_float_i_float16(const GLfloat src[4],void * dst)6975 pack_float_i_float16(const GLfloat src[4], void *dst)
6976 {
6977 
6978 
6979       uint16_t i =
6980             _mesa_float_to_half(src[0]);
6981 
6982       uint16_t *d = (uint16_t *)dst;
6983          d[0] = i;
6984 }
6985 
6986 static inline void
pack_float_i_float32(const GLfloat src[4],void * dst)6987 pack_float_i_float32(const GLfloat src[4], void *dst)
6988 {
6989 
6990 
6991       float i =
6992             src[0];
6993 
6994       float *d = (float *)dst;
6995          d[0] = i;
6996 }
6997 
6998 static inline void
pack_float_r_float16(const GLfloat src[4],void * dst)6999 pack_float_r_float16(const GLfloat src[4], void *dst)
7000 {
7001 
7002 
7003       uint16_t r =
7004             _mesa_float_to_half(src[0]);
7005 
7006       uint16_t *d = (uint16_t *)dst;
7007          d[0] = r;
7008 }
7009 
7010 static inline void
pack_float_r_float32(const GLfloat src[4],void * dst)7011 pack_float_r_float32(const GLfloat src[4], void *dst)
7012 {
7013 
7014 
7015       float r =
7016             src[0];
7017 
7018       float *d = (float *)dst;
7019          d[0] = r;
7020 }
7021 
7022 static inline void
pack_float_rg_float16(const GLfloat src[4],void * dst)7023 pack_float_rg_float16(const GLfloat src[4], void *dst)
7024 {
7025 
7026 
7027       uint16_t r =
7028             _mesa_float_to_half(src[0]);
7029 
7030 
7031       uint16_t g =
7032             _mesa_float_to_half(src[1]);
7033 
7034       uint16_t *d = (uint16_t *)dst;
7035          d[0] = r;
7036          d[1] = g;
7037 }
7038 
7039 static inline void
pack_float_rg_float32(const GLfloat src[4],void * dst)7040 pack_float_rg_float32(const GLfloat src[4], void *dst)
7041 {
7042 
7043 
7044       float r =
7045             src[0];
7046 
7047 
7048       float g =
7049             src[1];
7050 
7051       float *d = (float *)dst;
7052          d[0] = r;
7053          d[1] = g;
7054 }
7055 
7056 static inline void
pack_float_rgb_float16(const GLfloat src[4],void * dst)7057 pack_float_rgb_float16(const GLfloat src[4], void *dst)
7058 {
7059 
7060 
7061       uint16_t r =
7062             _mesa_float_to_half(src[0]);
7063 
7064 
7065       uint16_t g =
7066             _mesa_float_to_half(src[1]);
7067 
7068 
7069       uint16_t b =
7070             _mesa_float_to_half(src[2]);
7071 
7072       uint16_t *d = (uint16_t *)dst;
7073          d[0] = r;
7074          d[1] = g;
7075          d[2] = b;
7076 }
7077 
7078 static inline void
pack_float_rgb_float32(const GLfloat src[4],void * dst)7079 pack_float_rgb_float32(const GLfloat src[4], void *dst)
7080 {
7081 
7082 
7083       float r =
7084             src[0];
7085 
7086 
7087       float g =
7088             src[1];
7089 
7090 
7091       float b =
7092             src[2];
7093 
7094       float *d = (float *)dst;
7095          d[0] = r;
7096          d[1] = g;
7097          d[2] = b;
7098 }
7099 
7100 static inline void
pack_float_rgba_float16(const GLfloat src[4],void * dst)7101 pack_float_rgba_float16(const GLfloat src[4], void *dst)
7102 {
7103 
7104 
7105       uint16_t r =
7106             _mesa_float_to_half(src[0]);
7107 
7108 
7109       uint16_t g =
7110             _mesa_float_to_half(src[1]);
7111 
7112 
7113       uint16_t b =
7114             _mesa_float_to_half(src[2]);
7115 
7116 
7117       uint16_t a =
7118             _mesa_float_to_half(src[3]);
7119 
7120       uint16_t *d = (uint16_t *)dst;
7121          d[0] = r;
7122          d[1] = g;
7123          d[2] = b;
7124          d[3] = a;
7125 }
7126 
7127 static inline void
pack_float_rgba_float32(const GLfloat src[4],void * dst)7128 pack_float_rgba_float32(const GLfloat src[4], void *dst)
7129 {
7130 
7131 
7132       float r =
7133             src[0];
7134 
7135 
7136       float g =
7137             src[1];
7138 
7139 
7140       float b =
7141             src[2];
7142 
7143 
7144       float a =
7145             src[3];
7146 
7147       float *d = (float *)dst;
7148          d[0] = r;
7149          d[1] = g;
7150          d[2] = b;
7151          d[3] = a;
7152 }
7153 
7154 static inline void
pack_float_rgbx_float16(const GLfloat src[4],void * dst)7155 pack_float_rgbx_float16(const GLfloat src[4], void *dst)
7156 {
7157 
7158 
7159       uint16_t r =
7160             _mesa_float_to_half(src[0]);
7161 
7162 
7163       uint16_t g =
7164             _mesa_float_to_half(src[1]);
7165 
7166 
7167       uint16_t b =
7168             _mesa_float_to_half(src[2]);
7169 
7170 
7171       uint16_t *d = (uint16_t *)dst;
7172          d[0] = r;
7173          d[1] = g;
7174          d[2] = b;
7175             }
7176 
7177 static inline void
pack_float_rgbx_float32(const GLfloat src[4],void * dst)7178 pack_float_rgbx_float32(const GLfloat src[4], void *dst)
7179 {
7180 
7181 
7182       float r =
7183             src[0];
7184 
7185 
7186       float g =
7187             src[1];
7188 
7189 
7190       float b =
7191             src[2];
7192 
7193 
7194       float *d = (float *)dst;
7195          d[0] = r;
7196          d[1] = g;
7197          d[2] = b;
7198             }
7199 
7200 static inline void
pack_float_r9g9b9e5_float(const GLfloat src[4],void * dst)7201 pack_float_r9g9b9e5_float(const GLfloat src[4], void *dst)
7202 {
7203    GLuint *d = (GLuint *) dst;
7204    *d = float3_to_rgb9e5(src);
7205 }
7206 
7207 static inline void
pack_float_r11g11b10_float(const GLfloat src[4],void * dst)7208 pack_float_r11g11b10_float(const GLfloat src[4], void *dst)
7209 {
7210    GLuint *d = (GLuint *) dst;
7211    *d = float3_to_r11g11b10f(src);
7212 }
7213 
7214 /**
7215  * Return a function that can pack a GLubyte rgba[4] color.
7216  */
7217 gl_pack_ubyte_rgba_func
_mesa_get_pack_ubyte_rgba_function(mesa_format format)7218 _mesa_get_pack_ubyte_rgba_function(mesa_format format)
7219 {
7220    switch (format) {
7221 
7222    case MESA_FORMAT_A8B8G8R8_UNORM:
7223       return pack_ubyte_a8b8g8r8_unorm;
7224 
7225    case MESA_FORMAT_X8B8G8R8_UNORM:
7226       return pack_ubyte_x8b8g8r8_unorm;
7227 
7228    case MESA_FORMAT_R8G8B8A8_UNORM:
7229       return pack_ubyte_r8g8b8a8_unorm;
7230 
7231    case MESA_FORMAT_R8G8B8X8_UNORM:
7232       return pack_ubyte_r8g8b8x8_unorm;
7233 
7234    case MESA_FORMAT_B8G8R8A8_UNORM:
7235       return pack_ubyte_b8g8r8a8_unorm;
7236 
7237    case MESA_FORMAT_B8G8R8X8_UNORM:
7238       return pack_ubyte_b8g8r8x8_unorm;
7239 
7240    case MESA_FORMAT_A8R8G8B8_UNORM:
7241       return pack_ubyte_a8r8g8b8_unorm;
7242 
7243    case MESA_FORMAT_X8R8G8B8_UNORM:
7244       return pack_ubyte_x8r8g8b8_unorm;
7245 
7246    case MESA_FORMAT_L16A16_UNORM:
7247       return pack_ubyte_l16a16_unorm;
7248 
7249    case MESA_FORMAT_A16L16_UNORM:
7250       return pack_ubyte_a16l16_unorm;
7251 
7252    case MESA_FORMAT_B5G6R5_UNORM:
7253       return pack_ubyte_b5g6r5_unorm;
7254 
7255    case MESA_FORMAT_R5G6B5_UNORM:
7256       return pack_ubyte_r5g6b5_unorm;
7257 
7258    case MESA_FORMAT_B4G4R4A4_UNORM:
7259       return pack_ubyte_b4g4r4a4_unorm;
7260 
7261    case MESA_FORMAT_B4G4R4X4_UNORM:
7262       return pack_ubyte_b4g4r4x4_unorm;
7263 
7264    case MESA_FORMAT_A4R4G4B4_UNORM:
7265       return pack_ubyte_a4r4g4b4_unorm;
7266 
7267    case MESA_FORMAT_A1B5G5R5_UNORM:
7268       return pack_ubyte_a1b5g5r5_unorm;
7269 
7270    case MESA_FORMAT_B5G5R5A1_UNORM:
7271       return pack_ubyte_b5g5r5a1_unorm;
7272 
7273    case MESA_FORMAT_B5G5R5X1_UNORM:
7274       return pack_ubyte_b5g5r5x1_unorm;
7275 
7276    case MESA_FORMAT_A1R5G5B5_UNORM:
7277       return pack_ubyte_a1r5g5b5_unorm;
7278 
7279    case MESA_FORMAT_L8A8_UNORM:
7280       return pack_ubyte_l8a8_unorm;
7281 
7282    case MESA_FORMAT_A8L8_UNORM:
7283       return pack_ubyte_a8l8_unorm;
7284 
7285    case MESA_FORMAT_R8G8_UNORM:
7286       return pack_ubyte_r8g8_unorm;
7287 
7288    case MESA_FORMAT_G8R8_UNORM:
7289       return pack_ubyte_g8r8_unorm;
7290 
7291    case MESA_FORMAT_L4A4_UNORM:
7292       return pack_ubyte_l4a4_unorm;
7293 
7294    case MESA_FORMAT_B2G3R3_UNORM:
7295       return pack_ubyte_b2g3r3_unorm;
7296 
7297    case MESA_FORMAT_R16G16_UNORM:
7298       return pack_ubyte_r16g16_unorm;
7299 
7300    case MESA_FORMAT_G16R16_UNORM:
7301       return pack_ubyte_g16r16_unorm;
7302 
7303    case MESA_FORMAT_B10G10R10A2_UNORM:
7304       return pack_ubyte_b10g10r10a2_unorm;
7305 
7306    case MESA_FORMAT_B10G10R10X2_UNORM:
7307       return pack_ubyte_b10g10r10x2_unorm;
7308 
7309    case MESA_FORMAT_R10G10B10A2_UNORM:
7310       return pack_ubyte_r10g10b10a2_unorm;
7311 
7312    case MESA_FORMAT_R10G10B10X2_UNORM:
7313       return pack_ubyte_r10g10b10x2_unorm;
7314 
7315    case MESA_FORMAT_R3G3B2_UNORM:
7316       return pack_ubyte_r3g3b2_unorm;
7317 
7318    case MESA_FORMAT_A4B4G4R4_UNORM:
7319       return pack_ubyte_a4b4g4r4_unorm;
7320 
7321    case MESA_FORMAT_R4G4B4A4_UNORM:
7322       return pack_ubyte_r4g4b4a4_unorm;
7323 
7324    case MESA_FORMAT_R5G5B5A1_UNORM:
7325       return pack_ubyte_r5g5b5a1_unorm;
7326 
7327    case MESA_FORMAT_A2B10G10R10_UNORM:
7328       return pack_ubyte_a2b10g10r10_unorm;
7329 
7330    case MESA_FORMAT_A2R10G10B10_UNORM:
7331       return pack_ubyte_a2r10g10b10_unorm;
7332 
7333    case MESA_FORMAT_A_UNORM8:
7334       return pack_ubyte_a_unorm8;
7335 
7336    case MESA_FORMAT_A_UNORM16:
7337       return pack_ubyte_a_unorm16;
7338 
7339    case MESA_FORMAT_L_UNORM8:
7340       return pack_ubyte_l_unorm8;
7341 
7342    case MESA_FORMAT_L_UNORM16:
7343       return pack_ubyte_l_unorm16;
7344 
7345    case MESA_FORMAT_I_UNORM8:
7346       return pack_ubyte_i_unorm8;
7347 
7348    case MESA_FORMAT_I_UNORM16:
7349       return pack_ubyte_i_unorm16;
7350 
7351    case MESA_FORMAT_R_UNORM8:
7352       return pack_ubyte_r_unorm8;
7353 
7354    case MESA_FORMAT_R_UNORM16:
7355       return pack_ubyte_r_unorm16;
7356 
7357    case MESA_FORMAT_BGR_UNORM8:
7358       return pack_ubyte_bgr_unorm8;
7359 
7360    case MESA_FORMAT_RGB_UNORM8:
7361       return pack_ubyte_rgb_unorm8;
7362 
7363    case MESA_FORMAT_RGBA_UNORM16:
7364       return pack_ubyte_rgba_unorm16;
7365 
7366    case MESA_FORMAT_RGBX_UNORM16:
7367       return pack_ubyte_rgbx_unorm16;
7368 
7369    case MESA_FORMAT_A8B8G8R8_SNORM:
7370       return pack_ubyte_a8b8g8r8_snorm;
7371 
7372    case MESA_FORMAT_X8B8G8R8_SNORM:
7373       return pack_ubyte_x8b8g8r8_snorm;
7374 
7375    case MESA_FORMAT_R8G8B8A8_SNORM:
7376       return pack_ubyte_r8g8b8a8_snorm;
7377 
7378    case MESA_FORMAT_R8G8B8X8_SNORM:
7379       return pack_ubyte_r8g8b8x8_snorm;
7380 
7381    case MESA_FORMAT_R16G16_SNORM:
7382       return pack_ubyte_r16g16_snorm;
7383 
7384    case MESA_FORMAT_G16R16_SNORM:
7385       return pack_ubyte_g16r16_snorm;
7386 
7387    case MESA_FORMAT_R8G8_SNORM:
7388       return pack_ubyte_r8g8_snorm;
7389 
7390    case MESA_FORMAT_G8R8_SNORM:
7391       return pack_ubyte_g8r8_snorm;
7392 
7393    case MESA_FORMAT_L8A8_SNORM:
7394       return pack_ubyte_l8a8_snorm;
7395 
7396    case MESA_FORMAT_A8L8_SNORM:
7397       return pack_ubyte_a8l8_snorm;
7398 
7399    case MESA_FORMAT_A_SNORM8:
7400       return pack_ubyte_a_snorm8;
7401 
7402    case MESA_FORMAT_A_SNORM16:
7403       return pack_ubyte_a_snorm16;
7404 
7405    case MESA_FORMAT_L_SNORM8:
7406       return pack_ubyte_l_snorm8;
7407 
7408    case MESA_FORMAT_L_SNORM16:
7409       return pack_ubyte_l_snorm16;
7410 
7411    case MESA_FORMAT_I_SNORM8:
7412       return pack_ubyte_i_snorm8;
7413 
7414    case MESA_FORMAT_I_SNORM16:
7415       return pack_ubyte_i_snorm16;
7416 
7417    case MESA_FORMAT_R_SNORM8:
7418       return pack_ubyte_r_snorm8;
7419 
7420    case MESA_FORMAT_R_SNORM16:
7421       return pack_ubyte_r_snorm16;
7422 
7423    case MESA_FORMAT_LA_SNORM16:
7424       return pack_ubyte_la_snorm16;
7425 
7426    case MESA_FORMAT_RGB_SNORM16:
7427       return pack_ubyte_rgb_snorm16;
7428 
7429    case MESA_FORMAT_RGBA_SNORM16:
7430       return pack_ubyte_rgba_snorm16;
7431 
7432    case MESA_FORMAT_RGBX_SNORM16:
7433       return pack_ubyte_rgbx_snorm16;
7434 
7435    case MESA_FORMAT_A8B8G8R8_SRGB:
7436       return pack_ubyte_a8b8g8r8_srgb;
7437 
7438    case MESA_FORMAT_B8G8R8A8_SRGB:
7439       return pack_ubyte_b8g8r8a8_srgb;
7440 
7441    case MESA_FORMAT_A8R8G8B8_SRGB:
7442       return pack_ubyte_a8r8g8b8_srgb;
7443 
7444    case MESA_FORMAT_B8G8R8X8_SRGB:
7445       return pack_ubyte_b8g8r8x8_srgb;
7446 
7447    case MESA_FORMAT_X8R8G8B8_SRGB:
7448       return pack_ubyte_x8r8g8b8_srgb;
7449 
7450    case MESA_FORMAT_R8G8B8A8_SRGB:
7451       return pack_ubyte_r8g8b8a8_srgb;
7452 
7453    case MESA_FORMAT_R8G8B8X8_SRGB:
7454       return pack_ubyte_r8g8b8x8_srgb;
7455 
7456    case MESA_FORMAT_X8B8G8R8_SRGB:
7457       return pack_ubyte_x8b8g8r8_srgb;
7458 
7459    case MESA_FORMAT_L8A8_SRGB:
7460       return pack_ubyte_l8a8_srgb;
7461 
7462    case MESA_FORMAT_A8L8_SRGB:
7463       return pack_ubyte_a8l8_srgb;
7464 
7465    case MESA_FORMAT_L_SRGB8:
7466       return pack_ubyte_l_srgb8;
7467 
7468    case MESA_FORMAT_BGR_SRGB8:
7469       return pack_ubyte_bgr_srgb8;
7470 
7471    case MESA_FORMAT_R9G9B9E5_FLOAT:
7472       return pack_ubyte_r9g9b9e5_float;
7473 
7474    case MESA_FORMAT_R11G11B10_FLOAT:
7475       return pack_ubyte_r11g11b10_float;
7476 
7477    case MESA_FORMAT_A_FLOAT16:
7478       return pack_ubyte_a_float16;
7479 
7480    case MESA_FORMAT_A_FLOAT32:
7481       return pack_ubyte_a_float32;
7482 
7483    case MESA_FORMAT_L_FLOAT16:
7484       return pack_ubyte_l_float16;
7485 
7486    case MESA_FORMAT_L_FLOAT32:
7487       return pack_ubyte_l_float32;
7488 
7489    case MESA_FORMAT_LA_FLOAT16:
7490       return pack_ubyte_la_float16;
7491 
7492    case MESA_FORMAT_LA_FLOAT32:
7493       return pack_ubyte_la_float32;
7494 
7495    case MESA_FORMAT_I_FLOAT16:
7496       return pack_ubyte_i_float16;
7497 
7498    case MESA_FORMAT_I_FLOAT32:
7499       return pack_ubyte_i_float32;
7500 
7501    case MESA_FORMAT_R_FLOAT16:
7502       return pack_ubyte_r_float16;
7503 
7504    case MESA_FORMAT_R_FLOAT32:
7505       return pack_ubyte_r_float32;
7506 
7507    case MESA_FORMAT_RG_FLOAT16:
7508       return pack_ubyte_rg_float16;
7509 
7510    case MESA_FORMAT_RG_FLOAT32:
7511       return pack_ubyte_rg_float32;
7512 
7513    case MESA_FORMAT_RGB_FLOAT16:
7514       return pack_ubyte_rgb_float16;
7515 
7516    case MESA_FORMAT_RGB_FLOAT32:
7517       return pack_ubyte_rgb_float32;
7518 
7519    case MESA_FORMAT_RGBA_FLOAT16:
7520       return pack_ubyte_rgba_float16;
7521 
7522    case MESA_FORMAT_RGBA_FLOAT32:
7523       return pack_ubyte_rgba_float32;
7524 
7525    case MESA_FORMAT_RGBX_FLOAT16:
7526       return pack_ubyte_rgbx_float16;
7527 
7528    case MESA_FORMAT_RGBX_FLOAT32:
7529       return pack_ubyte_rgbx_float32;
7530 
7531    case MESA_FORMAT_A8B8G8R8_UINT:
7532       return pack_ubyte_a8b8g8r8_uint;
7533 
7534    case MESA_FORMAT_A8R8G8B8_UINT:
7535       return pack_ubyte_a8r8g8b8_uint;
7536 
7537    case MESA_FORMAT_R8G8B8A8_UINT:
7538       return pack_ubyte_r8g8b8a8_uint;
7539 
7540    case MESA_FORMAT_B8G8R8A8_UINT:
7541       return pack_ubyte_b8g8r8a8_uint;
7542 
7543    case MESA_FORMAT_B10G10R10A2_UINT:
7544       return pack_ubyte_b10g10r10a2_uint;
7545 
7546    case MESA_FORMAT_R10G10B10A2_UINT:
7547       return pack_ubyte_r10g10b10a2_uint;
7548 
7549    case MESA_FORMAT_A2B10G10R10_UINT:
7550       return pack_ubyte_a2b10g10r10_uint;
7551 
7552    case MESA_FORMAT_A2R10G10B10_UINT:
7553       return pack_ubyte_a2r10g10b10_uint;
7554 
7555    case MESA_FORMAT_B5G6R5_UINT:
7556       return pack_ubyte_b5g6r5_uint;
7557 
7558    case MESA_FORMAT_R5G6B5_UINT:
7559       return pack_ubyte_r5g6b5_uint;
7560 
7561    case MESA_FORMAT_B2G3R3_UINT:
7562       return pack_ubyte_b2g3r3_uint;
7563 
7564    case MESA_FORMAT_R3G3B2_UINT:
7565       return pack_ubyte_r3g3b2_uint;
7566 
7567    case MESA_FORMAT_A4B4G4R4_UINT:
7568       return pack_ubyte_a4b4g4r4_uint;
7569 
7570    case MESA_FORMAT_R4G4B4A4_UINT:
7571       return pack_ubyte_r4g4b4a4_uint;
7572 
7573    case MESA_FORMAT_B4G4R4A4_UINT:
7574       return pack_ubyte_b4g4r4a4_uint;
7575 
7576    case MESA_FORMAT_A4R4G4B4_UINT:
7577       return pack_ubyte_a4r4g4b4_uint;
7578 
7579    case MESA_FORMAT_A1B5G5R5_UINT:
7580       return pack_ubyte_a1b5g5r5_uint;
7581 
7582    case MESA_FORMAT_B5G5R5A1_UINT:
7583       return pack_ubyte_b5g5r5a1_uint;
7584 
7585    case MESA_FORMAT_A1R5G5B5_UINT:
7586       return pack_ubyte_a1r5g5b5_uint;
7587 
7588    case MESA_FORMAT_R5G5B5A1_UINT:
7589       return pack_ubyte_r5g5b5a1_uint;
7590 
7591    case MESA_FORMAT_A_UINT8:
7592       return pack_ubyte_a_uint8;
7593 
7594    case MESA_FORMAT_A_UINT16:
7595       return pack_ubyte_a_uint16;
7596 
7597    case MESA_FORMAT_A_UINT32:
7598       return pack_ubyte_a_uint32;
7599 
7600    case MESA_FORMAT_A_SINT8:
7601       return pack_ubyte_a_sint8;
7602 
7603    case MESA_FORMAT_A_SINT16:
7604       return pack_ubyte_a_sint16;
7605 
7606    case MESA_FORMAT_A_SINT32:
7607       return pack_ubyte_a_sint32;
7608 
7609    case MESA_FORMAT_I_UINT8:
7610       return pack_ubyte_i_uint8;
7611 
7612    case MESA_FORMAT_I_UINT16:
7613       return pack_ubyte_i_uint16;
7614 
7615    case MESA_FORMAT_I_UINT32:
7616       return pack_ubyte_i_uint32;
7617 
7618    case MESA_FORMAT_I_SINT8:
7619       return pack_ubyte_i_sint8;
7620 
7621    case MESA_FORMAT_I_SINT16:
7622       return pack_ubyte_i_sint16;
7623 
7624    case MESA_FORMAT_I_SINT32:
7625       return pack_ubyte_i_sint32;
7626 
7627    case MESA_FORMAT_L_UINT8:
7628       return pack_ubyte_l_uint8;
7629 
7630    case MESA_FORMAT_L_UINT16:
7631       return pack_ubyte_l_uint16;
7632 
7633    case MESA_FORMAT_L_UINT32:
7634       return pack_ubyte_l_uint32;
7635 
7636    case MESA_FORMAT_L_SINT8:
7637       return pack_ubyte_l_sint8;
7638 
7639    case MESA_FORMAT_L_SINT16:
7640       return pack_ubyte_l_sint16;
7641 
7642    case MESA_FORMAT_L_SINT32:
7643       return pack_ubyte_l_sint32;
7644 
7645    case MESA_FORMAT_LA_UINT8:
7646       return pack_ubyte_la_uint8;
7647 
7648    case MESA_FORMAT_LA_UINT16:
7649       return pack_ubyte_la_uint16;
7650 
7651    case MESA_FORMAT_LA_UINT32:
7652       return pack_ubyte_la_uint32;
7653 
7654    case MESA_FORMAT_LA_SINT8:
7655       return pack_ubyte_la_sint8;
7656 
7657    case MESA_FORMAT_LA_SINT16:
7658       return pack_ubyte_la_sint16;
7659 
7660    case MESA_FORMAT_LA_SINT32:
7661       return pack_ubyte_la_sint32;
7662 
7663    case MESA_FORMAT_R_UINT8:
7664       return pack_ubyte_r_uint8;
7665 
7666    case MESA_FORMAT_R_UINT16:
7667       return pack_ubyte_r_uint16;
7668 
7669    case MESA_FORMAT_R_UINT32:
7670       return pack_ubyte_r_uint32;
7671 
7672    case MESA_FORMAT_R_SINT8:
7673       return pack_ubyte_r_sint8;
7674 
7675    case MESA_FORMAT_R_SINT16:
7676       return pack_ubyte_r_sint16;
7677 
7678    case MESA_FORMAT_R_SINT32:
7679       return pack_ubyte_r_sint32;
7680 
7681    case MESA_FORMAT_RG_UINT8:
7682       return pack_ubyte_rg_uint8;
7683 
7684    case MESA_FORMAT_RG_UINT16:
7685       return pack_ubyte_rg_uint16;
7686 
7687    case MESA_FORMAT_RG_UINT32:
7688       return pack_ubyte_rg_uint32;
7689 
7690    case MESA_FORMAT_RG_SINT8:
7691       return pack_ubyte_rg_sint8;
7692 
7693    case MESA_FORMAT_RG_SINT16:
7694       return pack_ubyte_rg_sint16;
7695 
7696    case MESA_FORMAT_RG_SINT32:
7697       return pack_ubyte_rg_sint32;
7698 
7699    case MESA_FORMAT_RGB_UINT8:
7700       return pack_ubyte_rgb_uint8;
7701 
7702    case MESA_FORMAT_RGB_UINT16:
7703       return pack_ubyte_rgb_uint16;
7704 
7705    case MESA_FORMAT_RGB_UINT32:
7706       return pack_ubyte_rgb_uint32;
7707 
7708    case MESA_FORMAT_RGB_SINT8:
7709       return pack_ubyte_rgb_sint8;
7710 
7711    case MESA_FORMAT_RGB_SINT16:
7712       return pack_ubyte_rgb_sint16;
7713 
7714    case MESA_FORMAT_RGB_SINT32:
7715       return pack_ubyte_rgb_sint32;
7716 
7717    case MESA_FORMAT_RGBA_UINT8:
7718       return pack_ubyte_rgba_uint8;
7719 
7720    case MESA_FORMAT_RGBA_UINT16:
7721       return pack_ubyte_rgba_uint16;
7722 
7723    case MESA_FORMAT_RGBA_UINT32:
7724       return pack_ubyte_rgba_uint32;
7725 
7726    case MESA_FORMAT_RGBA_SINT8:
7727       return pack_ubyte_rgba_sint8;
7728 
7729    case MESA_FORMAT_RGBA_SINT16:
7730       return pack_ubyte_rgba_sint16;
7731 
7732    case MESA_FORMAT_RGBA_SINT32:
7733       return pack_ubyte_rgba_sint32;
7734 
7735    case MESA_FORMAT_RGBX_UINT8:
7736       return pack_ubyte_rgbx_uint8;
7737 
7738    case MESA_FORMAT_RGBX_UINT16:
7739       return pack_ubyte_rgbx_uint16;
7740 
7741    case MESA_FORMAT_RGBX_UINT32:
7742       return pack_ubyte_rgbx_uint32;
7743 
7744    case MESA_FORMAT_RGBX_SINT8:
7745       return pack_ubyte_rgbx_sint8;
7746 
7747    case MESA_FORMAT_RGBX_SINT16:
7748       return pack_ubyte_rgbx_sint16;
7749 
7750    case MESA_FORMAT_RGBX_SINT32:
7751       return pack_ubyte_rgbx_sint32;
7752                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          default:
7753       return NULL;
7754    }
7755 }
7756 
7757 /**
7758  * Return a function that can pack a GLfloat rgba[4] color.
7759  */
7760 gl_pack_float_rgba_func
_mesa_get_pack_float_rgba_function(mesa_format format)7761 _mesa_get_pack_float_rgba_function(mesa_format format)
7762 {
7763    switch (format) {
7764 
7765    case MESA_FORMAT_A8B8G8R8_UNORM:
7766       return pack_float_a8b8g8r8_unorm;
7767 
7768    case MESA_FORMAT_X8B8G8R8_UNORM:
7769       return pack_float_x8b8g8r8_unorm;
7770 
7771    case MESA_FORMAT_R8G8B8A8_UNORM:
7772       return pack_float_r8g8b8a8_unorm;
7773 
7774    case MESA_FORMAT_R8G8B8X8_UNORM:
7775       return pack_float_r8g8b8x8_unorm;
7776 
7777    case MESA_FORMAT_B8G8R8A8_UNORM:
7778       return pack_float_b8g8r8a8_unorm;
7779 
7780    case MESA_FORMAT_B8G8R8X8_UNORM:
7781       return pack_float_b8g8r8x8_unorm;
7782 
7783    case MESA_FORMAT_A8R8G8B8_UNORM:
7784       return pack_float_a8r8g8b8_unorm;
7785 
7786    case MESA_FORMAT_X8R8G8B8_UNORM:
7787       return pack_float_x8r8g8b8_unorm;
7788 
7789    case MESA_FORMAT_L16A16_UNORM:
7790       return pack_float_l16a16_unorm;
7791 
7792    case MESA_FORMAT_A16L16_UNORM:
7793       return pack_float_a16l16_unorm;
7794 
7795    case MESA_FORMAT_B5G6R5_UNORM:
7796       return pack_float_b5g6r5_unorm;
7797 
7798    case MESA_FORMAT_R5G6B5_UNORM:
7799       return pack_float_r5g6b5_unorm;
7800 
7801    case MESA_FORMAT_B4G4R4A4_UNORM:
7802       return pack_float_b4g4r4a4_unorm;
7803 
7804    case MESA_FORMAT_B4G4R4X4_UNORM:
7805       return pack_float_b4g4r4x4_unorm;
7806 
7807    case MESA_FORMAT_A4R4G4B4_UNORM:
7808       return pack_float_a4r4g4b4_unorm;
7809 
7810    case MESA_FORMAT_A1B5G5R5_UNORM:
7811       return pack_float_a1b5g5r5_unorm;
7812 
7813    case MESA_FORMAT_B5G5R5A1_UNORM:
7814       return pack_float_b5g5r5a1_unorm;
7815 
7816    case MESA_FORMAT_B5G5R5X1_UNORM:
7817       return pack_float_b5g5r5x1_unorm;
7818 
7819    case MESA_FORMAT_A1R5G5B5_UNORM:
7820       return pack_float_a1r5g5b5_unorm;
7821 
7822    case MESA_FORMAT_L8A8_UNORM:
7823       return pack_float_l8a8_unorm;
7824 
7825    case MESA_FORMAT_A8L8_UNORM:
7826       return pack_float_a8l8_unorm;
7827 
7828    case MESA_FORMAT_R8G8_UNORM:
7829       return pack_float_r8g8_unorm;
7830 
7831    case MESA_FORMAT_G8R8_UNORM:
7832       return pack_float_g8r8_unorm;
7833 
7834    case MESA_FORMAT_L4A4_UNORM:
7835       return pack_float_l4a4_unorm;
7836 
7837    case MESA_FORMAT_B2G3R3_UNORM:
7838       return pack_float_b2g3r3_unorm;
7839 
7840    case MESA_FORMAT_R16G16_UNORM:
7841       return pack_float_r16g16_unorm;
7842 
7843    case MESA_FORMAT_G16R16_UNORM:
7844       return pack_float_g16r16_unorm;
7845 
7846    case MESA_FORMAT_B10G10R10A2_UNORM:
7847       return pack_float_b10g10r10a2_unorm;
7848 
7849    case MESA_FORMAT_B10G10R10X2_UNORM:
7850       return pack_float_b10g10r10x2_unorm;
7851 
7852    case MESA_FORMAT_R10G10B10A2_UNORM:
7853       return pack_float_r10g10b10a2_unorm;
7854 
7855    case MESA_FORMAT_R10G10B10X2_UNORM:
7856       return pack_float_r10g10b10x2_unorm;
7857 
7858    case MESA_FORMAT_R3G3B2_UNORM:
7859       return pack_float_r3g3b2_unorm;
7860 
7861    case MESA_FORMAT_A4B4G4R4_UNORM:
7862       return pack_float_a4b4g4r4_unorm;
7863 
7864    case MESA_FORMAT_R4G4B4A4_UNORM:
7865       return pack_float_r4g4b4a4_unorm;
7866 
7867    case MESA_FORMAT_R5G5B5A1_UNORM:
7868       return pack_float_r5g5b5a1_unorm;
7869 
7870    case MESA_FORMAT_A2B10G10R10_UNORM:
7871       return pack_float_a2b10g10r10_unorm;
7872 
7873    case MESA_FORMAT_A2R10G10B10_UNORM:
7874       return pack_float_a2r10g10b10_unorm;
7875 
7876    case MESA_FORMAT_A_UNORM8:
7877       return pack_float_a_unorm8;
7878 
7879    case MESA_FORMAT_A_UNORM16:
7880       return pack_float_a_unorm16;
7881 
7882    case MESA_FORMAT_L_UNORM8:
7883       return pack_float_l_unorm8;
7884 
7885    case MESA_FORMAT_L_UNORM16:
7886       return pack_float_l_unorm16;
7887 
7888    case MESA_FORMAT_I_UNORM8:
7889       return pack_float_i_unorm8;
7890 
7891    case MESA_FORMAT_I_UNORM16:
7892       return pack_float_i_unorm16;
7893 
7894    case MESA_FORMAT_R_UNORM8:
7895       return pack_float_r_unorm8;
7896 
7897    case MESA_FORMAT_R_UNORM16:
7898       return pack_float_r_unorm16;
7899 
7900    case MESA_FORMAT_BGR_UNORM8:
7901       return pack_float_bgr_unorm8;
7902 
7903    case MESA_FORMAT_RGB_UNORM8:
7904       return pack_float_rgb_unorm8;
7905 
7906    case MESA_FORMAT_RGBA_UNORM16:
7907       return pack_float_rgba_unorm16;
7908 
7909    case MESA_FORMAT_RGBX_UNORM16:
7910       return pack_float_rgbx_unorm16;
7911 
7912    case MESA_FORMAT_A8B8G8R8_SNORM:
7913       return pack_float_a8b8g8r8_snorm;
7914 
7915    case MESA_FORMAT_X8B8G8R8_SNORM:
7916       return pack_float_x8b8g8r8_snorm;
7917 
7918    case MESA_FORMAT_R8G8B8A8_SNORM:
7919       return pack_float_r8g8b8a8_snorm;
7920 
7921    case MESA_FORMAT_R8G8B8X8_SNORM:
7922       return pack_float_r8g8b8x8_snorm;
7923 
7924    case MESA_FORMAT_R16G16_SNORM:
7925       return pack_float_r16g16_snorm;
7926 
7927    case MESA_FORMAT_G16R16_SNORM:
7928       return pack_float_g16r16_snorm;
7929 
7930    case MESA_FORMAT_R8G8_SNORM:
7931       return pack_float_r8g8_snorm;
7932 
7933    case MESA_FORMAT_G8R8_SNORM:
7934       return pack_float_g8r8_snorm;
7935 
7936    case MESA_FORMAT_L8A8_SNORM:
7937       return pack_float_l8a8_snorm;
7938 
7939    case MESA_FORMAT_A8L8_SNORM:
7940       return pack_float_a8l8_snorm;
7941 
7942    case MESA_FORMAT_A_SNORM8:
7943       return pack_float_a_snorm8;
7944 
7945    case MESA_FORMAT_A_SNORM16:
7946       return pack_float_a_snorm16;
7947 
7948    case MESA_FORMAT_L_SNORM8:
7949       return pack_float_l_snorm8;
7950 
7951    case MESA_FORMAT_L_SNORM16:
7952       return pack_float_l_snorm16;
7953 
7954    case MESA_FORMAT_I_SNORM8:
7955       return pack_float_i_snorm8;
7956 
7957    case MESA_FORMAT_I_SNORM16:
7958       return pack_float_i_snorm16;
7959 
7960    case MESA_FORMAT_R_SNORM8:
7961       return pack_float_r_snorm8;
7962 
7963    case MESA_FORMAT_R_SNORM16:
7964       return pack_float_r_snorm16;
7965 
7966    case MESA_FORMAT_LA_SNORM16:
7967       return pack_float_la_snorm16;
7968 
7969    case MESA_FORMAT_RGB_SNORM16:
7970       return pack_float_rgb_snorm16;
7971 
7972    case MESA_FORMAT_RGBA_SNORM16:
7973       return pack_float_rgba_snorm16;
7974 
7975    case MESA_FORMAT_RGBX_SNORM16:
7976       return pack_float_rgbx_snorm16;
7977 
7978    case MESA_FORMAT_A8B8G8R8_SRGB:
7979       return pack_float_a8b8g8r8_srgb;
7980 
7981    case MESA_FORMAT_B8G8R8A8_SRGB:
7982       return pack_float_b8g8r8a8_srgb;
7983 
7984    case MESA_FORMAT_A8R8G8B8_SRGB:
7985       return pack_float_a8r8g8b8_srgb;
7986 
7987    case MESA_FORMAT_B8G8R8X8_SRGB:
7988       return pack_float_b8g8r8x8_srgb;
7989 
7990    case MESA_FORMAT_X8R8G8B8_SRGB:
7991       return pack_float_x8r8g8b8_srgb;
7992 
7993    case MESA_FORMAT_R8G8B8A8_SRGB:
7994       return pack_float_r8g8b8a8_srgb;
7995 
7996    case MESA_FORMAT_R8G8B8X8_SRGB:
7997       return pack_float_r8g8b8x8_srgb;
7998 
7999    case MESA_FORMAT_X8B8G8R8_SRGB:
8000       return pack_float_x8b8g8r8_srgb;
8001 
8002    case MESA_FORMAT_L8A8_SRGB:
8003       return pack_float_l8a8_srgb;
8004 
8005    case MESA_FORMAT_A8L8_SRGB:
8006       return pack_float_a8l8_srgb;
8007 
8008    case MESA_FORMAT_L_SRGB8:
8009       return pack_float_l_srgb8;
8010 
8011    case MESA_FORMAT_BGR_SRGB8:
8012       return pack_float_bgr_srgb8;
8013 
8014    case MESA_FORMAT_R9G9B9E5_FLOAT:
8015       return pack_float_r9g9b9e5_float;
8016 
8017    case MESA_FORMAT_R11G11B10_FLOAT:
8018       return pack_float_r11g11b10_float;
8019 
8020    case MESA_FORMAT_A_FLOAT16:
8021       return pack_float_a_float16;
8022 
8023    case MESA_FORMAT_A_FLOAT32:
8024       return pack_float_a_float32;
8025 
8026    case MESA_FORMAT_L_FLOAT16:
8027       return pack_float_l_float16;
8028 
8029    case MESA_FORMAT_L_FLOAT32:
8030       return pack_float_l_float32;
8031 
8032    case MESA_FORMAT_LA_FLOAT16:
8033       return pack_float_la_float16;
8034 
8035    case MESA_FORMAT_LA_FLOAT32:
8036       return pack_float_la_float32;
8037 
8038    case MESA_FORMAT_I_FLOAT16:
8039       return pack_float_i_float16;
8040 
8041    case MESA_FORMAT_I_FLOAT32:
8042       return pack_float_i_float32;
8043 
8044    case MESA_FORMAT_R_FLOAT16:
8045       return pack_float_r_float16;
8046 
8047    case MESA_FORMAT_R_FLOAT32:
8048       return pack_float_r_float32;
8049 
8050    case MESA_FORMAT_RG_FLOAT16:
8051       return pack_float_rg_float16;
8052 
8053    case MESA_FORMAT_RG_FLOAT32:
8054       return pack_float_rg_float32;
8055 
8056    case MESA_FORMAT_RGB_FLOAT16:
8057       return pack_float_rgb_float16;
8058 
8059    case MESA_FORMAT_RGB_FLOAT32:
8060       return pack_float_rgb_float32;
8061 
8062    case MESA_FORMAT_RGBA_FLOAT16:
8063       return pack_float_rgba_float16;
8064 
8065    case MESA_FORMAT_RGBA_FLOAT32:
8066       return pack_float_rgba_float32;
8067 
8068    case MESA_FORMAT_RGBX_FLOAT16:
8069       return pack_float_rgbx_float16;
8070 
8071    case MESA_FORMAT_RGBX_FLOAT32:
8072       return pack_float_rgbx_float32;
8073                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      default:
8074       return NULL;
8075    }
8076 }
8077 
8078 /**
8079  * Pack a row of GLubyte rgba[4] values to the destination.
8080  */
8081 void
_mesa_pack_ubyte_rgba_row(mesa_format format,GLuint n,const GLubyte src[][4],void * dst)8082 _mesa_pack_ubyte_rgba_row(mesa_format format, GLuint n,
8083                           const GLubyte src[][4], void *dst)
8084 {
8085    GLuint i;
8086    GLubyte *d = dst;
8087 
8088    switch (format) {
8089 
8090    case MESA_FORMAT_A8B8G8R8_UNORM:
8091       for (i = 0; i < n; ++i) {
8092          pack_ubyte_a8b8g8r8_unorm(src[i], d);
8093          d += 4;
8094       }
8095       break;
8096 
8097    case MESA_FORMAT_X8B8G8R8_UNORM:
8098       for (i = 0; i < n; ++i) {
8099          pack_ubyte_x8b8g8r8_unorm(src[i], d);
8100          d += 4;
8101       }
8102       break;
8103 
8104    case MESA_FORMAT_R8G8B8A8_UNORM:
8105       for (i = 0; i < n; ++i) {
8106          pack_ubyte_r8g8b8a8_unorm(src[i], d);
8107          d += 4;
8108       }
8109       break;
8110 
8111    case MESA_FORMAT_R8G8B8X8_UNORM:
8112       for (i = 0; i < n; ++i) {
8113          pack_ubyte_r8g8b8x8_unorm(src[i], d);
8114          d += 4;
8115       }
8116       break;
8117 
8118    case MESA_FORMAT_B8G8R8A8_UNORM:
8119       for (i = 0; i < n; ++i) {
8120          pack_ubyte_b8g8r8a8_unorm(src[i], d);
8121          d += 4;
8122       }
8123       break;
8124 
8125    case MESA_FORMAT_B8G8R8X8_UNORM:
8126       for (i = 0; i < n; ++i) {
8127          pack_ubyte_b8g8r8x8_unorm(src[i], d);
8128          d += 4;
8129       }
8130       break;
8131 
8132    case MESA_FORMAT_A8R8G8B8_UNORM:
8133       for (i = 0; i < n; ++i) {
8134          pack_ubyte_a8r8g8b8_unorm(src[i], d);
8135          d += 4;
8136       }
8137       break;
8138 
8139    case MESA_FORMAT_X8R8G8B8_UNORM:
8140       for (i = 0; i < n; ++i) {
8141          pack_ubyte_x8r8g8b8_unorm(src[i], d);
8142          d += 4;
8143       }
8144       break;
8145 
8146    case MESA_FORMAT_L16A16_UNORM:
8147       for (i = 0; i < n; ++i) {
8148          pack_ubyte_l16a16_unorm(src[i], d);
8149          d += 4;
8150       }
8151       break;
8152 
8153    case MESA_FORMAT_A16L16_UNORM:
8154       for (i = 0; i < n; ++i) {
8155          pack_ubyte_a16l16_unorm(src[i], d);
8156          d += 4;
8157       }
8158       break;
8159 
8160    case MESA_FORMAT_B5G6R5_UNORM:
8161       for (i = 0; i < n; ++i) {
8162          pack_ubyte_b5g6r5_unorm(src[i], d);
8163          d += 2;
8164       }
8165       break;
8166 
8167    case MESA_FORMAT_R5G6B5_UNORM:
8168       for (i = 0; i < n; ++i) {
8169          pack_ubyte_r5g6b5_unorm(src[i], d);
8170          d += 2;
8171       }
8172       break;
8173 
8174    case MESA_FORMAT_B4G4R4A4_UNORM:
8175       for (i = 0; i < n; ++i) {
8176          pack_ubyte_b4g4r4a4_unorm(src[i], d);
8177          d += 2;
8178       }
8179       break;
8180 
8181    case MESA_FORMAT_B4G4R4X4_UNORM:
8182       for (i = 0; i < n; ++i) {
8183          pack_ubyte_b4g4r4x4_unorm(src[i], d);
8184          d += 2;
8185       }
8186       break;
8187 
8188    case MESA_FORMAT_A4R4G4B4_UNORM:
8189       for (i = 0; i < n; ++i) {
8190          pack_ubyte_a4r4g4b4_unorm(src[i], d);
8191          d += 2;
8192       }
8193       break;
8194 
8195    case MESA_FORMAT_A1B5G5R5_UNORM:
8196       for (i = 0; i < n; ++i) {
8197          pack_ubyte_a1b5g5r5_unorm(src[i], d);
8198          d += 2;
8199       }
8200       break;
8201 
8202    case MESA_FORMAT_B5G5R5A1_UNORM:
8203       for (i = 0; i < n; ++i) {
8204          pack_ubyte_b5g5r5a1_unorm(src[i], d);
8205          d += 2;
8206       }
8207       break;
8208 
8209    case MESA_FORMAT_B5G5R5X1_UNORM:
8210       for (i = 0; i < n; ++i) {
8211          pack_ubyte_b5g5r5x1_unorm(src[i], d);
8212          d += 2;
8213       }
8214       break;
8215 
8216    case MESA_FORMAT_A1R5G5B5_UNORM:
8217       for (i = 0; i < n; ++i) {
8218          pack_ubyte_a1r5g5b5_unorm(src[i], d);
8219          d += 2;
8220       }
8221       break;
8222 
8223    case MESA_FORMAT_L8A8_UNORM:
8224       for (i = 0; i < n; ++i) {
8225          pack_ubyte_l8a8_unorm(src[i], d);
8226          d += 2;
8227       }
8228       break;
8229 
8230    case MESA_FORMAT_A8L8_UNORM:
8231       for (i = 0; i < n; ++i) {
8232          pack_ubyte_a8l8_unorm(src[i], d);
8233          d += 2;
8234       }
8235       break;
8236 
8237    case MESA_FORMAT_R8G8_UNORM:
8238       for (i = 0; i < n; ++i) {
8239          pack_ubyte_r8g8_unorm(src[i], d);
8240          d += 2;
8241       }
8242       break;
8243 
8244    case MESA_FORMAT_G8R8_UNORM:
8245       for (i = 0; i < n; ++i) {
8246          pack_ubyte_g8r8_unorm(src[i], d);
8247          d += 2;
8248       }
8249       break;
8250 
8251    case MESA_FORMAT_L4A4_UNORM:
8252       for (i = 0; i < n; ++i) {
8253          pack_ubyte_l4a4_unorm(src[i], d);
8254          d += 1;
8255       }
8256       break;
8257 
8258    case MESA_FORMAT_B2G3R3_UNORM:
8259       for (i = 0; i < n; ++i) {
8260          pack_ubyte_b2g3r3_unorm(src[i], d);
8261          d += 1;
8262       }
8263       break;
8264 
8265    case MESA_FORMAT_R16G16_UNORM:
8266       for (i = 0; i < n; ++i) {
8267          pack_ubyte_r16g16_unorm(src[i], d);
8268          d += 4;
8269       }
8270       break;
8271 
8272    case MESA_FORMAT_G16R16_UNORM:
8273       for (i = 0; i < n; ++i) {
8274          pack_ubyte_g16r16_unorm(src[i], d);
8275          d += 4;
8276       }
8277       break;
8278 
8279    case MESA_FORMAT_B10G10R10A2_UNORM:
8280       for (i = 0; i < n; ++i) {
8281          pack_ubyte_b10g10r10a2_unorm(src[i], d);
8282          d += 4;
8283       }
8284       break;
8285 
8286    case MESA_FORMAT_B10G10R10X2_UNORM:
8287       for (i = 0; i < n; ++i) {
8288          pack_ubyte_b10g10r10x2_unorm(src[i], d);
8289          d += 4;
8290       }
8291       break;
8292 
8293    case MESA_FORMAT_R10G10B10A2_UNORM:
8294       for (i = 0; i < n; ++i) {
8295          pack_ubyte_r10g10b10a2_unorm(src[i], d);
8296          d += 4;
8297       }
8298       break;
8299 
8300    case MESA_FORMAT_R10G10B10X2_UNORM:
8301       for (i = 0; i < n; ++i) {
8302          pack_ubyte_r10g10b10x2_unorm(src[i], d);
8303          d += 4;
8304       }
8305       break;
8306 
8307    case MESA_FORMAT_R3G3B2_UNORM:
8308       for (i = 0; i < n; ++i) {
8309          pack_ubyte_r3g3b2_unorm(src[i], d);
8310          d += 1;
8311       }
8312       break;
8313 
8314    case MESA_FORMAT_A4B4G4R4_UNORM:
8315       for (i = 0; i < n; ++i) {
8316          pack_ubyte_a4b4g4r4_unorm(src[i], d);
8317          d += 2;
8318       }
8319       break;
8320 
8321    case MESA_FORMAT_R4G4B4A4_UNORM:
8322       for (i = 0; i < n; ++i) {
8323          pack_ubyte_r4g4b4a4_unorm(src[i], d);
8324          d += 2;
8325       }
8326       break;
8327 
8328    case MESA_FORMAT_R5G5B5A1_UNORM:
8329       for (i = 0; i < n; ++i) {
8330          pack_ubyte_r5g5b5a1_unorm(src[i], d);
8331          d += 2;
8332       }
8333       break;
8334 
8335    case MESA_FORMAT_A2B10G10R10_UNORM:
8336       for (i = 0; i < n; ++i) {
8337          pack_ubyte_a2b10g10r10_unorm(src[i], d);
8338          d += 4;
8339       }
8340       break;
8341 
8342    case MESA_FORMAT_A2R10G10B10_UNORM:
8343       for (i = 0; i < n; ++i) {
8344          pack_ubyte_a2r10g10b10_unorm(src[i], d);
8345          d += 4;
8346       }
8347       break;
8348 
8349    case MESA_FORMAT_A_UNORM8:
8350       for (i = 0; i < n; ++i) {
8351          pack_ubyte_a_unorm8(src[i], d);
8352          d += 1;
8353       }
8354       break;
8355 
8356    case MESA_FORMAT_A_UNORM16:
8357       for (i = 0; i < n; ++i) {
8358          pack_ubyte_a_unorm16(src[i], d);
8359          d += 2;
8360       }
8361       break;
8362 
8363    case MESA_FORMAT_L_UNORM8:
8364       for (i = 0; i < n; ++i) {
8365          pack_ubyte_l_unorm8(src[i], d);
8366          d += 1;
8367       }
8368       break;
8369 
8370    case MESA_FORMAT_L_UNORM16:
8371       for (i = 0; i < n; ++i) {
8372          pack_ubyte_l_unorm16(src[i], d);
8373          d += 2;
8374       }
8375       break;
8376 
8377    case MESA_FORMAT_I_UNORM8:
8378       for (i = 0; i < n; ++i) {
8379          pack_ubyte_i_unorm8(src[i], d);
8380          d += 1;
8381       }
8382       break;
8383 
8384    case MESA_FORMAT_I_UNORM16:
8385       for (i = 0; i < n; ++i) {
8386          pack_ubyte_i_unorm16(src[i], d);
8387          d += 2;
8388       }
8389       break;
8390 
8391    case MESA_FORMAT_R_UNORM8:
8392       for (i = 0; i < n; ++i) {
8393          pack_ubyte_r_unorm8(src[i], d);
8394          d += 1;
8395       }
8396       break;
8397 
8398    case MESA_FORMAT_R_UNORM16:
8399       for (i = 0; i < n; ++i) {
8400          pack_ubyte_r_unorm16(src[i], d);
8401          d += 2;
8402       }
8403       break;
8404 
8405    case MESA_FORMAT_BGR_UNORM8:
8406       for (i = 0; i < n; ++i) {
8407          pack_ubyte_bgr_unorm8(src[i], d);
8408          d += 3;
8409       }
8410       break;
8411 
8412    case MESA_FORMAT_RGB_UNORM8:
8413       for (i = 0; i < n; ++i) {
8414          pack_ubyte_rgb_unorm8(src[i], d);
8415          d += 3;
8416       }
8417       break;
8418 
8419    case MESA_FORMAT_RGBA_UNORM16:
8420       for (i = 0; i < n; ++i) {
8421          pack_ubyte_rgba_unorm16(src[i], d);
8422          d += 8;
8423       }
8424       break;
8425 
8426    case MESA_FORMAT_RGBX_UNORM16:
8427       for (i = 0; i < n; ++i) {
8428          pack_ubyte_rgbx_unorm16(src[i], d);
8429          d += 8;
8430       }
8431       break;
8432 
8433    case MESA_FORMAT_A8B8G8R8_SNORM:
8434       for (i = 0; i < n; ++i) {
8435          pack_ubyte_a8b8g8r8_snorm(src[i], d);
8436          d += 4;
8437       }
8438       break;
8439 
8440    case MESA_FORMAT_X8B8G8R8_SNORM:
8441       for (i = 0; i < n; ++i) {
8442          pack_ubyte_x8b8g8r8_snorm(src[i], d);
8443          d += 4;
8444       }
8445       break;
8446 
8447    case MESA_FORMAT_R8G8B8A8_SNORM:
8448       for (i = 0; i < n; ++i) {
8449          pack_ubyte_r8g8b8a8_snorm(src[i], d);
8450          d += 4;
8451       }
8452       break;
8453 
8454    case MESA_FORMAT_R8G8B8X8_SNORM:
8455       for (i = 0; i < n; ++i) {
8456          pack_ubyte_r8g8b8x8_snorm(src[i], d);
8457          d += 4;
8458       }
8459       break;
8460 
8461    case MESA_FORMAT_R16G16_SNORM:
8462       for (i = 0; i < n; ++i) {
8463          pack_ubyte_r16g16_snorm(src[i], d);
8464          d += 4;
8465       }
8466       break;
8467 
8468    case MESA_FORMAT_G16R16_SNORM:
8469       for (i = 0; i < n; ++i) {
8470          pack_ubyte_g16r16_snorm(src[i], d);
8471          d += 4;
8472       }
8473       break;
8474 
8475    case MESA_FORMAT_R8G8_SNORM:
8476       for (i = 0; i < n; ++i) {
8477          pack_ubyte_r8g8_snorm(src[i], d);
8478          d += 2;
8479       }
8480       break;
8481 
8482    case MESA_FORMAT_G8R8_SNORM:
8483       for (i = 0; i < n; ++i) {
8484          pack_ubyte_g8r8_snorm(src[i], d);
8485          d += 2;
8486       }
8487       break;
8488 
8489    case MESA_FORMAT_L8A8_SNORM:
8490       for (i = 0; i < n; ++i) {
8491          pack_ubyte_l8a8_snorm(src[i], d);
8492          d += 2;
8493       }
8494       break;
8495 
8496    case MESA_FORMAT_A8L8_SNORM:
8497       for (i = 0; i < n; ++i) {
8498          pack_ubyte_a8l8_snorm(src[i], d);
8499          d += 2;
8500       }
8501       break;
8502 
8503    case MESA_FORMAT_A_SNORM8:
8504       for (i = 0; i < n; ++i) {
8505          pack_ubyte_a_snorm8(src[i], d);
8506          d += 1;
8507       }
8508       break;
8509 
8510    case MESA_FORMAT_A_SNORM16:
8511       for (i = 0; i < n; ++i) {
8512          pack_ubyte_a_snorm16(src[i], d);
8513          d += 2;
8514       }
8515       break;
8516 
8517    case MESA_FORMAT_L_SNORM8:
8518       for (i = 0; i < n; ++i) {
8519          pack_ubyte_l_snorm8(src[i], d);
8520          d += 1;
8521       }
8522       break;
8523 
8524    case MESA_FORMAT_L_SNORM16:
8525       for (i = 0; i < n; ++i) {
8526          pack_ubyte_l_snorm16(src[i], d);
8527          d += 2;
8528       }
8529       break;
8530 
8531    case MESA_FORMAT_I_SNORM8:
8532       for (i = 0; i < n; ++i) {
8533          pack_ubyte_i_snorm8(src[i], d);
8534          d += 1;
8535       }
8536       break;
8537 
8538    case MESA_FORMAT_I_SNORM16:
8539       for (i = 0; i < n; ++i) {
8540          pack_ubyte_i_snorm16(src[i], d);
8541          d += 2;
8542       }
8543       break;
8544 
8545    case MESA_FORMAT_R_SNORM8:
8546       for (i = 0; i < n; ++i) {
8547          pack_ubyte_r_snorm8(src[i], d);
8548          d += 1;
8549       }
8550       break;
8551 
8552    case MESA_FORMAT_R_SNORM16:
8553       for (i = 0; i < n; ++i) {
8554          pack_ubyte_r_snorm16(src[i], d);
8555          d += 2;
8556       }
8557       break;
8558 
8559    case MESA_FORMAT_LA_SNORM16:
8560       for (i = 0; i < n; ++i) {
8561          pack_ubyte_la_snorm16(src[i], d);
8562          d += 4;
8563       }
8564       break;
8565 
8566    case MESA_FORMAT_RGB_SNORM16:
8567       for (i = 0; i < n; ++i) {
8568          pack_ubyte_rgb_snorm16(src[i], d);
8569          d += 6;
8570       }
8571       break;
8572 
8573    case MESA_FORMAT_RGBA_SNORM16:
8574       for (i = 0; i < n; ++i) {
8575          pack_ubyte_rgba_snorm16(src[i], d);
8576          d += 8;
8577       }
8578       break;
8579 
8580    case MESA_FORMAT_RGBX_SNORM16:
8581       for (i = 0; i < n; ++i) {
8582          pack_ubyte_rgbx_snorm16(src[i], d);
8583          d += 8;
8584       }
8585       break;
8586 
8587    case MESA_FORMAT_A8B8G8R8_SRGB:
8588       for (i = 0; i < n; ++i) {
8589          pack_ubyte_a8b8g8r8_srgb(src[i], d);
8590          d += 4;
8591       }
8592       break;
8593 
8594    case MESA_FORMAT_B8G8R8A8_SRGB:
8595       for (i = 0; i < n; ++i) {
8596          pack_ubyte_b8g8r8a8_srgb(src[i], d);
8597          d += 4;
8598       }
8599       break;
8600 
8601    case MESA_FORMAT_A8R8G8B8_SRGB:
8602       for (i = 0; i < n; ++i) {
8603          pack_ubyte_a8r8g8b8_srgb(src[i], d);
8604          d += 4;
8605       }
8606       break;
8607 
8608    case MESA_FORMAT_B8G8R8X8_SRGB:
8609       for (i = 0; i < n; ++i) {
8610          pack_ubyte_b8g8r8x8_srgb(src[i], d);
8611          d += 4;
8612       }
8613       break;
8614 
8615    case MESA_FORMAT_X8R8G8B8_SRGB:
8616       for (i = 0; i < n; ++i) {
8617          pack_ubyte_x8r8g8b8_srgb(src[i], d);
8618          d += 4;
8619       }
8620       break;
8621 
8622    case MESA_FORMAT_R8G8B8A8_SRGB:
8623       for (i = 0; i < n; ++i) {
8624          pack_ubyte_r8g8b8a8_srgb(src[i], d);
8625          d += 4;
8626       }
8627       break;
8628 
8629    case MESA_FORMAT_R8G8B8X8_SRGB:
8630       for (i = 0; i < n; ++i) {
8631          pack_ubyte_r8g8b8x8_srgb(src[i], d);
8632          d += 4;
8633       }
8634       break;
8635 
8636    case MESA_FORMAT_X8B8G8R8_SRGB:
8637       for (i = 0; i < n; ++i) {
8638          pack_ubyte_x8b8g8r8_srgb(src[i], d);
8639          d += 4;
8640       }
8641       break;
8642 
8643    case MESA_FORMAT_L8A8_SRGB:
8644       for (i = 0; i < n; ++i) {
8645          pack_ubyte_l8a8_srgb(src[i], d);
8646          d += 2;
8647       }
8648       break;
8649 
8650    case MESA_FORMAT_A8L8_SRGB:
8651       for (i = 0; i < n; ++i) {
8652          pack_ubyte_a8l8_srgb(src[i], d);
8653          d += 2;
8654       }
8655       break;
8656 
8657    case MESA_FORMAT_L_SRGB8:
8658       for (i = 0; i < n; ++i) {
8659          pack_ubyte_l_srgb8(src[i], d);
8660          d += 1;
8661       }
8662       break;
8663 
8664    case MESA_FORMAT_BGR_SRGB8:
8665       for (i = 0; i < n; ++i) {
8666          pack_ubyte_bgr_srgb8(src[i], d);
8667          d += 3;
8668       }
8669       break;
8670 
8671    case MESA_FORMAT_R9G9B9E5_FLOAT:
8672       for (i = 0; i < n; ++i) {
8673          pack_ubyte_r9g9b9e5_float(src[i], d);
8674          d += 4;
8675       }
8676       break;
8677 
8678    case MESA_FORMAT_R11G11B10_FLOAT:
8679       for (i = 0; i < n; ++i) {
8680          pack_ubyte_r11g11b10_float(src[i], d);
8681          d += 4;
8682       }
8683       break;
8684 
8685    case MESA_FORMAT_A_FLOAT16:
8686       for (i = 0; i < n; ++i) {
8687          pack_ubyte_a_float16(src[i], d);
8688          d += 2;
8689       }
8690       break;
8691 
8692    case MESA_FORMAT_A_FLOAT32:
8693       for (i = 0; i < n; ++i) {
8694          pack_ubyte_a_float32(src[i], d);
8695          d += 4;
8696       }
8697       break;
8698 
8699    case MESA_FORMAT_L_FLOAT16:
8700       for (i = 0; i < n; ++i) {
8701          pack_ubyte_l_float16(src[i], d);
8702          d += 2;
8703       }
8704       break;
8705 
8706    case MESA_FORMAT_L_FLOAT32:
8707       for (i = 0; i < n; ++i) {
8708          pack_ubyte_l_float32(src[i], d);
8709          d += 4;
8710       }
8711       break;
8712 
8713    case MESA_FORMAT_LA_FLOAT16:
8714       for (i = 0; i < n; ++i) {
8715          pack_ubyte_la_float16(src[i], d);
8716          d += 4;
8717       }
8718       break;
8719 
8720    case MESA_FORMAT_LA_FLOAT32:
8721       for (i = 0; i < n; ++i) {
8722          pack_ubyte_la_float32(src[i], d);
8723          d += 8;
8724       }
8725       break;
8726 
8727    case MESA_FORMAT_I_FLOAT16:
8728       for (i = 0; i < n; ++i) {
8729          pack_ubyte_i_float16(src[i], d);
8730          d += 2;
8731       }
8732       break;
8733 
8734    case MESA_FORMAT_I_FLOAT32:
8735       for (i = 0; i < n; ++i) {
8736          pack_ubyte_i_float32(src[i], d);
8737          d += 4;
8738       }
8739       break;
8740 
8741    case MESA_FORMAT_R_FLOAT16:
8742       for (i = 0; i < n; ++i) {
8743          pack_ubyte_r_float16(src[i], d);
8744          d += 2;
8745       }
8746       break;
8747 
8748    case MESA_FORMAT_R_FLOAT32:
8749       for (i = 0; i < n; ++i) {
8750          pack_ubyte_r_float32(src[i], d);
8751          d += 4;
8752       }
8753       break;
8754 
8755    case MESA_FORMAT_RG_FLOAT16:
8756       for (i = 0; i < n; ++i) {
8757          pack_ubyte_rg_float16(src[i], d);
8758          d += 4;
8759       }
8760       break;
8761 
8762    case MESA_FORMAT_RG_FLOAT32:
8763       for (i = 0; i < n; ++i) {
8764          pack_ubyte_rg_float32(src[i], d);
8765          d += 8;
8766       }
8767       break;
8768 
8769    case MESA_FORMAT_RGB_FLOAT16:
8770       for (i = 0; i < n; ++i) {
8771          pack_ubyte_rgb_float16(src[i], d);
8772          d += 6;
8773       }
8774       break;
8775 
8776    case MESA_FORMAT_RGB_FLOAT32:
8777       for (i = 0; i < n; ++i) {
8778          pack_ubyte_rgb_float32(src[i], d);
8779          d += 12;
8780       }
8781       break;
8782 
8783    case MESA_FORMAT_RGBA_FLOAT16:
8784       for (i = 0; i < n; ++i) {
8785          pack_ubyte_rgba_float16(src[i], d);
8786          d += 8;
8787       }
8788       break;
8789 
8790    case MESA_FORMAT_RGBA_FLOAT32:
8791       for (i = 0; i < n; ++i) {
8792          pack_ubyte_rgba_float32(src[i], d);
8793          d += 16;
8794       }
8795       break;
8796 
8797    case MESA_FORMAT_RGBX_FLOAT16:
8798       for (i = 0; i < n; ++i) {
8799          pack_ubyte_rgbx_float16(src[i], d);
8800          d += 8;
8801       }
8802       break;
8803 
8804    case MESA_FORMAT_RGBX_FLOAT32:
8805       for (i = 0; i < n; ++i) {
8806          pack_ubyte_rgbx_float32(src[i], d);
8807          d += 16;
8808       }
8809       break;
8810 
8811    case MESA_FORMAT_A8B8G8R8_UINT:
8812       for (i = 0; i < n; ++i) {
8813          pack_ubyte_a8b8g8r8_uint(src[i], d);
8814          d += 4;
8815       }
8816       break;
8817 
8818    case MESA_FORMAT_A8R8G8B8_UINT:
8819       for (i = 0; i < n; ++i) {
8820          pack_ubyte_a8r8g8b8_uint(src[i], d);
8821          d += 4;
8822       }
8823       break;
8824 
8825    case MESA_FORMAT_R8G8B8A8_UINT:
8826       for (i = 0; i < n; ++i) {
8827          pack_ubyte_r8g8b8a8_uint(src[i], d);
8828          d += 4;
8829       }
8830       break;
8831 
8832    case MESA_FORMAT_B8G8R8A8_UINT:
8833       for (i = 0; i < n; ++i) {
8834          pack_ubyte_b8g8r8a8_uint(src[i], d);
8835          d += 4;
8836       }
8837       break;
8838 
8839    case MESA_FORMAT_B10G10R10A2_UINT:
8840       for (i = 0; i < n; ++i) {
8841          pack_ubyte_b10g10r10a2_uint(src[i], d);
8842          d += 4;
8843       }
8844       break;
8845 
8846    case MESA_FORMAT_R10G10B10A2_UINT:
8847       for (i = 0; i < n; ++i) {
8848          pack_ubyte_r10g10b10a2_uint(src[i], d);
8849          d += 4;
8850       }
8851       break;
8852 
8853    case MESA_FORMAT_A2B10G10R10_UINT:
8854       for (i = 0; i < n; ++i) {
8855          pack_ubyte_a2b10g10r10_uint(src[i], d);
8856          d += 4;
8857       }
8858       break;
8859 
8860    case MESA_FORMAT_A2R10G10B10_UINT:
8861       for (i = 0; i < n; ++i) {
8862          pack_ubyte_a2r10g10b10_uint(src[i], d);
8863          d += 4;
8864       }
8865       break;
8866 
8867    case MESA_FORMAT_B5G6R5_UINT:
8868       for (i = 0; i < n; ++i) {
8869          pack_ubyte_b5g6r5_uint(src[i], d);
8870          d += 2;
8871       }
8872       break;
8873 
8874    case MESA_FORMAT_R5G6B5_UINT:
8875       for (i = 0; i < n; ++i) {
8876          pack_ubyte_r5g6b5_uint(src[i], d);
8877          d += 2;
8878       }
8879       break;
8880 
8881    case MESA_FORMAT_B2G3R3_UINT:
8882       for (i = 0; i < n; ++i) {
8883          pack_ubyte_b2g3r3_uint(src[i], d);
8884          d += 1;
8885       }
8886       break;
8887 
8888    case MESA_FORMAT_R3G3B2_UINT:
8889       for (i = 0; i < n; ++i) {
8890          pack_ubyte_r3g3b2_uint(src[i], d);
8891          d += 1;
8892       }
8893       break;
8894 
8895    case MESA_FORMAT_A4B4G4R4_UINT:
8896       for (i = 0; i < n; ++i) {
8897          pack_ubyte_a4b4g4r4_uint(src[i], d);
8898          d += 2;
8899       }
8900       break;
8901 
8902    case MESA_FORMAT_R4G4B4A4_UINT:
8903       for (i = 0; i < n; ++i) {
8904          pack_ubyte_r4g4b4a4_uint(src[i], d);
8905          d += 2;
8906       }
8907       break;
8908 
8909    case MESA_FORMAT_B4G4R4A4_UINT:
8910       for (i = 0; i < n; ++i) {
8911          pack_ubyte_b4g4r4a4_uint(src[i], d);
8912          d += 2;
8913       }
8914       break;
8915 
8916    case MESA_FORMAT_A4R4G4B4_UINT:
8917       for (i = 0; i < n; ++i) {
8918          pack_ubyte_a4r4g4b4_uint(src[i], d);
8919          d += 2;
8920       }
8921       break;
8922 
8923    case MESA_FORMAT_A1B5G5R5_UINT:
8924       for (i = 0; i < n; ++i) {
8925          pack_ubyte_a1b5g5r5_uint(src[i], d);
8926          d += 2;
8927       }
8928       break;
8929 
8930    case MESA_FORMAT_B5G5R5A1_UINT:
8931       for (i = 0; i < n; ++i) {
8932          pack_ubyte_b5g5r5a1_uint(src[i], d);
8933          d += 2;
8934       }
8935       break;
8936 
8937    case MESA_FORMAT_A1R5G5B5_UINT:
8938       for (i = 0; i < n; ++i) {
8939          pack_ubyte_a1r5g5b5_uint(src[i], d);
8940          d += 2;
8941       }
8942       break;
8943 
8944    case MESA_FORMAT_R5G5B5A1_UINT:
8945       for (i = 0; i < n; ++i) {
8946          pack_ubyte_r5g5b5a1_uint(src[i], d);
8947          d += 2;
8948       }
8949       break;
8950 
8951    case MESA_FORMAT_A_UINT8:
8952       for (i = 0; i < n; ++i) {
8953          pack_ubyte_a_uint8(src[i], d);
8954          d += 1;
8955       }
8956       break;
8957 
8958    case MESA_FORMAT_A_UINT16:
8959       for (i = 0; i < n; ++i) {
8960          pack_ubyte_a_uint16(src[i], d);
8961          d += 2;
8962       }
8963       break;
8964 
8965    case MESA_FORMAT_A_UINT32:
8966       for (i = 0; i < n; ++i) {
8967          pack_ubyte_a_uint32(src[i], d);
8968          d += 4;
8969       }
8970       break;
8971 
8972    case MESA_FORMAT_A_SINT8:
8973       for (i = 0; i < n; ++i) {
8974          pack_ubyte_a_sint8(src[i], d);
8975          d += 1;
8976       }
8977       break;
8978 
8979    case MESA_FORMAT_A_SINT16:
8980       for (i = 0; i < n; ++i) {
8981          pack_ubyte_a_sint16(src[i], d);
8982          d += 2;
8983       }
8984       break;
8985 
8986    case MESA_FORMAT_A_SINT32:
8987       for (i = 0; i < n; ++i) {
8988          pack_ubyte_a_sint32(src[i], d);
8989          d += 4;
8990       }
8991       break;
8992 
8993    case MESA_FORMAT_I_UINT8:
8994       for (i = 0; i < n; ++i) {
8995          pack_ubyte_i_uint8(src[i], d);
8996          d += 1;
8997       }
8998       break;
8999 
9000    case MESA_FORMAT_I_UINT16:
9001       for (i = 0; i < n; ++i) {
9002          pack_ubyte_i_uint16(src[i], d);
9003          d += 2;
9004       }
9005       break;
9006 
9007    case MESA_FORMAT_I_UINT32:
9008       for (i = 0; i < n; ++i) {
9009          pack_ubyte_i_uint32(src[i], d);
9010          d += 4;
9011       }
9012       break;
9013 
9014    case MESA_FORMAT_I_SINT8:
9015       for (i = 0; i < n; ++i) {
9016          pack_ubyte_i_sint8(src[i], d);
9017          d += 1;
9018       }
9019       break;
9020 
9021    case MESA_FORMAT_I_SINT16:
9022       for (i = 0; i < n; ++i) {
9023          pack_ubyte_i_sint16(src[i], d);
9024          d += 2;
9025       }
9026       break;
9027 
9028    case MESA_FORMAT_I_SINT32:
9029       for (i = 0; i < n; ++i) {
9030          pack_ubyte_i_sint32(src[i], d);
9031          d += 4;
9032       }
9033       break;
9034 
9035    case MESA_FORMAT_L_UINT8:
9036       for (i = 0; i < n; ++i) {
9037          pack_ubyte_l_uint8(src[i], d);
9038          d += 1;
9039       }
9040       break;
9041 
9042    case MESA_FORMAT_L_UINT16:
9043       for (i = 0; i < n; ++i) {
9044          pack_ubyte_l_uint16(src[i], d);
9045          d += 2;
9046       }
9047       break;
9048 
9049    case MESA_FORMAT_L_UINT32:
9050       for (i = 0; i < n; ++i) {
9051          pack_ubyte_l_uint32(src[i], d);
9052          d += 4;
9053       }
9054       break;
9055 
9056    case MESA_FORMAT_L_SINT8:
9057       for (i = 0; i < n; ++i) {
9058          pack_ubyte_l_sint8(src[i], d);
9059          d += 1;
9060       }
9061       break;
9062 
9063    case MESA_FORMAT_L_SINT16:
9064       for (i = 0; i < n; ++i) {
9065          pack_ubyte_l_sint16(src[i], d);
9066          d += 2;
9067       }
9068       break;
9069 
9070    case MESA_FORMAT_L_SINT32:
9071       for (i = 0; i < n; ++i) {
9072          pack_ubyte_l_sint32(src[i], d);
9073          d += 4;
9074       }
9075       break;
9076 
9077    case MESA_FORMAT_LA_UINT8:
9078       for (i = 0; i < n; ++i) {
9079          pack_ubyte_la_uint8(src[i], d);
9080          d += 2;
9081       }
9082       break;
9083 
9084    case MESA_FORMAT_LA_UINT16:
9085       for (i = 0; i < n; ++i) {
9086          pack_ubyte_la_uint16(src[i], d);
9087          d += 4;
9088       }
9089       break;
9090 
9091    case MESA_FORMAT_LA_UINT32:
9092       for (i = 0; i < n; ++i) {
9093          pack_ubyte_la_uint32(src[i], d);
9094          d += 8;
9095       }
9096       break;
9097 
9098    case MESA_FORMAT_LA_SINT8:
9099       for (i = 0; i < n; ++i) {
9100          pack_ubyte_la_sint8(src[i], d);
9101          d += 2;
9102       }
9103       break;
9104 
9105    case MESA_FORMAT_LA_SINT16:
9106       for (i = 0; i < n; ++i) {
9107          pack_ubyte_la_sint16(src[i], d);
9108          d += 4;
9109       }
9110       break;
9111 
9112    case MESA_FORMAT_LA_SINT32:
9113       for (i = 0; i < n; ++i) {
9114          pack_ubyte_la_sint32(src[i], d);
9115          d += 8;
9116       }
9117       break;
9118 
9119    case MESA_FORMAT_R_UINT8:
9120       for (i = 0; i < n; ++i) {
9121          pack_ubyte_r_uint8(src[i], d);
9122          d += 1;
9123       }
9124       break;
9125 
9126    case MESA_FORMAT_R_UINT16:
9127       for (i = 0; i < n; ++i) {
9128          pack_ubyte_r_uint16(src[i], d);
9129          d += 2;
9130       }
9131       break;
9132 
9133    case MESA_FORMAT_R_UINT32:
9134       for (i = 0; i < n; ++i) {
9135          pack_ubyte_r_uint32(src[i], d);
9136          d += 4;
9137       }
9138       break;
9139 
9140    case MESA_FORMAT_R_SINT8:
9141       for (i = 0; i < n; ++i) {
9142          pack_ubyte_r_sint8(src[i], d);
9143          d += 1;
9144       }
9145       break;
9146 
9147    case MESA_FORMAT_R_SINT16:
9148       for (i = 0; i < n; ++i) {
9149          pack_ubyte_r_sint16(src[i], d);
9150          d += 2;
9151       }
9152       break;
9153 
9154    case MESA_FORMAT_R_SINT32:
9155       for (i = 0; i < n; ++i) {
9156          pack_ubyte_r_sint32(src[i], d);
9157          d += 4;
9158       }
9159       break;
9160 
9161    case MESA_FORMAT_RG_UINT8:
9162       for (i = 0; i < n; ++i) {
9163          pack_ubyte_rg_uint8(src[i], d);
9164          d += 2;
9165       }
9166       break;
9167 
9168    case MESA_FORMAT_RG_UINT16:
9169       for (i = 0; i < n; ++i) {
9170          pack_ubyte_rg_uint16(src[i], d);
9171          d += 4;
9172       }
9173       break;
9174 
9175    case MESA_FORMAT_RG_UINT32:
9176       for (i = 0; i < n; ++i) {
9177          pack_ubyte_rg_uint32(src[i], d);
9178          d += 8;
9179       }
9180       break;
9181 
9182    case MESA_FORMAT_RG_SINT8:
9183       for (i = 0; i < n; ++i) {
9184          pack_ubyte_rg_sint8(src[i], d);
9185          d += 2;
9186       }
9187       break;
9188 
9189    case MESA_FORMAT_RG_SINT16:
9190       for (i = 0; i < n; ++i) {
9191          pack_ubyte_rg_sint16(src[i], d);
9192          d += 4;
9193       }
9194       break;
9195 
9196    case MESA_FORMAT_RG_SINT32:
9197       for (i = 0; i < n; ++i) {
9198          pack_ubyte_rg_sint32(src[i], d);
9199          d += 8;
9200       }
9201       break;
9202 
9203    case MESA_FORMAT_RGB_UINT8:
9204       for (i = 0; i < n; ++i) {
9205          pack_ubyte_rgb_uint8(src[i], d);
9206          d += 3;
9207       }
9208       break;
9209 
9210    case MESA_FORMAT_RGB_UINT16:
9211       for (i = 0; i < n; ++i) {
9212          pack_ubyte_rgb_uint16(src[i], d);
9213          d += 6;
9214       }
9215       break;
9216 
9217    case MESA_FORMAT_RGB_UINT32:
9218       for (i = 0; i < n; ++i) {
9219          pack_ubyte_rgb_uint32(src[i], d);
9220          d += 12;
9221       }
9222       break;
9223 
9224    case MESA_FORMAT_RGB_SINT8:
9225       for (i = 0; i < n; ++i) {
9226          pack_ubyte_rgb_sint8(src[i], d);
9227          d += 3;
9228       }
9229       break;
9230 
9231    case MESA_FORMAT_RGB_SINT16:
9232       for (i = 0; i < n; ++i) {
9233          pack_ubyte_rgb_sint16(src[i], d);
9234          d += 6;
9235       }
9236       break;
9237 
9238    case MESA_FORMAT_RGB_SINT32:
9239       for (i = 0; i < n; ++i) {
9240          pack_ubyte_rgb_sint32(src[i], d);
9241          d += 12;
9242       }
9243       break;
9244 
9245    case MESA_FORMAT_RGBA_UINT8:
9246       for (i = 0; i < n; ++i) {
9247          pack_ubyte_rgba_uint8(src[i], d);
9248          d += 4;
9249       }
9250       break;
9251 
9252    case MESA_FORMAT_RGBA_UINT16:
9253       for (i = 0; i < n; ++i) {
9254          pack_ubyte_rgba_uint16(src[i], d);
9255          d += 8;
9256       }
9257       break;
9258 
9259    case MESA_FORMAT_RGBA_UINT32:
9260       for (i = 0; i < n; ++i) {
9261          pack_ubyte_rgba_uint32(src[i], d);
9262          d += 16;
9263       }
9264       break;
9265 
9266    case MESA_FORMAT_RGBA_SINT8:
9267       for (i = 0; i < n; ++i) {
9268          pack_ubyte_rgba_sint8(src[i], d);
9269          d += 4;
9270       }
9271       break;
9272 
9273    case MESA_FORMAT_RGBA_SINT16:
9274       for (i = 0; i < n; ++i) {
9275          pack_ubyte_rgba_sint16(src[i], d);
9276          d += 8;
9277       }
9278       break;
9279 
9280    case MESA_FORMAT_RGBA_SINT32:
9281       for (i = 0; i < n; ++i) {
9282          pack_ubyte_rgba_sint32(src[i], d);
9283          d += 16;
9284       }
9285       break;
9286 
9287    case MESA_FORMAT_RGBX_UINT8:
9288       for (i = 0; i < n; ++i) {
9289          pack_ubyte_rgbx_uint8(src[i], d);
9290          d += 4;
9291       }
9292       break;
9293 
9294    case MESA_FORMAT_RGBX_UINT16:
9295       for (i = 0; i < n; ++i) {
9296          pack_ubyte_rgbx_uint16(src[i], d);
9297          d += 8;
9298       }
9299       break;
9300 
9301    case MESA_FORMAT_RGBX_UINT32:
9302       for (i = 0; i < n; ++i) {
9303          pack_ubyte_rgbx_uint32(src[i], d);
9304          d += 16;
9305       }
9306       break;
9307 
9308    case MESA_FORMAT_RGBX_SINT8:
9309       for (i = 0; i < n; ++i) {
9310          pack_ubyte_rgbx_sint8(src[i], d);
9311          d += 4;
9312       }
9313       break;
9314 
9315    case MESA_FORMAT_RGBX_SINT16:
9316       for (i = 0; i < n; ++i) {
9317          pack_ubyte_rgbx_sint16(src[i], d);
9318          d += 8;
9319       }
9320       break;
9321 
9322    case MESA_FORMAT_RGBX_SINT32:
9323       for (i = 0; i < n; ++i) {
9324          pack_ubyte_rgbx_sint32(src[i], d);
9325          d += 16;
9326       }
9327       break;
9328                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          default:
9329       assert(!"Invalid format");
9330    }
9331 }
9332 
9333 /**
9334  * Pack a row of GLuint rgba[4] values to the destination.
9335  */
9336 void
_mesa_pack_uint_rgba_row(mesa_format format,GLuint n,const GLuint src[][4],void * dst)9337 _mesa_pack_uint_rgba_row(mesa_format format, GLuint n,
9338                           const GLuint src[][4], void *dst)
9339 {
9340    GLuint i;
9341    GLubyte *d = dst;
9342 
9343    switch (format) {
9344 
9345    case MESA_FORMAT_A8B8G8R8_UINT:
9346       for (i = 0; i < n; ++i) {
9347          pack_uint_a8b8g8r8_uint(src[i], d);
9348          d += 4;
9349       }
9350       break;
9351 
9352    case MESA_FORMAT_A8R8G8B8_UINT:
9353       for (i = 0; i < n; ++i) {
9354          pack_uint_a8r8g8b8_uint(src[i], d);
9355          d += 4;
9356       }
9357       break;
9358 
9359    case MESA_FORMAT_R8G8B8A8_UINT:
9360       for (i = 0; i < n; ++i) {
9361          pack_uint_r8g8b8a8_uint(src[i], d);
9362          d += 4;
9363       }
9364       break;
9365 
9366    case MESA_FORMAT_B8G8R8A8_UINT:
9367       for (i = 0; i < n; ++i) {
9368          pack_uint_b8g8r8a8_uint(src[i], d);
9369          d += 4;
9370       }
9371       break;
9372 
9373    case MESA_FORMAT_B10G10R10A2_UINT:
9374       for (i = 0; i < n; ++i) {
9375          pack_uint_b10g10r10a2_uint(src[i], d);
9376          d += 4;
9377       }
9378       break;
9379 
9380    case MESA_FORMAT_R10G10B10A2_UINT:
9381       for (i = 0; i < n; ++i) {
9382          pack_uint_r10g10b10a2_uint(src[i], d);
9383          d += 4;
9384       }
9385       break;
9386 
9387    case MESA_FORMAT_A2B10G10R10_UINT:
9388       for (i = 0; i < n; ++i) {
9389          pack_uint_a2b10g10r10_uint(src[i], d);
9390          d += 4;
9391       }
9392       break;
9393 
9394    case MESA_FORMAT_A2R10G10B10_UINT:
9395       for (i = 0; i < n; ++i) {
9396          pack_uint_a2r10g10b10_uint(src[i], d);
9397          d += 4;
9398       }
9399       break;
9400 
9401    case MESA_FORMAT_B5G6R5_UINT:
9402       for (i = 0; i < n; ++i) {
9403          pack_uint_b5g6r5_uint(src[i], d);
9404          d += 2;
9405       }
9406       break;
9407 
9408    case MESA_FORMAT_R5G6B5_UINT:
9409       for (i = 0; i < n; ++i) {
9410          pack_uint_r5g6b5_uint(src[i], d);
9411          d += 2;
9412       }
9413       break;
9414 
9415    case MESA_FORMAT_B2G3R3_UINT:
9416       for (i = 0; i < n; ++i) {
9417          pack_uint_b2g3r3_uint(src[i], d);
9418          d += 1;
9419       }
9420       break;
9421 
9422    case MESA_FORMAT_R3G3B2_UINT:
9423       for (i = 0; i < n; ++i) {
9424          pack_uint_r3g3b2_uint(src[i], d);
9425          d += 1;
9426       }
9427       break;
9428 
9429    case MESA_FORMAT_A4B4G4R4_UINT:
9430       for (i = 0; i < n; ++i) {
9431          pack_uint_a4b4g4r4_uint(src[i], d);
9432          d += 2;
9433       }
9434       break;
9435 
9436    case MESA_FORMAT_R4G4B4A4_UINT:
9437       for (i = 0; i < n; ++i) {
9438          pack_uint_r4g4b4a4_uint(src[i], d);
9439          d += 2;
9440       }
9441       break;
9442 
9443    case MESA_FORMAT_B4G4R4A4_UINT:
9444       for (i = 0; i < n; ++i) {
9445          pack_uint_b4g4r4a4_uint(src[i], d);
9446          d += 2;
9447       }
9448       break;
9449 
9450    case MESA_FORMAT_A4R4G4B4_UINT:
9451       for (i = 0; i < n; ++i) {
9452          pack_uint_a4r4g4b4_uint(src[i], d);
9453          d += 2;
9454       }
9455       break;
9456 
9457    case MESA_FORMAT_A1B5G5R5_UINT:
9458       for (i = 0; i < n; ++i) {
9459          pack_uint_a1b5g5r5_uint(src[i], d);
9460          d += 2;
9461       }
9462       break;
9463 
9464    case MESA_FORMAT_B5G5R5A1_UINT:
9465       for (i = 0; i < n; ++i) {
9466          pack_uint_b5g5r5a1_uint(src[i], d);
9467          d += 2;
9468       }
9469       break;
9470 
9471    case MESA_FORMAT_A1R5G5B5_UINT:
9472       for (i = 0; i < n; ++i) {
9473          pack_uint_a1r5g5b5_uint(src[i], d);
9474          d += 2;
9475       }
9476       break;
9477 
9478    case MESA_FORMAT_R5G5B5A1_UINT:
9479       for (i = 0; i < n; ++i) {
9480          pack_uint_r5g5b5a1_uint(src[i], d);
9481          d += 2;
9482       }
9483       break;
9484 
9485    case MESA_FORMAT_A_UINT8:
9486       for (i = 0; i < n; ++i) {
9487          pack_uint_a_uint8(src[i], d);
9488          d += 1;
9489       }
9490       break;
9491 
9492    case MESA_FORMAT_A_UINT16:
9493       for (i = 0; i < n; ++i) {
9494          pack_uint_a_uint16(src[i], d);
9495          d += 2;
9496       }
9497       break;
9498 
9499    case MESA_FORMAT_A_UINT32:
9500       for (i = 0; i < n; ++i) {
9501          pack_uint_a_uint32(src[i], d);
9502          d += 4;
9503       }
9504       break;
9505 
9506    case MESA_FORMAT_A_SINT8:
9507       for (i = 0; i < n; ++i) {
9508          pack_uint_a_sint8(src[i], d);
9509          d += 1;
9510       }
9511       break;
9512 
9513    case MESA_FORMAT_A_SINT16:
9514       for (i = 0; i < n; ++i) {
9515          pack_uint_a_sint16(src[i], d);
9516          d += 2;
9517       }
9518       break;
9519 
9520    case MESA_FORMAT_A_SINT32:
9521       for (i = 0; i < n; ++i) {
9522          pack_uint_a_sint32(src[i], d);
9523          d += 4;
9524       }
9525       break;
9526 
9527    case MESA_FORMAT_I_UINT8:
9528       for (i = 0; i < n; ++i) {
9529          pack_uint_i_uint8(src[i], d);
9530          d += 1;
9531       }
9532       break;
9533 
9534    case MESA_FORMAT_I_UINT16:
9535       for (i = 0; i < n; ++i) {
9536          pack_uint_i_uint16(src[i], d);
9537          d += 2;
9538       }
9539       break;
9540 
9541    case MESA_FORMAT_I_UINT32:
9542       for (i = 0; i < n; ++i) {
9543          pack_uint_i_uint32(src[i], d);
9544          d += 4;
9545       }
9546       break;
9547 
9548    case MESA_FORMAT_I_SINT8:
9549       for (i = 0; i < n; ++i) {
9550          pack_uint_i_sint8(src[i], d);
9551          d += 1;
9552       }
9553       break;
9554 
9555    case MESA_FORMAT_I_SINT16:
9556       for (i = 0; i < n; ++i) {
9557          pack_uint_i_sint16(src[i], d);
9558          d += 2;
9559       }
9560       break;
9561 
9562    case MESA_FORMAT_I_SINT32:
9563       for (i = 0; i < n; ++i) {
9564          pack_uint_i_sint32(src[i], d);
9565          d += 4;
9566       }
9567       break;
9568 
9569    case MESA_FORMAT_L_UINT8:
9570       for (i = 0; i < n; ++i) {
9571          pack_uint_l_uint8(src[i], d);
9572          d += 1;
9573       }
9574       break;
9575 
9576    case MESA_FORMAT_L_UINT16:
9577       for (i = 0; i < n; ++i) {
9578          pack_uint_l_uint16(src[i], d);
9579          d += 2;
9580       }
9581       break;
9582 
9583    case MESA_FORMAT_L_UINT32:
9584       for (i = 0; i < n; ++i) {
9585          pack_uint_l_uint32(src[i], d);
9586          d += 4;
9587       }
9588       break;
9589 
9590    case MESA_FORMAT_L_SINT8:
9591       for (i = 0; i < n; ++i) {
9592          pack_uint_l_sint8(src[i], d);
9593          d += 1;
9594       }
9595       break;
9596 
9597    case MESA_FORMAT_L_SINT16:
9598       for (i = 0; i < n; ++i) {
9599          pack_uint_l_sint16(src[i], d);
9600          d += 2;
9601       }
9602       break;
9603 
9604    case MESA_FORMAT_L_SINT32:
9605       for (i = 0; i < n; ++i) {
9606          pack_uint_l_sint32(src[i], d);
9607          d += 4;
9608       }
9609       break;
9610 
9611    case MESA_FORMAT_LA_UINT8:
9612       for (i = 0; i < n; ++i) {
9613          pack_uint_la_uint8(src[i], d);
9614          d += 2;
9615       }
9616       break;
9617 
9618    case MESA_FORMAT_LA_UINT16:
9619       for (i = 0; i < n; ++i) {
9620          pack_uint_la_uint16(src[i], d);
9621          d += 4;
9622       }
9623       break;
9624 
9625    case MESA_FORMAT_LA_UINT32:
9626       for (i = 0; i < n; ++i) {
9627          pack_uint_la_uint32(src[i], d);
9628          d += 8;
9629       }
9630       break;
9631 
9632    case MESA_FORMAT_LA_SINT8:
9633       for (i = 0; i < n; ++i) {
9634          pack_uint_la_sint8(src[i], d);
9635          d += 2;
9636       }
9637       break;
9638 
9639    case MESA_FORMAT_LA_SINT16:
9640       for (i = 0; i < n; ++i) {
9641          pack_uint_la_sint16(src[i], d);
9642          d += 4;
9643       }
9644       break;
9645 
9646    case MESA_FORMAT_LA_SINT32:
9647       for (i = 0; i < n; ++i) {
9648          pack_uint_la_sint32(src[i], d);
9649          d += 8;
9650       }
9651       break;
9652 
9653    case MESA_FORMAT_R_UINT8:
9654       for (i = 0; i < n; ++i) {
9655          pack_uint_r_uint8(src[i], d);
9656          d += 1;
9657       }
9658       break;
9659 
9660    case MESA_FORMAT_R_UINT16:
9661       for (i = 0; i < n; ++i) {
9662          pack_uint_r_uint16(src[i], d);
9663          d += 2;
9664       }
9665       break;
9666 
9667    case MESA_FORMAT_R_UINT32:
9668       for (i = 0; i < n; ++i) {
9669          pack_uint_r_uint32(src[i], d);
9670          d += 4;
9671       }
9672       break;
9673 
9674    case MESA_FORMAT_R_SINT8:
9675       for (i = 0; i < n; ++i) {
9676          pack_uint_r_sint8(src[i], d);
9677          d += 1;
9678       }
9679       break;
9680 
9681    case MESA_FORMAT_R_SINT16:
9682       for (i = 0; i < n; ++i) {
9683          pack_uint_r_sint16(src[i], d);
9684          d += 2;
9685       }
9686       break;
9687 
9688    case MESA_FORMAT_R_SINT32:
9689       for (i = 0; i < n; ++i) {
9690          pack_uint_r_sint32(src[i], d);
9691          d += 4;
9692       }
9693       break;
9694 
9695    case MESA_FORMAT_RG_UINT8:
9696       for (i = 0; i < n; ++i) {
9697          pack_uint_rg_uint8(src[i], d);
9698          d += 2;
9699       }
9700       break;
9701 
9702    case MESA_FORMAT_RG_UINT16:
9703       for (i = 0; i < n; ++i) {
9704          pack_uint_rg_uint16(src[i], d);
9705          d += 4;
9706       }
9707       break;
9708 
9709    case MESA_FORMAT_RG_UINT32:
9710       for (i = 0; i < n; ++i) {
9711          pack_uint_rg_uint32(src[i], d);
9712          d += 8;
9713       }
9714       break;
9715 
9716    case MESA_FORMAT_RG_SINT8:
9717       for (i = 0; i < n; ++i) {
9718          pack_uint_rg_sint8(src[i], d);
9719          d += 2;
9720       }
9721       break;
9722 
9723    case MESA_FORMAT_RG_SINT16:
9724       for (i = 0; i < n; ++i) {
9725          pack_uint_rg_sint16(src[i], d);
9726          d += 4;
9727       }
9728       break;
9729 
9730    case MESA_FORMAT_RG_SINT32:
9731       for (i = 0; i < n; ++i) {
9732          pack_uint_rg_sint32(src[i], d);
9733          d += 8;
9734       }
9735       break;
9736 
9737    case MESA_FORMAT_RGB_UINT8:
9738       for (i = 0; i < n; ++i) {
9739          pack_uint_rgb_uint8(src[i], d);
9740          d += 3;
9741       }
9742       break;
9743 
9744    case MESA_FORMAT_RGB_UINT16:
9745       for (i = 0; i < n; ++i) {
9746          pack_uint_rgb_uint16(src[i], d);
9747          d += 6;
9748       }
9749       break;
9750 
9751    case MESA_FORMAT_RGB_UINT32:
9752       for (i = 0; i < n; ++i) {
9753          pack_uint_rgb_uint32(src[i], d);
9754          d += 12;
9755       }
9756       break;
9757 
9758    case MESA_FORMAT_RGB_SINT8:
9759       for (i = 0; i < n; ++i) {
9760          pack_uint_rgb_sint8(src[i], d);
9761          d += 3;
9762       }
9763       break;
9764 
9765    case MESA_FORMAT_RGB_SINT16:
9766       for (i = 0; i < n; ++i) {
9767          pack_uint_rgb_sint16(src[i], d);
9768          d += 6;
9769       }
9770       break;
9771 
9772    case MESA_FORMAT_RGB_SINT32:
9773       for (i = 0; i < n; ++i) {
9774          pack_uint_rgb_sint32(src[i], d);
9775          d += 12;
9776       }
9777       break;
9778 
9779    case MESA_FORMAT_RGBA_UINT8:
9780       for (i = 0; i < n; ++i) {
9781          pack_uint_rgba_uint8(src[i], d);
9782          d += 4;
9783       }
9784       break;
9785 
9786    case MESA_FORMAT_RGBA_UINT16:
9787       for (i = 0; i < n; ++i) {
9788          pack_uint_rgba_uint16(src[i], d);
9789          d += 8;
9790       }
9791       break;
9792 
9793    case MESA_FORMAT_RGBA_UINT32:
9794       for (i = 0; i < n; ++i) {
9795          pack_uint_rgba_uint32(src[i], d);
9796          d += 16;
9797       }
9798       break;
9799 
9800    case MESA_FORMAT_RGBA_SINT8:
9801       for (i = 0; i < n; ++i) {
9802          pack_uint_rgba_sint8(src[i], d);
9803          d += 4;
9804       }
9805       break;
9806 
9807    case MESA_FORMAT_RGBA_SINT16:
9808       for (i = 0; i < n; ++i) {
9809          pack_uint_rgba_sint16(src[i], d);
9810          d += 8;
9811       }
9812       break;
9813 
9814    case MESA_FORMAT_RGBA_SINT32:
9815       for (i = 0; i < n; ++i) {
9816          pack_uint_rgba_sint32(src[i], d);
9817          d += 16;
9818       }
9819       break;
9820 
9821    case MESA_FORMAT_RGBX_UINT8:
9822       for (i = 0; i < n; ++i) {
9823          pack_uint_rgbx_uint8(src[i], d);
9824          d += 4;
9825       }
9826       break;
9827 
9828    case MESA_FORMAT_RGBX_UINT16:
9829       for (i = 0; i < n; ++i) {
9830          pack_uint_rgbx_uint16(src[i], d);
9831          d += 8;
9832       }
9833       break;
9834 
9835    case MESA_FORMAT_RGBX_UINT32:
9836       for (i = 0; i < n; ++i) {
9837          pack_uint_rgbx_uint32(src[i], d);
9838          d += 16;
9839       }
9840       break;
9841 
9842    case MESA_FORMAT_RGBX_SINT8:
9843       for (i = 0; i < n; ++i) {
9844          pack_uint_rgbx_sint8(src[i], d);
9845          d += 4;
9846       }
9847       break;
9848 
9849    case MESA_FORMAT_RGBX_SINT16:
9850       for (i = 0; i < n; ++i) {
9851          pack_uint_rgbx_sint16(src[i], d);
9852          d += 8;
9853       }
9854       break;
9855 
9856    case MESA_FORMAT_RGBX_SINT32:
9857       for (i = 0; i < n; ++i) {
9858          pack_uint_rgbx_sint32(src[i], d);
9859          d += 16;
9860       }
9861       break;
9862                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          default:
9863       assert(!"Invalid format");
9864    }
9865 }
9866 
9867 /**
9868  * Pack a row of GLfloat rgba[4] values to the destination.
9869  */
9870 void
_mesa_pack_float_rgba_row(mesa_format format,GLuint n,const GLfloat src[][4],void * dst)9871 _mesa_pack_float_rgba_row(mesa_format format, GLuint n,
9872                           const GLfloat src[][4], void *dst)
9873 {
9874    GLuint i;
9875    GLubyte *d = dst;
9876 
9877    switch (format) {
9878 
9879    case MESA_FORMAT_A8B8G8R8_UNORM:
9880       for (i = 0; i < n; ++i) {
9881          pack_float_a8b8g8r8_unorm(src[i], d);
9882          d += 4;
9883       }
9884       break;
9885 
9886    case MESA_FORMAT_X8B8G8R8_UNORM:
9887       for (i = 0; i < n; ++i) {
9888          pack_float_x8b8g8r8_unorm(src[i], d);
9889          d += 4;
9890       }
9891       break;
9892 
9893    case MESA_FORMAT_R8G8B8A8_UNORM:
9894       for (i = 0; i < n; ++i) {
9895          pack_float_r8g8b8a8_unorm(src[i], d);
9896          d += 4;
9897       }
9898       break;
9899 
9900    case MESA_FORMAT_R8G8B8X8_UNORM:
9901       for (i = 0; i < n; ++i) {
9902          pack_float_r8g8b8x8_unorm(src[i], d);
9903          d += 4;
9904       }
9905       break;
9906 
9907    case MESA_FORMAT_B8G8R8A8_UNORM:
9908       for (i = 0; i < n; ++i) {
9909          pack_float_b8g8r8a8_unorm(src[i], d);
9910          d += 4;
9911       }
9912       break;
9913 
9914    case MESA_FORMAT_B8G8R8X8_UNORM:
9915       for (i = 0; i < n; ++i) {
9916          pack_float_b8g8r8x8_unorm(src[i], d);
9917          d += 4;
9918       }
9919       break;
9920 
9921    case MESA_FORMAT_A8R8G8B8_UNORM:
9922       for (i = 0; i < n; ++i) {
9923          pack_float_a8r8g8b8_unorm(src[i], d);
9924          d += 4;
9925       }
9926       break;
9927 
9928    case MESA_FORMAT_X8R8G8B8_UNORM:
9929       for (i = 0; i < n; ++i) {
9930          pack_float_x8r8g8b8_unorm(src[i], d);
9931          d += 4;
9932       }
9933       break;
9934 
9935    case MESA_FORMAT_L16A16_UNORM:
9936       for (i = 0; i < n; ++i) {
9937          pack_float_l16a16_unorm(src[i], d);
9938          d += 4;
9939       }
9940       break;
9941 
9942    case MESA_FORMAT_A16L16_UNORM:
9943       for (i = 0; i < n; ++i) {
9944          pack_float_a16l16_unorm(src[i], d);
9945          d += 4;
9946       }
9947       break;
9948 
9949    case MESA_FORMAT_B5G6R5_UNORM:
9950       for (i = 0; i < n; ++i) {
9951          pack_float_b5g6r5_unorm(src[i], d);
9952          d += 2;
9953       }
9954       break;
9955 
9956    case MESA_FORMAT_R5G6B5_UNORM:
9957       for (i = 0; i < n; ++i) {
9958          pack_float_r5g6b5_unorm(src[i], d);
9959          d += 2;
9960       }
9961       break;
9962 
9963    case MESA_FORMAT_B4G4R4A4_UNORM:
9964       for (i = 0; i < n; ++i) {
9965          pack_float_b4g4r4a4_unorm(src[i], d);
9966          d += 2;
9967       }
9968       break;
9969 
9970    case MESA_FORMAT_B4G4R4X4_UNORM:
9971       for (i = 0; i < n; ++i) {
9972          pack_float_b4g4r4x4_unorm(src[i], d);
9973          d += 2;
9974       }
9975       break;
9976 
9977    case MESA_FORMAT_A4R4G4B4_UNORM:
9978       for (i = 0; i < n; ++i) {
9979          pack_float_a4r4g4b4_unorm(src[i], d);
9980          d += 2;
9981       }
9982       break;
9983 
9984    case MESA_FORMAT_A1B5G5R5_UNORM:
9985       for (i = 0; i < n; ++i) {
9986          pack_float_a1b5g5r5_unorm(src[i], d);
9987          d += 2;
9988       }
9989       break;
9990 
9991    case MESA_FORMAT_B5G5R5A1_UNORM:
9992       for (i = 0; i < n; ++i) {
9993          pack_float_b5g5r5a1_unorm(src[i], d);
9994          d += 2;
9995       }
9996       break;
9997 
9998    case MESA_FORMAT_B5G5R5X1_UNORM:
9999       for (i = 0; i < n; ++i) {
10000          pack_float_b5g5r5x1_unorm(src[i], d);
10001          d += 2;
10002       }
10003       break;
10004 
10005    case MESA_FORMAT_A1R5G5B5_UNORM:
10006       for (i = 0; i < n; ++i) {
10007          pack_float_a1r5g5b5_unorm(src[i], d);
10008          d += 2;
10009       }
10010       break;
10011 
10012    case MESA_FORMAT_L8A8_UNORM:
10013       for (i = 0; i < n; ++i) {
10014          pack_float_l8a8_unorm(src[i], d);
10015          d += 2;
10016       }
10017       break;
10018 
10019    case MESA_FORMAT_A8L8_UNORM:
10020       for (i = 0; i < n; ++i) {
10021          pack_float_a8l8_unorm(src[i], d);
10022          d += 2;
10023       }
10024       break;
10025 
10026    case MESA_FORMAT_R8G8_UNORM:
10027       for (i = 0; i < n; ++i) {
10028          pack_float_r8g8_unorm(src[i], d);
10029          d += 2;
10030       }
10031       break;
10032 
10033    case MESA_FORMAT_G8R8_UNORM:
10034       for (i = 0; i < n; ++i) {
10035          pack_float_g8r8_unorm(src[i], d);
10036          d += 2;
10037       }
10038       break;
10039 
10040    case MESA_FORMAT_L4A4_UNORM:
10041       for (i = 0; i < n; ++i) {
10042          pack_float_l4a4_unorm(src[i], d);
10043          d += 1;
10044       }
10045       break;
10046 
10047    case MESA_FORMAT_B2G3R3_UNORM:
10048       for (i = 0; i < n; ++i) {
10049          pack_float_b2g3r3_unorm(src[i], d);
10050          d += 1;
10051       }
10052       break;
10053 
10054    case MESA_FORMAT_R16G16_UNORM:
10055       for (i = 0; i < n; ++i) {
10056          pack_float_r16g16_unorm(src[i], d);
10057          d += 4;
10058       }
10059       break;
10060 
10061    case MESA_FORMAT_G16R16_UNORM:
10062       for (i = 0; i < n; ++i) {
10063          pack_float_g16r16_unorm(src[i], d);
10064          d += 4;
10065       }
10066       break;
10067 
10068    case MESA_FORMAT_B10G10R10A2_UNORM:
10069       for (i = 0; i < n; ++i) {
10070          pack_float_b10g10r10a2_unorm(src[i], d);
10071          d += 4;
10072       }
10073       break;
10074 
10075    case MESA_FORMAT_B10G10R10X2_UNORM:
10076       for (i = 0; i < n; ++i) {
10077          pack_float_b10g10r10x2_unorm(src[i], d);
10078          d += 4;
10079       }
10080       break;
10081 
10082    case MESA_FORMAT_R10G10B10A2_UNORM:
10083       for (i = 0; i < n; ++i) {
10084          pack_float_r10g10b10a2_unorm(src[i], d);
10085          d += 4;
10086       }
10087       break;
10088 
10089    case MESA_FORMAT_R10G10B10X2_UNORM:
10090       for (i = 0; i < n; ++i) {
10091          pack_float_r10g10b10x2_unorm(src[i], d);
10092          d += 4;
10093       }
10094       break;
10095 
10096    case MESA_FORMAT_R3G3B2_UNORM:
10097       for (i = 0; i < n; ++i) {
10098          pack_float_r3g3b2_unorm(src[i], d);
10099          d += 1;
10100       }
10101       break;
10102 
10103    case MESA_FORMAT_A4B4G4R4_UNORM:
10104       for (i = 0; i < n; ++i) {
10105          pack_float_a4b4g4r4_unorm(src[i], d);
10106          d += 2;
10107       }
10108       break;
10109 
10110    case MESA_FORMAT_R4G4B4A4_UNORM:
10111       for (i = 0; i < n; ++i) {
10112          pack_float_r4g4b4a4_unorm(src[i], d);
10113          d += 2;
10114       }
10115       break;
10116 
10117    case MESA_FORMAT_R5G5B5A1_UNORM:
10118       for (i = 0; i < n; ++i) {
10119          pack_float_r5g5b5a1_unorm(src[i], d);
10120          d += 2;
10121       }
10122       break;
10123 
10124    case MESA_FORMAT_A2B10G10R10_UNORM:
10125       for (i = 0; i < n; ++i) {
10126          pack_float_a2b10g10r10_unorm(src[i], d);
10127          d += 4;
10128       }
10129       break;
10130 
10131    case MESA_FORMAT_A2R10G10B10_UNORM:
10132       for (i = 0; i < n; ++i) {
10133          pack_float_a2r10g10b10_unorm(src[i], d);
10134          d += 4;
10135       }
10136       break;
10137 
10138    case MESA_FORMAT_A_UNORM8:
10139       for (i = 0; i < n; ++i) {
10140          pack_float_a_unorm8(src[i], d);
10141          d += 1;
10142       }
10143       break;
10144 
10145    case MESA_FORMAT_A_UNORM16:
10146       for (i = 0; i < n; ++i) {
10147          pack_float_a_unorm16(src[i], d);
10148          d += 2;
10149       }
10150       break;
10151 
10152    case MESA_FORMAT_L_UNORM8:
10153       for (i = 0; i < n; ++i) {
10154          pack_float_l_unorm8(src[i], d);
10155          d += 1;
10156       }
10157       break;
10158 
10159    case MESA_FORMAT_L_UNORM16:
10160       for (i = 0; i < n; ++i) {
10161          pack_float_l_unorm16(src[i], d);
10162          d += 2;
10163       }
10164       break;
10165 
10166    case MESA_FORMAT_I_UNORM8:
10167       for (i = 0; i < n; ++i) {
10168          pack_float_i_unorm8(src[i], d);
10169          d += 1;
10170       }
10171       break;
10172 
10173    case MESA_FORMAT_I_UNORM16:
10174       for (i = 0; i < n; ++i) {
10175          pack_float_i_unorm16(src[i], d);
10176          d += 2;
10177       }
10178       break;
10179 
10180    case MESA_FORMAT_R_UNORM8:
10181       for (i = 0; i < n; ++i) {
10182          pack_float_r_unorm8(src[i], d);
10183          d += 1;
10184       }
10185       break;
10186 
10187    case MESA_FORMAT_R_UNORM16:
10188       for (i = 0; i < n; ++i) {
10189          pack_float_r_unorm16(src[i], d);
10190          d += 2;
10191       }
10192       break;
10193 
10194    case MESA_FORMAT_BGR_UNORM8:
10195       for (i = 0; i < n; ++i) {
10196          pack_float_bgr_unorm8(src[i], d);
10197          d += 3;
10198       }
10199       break;
10200 
10201    case MESA_FORMAT_RGB_UNORM8:
10202       for (i = 0; i < n; ++i) {
10203          pack_float_rgb_unorm8(src[i], d);
10204          d += 3;
10205       }
10206       break;
10207 
10208    case MESA_FORMAT_RGBA_UNORM16:
10209       for (i = 0; i < n; ++i) {
10210          pack_float_rgba_unorm16(src[i], d);
10211          d += 8;
10212       }
10213       break;
10214 
10215    case MESA_FORMAT_RGBX_UNORM16:
10216       for (i = 0; i < n; ++i) {
10217          pack_float_rgbx_unorm16(src[i], d);
10218          d += 8;
10219       }
10220       break;
10221 
10222    case MESA_FORMAT_A8B8G8R8_SNORM:
10223       for (i = 0; i < n; ++i) {
10224          pack_float_a8b8g8r8_snorm(src[i], d);
10225          d += 4;
10226       }
10227       break;
10228 
10229    case MESA_FORMAT_X8B8G8R8_SNORM:
10230       for (i = 0; i < n; ++i) {
10231          pack_float_x8b8g8r8_snorm(src[i], d);
10232          d += 4;
10233       }
10234       break;
10235 
10236    case MESA_FORMAT_R8G8B8A8_SNORM:
10237       for (i = 0; i < n; ++i) {
10238          pack_float_r8g8b8a8_snorm(src[i], d);
10239          d += 4;
10240       }
10241       break;
10242 
10243    case MESA_FORMAT_R8G8B8X8_SNORM:
10244       for (i = 0; i < n; ++i) {
10245          pack_float_r8g8b8x8_snorm(src[i], d);
10246          d += 4;
10247       }
10248       break;
10249 
10250    case MESA_FORMAT_R16G16_SNORM:
10251       for (i = 0; i < n; ++i) {
10252          pack_float_r16g16_snorm(src[i], d);
10253          d += 4;
10254       }
10255       break;
10256 
10257    case MESA_FORMAT_G16R16_SNORM:
10258       for (i = 0; i < n; ++i) {
10259          pack_float_g16r16_snorm(src[i], d);
10260          d += 4;
10261       }
10262       break;
10263 
10264    case MESA_FORMAT_R8G8_SNORM:
10265       for (i = 0; i < n; ++i) {
10266          pack_float_r8g8_snorm(src[i], d);
10267          d += 2;
10268       }
10269       break;
10270 
10271    case MESA_FORMAT_G8R8_SNORM:
10272       for (i = 0; i < n; ++i) {
10273          pack_float_g8r8_snorm(src[i], d);
10274          d += 2;
10275       }
10276       break;
10277 
10278    case MESA_FORMAT_L8A8_SNORM:
10279       for (i = 0; i < n; ++i) {
10280          pack_float_l8a8_snorm(src[i], d);
10281          d += 2;
10282       }
10283       break;
10284 
10285    case MESA_FORMAT_A8L8_SNORM:
10286       for (i = 0; i < n; ++i) {
10287          pack_float_a8l8_snorm(src[i], d);
10288          d += 2;
10289       }
10290       break;
10291 
10292    case MESA_FORMAT_A_SNORM8:
10293       for (i = 0; i < n; ++i) {
10294          pack_float_a_snorm8(src[i], d);
10295          d += 1;
10296       }
10297       break;
10298 
10299    case MESA_FORMAT_A_SNORM16:
10300       for (i = 0; i < n; ++i) {
10301          pack_float_a_snorm16(src[i], d);
10302          d += 2;
10303       }
10304       break;
10305 
10306    case MESA_FORMAT_L_SNORM8:
10307       for (i = 0; i < n; ++i) {
10308          pack_float_l_snorm8(src[i], d);
10309          d += 1;
10310       }
10311       break;
10312 
10313    case MESA_FORMAT_L_SNORM16:
10314       for (i = 0; i < n; ++i) {
10315          pack_float_l_snorm16(src[i], d);
10316          d += 2;
10317       }
10318       break;
10319 
10320    case MESA_FORMAT_I_SNORM8:
10321       for (i = 0; i < n; ++i) {
10322          pack_float_i_snorm8(src[i], d);
10323          d += 1;
10324       }
10325       break;
10326 
10327    case MESA_FORMAT_I_SNORM16:
10328       for (i = 0; i < n; ++i) {
10329          pack_float_i_snorm16(src[i], d);
10330          d += 2;
10331       }
10332       break;
10333 
10334    case MESA_FORMAT_R_SNORM8:
10335       for (i = 0; i < n; ++i) {
10336          pack_float_r_snorm8(src[i], d);
10337          d += 1;
10338       }
10339       break;
10340 
10341    case MESA_FORMAT_R_SNORM16:
10342       for (i = 0; i < n; ++i) {
10343          pack_float_r_snorm16(src[i], d);
10344          d += 2;
10345       }
10346       break;
10347 
10348    case MESA_FORMAT_LA_SNORM16:
10349       for (i = 0; i < n; ++i) {
10350          pack_float_la_snorm16(src[i], d);
10351          d += 4;
10352       }
10353       break;
10354 
10355    case MESA_FORMAT_RGB_SNORM16:
10356       for (i = 0; i < n; ++i) {
10357          pack_float_rgb_snorm16(src[i], d);
10358          d += 6;
10359       }
10360       break;
10361 
10362    case MESA_FORMAT_RGBA_SNORM16:
10363       for (i = 0; i < n; ++i) {
10364          pack_float_rgba_snorm16(src[i], d);
10365          d += 8;
10366       }
10367       break;
10368 
10369    case MESA_FORMAT_RGBX_SNORM16:
10370       for (i = 0; i < n; ++i) {
10371          pack_float_rgbx_snorm16(src[i], d);
10372          d += 8;
10373       }
10374       break;
10375 
10376    case MESA_FORMAT_A8B8G8R8_SRGB:
10377       for (i = 0; i < n; ++i) {
10378          pack_float_a8b8g8r8_srgb(src[i], d);
10379          d += 4;
10380       }
10381       break;
10382 
10383    case MESA_FORMAT_B8G8R8A8_SRGB:
10384       for (i = 0; i < n; ++i) {
10385          pack_float_b8g8r8a8_srgb(src[i], d);
10386          d += 4;
10387       }
10388       break;
10389 
10390    case MESA_FORMAT_A8R8G8B8_SRGB:
10391       for (i = 0; i < n; ++i) {
10392          pack_float_a8r8g8b8_srgb(src[i], d);
10393          d += 4;
10394       }
10395       break;
10396 
10397    case MESA_FORMAT_B8G8R8X8_SRGB:
10398       for (i = 0; i < n; ++i) {
10399          pack_float_b8g8r8x8_srgb(src[i], d);
10400          d += 4;
10401       }
10402       break;
10403 
10404    case MESA_FORMAT_X8R8G8B8_SRGB:
10405       for (i = 0; i < n; ++i) {
10406          pack_float_x8r8g8b8_srgb(src[i], d);
10407          d += 4;
10408       }
10409       break;
10410 
10411    case MESA_FORMAT_R8G8B8A8_SRGB:
10412       for (i = 0; i < n; ++i) {
10413          pack_float_r8g8b8a8_srgb(src[i], d);
10414          d += 4;
10415       }
10416       break;
10417 
10418    case MESA_FORMAT_R8G8B8X8_SRGB:
10419       for (i = 0; i < n; ++i) {
10420          pack_float_r8g8b8x8_srgb(src[i], d);
10421          d += 4;
10422       }
10423       break;
10424 
10425    case MESA_FORMAT_X8B8G8R8_SRGB:
10426       for (i = 0; i < n; ++i) {
10427          pack_float_x8b8g8r8_srgb(src[i], d);
10428          d += 4;
10429       }
10430       break;
10431 
10432    case MESA_FORMAT_L8A8_SRGB:
10433       for (i = 0; i < n; ++i) {
10434          pack_float_l8a8_srgb(src[i], d);
10435          d += 2;
10436       }
10437       break;
10438 
10439    case MESA_FORMAT_A8L8_SRGB:
10440       for (i = 0; i < n; ++i) {
10441          pack_float_a8l8_srgb(src[i], d);
10442          d += 2;
10443       }
10444       break;
10445 
10446    case MESA_FORMAT_L_SRGB8:
10447       for (i = 0; i < n; ++i) {
10448          pack_float_l_srgb8(src[i], d);
10449          d += 1;
10450       }
10451       break;
10452 
10453    case MESA_FORMAT_BGR_SRGB8:
10454       for (i = 0; i < n; ++i) {
10455          pack_float_bgr_srgb8(src[i], d);
10456          d += 3;
10457       }
10458       break;
10459 
10460    case MESA_FORMAT_R9G9B9E5_FLOAT:
10461       for (i = 0; i < n; ++i) {
10462          pack_float_r9g9b9e5_float(src[i], d);
10463          d += 4;
10464       }
10465       break;
10466 
10467    case MESA_FORMAT_R11G11B10_FLOAT:
10468       for (i = 0; i < n; ++i) {
10469          pack_float_r11g11b10_float(src[i], d);
10470          d += 4;
10471       }
10472       break;
10473 
10474    case MESA_FORMAT_A_FLOAT16:
10475       for (i = 0; i < n; ++i) {
10476          pack_float_a_float16(src[i], d);
10477          d += 2;
10478       }
10479       break;
10480 
10481    case MESA_FORMAT_A_FLOAT32:
10482       for (i = 0; i < n; ++i) {
10483          pack_float_a_float32(src[i], d);
10484          d += 4;
10485       }
10486       break;
10487 
10488    case MESA_FORMAT_L_FLOAT16:
10489       for (i = 0; i < n; ++i) {
10490          pack_float_l_float16(src[i], d);
10491          d += 2;
10492       }
10493       break;
10494 
10495    case MESA_FORMAT_L_FLOAT32:
10496       for (i = 0; i < n; ++i) {
10497          pack_float_l_float32(src[i], d);
10498          d += 4;
10499       }
10500       break;
10501 
10502    case MESA_FORMAT_LA_FLOAT16:
10503       for (i = 0; i < n; ++i) {
10504          pack_float_la_float16(src[i], d);
10505          d += 4;
10506       }
10507       break;
10508 
10509    case MESA_FORMAT_LA_FLOAT32:
10510       for (i = 0; i < n; ++i) {
10511          pack_float_la_float32(src[i], d);
10512          d += 8;
10513       }
10514       break;
10515 
10516    case MESA_FORMAT_I_FLOAT16:
10517       for (i = 0; i < n; ++i) {
10518          pack_float_i_float16(src[i], d);
10519          d += 2;
10520       }
10521       break;
10522 
10523    case MESA_FORMAT_I_FLOAT32:
10524       for (i = 0; i < n; ++i) {
10525          pack_float_i_float32(src[i], d);
10526          d += 4;
10527       }
10528       break;
10529 
10530    case MESA_FORMAT_R_FLOAT16:
10531       for (i = 0; i < n; ++i) {
10532          pack_float_r_float16(src[i], d);
10533          d += 2;
10534       }
10535       break;
10536 
10537    case MESA_FORMAT_R_FLOAT32:
10538       for (i = 0; i < n; ++i) {
10539          pack_float_r_float32(src[i], d);
10540          d += 4;
10541       }
10542       break;
10543 
10544    case MESA_FORMAT_RG_FLOAT16:
10545       for (i = 0; i < n; ++i) {
10546          pack_float_rg_float16(src[i], d);
10547          d += 4;
10548       }
10549       break;
10550 
10551    case MESA_FORMAT_RG_FLOAT32:
10552       for (i = 0; i < n; ++i) {
10553          pack_float_rg_float32(src[i], d);
10554          d += 8;
10555       }
10556       break;
10557 
10558    case MESA_FORMAT_RGB_FLOAT16:
10559       for (i = 0; i < n; ++i) {
10560          pack_float_rgb_float16(src[i], d);
10561          d += 6;
10562       }
10563       break;
10564 
10565    case MESA_FORMAT_RGB_FLOAT32:
10566       for (i = 0; i < n; ++i) {
10567          pack_float_rgb_float32(src[i], d);
10568          d += 12;
10569       }
10570       break;
10571 
10572    case MESA_FORMAT_RGBA_FLOAT16:
10573       for (i = 0; i < n; ++i) {
10574          pack_float_rgba_float16(src[i], d);
10575          d += 8;
10576       }
10577       break;
10578 
10579    case MESA_FORMAT_RGBA_FLOAT32:
10580       for (i = 0; i < n; ++i) {
10581          pack_float_rgba_float32(src[i], d);
10582          d += 16;
10583       }
10584       break;
10585 
10586    case MESA_FORMAT_RGBX_FLOAT16:
10587       for (i = 0; i < n; ++i) {
10588          pack_float_rgbx_float16(src[i], d);
10589          d += 8;
10590       }
10591       break;
10592 
10593    case MESA_FORMAT_RGBX_FLOAT32:
10594       for (i = 0; i < n; ++i) {
10595          pack_float_rgbx_float32(src[i], d);
10596          d += 16;
10597       }
10598       break;
10599                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      default:
10600       assert(!"Invalid format");
10601    }
10602 }
10603 
10604 /**
10605  * Pack a 2D image of ubyte RGBA pixels in the given format.
10606  * \param srcRowStride  source image row stride in bytes
10607  * \param dstRowStride  destination image row stride in bytes
10608  */
10609 void
_mesa_pack_ubyte_rgba_rect(mesa_format format,GLuint width,GLuint height,const GLubyte * src,GLint srcRowStride,void * dst,GLint dstRowStride)10610 _mesa_pack_ubyte_rgba_rect(mesa_format format, GLuint width, GLuint height,
10611                            const GLubyte *src, GLint srcRowStride,
10612                            void *dst, GLint dstRowStride)
10613 {
10614    GLubyte *dstUB = dst;
10615    GLuint i;
10616 
10617    if (srcRowStride == width * 4 * sizeof(GLubyte) &&
10618        dstRowStride == _mesa_format_row_stride(format, width)) {
10619       /* do whole image at once */
10620       _mesa_pack_ubyte_rgba_row(format, width * height,
10621                                 (const GLubyte (*)[4]) src, dst);
10622    }
10623    else {
10624       /* row by row */
10625       for (i = 0; i < height; i++) {
10626          _mesa_pack_ubyte_rgba_row(format, width,
10627                                    (const GLubyte (*)[4]) src, dstUB);
10628          src += srcRowStride;
10629          dstUB += dstRowStride;
10630       }
10631    }
10632 }
10633 
10634 
10635 /** Helper struct for MESA_FORMAT_Z32_FLOAT_S8X24_UINT */
10636 struct z32f_x24s8
10637 {
10638    float z;
10639    uint32_t x24s8;
10640 };
10641 
10642 
10643 /**
10644  ** Pack float Z pixels
10645  **/
10646 
10647 static void
pack_float_S8_UINT_Z24_UNORM(const GLfloat * src,void * dst)10648 pack_float_S8_UINT_Z24_UNORM(const GLfloat *src, void *dst)
10649 {
10650    /* don't disturb the stencil values */
10651    GLuint *d = ((GLuint *) dst);
10652    const GLdouble scale = (GLdouble) 0xffffff;
10653    GLuint s = *d & 0xff;
10654    GLuint z = (GLuint) (*src * scale);
10655    assert(z <= 0xffffff);
10656    *d = (z << 8) | s;
10657 }
10658 
10659 static void
pack_float_Z24_UNORM_S8_UINT(const GLfloat * src,void * dst)10660 pack_float_Z24_UNORM_S8_UINT(const GLfloat *src, void *dst)
10661 {
10662    /* don't disturb the stencil values */
10663    GLuint *d = ((GLuint *) dst);
10664    const GLdouble scale = (GLdouble) 0xffffff;
10665    GLuint s = *d & 0xff000000;
10666    GLuint z = (GLuint) (*src * scale);
10667    assert(z <= 0xffffff);
10668    *d = s | z;
10669 }
10670 
10671 static void
pack_float_Z_UNORM16(const GLfloat * src,void * dst)10672 pack_float_Z_UNORM16(const GLfloat *src, void *dst)
10673 {
10674    GLushort *d = ((GLushort *) dst);
10675    const GLfloat scale = (GLfloat) 0xffff;
10676    *d = (GLushort) (*src * scale);
10677 }
10678 
10679 static void
pack_float_Z_UNORM32(const GLfloat * src,void * dst)10680 pack_float_Z_UNORM32(const GLfloat *src, void *dst)
10681 {
10682    GLuint *d = ((GLuint *) dst);
10683    const GLdouble scale = (GLdouble) 0xffffffff;
10684    *d = (GLuint) (*src * scale);
10685 }
10686 
10687 static void
pack_float_Z_FLOAT32(const GLfloat * src,void * dst)10688 pack_float_Z_FLOAT32(const GLfloat *src, void *dst)
10689 {
10690    GLfloat *d = (GLfloat *) dst;
10691    *d = *src;
10692 }
10693 
10694 gl_pack_float_z_func
_mesa_get_pack_float_z_func(mesa_format format)10695 _mesa_get_pack_float_z_func(mesa_format format)
10696 {
10697    switch (format) {
10698    case MESA_FORMAT_S8_UINT_Z24_UNORM:
10699    case MESA_FORMAT_X8_UINT_Z24_UNORM:
10700       return pack_float_S8_UINT_Z24_UNORM;
10701    case MESA_FORMAT_Z24_UNORM_S8_UINT:
10702    case MESA_FORMAT_Z24_UNORM_X8_UINT:
10703       return pack_float_Z24_UNORM_S8_UINT;
10704    case MESA_FORMAT_Z_UNORM16:
10705       return pack_float_Z_UNORM16;
10706    case MESA_FORMAT_Z_UNORM32:
10707       return pack_float_Z_UNORM32;
10708    case MESA_FORMAT_Z_FLOAT32:
10709    case MESA_FORMAT_Z32_FLOAT_S8X24_UINT:
10710       return pack_float_Z_FLOAT32;
10711    default:
10712       _mesa_problem(NULL,
10713                     "unexpected format in _mesa_get_pack_float_z_func()");
10714       return NULL;
10715    }
10716 }
10717 
10718 
10719 
10720 /**
10721  ** Pack uint Z pixels.  The incoming src value is always in
10722  ** the range [0, 2^32-1].
10723  **/
10724 
10725 static void
pack_uint_S8_UINT_Z24_UNORM(const GLuint * src,void * dst)10726 pack_uint_S8_UINT_Z24_UNORM(const GLuint *src, void *dst)
10727 {
10728    /* don't disturb the stencil values */
10729    GLuint *d = ((GLuint *) dst);
10730    GLuint s = *d & 0xff;
10731    GLuint z = *src & 0xffffff00;
10732    *d = z | s;
10733 }
10734 
10735 static void
pack_uint_Z24_UNORM_S8_UINT(const GLuint * src,void * dst)10736 pack_uint_Z24_UNORM_S8_UINT(const GLuint *src, void *dst)
10737 {
10738    /* don't disturb the stencil values */
10739    GLuint *d = ((GLuint *) dst);
10740    GLuint s = *d & 0xff000000;
10741    GLuint z = *src >> 8;
10742    *d = s | z;
10743 }
10744 
10745 static void
pack_uint_Z_UNORM16(const GLuint * src,void * dst)10746 pack_uint_Z_UNORM16(const GLuint *src, void *dst)
10747 {
10748    GLushort *d = ((GLushort *) dst);
10749    *d = *src >> 16;
10750 }
10751 
10752 static void
pack_uint_Z_UNORM32(const GLuint * src,void * dst)10753 pack_uint_Z_UNORM32(const GLuint *src, void *dst)
10754 {
10755    GLuint *d = ((GLuint *) dst);
10756    *d = *src;
10757 }
10758 
10759 static void
pack_uint_Z_FLOAT32(const GLuint * src,void * dst)10760 pack_uint_Z_FLOAT32(const GLuint *src, void *dst)
10761 {
10762    GLuint *d = ((GLuint *) dst);
10763    const GLdouble scale = 1.0 / (GLdouble) 0xffffffff;
10764    *d = (GLuint) (*src * scale);
10765    assert(*d >= 0.0f);
10766    assert(*d <= 1.0f);
10767 }
10768 
10769 static void
pack_uint_Z_FLOAT32_X24S8(const GLuint * src,void * dst)10770 pack_uint_Z_FLOAT32_X24S8(const GLuint *src, void *dst)
10771 {
10772    GLfloat *d = ((GLfloat *) dst);
10773    const GLdouble scale = 1.0 / (GLdouble) 0xffffffff;
10774    *d = (GLfloat) (*src * scale);
10775    assert(*d >= 0.0f);
10776    assert(*d <= 1.0f);
10777 }
10778 
10779 gl_pack_uint_z_func
_mesa_get_pack_uint_z_func(mesa_format format)10780 _mesa_get_pack_uint_z_func(mesa_format format)
10781 {
10782    switch (format) {
10783    case MESA_FORMAT_S8_UINT_Z24_UNORM:
10784    case MESA_FORMAT_X8_UINT_Z24_UNORM:
10785       return pack_uint_S8_UINT_Z24_UNORM;
10786    case MESA_FORMAT_Z24_UNORM_S8_UINT:
10787    case MESA_FORMAT_Z24_UNORM_X8_UINT:
10788       return pack_uint_Z24_UNORM_S8_UINT;
10789    case MESA_FORMAT_Z_UNORM16:
10790       return pack_uint_Z_UNORM16;
10791    case MESA_FORMAT_Z_UNORM32:
10792       return pack_uint_Z_UNORM32;
10793    case MESA_FORMAT_Z_FLOAT32:
10794       return pack_uint_Z_FLOAT32;
10795    case MESA_FORMAT_Z32_FLOAT_S8X24_UINT:
10796       return pack_uint_Z_FLOAT32_X24S8;
10797    default:
10798       _mesa_problem(NULL, "unexpected format in _mesa_get_pack_uint_z_func()");
10799       return NULL;
10800    }
10801 }
10802 
10803 
10804 /**
10805  ** Pack ubyte stencil pixels
10806  **/
10807 
10808 static void
pack_ubyte_stencil_Z24_S8(const GLubyte * src,void * dst)10809 pack_ubyte_stencil_Z24_S8(const GLubyte *src, void *dst)
10810 {
10811    /* don't disturb the Z values */
10812    GLuint *d = ((GLuint *) dst);
10813    GLuint s = *src;
10814    GLuint z = *d & 0xffffff00;
10815    *d = z | s;
10816 }
10817 
10818 static void
pack_ubyte_stencil_S8_Z24(const GLubyte * src,void * dst)10819 pack_ubyte_stencil_S8_Z24(const GLubyte *src, void *dst)
10820 {
10821    /* don't disturb the Z values */
10822    GLuint *d = ((GLuint *) dst);
10823    GLuint s = *src << 24;
10824    GLuint z = *d & 0xffffff;
10825    *d = s | z;
10826 }
10827 
10828 static void
pack_ubyte_stencil_S8(const GLubyte * src,void * dst)10829 pack_ubyte_stencil_S8(const GLubyte *src, void *dst)
10830 {
10831    GLubyte *d = (GLubyte *) dst;
10832    *d = *src;
10833 }
10834 
10835 static void
pack_ubyte_stencil_Z32_FLOAT_X24S8(const GLubyte * src,void * dst)10836 pack_ubyte_stencil_Z32_FLOAT_X24S8(const GLubyte *src, void *dst)
10837 {
10838    GLfloat *d = ((GLfloat *) dst);
10839    d[1] = *src;
10840 }
10841 
10842 
10843 gl_pack_ubyte_stencil_func
_mesa_get_pack_ubyte_stencil_func(mesa_format format)10844 _mesa_get_pack_ubyte_stencil_func(mesa_format format)
10845 {
10846    switch (format) {
10847    case MESA_FORMAT_S8_UINT_Z24_UNORM:
10848       return pack_ubyte_stencil_Z24_S8;
10849    case MESA_FORMAT_Z24_UNORM_S8_UINT:
10850       return pack_ubyte_stencil_S8_Z24;
10851    case MESA_FORMAT_S_UINT8:
10852       return pack_ubyte_stencil_S8;
10853    case MESA_FORMAT_Z32_FLOAT_S8X24_UINT:
10854       return pack_ubyte_stencil_Z32_FLOAT_X24S8;
10855    default:
10856       _mesa_problem(NULL,
10857                     "unexpected format in _mesa_pack_ubyte_stencil_func()");
10858       return NULL;
10859    }
10860 }
10861 
10862 
10863 
10864 void
_mesa_pack_float_z_row(mesa_format format,GLuint n,const GLfloat * src,void * dst)10865 _mesa_pack_float_z_row(mesa_format format, GLuint n,
10866                        const GLfloat *src, void *dst)
10867 {
10868    switch (format) {
10869    case MESA_FORMAT_S8_UINT_Z24_UNORM:
10870    case MESA_FORMAT_X8_UINT_Z24_UNORM:
10871       {
10872          /* don't disturb the stencil values */
10873          GLuint *d = ((GLuint *) dst);
10874          const GLdouble scale = (GLdouble) 0xffffff;
10875          GLuint i;
10876          for (i = 0; i < n; i++) {
10877             GLuint s = d[i] & 0xff;
10878             GLuint z = (GLuint) (src[i] * scale);
10879             assert(z <= 0xffffff);
10880             d[i] = (z << 8) | s;
10881          }
10882       }
10883       break;
10884    case MESA_FORMAT_Z24_UNORM_S8_UINT:
10885    case MESA_FORMAT_Z24_UNORM_X8_UINT:
10886       {
10887          /* don't disturb the stencil values */
10888          GLuint *d = ((GLuint *) dst);
10889          const GLdouble scale = (GLdouble) 0xffffff;
10890          GLuint i;
10891          for (i = 0; i < n; i++) {
10892             GLuint s = d[i] & 0xff000000;
10893             GLuint z = (GLuint) (src[i] * scale);
10894             assert(z <= 0xffffff);
10895             d[i] = s | z;
10896          }
10897       }
10898       break;
10899    case MESA_FORMAT_Z_UNORM16:
10900       {
10901          GLushort *d = ((GLushort *) dst);
10902          const GLfloat scale = (GLfloat) 0xffff;
10903          GLuint i;
10904          for (i = 0; i < n; i++) {
10905             d[i] = (GLushort) (src[i] * scale);
10906          }
10907       }
10908       break;
10909    case MESA_FORMAT_Z_UNORM32:
10910       {
10911          GLuint *d = ((GLuint *) dst);
10912          const GLdouble scale = (GLdouble) 0xffffffff;
10913          GLuint i;
10914          for (i = 0; i < n; i++) {
10915             d[i] = (GLuint) (src[i] * scale);
10916          }
10917       }
10918       break;
10919    case MESA_FORMAT_Z_FLOAT32:
10920       memcpy(dst, src, n * sizeof(GLfloat));
10921       break;
10922    case MESA_FORMAT_Z32_FLOAT_S8X24_UINT:
10923       {
10924          struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
10925          GLuint i;
10926          for (i = 0; i < n; i++) {
10927             d[i].z = src[i];
10928          }
10929       }
10930       break;
10931    default:
10932       _mesa_problem(NULL, "unexpected format in _mesa_pack_float_z_row()");
10933    }
10934 }
10935 
10936 
10937 /**
10938  * The incoming Z values are always in the range [0, 0xffffffff].
10939  */
10940 void
_mesa_pack_uint_z_row(mesa_format format,GLuint n,const GLuint * src,void * dst)10941 _mesa_pack_uint_z_row(mesa_format format, GLuint n,
10942                       const GLuint *src, void *dst)
10943 {
10944    switch (format) {
10945    case MESA_FORMAT_S8_UINT_Z24_UNORM:
10946    case MESA_FORMAT_X8_UINT_Z24_UNORM:
10947       {
10948          /* don't disturb the stencil values */
10949          GLuint *d = ((GLuint *) dst);
10950          GLuint i;
10951          for (i = 0; i < n; i++) {
10952             GLuint s = d[i] & 0xff;
10953             GLuint z = src[i] & 0xffffff00;
10954             d[i] = z | s;
10955          }
10956       }
10957       break;
10958    case MESA_FORMAT_Z24_UNORM_S8_UINT:
10959    case MESA_FORMAT_Z24_UNORM_X8_UINT:
10960       {
10961          /* don't disturb the stencil values */
10962          GLuint *d = ((GLuint *) dst);
10963          GLuint i;
10964          for (i = 0; i < n; i++) {
10965             GLuint s = d[i] & 0xff000000;
10966             GLuint z = src[i] >> 8;
10967             d[i] = s | z;
10968          }
10969       }
10970       break;
10971    case MESA_FORMAT_Z_UNORM16:
10972       {
10973          GLushort *d = ((GLushort *) dst);
10974          GLuint i;
10975          for (i = 0; i < n; i++) {
10976             d[i] = src[i] >> 16;
10977          }
10978       }
10979       break;
10980    case MESA_FORMAT_Z_UNORM32:
10981       memcpy(dst, src, n * sizeof(GLfloat));
10982       break;
10983    case MESA_FORMAT_Z_FLOAT32:
10984       {
10985          GLuint *d = ((GLuint *) dst);
10986          const GLdouble scale = 1.0 / (GLdouble) 0xffffffff;
10987          GLuint i;
10988          for (i = 0; i < n; i++) {
10989             d[i] = (GLuint) (src[i] * scale);
10990             assert(d[i] >= 0.0f);
10991             assert(d[i] <= 1.0f);
10992          }
10993       }
10994       break;
10995    case MESA_FORMAT_Z32_FLOAT_S8X24_UINT:
10996       {
10997          struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
10998          const GLdouble scale = 1.0 / (GLdouble) 0xffffffff;
10999          GLuint i;
11000          for (i = 0; i < n; i++) {
11001             d[i].z = (GLfloat) (src[i] * scale);
11002             assert(d[i].z >= 0.0f);
11003             assert(d[i].z <= 1.0f);
11004          }
11005       }
11006       break;
11007    default:
11008       _mesa_problem(NULL, "unexpected format in _mesa_pack_uint_z_row()");
11009    }
11010 }
11011 
11012 
11013 void
_mesa_pack_ubyte_stencil_row(mesa_format format,GLuint n,const GLubyte * src,void * dst)11014 _mesa_pack_ubyte_stencil_row(mesa_format format, GLuint n,
11015                              const GLubyte *src, void *dst)
11016 {
11017    switch (format) {
11018    case MESA_FORMAT_S8_UINT_Z24_UNORM:
11019       {
11020          /* don't disturb the Z values */
11021          GLuint *d = ((GLuint *) dst);
11022          GLuint i;
11023          for (i = 0; i < n; i++) {
11024             GLuint s = src[i];
11025             GLuint z = d[i] & 0xffffff00;
11026             d[i] = z | s;
11027          }
11028       }
11029       break;
11030    case MESA_FORMAT_Z24_UNORM_S8_UINT:
11031       {
11032          /* don't disturb the Z values */
11033          GLuint *d = ((GLuint *) dst);
11034          GLuint i;
11035          for (i = 0; i < n; i++) {
11036             GLuint s = src[i] << 24;
11037             GLuint z = d[i] & 0xffffff;
11038             d[i] = s | z;
11039          }
11040       }
11041       break;
11042    case MESA_FORMAT_S_UINT8:
11043       memcpy(dst, src, n * sizeof(GLubyte));
11044       break;
11045    case MESA_FORMAT_Z32_FLOAT_S8X24_UINT:
11046       {
11047          struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
11048          GLuint i;
11049          for (i = 0; i < n; i++) {
11050             d[i].x24s8 = src[i];
11051          }
11052       }
11053       break;
11054    default:
11055       _mesa_problem(NULL, "unexpected format in _mesa_pack_ubyte_stencil_row()");
11056    }
11057 }
11058 
11059 
11060 /**
11061  * Incoming Z/stencil values are always in uint_24_8 format.
11062  */
11063 void
_mesa_pack_uint_24_8_depth_stencil_row(mesa_format format,GLuint n,const GLuint * src,void * dst)11064 _mesa_pack_uint_24_8_depth_stencil_row(mesa_format format, GLuint n,
11065                                        const GLuint *src, void *dst)
11066 {
11067    switch (format) {
11068    case MESA_FORMAT_S8_UINT_Z24_UNORM:
11069       memcpy(dst, src, n * sizeof(GLuint));
11070       break;
11071    case MESA_FORMAT_Z24_UNORM_S8_UINT:
11072       {
11073          GLuint *d = ((GLuint *) dst);
11074          GLuint i;
11075          for (i = 0; i < n; i++) {
11076             GLuint s = src[i] << 24;
11077             GLuint z = src[i] >> 8;
11078             d[i] = s | z;
11079          }
11080       }
11081       break;
11082    case MESA_FORMAT_Z32_FLOAT_S8X24_UINT:
11083       {
11084          const GLdouble scale = 1.0 / (GLdouble) 0xffffff;
11085          struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst;
11086          GLuint i;
11087          for (i = 0; i < n; i++) {
11088             GLfloat z = (GLfloat) ((src[i] >> 8) * scale);
11089             d[i].z = z;
11090             d[i].x24s8 = src[i];
11091          }
11092       }
11093       break;
11094    default:
11095       _mesa_problem(NULL, "bad format %s in _mesa_pack_ubyte_s_row",
11096                     _mesa_get_format_name(format));
11097       return;
11098    }
11099 }
11100 
11101 
11102 
11103 /**
11104  * Convert a boolean color mask to a packed color where each channel of
11105  * the packed value at dst will be 0 or ~0 depending on the colorMask.
11106  */
11107 void
_mesa_pack_colormask(mesa_format format,const GLubyte colorMask[4],void * dst)11108 _mesa_pack_colormask(mesa_format format, const GLubyte colorMask[4], void *dst)
11109 {
11110    GLfloat maskColor[4];
11111 
11112    switch (_mesa_get_format_datatype(format)) {
11113    case GL_UNSIGNED_NORMALIZED:
11114       /* simple: 1.0 will convert to ~0 in the right bit positions */
11115       maskColor[0] = colorMask[0] ? 1.0f : 0.0f;
11116       maskColor[1] = colorMask[1] ? 1.0f : 0.0f;
11117       maskColor[2] = colorMask[2] ? 1.0f : 0.0f;
11118       maskColor[3] = colorMask[3] ? 1.0f : 0.0f;
11119       _mesa_pack_float_rgba_row(format, 1,
11120                                 (const GLfloat (*)[4]) maskColor, dst);
11121       break;
11122    case GL_SIGNED_NORMALIZED:
11123    case GL_FLOAT:
11124       /* These formats are harder because it's hard to know the floating
11125        * point values that will convert to ~0 for each color channel's bits.
11126        * This solution just generates a non-zero value for each color channel
11127        * then fixes up the non-zero values to be ~0.
11128        * Note: we'll need to add special case code if we ever have to deal
11129        * with formats with unequal color channel sizes, like R11_G11_B10.
11130        * We issue a warning below for channel sizes other than 8,16,32.
11131        */
11132       {
11133          GLuint bits = _mesa_get_format_max_bits(format); /* bits per chan */
11134          GLuint bytes = _mesa_get_format_bytes(format);
11135          GLuint i;
11136 
11137          /* this should put non-zero values into the channels of dst */
11138          maskColor[0] = colorMask[0] ? -1.0f : 0.0f;
11139          maskColor[1] = colorMask[1] ? -1.0f : 0.0f;
11140          maskColor[2] = colorMask[2] ? -1.0f : 0.0f;
11141          maskColor[3] = colorMask[3] ? -1.0f : 0.0f;
11142          _mesa_pack_float_rgba_row(format, 1,
11143                                    (const GLfloat (*)[4]) maskColor, dst);
11144 
11145          /* fix-up the dst channels by converting non-zero values to ~0 */
11146          if (bits == 8) {
11147             GLubyte *d = (GLubyte *) dst;
11148             for (i = 0; i < bytes; i++) {
11149                d[i] = d[i] ? 0xff : 0x0;
11150             }
11151          }
11152          else if (bits == 16) {
11153             GLushort *d = (GLushort *) dst;
11154             for (i = 0; i < bytes / 2; i++) {
11155                d[i] = d[i] ? 0xffff : 0x0;
11156             }
11157          }
11158          else if (bits == 32) {
11159             GLuint *d = (GLuint *) dst;
11160             for (i = 0; i < bytes / 4; i++) {
11161                d[i] = d[i] ? 0xffffffffU : 0x0;
11162             }
11163          }
11164          else {
11165             _mesa_problem(NULL, "unexpected size in _mesa_pack_colormask()");
11166             return;
11167          }
11168       }
11169       break;
11170    default:
11171       _mesa_problem(NULL, "unexpected format data type in gen_color_mask()");
11172       return;
11173    }
11174 }
11175 
11176