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