tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

imageformats.h (24544B)


      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_