format_unpack.c revision b8e80941
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 "errors.h" 42#include "format_unpack.h" 43#include "format_utils.h" 44#include "macros.h" 45#include "util/format_rgb9e5.h" 46#include "util/format_r11g11b10f.h" 47#include "util/format_srgb.h" 48 49#define UNPACK(SRC, OFFSET, BITS) (((SRC) >> (OFFSET)) & MAX_UINT(BITS)) 50 51 52 53/* float unpacking functions */ 54 55 56static inline void 57unpack_float_a8b8g8r8_unorm(const void *void_src, GLfloat dst[4]) 58{ 59 uint32_t *src = (uint32_t *)void_src; 60 uint8_t a = UNPACK(*src, 0, 8); 61 uint8_t b = UNPACK(*src, 8, 8); 62 uint8_t g = UNPACK(*src, 16, 8); 63 uint8_t r = UNPACK(*src, 24, 8); 64 65 66 67 dst[0] = _mesa_unorm_to_float(r, 8); 68 69 70 dst[1] = _mesa_unorm_to_float(g, 8); 71 72 73 dst[2] = _mesa_unorm_to_float(b, 8); 74 75 76 dst[3] = _mesa_unorm_to_float(a, 8); 77} 78 79static inline void 80unpack_float_x8b8g8r8_unorm(const void *void_src, GLfloat dst[4]) 81{ 82 uint32_t *src = (uint32_t *)void_src; 83 uint8_t b = UNPACK(*src, 8, 8); 84 uint8_t g = UNPACK(*src, 16, 8); 85 uint8_t r = UNPACK(*src, 24, 8); 86 87 88 89 dst[0] = _mesa_unorm_to_float(r, 8); 90 91 92 dst[1] = _mesa_unorm_to_float(g, 8); 93 94 95 dst[2] = _mesa_unorm_to_float(b, 8); 96 97 dst[3] = 1.0f; 98} 99 100static inline void 101unpack_float_r8g8b8a8_unorm(const void *void_src, GLfloat dst[4]) 102{ 103 uint32_t *src = (uint32_t *)void_src; 104 uint8_t r = UNPACK(*src, 0, 8); 105 uint8_t g = UNPACK(*src, 8, 8); 106 uint8_t b = UNPACK(*src, 16, 8); 107 uint8_t a = UNPACK(*src, 24, 8); 108 109 110 111 dst[0] = _mesa_unorm_to_float(r, 8); 112 113 114 dst[1] = _mesa_unorm_to_float(g, 8); 115 116 117 dst[2] = _mesa_unorm_to_float(b, 8); 118 119 120 dst[3] = _mesa_unorm_to_float(a, 8); 121} 122 123static inline void 124unpack_float_r8g8b8x8_unorm(const void *void_src, GLfloat dst[4]) 125{ 126 uint32_t *src = (uint32_t *)void_src; 127 uint8_t r = UNPACK(*src, 0, 8); 128 uint8_t g = UNPACK(*src, 8, 8); 129 uint8_t b = UNPACK(*src, 16, 8); 130 131 132 133 dst[0] = _mesa_unorm_to_float(r, 8); 134 135 136 dst[1] = _mesa_unorm_to_float(g, 8); 137 138 139 dst[2] = _mesa_unorm_to_float(b, 8); 140 141 dst[3] = 1.0f; 142} 143 144static inline void 145unpack_float_b8g8r8a8_unorm(const void *void_src, GLfloat dst[4]) 146{ 147 uint32_t *src = (uint32_t *)void_src; 148 uint8_t b = UNPACK(*src, 0, 8); 149 uint8_t g = UNPACK(*src, 8, 8); 150 uint8_t r = UNPACK(*src, 16, 8); 151 uint8_t a = UNPACK(*src, 24, 8); 152 153 154 155 dst[0] = _mesa_unorm_to_float(r, 8); 156 157 158 dst[1] = _mesa_unorm_to_float(g, 8); 159 160 161 dst[2] = _mesa_unorm_to_float(b, 8); 162 163 164 dst[3] = _mesa_unorm_to_float(a, 8); 165} 166 167static inline void 168unpack_float_b8g8r8x8_unorm(const void *void_src, GLfloat dst[4]) 169{ 170 uint32_t *src = (uint32_t *)void_src; 171 uint8_t b = UNPACK(*src, 0, 8); 172 uint8_t g = UNPACK(*src, 8, 8); 173 uint8_t r = UNPACK(*src, 16, 8); 174 175 176 177 dst[0] = _mesa_unorm_to_float(r, 8); 178 179 180 dst[1] = _mesa_unorm_to_float(g, 8); 181 182 183 dst[2] = _mesa_unorm_to_float(b, 8); 184 185 dst[3] = 1.0f; 186} 187 188static inline void 189unpack_float_a8r8g8b8_unorm(const void *void_src, GLfloat dst[4]) 190{ 191 uint32_t *src = (uint32_t *)void_src; 192 uint8_t a = UNPACK(*src, 0, 8); 193 uint8_t r = UNPACK(*src, 8, 8); 194 uint8_t g = UNPACK(*src, 16, 8); 195 uint8_t b = UNPACK(*src, 24, 8); 196 197 198 199 dst[0] = _mesa_unorm_to_float(r, 8); 200 201 202 dst[1] = _mesa_unorm_to_float(g, 8); 203 204 205 dst[2] = _mesa_unorm_to_float(b, 8); 206 207 208 dst[3] = _mesa_unorm_to_float(a, 8); 209} 210 211static inline void 212unpack_float_x8r8g8b8_unorm(const void *void_src, GLfloat dst[4]) 213{ 214 uint32_t *src = (uint32_t *)void_src; 215 uint8_t r = UNPACK(*src, 8, 8); 216 uint8_t g = UNPACK(*src, 16, 8); 217 uint8_t b = UNPACK(*src, 24, 8); 218 219 220 221 dst[0] = _mesa_unorm_to_float(r, 8); 222 223 224 dst[1] = _mesa_unorm_to_float(g, 8); 225 226 227 dst[2] = _mesa_unorm_to_float(b, 8); 228 229 dst[3] = 1.0f; 230} 231 232static inline void 233unpack_float_l16a16_unorm(const void *void_src, GLfloat dst[4]) 234{ 235 uint32_t *src = (uint32_t *)void_src; 236 uint16_t l = UNPACK(*src, 0, 16); 237 uint16_t a = UNPACK(*src, 16, 16); 238 239 240 241 dst[0] = _mesa_unorm_to_float(l, 16); 242 243 244 dst[1] = _mesa_unorm_to_float(l, 16); 245 246 247 dst[2] = _mesa_unorm_to_float(l, 16); 248 249 250 dst[3] = _mesa_unorm_to_float(a, 16); 251} 252 253static inline void 254unpack_float_a16l16_unorm(const void *void_src, GLfloat dst[4]) 255{ 256 uint32_t *src = (uint32_t *)void_src; 257 uint16_t a = UNPACK(*src, 0, 16); 258 uint16_t l = UNPACK(*src, 16, 16); 259 260 261 262 dst[0] = _mesa_unorm_to_float(l, 16); 263 264 265 dst[1] = _mesa_unorm_to_float(l, 16); 266 267 268 dst[2] = _mesa_unorm_to_float(l, 16); 269 270 271 dst[3] = _mesa_unorm_to_float(a, 16); 272} 273 274static inline void 275unpack_float_b5g6r5_unorm(const void *void_src, GLfloat dst[4]) 276{ 277 uint16_t *src = (uint16_t *)void_src; 278 uint8_t b = UNPACK(*src, 0, 5); 279 uint8_t g = UNPACK(*src, 5, 6); 280 uint8_t r = UNPACK(*src, 11, 5); 281 282 283 284 dst[0] = _mesa_unorm_to_float(r, 5); 285 286 287 dst[1] = _mesa_unorm_to_float(g, 6); 288 289 290 dst[2] = _mesa_unorm_to_float(b, 5); 291 292 dst[3] = 1.0f; 293} 294 295static inline void 296unpack_float_r5g6b5_unorm(const void *void_src, GLfloat dst[4]) 297{ 298 uint16_t *src = (uint16_t *)void_src; 299 uint8_t r = UNPACK(*src, 0, 5); 300 uint8_t g = UNPACK(*src, 5, 6); 301 uint8_t b = UNPACK(*src, 11, 5); 302 303 304 305 dst[0] = _mesa_unorm_to_float(r, 5); 306 307 308 dst[1] = _mesa_unorm_to_float(g, 6); 309 310 311 dst[2] = _mesa_unorm_to_float(b, 5); 312 313 dst[3] = 1.0f; 314} 315 316static inline void 317unpack_float_b4g4r4a4_unorm(const void *void_src, GLfloat dst[4]) 318{ 319 uint16_t *src = (uint16_t *)void_src; 320 uint8_t b = UNPACK(*src, 0, 4); 321 uint8_t g = UNPACK(*src, 4, 4); 322 uint8_t r = UNPACK(*src, 8, 4); 323 uint8_t a = UNPACK(*src, 12, 4); 324 325 326 327 dst[0] = _mesa_unorm_to_float(r, 4); 328 329 330 dst[1] = _mesa_unorm_to_float(g, 4); 331 332 333 dst[2] = _mesa_unorm_to_float(b, 4); 334 335 336 dst[3] = _mesa_unorm_to_float(a, 4); 337} 338 339static inline void 340unpack_float_b4g4r4x4_unorm(const void *void_src, GLfloat dst[4]) 341{ 342 uint16_t *src = (uint16_t *)void_src; 343 uint8_t b = UNPACK(*src, 0, 4); 344 uint8_t g = UNPACK(*src, 4, 4); 345 uint8_t r = UNPACK(*src, 8, 4); 346 347 348 349 dst[0] = _mesa_unorm_to_float(r, 4); 350 351 352 dst[1] = _mesa_unorm_to_float(g, 4); 353 354 355 dst[2] = _mesa_unorm_to_float(b, 4); 356 357 dst[3] = 1.0f; 358} 359 360static inline void 361unpack_float_a4r4g4b4_unorm(const void *void_src, GLfloat dst[4]) 362{ 363 uint16_t *src = (uint16_t *)void_src; 364 uint8_t a = UNPACK(*src, 0, 4); 365 uint8_t r = UNPACK(*src, 4, 4); 366 uint8_t g = UNPACK(*src, 8, 4); 367 uint8_t b = UNPACK(*src, 12, 4); 368 369 370 371 dst[0] = _mesa_unorm_to_float(r, 4); 372 373 374 dst[1] = _mesa_unorm_to_float(g, 4); 375 376 377 dst[2] = _mesa_unorm_to_float(b, 4); 378 379 380 dst[3] = _mesa_unorm_to_float(a, 4); 381} 382 383static inline void 384unpack_float_a1b5g5r5_unorm(const void *void_src, GLfloat dst[4]) 385{ 386 uint16_t *src = (uint16_t *)void_src; 387 uint8_t a = UNPACK(*src, 0, 1); 388 uint8_t b = UNPACK(*src, 1, 5); 389 uint8_t g = UNPACK(*src, 6, 5); 390 uint8_t r = UNPACK(*src, 11, 5); 391 392 393 394 dst[0] = _mesa_unorm_to_float(r, 5); 395 396 397 dst[1] = _mesa_unorm_to_float(g, 5); 398 399 400 dst[2] = _mesa_unorm_to_float(b, 5); 401 402 403 dst[3] = _mesa_unorm_to_float(a, 1); 404} 405 406static inline void 407unpack_float_x1b5g5r5_unorm(const void *void_src, GLfloat dst[4]) 408{ 409 uint16_t *src = (uint16_t *)void_src; 410 uint8_t b = UNPACK(*src, 1, 5); 411 uint8_t g = UNPACK(*src, 6, 5); 412 uint8_t r = UNPACK(*src, 11, 5); 413 414 415 416 dst[0] = _mesa_unorm_to_float(r, 5); 417 418 419 dst[1] = _mesa_unorm_to_float(g, 5); 420 421 422 dst[2] = _mesa_unorm_to_float(b, 5); 423 424 dst[3] = 1.0f; 425} 426 427static inline void 428unpack_float_b5g5r5a1_unorm(const void *void_src, GLfloat dst[4]) 429{ 430 uint16_t *src = (uint16_t *)void_src; 431 uint8_t b = UNPACK(*src, 0, 5); 432 uint8_t g = UNPACK(*src, 5, 5); 433 uint8_t r = UNPACK(*src, 10, 5); 434 uint8_t a = UNPACK(*src, 15, 1); 435 436 437 438 dst[0] = _mesa_unorm_to_float(r, 5); 439 440 441 dst[1] = _mesa_unorm_to_float(g, 5); 442 443 444 dst[2] = _mesa_unorm_to_float(b, 5); 445 446 447 dst[3] = _mesa_unorm_to_float(a, 1); 448} 449 450static inline void 451unpack_float_b5g5r5x1_unorm(const void *void_src, GLfloat dst[4]) 452{ 453 uint16_t *src = (uint16_t *)void_src; 454 uint8_t b = UNPACK(*src, 0, 5); 455 uint8_t g = UNPACK(*src, 5, 5); 456 uint8_t r = UNPACK(*src, 10, 5); 457 458 459 460 dst[0] = _mesa_unorm_to_float(r, 5); 461 462 463 dst[1] = _mesa_unorm_to_float(g, 5); 464 465 466 dst[2] = _mesa_unorm_to_float(b, 5); 467 468 dst[3] = 1.0f; 469} 470 471static inline void 472unpack_float_a1r5g5b5_unorm(const void *void_src, GLfloat dst[4]) 473{ 474 uint16_t *src = (uint16_t *)void_src; 475 uint8_t a = UNPACK(*src, 0, 1); 476 uint8_t r = UNPACK(*src, 1, 5); 477 uint8_t g = UNPACK(*src, 6, 5); 478 uint8_t b = UNPACK(*src, 11, 5); 479 480 481 482 dst[0] = _mesa_unorm_to_float(r, 5); 483 484 485 dst[1] = _mesa_unorm_to_float(g, 5); 486 487 488 dst[2] = _mesa_unorm_to_float(b, 5); 489 490 491 dst[3] = _mesa_unorm_to_float(a, 1); 492} 493 494static inline void 495unpack_float_l8a8_unorm(const void *void_src, GLfloat dst[4]) 496{ 497 uint16_t *src = (uint16_t *)void_src; 498 uint8_t l = UNPACK(*src, 0, 8); 499 uint8_t a = UNPACK(*src, 8, 8); 500 501 502 503 dst[0] = _mesa_unorm_to_float(l, 8); 504 505 506 dst[1] = _mesa_unorm_to_float(l, 8); 507 508 509 dst[2] = _mesa_unorm_to_float(l, 8); 510 511 512 dst[3] = _mesa_unorm_to_float(a, 8); 513} 514 515static inline void 516unpack_float_a8l8_unorm(const void *void_src, GLfloat dst[4]) 517{ 518 uint16_t *src = (uint16_t *)void_src; 519 uint8_t a = UNPACK(*src, 0, 8); 520 uint8_t l = UNPACK(*src, 8, 8); 521 522 523 524 dst[0] = _mesa_unorm_to_float(l, 8); 525 526 527 dst[1] = _mesa_unorm_to_float(l, 8); 528 529 530 dst[2] = _mesa_unorm_to_float(l, 8); 531 532 533 dst[3] = _mesa_unorm_to_float(a, 8); 534} 535 536static inline void 537unpack_float_r8g8_unorm(const void *void_src, GLfloat dst[4]) 538{ 539 uint16_t *src = (uint16_t *)void_src; 540 uint8_t r = UNPACK(*src, 0, 8); 541 uint8_t g = UNPACK(*src, 8, 8); 542 543 544 545 dst[0] = _mesa_unorm_to_float(r, 8); 546 547 548 dst[1] = _mesa_unorm_to_float(g, 8); 549 550 dst[2] = 0.0f; 551 552 dst[3] = 1.0f; 553} 554 555static inline void 556unpack_float_g8r8_unorm(const void *void_src, GLfloat dst[4]) 557{ 558 uint16_t *src = (uint16_t *)void_src; 559 uint8_t g = UNPACK(*src, 0, 8); 560 uint8_t r = UNPACK(*src, 8, 8); 561 562 563 564 dst[0] = _mesa_unorm_to_float(r, 8); 565 566 567 dst[1] = _mesa_unorm_to_float(g, 8); 568 569 dst[2] = 0.0f; 570 571 dst[3] = 1.0f; 572} 573 574static inline void 575unpack_float_l4a4_unorm(const void *void_src, GLfloat dst[4]) 576{ 577 uint8_t *src = (uint8_t *)void_src; 578 uint8_t l = UNPACK(*src, 0, 4); 579 uint8_t a = UNPACK(*src, 4, 4); 580 581 582 583 dst[0] = _mesa_unorm_to_float(l, 4); 584 585 586 dst[1] = _mesa_unorm_to_float(l, 4); 587 588 589 dst[2] = _mesa_unorm_to_float(l, 4); 590 591 592 dst[3] = _mesa_unorm_to_float(a, 4); 593} 594 595static inline void 596unpack_float_b2g3r3_unorm(const void *void_src, GLfloat dst[4]) 597{ 598 uint8_t *src = (uint8_t *)void_src; 599 uint8_t b = UNPACK(*src, 0, 2); 600 uint8_t g = UNPACK(*src, 2, 3); 601 uint8_t r = UNPACK(*src, 5, 3); 602 603 604 605 dst[0] = _mesa_unorm_to_float(r, 3); 606 607 608 dst[1] = _mesa_unorm_to_float(g, 3); 609 610 611 dst[2] = _mesa_unorm_to_float(b, 2); 612 613 dst[3] = 1.0f; 614} 615 616static inline void 617unpack_float_r16g16_unorm(const void *void_src, GLfloat dst[4]) 618{ 619 uint32_t *src = (uint32_t *)void_src; 620 uint16_t r = UNPACK(*src, 0, 16); 621 uint16_t g = UNPACK(*src, 16, 16); 622 623 624 625 dst[0] = _mesa_unorm_to_float(r, 16); 626 627 628 dst[1] = _mesa_unorm_to_float(g, 16); 629 630 dst[2] = 0.0f; 631 632 dst[3] = 1.0f; 633} 634 635static inline void 636unpack_float_g16r16_unorm(const void *void_src, GLfloat dst[4]) 637{ 638 uint32_t *src = (uint32_t *)void_src; 639 uint16_t g = UNPACK(*src, 0, 16); 640 uint16_t r = UNPACK(*src, 16, 16); 641 642 643 644 dst[0] = _mesa_unorm_to_float(r, 16); 645 646 647 dst[1] = _mesa_unorm_to_float(g, 16); 648 649 dst[2] = 0.0f; 650 651 dst[3] = 1.0f; 652} 653 654static inline void 655unpack_float_b10g10r10a2_unorm(const void *void_src, GLfloat dst[4]) 656{ 657 uint32_t *src = (uint32_t *)void_src; 658 uint16_t b = UNPACK(*src, 0, 10); 659 uint16_t g = UNPACK(*src, 10, 10); 660 uint16_t r = UNPACK(*src, 20, 10); 661 uint8_t a = UNPACK(*src, 30, 2); 662 663 664 665 dst[0] = _mesa_unorm_to_float(r, 10); 666 667 668 dst[1] = _mesa_unorm_to_float(g, 10); 669 670 671 dst[2] = _mesa_unorm_to_float(b, 10); 672 673 674 dst[3] = _mesa_unorm_to_float(a, 2); 675} 676 677static inline void 678unpack_float_b10g10r10x2_unorm(const void *void_src, GLfloat dst[4]) 679{ 680 uint32_t *src = (uint32_t *)void_src; 681 uint16_t b = UNPACK(*src, 0, 10); 682 uint16_t g = UNPACK(*src, 10, 10); 683 uint16_t r = UNPACK(*src, 20, 10); 684 685 686 687 dst[0] = _mesa_unorm_to_float(r, 10); 688 689 690 dst[1] = _mesa_unorm_to_float(g, 10); 691 692 693 dst[2] = _mesa_unorm_to_float(b, 10); 694 695 dst[3] = 1.0f; 696} 697 698static inline void 699unpack_float_r10g10b10a2_unorm(const void *void_src, GLfloat dst[4]) 700{ 701 uint32_t *src = (uint32_t *)void_src; 702 uint16_t r = UNPACK(*src, 0, 10); 703 uint16_t g = UNPACK(*src, 10, 10); 704 uint16_t b = UNPACK(*src, 20, 10); 705 uint8_t a = UNPACK(*src, 30, 2); 706 707 708 709 dst[0] = _mesa_unorm_to_float(r, 10); 710 711 712 dst[1] = _mesa_unorm_to_float(g, 10); 713 714 715 dst[2] = _mesa_unorm_to_float(b, 10); 716 717 718 dst[3] = _mesa_unorm_to_float(a, 2); 719} 720 721static inline void 722unpack_float_r10g10b10x2_unorm(const void *void_src, GLfloat dst[4]) 723{ 724 uint32_t *src = (uint32_t *)void_src; 725 uint16_t r = UNPACK(*src, 0, 10); 726 uint16_t g = UNPACK(*src, 10, 10); 727 uint16_t b = UNPACK(*src, 20, 10); 728 729 730 731 dst[0] = _mesa_unorm_to_float(r, 10); 732 733 734 dst[1] = _mesa_unorm_to_float(g, 10); 735 736 737 dst[2] = _mesa_unorm_to_float(b, 10); 738 739 dst[3] = 1.0f; 740} 741 742static inline void 743unpack_float_r3g3b2_unorm(const void *void_src, GLfloat dst[4]) 744{ 745 uint8_t *src = (uint8_t *)void_src; 746 uint8_t r = UNPACK(*src, 0, 3); 747 uint8_t g = UNPACK(*src, 3, 3); 748 uint8_t b = UNPACK(*src, 6, 2); 749 750 751 752 dst[0] = _mesa_unorm_to_float(r, 3); 753 754 755 dst[1] = _mesa_unorm_to_float(g, 3); 756 757 758 dst[2] = _mesa_unorm_to_float(b, 2); 759 760 dst[3] = 1.0f; 761} 762 763static inline void 764unpack_float_a4b4g4r4_unorm(const void *void_src, GLfloat dst[4]) 765{ 766 uint16_t *src = (uint16_t *)void_src; 767 uint8_t a = UNPACK(*src, 0, 4); 768 uint8_t b = UNPACK(*src, 4, 4); 769 uint8_t g = UNPACK(*src, 8, 4); 770 uint8_t r = UNPACK(*src, 12, 4); 771 772 773 774 dst[0] = _mesa_unorm_to_float(r, 4); 775 776 777 dst[1] = _mesa_unorm_to_float(g, 4); 778 779 780 dst[2] = _mesa_unorm_to_float(b, 4); 781 782 783 dst[3] = _mesa_unorm_to_float(a, 4); 784} 785 786static inline void 787unpack_float_r4g4b4a4_unorm(const void *void_src, GLfloat dst[4]) 788{ 789 uint16_t *src = (uint16_t *)void_src; 790 uint8_t r = UNPACK(*src, 0, 4); 791 uint8_t g = UNPACK(*src, 4, 4); 792 uint8_t b = UNPACK(*src, 8, 4); 793 uint8_t a = UNPACK(*src, 12, 4); 794 795 796 797 dst[0] = _mesa_unorm_to_float(r, 4); 798 799 800 dst[1] = _mesa_unorm_to_float(g, 4); 801 802 803 dst[2] = _mesa_unorm_to_float(b, 4); 804 805 806 dst[3] = _mesa_unorm_to_float(a, 4); 807} 808 809static inline void 810unpack_float_r5g5b5a1_unorm(const void *void_src, GLfloat dst[4]) 811{ 812 uint16_t *src = (uint16_t *)void_src; 813 uint8_t r = UNPACK(*src, 0, 5); 814 uint8_t g = UNPACK(*src, 5, 5); 815 uint8_t b = UNPACK(*src, 10, 5); 816 uint8_t a = UNPACK(*src, 15, 1); 817 818 819 820 dst[0] = _mesa_unorm_to_float(r, 5); 821 822 823 dst[1] = _mesa_unorm_to_float(g, 5); 824 825 826 dst[2] = _mesa_unorm_to_float(b, 5); 827 828 829 dst[3] = _mesa_unorm_to_float(a, 1); 830} 831 832static inline void 833unpack_float_a2b10g10r10_unorm(const void *void_src, GLfloat dst[4]) 834{ 835 uint32_t *src = (uint32_t *)void_src; 836 uint8_t a = UNPACK(*src, 0, 2); 837 uint16_t b = UNPACK(*src, 2, 10); 838 uint16_t g = UNPACK(*src, 12, 10); 839 uint16_t r = UNPACK(*src, 22, 10); 840 841 842 843 dst[0] = _mesa_unorm_to_float(r, 10); 844 845 846 dst[1] = _mesa_unorm_to_float(g, 10); 847 848 849 dst[2] = _mesa_unorm_to_float(b, 10); 850 851 852 dst[3] = _mesa_unorm_to_float(a, 2); 853} 854 855static inline void 856unpack_float_a2r10g10b10_unorm(const void *void_src, GLfloat dst[4]) 857{ 858 uint32_t *src = (uint32_t *)void_src; 859 uint8_t a = UNPACK(*src, 0, 2); 860 uint16_t r = UNPACK(*src, 2, 10); 861 uint16_t g = UNPACK(*src, 12, 10); 862 uint16_t b = UNPACK(*src, 22, 10); 863 864 865 866 dst[0] = _mesa_unorm_to_float(r, 10); 867 868 869 dst[1] = _mesa_unorm_to_float(g, 10); 870 871 872 dst[2] = _mesa_unorm_to_float(b, 10); 873 874 875 dst[3] = _mesa_unorm_to_float(a, 2); 876} 877 878static inline void 879unpack_float_a_unorm8(const void *void_src, GLfloat dst[4]) 880{ 881 uint8_t *src = (uint8_t *)void_src; 882 uint8_t a = src[0]; 883 884 885 dst[0] = 0.0f; 886 887 dst[1] = 0.0f; 888 889 dst[2] = 0.0f; 890 891 892 dst[3] = _mesa_unorm_to_float(a, 8); 893} 894 895static inline void 896unpack_float_a_unorm16(const void *void_src, GLfloat dst[4]) 897{ 898 uint16_t *src = (uint16_t *)void_src; 899 uint16_t a = src[0]; 900 901 902 dst[0] = 0.0f; 903 904 dst[1] = 0.0f; 905 906 dst[2] = 0.0f; 907 908 909 dst[3] = _mesa_unorm_to_float(a, 16); 910} 911 912static inline void 913unpack_float_l_unorm8(const void *void_src, GLfloat dst[4]) 914{ 915 uint8_t *src = (uint8_t *)void_src; 916 uint8_t l = src[0]; 917 918 919 920 dst[0] = _mesa_unorm_to_float(l, 8); 921 922 923 dst[1] = _mesa_unorm_to_float(l, 8); 924 925 926 dst[2] = _mesa_unorm_to_float(l, 8); 927 928 dst[3] = 1.0f; 929} 930 931static inline void 932unpack_float_l_unorm16(const void *void_src, GLfloat dst[4]) 933{ 934 uint16_t *src = (uint16_t *)void_src; 935 uint16_t l = src[0]; 936 937 938 939 dst[0] = _mesa_unorm_to_float(l, 16); 940 941 942 dst[1] = _mesa_unorm_to_float(l, 16); 943 944 945 dst[2] = _mesa_unorm_to_float(l, 16); 946 947 dst[3] = 1.0f; 948} 949 950static inline void 951unpack_float_i_unorm8(const void *void_src, GLfloat dst[4]) 952{ 953 uint8_t *src = (uint8_t *)void_src; 954 uint8_t i = src[0]; 955 956 957 958 dst[0] = _mesa_unorm_to_float(i, 8); 959 960 961 dst[1] = _mesa_unorm_to_float(i, 8); 962 963 964 dst[2] = _mesa_unorm_to_float(i, 8); 965 966 967 dst[3] = _mesa_unorm_to_float(i, 8); 968} 969 970static inline void 971unpack_float_i_unorm16(const void *void_src, GLfloat dst[4]) 972{ 973 uint16_t *src = (uint16_t *)void_src; 974 uint16_t i = src[0]; 975 976 977 978 dst[0] = _mesa_unorm_to_float(i, 16); 979 980 981 dst[1] = _mesa_unorm_to_float(i, 16); 982 983 984 dst[2] = _mesa_unorm_to_float(i, 16); 985 986 987 dst[3] = _mesa_unorm_to_float(i, 16); 988} 989 990static inline void 991unpack_float_r_unorm8(const void *void_src, GLfloat dst[4]) 992{ 993 uint8_t *src = (uint8_t *)void_src; 994 uint8_t r = src[0]; 995 996 997 998 dst[0] = _mesa_unorm_to_float(r, 8); 999 1000 dst[1] = 0.0f; 1001 1002 dst[2] = 0.0f; 1003 1004 dst[3] = 1.0f; 1005} 1006 1007static inline void 1008unpack_float_r_unorm16(const void *void_src, GLfloat dst[4]) 1009{ 1010 uint16_t *src = (uint16_t *)void_src; 1011 uint16_t r = src[0]; 1012 1013 1014 1015 dst[0] = _mesa_unorm_to_float(r, 16); 1016 1017 dst[1] = 0.0f; 1018 1019 dst[2] = 0.0f; 1020 1021 dst[3] = 1.0f; 1022} 1023 1024static inline void 1025unpack_float_bgr_unorm8(const void *void_src, GLfloat dst[4]) 1026{ 1027 uint8_t *src = (uint8_t *)void_src; 1028 uint8_t b = src[0]; 1029 uint8_t g = src[1]; 1030 uint8_t r = src[2]; 1031 1032 1033 1034 dst[0] = _mesa_unorm_to_float(r, 8); 1035 1036 1037 dst[1] = _mesa_unorm_to_float(g, 8); 1038 1039 1040 dst[2] = _mesa_unorm_to_float(b, 8); 1041 1042 dst[3] = 1.0f; 1043} 1044 1045static inline void 1046unpack_float_rgb_unorm8(const void *void_src, GLfloat dst[4]) 1047{ 1048 uint8_t *src = (uint8_t *)void_src; 1049 uint8_t r = src[0]; 1050 uint8_t g = src[1]; 1051 uint8_t b = src[2]; 1052 1053 1054 1055 dst[0] = _mesa_unorm_to_float(r, 8); 1056 1057 1058 dst[1] = _mesa_unorm_to_float(g, 8); 1059 1060 1061 dst[2] = _mesa_unorm_to_float(b, 8); 1062 1063 dst[3] = 1.0f; 1064} 1065 1066static inline void 1067unpack_float_rgba_unorm16(const void *void_src, GLfloat dst[4]) 1068{ 1069 uint16_t *src = (uint16_t *)void_src; 1070 uint16_t r = src[0]; 1071 uint16_t g = src[1]; 1072 uint16_t b = src[2]; 1073 uint16_t a = src[3]; 1074 1075 1076 1077 dst[0] = _mesa_unorm_to_float(r, 16); 1078 1079 1080 dst[1] = _mesa_unorm_to_float(g, 16); 1081 1082 1083 dst[2] = _mesa_unorm_to_float(b, 16); 1084 1085 1086 dst[3] = _mesa_unorm_to_float(a, 16); 1087} 1088 1089static inline void 1090unpack_float_rgbx_unorm16(const void *void_src, GLfloat dst[4]) 1091{ 1092 uint16_t *src = (uint16_t *)void_src; 1093 uint16_t r = src[0]; 1094 uint16_t g = src[1]; 1095 uint16_t b = src[2]; 1096 1097 1098 1099 dst[0] = _mesa_unorm_to_float(r, 16); 1100 1101 1102 dst[1] = _mesa_unorm_to_float(g, 16); 1103 1104 1105 dst[2] = _mesa_unorm_to_float(b, 16); 1106 1107 dst[3] = 1.0f; 1108} 1109 1110static inline void 1111unpack_float_a8b8g8r8_snorm(const void *void_src, GLfloat dst[4]) 1112{ 1113 uint32_t *src = (uint32_t *)void_src; 1114 int8_t a = UNPACK(*src, 0, 8); 1115 int8_t b = UNPACK(*src, 8, 8); 1116 int8_t g = UNPACK(*src, 16, 8); 1117 int8_t r = UNPACK(*src, 24, 8); 1118 1119 1120 1121 dst[0] = _mesa_snorm_to_float(r, 8); 1122 1123 1124 dst[1] = _mesa_snorm_to_float(g, 8); 1125 1126 1127 dst[2] = _mesa_snorm_to_float(b, 8); 1128 1129 1130 dst[3] = _mesa_snorm_to_float(a, 8); 1131} 1132 1133static inline void 1134unpack_float_x8b8g8r8_snorm(const void *void_src, GLfloat dst[4]) 1135{ 1136 uint32_t *src = (uint32_t *)void_src; 1137 int8_t b = UNPACK(*src, 8, 8); 1138 int8_t g = UNPACK(*src, 16, 8); 1139 int8_t r = UNPACK(*src, 24, 8); 1140 1141 1142 1143 dst[0] = _mesa_snorm_to_float(r, 8); 1144 1145 1146 dst[1] = _mesa_snorm_to_float(g, 8); 1147 1148 1149 dst[2] = _mesa_snorm_to_float(b, 8); 1150 1151 dst[3] = 1.0f; 1152} 1153 1154static inline void 1155unpack_float_r8g8b8a8_snorm(const void *void_src, GLfloat dst[4]) 1156{ 1157 uint32_t *src = (uint32_t *)void_src; 1158 int8_t r = UNPACK(*src, 0, 8); 1159 int8_t g = UNPACK(*src, 8, 8); 1160 int8_t b = UNPACK(*src, 16, 8); 1161 int8_t a = UNPACK(*src, 24, 8); 1162 1163 1164 1165 dst[0] = _mesa_snorm_to_float(r, 8); 1166 1167 1168 dst[1] = _mesa_snorm_to_float(g, 8); 1169 1170 1171 dst[2] = _mesa_snorm_to_float(b, 8); 1172 1173 1174 dst[3] = _mesa_snorm_to_float(a, 8); 1175} 1176 1177static inline void 1178unpack_float_r8g8b8x8_snorm(const void *void_src, GLfloat dst[4]) 1179{ 1180 uint32_t *src = (uint32_t *)void_src; 1181 int8_t r = UNPACK(*src, 0, 8); 1182 int8_t g = UNPACK(*src, 8, 8); 1183 int8_t b = UNPACK(*src, 16, 8); 1184 1185 1186 1187 dst[0] = _mesa_snorm_to_float(r, 8); 1188 1189 1190 dst[1] = _mesa_snorm_to_float(g, 8); 1191 1192 1193 dst[2] = _mesa_snorm_to_float(b, 8); 1194 1195 dst[3] = 1.0f; 1196} 1197 1198static inline void 1199unpack_float_r16g16_snorm(const void *void_src, GLfloat dst[4]) 1200{ 1201 uint32_t *src = (uint32_t *)void_src; 1202 int16_t r = UNPACK(*src, 0, 16); 1203 int16_t g = UNPACK(*src, 16, 16); 1204 1205 1206 1207 dst[0] = _mesa_snorm_to_float(r, 16); 1208 1209 1210 dst[1] = _mesa_snorm_to_float(g, 16); 1211 1212 dst[2] = 0.0f; 1213 1214 dst[3] = 1.0f; 1215} 1216 1217static inline void 1218unpack_float_g16r16_snorm(const void *void_src, GLfloat dst[4]) 1219{ 1220 uint32_t *src = (uint32_t *)void_src; 1221 int16_t g = UNPACK(*src, 0, 16); 1222 int16_t r = UNPACK(*src, 16, 16); 1223 1224 1225 1226 dst[0] = _mesa_snorm_to_float(r, 16); 1227 1228 1229 dst[1] = _mesa_snorm_to_float(g, 16); 1230 1231 dst[2] = 0.0f; 1232 1233 dst[3] = 1.0f; 1234} 1235 1236static inline void 1237unpack_float_r8g8_snorm(const void *void_src, GLfloat dst[4]) 1238{ 1239 uint16_t *src = (uint16_t *)void_src; 1240 int8_t r = UNPACK(*src, 0, 8); 1241 int8_t g = UNPACK(*src, 8, 8); 1242 1243 1244 1245 dst[0] = _mesa_snorm_to_float(r, 8); 1246 1247 1248 dst[1] = _mesa_snorm_to_float(g, 8); 1249 1250 dst[2] = 0.0f; 1251 1252 dst[3] = 1.0f; 1253} 1254 1255static inline void 1256unpack_float_g8r8_snorm(const void *void_src, GLfloat dst[4]) 1257{ 1258 uint16_t *src = (uint16_t *)void_src; 1259 int8_t g = UNPACK(*src, 0, 8); 1260 int8_t r = UNPACK(*src, 8, 8); 1261 1262 1263 1264 dst[0] = _mesa_snorm_to_float(r, 8); 1265 1266 1267 dst[1] = _mesa_snorm_to_float(g, 8); 1268 1269 dst[2] = 0.0f; 1270 1271 dst[3] = 1.0f; 1272} 1273 1274static inline void 1275unpack_float_l8a8_snorm(const void *void_src, GLfloat dst[4]) 1276{ 1277 uint16_t *src = (uint16_t *)void_src; 1278 int8_t l = UNPACK(*src, 0, 8); 1279 int8_t a = UNPACK(*src, 8, 8); 1280 1281 1282 1283 dst[0] = _mesa_snorm_to_float(l, 8); 1284 1285 1286 dst[1] = _mesa_snorm_to_float(l, 8); 1287 1288 1289 dst[2] = _mesa_snorm_to_float(l, 8); 1290 1291 1292 dst[3] = _mesa_snorm_to_float(a, 8); 1293} 1294 1295static inline void 1296unpack_float_a8l8_snorm(const void *void_src, GLfloat dst[4]) 1297{ 1298 uint16_t *src = (uint16_t *)void_src; 1299 int8_t a = UNPACK(*src, 0, 8); 1300 int8_t l = UNPACK(*src, 8, 8); 1301 1302 1303 1304 dst[0] = _mesa_snorm_to_float(l, 8); 1305 1306 1307 dst[1] = _mesa_snorm_to_float(l, 8); 1308 1309 1310 dst[2] = _mesa_snorm_to_float(l, 8); 1311 1312 1313 dst[3] = _mesa_snorm_to_float(a, 8); 1314} 1315 1316static inline void 1317unpack_float_a_snorm8(const void *void_src, GLfloat dst[4]) 1318{ 1319 int8_t *src = (int8_t *)void_src; 1320 int8_t a = src[0]; 1321 1322 1323 dst[0] = 0.0f; 1324 1325 dst[1] = 0.0f; 1326 1327 dst[2] = 0.0f; 1328 1329 1330 dst[3] = _mesa_snorm_to_float(a, 8); 1331} 1332 1333static inline void 1334unpack_float_a_snorm16(const void *void_src, GLfloat dst[4]) 1335{ 1336 int16_t *src = (int16_t *)void_src; 1337 int16_t a = src[0]; 1338 1339 1340 dst[0] = 0.0f; 1341 1342 dst[1] = 0.0f; 1343 1344 dst[2] = 0.0f; 1345 1346 1347 dst[3] = _mesa_snorm_to_float(a, 16); 1348} 1349 1350static inline void 1351unpack_float_l_snorm8(const void *void_src, GLfloat dst[4]) 1352{ 1353 int8_t *src = (int8_t *)void_src; 1354 int8_t l = src[0]; 1355 1356 1357 1358 dst[0] = _mesa_snorm_to_float(l, 8); 1359 1360 1361 dst[1] = _mesa_snorm_to_float(l, 8); 1362 1363 1364 dst[2] = _mesa_snorm_to_float(l, 8); 1365 1366 dst[3] = 1.0f; 1367} 1368 1369static inline void 1370unpack_float_l_snorm16(const void *void_src, GLfloat dst[4]) 1371{ 1372 int16_t *src = (int16_t *)void_src; 1373 int16_t l = src[0]; 1374 1375 1376 1377 dst[0] = _mesa_snorm_to_float(l, 16); 1378 1379 1380 dst[1] = _mesa_snorm_to_float(l, 16); 1381 1382 1383 dst[2] = _mesa_snorm_to_float(l, 16); 1384 1385 dst[3] = 1.0f; 1386} 1387 1388static inline void 1389unpack_float_i_snorm8(const void *void_src, GLfloat dst[4]) 1390{ 1391 int8_t *src = (int8_t *)void_src; 1392 int8_t i = src[0]; 1393 1394 1395 1396 dst[0] = _mesa_snorm_to_float(i, 8); 1397 1398 1399 dst[1] = _mesa_snorm_to_float(i, 8); 1400 1401 1402 dst[2] = _mesa_snorm_to_float(i, 8); 1403 1404 1405 dst[3] = _mesa_snorm_to_float(i, 8); 1406} 1407 1408static inline void 1409unpack_float_i_snorm16(const void *void_src, GLfloat dst[4]) 1410{ 1411 int16_t *src = (int16_t *)void_src; 1412 int16_t i = src[0]; 1413 1414 1415 1416 dst[0] = _mesa_snorm_to_float(i, 16); 1417 1418 1419 dst[1] = _mesa_snorm_to_float(i, 16); 1420 1421 1422 dst[2] = _mesa_snorm_to_float(i, 16); 1423 1424 1425 dst[3] = _mesa_snorm_to_float(i, 16); 1426} 1427 1428static inline void 1429unpack_float_r_snorm8(const void *void_src, GLfloat dst[4]) 1430{ 1431 int8_t *src = (int8_t *)void_src; 1432 int8_t r = src[0]; 1433 1434 1435 1436 dst[0] = _mesa_snorm_to_float(r, 8); 1437 1438 dst[1] = 0.0f; 1439 1440 dst[2] = 0.0f; 1441 1442 dst[3] = 1.0f; 1443} 1444 1445static inline void 1446unpack_float_r_snorm16(const void *void_src, GLfloat dst[4]) 1447{ 1448 int16_t *src = (int16_t *)void_src; 1449 int16_t r = src[0]; 1450 1451 1452 1453 dst[0] = _mesa_snorm_to_float(r, 16); 1454 1455 dst[1] = 0.0f; 1456 1457 dst[2] = 0.0f; 1458 1459 dst[3] = 1.0f; 1460} 1461 1462static inline void 1463unpack_float_la_snorm16(const void *void_src, GLfloat dst[4]) 1464{ 1465 int16_t *src = (int16_t *)void_src; 1466 int16_t l = src[0]; 1467 int16_t a = src[1]; 1468 1469 1470 1471 dst[0] = _mesa_snorm_to_float(l, 16); 1472 1473 1474 dst[1] = _mesa_snorm_to_float(l, 16); 1475 1476 1477 dst[2] = _mesa_snorm_to_float(l, 16); 1478 1479 1480 dst[3] = _mesa_snorm_to_float(a, 16); 1481} 1482 1483static inline void 1484unpack_float_rgb_snorm16(const void *void_src, GLfloat dst[4]) 1485{ 1486 int16_t *src = (int16_t *)void_src; 1487 int16_t r = src[0]; 1488 int16_t g = src[1]; 1489 int16_t b = src[2]; 1490 1491 1492 1493 dst[0] = _mesa_snorm_to_float(r, 16); 1494 1495 1496 dst[1] = _mesa_snorm_to_float(g, 16); 1497 1498 1499 dst[2] = _mesa_snorm_to_float(b, 16); 1500 1501 dst[3] = 1.0f; 1502} 1503 1504static inline void 1505unpack_float_rgba_snorm16(const void *void_src, GLfloat dst[4]) 1506{ 1507 int16_t *src = (int16_t *)void_src; 1508 int16_t r = src[0]; 1509 int16_t g = src[1]; 1510 int16_t b = src[2]; 1511 int16_t a = src[3]; 1512 1513 1514 1515 dst[0] = _mesa_snorm_to_float(r, 16); 1516 1517 1518 dst[1] = _mesa_snorm_to_float(g, 16); 1519 1520 1521 dst[2] = _mesa_snorm_to_float(b, 16); 1522 1523 1524 dst[3] = _mesa_snorm_to_float(a, 16); 1525} 1526 1527static inline void 1528unpack_float_rgbx_snorm16(const void *void_src, GLfloat dst[4]) 1529{ 1530 int16_t *src = (int16_t *)void_src; 1531 int16_t r = src[0]; 1532 int16_t g = src[1]; 1533 int16_t b = src[2]; 1534 1535 1536 1537 dst[0] = _mesa_snorm_to_float(r, 16); 1538 1539 1540 dst[1] = _mesa_snorm_to_float(g, 16); 1541 1542 1543 dst[2] = _mesa_snorm_to_float(b, 16); 1544 1545 dst[3] = 1.0f; 1546} 1547 1548static inline void 1549unpack_float_a8b8g8r8_srgb(const void *void_src, GLfloat dst[4]) 1550{ 1551 uint32_t *src = (uint32_t *)void_src; 1552 uint8_t a = UNPACK(*src, 0, 8); 1553 uint8_t b = UNPACK(*src, 8, 8); 1554 uint8_t g = UNPACK(*src, 16, 8); 1555 uint8_t r = UNPACK(*src, 24, 8); 1556 1557 1558 1559 1560 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1561 1562 1563 1564 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1565 1566 1567 1568 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1569 1570 1571 dst[3] = _mesa_unorm_to_float(a, 8); 1572} 1573 1574static inline void 1575unpack_float_b8g8r8a8_srgb(const void *void_src, GLfloat dst[4]) 1576{ 1577 uint32_t *src = (uint32_t *)void_src; 1578 uint8_t b = UNPACK(*src, 0, 8); 1579 uint8_t g = UNPACK(*src, 8, 8); 1580 uint8_t r = UNPACK(*src, 16, 8); 1581 uint8_t a = UNPACK(*src, 24, 8); 1582 1583 1584 1585 1586 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1587 1588 1589 1590 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1591 1592 1593 1594 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1595 1596 1597 dst[3] = _mesa_unorm_to_float(a, 8); 1598} 1599 1600static inline void 1601unpack_float_a8r8g8b8_srgb(const void *void_src, GLfloat dst[4]) 1602{ 1603 uint32_t *src = (uint32_t *)void_src; 1604 uint8_t a = UNPACK(*src, 0, 8); 1605 uint8_t r = UNPACK(*src, 8, 8); 1606 uint8_t g = UNPACK(*src, 16, 8); 1607 uint8_t b = UNPACK(*src, 24, 8); 1608 1609 1610 1611 1612 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1613 1614 1615 1616 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1617 1618 1619 1620 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1621 1622 1623 dst[3] = _mesa_unorm_to_float(a, 8); 1624} 1625 1626static inline void 1627unpack_float_b8g8r8x8_srgb(const void *void_src, GLfloat dst[4]) 1628{ 1629 uint32_t *src = (uint32_t *)void_src; 1630 uint8_t b = UNPACK(*src, 0, 8); 1631 uint8_t g = UNPACK(*src, 8, 8); 1632 uint8_t r = UNPACK(*src, 16, 8); 1633 1634 1635 1636 1637 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1638 1639 1640 1641 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1642 1643 1644 1645 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1646 1647 dst[3] = 1.0f; 1648} 1649 1650static inline void 1651unpack_float_x8r8g8b8_srgb(const void *void_src, GLfloat dst[4]) 1652{ 1653 uint32_t *src = (uint32_t *)void_src; 1654 uint8_t r = UNPACK(*src, 8, 8); 1655 uint8_t g = UNPACK(*src, 16, 8); 1656 uint8_t b = UNPACK(*src, 24, 8); 1657 1658 1659 1660 1661 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1662 1663 1664 1665 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1666 1667 1668 1669 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1670 1671 dst[3] = 1.0f; 1672} 1673 1674static inline void 1675unpack_float_r8g8b8a8_srgb(const void *void_src, GLfloat dst[4]) 1676{ 1677 uint32_t *src = (uint32_t *)void_src; 1678 uint8_t r = UNPACK(*src, 0, 8); 1679 uint8_t g = UNPACK(*src, 8, 8); 1680 uint8_t b = UNPACK(*src, 16, 8); 1681 uint8_t a = UNPACK(*src, 24, 8); 1682 1683 1684 1685 1686 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1687 1688 1689 1690 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1691 1692 1693 1694 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1695 1696 1697 dst[3] = _mesa_unorm_to_float(a, 8); 1698} 1699 1700static inline void 1701unpack_float_r8g8b8x8_srgb(const void *void_src, GLfloat dst[4]) 1702{ 1703 uint32_t *src = (uint32_t *)void_src; 1704 uint8_t r = UNPACK(*src, 0, 8); 1705 uint8_t g = UNPACK(*src, 8, 8); 1706 uint8_t b = UNPACK(*src, 16, 8); 1707 1708 1709 1710 1711 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1712 1713 1714 1715 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1716 1717 1718 1719 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1720 1721 dst[3] = 1.0f; 1722} 1723 1724static inline void 1725unpack_float_x8b8g8r8_srgb(const void *void_src, GLfloat dst[4]) 1726{ 1727 uint32_t *src = (uint32_t *)void_src; 1728 uint8_t b = UNPACK(*src, 8, 8); 1729 uint8_t g = UNPACK(*src, 16, 8); 1730 uint8_t r = UNPACK(*src, 24, 8); 1731 1732 1733 1734 1735 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1736 1737 1738 1739 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1740 1741 1742 1743 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1744 1745 dst[3] = 1.0f; 1746} 1747 1748static inline void 1749unpack_float_l8a8_srgb(const void *void_src, GLfloat dst[4]) 1750{ 1751 uint16_t *src = (uint16_t *)void_src; 1752 uint8_t l = UNPACK(*src, 0, 8); 1753 uint8_t a = UNPACK(*src, 8, 8); 1754 1755 1756 1757 dst[0] = _mesa_unorm_to_float(l, 8); 1758 1759 1760 dst[1] = _mesa_unorm_to_float(l, 8); 1761 1762 1763 dst[2] = _mesa_unorm_to_float(l, 8); 1764 1765 1766 dst[3] = _mesa_unorm_to_float(a, 8); 1767} 1768 1769static inline void 1770unpack_float_a8l8_srgb(const void *void_src, GLfloat dst[4]) 1771{ 1772 uint16_t *src = (uint16_t *)void_src; 1773 uint8_t a = UNPACK(*src, 0, 8); 1774 uint8_t l = UNPACK(*src, 8, 8); 1775 1776 1777 1778 dst[0] = _mesa_unorm_to_float(l, 8); 1779 1780 1781 dst[1] = _mesa_unorm_to_float(l, 8); 1782 1783 1784 dst[2] = _mesa_unorm_to_float(l, 8); 1785 1786 1787 dst[3] = _mesa_unorm_to_float(a, 8); 1788} 1789 1790static inline void 1791unpack_float_r_srgb8(const void *void_src, GLfloat dst[4]) 1792{ 1793 uint8_t *src = (uint8_t *)void_src; 1794 uint8_t r = src[0]; 1795 1796 1797 1798 1799 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1800 1801 dst[1] = 0.0f; 1802 1803 dst[2] = 0.0f; 1804 1805 dst[3] = 1.0f; 1806} 1807 1808static inline void 1809unpack_float_l_srgb8(const void *void_src, GLfloat dst[4]) 1810{ 1811 uint8_t *src = (uint8_t *)void_src; 1812 uint8_t l = src[0]; 1813 1814 1815 1816 dst[0] = _mesa_unorm_to_float(l, 8); 1817 1818 1819 dst[1] = _mesa_unorm_to_float(l, 8); 1820 1821 1822 dst[2] = _mesa_unorm_to_float(l, 8); 1823 1824 dst[3] = 1.0f; 1825} 1826 1827static inline void 1828unpack_float_bgr_srgb8(const void *void_src, GLfloat dst[4]) 1829{ 1830 uint8_t *src = (uint8_t *)void_src; 1831 uint8_t b = src[0]; 1832 uint8_t g = src[1]; 1833 uint8_t r = src[2]; 1834 1835 1836 1837 1838 dst[0] = util_format_srgb_8unorm_to_linear_float(r); 1839 1840 1841 1842 dst[1] = util_format_srgb_8unorm_to_linear_float(g); 1843 1844 1845 1846 dst[2] = util_format_srgb_8unorm_to_linear_float(b); 1847 1848 dst[3] = 1.0f; 1849} 1850 1851static inline void 1852unpack_float_a_float16(const void *void_src, GLfloat dst[4]) 1853{ 1854 uint16_t *src = (uint16_t *)void_src; 1855 uint16_t a = src[0]; 1856 1857 1858 dst[0] = 0.0f; 1859 1860 dst[1] = 0.0f; 1861 1862 dst[2] = 0.0f; 1863 1864 1865 dst[3] = _mesa_half_to_float(a); 1866} 1867 1868static inline void 1869unpack_float_a_float32(const void *void_src, GLfloat dst[4]) 1870{ 1871 float *src = (float *)void_src; 1872 float a = src[0]; 1873 1874 1875 dst[0] = 0.0f; 1876 1877 dst[1] = 0.0f; 1878 1879 dst[2] = 0.0f; 1880 1881 1882 dst[3] = a; 1883} 1884 1885static inline void 1886unpack_float_l_float16(const void *void_src, GLfloat dst[4]) 1887{ 1888 uint16_t *src = (uint16_t *)void_src; 1889 uint16_t l = src[0]; 1890 1891 1892 1893 dst[0] = _mesa_half_to_float(l); 1894 1895 1896 dst[1] = _mesa_half_to_float(l); 1897 1898 1899 dst[2] = _mesa_half_to_float(l); 1900 1901 dst[3] = 1.0f; 1902} 1903 1904static inline void 1905unpack_float_l_float32(const void *void_src, GLfloat dst[4]) 1906{ 1907 float *src = (float *)void_src; 1908 float l = src[0]; 1909 1910 1911 1912 dst[0] = l; 1913 1914 1915 dst[1] = l; 1916 1917 1918 dst[2] = l; 1919 1920 dst[3] = 1.0f; 1921} 1922 1923static inline void 1924unpack_float_la_float16(const void *void_src, GLfloat dst[4]) 1925{ 1926 uint16_t *src = (uint16_t *)void_src; 1927 uint16_t l = src[0]; 1928 uint16_t a = src[1]; 1929 1930 1931 1932 dst[0] = _mesa_half_to_float(l); 1933 1934 1935 dst[1] = _mesa_half_to_float(l); 1936 1937 1938 dst[2] = _mesa_half_to_float(l); 1939 1940 1941 dst[3] = _mesa_half_to_float(a); 1942} 1943 1944static inline void 1945unpack_float_la_float32(const void *void_src, GLfloat dst[4]) 1946{ 1947 float *src = (float *)void_src; 1948 float l = src[0]; 1949 float a = src[1]; 1950 1951 1952 1953 dst[0] = l; 1954 1955 1956 dst[1] = l; 1957 1958 1959 dst[2] = l; 1960 1961 1962 dst[3] = a; 1963} 1964 1965static inline void 1966unpack_float_i_float16(const void *void_src, GLfloat dst[4]) 1967{ 1968 uint16_t *src = (uint16_t *)void_src; 1969 uint16_t i = src[0]; 1970 1971 1972 1973 dst[0] = _mesa_half_to_float(i); 1974 1975 1976 dst[1] = _mesa_half_to_float(i); 1977 1978 1979 dst[2] = _mesa_half_to_float(i); 1980 1981 1982 dst[3] = _mesa_half_to_float(i); 1983} 1984 1985static inline void 1986unpack_float_i_float32(const void *void_src, GLfloat dst[4]) 1987{ 1988 float *src = (float *)void_src; 1989 float i = src[0]; 1990 1991 1992 1993 dst[0] = i; 1994 1995 1996 dst[1] = i; 1997 1998 1999 dst[2] = i; 2000 2001 2002 dst[3] = i; 2003} 2004 2005static inline void 2006unpack_float_r_float16(const void *void_src, GLfloat dst[4]) 2007{ 2008 uint16_t *src = (uint16_t *)void_src; 2009 uint16_t r = src[0]; 2010 2011 2012 2013 dst[0] = _mesa_half_to_float(r); 2014 2015 dst[1] = 0.0f; 2016 2017 dst[2] = 0.0f; 2018 2019 dst[3] = 1.0f; 2020} 2021 2022static inline void 2023unpack_float_r_float32(const void *void_src, GLfloat dst[4]) 2024{ 2025 float *src = (float *)void_src; 2026 float r = src[0]; 2027 2028 2029 2030 dst[0] = r; 2031 2032 dst[1] = 0.0f; 2033 2034 dst[2] = 0.0f; 2035 2036 dst[3] = 1.0f; 2037} 2038 2039static inline void 2040unpack_float_rg_float16(const void *void_src, GLfloat dst[4]) 2041{ 2042 uint16_t *src = (uint16_t *)void_src; 2043 uint16_t r = src[0]; 2044 uint16_t g = src[1]; 2045 2046 2047 2048 dst[0] = _mesa_half_to_float(r); 2049 2050 2051 dst[1] = _mesa_half_to_float(g); 2052 2053 dst[2] = 0.0f; 2054 2055 dst[3] = 1.0f; 2056} 2057 2058static inline void 2059unpack_float_rg_float32(const void *void_src, GLfloat dst[4]) 2060{ 2061 float *src = (float *)void_src; 2062 float r = src[0]; 2063 float g = src[1]; 2064 2065 2066 2067 dst[0] = r; 2068 2069 2070 dst[1] = g; 2071 2072 dst[2] = 0.0f; 2073 2074 dst[3] = 1.0f; 2075} 2076 2077static inline void 2078unpack_float_rgb_float16(const void *void_src, GLfloat dst[4]) 2079{ 2080 uint16_t *src = (uint16_t *)void_src; 2081 uint16_t r = src[0]; 2082 uint16_t g = src[1]; 2083 uint16_t b = src[2]; 2084 2085 2086 2087 dst[0] = _mesa_half_to_float(r); 2088 2089 2090 dst[1] = _mesa_half_to_float(g); 2091 2092 2093 dst[2] = _mesa_half_to_float(b); 2094 2095 dst[3] = 1.0f; 2096} 2097 2098static inline void 2099unpack_float_rgb_float32(const void *void_src, GLfloat dst[4]) 2100{ 2101 float *src = (float *)void_src; 2102 float r = src[0]; 2103 float g = src[1]; 2104 float b = src[2]; 2105 2106 2107 2108 dst[0] = r; 2109 2110 2111 dst[1] = g; 2112 2113 2114 dst[2] = b; 2115 2116 dst[3] = 1.0f; 2117} 2118 2119static inline void 2120unpack_float_rgba_float16(const void *void_src, GLfloat dst[4]) 2121{ 2122 uint16_t *src = (uint16_t *)void_src; 2123 uint16_t r = src[0]; 2124 uint16_t g = src[1]; 2125 uint16_t b = src[2]; 2126 uint16_t a = src[3]; 2127 2128 2129 2130 dst[0] = _mesa_half_to_float(r); 2131 2132 2133 dst[1] = _mesa_half_to_float(g); 2134 2135 2136 dst[2] = _mesa_half_to_float(b); 2137 2138 2139 dst[3] = _mesa_half_to_float(a); 2140} 2141 2142static inline void 2143unpack_float_rgba_float32(const void *void_src, GLfloat dst[4]) 2144{ 2145 float *src = (float *)void_src; 2146 float r = src[0]; 2147 float g = src[1]; 2148 float b = src[2]; 2149 float a = src[3]; 2150 2151 2152 2153 dst[0] = r; 2154 2155 2156 dst[1] = g; 2157 2158 2159 dst[2] = b; 2160 2161 2162 dst[3] = a; 2163} 2164 2165static inline void 2166unpack_float_rgbx_float16(const void *void_src, GLfloat dst[4]) 2167{ 2168 uint16_t *src = (uint16_t *)void_src; 2169 uint16_t r = src[0]; 2170 uint16_t g = src[1]; 2171 uint16_t b = src[2]; 2172 2173 2174 2175 dst[0] = _mesa_half_to_float(r); 2176 2177 2178 dst[1] = _mesa_half_to_float(g); 2179 2180 2181 dst[2] = _mesa_half_to_float(b); 2182 2183 dst[3] = 1.0f; 2184} 2185 2186static inline void 2187unpack_float_rgbx_float32(const void *void_src, GLfloat dst[4]) 2188{ 2189 float *src = (float *)void_src; 2190 float r = src[0]; 2191 float g = src[1]; 2192 float b = src[2]; 2193 2194 2195 2196 dst[0] = r; 2197 2198 2199 dst[1] = g; 2200 2201 2202 dst[2] = b; 2203 2204 dst[3] = 1.0f; 2205} 2206 2207static void 2208unpack_float_r9g9b9e5_float(const void *src, GLfloat dst[4]) 2209{ 2210 rgb9e5_to_float3(*(const GLuint *)src, dst); 2211 dst[3] = 1.0f; 2212} 2213 2214static void 2215unpack_float_r11g11b10_float(const void *src, GLfloat dst[4]) 2216{ 2217 r11g11b10f_to_float3(*(const GLuint *)src, dst); 2218 dst[3] = 1.0f; 2219} 2220 2221static void 2222unpack_float_ycbcr(const void *src, GLfloat dst[][4], GLuint n) 2223{ 2224 GLuint i; 2225 for (i = 0; i < n; i++) { 2226 const GLushort *src0 = ((const GLushort *) src) + i * 2; /* even */ 2227 const GLushort *src1 = src0 + 1; /* odd */ 2228 const GLubyte y0 = (*src0 >> 8) & 0xff; /* luminance */ 2229 const GLubyte cb = *src0 & 0xff; /* chroma U */ 2230 const GLubyte y1 = (*src1 >> 8) & 0xff; /* luminance */ 2231 const GLubyte cr = *src1 & 0xff; /* chroma V */ 2232 const GLubyte y = (i & 1) ? y1 : y0; /* choose even/odd luminance */ 2233 GLfloat r = 1.164F * (y - 16) + 1.596F * (cr - 128); 2234 GLfloat g = 1.164F * (y - 16) - 0.813F * (cr - 128) - 0.391F * (cb - 128); 2235 GLfloat b = 1.164F * (y - 16) + 2.018F * (cb - 128); 2236 r *= (1.0F / 255.0F); 2237 g *= (1.0F / 255.0F); 2238 b *= (1.0F / 255.0F); 2239 dst[i][0] = CLAMP(r, 0.0F, 1.0F); 2240 dst[i][1] = CLAMP(g, 0.0F, 1.0F); 2241 dst[i][2] = CLAMP(b, 0.0F, 1.0F); 2242 dst[i][3] = 1.0F; 2243 } 2244} 2245 2246static void 2247unpack_float_ycbcr_rev(const void *src, GLfloat dst[][4], GLuint n) 2248{ 2249 GLuint i; 2250 for (i = 0; i < n; i++) { 2251 const GLushort *src0 = ((const GLushort *) src) + i * 2; /* even */ 2252 const GLushort *src1 = src0 + 1; /* odd */ 2253 const GLubyte y0 = *src0 & 0xff; /* luminance */ 2254 const GLubyte cr = (*src0 >> 8) & 0xff; /* chroma V */ 2255 const GLubyte y1 = *src1 & 0xff; /* luminance */ 2256 const GLubyte cb = (*src1 >> 8) & 0xff; /* chroma U */ 2257 const GLubyte y = (i & 1) ? y1 : y0; /* choose even/odd luminance */ 2258 GLfloat r = 1.164F * (y - 16) + 1.596F * (cr - 128); 2259 GLfloat g = 1.164F * (y - 16) - 0.813F * (cr - 128) - 0.391F * (cb - 128); 2260 GLfloat b = 1.164F * (y - 16) + 2.018F * (cb - 128); 2261 r *= (1.0F / 255.0F); 2262 g *= (1.0F / 255.0F); 2263 b *= (1.0F / 255.0F); 2264 dst[i][0] = CLAMP(r, 0.0F, 1.0F); 2265 dst[i][1] = CLAMP(g, 0.0F, 1.0F); 2266 dst[i][2] = CLAMP(b, 0.0F, 1.0F); 2267 dst[i][3] = 1.0F; 2268 } 2269} 2270 2271/* ubyte packing functions */ 2272 2273 2274static inline void 2275unpack_ubyte_a8b8g8r8_unorm(const void *void_src, GLubyte dst[4]) 2276{ 2277 uint32_t *src = (uint32_t *)void_src; 2278 uint8_t a = UNPACK(*src, 0, 8); 2279 uint8_t b = UNPACK(*src, 8, 8); 2280 uint8_t g = UNPACK(*src, 16, 8); 2281 uint8_t r = UNPACK(*src, 24, 8); 2282 2283 2284 2285 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2286 2287 2288 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2289 2290 2291 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 2292 2293 2294 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 2295} 2296 2297static inline void 2298unpack_ubyte_x8b8g8r8_unorm(const void *void_src, GLubyte dst[4]) 2299{ 2300 uint32_t *src = (uint32_t *)void_src; 2301 uint8_t b = UNPACK(*src, 8, 8); 2302 uint8_t g = UNPACK(*src, 16, 8); 2303 uint8_t r = UNPACK(*src, 24, 8); 2304 2305 2306 2307 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2308 2309 2310 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2311 2312 2313 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 2314 2315 dst[3] = 255; 2316} 2317 2318static inline void 2319unpack_ubyte_r8g8b8a8_unorm(const void *void_src, GLubyte dst[4]) 2320{ 2321 uint32_t *src = (uint32_t *)void_src; 2322 uint8_t r = UNPACK(*src, 0, 8); 2323 uint8_t g = UNPACK(*src, 8, 8); 2324 uint8_t b = UNPACK(*src, 16, 8); 2325 uint8_t a = UNPACK(*src, 24, 8); 2326 2327 2328 2329 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2330 2331 2332 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2333 2334 2335 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 2336 2337 2338 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 2339} 2340 2341static inline void 2342unpack_ubyte_r8g8b8x8_unorm(const void *void_src, GLubyte dst[4]) 2343{ 2344 uint32_t *src = (uint32_t *)void_src; 2345 uint8_t r = UNPACK(*src, 0, 8); 2346 uint8_t g = UNPACK(*src, 8, 8); 2347 uint8_t b = UNPACK(*src, 16, 8); 2348 2349 2350 2351 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2352 2353 2354 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2355 2356 2357 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 2358 2359 dst[3] = 255; 2360} 2361 2362static inline void 2363unpack_ubyte_b8g8r8a8_unorm(const void *void_src, GLubyte dst[4]) 2364{ 2365 uint32_t *src = (uint32_t *)void_src; 2366 uint8_t b = UNPACK(*src, 0, 8); 2367 uint8_t g = UNPACK(*src, 8, 8); 2368 uint8_t r = UNPACK(*src, 16, 8); 2369 uint8_t a = UNPACK(*src, 24, 8); 2370 2371 2372 2373 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2374 2375 2376 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2377 2378 2379 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 2380 2381 2382 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 2383} 2384 2385static inline void 2386unpack_ubyte_b8g8r8x8_unorm(const void *void_src, GLubyte dst[4]) 2387{ 2388 uint32_t *src = (uint32_t *)void_src; 2389 uint8_t b = UNPACK(*src, 0, 8); 2390 uint8_t g = UNPACK(*src, 8, 8); 2391 uint8_t r = UNPACK(*src, 16, 8); 2392 2393 2394 2395 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2396 2397 2398 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2399 2400 2401 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 2402 2403 dst[3] = 255; 2404} 2405 2406static inline void 2407unpack_ubyte_a8r8g8b8_unorm(const void *void_src, GLubyte dst[4]) 2408{ 2409 uint32_t *src = (uint32_t *)void_src; 2410 uint8_t a = UNPACK(*src, 0, 8); 2411 uint8_t r = UNPACK(*src, 8, 8); 2412 uint8_t g = UNPACK(*src, 16, 8); 2413 uint8_t b = UNPACK(*src, 24, 8); 2414 2415 2416 2417 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2418 2419 2420 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2421 2422 2423 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 2424 2425 2426 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 2427} 2428 2429static inline void 2430unpack_ubyte_x8r8g8b8_unorm(const void *void_src, GLubyte dst[4]) 2431{ 2432 uint32_t *src = (uint32_t *)void_src; 2433 uint8_t r = UNPACK(*src, 8, 8); 2434 uint8_t g = UNPACK(*src, 16, 8); 2435 uint8_t b = UNPACK(*src, 24, 8); 2436 2437 2438 2439 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2440 2441 2442 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2443 2444 2445 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 2446 2447 dst[3] = 255; 2448} 2449 2450static inline void 2451unpack_ubyte_l16a16_unorm(const void *void_src, GLubyte dst[4]) 2452{ 2453 uint32_t *src = (uint32_t *)void_src; 2454 uint16_t l = UNPACK(*src, 0, 16); 2455 uint16_t a = UNPACK(*src, 16, 16); 2456 2457 2458 2459 dst[0] = _mesa_unorm_to_unorm(l, 16, 8); 2460 2461 2462 dst[1] = _mesa_unorm_to_unorm(l, 16, 8); 2463 2464 2465 dst[2] = _mesa_unorm_to_unorm(l, 16, 8); 2466 2467 2468 dst[3] = _mesa_unorm_to_unorm(a, 16, 8); 2469} 2470 2471static inline void 2472unpack_ubyte_a16l16_unorm(const void *void_src, GLubyte dst[4]) 2473{ 2474 uint32_t *src = (uint32_t *)void_src; 2475 uint16_t a = UNPACK(*src, 0, 16); 2476 uint16_t l = UNPACK(*src, 16, 16); 2477 2478 2479 2480 dst[0] = _mesa_unorm_to_unorm(l, 16, 8); 2481 2482 2483 dst[1] = _mesa_unorm_to_unorm(l, 16, 8); 2484 2485 2486 dst[2] = _mesa_unorm_to_unorm(l, 16, 8); 2487 2488 2489 dst[3] = _mesa_unorm_to_unorm(a, 16, 8); 2490} 2491 2492static inline void 2493unpack_ubyte_b5g6r5_unorm(const void *void_src, GLubyte dst[4]) 2494{ 2495 uint16_t *src = (uint16_t *)void_src; 2496 uint8_t b = UNPACK(*src, 0, 5); 2497 uint8_t g = UNPACK(*src, 5, 6); 2498 uint8_t r = UNPACK(*src, 11, 5); 2499 2500 2501 2502 dst[0] = _mesa_unorm_to_unorm(r, 5, 8); 2503 2504 2505 dst[1] = _mesa_unorm_to_unorm(g, 6, 8); 2506 2507 2508 dst[2] = _mesa_unorm_to_unorm(b, 5, 8); 2509 2510 dst[3] = 255; 2511} 2512 2513static inline void 2514unpack_ubyte_r5g6b5_unorm(const void *void_src, GLubyte dst[4]) 2515{ 2516 uint16_t *src = (uint16_t *)void_src; 2517 uint8_t r = UNPACK(*src, 0, 5); 2518 uint8_t g = UNPACK(*src, 5, 6); 2519 uint8_t b = UNPACK(*src, 11, 5); 2520 2521 2522 2523 dst[0] = _mesa_unorm_to_unorm(r, 5, 8); 2524 2525 2526 dst[1] = _mesa_unorm_to_unorm(g, 6, 8); 2527 2528 2529 dst[2] = _mesa_unorm_to_unorm(b, 5, 8); 2530 2531 dst[3] = 255; 2532} 2533 2534static inline void 2535unpack_ubyte_b4g4r4a4_unorm(const void *void_src, GLubyte dst[4]) 2536{ 2537 uint16_t *src = (uint16_t *)void_src; 2538 uint8_t b = UNPACK(*src, 0, 4); 2539 uint8_t g = UNPACK(*src, 4, 4); 2540 uint8_t r = UNPACK(*src, 8, 4); 2541 uint8_t a = UNPACK(*src, 12, 4); 2542 2543 2544 2545 dst[0] = _mesa_unorm_to_unorm(r, 4, 8); 2546 2547 2548 dst[1] = _mesa_unorm_to_unorm(g, 4, 8); 2549 2550 2551 dst[2] = _mesa_unorm_to_unorm(b, 4, 8); 2552 2553 2554 dst[3] = _mesa_unorm_to_unorm(a, 4, 8); 2555} 2556 2557static inline void 2558unpack_ubyte_b4g4r4x4_unorm(const void *void_src, GLubyte dst[4]) 2559{ 2560 uint16_t *src = (uint16_t *)void_src; 2561 uint8_t b = UNPACK(*src, 0, 4); 2562 uint8_t g = UNPACK(*src, 4, 4); 2563 uint8_t r = UNPACK(*src, 8, 4); 2564 2565 2566 2567 dst[0] = _mesa_unorm_to_unorm(r, 4, 8); 2568 2569 2570 dst[1] = _mesa_unorm_to_unorm(g, 4, 8); 2571 2572 2573 dst[2] = _mesa_unorm_to_unorm(b, 4, 8); 2574 2575 dst[3] = 255; 2576} 2577 2578static inline void 2579unpack_ubyte_a4r4g4b4_unorm(const void *void_src, GLubyte dst[4]) 2580{ 2581 uint16_t *src = (uint16_t *)void_src; 2582 uint8_t a = UNPACK(*src, 0, 4); 2583 uint8_t r = UNPACK(*src, 4, 4); 2584 uint8_t g = UNPACK(*src, 8, 4); 2585 uint8_t b = UNPACK(*src, 12, 4); 2586 2587 2588 2589 dst[0] = _mesa_unorm_to_unorm(r, 4, 8); 2590 2591 2592 dst[1] = _mesa_unorm_to_unorm(g, 4, 8); 2593 2594 2595 dst[2] = _mesa_unorm_to_unorm(b, 4, 8); 2596 2597 2598 dst[3] = _mesa_unorm_to_unorm(a, 4, 8); 2599} 2600 2601static inline void 2602unpack_ubyte_a1b5g5r5_unorm(const void *void_src, GLubyte dst[4]) 2603{ 2604 uint16_t *src = (uint16_t *)void_src; 2605 uint8_t a = UNPACK(*src, 0, 1); 2606 uint8_t b = UNPACK(*src, 1, 5); 2607 uint8_t g = UNPACK(*src, 6, 5); 2608 uint8_t r = UNPACK(*src, 11, 5); 2609 2610 2611 2612 dst[0] = _mesa_unorm_to_unorm(r, 5, 8); 2613 2614 2615 dst[1] = _mesa_unorm_to_unorm(g, 5, 8); 2616 2617 2618 dst[2] = _mesa_unorm_to_unorm(b, 5, 8); 2619 2620 2621 dst[3] = _mesa_unorm_to_unorm(a, 1, 8); 2622} 2623 2624static inline void 2625unpack_ubyte_x1b5g5r5_unorm(const void *void_src, GLubyte dst[4]) 2626{ 2627 uint16_t *src = (uint16_t *)void_src; 2628 uint8_t b = UNPACK(*src, 1, 5); 2629 uint8_t g = UNPACK(*src, 6, 5); 2630 uint8_t r = UNPACK(*src, 11, 5); 2631 2632 2633 2634 dst[0] = _mesa_unorm_to_unorm(r, 5, 8); 2635 2636 2637 dst[1] = _mesa_unorm_to_unorm(g, 5, 8); 2638 2639 2640 dst[2] = _mesa_unorm_to_unorm(b, 5, 8); 2641 2642 dst[3] = 255; 2643} 2644 2645static inline void 2646unpack_ubyte_b5g5r5a1_unorm(const void *void_src, GLubyte dst[4]) 2647{ 2648 uint16_t *src = (uint16_t *)void_src; 2649 uint8_t b = UNPACK(*src, 0, 5); 2650 uint8_t g = UNPACK(*src, 5, 5); 2651 uint8_t r = UNPACK(*src, 10, 5); 2652 uint8_t a = UNPACK(*src, 15, 1); 2653 2654 2655 2656 dst[0] = _mesa_unorm_to_unorm(r, 5, 8); 2657 2658 2659 dst[1] = _mesa_unorm_to_unorm(g, 5, 8); 2660 2661 2662 dst[2] = _mesa_unorm_to_unorm(b, 5, 8); 2663 2664 2665 dst[3] = _mesa_unorm_to_unorm(a, 1, 8); 2666} 2667 2668static inline void 2669unpack_ubyte_b5g5r5x1_unorm(const void *void_src, GLubyte dst[4]) 2670{ 2671 uint16_t *src = (uint16_t *)void_src; 2672 uint8_t b = UNPACK(*src, 0, 5); 2673 uint8_t g = UNPACK(*src, 5, 5); 2674 uint8_t r = UNPACK(*src, 10, 5); 2675 2676 2677 2678 dst[0] = _mesa_unorm_to_unorm(r, 5, 8); 2679 2680 2681 dst[1] = _mesa_unorm_to_unorm(g, 5, 8); 2682 2683 2684 dst[2] = _mesa_unorm_to_unorm(b, 5, 8); 2685 2686 dst[3] = 255; 2687} 2688 2689static inline void 2690unpack_ubyte_a1r5g5b5_unorm(const void *void_src, GLubyte dst[4]) 2691{ 2692 uint16_t *src = (uint16_t *)void_src; 2693 uint8_t a = UNPACK(*src, 0, 1); 2694 uint8_t r = UNPACK(*src, 1, 5); 2695 uint8_t g = UNPACK(*src, 6, 5); 2696 uint8_t b = UNPACK(*src, 11, 5); 2697 2698 2699 2700 dst[0] = _mesa_unorm_to_unorm(r, 5, 8); 2701 2702 2703 dst[1] = _mesa_unorm_to_unorm(g, 5, 8); 2704 2705 2706 dst[2] = _mesa_unorm_to_unorm(b, 5, 8); 2707 2708 2709 dst[3] = _mesa_unorm_to_unorm(a, 1, 8); 2710} 2711 2712static inline void 2713unpack_ubyte_l8a8_unorm(const void *void_src, GLubyte dst[4]) 2714{ 2715 uint16_t *src = (uint16_t *)void_src; 2716 uint8_t l = UNPACK(*src, 0, 8); 2717 uint8_t a = UNPACK(*src, 8, 8); 2718 2719 2720 2721 dst[0] = _mesa_unorm_to_unorm(l, 8, 8); 2722 2723 2724 dst[1] = _mesa_unorm_to_unorm(l, 8, 8); 2725 2726 2727 dst[2] = _mesa_unorm_to_unorm(l, 8, 8); 2728 2729 2730 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 2731} 2732 2733static inline void 2734unpack_ubyte_a8l8_unorm(const void *void_src, GLubyte dst[4]) 2735{ 2736 uint16_t *src = (uint16_t *)void_src; 2737 uint8_t a = UNPACK(*src, 0, 8); 2738 uint8_t l = UNPACK(*src, 8, 8); 2739 2740 2741 2742 dst[0] = _mesa_unorm_to_unorm(l, 8, 8); 2743 2744 2745 dst[1] = _mesa_unorm_to_unorm(l, 8, 8); 2746 2747 2748 dst[2] = _mesa_unorm_to_unorm(l, 8, 8); 2749 2750 2751 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 2752} 2753 2754static inline void 2755unpack_ubyte_r8g8_unorm(const void *void_src, GLubyte dst[4]) 2756{ 2757 uint16_t *src = (uint16_t *)void_src; 2758 uint8_t r = UNPACK(*src, 0, 8); 2759 uint8_t g = UNPACK(*src, 8, 8); 2760 2761 2762 2763 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2764 2765 2766 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2767 2768 dst[2] = 0; 2769 2770 dst[3] = 255; 2771} 2772 2773static inline void 2774unpack_ubyte_g8r8_unorm(const void *void_src, GLubyte dst[4]) 2775{ 2776 uint16_t *src = (uint16_t *)void_src; 2777 uint8_t g = UNPACK(*src, 0, 8); 2778 uint8_t r = UNPACK(*src, 8, 8); 2779 2780 2781 2782 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 2783 2784 2785 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 2786 2787 dst[2] = 0; 2788 2789 dst[3] = 255; 2790} 2791 2792static inline void 2793unpack_ubyte_l4a4_unorm(const void *void_src, GLubyte dst[4]) 2794{ 2795 uint8_t *src = (uint8_t *)void_src; 2796 uint8_t l = UNPACK(*src, 0, 4); 2797 uint8_t a = UNPACK(*src, 4, 4); 2798 2799 2800 2801 dst[0] = _mesa_unorm_to_unorm(l, 4, 8); 2802 2803 2804 dst[1] = _mesa_unorm_to_unorm(l, 4, 8); 2805 2806 2807 dst[2] = _mesa_unorm_to_unorm(l, 4, 8); 2808 2809 2810 dst[3] = _mesa_unorm_to_unorm(a, 4, 8); 2811} 2812 2813static inline void 2814unpack_ubyte_b2g3r3_unorm(const void *void_src, GLubyte dst[4]) 2815{ 2816 uint8_t *src = (uint8_t *)void_src; 2817 uint8_t b = UNPACK(*src, 0, 2); 2818 uint8_t g = UNPACK(*src, 2, 3); 2819 uint8_t r = UNPACK(*src, 5, 3); 2820 2821 2822 2823 dst[0] = _mesa_unorm_to_unorm(r, 3, 8); 2824 2825 2826 dst[1] = _mesa_unorm_to_unorm(g, 3, 8); 2827 2828 2829 dst[2] = _mesa_unorm_to_unorm(b, 2, 8); 2830 2831 dst[3] = 255; 2832} 2833 2834static inline void 2835unpack_ubyte_r16g16_unorm(const void *void_src, GLubyte dst[4]) 2836{ 2837 uint32_t *src = (uint32_t *)void_src; 2838 uint16_t r = UNPACK(*src, 0, 16); 2839 uint16_t g = UNPACK(*src, 16, 16); 2840 2841 2842 2843 dst[0] = _mesa_unorm_to_unorm(r, 16, 8); 2844 2845 2846 dst[1] = _mesa_unorm_to_unorm(g, 16, 8); 2847 2848 dst[2] = 0; 2849 2850 dst[3] = 255; 2851} 2852 2853static inline void 2854unpack_ubyte_g16r16_unorm(const void *void_src, GLubyte dst[4]) 2855{ 2856 uint32_t *src = (uint32_t *)void_src; 2857 uint16_t g = UNPACK(*src, 0, 16); 2858 uint16_t r = UNPACK(*src, 16, 16); 2859 2860 2861 2862 dst[0] = _mesa_unorm_to_unorm(r, 16, 8); 2863 2864 2865 dst[1] = _mesa_unorm_to_unorm(g, 16, 8); 2866 2867 dst[2] = 0; 2868 2869 dst[3] = 255; 2870} 2871 2872static inline void 2873unpack_ubyte_b10g10r10a2_unorm(const void *void_src, GLubyte dst[4]) 2874{ 2875 uint32_t *src = (uint32_t *)void_src; 2876 uint16_t b = UNPACK(*src, 0, 10); 2877 uint16_t g = UNPACK(*src, 10, 10); 2878 uint16_t r = UNPACK(*src, 20, 10); 2879 uint8_t a = UNPACK(*src, 30, 2); 2880 2881 2882 2883 dst[0] = _mesa_unorm_to_unorm(r, 10, 8); 2884 2885 2886 dst[1] = _mesa_unorm_to_unorm(g, 10, 8); 2887 2888 2889 dst[2] = _mesa_unorm_to_unorm(b, 10, 8); 2890 2891 2892 dst[3] = _mesa_unorm_to_unorm(a, 2, 8); 2893} 2894 2895static inline void 2896unpack_ubyte_b10g10r10x2_unorm(const void *void_src, GLubyte dst[4]) 2897{ 2898 uint32_t *src = (uint32_t *)void_src; 2899 uint16_t b = UNPACK(*src, 0, 10); 2900 uint16_t g = UNPACK(*src, 10, 10); 2901 uint16_t r = UNPACK(*src, 20, 10); 2902 2903 2904 2905 dst[0] = _mesa_unorm_to_unorm(r, 10, 8); 2906 2907 2908 dst[1] = _mesa_unorm_to_unorm(g, 10, 8); 2909 2910 2911 dst[2] = _mesa_unorm_to_unorm(b, 10, 8); 2912 2913 dst[3] = 255; 2914} 2915 2916static inline void 2917unpack_ubyte_r10g10b10a2_unorm(const void *void_src, GLubyte dst[4]) 2918{ 2919 uint32_t *src = (uint32_t *)void_src; 2920 uint16_t r = UNPACK(*src, 0, 10); 2921 uint16_t g = UNPACK(*src, 10, 10); 2922 uint16_t b = UNPACK(*src, 20, 10); 2923 uint8_t a = UNPACK(*src, 30, 2); 2924 2925 2926 2927 dst[0] = _mesa_unorm_to_unorm(r, 10, 8); 2928 2929 2930 dst[1] = _mesa_unorm_to_unorm(g, 10, 8); 2931 2932 2933 dst[2] = _mesa_unorm_to_unorm(b, 10, 8); 2934 2935 2936 dst[3] = _mesa_unorm_to_unorm(a, 2, 8); 2937} 2938 2939static inline void 2940unpack_ubyte_r10g10b10x2_unorm(const void *void_src, GLubyte dst[4]) 2941{ 2942 uint32_t *src = (uint32_t *)void_src; 2943 uint16_t r = UNPACK(*src, 0, 10); 2944 uint16_t g = UNPACK(*src, 10, 10); 2945 uint16_t b = UNPACK(*src, 20, 10); 2946 2947 2948 2949 dst[0] = _mesa_unorm_to_unorm(r, 10, 8); 2950 2951 2952 dst[1] = _mesa_unorm_to_unorm(g, 10, 8); 2953 2954 2955 dst[2] = _mesa_unorm_to_unorm(b, 10, 8); 2956 2957 dst[3] = 255; 2958} 2959 2960static inline void 2961unpack_ubyte_r3g3b2_unorm(const void *void_src, GLubyte dst[4]) 2962{ 2963 uint8_t *src = (uint8_t *)void_src; 2964 uint8_t r = UNPACK(*src, 0, 3); 2965 uint8_t g = UNPACK(*src, 3, 3); 2966 uint8_t b = UNPACK(*src, 6, 2); 2967 2968 2969 2970 dst[0] = _mesa_unorm_to_unorm(r, 3, 8); 2971 2972 2973 dst[1] = _mesa_unorm_to_unorm(g, 3, 8); 2974 2975 2976 dst[2] = _mesa_unorm_to_unorm(b, 2, 8); 2977 2978 dst[3] = 255; 2979} 2980 2981static inline void 2982unpack_ubyte_a4b4g4r4_unorm(const void *void_src, GLubyte dst[4]) 2983{ 2984 uint16_t *src = (uint16_t *)void_src; 2985 uint8_t a = UNPACK(*src, 0, 4); 2986 uint8_t b = UNPACK(*src, 4, 4); 2987 uint8_t g = UNPACK(*src, 8, 4); 2988 uint8_t r = UNPACK(*src, 12, 4); 2989 2990 2991 2992 dst[0] = _mesa_unorm_to_unorm(r, 4, 8); 2993 2994 2995 dst[1] = _mesa_unorm_to_unorm(g, 4, 8); 2996 2997 2998 dst[2] = _mesa_unorm_to_unorm(b, 4, 8); 2999 3000 3001 dst[3] = _mesa_unorm_to_unorm(a, 4, 8); 3002} 3003 3004static inline void 3005unpack_ubyte_r4g4b4a4_unorm(const void *void_src, GLubyte dst[4]) 3006{ 3007 uint16_t *src = (uint16_t *)void_src; 3008 uint8_t r = UNPACK(*src, 0, 4); 3009 uint8_t g = UNPACK(*src, 4, 4); 3010 uint8_t b = UNPACK(*src, 8, 4); 3011 uint8_t a = UNPACK(*src, 12, 4); 3012 3013 3014 3015 dst[0] = _mesa_unorm_to_unorm(r, 4, 8); 3016 3017 3018 dst[1] = _mesa_unorm_to_unorm(g, 4, 8); 3019 3020 3021 dst[2] = _mesa_unorm_to_unorm(b, 4, 8); 3022 3023 3024 dst[3] = _mesa_unorm_to_unorm(a, 4, 8); 3025} 3026 3027static inline void 3028unpack_ubyte_r5g5b5a1_unorm(const void *void_src, GLubyte dst[4]) 3029{ 3030 uint16_t *src = (uint16_t *)void_src; 3031 uint8_t r = UNPACK(*src, 0, 5); 3032 uint8_t g = UNPACK(*src, 5, 5); 3033 uint8_t b = UNPACK(*src, 10, 5); 3034 uint8_t a = UNPACK(*src, 15, 1); 3035 3036 3037 3038 dst[0] = _mesa_unorm_to_unorm(r, 5, 8); 3039 3040 3041 dst[1] = _mesa_unorm_to_unorm(g, 5, 8); 3042 3043 3044 dst[2] = _mesa_unorm_to_unorm(b, 5, 8); 3045 3046 3047 dst[3] = _mesa_unorm_to_unorm(a, 1, 8); 3048} 3049 3050static inline void 3051unpack_ubyte_a2b10g10r10_unorm(const void *void_src, GLubyte dst[4]) 3052{ 3053 uint32_t *src = (uint32_t *)void_src; 3054 uint8_t a = UNPACK(*src, 0, 2); 3055 uint16_t b = UNPACK(*src, 2, 10); 3056 uint16_t g = UNPACK(*src, 12, 10); 3057 uint16_t r = UNPACK(*src, 22, 10); 3058 3059 3060 3061 dst[0] = _mesa_unorm_to_unorm(r, 10, 8); 3062 3063 3064 dst[1] = _mesa_unorm_to_unorm(g, 10, 8); 3065 3066 3067 dst[2] = _mesa_unorm_to_unorm(b, 10, 8); 3068 3069 3070 dst[3] = _mesa_unorm_to_unorm(a, 2, 8); 3071} 3072 3073static inline void 3074unpack_ubyte_a2r10g10b10_unorm(const void *void_src, GLubyte dst[4]) 3075{ 3076 uint32_t *src = (uint32_t *)void_src; 3077 uint8_t a = UNPACK(*src, 0, 2); 3078 uint16_t r = UNPACK(*src, 2, 10); 3079 uint16_t g = UNPACK(*src, 12, 10); 3080 uint16_t b = UNPACK(*src, 22, 10); 3081 3082 3083 3084 dst[0] = _mesa_unorm_to_unorm(r, 10, 8); 3085 3086 3087 dst[1] = _mesa_unorm_to_unorm(g, 10, 8); 3088 3089 3090 dst[2] = _mesa_unorm_to_unorm(b, 10, 8); 3091 3092 3093 dst[3] = _mesa_unorm_to_unorm(a, 2, 8); 3094} 3095 3096static inline void 3097unpack_ubyte_a_unorm8(const void *void_src, GLubyte dst[4]) 3098{ 3099 uint8_t *src = (uint8_t *)void_src; 3100 uint8_t a = src[0]; 3101 3102 3103 dst[0] = 0; 3104 3105 dst[1] = 0; 3106 3107 dst[2] = 0; 3108 3109 3110 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 3111} 3112 3113static inline void 3114unpack_ubyte_a_unorm16(const void *void_src, GLubyte dst[4]) 3115{ 3116 uint16_t *src = (uint16_t *)void_src; 3117 uint16_t a = src[0]; 3118 3119 3120 dst[0] = 0; 3121 3122 dst[1] = 0; 3123 3124 dst[2] = 0; 3125 3126 3127 dst[3] = _mesa_unorm_to_unorm(a, 16, 8); 3128} 3129 3130static inline void 3131unpack_ubyte_l_unorm8(const void *void_src, GLubyte dst[4]) 3132{ 3133 uint8_t *src = (uint8_t *)void_src; 3134 uint8_t l = src[0]; 3135 3136 3137 3138 dst[0] = _mesa_unorm_to_unorm(l, 8, 8); 3139 3140 3141 dst[1] = _mesa_unorm_to_unorm(l, 8, 8); 3142 3143 3144 dst[2] = _mesa_unorm_to_unorm(l, 8, 8); 3145 3146 dst[3] = 255; 3147} 3148 3149static inline void 3150unpack_ubyte_l_unorm16(const void *void_src, GLubyte dst[4]) 3151{ 3152 uint16_t *src = (uint16_t *)void_src; 3153 uint16_t l = src[0]; 3154 3155 3156 3157 dst[0] = _mesa_unorm_to_unorm(l, 16, 8); 3158 3159 3160 dst[1] = _mesa_unorm_to_unorm(l, 16, 8); 3161 3162 3163 dst[2] = _mesa_unorm_to_unorm(l, 16, 8); 3164 3165 dst[3] = 255; 3166} 3167 3168static inline void 3169unpack_ubyte_i_unorm8(const void *void_src, GLubyte dst[4]) 3170{ 3171 uint8_t *src = (uint8_t *)void_src; 3172 uint8_t i = src[0]; 3173 3174 3175 3176 dst[0] = _mesa_unorm_to_unorm(i, 8, 8); 3177 3178 3179 dst[1] = _mesa_unorm_to_unorm(i, 8, 8); 3180 3181 3182 dst[2] = _mesa_unorm_to_unorm(i, 8, 8); 3183 3184 3185 dst[3] = _mesa_unorm_to_unorm(i, 8, 8); 3186} 3187 3188static inline void 3189unpack_ubyte_i_unorm16(const void *void_src, GLubyte dst[4]) 3190{ 3191 uint16_t *src = (uint16_t *)void_src; 3192 uint16_t i = src[0]; 3193 3194 3195 3196 dst[0] = _mesa_unorm_to_unorm(i, 16, 8); 3197 3198 3199 dst[1] = _mesa_unorm_to_unorm(i, 16, 8); 3200 3201 3202 dst[2] = _mesa_unorm_to_unorm(i, 16, 8); 3203 3204 3205 dst[3] = _mesa_unorm_to_unorm(i, 16, 8); 3206} 3207 3208static inline void 3209unpack_ubyte_r_unorm8(const void *void_src, GLubyte dst[4]) 3210{ 3211 uint8_t *src = (uint8_t *)void_src; 3212 uint8_t r = src[0]; 3213 3214 3215 3216 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 3217 3218 dst[1] = 0; 3219 3220 dst[2] = 0; 3221 3222 dst[3] = 255; 3223} 3224 3225static inline void 3226unpack_ubyte_r_unorm16(const void *void_src, GLubyte dst[4]) 3227{ 3228 uint16_t *src = (uint16_t *)void_src; 3229 uint16_t r = src[0]; 3230 3231 3232 3233 dst[0] = _mesa_unorm_to_unorm(r, 16, 8); 3234 3235 dst[1] = 0; 3236 3237 dst[2] = 0; 3238 3239 dst[3] = 255; 3240} 3241 3242static inline void 3243unpack_ubyte_bgr_unorm8(const void *void_src, GLubyte dst[4]) 3244{ 3245 uint8_t *src = (uint8_t *)void_src; 3246 uint8_t b = src[0]; 3247 uint8_t g = src[1]; 3248 uint8_t r = src[2]; 3249 3250 3251 3252 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 3253 3254 3255 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 3256 3257 3258 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 3259 3260 dst[3] = 255; 3261} 3262 3263static inline void 3264unpack_ubyte_rgb_unorm8(const void *void_src, GLubyte dst[4]) 3265{ 3266 uint8_t *src = (uint8_t *)void_src; 3267 uint8_t r = src[0]; 3268 uint8_t g = src[1]; 3269 uint8_t b = src[2]; 3270 3271 3272 3273 dst[0] = _mesa_unorm_to_unorm(r, 8, 8); 3274 3275 3276 dst[1] = _mesa_unorm_to_unorm(g, 8, 8); 3277 3278 3279 dst[2] = _mesa_unorm_to_unorm(b, 8, 8); 3280 3281 dst[3] = 255; 3282} 3283 3284static inline void 3285unpack_ubyte_rgba_unorm16(const void *void_src, GLubyte dst[4]) 3286{ 3287 uint16_t *src = (uint16_t *)void_src; 3288 uint16_t r = src[0]; 3289 uint16_t g = src[1]; 3290 uint16_t b = src[2]; 3291 uint16_t a = src[3]; 3292 3293 3294 3295 dst[0] = _mesa_unorm_to_unorm(r, 16, 8); 3296 3297 3298 dst[1] = _mesa_unorm_to_unorm(g, 16, 8); 3299 3300 3301 dst[2] = _mesa_unorm_to_unorm(b, 16, 8); 3302 3303 3304 dst[3] = _mesa_unorm_to_unorm(a, 16, 8); 3305} 3306 3307static inline void 3308unpack_ubyte_rgbx_unorm16(const void *void_src, GLubyte dst[4]) 3309{ 3310 uint16_t *src = (uint16_t *)void_src; 3311 uint16_t r = src[0]; 3312 uint16_t g = src[1]; 3313 uint16_t b = src[2]; 3314 3315 3316 3317 dst[0] = _mesa_unorm_to_unorm(r, 16, 8); 3318 3319 3320 dst[1] = _mesa_unorm_to_unorm(g, 16, 8); 3321 3322 3323 dst[2] = _mesa_unorm_to_unorm(b, 16, 8); 3324 3325 dst[3] = 255; 3326} 3327 3328static inline void 3329unpack_ubyte_a8b8g8r8_snorm(const void *void_src, GLubyte dst[4]) 3330{ 3331 uint32_t *src = (uint32_t *)void_src; 3332 int8_t a = UNPACK(*src, 0, 8); 3333 int8_t b = UNPACK(*src, 8, 8); 3334 int8_t g = UNPACK(*src, 16, 8); 3335 int8_t r = UNPACK(*src, 24, 8); 3336 3337 3338 3339 dst[0] = _mesa_snorm_to_unorm(r, 8, 8); 3340 3341 3342 dst[1] = _mesa_snorm_to_unorm(g, 8, 8); 3343 3344 3345 dst[2] = _mesa_snorm_to_unorm(b, 8, 8); 3346 3347 3348 dst[3] = _mesa_snorm_to_unorm(a, 8, 8); 3349} 3350 3351static inline void 3352unpack_ubyte_x8b8g8r8_snorm(const void *void_src, GLubyte dst[4]) 3353{ 3354 uint32_t *src = (uint32_t *)void_src; 3355 int8_t b = UNPACK(*src, 8, 8); 3356 int8_t g = UNPACK(*src, 16, 8); 3357 int8_t r = UNPACK(*src, 24, 8); 3358 3359 3360 3361 dst[0] = _mesa_snorm_to_unorm(r, 8, 8); 3362 3363 3364 dst[1] = _mesa_snorm_to_unorm(g, 8, 8); 3365 3366 3367 dst[2] = _mesa_snorm_to_unorm(b, 8, 8); 3368 3369 dst[3] = 255; 3370} 3371 3372static inline void 3373unpack_ubyte_r8g8b8a8_snorm(const void *void_src, GLubyte dst[4]) 3374{ 3375 uint32_t *src = (uint32_t *)void_src; 3376 int8_t r = UNPACK(*src, 0, 8); 3377 int8_t g = UNPACK(*src, 8, 8); 3378 int8_t b = UNPACK(*src, 16, 8); 3379 int8_t a = UNPACK(*src, 24, 8); 3380 3381 3382 3383 dst[0] = _mesa_snorm_to_unorm(r, 8, 8); 3384 3385 3386 dst[1] = _mesa_snorm_to_unorm(g, 8, 8); 3387 3388 3389 dst[2] = _mesa_snorm_to_unorm(b, 8, 8); 3390 3391 3392 dst[3] = _mesa_snorm_to_unorm(a, 8, 8); 3393} 3394 3395static inline void 3396unpack_ubyte_r8g8b8x8_snorm(const void *void_src, GLubyte dst[4]) 3397{ 3398 uint32_t *src = (uint32_t *)void_src; 3399 int8_t r = UNPACK(*src, 0, 8); 3400 int8_t g = UNPACK(*src, 8, 8); 3401 int8_t b = UNPACK(*src, 16, 8); 3402 3403 3404 3405 dst[0] = _mesa_snorm_to_unorm(r, 8, 8); 3406 3407 3408 dst[1] = _mesa_snorm_to_unorm(g, 8, 8); 3409 3410 3411 dst[2] = _mesa_snorm_to_unorm(b, 8, 8); 3412 3413 dst[3] = 255; 3414} 3415 3416static inline void 3417unpack_ubyte_r16g16_snorm(const void *void_src, GLubyte dst[4]) 3418{ 3419 uint32_t *src = (uint32_t *)void_src; 3420 int16_t r = UNPACK(*src, 0, 16); 3421 int16_t g = UNPACK(*src, 16, 16); 3422 3423 3424 3425 dst[0] = _mesa_snorm_to_unorm(r, 16, 8); 3426 3427 3428 dst[1] = _mesa_snorm_to_unorm(g, 16, 8); 3429 3430 dst[2] = 0; 3431 3432 dst[3] = 255; 3433} 3434 3435static inline void 3436unpack_ubyte_g16r16_snorm(const void *void_src, GLubyte dst[4]) 3437{ 3438 uint32_t *src = (uint32_t *)void_src; 3439 int16_t g = UNPACK(*src, 0, 16); 3440 int16_t r = UNPACK(*src, 16, 16); 3441 3442 3443 3444 dst[0] = _mesa_snorm_to_unorm(r, 16, 8); 3445 3446 3447 dst[1] = _mesa_snorm_to_unorm(g, 16, 8); 3448 3449 dst[2] = 0; 3450 3451 dst[3] = 255; 3452} 3453 3454static inline void 3455unpack_ubyte_r8g8_snorm(const void *void_src, GLubyte dst[4]) 3456{ 3457 uint16_t *src = (uint16_t *)void_src; 3458 int8_t r = UNPACK(*src, 0, 8); 3459 int8_t g = UNPACK(*src, 8, 8); 3460 3461 3462 3463 dst[0] = _mesa_snorm_to_unorm(r, 8, 8); 3464 3465 3466 dst[1] = _mesa_snorm_to_unorm(g, 8, 8); 3467 3468 dst[2] = 0; 3469 3470 dst[3] = 255; 3471} 3472 3473static inline void 3474unpack_ubyte_g8r8_snorm(const void *void_src, GLubyte dst[4]) 3475{ 3476 uint16_t *src = (uint16_t *)void_src; 3477 int8_t g = UNPACK(*src, 0, 8); 3478 int8_t r = UNPACK(*src, 8, 8); 3479 3480 3481 3482 dst[0] = _mesa_snorm_to_unorm(r, 8, 8); 3483 3484 3485 dst[1] = _mesa_snorm_to_unorm(g, 8, 8); 3486 3487 dst[2] = 0; 3488 3489 dst[3] = 255; 3490} 3491 3492static inline void 3493unpack_ubyte_l8a8_snorm(const void *void_src, GLubyte dst[4]) 3494{ 3495 uint16_t *src = (uint16_t *)void_src; 3496 int8_t l = UNPACK(*src, 0, 8); 3497 int8_t a = UNPACK(*src, 8, 8); 3498 3499 3500 3501 dst[0] = _mesa_snorm_to_unorm(l, 8, 8); 3502 3503 3504 dst[1] = _mesa_snorm_to_unorm(l, 8, 8); 3505 3506 3507 dst[2] = _mesa_snorm_to_unorm(l, 8, 8); 3508 3509 3510 dst[3] = _mesa_snorm_to_unorm(a, 8, 8); 3511} 3512 3513static inline void 3514unpack_ubyte_a8l8_snorm(const void *void_src, GLubyte dst[4]) 3515{ 3516 uint16_t *src = (uint16_t *)void_src; 3517 int8_t a = UNPACK(*src, 0, 8); 3518 int8_t l = UNPACK(*src, 8, 8); 3519 3520 3521 3522 dst[0] = _mesa_snorm_to_unorm(l, 8, 8); 3523 3524 3525 dst[1] = _mesa_snorm_to_unorm(l, 8, 8); 3526 3527 3528 dst[2] = _mesa_snorm_to_unorm(l, 8, 8); 3529 3530 3531 dst[3] = _mesa_snorm_to_unorm(a, 8, 8); 3532} 3533 3534static inline void 3535unpack_ubyte_a_snorm8(const void *void_src, GLubyte dst[4]) 3536{ 3537 int8_t *src = (int8_t *)void_src; 3538 int8_t a = src[0]; 3539 3540 3541 dst[0] = 0; 3542 3543 dst[1] = 0; 3544 3545 dst[2] = 0; 3546 3547 3548 dst[3] = _mesa_snorm_to_unorm(a, 8, 8); 3549} 3550 3551static inline void 3552unpack_ubyte_a_snorm16(const void *void_src, GLubyte dst[4]) 3553{ 3554 int16_t *src = (int16_t *)void_src; 3555 int16_t a = src[0]; 3556 3557 3558 dst[0] = 0; 3559 3560 dst[1] = 0; 3561 3562 dst[2] = 0; 3563 3564 3565 dst[3] = _mesa_snorm_to_unorm(a, 16, 8); 3566} 3567 3568static inline void 3569unpack_ubyte_l_snorm8(const void *void_src, GLubyte dst[4]) 3570{ 3571 int8_t *src = (int8_t *)void_src; 3572 int8_t l = src[0]; 3573 3574 3575 3576 dst[0] = _mesa_snorm_to_unorm(l, 8, 8); 3577 3578 3579 dst[1] = _mesa_snorm_to_unorm(l, 8, 8); 3580 3581 3582 dst[2] = _mesa_snorm_to_unorm(l, 8, 8); 3583 3584 dst[3] = 255; 3585} 3586 3587static inline void 3588unpack_ubyte_l_snorm16(const void *void_src, GLubyte dst[4]) 3589{ 3590 int16_t *src = (int16_t *)void_src; 3591 int16_t l = src[0]; 3592 3593 3594 3595 dst[0] = _mesa_snorm_to_unorm(l, 16, 8); 3596 3597 3598 dst[1] = _mesa_snorm_to_unorm(l, 16, 8); 3599 3600 3601 dst[2] = _mesa_snorm_to_unorm(l, 16, 8); 3602 3603 dst[3] = 255; 3604} 3605 3606static inline void 3607unpack_ubyte_i_snorm8(const void *void_src, GLubyte dst[4]) 3608{ 3609 int8_t *src = (int8_t *)void_src; 3610 int8_t i = src[0]; 3611 3612 3613 3614 dst[0] = _mesa_snorm_to_unorm(i, 8, 8); 3615 3616 3617 dst[1] = _mesa_snorm_to_unorm(i, 8, 8); 3618 3619 3620 dst[2] = _mesa_snorm_to_unorm(i, 8, 8); 3621 3622 3623 dst[3] = _mesa_snorm_to_unorm(i, 8, 8); 3624} 3625 3626static inline void 3627unpack_ubyte_i_snorm16(const void *void_src, GLubyte dst[4]) 3628{ 3629 int16_t *src = (int16_t *)void_src; 3630 int16_t i = src[0]; 3631 3632 3633 3634 dst[0] = _mesa_snorm_to_unorm(i, 16, 8); 3635 3636 3637 dst[1] = _mesa_snorm_to_unorm(i, 16, 8); 3638 3639 3640 dst[2] = _mesa_snorm_to_unorm(i, 16, 8); 3641 3642 3643 dst[3] = _mesa_snorm_to_unorm(i, 16, 8); 3644} 3645 3646static inline void 3647unpack_ubyte_r_snorm8(const void *void_src, GLubyte dst[4]) 3648{ 3649 int8_t *src = (int8_t *)void_src; 3650 int8_t r = src[0]; 3651 3652 3653 3654 dst[0] = _mesa_snorm_to_unorm(r, 8, 8); 3655 3656 dst[1] = 0; 3657 3658 dst[2] = 0; 3659 3660 dst[3] = 255; 3661} 3662 3663static inline void 3664unpack_ubyte_r_snorm16(const void *void_src, GLubyte dst[4]) 3665{ 3666 int16_t *src = (int16_t *)void_src; 3667 int16_t r = src[0]; 3668 3669 3670 3671 dst[0] = _mesa_snorm_to_unorm(r, 16, 8); 3672 3673 dst[1] = 0; 3674 3675 dst[2] = 0; 3676 3677 dst[3] = 255; 3678} 3679 3680static inline void 3681unpack_ubyte_la_snorm16(const void *void_src, GLubyte dst[4]) 3682{ 3683 int16_t *src = (int16_t *)void_src; 3684 int16_t l = src[0]; 3685 int16_t a = src[1]; 3686 3687 3688 3689 dst[0] = _mesa_snorm_to_unorm(l, 16, 8); 3690 3691 3692 dst[1] = _mesa_snorm_to_unorm(l, 16, 8); 3693 3694 3695 dst[2] = _mesa_snorm_to_unorm(l, 16, 8); 3696 3697 3698 dst[3] = _mesa_snorm_to_unorm(a, 16, 8); 3699} 3700 3701static inline void 3702unpack_ubyte_rgb_snorm16(const void *void_src, GLubyte dst[4]) 3703{ 3704 int16_t *src = (int16_t *)void_src; 3705 int16_t r = src[0]; 3706 int16_t g = src[1]; 3707 int16_t b = src[2]; 3708 3709 3710 3711 dst[0] = _mesa_snorm_to_unorm(r, 16, 8); 3712 3713 3714 dst[1] = _mesa_snorm_to_unorm(g, 16, 8); 3715 3716 3717 dst[2] = _mesa_snorm_to_unorm(b, 16, 8); 3718 3719 dst[3] = 255; 3720} 3721 3722static inline void 3723unpack_ubyte_rgba_snorm16(const void *void_src, GLubyte dst[4]) 3724{ 3725 int16_t *src = (int16_t *)void_src; 3726 int16_t r = src[0]; 3727 int16_t g = src[1]; 3728 int16_t b = src[2]; 3729 int16_t a = src[3]; 3730 3731 3732 3733 dst[0] = _mesa_snorm_to_unorm(r, 16, 8); 3734 3735 3736 dst[1] = _mesa_snorm_to_unorm(g, 16, 8); 3737 3738 3739 dst[2] = _mesa_snorm_to_unorm(b, 16, 8); 3740 3741 3742 dst[3] = _mesa_snorm_to_unorm(a, 16, 8); 3743} 3744 3745static inline void 3746unpack_ubyte_rgbx_snorm16(const void *void_src, GLubyte dst[4]) 3747{ 3748 int16_t *src = (int16_t *)void_src; 3749 int16_t r = src[0]; 3750 int16_t g = src[1]; 3751 int16_t b = src[2]; 3752 3753 3754 3755 dst[0] = _mesa_snorm_to_unorm(r, 16, 8); 3756 3757 3758 dst[1] = _mesa_snorm_to_unorm(g, 16, 8); 3759 3760 3761 dst[2] = _mesa_snorm_to_unorm(b, 16, 8); 3762 3763 dst[3] = 255; 3764} 3765 3766static inline void 3767unpack_ubyte_a8b8g8r8_srgb(const void *void_src, GLubyte dst[4]) 3768{ 3769 uint32_t *src = (uint32_t *)void_src; 3770 uint8_t a = UNPACK(*src, 0, 8); 3771 uint8_t b = UNPACK(*src, 8, 8); 3772 uint8_t g = UNPACK(*src, 16, 8); 3773 uint8_t r = UNPACK(*src, 24, 8); 3774 3775 3776 3777 3778 dst[0] = util_format_srgb_to_linear_8unorm(r); 3779 3780 3781 3782 dst[1] = util_format_srgb_to_linear_8unorm(g); 3783 3784 3785 3786 dst[2] = util_format_srgb_to_linear_8unorm(b); 3787 3788 3789 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 3790} 3791 3792static inline void 3793unpack_ubyte_b8g8r8a8_srgb(const void *void_src, GLubyte dst[4]) 3794{ 3795 uint32_t *src = (uint32_t *)void_src; 3796 uint8_t b = UNPACK(*src, 0, 8); 3797 uint8_t g = UNPACK(*src, 8, 8); 3798 uint8_t r = UNPACK(*src, 16, 8); 3799 uint8_t a = UNPACK(*src, 24, 8); 3800 3801 3802 3803 3804 dst[0] = util_format_srgb_to_linear_8unorm(r); 3805 3806 3807 3808 dst[1] = util_format_srgb_to_linear_8unorm(g); 3809 3810 3811 3812 dst[2] = util_format_srgb_to_linear_8unorm(b); 3813 3814 3815 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 3816} 3817 3818static inline void 3819unpack_ubyte_a8r8g8b8_srgb(const void *void_src, GLubyte dst[4]) 3820{ 3821 uint32_t *src = (uint32_t *)void_src; 3822 uint8_t a = UNPACK(*src, 0, 8); 3823 uint8_t r = UNPACK(*src, 8, 8); 3824 uint8_t g = UNPACK(*src, 16, 8); 3825 uint8_t b = UNPACK(*src, 24, 8); 3826 3827 3828 3829 3830 dst[0] = util_format_srgb_to_linear_8unorm(r); 3831 3832 3833 3834 dst[1] = util_format_srgb_to_linear_8unorm(g); 3835 3836 3837 3838 dst[2] = util_format_srgb_to_linear_8unorm(b); 3839 3840 3841 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 3842} 3843 3844static inline void 3845unpack_ubyte_b8g8r8x8_srgb(const void *void_src, GLubyte dst[4]) 3846{ 3847 uint32_t *src = (uint32_t *)void_src; 3848 uint8_t b = UNPACK(*src, 0, 8); 3849 uint8_t g = UNPACK(*src, 8, 8); 3850 uint8_t r = UNPACK(*src, 16, 8); 3851 3852 3853 3854 3855 dst[0] = util_format_srgb_to_linear_8unorm(r); 3856 3857 3858 3859 dst[1] = util_format_srgb_to_linear_8unorm(g); 3860 3861 3862 3863 dst[2] = util_format_srgb_to_linear_8unorm(b); 3864 3865 dst[3] = 255; 3866} 3867 3868static inline void 3869unpack_ubyte_x8r8g8b8_srgb(const void *void_src, GLubyte dst[4]) 3870{ 3871 uint32_t *src = (uint32_t *)void_src; 3872 uint8_t r = UNPACK(*src, 8, 8); 3873 uint8_t g = UNPACK(*src, 16, 8); 3874 uint8_t b = UNPACK(*src, 24, 8); 3875 3876 3877 3878 3879 dst[0] = util_format_srgb_to_linear_8unorm(r); 3880 3881 3882 3883 dst[1] = util_format_srgb_to_linear_8unorm(g); 3884 3885 3886 3887 dst[2] = util_format_srgb_to_linear_8unorm(b); 3888 3889 dst[3] = 255; 3890} 3891 3892static inline void 3893unpack_ubyte_r8g8b8a8_srgb(const void *void_src, GLubyte dst[4]) 3894{ 3895 uint32_t *src = (uint32_t *)void_src; 3896 uint8_t r = UNPACK(*src, 0, 8); 3897 uint8_t g = UNPACK(*src, 8, 8); 3898 uint8_t b = UNPACK(*src, 16, 8); 3899 uint8_t a = UNPACK(*src, 24, 8); 3900 3901 3902 3903 3904 dst[0] = util_format_srgb_to_linear_8unorm(r); 3905 3906 3907 3908 dst[1] = util_format_srgb_to_linear_8unorm(g); 3909 3910 3911 3912 dst[2] = util_format_srgb_to_linear_8unorm(b); 3913 3914 3915 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 3916} 3917 3918static inline void 3919unpack_ubyte_r8g8b8x8_srgb(const void *void_src, GLubyte dst[4]) 3920{ 3921 uint32_t *src = (uint32_t *)void_src; 3922 uint8_t r = UNPACK(*src, 0, 8); 3923 uint8_t g = UNPACK(*src, 8, 8); 3924 uint8_t b = UNPACK(*src, 16, 8); 3925 3926 3927 3928 3929 dst[0] = util_format_srgb_to_linear_8unorm(r); 3930 3931 3932 3933 dst[1] = util_format_srgb_to_linear_8unorm(g); 3934 3935 3936 3937 dst[2] = util_format_srgb_to_linear_8unorm(b); 3938 3939 dst[3] = 255; 3940} 3941 3942static inline void 3943unpack_ubyte_x8b8g8r8_srgb(const void *void_src, GLubyte dst[4]) 3944{ 3945 uint32_t *src = (uint32_t *)void_src; 3946 uint8_t b = UNPACK(*src, 8, 8); 3947 uint8_t g = UNPACK(*src, 16, 8); 3948 uint8_t r = UNPACK(*src, 24, 8); 3949 3950 3951 3952 3953 dst[0] = util_format_srgb_to_linear_8unorm(r); 3954 3955 3956 3957 dst[1] = util_format_srgb_to_linear_8unorm(g); 3958 3959 3960 3961 dst[2] = util_format_srgb_to_linear_8unorm(b); 3962 3963 dst[3] = 255; 3964} 3965 3966static inline void 3967unpack_ubyte_l8a8_srgb(const void *void_src, GLubyte dst[4]) 3968{ 3969 uint16_t *src = (uint16_t *)void_src; 3970 uint8_t l = UNPACK(*src, 0, 8); 3971 uint8_t a = UNPACK(*src, 8, 8); 3972 3973 3974 3975 dst[0] = _mesa_unorm_to_unorm(l, 8, 8); 3976 3977 3978 dst[1] = _mesa_unorm_to_unorm(l, 8, 8); 3979 3980 3981 dst[2] = _mesa_unorm_to_unorm(l, 8, 8); 3982 3983 3984 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 3985} 3986 3987static inline void 3988unpack_ubyte_a8l8_srgb(const void *void_src, GLubyte dst[4]) 3989{ 3990 uint16_t *src = (uint16_t *)void_src; 3991 uint8_t a = UNPACK(*src, 0, 8); 3992 uint8_t l = UNPACK(*src, 8, 8); 3993 3994 3995 3996 dst[0] = _mesa_unorm_to_unorm(l, 8, 8); 3997 3998 3999 dst[1] = _mesa_unorm_to_unorm(l, 8, 8); 4000 4001 4002 dst[2] = _mesa_unorm_to_unorm(l, 8, 8); 4003 4004 4005 dst[3] = _mesa_unorm_to_unorm(a, 8, 8); 4006} 4007 4008static inline void 4009unpack_ubyte_r_srgb8(const void *void_src, GLubyte dst[4]) 4010{ 4011 uint8_t *src = (uint8_t *)void_src; 4012 uint8_t r = src[0]; 4013 4014 4015 4016 4017 dst[0] = util_format_srgb_to_linear_8unorm(r); 4018 4019 dst[1] = 0; 4020 4021 dst[2] = 0; 4022 4023 dst[3] = 255; 4024} 4025 4026static inline void 4027unpack_ubyte_l_srgb8(const void *void_src, GLubyte dst[4]) 4028{ 4029 uint8_t *src = (uint8_t *)void_src; 4030 uint8_t l = src[0]; 4031 4032 4033 4034 dst[0] = _mesa_unorm_to_unorm(l, 8, 8); 4035 4036 4037 dst[1] = _mesa_unorm_to_unorm(l, 8, 8); 4038 4039 4040 dst[2] = _mesa_unorm_to_unorm(l, 8, 8); 4041 4042 dst[3] = 255; 4043} 4044 4045static inline void 4046unpack_ubyte_bgr_srgb8(const void *void_src, GLubyte dst[4]) 4047{ 4048 uint8_t *src = (uint8_t *)void_src; 4049 uint8_t b = src[0]; 4050 uint8_t g = src[1]; 4051 uint8_t r = src[2]; 4052 4053 4054 4055 4056 dst[0] = util_format_srgb_to_linear_8unorm(r); 4057 4058 4059 4060 dst[1] = util_format_srgb_to_linear_8unorm(g); 4061 4062 4063 4064 dst[2] = util_format_srgb_to_linear_8unorm(b); 4065 4066 dst[3] = 255; 4067} 4068 4069/* integer packing functions */ 4070 4071 4072static inline void 4073unpack_int_a8b8g8r8_uint(const void *void_src, GLuint dst[4]) 4074{ 4075 uint32_t *src = (uint32_t *)void_src; 4076 uint8_t a = UNPACK(*src, 0, 8); 4077 uint8_t b = UNPACK(*src, 8, 8); 4078 uint8_t g = UNPACK(*src, 16, 8); 4079 uint8_t r = UNPACK(*src, 24, 8); 4080 4081 4082 dst[0] = r; 4083 4084 dst[1] = g; 4085 4086 dst[2] = b; 4087 4088 dst[3] = a; 4089} 4090 4091static inline void 4092unpack_int_a8r8g8b8_uint(const void *void_src, GLuint dst[4]) 4093{ 4094 uint32_t *src = (uint32_t *)void_src; 4095 uint8_t a = UNPACK(*src, 0, 8); 4096 uint8_t r = UNPACK(*src, 8, 8); 4097 uint8_t g = UNPACK(*src, 16, 8); 4098 uint8_t b = UNPACK(*src, 24, 8); 4099 4100 4101 dst[0] = r; 4102 4103 dst[1] = g; 4104 4105 dst[2] = b; 4106 4107 dst[3] = a; 4108} 4109 4110static inline void 4111unpack_int_r8g8b8a8_uint(const void *void_src, GLuint dst[4]) 4112{ 4113 uint32_t *src = (uint32_t *)void_src; 4114 uint8_t r = UNPACK(*src, 0, 8); 4115 uint8_t g = UNPACK(*src, 8, 8); 4116 uint8_t b = UNPACK(*src, 16, 8); 4117 uint8_t a = UNPACK(*src, 24, 8); 4118 4119 4120 dst[0] = r; 4121 4122 dst[1] = g; 4123 4124 dst[2] = b; 4125 4126 dst[3] = a; 4127} 4128 4129static inline void 4130unpack_int_b8g8r8a8_uint(const void *void_src, GLuint dst[4]) 4131{ 4132 uint32_t *src = (uint32_t *)void_src; 4133 uint8_t b = UNPACK(*src, 0, 8); 4134 uint8_t g = UNPACK(*src, 8, 8); 4135 uint8_t r = UNPACK(*src, 16, 8); 4136 uint8_t a = UNPACK(*src, 24, 8); 4137 4138 4139 dst[0] = r; 4140 4141 dst[1] = g; 4142 4143 dst[2] = b; 4144 4145 dst[3] = a; 4146} 4147 4148static inline void 4149unpack_int_b10g10r10a2_uint(const void *void_src, GLuint dst[4]) 4150{ 4151 uint32_t *src = (uint32_t *)void_src; 4152 uint16_t b = UNPACK(*src, 0, 10); 4153 uint16_t g = UNPACK(*src, 10, 10); 4154 uint16_t r = UNPACK(*src, 20, 10); 4155 uint8_t a = UNPACK(*src, 30, 2); 4156 4157 4158 dst[0] = r; 4159 4160 dst[1] = g; 4161 4162 dst[2] = b; 4163 4164 dst[3] = a; 4165} 4166 4167static inline void 4168unpack_int_r10g10b10a2_uint(const void *void_src, GLuint dst[4]) 4169{ 4170 uint32_t *src = (uint32_t *)void_src; 4171 uint16_t r = UNPACK(*src, 0, 10); 4172 uint16_t g = UNPACK(*src, 10, 10); 4173 uint16_t b = UNPACK(*src, 20, 10); 4174 uint8_t a = UNPACK(*src, 30, 2); 4175 4176 4177 dst[0] = r; 4178 4179 dst[1] = g; 4180 4181 dst[2] = b; 4182 4183 dst[3] = a; 4184} 4185 4186static inline void 4187unpack_int_a2b10g10r10_uint(const void *void_src, GLuint dst[4]) 4188{ 4189 uint32_t *src = (uint32_t *)void_src; 4190 uint8_t a = UNPACK(*src, 0, 2); 4191 uint16_t b = UNPACK(*src, 2, 10); 4192 uint16_t g = UNPACK(*src, 12, 10); 4193 uint16_t r = UNPACK(*src, 22, 10); 4194 4195 4196 dst[0] = r; 4197 4198 dst[1] = g; 4199 4200 dst[2] = b; 4201 4202 dst[3] = a; 4203} 4204 4205static inline void 4206unpack_int_a2r10g10b10_uint(const void *void_src, GLuint dst[4]) 4207{ 4208 uint32_t *src = (uint32_t *)void_src; 4209 uint8_t a = UNPACK(*src, 0, 2); 4210 uint16_t r = UNPACK(*src, 2, 10); 4211 uint16_t g = UNPACK(*src, 12, 10); 4212 uint16_t b = UNPACK(*src, 22, 10); 4213 4214 4215 dst[0] = r; 4216 4217 dst[1] = g; 4218 4219 dst[2] = b; 4220 4221 dst[3] = a; 4222} 4223 4224static inline void 4225unpack_int_b5g6r5_uint(const void *void_src, GLuint dst[4]) 4226{ 4227 uint16_t *src = (uint16_t *)void_src; 4228 uint8_t b = UNPACK(*src, 0, 5); 4229 uint8_t g = UNPACK(*src, 5, 6); 4230 uint8_t r = UNPACK(*src, 11, 5); 4231 4232 4233 dst[0] = r; 4234 4235 dst[1] = g; 4236 4237 dst[2] = b; 4238 4239 dst[3] = 1; 4240} 4241 4242static inline void 4243unpack_int_r5g6b5_uint(const void *void_src, GLuint dst[4]) 4244{ 4245 uint16_t *src = (uint16_t *)void_src; 4246 uint8_t r = UNPACK(*src, 0, 5); 4247 uint8_t g = UNPACK(*src, 5, 6); 4248 uint8_t b = UNPACK(*src, 11, 5); 4249 4250 4251 dst[0] = r; 4252 4253 dst[1] = g; 4254 4255 dst[2] = b; 4256 4257 dst[3] = 1; 4258} 4259 4260static inline void 4261unpack_int_b2g3r3_uint(const void *void_src, GLuint dst[4]) 4262{ 4263 uint8_t *src = (uint8_t *)void_src; 4264 uint8_t b = UNPACK(*src, 0, 2); 4265 uint8_t g = UNPACK(*src, 2, 3); 4266 uint8_t r = UNPACK(*src, 5, 3); 4267 4268 4269 dst[0] = r; 4270 4271 dst[1] = g; 4272 4273 dst[2] = b; 4274 4275 dst[3] = 1; 4276} 4277 4278static inline void 4279unpack_int_r3g3b2_uint(const void *void_src, GLuint dst[4]) 4280{ 4281 uint8_t *src = (uint8_t *)void_src; 4282 uint8_t r = UNPACK(*src, 0, 3); 4283 uint8_t g = UNPACK(*src, 3, 3); 4284 uint8_t b = UNPACK(*src, 6, 2); 4285 4286 4287 dst[0] = r; 4288 4289 dst[1] = g; 4290 4291 dst[2] = b; 4292 4293 dst[3] = 1; 4294} 4295 4296static inline void 4297unpack_int_a4b4g4r4_uint(const void *void_src, GLuint dst[4]) 4298{ 4299 uint16_t *src = (uint16_t *)void_src; 4300 uint8_t a = UNPACK(*src, 0, 4); 4301 uint8_t b = UNPACK(*src, 4, 4); 4302 uint8_t g = UNPACK(*src, 8, 4); 4303 uint8_t r = UNPACK(*src, 12, 4); 4304 4305 4306 dst[0] = r; 4307 4308 dst[1] = g; 4309 4310 dst[2] = b; 4311 4312 dst[3] = a; 4313} 4314 4315static inline void 4316unpack_int_r4g4b4a4_uint(const void *void_src, GLuint dst[4]) 4317{ 4318 uint16_t *src = (uint16_t *)void_src; 4319 uint8_t r = UNPACK(*src, 0, 4); 4320 uint8_t g = UNPACK(*src, 4, 4); 4321 uint8_t b = UNPACK(*src, 8, 4); 4322 uint8_t a = UNPACK(*src, 12, 4); 4323 4324 4325 dst[0] = r; 4326 4327 dst[1] = g; 4328 4329 dst[2] = b; 4330 4331 dst[3] = a; 4332} 4333 4334static inline void 4335unpack_int_b4g4r4a4_uint(const void *void_src, GLuint dst[4]) 4336{ 4337 uint16_t *src = (uint16_t *)void_src; 4338 uint8_t b = UNPACK(*src, 0, 4); 4339 uint8_t g = UNPACK(*src, 4, 4); 4340 uint8_t r = UNPACK(*src, 8, 4); 4341 uint8_t a = UNPACK(*src, 12, 4); 4342 4343 4344 dst[0] = r; 4345 4346 dst[1] = g; 4347 4348 dst[2] = b; 4349 4350 dst[3] = a; 4351} 4352 4353static inline void 4354unpack_int_a4r4g4b4_uint(const void *void_src, GLuint dst[4]) 4355{ 4356 uint16_t *src = (uint16_t *)void_src; 4357 uint8_t a = UNPACK(*src, 0, 4); 4358 uint8_t r = UNPACK(*src, 4, 4); 4359 uint8_t g = UNPACK(*src, 8, 4); 4360 uint8_t b = UNPACK(*src, 12, 4); 4361 4362 4363 dst[0] = r; 4364 4365 dst[1] = g; 4366 4367 dst[2] = b; 4368 4369 dst[3] = a; 4370} 4371 4372static inline void 4373unpack_int_a1b5g5r5_uint(const void *void_src, GLuint dst[4]) 4374{ 4375 uint16_t *src = (uint16_t *)void_src; 4376 uint8_t a = UNPACK(*src, 0, 1); 4377 uint8_t b = UNPACK(*src, 1, 5); 4378 uint8_t g = UNPACK(*src, 6, 5); 4379 uint8_t r = UNPACK(*src, 11, 5); 4380 4381 4382 dst[0] = r; 4383 4384 dst[1] = g; 4385 4386 dst[2] = b; 4387 4388 dst[3] = a; 4389} 4390 4391static inline void 4392unpack_int_b5g5r5a1_uint(const void *void_src, GLuint dst[4]) 4393{ 4394 uint16_t *src = (uint16_t *)void_src; 4395 uint8_t b = UNPACK(*src, 0, 5); 4396 uint8_t g = UNPACK(*src, 5, 5); 4397 uint8_t r = UNPACK(*src, 10, 5); 4398 uint8_t a = UNPACK(*src, 15, 1); 4399 4400 4401 dst[0] = r; 4402 4403 dst[1] = g; 4404 4405 dst[2] = b; 4406 4407 dst[3] = a; 4408} 4409 4410static inline void 4411unpack_int_a1r5g5b5_uint(const void *void_src, GLuint dst[4]) 4412{ 4413 uint16_t *src = (uint16_t *)void_src; 4414 uint8_t a = UNPACK(*src, 0, 1); 4415 uint8_t r = UNPACK(*src, 1, 5); 4416 uint8_t g = UNPACK(*src, 6, 5); 4417 uint8_t b = UNPACK(*src, 11, 5); 4418 4419 4420 dst[0] = r; 4421 4422 dst[1] = g; 4423 4424 dst[2] = b; 4425 4426 dst[3] = a; 4427} 4428 4429static inline void 4430unpack_int_r5g5b5a1_uint(const void *void_src, GLuint dst[4]) 4431{ 4432 uint16_t *src = (uint16_t *)void_src; 4433 uint8_t r = UNPACK(*src, 0, 5); 4434 uint8_t g = UNPACK(*src, 5, 5); 4435 uint8_t b = UNPACK(*src, 10, 5); 4436 uint8_t a = UNPACK(*src, 15, 1); 4437 4438 4439 dst[0] = r; 4440 4441 dst[1] = g; 4442 4443 dst[2] = b; 4444 4445 dst[3] = a; 4446} 4447 4448static inline void 4449unpack_int_a_uint8(const void *void_src, GLuint dst[4]) 4450{ 4451 uint8_t *src = (uint8_t *)void_src; 4452 uint8_t a = src[0]; 4453 4454 4455 dst[0] = 0; 4456 4457 dst[1] = 0; 4458 4459 dst[2] = 0; 4460 4461 dst[3] = a; 4462} 4463 4464static inline void 4465unpack_int_a_uint16(const void *void_src, GLuint dst[4]) 4466{ 4467 uint16_t *src = (uint16_t *)void_src; 4468 uint16_t a = src[0]; 4469 4470 4471 dst[0] = 0; 4472 4473 dst[1] = 0; 4474 4475 dst[2] = 0; 4476 4477 dst[3] = a; 4478} 4479 4480static inline void 4481unpack_int_a_uint32(const void *void_src, GLuint dst[4]) 4482{ 4483 uint32_t *src = (uint32_t *)void_src; 4484 uint32_t a = src[0]; 4485 4486 4487 dst[0] = 0; 4488 4489 dst[1] = 0; 4490 4491 dst[2] = 0; 4492 4493 dst[3] = a; 4494} 4495 4496static inline void 4497unpack_int_a_sint8(const void *void_src, GLuint dst[4]) 4498{ 4499 int8_t *src = (int8_t *)void_src; 4500 int8_t a = src[0]; 4501 4502 4503 dst[0] = 0; 4504 4505 dst[1] = 0; 4506 4507 dst[2] = 0; 4508 4509 dst[3] = a; 4510} 4511 4512static inline void 4513unpack_int_a_sint16(const void *void_src, GLuint dst[4]) 4514{ 4515 int16_t *src = (int16_t *)void_src; 4516 int16_t a = src[0]; 4517 4518 4519 dst[0] = 0; 4520 4521 dst[1] = 0; 4522 4523 dst[2] = 0; 4524 4525 dst[3] = a; 4526} 4527 4528static inline void 4529unpack_int_a_sint32(const void *void_src, GLuint dst[4]) 4530{ 4531 int32_t *src = (int32_t *)void_src; 4532 int32_t a = src[0]; 4533 4534 4535 dst[0] = 0; 4536 4537 dst[1] = 0; 4538 4539 dst[2] = 0; 4540 4541 dst[3] = a; 4542} 4543 4544static inline void 4545unpack_int_i_uint8(const void *void_src, GLuint dst[4]) 4546{ 4547 uint8_t *src = (uint8_t *)void_src; 4548 uint8_t i = src[0]; 4549 4550 4551 dst[0] = i; 4552 4553 dst[1] = i; 4554 4555 dst[2] = i; 4556 4557 dst[3] = i; 4558} 4559 4560static inline void 4561unpack_int_i_uint16(const void *void_src, GLuint dst[4]) 4562{ 4563 uint16_t *src = (uint16_t *)void_src; 4564 uint16_t i = src[0]; 4565 4566 4567 dst[0] = i; 4568 4569 dst[1] = i; 4570 4571 dst[2] = i; 4572 4573 dst[3] = i; 4574} 4575 4576static inline void 4577unpack_int_i_uint32(const void *void_src, GLuint dst[4]) 4578{ 4579 uint32_t *src = (uint32_t *)void_src; 4580 uint32_t i = src[0]; 4581 4582 4583 dst[0] = i; 4584 4585 dst[1] = i; 4586 4587 dst[2] = i; 4588 4589 dst[3] = i; 4590} 4591 4592static inline void 4593unpack_int_i_sint8(const void *void_src, GLuint dst[4]) 4594{ 4595 int8_t *src = (int8_t *)void_src; 4596 int8_t i = src[0]; 4597 4598 4599 dst[0] = i; 4600 4601 dst[1] = i; 4602 4603 dst[2] = i; 4604 4605 dst[3] = i; 4606} 4607 4608static inline void 4609unpack_int_i_sint16(const void *void_src, GLuint dst[4]) 4610{ 4611 int16_t *src = (int16_t *)void_src; 4612 int16_t i = src[0]; 4613 4614 4615 dst[0] = i; 4616 4617 dst[1] = i; 4618 4619 dst[2] = i; 4620 4621 dst[3] = i; 4622} 4623 4624static inline void 4625unpack_int_i_sint32(const void *void_src, GLuint dst[4]) 4626{ 4627 int32_t *src = (int32_t *)void_src; 4628 int32_t i = src[0]; 4629 4630 4631 dst[0] = i; 4632 4633 dst[1] = i; 4634 4635 dst[2] = i; 4636 4637 dst[3] = i; 4638} 4639 4640static inline void 4641unpack_int_l_uint8(const void *void_src, GLuint dst[4]) 4642{ 4643 uint8_t *src = (uint8_t *)void_src; 4644 uint8_t l = src[0]; 4645 4646 4647 dst[0] = l; 4648 4649 dst[1] = l; 4650 4651 dst[2] = l; 4652 4653 dst[3] = 1; 4654} 4655 4656static inline void 4657unpack_int_l_uint16(const void *void_src, GLuint dst[4]) 4658{ 4659 uint16_t *src = (uint16_t *)void_src; 4660 uint16_t l = src[0]; 4661 4662 4663 dst[0] = l; 4664 4665 dst[1] = l; 4666 4667 dst[2] = l; 4668 4669 dst[3] = 1; 4670} 4671 4672static inline void 4673unpack_int_l_uint32(const void *void_src, GLuint dst[4]) 4674{ 4675 uint32_t *src = (uint32_t *)void_src; 4676 uint32_t l = src[0]; 4677 4678 4679 dst[0] = l; 4680 4681 dst[1] = l; 4682 4683 dst[2] = l; 4684 4685 dst[3] = 1; 4686} 4687 4688static inline void 4689unpack_int_l_sint8(const void *void_src, GLuint dst[4]) 4690{ 4691 int8_t *src = (int8_t *)void_src; 4692 int8_t l = src[0]; 4693 4694 4695 dst[0] = l; 4696 4697 dst[1] = l; 4698 4699 dst[2] = l; 4700 4701 dst[3] = 1; 4702} 4703 4704static inline void 4705unpack_int_l_sint16(const void *void_src, GLuint dst[4]) 4706{ 4707 int16_t *src = (int16_t *)void_src; 4708 int16_t l = src[0]; 4709 4710 4711 dst[0] = l; 4712 4713 dst[1] = l; 4714 4715 dst[2] = l; 4716 4717 dst[3] = 1; 4718} 4719 4720static inline void 4721unpack_int_l_sint32(const void *void_src, GLuint dst[4]) 4722{ 4723 int32_t *src = (int32_t *)void_src; 4724 int32_t l = src[0]; 4725 4726 4727 dst[0] = l; 4728 4729 dst[1] = l; 4730 4731 dst[2] = l; 4732 4733 dst[3] = 1; 4734} 4735 4736static inline void 4737unpack_int_la_uint8(const void *void_src, GLuint dst[4]) 4738{ 4739 uint8_t *src = (uint8_t *)void_src; 4740 uint8_t l = src[0]; 4741 uint8_t a = src[1]; 4742 4743 4744 dst[0] = l; 4745 4746 dst[1] = l; 4747 4748 dst[2] = l; 4749 4750 dst[3] = a; 4751} 4752 4753static inline void 4754unpack_int_la_uint16(const void *void_src, GLuint dst[4]) 4755{ 4756 uint16_t *src = (uint16_t *)void_src; 4757 uint16_t l = src[0]; 4758 uint16_t a = src[1]; 4759 4760 4761 dst[0] = l; 4762 4763 dst[1] = l; 4764 4765 dst[2] = l; 4766 4767 dst[3] = a; 4768} 4769 4770static inline void 4771unpack_int_la_uint32(const void *void_src, GLuint dst[4]) 4772{ 4773 uint32_t *src = (uint32_t *)void_src; 4774 uint32_t l = src[0]; 4775 uint32_t a = src[1]; 4776 4777 4778 dst[0] = l; 4779 4780 dst[1] = l; 4781 4782 dst[2] = l; 4783 4784 dst[3] = a; 4785} 4786 4787static inline void 4788unpack_int_la_sint8(const void *void_src, GLuint dst[4]) 4789{ 4790 int8_t *src = (int8_t *)void_src; 4791 int8_t l = src[0]; 4792 int8_t a = src[1]; 4793 4794 4795 dst[0] = l; 4796 4797 dst[1] = l; 4798 4799 dst[2] = l; 4800 4801 dst[3] = a; 4802} 4803 4804static inline void 4805unpack_int_la_sint16(const void *void_src, GLuint dst[4]) 4806{ 4807 int16_t *src = (int16_t *)void_src; 4808 int16_t l = src[0]; 4809 int16_t a = src[1]; 4810 4811 4812 dst[0] = l; 4813 4814 dst[1] = l; 4815 4816 dst[2] = l; 4817 4818 dst[3] = a; 4819} 4820 4821static inline void 4822unpack_int_la_sint32(const void *void_src, GLuint dst[4]) 4823{ 4824 int32_t *src = (int32_t *)void_src; 4825 int32_t l = src[0]; 4826 int32_t a = src[1]; 4827 4828 4829 dst[0] = l; 4830 4831 dst[1] = l; 4832 4833 dst[2] = l; 4834 4835 dst[3] = a; 4836} 4837 4838static inline void 4839unpack_int_r_uint8(const void *void_src, GLuint dst[4]) 4840{ 4841 uint8_t *src = (uint8_t *)void_src; 4842 uint8_t r = src[0]; 4843 4844 4845 dst[0] = r; 4846 4847 dst[1] = 0; 4848 4849 dst[2] = 0; 4850 4851 dst[3] = 1; 4852} 4853 4854static inline void 4855unpack_int_r_uint16(const void *void_src, GLuint dst[4]) 4856{ 4857 uint16_t *src = (uint16_t *)void_src; 4858 uint16_t r = src[0]; 4859 4860 4861 dst[0] = r; 4862 4863 dst[1] = 0; 4864 4865 dst[2] = 0; 4866 4867 dst[3] = 1; 4868} 4869 4870static inline void 4871unpack_int_r_uint32(const void *void_src, GLuint dst[4]) 4872{ 4873 uint32_t *src = (uint32_t *)void_src; 4874 uint32_t r = src[0]; 4875 4876 4877 dst[0] = r; 4878 4879 dst[1] = 0; 4880 4881 dst[2] = 0; 4882 4883 dst[3] = 1; 4884} 4885 4886static inline void 4887unpack_int_r_sint8(const void *void_src, GLuint dst[4]) 4888{ 4889 int8_t *src = (int8_t *)void_src; 4890 int8_t r = src[0]; 4891 4892 4893 dst[0] = r; 4894 4895 dst[1] = 0; 4896 4897 dst[2] = 0; 4898 4899 dst[3] = 1; 4900} 4901 4902static inline void 4903unpack_int_r_sint16(const void *void_src, GLuint dst[4]) 4904{ 4905 int16_t *src = (int16_t *)void_src; 4906 int16_t r = src[0]; 4907 4908 4909 dst[0] = r; 4910 4911 dst[1] = 0; 4912 4913 dst[2] = 0; 4914 4915 dst[3] = 1; 4916} 4917 4918static inline void 4919unpack_int_r_sint32(const void *void_src, GLuint dst[4]) 4920{ 4921 int32_t *src = (int32_t *)void_src; 4922 int32_t r = src[0]; 4923 4924 4925 dst[0] = r; 4926 4927 dst[1] = 0; 4928 4929 dst[2] = 0; 4930 4931 dst[3] = 1; 4932} 4933 4934static inline void 4935unpack_int_rg_uint8(const void *void_src, GLuint dst[4]) 4936{ 4937 uint8_t *src = (uint8_t *)void_src; 4938 uint8_t r = src[0]; 4939 uint8_t g = src[1]; 4940 4941 4942 dst[0] = r; 4943 4944 dst[1] = g; 4945 4946 dst[2] = 0; 4947 4948 dst[3] = 1; 4949} 4950 4951static inline void 4952unpack_int_rg_uint16(const void *void_src, GLuint dst[4]) 4953{ 4954 uint16_t *src = (uint16_t *)void_src; 4955 uint16_t r = src[0]; 4956 uint16_t g = src[1]; 4957 4958 4959 dst[0] = r; 4960 4961 dst[1] = g; 4962 4963 dst[2] = 0; 4964 4965 dst[3] = 1; 4966} 4967 4968static inline void 4969unpack_int_rg_uint32(const void *void_src, GLuint dst[4]) 4970{ 4971 uint32_t *src = (uint32_t *)void_src; 4972 uint32_t r = src[0]; 4973 uint32_t g = src[1]; 4974 4975 4976 dst[0] = r; 4977 4978 dst[1] = g; 4979 4980 dst[2] = 0; 4981 4982 dst[3] = 1; 4983} 4984 4985static inline void 4986unpack_int_rg_sint8(const void *void_src, GLuint dst[4]) 4987{ 4988 int8_t *src = (int8_t *)void_src; 4989 int8_t r = src[0]; 4990 int8_t g = src[1]; 4991 4992 4993 dst[0] = r; 4994 4995 dst[1] = g; 4996 4997 dst[2] = 0; 4998 4999 dst[3] = 1; 5000} 5001 5002static inline void 5003unpack_int_rg_sint16(const void *void_src, GLuint dst[4]) 5004{ 5005 int16_t *src = (int16_t *)void_src; 5006 int16_t r = src[0]; 5007 int16_t g = src[1]; 5008 5009 5010 dst[0] = r; 5011 5012 dst[1] = g; 5013 5014 dst[2] = 0; 5015 5016 dst[3] = 1; 5017} 5018 5019static inline void 5020unpack_int_rg_sint32(const void *void_src, GLuint dst[4]) 5021{ 5022 int32_t *src = (int32_t *)void_src; 5023 int32_t r = src[0]; 5024 int32_t g = src[1]; 5025 5026 5027 dst[0] = r; 5028 5029 dst[1] = g; 5030 5031 dst[2] = 0; 5032 5033 dst[3] = 1; 5034} 5035 5036static inline void 5037unpack_int_rgb_uint8(const void *void_src, GLuint dst[4]) 5038{ 5039 uint8_t *src = (uint8_t *)void_src; 5040 uint8_t r = src[0]; 5041 uint8_t g = src[1]; 5042 uint8_t b = src[2]; 5043 5044 5045 dst[0] = r; 5046 5047 dst[1] = g; 5048 5049 dst[2] = b; 5050 5051 dst[3] = 1; 5052} 5053 5054static inline void 5055unpack_int_rgb_uint16(const void *void_src, GLuint dst[4]) 5056{ 5057 uint16_t *src = (uint16_t *)void_src; 5058 uint16_t r = src[0]; 5059 uint16_t g = src[1]; 5060 uint16_t b = src[2]; 5061 5062 5063 dst[0] = r; 5064 5065 dst[1] = g; 5066 5067 dst[2] = b; 5068 5069 dst[3] = 1; 5070} 5071 5072static inline void 5073unpack_int_rgb_uint32(const void *void_src, GLuint dst[4]) 5074{ 5075 uint32_t *src = (uint32_t *)void_src; 5076 uint32_t r = src[0]; 5077 uint32_t g = src[1]; 5078 uint32_t b = src[2]; 5079 5080 5081 dst[0] = r; 5082 5083 dst[1] = g; 5084 5085 dst[2] = b; 5086 5087 dst[3] = 1; 5088} 5089 5090static inline void 5091unpack_int_rgb_sint8(const void *void_src, GLuint dst[4]) 5092{ 5093 int8_t *src = (int8_t *)void_src; 5094 int8_t r = src[0]; 5095 int8_t g = src[1]; 5096 int8_t b = src[2]; 5097 5098 5099 dst[0] = r; 5100 5101 dst[1] = g; 5102 5103 dst[2] = b; 5104 5105 dst[3] = 1; 5106} 5107 5108static inline void 5109unpack_int_rgb_sint16(const void *void_src, GLuint dst[4]) 5110{ 5111 int16_t *src = (int16_t *)void_src; 5112 int16_t r = src[0]; 5113 int16_t g = src[1]; 5114 int16_t b = src[2]; 5115 5116 5117 dst[0] = r; 5118 5119 dst[1] = g; 5120 5121 dst[2] = b; 5122 5123 dst[3] = 1; 5124} 5125 5126static inline void 5127unpack_int_rgb_sint32(const void *void_src, GLuint dst[4]) 5128{ 5129 int32_t *src = (int32_t *)void_src; 5130 int32_t r = src[0]; 5131 int32_t g = src[1]; 5132 int32_t b = src[2]; 5133 5134 5135 dst[0] = r; 5136 5137 dst[1] = g; 5138 5139 dst[2] = b; 5140 5141 dst[3] = 1; 5142} 5143 5144static inline void 5145unpack_int_rgba_uint8(const void *void_src, GLuint dst[4]) 5146{ 5147 uint8_t *src = (uint8_t *)void_src; 5148 uint8_t r = src[0]; 5149 uint8_t g = src[1]; 5150 uint8_t b = src[2]; 5151 uint8_t a = src[3]; 5152 5153 5154 dst[0] = r; 5155 5156 dst[1] = g; 5157 5158 dst[2] = b; 5159 5160 dst[3] = a; 5161} 5162 5163static inline void 5164unpack_int_rgba_uint16(const void *void_src, GLuint dst[4]) 5165{ 5166 uint16_t *src = (uint16_t *)void_src; 5167 uint16_t r = src[0]; 5168 uint16_t g = src[1]; 5169 uint16_t b = src[2]; 5170 uint16_t a = src[3]; 5171 5172 5173 dst[0] = r; 5174 5175 dst[1] = g; 5176 5177 dst[2] = b; 5178 5179 dst[3] = a; 5180} 5181 5182static inline void 5183unpack_int_rgba_uint32(const void *void_src, GLuint dst[4]) 5184{ 5185 uint32_t *src = (uint32_t *)void_src; 5186 uint32_t r = src[0]; 5187 uint32_t g = src[1]; 5188 uint32_t b = src[2]; 5189 uint32_t a = src[3]; 5190 5191 5192 dst[0] = r; 5193 5194 dst[1] = g; 5195 5196 dst[2] = b; 5197 5198 dst[3] = a; 5199} 5200 5201static inline void 5202unpack_int_rgba_sint8(const void *void_src, GLuint dst[4]) 5203{ 5204 int8_t *src = (int8_t *)void_src; 5205 int8_t r = src[0]; 5206 int8_t g = src[1]; 5207 int8_t b = src[2]; 5208 int8_t a = src[3]; 5209 5210 5211 dst[0] = r; 5212 5213 dst[1] = g; 5214 5215 dst[2] = b; 5216 5217 dst[3] = a; 5218} 5219 5220static inline void 5221unpack_int_rgba_sint16(const void *void_src, GLuint dst[4]) 5222{ 5223 int16_t *src = (int16_t *)void_src; 5224 int16_t r = src[0]; 5225 int16_t g = src[1]; 5226 int16_t b = src[2]; 5227 int16_t a = src[3]; 5228 5229 5230 dst[0] = r; 5231 5232 dst[1] = g; 5233 5234 dst[2] = b; 5235 5236 dst[3] = a; 5237} 5238 5239static inline void 5240unpack_int_rgba_sint32(const void *void_src, GLuint dst[4]) 5241{ 5242 int32_t *src = (int32_t *)void_src; 5243 int32_t r = src[0]; 5244 int32_t g = src[1]; 5245 int32_t b = src[2]; 5246 int32_t a = src[3]; 5247 5248 5249 dst[0] = r; 5250 5251 dst[1] = g; 5252 5253 dst[2] = b; 5254 5255 dst[3] = a; 5256} 5257 5258static inline void 5259unpack_int_rgbx_uint8(const void *void_src, GLuint dst[4]) 5260{ 5261 uint8_t *src = (uint8_t *)void_src; 5262 uint8_t r = src[0]; 5263 uint8_t g = src[1]; 5264 uint8_t b = src[2]; 5265 5266 5267 dst[0] = r; 5268 5269 dst[1] = g; 5270 5271 dst[2] = b; 5272 5273 dst[3] = 1; 5274} 5275 5276static inline void 5277unpack_int_rgbx_uint16(const void *void_src, GLuint dst[4]) 5278{ 5279 uint16_t *src = (uint16_t *)void_src; 5280 uint16_t r = src[0]; 5281 uint16_t g = src[1]; 5282 uint16_t b = src[2]; 5283 5284 5285 dst[0] = r; 5286 5287 dst[1] = g; 5288 5289 dst[2] = b; 5290 5291 dst[3] = 1; 5292} 5293 5294static inline void 5295unpack_int_rgbx_uint32(const void *void_src, GLuint dst[4]) 5296{ 5297 uint32_t *src = (uint32_t *)void_src; 5298 uint32_t r = src[0]; 5299 uint32_t g = src[1]; 5300 uint32_t b = src[2]; 5301 5302 5303 dst[0] = r; 5304 5305 dst[1] = g; 5306 5307 dst[2] = b; 5308 5309 dst[3] = 1; 5310} 5311 5312static inline void 5313unpack_int_rgbx_sint8(const void *void_src, GLuint dst[4]) 5314{ 5315 int8_t *src = (int8_t *)void_src; 5316 int8_t r = src[0]; 5317 int8_t g = src[1]; 5318 int8_t b = src[2]; 5319 5320 5321 dst[0] = r; 5322 5323 dst[1] = g; 5324 5325 dst[2] = b; 5326 5327 dst[3] = 1; 5328} 5329 5330static inline void 5331unpack_int_rgbx_sint16(const void *void_src, GLuint dst[4]) 5332{ 5333 int16_t *src = (int16_t *)void_src; 5334 int16_t r = src[0]; 5335 int16_t g = src[1]; 5336 int16_t b = src[2]; 5337 5338 5339 dst[0] = r; 5340 5341 dst[1] = g; 5342 5343 dst[2] = b; 5344 5345 dst[3] = 1; 5346} 5347 5348static inline void 5349unpack_int_rgbx_sint32(const void *void_src, GLuint dst[4]) 5350{ 5351 int32_t *src = (int32_t *)void_src; 5352 int32_t r = src[0]; 5353 int32_t g = src[1]; 5354 int32_t b = src[2]; 5355 5356 5357 dst[0] = r; 5358 5359 dst[1] = g; 5360 5361 dst[2] = b; 5362 5363 dst[3] = 1; 5364} 5365 5366 5367void 5368_mesa_unpack_rgba_row(mesa_format format, GLuint n, 5369 const void *src, GLfloat dst[][4]) 5370{ 5371 GLubyte *s = (GLubyte *)src; 5372 GLuint i; 5373 5374 switch (format) { 5375 case MESA_FORMAT_A8B8G8R8_UNORM: 5376 for (i = 0; i < n; ++i) { 5377 unpack_float_a8b8g8r8_unorm(s, dst[i]); 5378 s += 4; 5379 } 5380 break; 5381 case MESA_FORMAT_X8B8G8R8_UNORM: 5382 for (i = 0; i < n; ++i) { 5383 unpack_float_x8b8g8r8_unorm(s, dst[i]); 5384 s += 4; 5385 } 5386 break; 5387 case MESA_FORMAT_R8G8B8A8_UNORM: 5388 for (i = 0; i < n; ++i) { 5389 unpack_float_r8g8b8a8_unorm(s, dst[i]); 5390 s += 4; 5391 } 5392 break; 5393 case MESA_FORMAT_R8G8B8X8_UNORM: 5394 for (i = 0; i < n; ++i) { 5395 unpack_float_r8g8b8x8_unorm(s, dst[i]); 5396 s += 4; 5397 } 5398 break; 5399 case MESA_FORMAT_B8G8R8A8_UNORM: 5400 for (i = 0; i < n; ++i) { 5401 unpack_float_b8g8r8a8_unorm(s, dst[i]); 5402 s += 4; 5403 } 5404 break; 5405 case MESA_FORMAT_B8G8R8X8_UNORM: 5406 for (i = 0; i < n; ++i) { 5407 unpack_float_b8g8r8x8_unorm(s, dst[i]); 5408 s += 4; 5409 } 5410 break; 5411 case MESA_FORMAT_A8R8G8B8_UNORM: 5412 for (i = 0; i < n; ++i) { 5413 unpack_float_a8r8g8b8_unorm(s, dst[i]); 5414 s += 4; 5415 } 5416 break; 5417 case MESA_FORMAT_X8R8G8B8_UNORM: 5418 for (i = 0; i < n; ++i) { 5419 unpack_float_x8r8g8b8_unorm(s, dst[i]); 5420 s += 4; 5421 } 5422 break; 5423 case MESA_FORMAT_L16A16_UNORM: 5424 for (i = 0; i < n; ++i) { 5425 unpack_float_l16a16_unorm(s, dst[i]); 5426 s += 4; 5427 } 5428 break; 5429 case MESA_FORMAT_A16L16_UNORM: 5430 for (i = 0; i < n; ++i) { 5431 unpack_float_a16l16_unorm(s, dst[i]); 5432 s += 4; 5433 } 5434 break; 5435 case MESA_FORMAT_B5G6R5_UNORM: 5436 for (i = 0; i < n; ++i) { 5437 unpack_float_b5g6r5_unorm(s, dst[i]); 5438 s += 2; 5439 } 5440 break; 5441 case MESA_FORMAT_R5G6B5_UNORM: 5442 for (i = 0; i < n; ++i) { 5443 unpack_float_r5g6b5_unorm(s, dst[i]); 5444 s += 2; 5445 } 5446 break; 5447 case MESA_FORMAT_B4G4R4A4_UNORM: 5448 for (i = 0; i < n; ++i) { 5449 unpack_float_b4g4r4a4_unorm(s, dst[i]); 5450 s += 2; 5451 } 5452 break; 5453 case MESA_FORMAT_B4G4R4X4_UNORM: 5454 for (i = 0; i < n; ++i) { 5455 unpack_float_b4g4r4x4_unorm(s, dst[i]); 5456 s += 2; 5457 } 5458 break; 5459 case MESA_FORMAT_A4R4G4B4_UNORM: 5460 for (i = 0; i < n; ++i) { 5461 unpack_float_a4r4g4b4_unorm(s, dst[i]); 5462 s += 2; 5463 } 5464 break; 5465 case MESA_FORMAT_A1B5G5R5_UNORM: 5466 for (i = 0; i < n; ++i) { 5467 unpack_float_a1b5g5r5_unorm(s, dst[i]); 5468 s += 2; 5469 } 5470 break; 5471 case MESA_FORMAT_X1B5G5R5_UNORM: 5472 for (i = 0; i < n; ++i) { 5473 unpack_float_x1b5g5r5_unorm(s, dst[i]); 5474 s += 2; 5475 } 5476 break; 5477 case MESA_FORMAT_B5G5R5A1_UNORM: 5478 for (i = 0; i < n; ++i) { 5479 unpack_float_b5g5r5a1_unorm(s, dst[i]); 5480 s += 2; 5481 } 5482 break; 5483 case MESA_FORMAT_B5G5R5X1_UNORM: 5484 for (i = 0; i < n; ++i) { 5485 unpack_float_b5g5r5x1_unorm(s, dst[i]); 5486 s += 2; 5487 } 5488 break; 5489 case MESA_FORMAT_A1R5G5B5_UNORM: 5490 for (i = 0; i < n; ++i) { 5491 unpack_float_a1r5g5b5_unorm(s, dst[i]); 5492 s += 2; 5493 } 5494 break; 5495 case MESA_FORMAT_L8A8_UNORM: 5496 for (i = 0; i < n; ++i) { 5497 unpack_float_l8a8_unorm(s, dst[i]); 5498 s += 2; 5499 } 5500 break; 5501 case MESA_FORMAT_A8L8_UNORM: 5502 for (i = 0; i < n; ++i) { 5503 unpack_float_a8l8_unorm(s, dst[i]); 5504 s += 2; 5505 } 5506 break; 5507 case MESA_FORMAT_R8G8_UNORM: 5508 for (i = 0; i < n; ++i) { 5509 unpack_float_r8g8_unorm(s, dst[i]); 5510 s += 2; 5511 } 5512 break; 5513 case MESA_FORMAT_G8R8_UNORM: 5514 for (i = 0; i < n; ++i) { 5515 unpack_float_g8r8_unorm(s, dst[i]); 5516 s += 2; 5517 } 5518 break; 5519 case MESA_FORMAT_L4A4_UNORM: 5520 for (i = 0; i < n; ++i) { 5521 unpack_float_l4a4_unorm(s, dst[i]); 5522 s += 1; 5523 } 5524 break; 5525 case MESA_FORMAT_B2G3R3_UNORM: 5526 for (i = 0; i < n; ++i) { 5527 unpack_float_b2g3r3_unorm(s, dst[i]); 5528 s += 1; 5529 } 5530 break; 5531 case MESA_FORMAT_R16G16_UNORM: 5532 for (i = 0; i < n; ++i) { 5533 unpack_float_r16g16_unorm(s, dst[i]); 5534 s += 4; 5535 } 5536 break; 5537 case MESA_FORMAT_G16R16_UNORM: 5538 for (i = 0; i < n; ++i) { 5539 unpack_float_g16r16_unorm(s, dst[i]); 5540 s += 4; 5541 } 5542 break; 5543 case MESA_FORMAT_B10G10R10A2_UNORM: 5544 for (i = 0; i < n; ++i) { 5545 unpack_float_b10g10r10a2_unorm(s, dst[i]); 5546 s += 4; 5547 } 5548 break; 5549 case MESA_FORMAT_B10G10R10X2_UNORM: 5550 for (i = 0; i < n; ++i) { 5551 unpack_float_b10g10r10x2_unorm(s, dst[i]); 5552 s += 4; 5553 } 5554 break; 5555 case MESA_FORMAT_R10G10B10A2_UNORM: 5556 for (i = 0; i < n; ++i) { 5557 unpack_float_r10g10b10a2_unorm(s, dst[i]); 5558 s += 4; 5559 } 5560 break; 5561 case MESA_FORMAT_R10G10B10X2_UNORM: 5562 for (i = 0; i < n; ++i) { 5563 unpack_float_r10g10b10x2_unorm(s, dst[i]); 5564 s += 4; 5565 } 5566 break; 5567 case MESA_FORMAT_R3G3B2_UNORM: 5568 for (i = 0; i < n; ++i) { 5569 unpack_float_r3g3b2_unorm(s, dst[i]); 5570 s += 1; 5571 } 5572 break; 5573 case MESA_FORMAT_A4B4G4R4_UNORM: 5574 for (i = 0; i < n; ++i) { 5575 unpack_float_a4b4g4r4_unorm(s, dst[i]); 5576 s += 2; 5577 } 5578 break; 5579 case MESA_FORMAT_R4G4B4A4_UNORM: 5580 for (i = 0; i < n; ++i) { 5581 unpack_float_r4g4b4a4_unorm(s, dst[i]); 5582 s += 2; 5583 } 5584 break; 5585 case MESA_FORMAT_R5G5B5A1_UNORM: 5586 for (i = 0; i < n; ++i) { 5587 unpack_float_r5g5b5a1_unorm(s, dst[i]); 5588 s += 2; 5589 } 5590 break; 5591 case MESA_FORMAT_A2B10G10R10_UNORM: 5592 for (i = 0; i < n; ++i) { 5593 unpack_float_a2b10g10r10_unorm(s, dst[i]); 5594 s += 4; 5595 } 5596 break; 5597 case MESA_FORMAT_A2R10G10B10_UNORM: 5598 for (i = 0; i < n; ++i) { 5599 unpack_float_a2r10g10b10_unorm(s, dst[i]); 5600 s += 4; 5601 } 5602 break; 5603 case MESA_FORMAT_A_UNORM8: 5604 for (i = 0; i < n; ++i) { 5605 unpack_float_a_unorm8(s, dst[i]); 5606 s += 1; 5607 } 5608 break; 5609 case MESA_FORMAT_A_UNORM16: 5610 for (i = 0; i < n; ++i) { 5611 unpack_float_a_unorm16(s, dst[i]); 5612 s += 2; 5613 } 5614 break; 5615 case MESA_FORMAT_L_UNORM8: 5616 for (i = 0; i < n; ++i) { 5617 unpack_float_l_unorm8(s, dst[i]); 5618 s += 1; 5619 } 5620 break; 5621 case MESA_FORMAT_L_UNORM16: 5622 for (i = 0; i < n; ++i) { 5623 unpack_float_l_unorm16(s, dst[i]); 5624 s += 2; 5625 } 5626 break; 5627 case MESA_FORMAT_I_UNORM8: 5628 for (i = 0; i < n; ++i) { 5629 unpack_float_i_unorm8(s, dst[i]); 5630 s += 1; 5631 } 5632 break; 5633 case MESA_FORMAT_I_UNORM16: 5634 for (i = 0; i < n; ++i) { 5635 unpack_float_i_unorm16(s, dst[i]); 5636 s += 2; 5637 } 5638 break; 5639 case MESA_FORMAT_R_UNORM8: 5640 for (i = 0; i < n; ++i) { 5641 unpack_float_r_unorm8(s, dst[i]); 5642 s += 1; 5643 } 5644 break; 5645 case MESA_FORMAT_R_UNORM16: 5646 for (i = 0; i < n; ++i) { 5647 unpack_float_r_unorm16(s, dst[i]); 5648 s += 2; 5649 } 5650 break; 5651 case MESA_FORMAT_BGR_UNORM8: 5652 for (i = 0; i < n; ++i) { 5653 unpack_float_bgr_unorm8(s, dst[i]); 5654 s += 3; 5655 } 5656 break; 5657 case MESA_FORMAT_RGB_UNORM8: 5658 for (i = 0; i < n; ++i) { 5659 unpack_float_rgb_unorm8(s, dst[i]); 5660 s += 3; 5661 } 5662 break; 5663 case MESA_FORMAT_RGBA_UNORM16: 5664 for (i = 0; i < n; ++i) { 5665 unpack_float_rgba_unorm16(s, dst[i]); 5666 s += 8; 5667 } 5668 break; 5669 case MESA_FORMAT_RGBX_UNORM16: 5670 for (i = 0; i < n; ++i) { 5671 unpack_float_rgbx_unorm16(s, dst[i]); 5672 s += 8; 5673 } 5674 break; 5675 case MESA_FORMAT_A8B8G8R8_SNORM: 5676 for (i = 0; i < n; ++i) { 5677 unpack_float_a8b8g8r8_snorm(s, dst[i]); 5678 s += 4; 5679 } 5680 break; 5681 case MESA_FORMAT_X8B8G8R8_SNORM: 5682 for (i = 0; i < n; ++i) { 5683 unpack_float_x8b8g8r8_snorm(s, dst[i]); 5684 s += 4; 5685 } 5686 break; 5687 case MESA_FORMAT_R8G8B8A8_SNORM: 5688 for (i = 0; i < n; ++i) { 5689 unpack_float_r8g8b8a8_snorm(s, dst[i]); 5690 s += 4; 5691 } 5692 break; 5693 case MESA_FORMAT_R8G8B8X8_SNORM: 5694 for (i = 0; i < n; ++i) { 5695 unpack_float_r8g8b8x8_snorm(s, dst[i]); 5696 s += 4; 5697 } 5698 break; 5699 case MESA_FORMAT_R16G16_SNORM: 5700 for (i = 0; i < n; ++i) { 5701 unpack_float_r16g16_snorm(s, dst[i]); 5702 s += 4; 5703 } 5704 break; 5705 case MESA_FORMAT_G16R16_SNORM: 5706 for (i = 0; i < n; ++i) { 5707 unpack_float_g16r16_snorm(s, dst[i]); 5708 s += 4; 5709 } 5710 break; 5711 case MESA_FORMAT_R8G8_SNORM: 5712 for (i = 0; i < n; ++i) { 5713 unpack_float_r8g8_snorm(s, dst[i]); 5714 s += 2; 5715 } 5716 break; 5717 case MESA_FORMAT_G8R8_SNORM: 5718 for (i = 0; i < n; ++i) { 5719 unpack_float_g8r8_snorm(s, dst[i]); 5720 s += 2; 5721 } 5722 break; 5723 case MESA_FORMAT_L8A8_SNORM: 5724 for (i = 0; i < n; ++i) { 5725 unpack_float_l8a8_snorm(s, dst[i]); 5726 s += 2; 5727 } 5728 break; 5729 case MESA_FORMAT_A8L8_SNORM: 5730 for (i = 0; i < n; ++i) { 5731 unpack_float_a8l8_snorm(s, dst[i]); 5732 s += 2; 5733 } 5734 break; 5735 case MESA_FORMAT_A_SNORM8: 5736 for (i = 0; i < n; ++i) { 5737 unpack_float_a_snorm8(s, dst[i]); 5738 s += 1; 5739 } 5740 break; 5741 case MESA_FORMAT_A_SNORM16: 5742 for (i = 0; i < n; ++i) { 5743 unpack_float_a_snorm16(s, dst[i]); 5744 s += 2; 5745 } 5746 break; 5747 case MESA_FORMAT_L_SNORM8: 5748 for (i = 0; i < n; ++i) { 5749 unpack_float_l_snorm8(s, dst[i]); 5750 s += 1; 5751 } 5752 break; 5753 case MESA_FORMAT_L_SNORM16: 5754 for (i = 0; i < n; ++i) { 5755 unpack_float_l_snorm16(s, dst[i]); 5756 s += 2; 5757 } 5758 break; 5759 case MESA_FORMAT_I_SNORM8: 5760 for (i = 0; i < n; ++i) { 5761 unpack_float_i_snorm8(s, dst[i]); 5762 s += 1; 5763 } 5764 break; 5765 case MESA_FORMAT_I_SNORM16: 5766 for (i = 0; i < n; ++i) { 5767 unpack_float_i_snorm16(s, dst[i]); 5768 s += 2; 5769 } 5770 break; 5771 case MESA_FORMAT_R_SNORM8: 5772 for (i = 0; i < n; ++i) { 5773 unpack_float_r_snorm8(s, dst[i]); 5774 s += 1; 5775 } 5776 break; 5777 case MESA_FORMAT_R_SNORM16: 5778 for (i = 0; i < n; ++i) { 5779 unpack_float_r_snorm16(s, dst[i]); 5780 s += 2; 5781 } 5782 break; 5783 case MESA_FORMAT_LA_SNORM16: 5784 for (i = 0; i < n; ++i) { 5785 unpack_float_la_snorm16(s, dst[i]); 5786 s += 4; 5787 } 5788 break; 5789 case MESA_FORMAT_RGB_SNORM16: 5790 for (i = 0; i < n; ++i) { 5791 unpack_float_rgb_snorm16(s, dst[i]); 5792 s += 6; 5793 } 5794 break; 5795 case MESA_FORMAT_RGBA_SNORM16: 5796 for (i = 0; i < n; ++i) { 5797 unpack_float_rgba_snorm16(s, dst[i]); 5798 s += 8; 5799 } 5800 break; 5801 case MESA_FORMAT_RGBX_SNORM16: 5802 for (i = 0; i < n; ++i) { 5803 unpack_float_rgbx_snorm16(s, dst[i]); 5804 s += 8; 5805 } 5806 break; 5807 case MESA_FORMAT_A8B8G8R8_SRGB: 5808 for (i = 0; i < n; ++i) { 5809 unpack_float_a8b8g8r8_srgb(s, dst[i]); 5810 s += 4; 5811 } 5812 break; 5813 case MESA_FORMAT_B8G8R8A8_SRGB: 5814 for (i = 0; i < n; ++i) { 5815 unpack_float_b8g8r8a8_srgb(s, dst[i]); 5816 s += 4; 5817 } 5818 break; 5819 case MESA_FORMAT_A8R8G8B8_SRGB: 5820 for (i = 0; i < n; ++i) { 5821 unpack_float_a8r8g8b8_srgb(s, dst[i]); 5822 s += 4; 5823 } 5824 break; 5825 case MESA_FORMAT_B8G8R8X8_SRGB: 5826 for (i = 0; i < n; ++i) { 5827 unpack_float_b8g8r8x8_srgb(s, dst[i]); 5828 s += 4; 5829 } 5830 break; 5831 case MESA_FORMAT_X8R8G8B8_SRGB: 5832 for (i = 0; i < n; ++i) { 5833 unpack_float_x8r8g8b8_srgb(s, dst[i]); 5834 s += 4; 5835 } 5836 break; 5837 case MESA_FORMAT_R8G8B8A8_SRGB: 5838 for (i = 0; i < n; ++i) { 5839 unpack_float_r8g8b8a8_srgb(s, dst[i]); 5840 s += 4; 5841 } 5842 break; 5843 case MESA_FORMAT_R8G8B8X8_SRGB: 5844 for (i = 0; i < n; ++i) { 5845 unpack_float_r8g8b8x8_srgb(s, dst[i]); 5846 s += 4; 5847 } 5848 break; 5849 case MESA_FORMAT_X8B8G8R8_SRGB: 5850 for (i = 0; i < n; ++i) { 5851 unpack_float_x8b8g8r8_srgb(s, dst[i]); 5852 s += 4; 5853 } 5854 break; 5855 case MESA_FORMAT_L8A8_SRGB: 5856 for (i = 0; i < n; ++i) { 5857 unpack_float_l8a8_srgb(s, dst[i]); 5858 s += 2; 5859 } 5860 break; 5861 case MESA_FORMAT_A8L8_SRGB: 5862 for (i = 0; i < n; ++i) { 5863 unpack_float_a8l8_srgb(s, dst[i]); 5864 s += 2; 5865 } 5866 break; 5867 case MESA_FORMAT_R_SRGB8: 5868 for (i = 0; i < n; ++i) { 5869 unpack_float_r_srgb8(s, dst[i]); 5870 s += 1; 5871 } 5872 break; 5873 case MESA_FORMAT_L_SRGB8: 5874 for (i = 0; i < n; ++i) { 5875 unpack_float_l_srgb8(s, dst[i]); 5876 s += 1; 5877 } 5878 break; 5879 case MESA_FORMAT_BGR_SRGB8: 5880 for (i = 0; i < n; ++i) { 5881 unpack_float_bgr_srgb8(s, dst[i]); 5882 s += 3; 5883 } 5884 break; 5885 case MESA_FORMAT_R9G9B9E5_FLOAT: 5886 for (i = 0; i < n; ++i) { 5887 unpack_float_r9g9b9e5_float(s, dst[i]); 5888 s += 4; 5889 } 5890 break; 5891 case MESA_FORMAT_R11G11B10_FLOAT: 5892 for (i = 0; i < n; ++i) { 5893 unpack_float_r11g11b10_float(s, dst[i]); 5894 s += 4; 5895 } 5896 break; 5897 case MESA_FORMAT_A_FLOAT16: 5898 for (i = 0; i < n; ++i) { 5899 unpack_float_a_float16(s, dst[i]); 5900 s += 2; 5901 } 5902 break; 5903 case MESA_FORMAT_A_FLOAT32: 5904 for (i = 0; i < n; ++i) { 5905 unpack_float_a_float32(s, dst[i]); 5906 s += 4; 5907 } 5908 break; 5909 case MESA_FORMAT_L_FLOAT16: 5910 for (i = 0; i < n; ++i) { 5911 unpack_float_l_float16(s, dst[i]); 5912 s += 2; 5913 } 5914 break; 5915 case MESA_FORMAT_L_FLOAT32: 5916 for (i = 0; i < n; ++i) { 5917 unpack_float_l_float32(s, dst[i]); 5918 s += 4; 5919 } 5920 break; 5921 case MESA_FORMAT_LA_FLOAT16: 5922 for (i = 0; i < n; ++i) { 5923 unpack_float_la_float16(s, dst[i]); 5924 s += 4; 5925 } 5926 break; 5927 case MESA_FORMAT_LA_FLOAT32: 5928 for (i = 0; i < n; ++i) { 5929 unpack_float_la_float32(s, dst[i]); 5930 s += 8; 5931 } 5932 break; 5933 case MESA_FORMAT_I_FLOAT16: 5934 for (i = 0; i < n; ++i) { 5935 unpack_float_i_float16(s, dst[i]); 5936 s += 2; 5937 } 5938 break; 5939 case MESA_FORMAT_I_FLOAT32: 5940 for (i = 0; i < n; ++i) { 5941 unpack_float_i_float32(s, dst[i]); 5942 s += 4; 5943 } 5944 break; 5945 case MESA_FORMAT_R_FLOAT16: 5946 for (i = 0; i < n; ++i) { 5947 unpack_float_r_float16(s, dst[i]); 5948 s += 2; 5949 } 5950 break; 5951 case MESA_FORMAT_R_FLOAT32: 5952 for (i = 0; i < n; ++i) { 5953 unpack_float_r_float32(s, dst[i]); 5954 s += 4; 5955 } 5956 break; 5957 case MESA_FORMAT_RG_FLOAT16: 5958 for (i = 0; i < n; ++i) { 5959 unpack_float_rg_float16(s, dst[i]); 5960 s += 4; 5961 } 5962 break; 5963 case MESA_FORMAT_RG_FLOAT32: 5964 for (i = 0; i < n; ++i) { 5965 unpack_float_rg_float32(s, dst[i]); 5966 s += 8; 5967 } 5968 break; 5969 case MESA_FORMAT_RGB_FLOAT16: 5970 for (i = 0; i < n; ++i) { 5971 unpack_float_rgb_float16(s, dst[i]); 5972 s += 6; 5973 } 5974 break; 5975 case MESA_FORMAT_RGB_FLOAT32: 5976 for (i = 0; i < n; ++i) { 5977 unpack_float_rgb_float32(s, dst[i]); 5978 s += 12; 5979 } 5980 break; 5981 case MESA_FORMAT_RGBA_FLOAT16: 5982 for (i = 0; i < n; ++i) { 5983 unpack_float_rgba_float16(s, dst[i]); 5984 s += 8; 5985 } 5986 break; 5987 case MESA_FORMAT_RGBA_FLOAT32: 5988 for (i = 0; i < n; ++i) { 5989 unpack_float_rgba_float32(s, dst[i]); 5990 s += 16; 5991 } 5992 break; 5993 case MESA_FORMAT_RGBX_FLOAT16: 5994 for (i = 0; i < n; ++i) { 5995 unpack_float_rgbx_float16(s, dst[i]); 5996 s += 8; 5997 } 5998 break; 5999 case MESA_FORMAT_RGBX_FLOAT32: 6000 for (i = 0; i < n; ++i) { 6001 unpack_float_rgbx_float32(s, dst[i]); 6002 s += 16; 6003 } 6004 break; 6005 case MESA_FORMAT_YCBCR: 6006 unpack_float_ycbcr(src, dst, n); 6007 break; 6008 case MESA_FORMAT_YCBCR_REV: 6009 unpack_float_ycbcr_rev(src, dst, n); 6010 break; 6011 default: 6012 _mesa_problem(NULL, "%s: bad format %s", __func__, 6013 _mesa_get_format_name(format)); 6014 return; 6015 } 6016} 6017 6018void 6019_mesa_unpack_ubyte_rgba_row(mesa_format format, GLuint n, 6020 const void *src, GLubyte dst[][4]) 6021{ 6022 GLubyte *s = (GLubyte *)src; 6023 GLuint i; 6024 6025 switch (format) { 6026 6027 case MESA_FORMAT_A8B8G8R8_UNORM: 6028 for (i = 0; i < n; ++i) { 6029 unpack_ubyte_a8b8g8r8_unorm(s, dst[i]); 6030 s += 4; 6031 } 6032 break; 6033 6034 case MESA_FORMAT_X8B8G8R8_UNORM: 6035 for (i = 0; i < n; ++i) { 6036 unpack_ubyte_x8b8g8r8_unorm(s, dst[i]); 6037 s += 4; 6038 } 6039 break; 6040 6041 case MESA_FORMAT_R8G8B8A8_UNORM: 6042 for (i = 0; i < n; ++i) { 6043 unpack_ubyte_r8g8b8a8_unorm(s, dst[i]); 6044 s += 4; 6045 } 6046 break; 6047 6048 case MESA_FORMAT_R8G8B8X8_UNORM: 6049 for (i = 0; i < n; ++i) { 6050 unpack_ubyte_r8g8b8x8_unorm(s, dst[i]); 6051 s += 4; 6052 } 6053 break; 6054 6055 case MESA_FORMAT_B8G8R8A8_UNORM: 6056 for (i = 0; i < n; ++i) { 6057 unpack_ubyte_b8g8r8a8_unorm(s, dst[i]); 6058 s += 4; 6059 } 6060 break; 6061 6062 case MESA_FORMAT_B8G8R8X8_UNORM: 6063 for (i = 0; i < n; ++i) { 6064 unpack_ubyte_b8g8r8x8_unorm(s, dst[i]); 6065 s += 4; 6066 } 6067 break; 6068 6069 case MESA_FORMAT_A8R8G8B8_UNORM: 6070 for (i = 0; i < n; ++i) { 6071 unpack_ubyte_a8r8g8b8_unorm(s, dst[i]); 6072 s += 4; 6073 } 6074 break; 6075 6076 case MESA_FORMAT_X8R8G8B8_UNORM: 6077 for (i = 0; i < n; ++i) { 6078 unpack_ubyte_x8r8g8b8_unorm(s, dst[i]); 6079 s += 4; 6080 } 6081 break; 6082 6083 case MESA_FORMAT_L16A16_UNORM: 6084 for (i = 0; i < n; ++i) { 6085 unpack_ubyte_l16a16_unorm(s, dst[i]); 6086 s += 4; 6087 } 6088 break; 6089 6090 case MESA_FORMAT_A16L16_UNORM: 6091 for (i = 0; i < n; ++i) { 6092 unpack_ubyte_a16l16_unorm(s, dst[i]); 6093 s += 4; 6094 } 6095 break; 6096 6097 case MESA_FORMAT_B5G6R5_UNORM: 6098 for (i = 0; i < n; ++i) { 6099 unpack_ubyte_b5g6r5_unorm(s, dst[i]); 6100 s += 2; 6101 } 6102 break; 6103 6104 case MESA_FORMAT_R5G6B5_UNORM: 6105 for (i = 0; i < n; ++i) { 6106 unpack_ubyte_r5g6b5_unorm(s, dst[i]); 6107 s += 2; 6108 } 6109 break; 6110 6111 case MESA_FORMAT_B4G4R4A4_UNORM: 6112 for (i = 0; i < n; ++i) { 6113 unpack_ubyte_b4g4r4a4_unorm(s, dst[i]); 6114 s += 2; 6115 } 6116 break; 6117 6118 case MESA_FORMAT_B4G4R4X4_UNORM: 6119 for (i = 0; i < n; ++i) { 6120 unpack_ubyte_b4g4r4x4_unorm(s, dst[i]); 6121 s += 2; 6122 } 6123 break; 6124 6125 case MESA_FORMAT_A4R4G4B4_UNORM: 6126 for (i = 0; i < n; ++i) { 6127 unpack_ubyte_a4r4g4b4_unorm(s, dst[i]); 6128 s += 2; 6129 } 6130 break; 6131 6132 case MESA_FORMAT_A1B5G5R5_UNORM: 6133 for (i = 0; i < n; ++i) { 6134 unpack_ubyte_a1b5g5r5_unorm(s, dst[i]); 6135 s += 2; 6136 } 6137 break; 6138 6139 case MESA_FORMAT_X1B5G5R5_UNORM: 6140 for (i = 0; i < n; ++i) { 6141 unpack_ubyte_x1b5g5r5_unorm(s, dst[i]); 6142 s += 2; 6143 } 6144 break; 6145 6146 case MESA_FORMAT_B5G5R5A1_UNORM: 6147 for (i = 0; i < n; ++i) { 6148 unpack_ubyte_b5g5r5a1_unorm(s, dst[i]); 6149 s += 2; 6150 } 6151 break; 6152 6153 case MESA_FORMAT_B5G5R5X1_UNORM: 6154 for (i = 0; i < n; ++i) { 6155 unpack_ubyte_b5g5r5x1_unorm(s, dst[i]); 6156 s += 2; 6157 } 6158 break; 6159 6160 case MESA_FORMAT_A1R5G5B5_UNORM: 6161 for (i = 0; i < n; ++i) { 6162 unpack_ubyte_a1r5g5b5_unorm(s, dst[i]); 6163 s += 2; 6164 } 6165 break; 6166 6167 case MESA_FORMAT_L8A8_UNORM: 6168 for (i = 0; i < n; ++i) { 6169 unpack_ubyte_l8a8_unorm(s, dst[i]); 6170 s += 2; 6171 } 6172 break; 6173 6174 case MESA_FORMAT_A8L8_UNORM: 6175 for (i = 0; i < n; ++i) { 6176 unpack_ubyte_a8l8_unorm(s, dst[i]); 6177 s += 2; 6178 } 6179 break; 6180 6181 case MESA_FORMAT_R8G8_UNORM: 6182 for (i = 0; i < n; ++i) { 6183 unpack_ubyte_r8g8_unorm(s, dst[i]); 6184 s += 2; 6185 } 6186 break; 6187 6188 case MESA_FORMAT_G8R8_UNORM: 6189 for (i = 0; i < n; ++i) { 6190 unpack_ubyte_g8r8_unorm(s, dst[i]); 6191 s += 2; 6192 } 6193 break; 6194 6195 case MESA_FORMAT_L4A4_UNORM: 6196 for (i = 0; i < n; ++i) { 6197 unpack_ubyte_l4a4_unorm(s, dst[i]); 6198 s += 1; 6199 } 6200 break; 6201 6202 case MESA_FORMAT_B2G3R3_UNORM: 6203 for (i = 0; i < n; ++i) { 6204 unpack_ubyte_b2g3r3_unorm(s, dst[i]); 6205 s += 1; 6206 } 6207 break; 6208 6209 case MESA_FORMAT_R16G16_UNORM: 6210 for (i = 0; i < n; ++i) { 6211 unpack_ubyte_r16g16_unorm(s, dst[i]); 6212 s += 4; 6213 } 6214 break; 6215 6216 case MESA_FORMAT_G16R16_UNORM: 6217 for (i = 0; i < n; ++i) { 6218 unpack_ubyte_g16r16_unorm(s, dst[i]); 6219 s += 4; 6220 } 6221 break; 6222 6223 case MESA_FORMAT_B10G10R10A2_UNORM: 6224 for (i = 0; i < n; ++i) { 6225 unpack_ubyte_b10g10r10a2_unorm(s, dst[i]); 6226 s += 4; 6227 } 6228 break; 6229 6230 case MESA_FORMAT_B10G10R10X2_UNORM: 6231 for (i = 0; i < n; ++i) { 6232 unpack_ubyte_b10g10r10x2_unorm(s, dst[i]); 6233 s += 4; 6234 } 6235 break; 6236 6237 case MESA_FORMAT_R10G10B10A2_UNORM: 6238 for (i = 0; i < n; ++i) { 6239 unpack_ubyte_r10g10b10a2_unorm(s, dst[i]); 6240 s += 4; 6241 } 6242 break; 6243 6244 case MESA_FORMAT_R10G10B10X2_UNORM: 6245 for (i = 0; i < n; ++i) { 6246 unpack_ubyte_r10g10b10x2_unorm(s, dst[i]); 6247 s += 4; 6248 } 6249 break; 6250 6251 case MESA_FORMAT_R3G3B2_UNORM: 6252 for (i = 0; i < n; ++i) { 6253 unpack_ubyte_r3g3b2_unorm(s, dst[i]); 6254 s += 1; 6255 } 6256 break; 6257 6258 case MESA_FORMAT_A4B4G4R4_UNORM: 6259 for (i = 0; i < n; ++i) { 6260 unpack_ubyte_a4b4g4r4_unorm(s, dst[i]); 6261 s += 2; 6262 } 6263 break; 6264 6265 case MESA_FORMAT_R4G4B4A4_UNORM: 6266 for (i = 0; i < n; ++i) { 6267 unpack_ubyte_r4g4b4a4_unorm(s, dst[i]); 6268 s += 2; 6269 } 6270 break; 6271 6272 case MESA_FORMAT_R5G5B5A1_UNORM: 6273 for (i = 0; i < n; ++i) { 6274 unpack_ubyte_r5g5b5a1_unorm(s, dst[i]); 6275 s += 2; 6276 } 6277 break; 6278 6279 case MESA_FORMAT_A2B10G10R10_UNORM: 6280 for (i = 0; i < n; ++i) { 6281 unpack_ubyte_a2b10g10r10_unorm(s, dst[i]); 6282 s += 4; 6283 } 6284 break; 6285 6286 case MESA_FORMAT_A2R10G10B10_UNORM: 6287 for (i = 0; i < n; ++i) { 6288 unpack_ubyte_a2r10g10b10_unorm(s, dst[i]); 6289 s += 4; 6290 } 6291 break; 6292 6293 case MESA_FORMAT_A_UNORM8: 6294 for (i = 0; i < n; ++i) { 6295 unpack_ubyte_a_unorm8(s, dst[i]); 6296 s += 1; 6297 } 6298 break; 6299 6300 case MESA_FORMAT_A_UNORM16: 6301 for (i = 0; i < n; ++i) { 6302 unpack_ubyte_a_unorm16(s, dst[i]); 6303 s += 2; 6304 } 6305 break; 6306 6307 case MESA_FORMAT_L_UNORM8: 6308 for (i = 0; i < n; ++i) { 6309 unpack_ubyte_l_unorm8(s, dst[i]); 6310 s += 1; 6311 } 6312 break; 6313 6314 case MESA_FORMAT_L_UNORM16: 6315 for (i = 0; i < n; ++i) { 6316 unpack_ubyte_l_unorm16(s, dst[i]); 6317 s += 2; 6318 } 6319 break; 6320 6321 case MESA_FORMAT_I_UNORM8: 6322 for (i = 0; i < n; ++i) { 6323 unpack_ubyte_i_unorm8(s, dst[i]); 6324 s += 1; 6325 } 6326 break; 6327 6328 case MESA_FORMAT_I_UNORM16: 6329 for (i = 0; i < n; ++i) { 6330 unpack_ubyte_i_unorm16(s, dst[i]); 6331 s += 2; 6332 } 6333 break; 6334 6335 case MESA_FORMAT_R_UNORM8: 6336 for (i = 0; i < n; ++i) { 6337 unpack_ubyte_r_unorm8(s, dst[i]); 6338 s += 1; 6339 } 6340 break; 6341 6342 case MESA_FORMAT_R_UNORM16: 6343 for (i = 0; i < n; ++i) { 6344 unpack_ubyte_r_unorm16(s, dst[i]); 6345 s += 2; 6346 } 6347 break; 6348 6349 case MESA_FORMAT_BGR_UNORM8: 6350 for (i = 0; i < n; ++i) { 6351 unpack_ubyte_bgr_unorm8(s, dst[i]); 6352 s += 3; 6353 } 6354 break; 6355 6356 case MESA_FORMAT_RGB_UNORM8: 6357 for (i = 0; i < n; ++i) { 6358 unpack_ubyte_rgb_unorm8(s, dst[i]); 6359 s += 3; 6360 } 6361 break; 6362 6363 case MESA_FORMAT_RGBA_UNORM16: 6364 for (i = 0; i < n; ++i) { 6365 unpack_ubyte_rgba_unorm16(s, dst[i]); 6366 s += 8; 6367 } 6368 break; 6369 6370 case MESA_FORMAT_RGBX_UNORM16: 6371 for (i = 0; i < n; ++i) { 6372 unpack_ubyte_rgbx_unorm16(s, dst[i]); 6373 s += 8; 6374 } 6375 break; 6376 6377 case MESA_FORMAT_A8B8G8R8_SNORM: 6378 for (i = 0; i < n; ++i) { 6379 unpack_ubyte_a8b8g8r8_snorm(s, dst[i]); 6380 s += 4; 6381 } 6382 break; 6383 6384 case MESA_FORMAT_X8B8G8R8_SNORM: 6385 for (i = 0; i < n; ++i) { 6386 unpack_ubyte_x8b8g8r8_snorm(s, dst[i]); 6387 s += 4; 6388 } 6389 break; 6390 6391 case MESA_FORMAT_R8G8B8A8_SNORM: 6392 for (i = 0; i < n; ++i) { 6393 unpack_ubyte_r8g8b8a8_snorm(s, dst[i]); 6394 s += 4; 6395 } 6396 break; 6397 6398 case MESA_FORMAT_R8G8B8X8_SNORM: 6399 for (i = 0; i < n; ++i) { 6400 unpack_ubyte_r8g8b8x8_snorm(s, dst[i]); 6401 s += 4; 6402 } 6403 break; 6404 6405 case MESA_FORMAT_R16G16_SNORM: 6406 for (i = 0; i < n; ++i) { 6407 unpack_ubyte_r16g16_snorm(s, dst[i]); 6408 s += 4; 6409 } 6410 break; 6411 6412 case MESA_FORMAT_G16R16_SNORM: 6413 for (i = 0; i < n; ++i) { 6414 unpack_ubyte_g16r16_snorm(s, dst[i]); 6415 s += 4; 6416 } 6417 break; 6418 6419 case MESA_FORMAT_R8G8_SNORM: 6420 for (i = 0; i < n; ++i) { 6421 unpack_ubyte_r8g8_snorm(s, dst[i]); 6422 s += 2; 6423 } 6424 break; 6425 6426 case MESA_FORMAT_G8R8_SNORM: 6427 for (i = 0; i < n; ++i) { 6428 unpack_ubyte_g8r8_snorm(s, dst[i]); 6429 s += 2; 6430 } 6431 break; 6432 6433 case MESA_FORMAT_L8A8_SNORM: 6434 for (i = 0; i < n; ++i) { 6435 unpack_ubyte_l8a8_snorm(s, dst[i]); 6436 s += 2; 6437 } 6438 break; 6439 6440 case MESA_FORMAT_A8L8_SNORM: 6441 for (i = 0; i < n; ++i) { 6442 unpack_ubyte_a8l8_snorm(s, dst[i]); 6443 s += 2; 6444 } 6445 break; 6446 6447 case MESA_FORMAT_A_SNORM8: 6448 for (i = 0; i < n; ++i) { 6449 unpack_ubyte_a_snorm8(s, dst[i]); 6450 s += 1; 6451 } 6452 break; 6453 6454 case MESA_FORMAT_A_SNORM16: 6455 for (i = 0; i < n; ++i) { 6456 unpack_ubyte_a_snorm16(s, dst[i]); 6457 s += 2; 6458 } 6459 break; 6460 6461 case MESA_FORMAT_L_SNORM8: 6462 for (i = 0; i < n; ++i) { 6463 unpack_ubyte_l_snorm8(s, dst[i]); 6464 s += 1; 6465 } 6466 break; 6467 6468 case MESA_FORMAT_L_SNORM16: 6469 for (i = 0; i < n; ++i) { 6470 unpack_ubyte_l_snorm16(s, dst[i]); 6471 s += 2; 6472 } 6473 break; 6474 6475 case MESA_FORMAT_I_SNORM8: 6476 for (i = 0; i < n; ++i) { 6477 unpack_ubyte_i_snorm8(s, dst[i]); 6478 s += 1; 6479 } 6480 break; 6481 6482 case MESA_FORMAT_I_SNORM16: 6483 for (i = 0; i < n; ++i) { 6484 unpack_ubyte_i_snorm16(s, dst[i]); 6485 s += 2; 6486 } 6487 break; 6488 6489 case MESA_FORMAT_R_SNORM8: 6490 for (i = 0; i < n; ++i) { 6491 unpack_ubyte_r_snorm8(s, dst[i]); 6492 s += 1; 6493 } 6494 break; 6495 6496 case MESA_FORMAT_R_SNORM16: 6497 for (i = 0; i < n; ++i) { 6498 unpack_ubyte_r_snorm16(s, dst[i]); 6499 s += 2; 6500 } 6501 break; 6502 6503 case MESA_FORMAT_LA_SNORM16: 6504 for (i = 0; i < n; ++i) { 6505 unpack_ubyte_la_snorm16(s, dst[i]); 6506 s += 4; 6507 } 6508 break; 6509 6510 case MESA_FORMAT_RGB_SNORM16: 6511 for (i = 0; i < n; ++i) { 6512 unpack_ubyte_rgb_snorm16(s, dst[i]); 6513 s += 6; 6514 } 6515 break; 6516 6517 case MESA_FORMAT_RGBA_SNORM16: 6518 for (i = 0; i < n; ++i) { 6519 unpack_ubyte_rgba_snorm16(s, dst[i]); 6520 s += 8; 6521 } 6522 break; 6523 6524 case MESA_FORMAT_RGBX_SNORM16: 6525 for (i = 0; i < n; ++i) { 6526 unpack_ubyte_rgbx_snorm16(s, dst[i]); 6527 s += 8; 6528 } 6529 break; 6530 6531 case MESA_FORMAT_A8B8G8R8_SRGB: 6532 for (i = 0; i < n; ++i) { 6533 unpack_ubyte_a8b8g8r8_srgb(s, dst[i]); 6534 s += 4; 6535 } 6536 break; 6537 6538 case MESA_FORMAT_B8G8R8A8_SRGB: 6539 for (i = 0; i < n; ++i) { 6540 unpack_ubyte_b8g8r8a8_srgb(s, dst[i]); 6541 s += 4; 6542 } 6543 break; 6544 6545 case MESA_FORMAT_A8R8G8B8_SRGB: 6546 for (i = 0; i < n; ++i) { 6547 unpack_ubyte_a8r8g8b8_srgb(s, dst[i]); 6548 s += 4; 6549 } 6550 break; 6551 6552 case MESA_FORMAT_B8G8R8X8_SRGB: 6553 for (i = 0; i < n; ++i) { 6554 unpack_ubyte_b8g8r8x8_srgb(s, dst[i]); 6555 s += 4; 6556 } 6557 break; 6558 6559 case MESA_FORMAT_X8R8G8B8_SRGB: 6560 for (i = 0; i < n; ++i) { 6561 unpack_ubyte_x8r8g8b8_srgb(s, dst[i]); 6562 s += 4; 6563 } 6564 break; 6565 6566 case MESA_FORMAT_R8G8B8A8_SRGB: 6567 for (i = 0; i < n; ++i) { 6568 unpack_ubyte_r8g8b8a8_srgb(s, dst[i]); 6569 s += 4; 6570 } 6571 break; 6572 6573 case MESA_FORMAT_R8G8B8X8_SRGB: 6574 for (i = 0; i < n; ++i) { 6575 unpack_ubyte_r8g8b8x8_srgb(s, dst[i]); 6576 s += 4; 6577 } 6578 break; 6579 6580 case MESA_FORMAT_X8B8G8R8_SRGB: 6581 for (i = 0; i < n; ++i) { 6582 unpack_ubyte_x8b8g8r8_srgb(s, dst[i]); 6583 s += 4; 6584 } 6585 break; 6586 6587 case MESA_FORMAT_L8A8_SRGB: 6588 for (i = 0; i < n; ++i) { 6589 unpack_ubyte_l8a8_srgb(s, dst[i]); 6590 s += 2; 6591 } 6592 break; 6593 6594 case MESA_FORMAT_A8L8_SRGB: 6595 for (i = 0; i < n; ++i) { 6596 unpack_ubyte_a8l8_srgb(s, dst[i]); 6597 s += 2; 6598 } 6599 break; 6600 6601 case MESA_FORMAT_R_SRGB8: 6602 for (i = 0; i < n; ++i) { 6603 unpack_ubyte_r_srgb8(s, dst[i]); 6604 s += 1; 6605 } 6606 break; 6607 6608 case MESA_FORMAT_L_SRGB8: 6609 for (i = 0; i < n; ++i) { 6610 unpack_ubyte_l_srgb8(s, dst[i]); 6611 s += 1; 6612 } 6613 break; 6614 6615 case MESA_FORMAT_BGR_SRGB8: 6616 for (i = 0; i < n; ++i) { 6617 unpack_ubyte_bgr_srgb8(s, dst[i]); 6618 s += 3; 6619 } 6620 break; 6621 default: 6622 /* get float values, convert to ubyte */ 6623 { 6624 GLfloat *tmp = malloc(n * 4 * sizeof(GLfloat)); 6625 if (tmp) { 6626 GLuint i; 6627 _mesa_unpack_rgba_row(format, n, src, (GLfloat (*)[4]) tmp); 6628 for (i = 0; i < n; i++) { 6629 dst[i][0] = _mesa_float_to_unorm(tmp[i*4+0], 8); 6630 dst[i][1] = _mesa_float_to_unorm(tmp[i*4+1], 8); 6631 dst[i][2] = _mesa_float_to_unorm(tmp[i*4+2], 8); 6632 dst[i][3] = _mesa_float_to_unorm(tmp[i*4+3], 8); 6633 } 6634 free(tmp); 6635 } 6636 } 6637 break; 6638 } 6639} 6640 6641void 6642_mesa_unpack_uint_rgba_row(mesa_format format, GLuint n, 6643 const void *src, GLuint dst[][4]) 6644{ 6645 GLubyte *s = (GLubyte *)src; 6646 GLuint i; 6647 6648 switch (format) { 6649 6650 case MESA_FORMAT_A8B8G8R8_UINT: 6651 for (i = 0; i < n; ++i) { 6652 unpack_int_a8b8g8r8_uint(s, dst[i]); 6653 s += 4; 6654 } 6655 break; 6656 6657 case MESA_FORMAT_A8R8G8B8_UINT: 6658 for (i = 0; i < n; ++i) { 6659 unpack_int_a8r8g8b8_uint(s, dst[i]); 6660 s += 4; 6661 } 6662 break; 6663 6664 case MESA_FORMAT_R8G8B8A8_UINT: 6665 for (i = 0; i < n; ++i) { 6666 unpack_int_r8g8b8a8_uint(s, dst[i]); 6667 s += 4; 6668 } 6669 break; 6670 6671 case MESA_FORMAT_B8G8R8A8_UINT: 6672 for (i = 0; i < n; ++i) { 6673 unpack_int_b8g8r8a8_uint(s, dst[i]); 6674 s += 4; 6675 } 6676 break; 6677 6678 case MESA_FORMAT_B10G10R10A2_UINT: 6679 for (i = 0; i < n; ++i) { 6680 unpack_int_b10g10r10a2_uint(s, dst[i]); 6681 s += 4; 6682 } 6683 break; 6684 6685 case MESA_FORMAT_R10G10B10A2_UINT: 6686 for (i = 0; i < n; ++i) { 6687 unpack_int_r10g10b10a2_uint(s, dst[i]); 6688 s += 4; 6689 } 6690 break; 6691 6692 case MESA_FORMAT_A2B10G10R10_UINT: 6693 for (i = 0; i < n; ++i) { 6694 unpack_int_a2b10g10r10_uint(s, dst[i]); 6695 s += 4; 6696 } 6697 break; 6698 6699 case MESA_FORMAT_A2R10G10B10_UINT: 6700 for (i = 0; i < n; ++i) { 6701 unpack_int_a2r10g10b10_uint(s, dst[i]); 6702 s += 4; 6703 } 6704 break; 6705 6706 case MESA_FORMAT_B5G6R5_UINT: 6707 for (i = 0; i < n; ++i) { 6708 unpack_int_b5g6r5_uint(s, dst[i]); 6709 s += 2; 6710 } 6711 break; 6712 6713 case MESA_FORMAT_R5G6B5_UINT: 6714 for (i = 0; i < n; ++i) { 6715 unpack_int_r5g6b5_uint(s, dst[i]); 6716 s += 2; 6717 } 6718 break; 6719 6720 case MESA_FORMAT_B2G3R3_UINT: 6721 for (i = 0; i < n; ++i) { 6722 unpack_int_b2g3r3_uint(s, dst[i]); 6723 s += 1; 6724 } 6725 break; 6726 6727 case MESA_FORMAT_R3G3B2_UINT: 6728 for (i = 0; i < n; ++i) { 6729 unpack_int_r3g3b2_uint(s, dst[i]); 6730 s += 1; 6731 } 6732 break; 6733 6734 case MESA_FORMAT_A4B4G4R4_UINT: 6735 for (i = 0; i < n; ++i) { 6736 unpack_int_a4b4g4r4_uint(s, dst[i]); 6737 s += 2; 6738 } 6739 break; 6740 6741 case MESA_FORMAT_R4G4B4A4_UINT: 6742 for (i = 0; i < n; ++i) { 6743 unpack_int_r4g4b4a4_uint(s, dst[i]); 6744 s += 2; 6745 } 6746 break; 6747 6748 case MESA_FORMAT_B4G4R4A4_UINT: 6749 for (i = 0; i < n; ++i) { 6750 unpack_int_b4g4r4a4_uint(s, dst[i]); 6751 s += 2; 6752 } 6753 break; 6754 6755 case MESA_FORMAT_A4R4G4B4_UINT: 6756 for (i = 0; i < n; ++i) { 6757 unpack_int_a4r4g4b4_uint(s, dst[i]); 6758 s += 2; 6759 } 6760 break; 6761 6762 case MESA_FORMAT_A1B5G5R5_UINT: 6763 for (i = 0; i < n; ++i) { 6764 unpack_int_a1b5g5r5_uint(s, dst[i]); 6765 s += 2; 6766 } 6767 break; 6768 6769 case MESA_FORMAT_B5G5R5A1_UINT: 6770 for (i = 0; i < n; ++i) { 6771 unpack_int_b5g5r5a1_uint(s, dst[i]); 6772 s += 2; 6773 } 6774 break; 6775 6776 case MESA_FORMAT_A1R5G5B5_UINT: 6777 for (i = 0; i < n; ++i) { 6778 unpack_int_a1r5g5b5_uint(s, dst[i]); 6779 s += 2; 6780 } 6781 break; 6782 6783 case MESA_FORMAT_R5G5B5A1_UINT: 6784 for (i = 0; i < n; ++i) { 6785 unpack_int_r5g5b5a1_uint(s, dst[i]); 6786 s += 2; 6787 } 6788 break; 6789 6790 case MESA_FORMAT_A_UINT8: 6791 for (i = 0; i < n; ++i) { 6792 unpack_int_a_uint8(s, dst[i]); 6793 s += 1; 6794 } 6795 break; 6796 6797 case MESA_FORMAT_A_UINT16: 6798 for (i = 0; i < n; ++i) { 6799 unpack_int_a_uint16(s, dst[i]); 6800 s += 2; 6801 } 6802 break; 6803 6804 case MESA_FORMAT_A_UINT32: 6805 for (i = 0; i < n; ++i) { 6806 unpack_int_a_uint32(s, dst[i]); 6807 s += 4; 6808 } 6809 break; 6810 6811 case MESA_FORMAT_A_SINT8: 6812 for (i = 0; i < n; ++i) { 6813 unpack_int_a_sint8(s, dst[i]); 6814 s += 1; 6815 } 6816 break; 6817 6818 case MESA_FORMAT_A_SINT16: 6819 for (i = 0; i < n; ++i) { 6820 unpack_int_a_sint16(s, dst[i]); 6821 s += 2; 6822 } 6823 break; 6824 6825 case MESA_FORMAT_A_SINT32: 6826 for (i = 0; i < n; ++i) { 6827 unpack_int_a_sint32(s, dst[i]); 6828 s += 4; 6829 } 6830 break; 6831 6832 case MESA_FORMAT_I_UINT8: 6833 for (i = 0; i < n; ++i) { 6834 unpack_int_i_uint8(s, dst[i]); 6835 s += 1; 6836 } 6837 break; 6838 6839 case MESA_FORMAT_I_UINT16: 6840 for (i = 0; i < n; ++i) { 6841 unpack_int_i_uint16(s, dst[i]); 6842 s += 2; 6843 } 6844 break; 6845 6846 case MESA_FORMAT_I_UINT32: 6847 for (i = 0; i < n; ++i) { 6848 unpack_int_i_uint32(s, dst[i]); 6849 s += 4; 6850 } 6851 break; 6852 6853 case MESA_FORMAT_I_SINT8: 6854 for (i = 0; i < n; ++i) { 6855 unpack_int_i_sint8(s, dst[i]); 6856 s += 1; 6857 } 6858 break; 6859 6860 case MESA_FORMAT_I_SINT16: 6861 for (i = 0; i < n; ++i) { 6862 unpack_int_i_sint16(s, dst[i]); 6863 s += 2; 6864 } 6865 break; 6866 6867 case MESA_FORMAT_I_SINT32: 6868 for (i = 0; i < n; ++i) { 6869 unpack_int_i_sint32(s, dst[i]); 6870 s += 4; 6871 } 6872 break; 6873 6874 case MESA_FORMAT_L_UINT8: 6875 for (i = 0; i < n; ++i) { 6876 unpack_int_l_uint8(s, dst[i]); 6877 s += 1; 6878 } 6879 break; 6880 6881 case MESA_FORMAT_L_UINT16: 6882 for (i = 0; i < n; ++i) { 6883 unpack_int_l_uint16(s, dst[i]); 6884 s += 2; 6885 } 6886 break; 6887 6888 case MESA_FORMAT_L_UINT32: 6889 for (i = 0; i < n; ++i) { 6890 unpack_int_l_uint32(s, dst[i]); 6891 s += 4; 6892 } 6893 break; 6894 6895 case MESA_FORMAT_L_SINT8: 6896 for (i = 0; i < n; ++i) { 6897 unpack_int_l_sint8(s, dst[i]); 6898 s += 1; 6899 } 6900 break; 6901 6902 case MESA_FORMAT_L_SINT16: 6903 for (i = 0; i < n; ++i) { 6904 unpack_int_l_sint16(s, dst[i]); 6905 s += 2; 6906 } 6907 break; 6908 6909 case MESA_FORMAT_L_SINT32: 6910 for (i = 0; i < n; ++i) { 6911 unpack_int_l_sint32(s, dst[i]); 6912 s += 4; 6913 } 6914 break; 6915 6916 case MESA_FORMAT_LA_UINT8: 6917 for (i = 0; i < n; ++i) { 6918 unpack_int_la_uint8(s, dst[i]); 6919 s += 2; 6920 } 6921 break; 6922 6923 case MESA_FORMAT_LA_UINT16: 6924 for (i = 0; i < n; ++i) { 6925 unpack_int_la_uint16(s, dst[i]); 6926 s += 4; 6927 } 6928 break; 6929 6930 case MESA_FORMAT_LA_UINT32: 6931 for (i = 0; i < n; ++i) { 6932 unpack_int_la_uint32(s, dst[i]); 6933 s += 8; 6934 } 6935 break; 6936 6937 case MESA_FORMAT_LA_SINT8: 6938 for (i = 0; i < n; ++i) { 6939 unpack_int_la_sint8(s, dst[i]); 6940 s += 2; 6941 } 6942 break; 6943 6944 case MESA_FORMAT_LA_SINT16: 6945 for (i = 0; i < n; ++i) { 6946 unpack_int_la_sint16(s, dst[i]); 6947 s += 4; 6948 } 6949 break; 6950 6951 case MESA_FORMAT_LA_SINT32: 6952 for (i = 0; i < n; ++i) { 6953 unpack_int_la_sint32(s, dst[i]); 6954 s += 8; 6955 } 6956 break; 6957 6958 case MESA_FORMAT_R_UINT8: 6959 for (i = 0; i < n; ++i) { 6960 unpack_int_r_uint8(s, dst[i]); 6961 s += 1; 6962 } 6963 break; 6964 6965 case MESA_FORMAT_R_UINT16: 6966 for (i = 0; i < n; ++i) { 6967 unpack_int_r_uint16(s, dst[i]); 6968 s += 2; 6969 } 6970 break; 6971 6972 case MESA_FORMAT_R_UINT32: 6973 for (i = 0; i < n; ++i) { 6974 unpack_int_r_uint32(s, dst[i]); 6975 s += 4; 6976 } 6977 break; 6978 6979 case MESA_FORMAT_R_SINT8: 6980 for (i = 0; i < n; ++i) { 6981 unpack_int_r_sint8(s, dst[i]); 6982 s += 1; 6983 } 6984 break; 6985 6986 case MESA_FORMAT_R_SINT16: 6987 for (i = 0; i < n; ++i) { 6988 unpack_int_r_sint16(s, dst[i]); 6989 s += 2; 6990 } 6991 break; 6992 6993 case MESA_FORMAT_R_SINT32: 6994 for (i = 0; i < n; ++i) { 6995 unpack_int_r_sint32(s, dst[i]); 6996 s += 4; 6997 } 6998 break; 6999 7000 case MESA_FORMAT_RG_UINT8: 7001 for (i = 0; i < n; ++i) { 7002 unpack_int_rg_uint8(s, dst[i]); 7003 s += 2; 7004 } 7005 break; 7006 7007 case MESA_FORMAT_RG_UINT16: 7008 for (i = 0; i < n; ++i) { 7009 unpack_int_rg_uint16(s, dst[i]); 7010 s += 4; 7011 } 7012 break; 7013 7014 case MESA_FORMAT_RG_UINT32: 7015 for (i = 0; i < n; ++i) { 7016 unpack_int_rg_uint32(s, dst[i]); 7017 s += 8; 7018 } 7019 break; 7020 7021 case MESA_FORMAT_RG_SINT8: 7022 for (i = 0; i < n; ++i) { 7023 unpack_int_rg_sint8(s, dst[i]); 7024 s += 2; 7025 } 7026 break; 7027 7028 case MESA_FORMAT_RG_SINT16: 7029 for (i = 0; i < n; ++i) { 7030 unpack_int_rg_sint16(s, dst[i]); 7031 s += 4; 7032 } 7033 break; 7034 7035 case MESA_FORMAT_RG_SINT32: 7036 for (i = 0; i < n; ++i) { 7037 unpack_int_rg_sint32(s, dst[i]); 7038 s += 8; 7039 } 7040 break; 7041 7042 case MESA_FORMAT_RGB_UINT8: 7043 for (i = 0; i < n; ++i) { 7044 unpack_int_rgb_uint8(s, dst[i]); 7045 s += 3; 7046 } 7047 break; 7048 7049 case MESA_FORMAT_RGB_UINT16: 7050 for (i = 0; i < n; ++i) { 7051 unpack_int_rgb_uint16(s, dst[i]); 7052 s += 6; 7053 } 7054 break; 7055 7056 case MESA_FORMAT_RGB_UINT32: 7057 for (i = 0; i < n; ++i) { 7058 unpack_int_rgb_uint32(s, dst[i]); 7059 s += 12; 7060 } 7061 break; 7062 7063 case MESA_FORMAT_RGB_SINT8: 7064 for (i = 0; i < n; ++i) { 7065 unpack_int_rgb_sint8(s, dst[i]); 7066 s += 3; 7067 } 7068 break; 7069 7070 case MESA_FORMAT_RGB_SINT16: 7071 for (i = 0; i < n; ++i) { 7072 unpack_int_rgb_sint16(s, dst[i]); 7073 s += 6; 7074 } 7075 break; 7076 7077 case MESA_FORMAT_RGB_SINT32: 7078 for (i = 0; i < n; ++i) { 7079 unpack_int_rgb_sint32(s, dst[i]); 7080 s += 12; 7081 } 7082 break; 7083 7084 case MESA_FORMAT_RGBA_UINT8: 7085 for (i = 0; i < n; ++i) { 7086 unpack_int_rgba_uint8(s, dst[i]); 7087 s += 4; 7088 } 7089 break; 7090 7091 case MESA_FORMAT_RGBA_UINT16: 7092 for (i = 0; i < n; ++i) { 7093 unpack_int_rgba_uint16(s, dst[i]); 7094 s += 8; 7095 } 7096 break; 7097 7098 case MESA_FORMAT_RGBA_UINT32: 7099 for (i = 0; i < n; ++i) { 7100 unpack_int_rgba_uint32(s, dst[i]); 7101 s += 16; 7102 } 7103 break; 7104 7105 case MESA_FORMAT_RGBA_SINT8: 7106 for (i = 0; i < n; ++i) { 7107 unpack_int_rgba_sint8(s, dst[i]); 7108 s += 4; 7109 } 7110 break; 7111 7112 case MESA_FORMAT_RGBA_SINT16: 7113 for (i = 0; i < n; ++i) { 7114 unpack_int_rgba_sint16(s, dst[i]); 7115 s += 8; 7116 } 7117 break; 7118 7119 case MESA_FORMAT_RGBA_SINT32: 7120 for (i = 0; i < n; ++i) { 7121 unpack_int_rgba_sint32(s, dst[i]); 7122 s += 16; 7123 } 7124 break; 7125 7126 case MESA_FORMAT_RGBX_UINT8: 7127 for (i = 0; i < n; ++i) { 7128 unpack_int_rgbx_uint8(s, dst[i]); 7129 s += 4; 7130 } 7131 break; 7132 7133 case MESA_FORMAT_RGBX_UINT16: 7134 for (i = 0; i < n; ++i) { 7135 unpack_int_rgbx_uint16(s, dst[i]); 7136 s += 8; 7137 } 7138 break; 7139 7140 case MESA_FORMAT_RGBX_UINT32: 7141 for (i = 0; i < n; ++i) { 7142 unpack_int_rgbx_uint32(s, dst[i]); 7143 s += 16; 7144 } 7145 break; 7146 7147 case MESA_FORMAT_RGBX_SINT8: 7148 for (i = 0; i < n; ++i) { 7149 unpack_int_rgbx_sint8(s, dst[i]); 7150 s += 4; 7151 } 7152 break; 7153 7154 case MESA_FORMAT_RGBX_SINT16: 7155 for (i = 0; i < n; ++i) { 7156 unpack_int_rgbx_sint16(s, dst[i]); 7157 s += 8; 7158 } 7159 break; 7160 7161 case MESA_FORMAT_RGBX_SINT32: 7162 for (i = 0; i < n; ++i) { 7163 unpack_int_rgbx_sint32(s, dst[i]); 7164 s += 16; 7165 } 7166 break; 7167 default: 7168 _mesa_problem(NULL, "%s: bad format %s", __func__, 7169 _mesa_get_format_name(format)); 7170 return; 7171 } 7172} 7173 7174/** 7175 * Unpack a 2D rect of pixels returning float RGBA colors. 7176 * \param format the source image format 7177 * \param src start address of the source image 7178 * \param srcRowStride source image row stride in bytes 7179 * \param dst start address of the dest image 7180 * \param dstRowStride dest image row stride in bytes 7181 * \param x source image start X pos 7182 * \param y source image start Y pos 7183 * \param width width of rect region to convert 7184 * \param height height of rect region to convert 7185 */ 7186void 7187_mesa_unpack_rgba_block(mesa_format format, 7188 const void *src, GLint srcRowStride, 7189 GLfloat dst[][4], GLint dstRowStride, 7190 GLuint x, GLuint y, GLuint width, GLuint height) 7191{ 7192 const GLuint srcPixStride = _mesa_get_format_bytes(format); 7193 const GLuint dstPixStride = 4 * sizeof(GLfloat); 7194 const GLubyte *srcRow; 7195 GLubyte *dstRow; 7196 GLuint i; 7197 7198 /* XXX needs to be fixed for compressed formats */ 7199 7200 srcRow = ((const GLubyte *) src) + srcRowStride * y + srcPixStride * x; 7201 dstRow = ((GLubyte *) dst) + dstRowStride * y + dstPixStride * x; 7202 7203 for (i = 0; i < height; i++) { 7204 _mesa_unpack_rgba_row(format, width, srcRow, (GLfloat (*)[4]) dstRow); 7205 7206 dstRow += dstRowStride; 7207 srcRow += srcRowStride; 7208 } 7209} 7210 7211/** Helper struct for MESA_FORMAT_Z32_FLOAT_S8X24_UINT */ 7212struct z32f_x24s8 7213{ 7214 float z; 7215 uint32_t x24s8; 7216}; 7217 7218typedef void (*unpack_float_z_func)(GLuint n, const void *src, GLfloat *dst); 7219 7220static void 7221unpack_float_z_X8_UINT_Z24_UNORM(GLuint n, const void *src, GLfloat *dst) 7222{ 7223 /* only return Z, not stencil data */ 7224 const GLuint *s = ((const GLuint *) src); 7225 const GLdouble scale = 1.0 / (GLdouble) 0xffffff; 7226 GLuint i; 7227 for (i = 0; i < n; i++) { 7228 dst[i] = (GLfloat) ((s[i] >> 8) * scale); 7229 assert(dst[i] >= 0.0F); 7230 assert(dst[i] <= 1.0F); 7231 } 7232} 7233 7234static void 7235unpack_float_z_Z24_UNORM_X8_UINT(GLuint n, const void *src, GLfloat *dst) 7236{ 7237 /* only return Z, not stencil data */ 7238 const GLuint *s = ((const GLuint *) src); 7239 const GLdouble scale = 1.0 / (GLdouble) 0xffffff; 7240 GLuint i; 7241 for (i = 0; i < n; i++) { 7242 dst[i] = (GLfloat) ((s[i] & 0x00ffffff) * scale); 7243 assert(dst[i] >= 0.0F); 7244 assert(dst[i] <= 1.0F); 7245 } 7246} 7247 7248static void 7249unpack_float_Z_UNORM16(GLuint n, const void *src, GLfloat *dst) 7250{ 7251 const GLushort *s = ((const GLushort *) src); 7252 GLuint i; 7253 for (i = 0; i < n; i++) { 7254 dst[i] = s[i] * (1.0F / 65535.0F); 7255 } 7256} 7257 7258static void 7259unpack_float_Z_UNORM32(GLuint n, const void *src, GLfloat *dst) 7260{ 7261 const GLuint *s = ((const GLuint *) src); 7262 GLuint i; 7263 for (i = 0; i < n; i++) { 7264 dst[i] = s[i] * (1.0F / 0xffffffff); 7265 } 7266} 7267 7268static void 7269unpack_float_Z_FLOAT32(GLuint n, const void *src, GLfloat *dst) 7270{ 7271 memcpy(dst, src, n * sizeof(float)); 7272} 7273 7274static void 7275unpack_float_z_Z32X24S8(GLuint n, const void *src, GLfloat *dst) 7276{ 7277 const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src; 7278 GLuint i; 7279 for (i = 0; i < n; i++) { 7280 dst[i] = s[i].z; 7281 } 7282} 7283 7284 7285 7286/** 7287 * Unpack Z values. 7288 * The returned values will always be in the range [0.0, 1.0]. 7289 */ 7290void 7291_mesa_unpack_float_z_row(mesa_format format, GLuint n, 7292 const void *src, GLfloat *dst) 7293{ 7294 unpack_float_z_func unpack; 7295 7296 switch (format) { 7297 case MESA_FORMAT_S8_UINT_Z24_UNORM: 7298 case MESA_FORMAT_X8_UINT_Z24_UNORM: 7299 unpack = unpack_float_z_X8_UINT_Z24_UNORM; 7300 break; 7301 case MESA_FORMAT_Z24_UNORM_S8_UINT: 7302 case MESA_FORMAT_Z24_UNORM_X8_UINT: 7303 unpack = unpack_float_z_Z24_UNORM_X8_UINT; 7304 break; 7305 case MESA_FORMAT_Z_UNORM16: 7306 unpack = unpack_float_Z_UNORM16; 7307 break; 7308 case MESA_FORMAT_Z_UNORM32: 7309 unpack = unpack_float_Z_UNORM32; 7310 break; 7311 case MESA_FORMAT_Z_FLOAT32: 7312 unpack = unpack_float_Z_FLOAT32; 7313 break; 7314 case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: 7315 unpack = unpack_float_z_Z32X24S8; 7316 break; 7317 default: 7318 _mesa_problem(NULL, "bad format %s in _mesa_unpack_float_z_row", 7319 _mesa_get_format_name(format)); 7320 return; 7321 } 7322 7323 unpack(n, src, dst); 7324} 7325 7326 7327 7328typedef void (*unpack_uint_z_func)(const void *src, GLuint *dst, GLuint n); 7329 7330static void 7331unpack_uint_z_X8_UINT_Z24_UNORM(const void *src, GLuint *dst, GLuint n) 7332{ 7333 /* only return Z, not stencil data */ 7334 const GLuint *s = ((const GLuint *) src); 7335 GLuint i; 7336 for (i = 0; i < n; i++) { 7337 dst[i] = (s[i] & 0xffffff00) | (s[i] >> 24); 7338 } 7339} 7340 7341static void 7342unpack_uint_z_Z24_UNORM_X8_UINT(const void *src, GLuint *dst, GLuint n) 7343{ 7344 /* only return Z, not stencil data */ 7345 const GLuint *s = ((const GLuint *) src); 7346 GLuint i; 7347 for (i = 0; i < n; i++) { 7348 dst[i] = (s[i] << 8) | ((s[i] >> 16) & 0xff); 7349 } 7350} 7351 7352static void 7353unpack_uint_Z_UNORM16(const void *src, GLuint *dst, GLuint n) 7354{ 7355 const GLushort *s = ((const GLushort *)src); 7356 GLuint i; 7357 for (i = 0; i < n; i++) { 7358 dst[i] = (s[i] << 16) | s[i]; 7359 } 7360} 7361 7362static void 7363unpack_uint_Z_UNORM32(const void *src, GLuint *dst, GLuint n) 7364{ 7365 memcpy(dst, src, n * sizeof(GLuint)); 7366} 7367 7368static void 7369unpack_uint_Z_FLOAT32(const void *src, GLuint *dst, GLuint n) 7370{ 7371 const float *s = (const float *)src; 7372 GLuint i; 7373 for (i = 0; i < n; i++) { 7374 dst[i] = FLOAT_TO_UINT(CLAMP(s[i], 0.0F, 1.0F)); 7375 } 7376} 7377 7378static void 7379unpack_uint_Z_FLOAT32_X24S8(const void *src, GLuint *dst, GLuint n) 7380{ 7381 const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src; 7382 GLuint i; 7383 7384 for (i = 0; i < n; i++) { 7385 dst[i] = FLOAT_TO_UINT(CLAMP(s[i].z, 0.0F, 1.0F)); 7386 } 7387} 7388 7389 7390/** 7391 * Unpack Z values. 7392 * The returned values will always be in the range [0, 0xffffffff]. 7393 */ 7394void 7395_mesa_unpack_uint_z_row(mesa_format format, GLuint n, 7396 const void *src, GLuint *dst) 7397{ 7398 unpack_uint_z_func unpack; 7399 const GLubyte *srcPtr = (GLubyte *) src; 7400 7401 switch (format) { 7402 case MESA_FORMAT_S8_UINT_Z24_UNORM: 7403 case MESA_FORMAT_X8_UINT_Z24_UNORM: 7404 unpack = unpack_uint_z_X8_UINT_Z24_UNORM; 7405 break; 7406 case MESA_FORMAT_Z24_UNORM_S8_UINT: 7407 case MESA_FORMAT_Z24_UNORM_X8_UINT: 7408 unpack = unpack_uint_z_Z24_UNORM_X8_UINT; 7409 break; 7410 case MESA_FORMAT_Z_UNORM16: 7411 unpack = unpack_uint_Z_UNORM16; 7412 break; 7413 case MESA_FORMAT_Z_UNORM32: 7414 unpack = unpack_uint_Z_UNORM32; 7415 break; 7416 case MESA_FORMAT_Z_FLOAT32: 7417 unpack = unpack_uint_Z_FLOAT32; 7418 break; 7419 case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: 7420 unpack = unpack_uint_Z_FLOAT32_X24S8; 7421 break; 7422 default: 7423 _mesa_problem(NULL, "bad format %s in _mesa_unpack_uint_z_row", 7424 _mesa_get_format_name(format)); 7425 return; 7426 } 7427 7428 unpack(srcPtr, dst, n); 7429} 7430 7431 7432static void 7433unpack_ubyte_s_S_UINT8(const void *src, GLubyte *dst, GLuint n) 7434{ 7435 memcpy(dst, src, n); 7436} 7437 7438static void 7439unpack_ubyte_s_S8_UINT_Z24_UNORM(const void *src, GLubyte *dst, GLuint n) 7440{ 7441 GLuint i; 7442 const GLuint *src32 = src; 7443 7444 for (i = 0; i < n; i++) 7445 dst[i] = src32[i] & 0xff; 7446} 7447 7448static void 7449unpack_ubyte_s_Z24_UNORM_S8_UINT(const void *src, GLubyte *dst, GLuint n) 7450{ 7451 GLuint i; 7452 const GLuint *src32 = src; 7453 7454 for (i = 0; i < n; i++) 7455 dst[i] = src32[i] >> 24; 7456} 7457 7458static void 7459unpack_ubyte_s_Z32_FLOAT_S8X24_UINT(const void *src, GLubyte *dst, GLuint n) 7460{ 7461 GLuint i; 7462 const struct z32f_x24s8 *s = (const struct z32f_x24s8 *) src; 7463 7464 for (i = 0; i < n; i++) 7465 dst[i] = s[i].x24s8 & 0xff; 7466} 7467 7468void 7469_mesa_unpack_ubyte_stencil_row(mesa_format format, GLuint n, 7470 const void *src, GLubyte *dst) 7471{ 7472 switch (format) { 7473 case MESA_FORMAT_S_UINT8: 7474 unpack_ubyte_s_S_UINT8(src, dst, n); 7475 break; 7476 case MESA_FORMAT_S8_UINT_Z24_UNORM: 7477 unpack_ubyte_s_S8_UINT_Z24_UNORM(src, dst, n); 7478 break; 7479 case MESA_FORMAT_Z24_UNORM_S8_UINT: 7480 unpack_ubyte_s_Z24_UNORM_S8_UINT(src, dst, n); 7481 break; 7482 case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: 7483 unpack_ubyte_s_Z32_FLOAT_S8X24_UINT(src, dst, n); 7484 break; 7485 default: 7486 _mesa_problem(NULL, "bad format %s in _mesa_unpack_ubyte_s_row", 7487 _mesa_get_format_name(format)); 7488 return; 7489 } 7490} 7491 7492static void 7493unpack_uint_24_8_depth_stencil_Z24_UNORM_S8_UINT(const GLuint *src, GLuint *dst, GLuint n) 7494{ 7495 GLuint i; 7496 7497 for (i = 0; i < n; i++) { 7498 GLuint val = src[i]; 7499 dst[i] = val >> 24 | val << 8; 7500 } 7501} 7502 7503static void 7504unpack_uint_24_8_depth_stencil_Z32_S8X24(const GLuint *src, 7505 GLuint *dst, GLuint n) 7506{ 7507 GLuint i; 7508 7509 for (i = 0; i < n; i++) { 7510 /* 8 bytes per pixel (float + uint32) */ 7511 GLfloat zf = ((GLfloat *) src)[i * 2 + 0]; 7512 GLuint z24 = (GLuint) (zf * (GLfloat) 0xffffff); 7513 GLuint s = src[i * 2 + 1] & 0xff; 7514 dst[i] = (z24 << 8) | s; 7515 } 7516} 7517 7518static void 7519unpack_uint_24_8_depth_stencil_S8_UINT_Z24_UNORM(const GLuint *src, GLuint *dst, GLuint n) 7520{ 7521 memcpy(dst, src, n * 4); 7522} 7523 7524/** 7525 * Unpack depth/stencil returning as GL_UNSIGNED_INT_24_8. 7526 * \param format the source data format 7527 */ 7528void 7529_mesa_unpack_uint_24_8_depth_stencil_row(mesa_format format, GLuint n, 7530 const void *src, GLuint *dst) 7531{ 7532 switch (format) { 7533 case MESA_FORMAT_S8_UINT_Z24_UNORM: 7534 unpack_uint_24_8_depth_stencil_S8_UINT_Z24_UNORM(src, dst, n); 7535 break; 7536 case MESA_FORMAT_Z24_UNORM_S8_UINT: 7537 unpack_uint_24_8_depth_stencil_Z24_UNORM_S8_UINT(src, dst, n); 7538 break; 7539 case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: 7540 unpack_uint_24_8_depth_stencil_Z32_S8X24(src, dst, n); 7541 break; 7542 default: 7543 _mesa_problem(NULL, 7544 "bad format %s in _mesa_unpack_uint_24_8_depth_stencil_row", 7545 _mesa_get_format_name(format)); 7546 return; 7547 } 7548} 7549 7550static void 7551unpack_float_32_uint_24_8_Z24_UNORM_S8_UINT(const GLuint *src, 7552 GLuint *dst, GLuint n) 7553{ 7554 GLuint i; 7555 struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; 7556 const GLdouble scale = 1.0 / (GLdouble) 0xffffff; 7557 7558 for (i = 0; i < n; i++) { 7559 const GLuint z24 = src[i] & 0xffffff; 7560 d[i].z = z24 * scale; 7561 d[i].x24s8 = src[i] >> 24; 7562 assert(d[i].z >= 0.0f); 7563 assert(d[i].z <= 1.0f); 7564 } 7565} 7566 7567static void 7568unpack_float_32_uint_24_8_Z32_FLOAT_S8X24_UINT(const GLuint *src, 7569 GLuint *dst, GLuint n) 7570{ 7571 memcpy(dst, src, n * sizeof(struct z32f_x24s8)); 7572} 7573 7574static void 7575unpack_float_32_uint_24_8_S8_UINT_Z24_UNORM(const GLuint *src, 7576 GLuint *dst, GLuint n) 7577{ 7578 GLuint i; 7579 struct z32f_x24s8 *d = (struct z32f_x24s8 *) dst; 7580 const GLdouble scale = 1.0 / (GLdouble) 0xffffff; 7581 7582 for (i = 0; i < n; i++) { 7583 const GLuint z24 = src[i] >> 8; 7584 d[i].z = z24 * scale; 7585 d[i].x24s8 = src[i] & 0xff; 7586 assert(d[i].z >= 0.0f); 7587 assert(d[i].z <= 1.0f); 7588 } 7589} 7590 7591/** 7592 * Unpack depth/stencil returning as GL_FLOAT_32_UNSIGNED_INT_24_8_REV. 7593 * \param format the source data format 7594 * 7595 * In GL_FLOAT_32_UNSIGNED_INT_24_8_REV lower 4 bytes contain float 7596 * component and higher 4 bytes contain packed 24-bit and 8-bit 7597 * components. 7598 * 7599 * 31 30 29 28 ... 4 3 2 1 0 31 30 29 ... 9 8 7 6 5 ... 2 1 0 7600 * +-------------------------+ +--------------------------------+ 7601 * | Float Component | | Unused | 8 bit stencil | 7602 * +-------------------------+ +--------------------------------+ 7603 * lower 4 bytes higher 4 bytes 7604 */ 7605void 7606_mesa_unpack_float_32_uint_24_8_depth_stencil_row(mesa_format format, GLuint n, 7607 const void *src, GLuint *dst) 7608{ 7609 switch (format) { 7610 case MESA_FORMAT_S8_UINT_Z24_UNORM: 7611 unpack_float_32_uint_24_8_S8_UINT_Z24_UNORM(src, dst, n); 7612 break; 7613 case MESA_FORMAT_Z24_UNORM_S8_UINT: 7614 unpack_float_32_uint_24_8_Z24_UNORM_S8_UINT(src, dst, n); 7615 break; 7616 case MESA_FORMAT_Z32_FLOAT_S8X24_UINT: 7617 unpack_float_32_uint_24_8_Z32_FLOAT_S8X24_UINT(src, dst, n); 7618 break; 7619 default: 7620 _mesa_problem(NULL, 7621 "bad format %s in _mesa_unpack_uint_24_8_depth_stencil_row", 7622 _mesa_get_format_name(format)); 7623 return; 7624 } 7625} 7626 7627/** 7628 * Unpack depth/stencil 7629 * \param format the source data format 7630 * \param type the destination data type 7631 */ 7632void 7633_mesa_unpack_depth_stencil_row(mesa_format format, GLuint n, 7634 const void *src, GLenum type, 7635 GLuint *dst) 7636{ 7637 assert(type == GL_UNSIGNED_INT_24_8 || 7638 type == GL_FLOAT_32_UNSIGNED_INT_24_8_REV); 7639 7640 switch (type) { 7641 case GL_UNSIGNED_INT_24_8: 7642 _mesa_unpack_uint_24_8_depth_stencil_row(format, n, src, dst); 7643 break; 7644 case GL_FLOAT_32_UNSIGNED_INT_24_8_REV: 7645 _mesa_unpack_float_32_uint_24_8_depth_stencil_row(format, n, src, dst); 7646 break; 7647 default: 7648 _mesa_problem(NULL, 7649 "bad type 0x%x in _mesa_unpack_depth_stencil_row", 7650 type); 7651 return; 7652 } 7653} 7654 7655