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