1 // 2 // Copyright 2013 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // imageformats.h: Defines image format types with functions for mip generation 8 // and copying. 9 10 #ifndef IMAGEUTIL_IMAGEFORMATS_H_ 11 #define IMAGEUTIL_IMAGEFORMATS_H_ 12 13 #include "common/Color.h" 14 15 #include <cstdint> 16 17 namespace angle 18 { 19 20 // Several structures share functionality for reading, writing or mipmapping but the layout 21 // must match the texture format which the structure represents. If collapsing or typedefing 22 // structs in this header, make sure the functionality and memory layout is exactly the same. 23 24 struct L8 25 { 26 uint8_t L; 27 28 static void readColor(gl::ColorF *dst, const L8 *src); 29 static void writeColor(L8 *dst, const gl::ColorF *src); 30 static void average(L8 *dst, const L8 *src1, const L8 *src2); 31 }; 32 33 struct R8 34 { 35 uint8_t R; 36 37 static void readColor(gl::ColorF *dst, const R8 *src); 38 static void readColor(gl::ColorUI *dst, const R8 *src); 39 static void writeColor(R8 *dst, const gl::ColorF *src); 40 static void writeColor(R8 *dst, const gl::ColorUI *src); 41 static void average(R8 *dst, const R8 *src1, const R8 *src2); 42 }; 43 44 struct A8 45 { 46 uint8_t A; 47 48 static void readColor(gl::ColorF *dst, const A8 *src); 49 static void writeColor(A8 *dst, const gl::ColorF *src); 50 static void average(A8 *dst, const A8 *src1, const A8 *src2); 51 }; 52 53 struct L8A8 54 { 55 uint8_t L; 56 uint8_t A; 57 58 static void readColor(gl::ColorF *dst, const L8A8 *src); 59 static void writeColor(L8A8 *dst, const gl::ColorF *src); 60 static void average(L8A8 *dst, const L8A8 *src1, const L8A8 *src2); 61 }; 62 63 struct A8L8 64 { 65 uint8_t A; 66 uint8_t L; 67 68 static void readColor(gl::ColorF *dst, const A8L8 *src); 69 static void writeColor(A8L8 *dst, const gl::ColorF *src); 70 static void average(A8L8 *dst, const A8L8 *src1, const A8L8 *src2); 71 }; 72 73 struct L4A4 74 { 75 uint8_t L : 4; 76 uint8_t A : 4; 77 78 static void readColor(gl::ColorF *dst, const L4A4 *src); 79 static void writeColor(L4A4 *dst, const gl::ColorF *src); 80 static void average(L4A4 *dst, const L4A4 *src1, const L4A4 *src2); 81 }; 82 83 struct R8G8 84 { 85 uint8_t R; 86 uint8_t G; 87 88 static void readColor(gl::ColorF *dst, const R8G8 *src); 89 static void readColor(gl::ColorUI *dst, const R8G8 *src); 90 static void writeColor(R8G8 *dst, const gl::ColorF *src); 91 static void writeColor(R8G8 *dst, const gl::ColorUI *src); 92 static void average(R8G8 *dst, const R8G8 *src1, const R8G8 *src2); 93 }; 94 95 struct R8G8B8 96 { 97 uint8_t R; 98 uint8_t G; 99 uint8_t B; 100 101 static void readColor(gl::ColorF *dst, const R8G8B8 *src); 102 static void readColor(gl::ColorUI *dst, const R8G8B8 *src); 103 static void writeColor(R8G8B8 *dst, const gl::ColorF *src); 104 static void writeColor(R8G8B8 *dst, const gl::ColorUI *src); 105 static void average(R8G8B8 *dst, const R8G8B8 *src1, const R8G8B8 *src2); 106 }; 107 108 struct B8G8R8 109 { 110 uint8_t B; 111 uint8_t G; 112 uint8_t R; 113 114 static void readColor(gl::ColorF *dst, const B8G8R8 *src); 115 static void readColor(gl::ColorUI *dst, const B8G8R8 *src); 116 static void writeColor(B8G8R8 *dst, const gl::ColorF *src); 117 static void writeColor(B8G8R8 *dst, const gl::ColorUI *src); 118 static void average(B8G8R8 *dst, const B8G8R8 *src1, const B8G8R8 *src2); 119 }; 120 121 struct R5G6B5 122 { 123 // OpenGL ES 2.0.25 spec Section 3.6.2: "Components are packed with the first component in the 124 // most significant bits of the bitfield, and successive component occupying progressively less 125 // significant locations" 126 uint16_t RGB; 127 128 static void readColor(gl::ColorF *dst, const R5G6B5 *src); 129 static void writeColor(R5G6B5 *dst, const gl::ColorF *src); 130 static void average(R5G6B5 *dst, const R5G6B5 *src1, const R5G6B5 *src2); 131 }; 132 133 struct B5G6R5 134 { 135 uint16_t BGR; 136 137 static void readColor(gl::ColorF *dst, const B5G6R5 *src); 138 static void writeColor(B5G6R5 *dst, const gl::ColorF *src); 139 static void average(B5G6R5 *dst, const B5G6R5 *src1, const B5G6R5 *src2); 140 }; 141 142 struct A8R8G8B8 143 { 144 uint8_t A; 145 uint8_t R; 146 uint8_t G; 147 uint8_t B; 148 149 static void readColor(gl::ColorF *dst, const A8R8G8B8 *src); 150 static void readColor(gl::ColorUI *dst, const A8R8G8B8 *src); 151 static void writeColor(A8R8G8B8 *dst, const gl::ColorF *src); 152 static void writeColor(A8R8G8B8 *dst, const gl::ColorUI *src); 153 static void average(A8R8G8B8 *dst, const A8R8G8B8 *src1, const A8R8G8B8 *src2); 154 }; 155 156 struct R8G8B8A8 157 { 158 uint8_t R; 159 uint8_t G; 160 uint8_t B; 161 uint8_t A; 162 163 static void readColor(gl::ColorF *dst, const R8G8B8A8 *src); 164 static void readColor(gl::ColorUI *dst, const R8G8B8A8 *src); 165 static void writeColor(R8G8B8A8 *dst, const gl::ColorF *src); 166 static void writeColor(R8G8B8A8 *dst, const gl::ColorUI *src); 167 static void average(R8G8B8A8 *dst, const R8G8B8A8 *src1, const R8G8B8A8 *src2); 168 }; 169 170 struct R8G8B8A8SRGB 171 { 172 uint8_t R; 173 uint8_t G; 174 uint8_t B; 175 uint8_t A; 176 177 static void readColor(gl::ColorF *dst, const R8G8B8A8SRGB *src); 178 static void writeColor(R8G8B8A8SRGB *dst, const gl::ColorF *src); 179 static void average(R8G8B8A8SRGB *dst, const R8G8B8A8SRGB *src1, const R8G8B8A8SRGB *src2); 180 }; 181 182 struct B8G8R8A8 183 { 184 uint8_t B; 185 uint8_t G; 186 uint8_t R; 187 uint8_t A; 188 189 static void readColor(gl::ColorF *dst, const B8G8R8A8 *src); 190 static void readColor(gl::ColorUI *dst, const B8G8R8A8 *src); 191 static void writeColor(B8G8R8A8 *dst, const gl::ColorF *src); 192 static void writeColor(B8G8R8A8 *dst, const gl::ColorUI *src); 193 static void average(B8G8R8A8 *dst, const B8G8R8A8 *src1, const B8G8R8A8 *src2); 194 }; 195 196 struct B8G8R8X8 197 { 198 uint8_t B; 199 uint8_t G; 200 uint8_t R; 201 uint8_t X; 202 203 static void readColor(gl::ColorF *dst, const B8G8R8X8 *src); 204 static void readColor(gl::ColorUI *dst, const B8G8R8X8 *src); 205 static void writeColor(B8G8R8X8 *dst, const gl::ColorF *src); 206 static void writeColor(B8G8R8X8 *dst, const gl::ColorUI *src); 207 static void average(B8G8R8X8 *dst, const B8G8R8X8 *src1, const B8G8R8X8 *src2); 208 }; 209 210 struct R8G8B8X8 211 { 212 uint8_t R; 213 uint8_t G; 214 uint8_t B; 215 uint8_t X; 216 217 static void readColor(gl::ColorF *dst, const R8G8B8X8 *src); 218 static void readColor(gl::ColorUI *dst, const R8G8B8X8 *src); 219 static void writeColor(R8G8B8X8 *dst, const gl::ColorF *src); 220 static void writeColor(R8G8B8X8 *dst, const gl::ColorUI *src); 221 static void average(R8G8B8X8 *dst, const R8G8B8X8 *src1, const R8G8B8X8 *src2); 222 }; 223 224 struct A1R5G5B5 225 { 226 uint16_t ARGB; 227 228 static void readColor(gl::ColorF *dst, const A1R5G5B5 *src); 229 static void writeColor(A1R5G5B5 *dst, const gl::ColorF *src); 230 static void average(A1R5G5B5 *dst, const A1R5G5B5 *src1, const A1R5G5B5 *src2); 231 }; 232 233 struct R5G5B5A1 234 { 235 // OpenGL ES 2.0.25 spec Section 3.6.2: "Components are packed with the first component in the 236 // most significant 237 // bits of the bitfield, and successive component occupying progressively less significant 238 // locations" 239 uint16_t RGBA; 240 241 static void readColor(gl::ColorF *dst, const R5G5B5A1 *src); 242 static void writeColor(R5G5B5A1 *dst, const gl::ColorF *src); 243 static void average(R5G5B5A1 *dst, const R5G5B5A1 *src1, const R5G5B5A1 *src2); 244 }; 245 246 struct R4G4B4A4 247 { 248 // OpenGL ES 2.0.25 spec Section 3.6.2: "Components are packed with the first component in the 249 // most significant 250 // bits of the bitfield, and successive component occupying progressively less significant 251 // locations" 252 uint16_t RGBA; 253 254 static void readColor(gl::ColorF *dst, const R4G4B4A4 *src); 255 static void writeColor(R4G4B4A4 *dst, const gl::ColorF *src); 256 static void average(R4G4B4A4 *dst, const R4G4B4A4 *src1, const R4G4B4A4 *src2); 257 }; 258 259 struct A4R4G4B4 260 { 261 uint16_t ARGB; 262 263 static void readColor(gl::ColorF *dst, const A4R4G4B4 *src); 264 static void writeColor(A4R4G4B4 *dst, const gl::ColorF *src); 265 static void average(A4R4G4B4 *dst, const A4R4G4B4 *src1, const A4R4G4B4 *src2); 266 }; 267 268 struct R16 269 { 270 uint16_t R; 271 272 static void readColor(gl::ColorF *dst, const R16 *src); 273 static void readColor(gl::ColorUI *dst, const R16 *src); 274 static void writeColor(R16 *dst, const gl::ColorF *src); 275 static void writeColor(R16 *dst, const gl::ColorUI *src); 276 static void average(R16 *dst, const R16 *src1, const R16 *src2); 277 }; 278 279 struct R16G16 280 { 281 uint16_t R; 282 uint16_t G; 283 284 static void readColor(gl::ColorF *dst, const R16G16 *src); 285 static void readColor(gl::ColorUI *dst, const R16G16 *src); 286 static void writeColor(R16G16 *dst, const gl::ColorF *src); 287 static void writeColor(R16G16 *dst, const gl::ColorUI *src); 288 static void average(R16G16 *dst, const R16G16 *src1, const R16G16 *src2); 289 }; 290 291 struct R16G16B16 292 { 293 uint16_t R; 294 uint16_t G; 295 uint16_t B; 296 297 static void readColor(gl::ColorF *dst, const R16G16B16 *src); 298 static void readColor(gl::ColorUI *dst, const R16G16B16 *src); 299 static void writeColor(R16G16B16 *dst, const gl::ColorF *src); 300 static void writeColor(R16G16B16 *dst, const gl::ColorUI *src); 301 static void average(R16G16B16 *dst, const R16G16B16 *src1, const R16G16B16 *src2); 302 }; 303 304 struct R16G16B16A16 305 { 306 uint16_t R; 307 uint16_t G; 308 uint16_t B; 309 uint16_t A; 310 311 static void readColor(gl::ColorF *dst, const R16G16B16A16 *src); 312 static void readColor(gl::ColorUI *dst, const R16G16B16A16 *src); 313 static void writeColor(R16G16B16A16 *dst, const gl::ColorF *src); 314 static void writeColor(R16G16B16A16 *dst, const gl::ColorUI *src); 315 static void average(R16G16B16A16 *dst, const R16G16B16A16 *src1, const R16G16B16A16 *src2); 316 }; 317 318 struct R32 319 { 320 uint32_t R; 321 322 static void readColor(gl::ColorF *dst, const R32 *src); 323 static void readColor(gl::ColorUI *dst, const R32 *src); 324 static void writeColor(R32 *dst, const gl::ColorF *src); 325 static void writeColor(R32 *dst, const gl::ColorUI *src); 326 static void average(R32 *dst, const R32 *src1, const R32 *src2); 327 }; 328 329 struct R32G32 330 { 331 uint32_t R; 332 uint32_t G; 333 334 static void readColor(gl::ColorF *dst, const R32G32 *src); 335 static void readColor(gl::ColorUI *dst, const R32G32 *src); 336 static void writeColor(R32G32 *dst, const gl::ColorF *src); 337 static void writeColor(R32G32 *dst, const gl::ColorUI *src); 338 static void average(R32G32 *dst, const R32G32 *src1, const R32G32 *src2); 339 }; 340 341 struct R32G32B32 342 { 343 uint32_t R; 344 uint32_t G; 345 uint32_t B; 346 347 static void readColor(gl::ColorF *dst, const R32G32B32 *src); 348 static void readColor(gl::ColorUI *dst, const R32G32B32 *src); 349 static void writeColor(R32G32B32 *dst, const gl::ColorF *src); 350 static void writeColor(R32G32B32 *dst, const gl::ColorUI *src); 351 static void average(R32G32B32 *dst, const R32G32B32 *src1, const R32G32B32 *src2); 352 }; 353 354 struct R32G32B32A32 355 { 356 uint32_t R; 357 uint32_t G; 358 uint32_t B; 359 uint32_t A; 360 361 static void readColor(gl::ColorF *dst, const R32G32B32A32 *src); 362 static void readColor(gl::ColorUI *dst, const R32G32B32A32 *src); 363 static void writeColor(R32G32B32A32 *dst, const gl::ColorF *src); 364 static void writeColor(R32G32B32A32 *dst, const gl::ColorUI *src); 365 static void average(R32G32B32A32 *dst, const R32G32B32A32 *src1, const R32G32B32A32 *src2); 366 }; 367 368 struct R8S 369 { 370 int8_t R; 371 372 static void readColor(gl::ColorF *dst, const R8S *src); 373 static void readColor(gl::ColorI *dst, const R8S *src); 374 static void writeColor(R8S *dst, const gl::ColorF *src); 375 static void writeColor(R8S *dst, const gl::ColorI *src); 376 static void average(R8S *dst, const R8S *src1, const R8S *src2); 377 }; 378 379 struct R8G8S 380 { 381 int8_t R; 382 int8_t G; 383 384 static void readColor(gl::ColorF *dst, const R8G8S *src); 385 static void readColor(gl::ColorI *dst, const R8G8S *src); 386 static void writeColor(R8G8S *dst, const gl::ColorF *src); 387 static void writeColor(R8G8S *dst, const gl::ColorI *src); 388 static void average(R8G8S *dst, const R8G8S *src1, const R8G8S *src2); 389 }; 390 391 struct R8G8B8S 392 { 393 int8_t R; 394 int8_t G; 395 int8_t B; 396 397 static void readColor(gl::ColorF *dst, const R8G8B8S *src); 398 static void readColor(gl::ColorI *dst, const R8G8B8S *src); 399 static void writeColor(R8G8B8S *dst, const gl::ColorF *src); 400 static void writeColor(R8G8B8S *dst, const gl::ColorI *src); 401 static void average(R8G8B8S *dst, const R8G8B8S *src1, const R8G8B8S *src2); 402 }; 403 404 struct R8G8B8A8S 405 { 406 int8_t R; 407 int8_t G; 408 int8_t B; 409 int8_t A; 410 411 static void readColor(gl::ColorF *dst, const R8G8B8A8S *src); 412 static void readColor(gl::ColorI *dst, const R8G8B8A8S *src); 413 static void writeColor(R8G8B8A8S *dst, const gl::ColorF *src); 414 static void writeColor(R8G8B8A8S *dst, const gl::ColorI *src); 415 static void average(R8G8B8A8S *dst, const R8G8B8A8S *src1, const R8G8B8A8S *src2); 416 }; 417 418 struct R16S 419 { 420 int16_t R; 421 422 static void readColor(gl::ColorF *dst, const R16S *src); 423 static void readColor(gl::ColorI *dst, const R16S *src); 424 static void writeColor(R16S *dst, const gl::ColorF *src); 425 static void writeColor(R16S *dst, const gl::ColorI *src); 426 static void average(R16S *dst, const R16S *src1, const R16S *src2); 427 }; 428 429 struct R16G16S 430 { 431 int16_t R; 432 int16_t G; 433 434 static void readColor(gl::ColorF *dst, const R16G16S *src); 435 static void readColor(gl::ColorI *dst, const R16G16S *src); 436 static void writeColor(R16G16S *dst, const gl::ColorF *src); 437 static void writeColor(R16G16S *dst, const gl::ColorI *src); 438 static void average(R16G16S *dst, const R16G16S *src1, const R16G16S *src2); 439 }; 440 441 struct R16G16B16S 442 { 443 int16_t R; 444 int16_t G; 445 int16_t B; 446 447 static void readColor(gl::ColorF *dst, const R16G16B16S *src); 448 static void readColor(gl::ColorI *dst, const R16G16B16S *src); 449 static void writeColor(R16G16B16S *dst, const gl::ColorF *src); 450 static void writeColor(R16G16B16S *dst, const gl::ColorI *src); 451 static void average(R16G16B16S *dst, const R16G16B16S *src1, const R16G16B16S *src2); 452 }; 453 454 struct R16G16B16A16S 455 { 456 int16_t R; 457 int16_t G; 458 int16_t B; 459 int16_t A; 460 461 static void readColor(gl::ColorF *dst, const R16G16B16A16S *src); 462 static void readColor(gl::ColorI *dst, const R16G16B16A16S *src); 463 static void writeColor(R16G16B16A16S *dst, const gl::ColorF *src); 464 static void writeColor(R16G16B16A16S *dst, const gl::ColorI *src); 465 static void average(R16G16B16A16S *dst, const R16G16B16A16S *src1, const R16G16B16A16S *src2); 466 }; 467 468 struct R32S 469 { 470 int32_t R; 471 472 static void readColor(gl::ColorF *dst, const R32S *src); 473 static void readColor(gl::ColorI *dst, const R32S *src); 474 static void writeColor(R32S *dst, const gl::ColorF *src); 475 static void writeColor(R32S *dst, const gl::ColorI *src); 476 static void average(R32S *dst, const R32S *src1, const R32S *src2); 477 }; 478 479 struct R32G32S 480 { 481 int32_t R; 482 int32_t G; 483 484 static void readColor(gl::ColorF *dst, const R32G32S *src); 485 static void readColor(gl::ColorI *dst, const R32G32S *src); 486 static void writeColor(R32G32S *dst, const gl::ColorF *src); 487 static void writeColor(R32G32S *dst, const gl::ColorI *src); 488 static void average(R32G32S *dst, const R32G32S *src1, const R32G32S *src2); 489 }; 490 491 struct R32G32B32S 492 { 493 int32_t R; 494 int32_t G; 495 int32_t B; 496 497 static void readColor(gl::ColorF *dst, const R32G32B32S *src); 498 static void readColor(gl::ColorI *dst, const R32G32B32S *src); 499 static void writeColor(R32G32B32S *dst, const gl::ColorF *src); 500 static void writeColor(R32G32B32S *dst, const gl::ColorI *src); 501 static void average(R32G32B32S *dst, const R32G32B32S *src1, const R32G32B32S *src2); 502 }; 503 504 struct R32G32B32A32S 505 { 506 int32_t R; 507 int32_t G; 508 int32_t B; 509 int32_t A; 510 511 static void readColor(gl::ColorF *dst, const R32G32B32A32S *src); 512 static void readColor(gl::ColorI *dst, const R32G32B32A32S *src); 513 static void writeColor(R32G32B32A32S *dst, const gl::ColorF *src); 514 static void writeColor(R32G32B32A32S *dst, const gl::ColorI *src); 515 static void average(R32G32B32A32S *dst, const R32G32B32A32S *src1, const R32G32B32A32S *src2); 516 }; 517 518 struct A16B16G16R16F 519 { 520 uint16_t A; 521 uint16_t R; 522 uint16_t G; 523 uint16_t B; 524 525 static void readColor(gl::ColorF *dst, const A16B16G16R16F *src); 526 static void writeColor(A16B16G16R16F *dst, const gl::ColorF *src); 527 static void average(A16B16G16R16F *dst, const A16B16G16R16F *src1, const A16B16G16R16F *src2); 528 }; 529 530 struct R16G16B16A16F 531 { 532 uint16_t R; 533 uint16_t G; 534 uint16_t B; 535 uint16_t A; 536 537 static void readColor(gl::ColorF *dst, const R16G16B16A16F *src); 538 static void writeColor(R16G16B16A16F *dst, const gl::ColorF *src); 539 static void average(R16G16B16A16F *dst, const R16G16B16A16F *src1, const R16G16B16A16F *src2); 540 }; 541 542 struct R16F 543 { 544 uint16_t R; 545 546 static void readColor(gl::ColorF *dst, const R16F *src); 547 static void writeColor(R16F *dst, const gl::ColorF *src); 548 static void average(R16F *dst, const R16F *src1, const R16F *src2); 549 }; 550 551 struct A16F 552 { 553 uint16_t A; 554 555 static void readColor(gl::ColorF *dst, const A16F *src); 556 static void writeColor(A16F *dst, const gl::ColorF *src); 557 static void average(A16F *dst, const A16F *src1, const A16F *src2); 558 }; 559 560 struct L16F 561 { 562 uint16_t L; 563 564 static void readColor(gl::ColorF *dst, const L16F *src); 565 static void writeColor(L16F *dst, const gl::ColorF *src); 566 static void average(L16F *dst, const L16F *src1, const L16F *src2); 567 }; 568 569 struct L16A16F 570 { 571 uint16_t L; 572 uint16_t A; 573 574 static void readColor(gl::ColorF *dst, const L16A16F *src); 575 static void writeColor(L16A16F *dst, const gl::ColorF *src); 576 static void average(L16A16F *dst, const L16A16F *src1, const L16A16F *src2); 577 }; 578 579 struct R16G16F 580 { 581 uint16_t R; 582 uint16_t G; 583 584 static void readColor(gl::ColorF *dst, const R16G16F *src); 585 static void writeColor(R16G16F *dst, const gl::ColorF *src); 586 static void average(R16G16F *dst, const R16G16F *src1, const R16G16F *src2); 587 }; 588 589 struct R16G16B16F 590 { 591 uint16_t R; 592 uint16_t G; 593 uint16_t B; 594 595 static void readColor(gl::ColorF *dst, const R16G16B16F *src); 596 static void writeColor(R16G16B16F *dst, const gl::ColorF *src); 597 static void average(R16G16B16F *dst, const R16G16B16F *src1, const R16G16B16F *src2); 598 }; 599 600 struct A32B32G32R32F 601 { 602 float A; 603 float R; 604 float G; 605 float B; 606 607 static void readColor(gl::ColorF *dst, const A32B32G32R32F *src); 608 static void writeColor(A32B32G32R32F *dst, const gl::ColorF *src); 609 static void average(A32B32G32R32F *dst, const A32B32G32R32F *src1, const A32B32G32R32F *src2); 610 }; 611 612 struct R32G32B32A32F 613 { 614 float R; 615 float G; 616 float B; 617 float A; 618 619 static void readColor(gl::ColorF *dst, const R32G32B32A32F *src); 620 static void writeColor(R32G32B32A32F *dst, const gl::ColorF *src); 621 static void average(R32G32B32A32F *dst, const R32G32B32A32F *src1, const R32G32B32A32F *src2); 622 }; 623 624 struct R32F 625 { 626 float R; 627 628 static void readColor(gl::ColorF *dst, const R32F *src); 629 static void writeColor(R32F *dst, const gl::ColorF *src); 630 static void average(R32F *dst, const R32F *src1, const R32F *src2); 631 }; 632 633 struct A32F 634 { 635 float A; 636 637 static void readColor(gl::ColorF *dst, const A32F *src); 638 static void writeColor(A32F *dst, const gl::ColorF *src); 639 static void average(A32F *dst, const A32F *src1, const A32F *src2); 640 }; 641 642 struct L32F 643 { 644 float L; 645 646 static void readColor(gl::ColorF *dst, const L32F *src); 647 static void writeColor(L32F *dst, const gl::ColorF *src); 648 static void average(L32F *dst, const L32F *src1, const L32F *src2); 649 }; 650 651 struct L32A32F 652 { 653 float L; 654 float A; 655 656 static void readColor(gl::ColorF *dst, const L32A32F *src); 657 static void writeColor(L32A32F *dst, const gl::ColorF *src); 658 static void average(L32A32F *dst, const L32A32F *src1, const L32A32F *src2); 659 }; 660 661 struct R32G32F 662 { 663 float R; 664 float G; 665 666 static void readColor(gl::ColorF *dst, const R32G32F *src); 667 static void writeColor(R32G32F *dst, const gl::ColorF *src); 668 static void average(R32G32F *dst, const R32G32F *src1, const R32G32F *src2); 669 }; 670 671 struct R32G32B32F 672 { 673 float R; 674 float G; 675 float B; 676 677 static void readColor(gl::ColorF *dst, const R32G32B32F *src); 678 static void writeColor(R32G32B32F *dst, const gl::ColorF *src); 679 static void average(R32G32B32F *dst, const R32G32B32F *src1, const R32G32B32F *src2); 680 }; 681 682 struct R10G10B10A2 683 { 684 uint32_t R : 10; 685 uint32_t G : 10; 686 uint32_t B : 10; 687 uint32_t A : 2; 688 689 static void readColor(gl::ColorF *dst, const R10G10B10A2 *src); 690 static void readColor(gl::ColorUI *dst, const R10G10B10A2 *src); 691 static void writeColor(R10G10B10A2 *dst, const gl::ColorF *src); 692 static void writeColor(R10G10B10A2 *dst, const gl::ColorUI *src); 693 static void average(R10G10B10A2 *dst, const R10G10B10A2 *src1, const R10G10B10A2 *src2); 694 }; 695 static_assert(sizeof(R10G10B10A2) == 4, "R10G10B10A2 struct not 32-bits."); 696 697 struct R10G10B10A2S 698 { 699 int32_t R : 10; 700 int32_t G : 10; 701 int32_t B : 10; 702 int32_t A : 2; 703 704 static void readColor(gl::ColorF *dst, const R10G10B10A2S *src); 705 static void readColor(gl::ColorI *dst, const R10G10B10A2S *src); 706 static void writeColor(R10G10B10A2S *dst, const gl::ColorF *src); 707 static void writeColor(R10G10B10A2S *dst, const gl::ColorI *src); 708 static void average(R10G10B10A2S *dst, const R10G10B10A2S *src1, const R10G10B10A2S *src2); 709 }; 710 static_assert(sizeof(R10G10B10A2S) == 4, "R10G10B10A2S struct not 32-bits."); 711 712 struct R10G10B10X2 713 { 714 uint32_t R : 10; 715 uint32_t G : 10; 716 uint32_t B : 10; 717 718 static void readColor(gl::ColorF *dst, const R10G10B10X2 *src); 719 static void readColor(gl::ColorUI *dst, const R10G10B10X2 *src); 720 static void writeColor(R10G10B10X2 *dst, const gl::ColorF *src); 721 static void writeColor(R10G10B10X2 *dst, const gl::ColorUI *src); 722 static void average(R10G10B10X2 *dst, const R10G10B10X2 *src1, const R10G10B10X2 *src2); 723 }; 724 static_assert(sizeof(R10G10B10X2) == 4, "R10G10B10X2 struct not 32-bits."); 725 726 struct B10G10R10A2 727 { 728 uint32_t B : 10; 729 uint32_t G : 10; 730 uint32_t R : 10; 731 uint32_t A : 2; 732 733 static void readColor(gl::ColorF *dst, const B10G10R10A2 *src); 734 static void readColor(gl::ColorUI *dst, const B10G10R10A2 *src); 735 static void writeColor(B10G10R10A2 *dst, const gl::ColorF *src); 736 static void writeColor(B10G10R10A2 *dst, const gl::ColorUI *src); 737 static void average(B10G10R10A2 *dst, const B10G10R10A2 *src1, const B10G10R10A2 *src2); 738 }; 739 static_assert(sizeof(B10G10R10A2) == 4, "B10G10R10A2 struct not 32-bits."); 740 741 struct R9G9B9E5 742 { 743 uint32_t R : 9; 744 uint32_t G : 9; 745 uint32_t B : 9; 746 uint32_t E : 5; 747 748 static void readColor(gl::ColorF *dst, const R9G9B9E5 *src); 749 static void writeColor(R9G9B9E5 *dst, const gl::ColorF *src); 750 static void average(R9G9B9E5 *dst, const R9G9B9E5 *src1, const R9G9B9E5 *src2); 751 }; 752 static_assert(sizeof(R9G9B9E5) == 4, "R9G9B9E5 struct not 32-bits."); 753 754 struct R11G11B10F 755 { 756 uint32_t R : 11; 757 uint32_t G : 11; 758 uint32_t B : 10; 759 760 static void readColor(gl::ColorF *dst, const R11G11B10F *src); 761 static void writeColor(R11G11B10F *dst, const gl::ColorF *src); 762 static void average(R11G11B10F *dst, const R11G11B10F *src1, const R11G11B10F *src2); 763 }; 764 static_assert(sizeof(R11G11B10F) == 4, "R11G11B10F struct not 32-bits."); 765 766 struct D24S8 767 { 768 uint32_t S : 8; 769 uint32_t D : 24; 770 771 static void ReadDepthStencil(DepthStencil *dst, const D24S8 *src); 772 static void WriteDepthStencil(D24S8 *dst, const DepthStencil *src); 773 }; 774 775 struct S8 776 { 777 uint8_t S; 778 779 static void ReadDepthStencil(DepthStencil *dst, const S8 *src); 780 static void WriteDepthStencil(S8 *dst, const DepthStencil *src); 781 }; 782 783 struct D16 784 { 785 uint16_t D; 786 787 static void ReadDepthStencil(DepthStencil *dst, const D16 *src); 788 static void WriteDepthStencil(D16 *dst, const DepthStencil *src); 789 }; 790 791 struct D24X8 792 { 793 uint32_t D : 24; 794 uint32_t X : 8; 795 796 static void ReadDepthStencil(DepthStencil *dst, const D24X8 *src); 797 static void WriteDepthStencil(D24X8 *dst, const DepthStencil *src); 798 }; 799 800 struct D32F 801 { 802 float D; 803 804 static void ReadDepthStencil(DepthStencil *dst, const D32F *src); 805 static void WriteDepthStencil(D32F *dst, const DepthStencil *src); 806 }; 807 808 struct D32 809 { 810 uint32_t D; 811 812 static void ReadDepthStencil(DepthStencil *dst, const D32 *src); 813 static void WriteDepthStencil(D32 *dst, const DepthStencil *src); 814 }; 815 816 struct D32FS8X24 817 { 818 float D; 819 uint32_t S; 820 821 static void ReadDepthStencil(DepthStencil *dst, const D32FS8X24 *src); 822 static void WriteDepthStencil(D32FS8X24 *dst, const DepthStencil *src); 823 }; 824 } // namespace angle 825 826 #endif // IMAGEUTIL_IMAGEFORMATS_H_ 827