tor-browser

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

format_map_desktop.cpp (3597B)


      1 // Copyright 2019 The ANGLE Project Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 //
      5 // format_map_desktop:
      6 //   Determining the sized internal format from a (format,type) pair.
      7 //   Also check DesktopGL format combinations for validity.
      8 
      9 #include "angle_gl.h"
     10 #include "common/debug.h"
     11 #include "formatutils.h"
     12 #include "renderer/gl/functionsgl_enums.h"
     13 
     14 // TODO(http://anglebug.com/3730): switch ANGLE to generate its own GL enum types from gl.xml
     15 
     16 namespace gl
     17 {
     18 
     19 bool ValidDesktopFormat(GLenum format)
     20 {
     21    switch (format)
     22    {
     23        case GL_STENCIL_INDEX:
     24        case GL_DEPTH_COMPONENT:
     25        case GL_DEPTH_STENCIL:
     26        case GL_RED:
     27        case GL_GREEN:
     28        case GL_BLUE:
     29        case GL_RG:
     30        case GL_RGB:
     31        case GL_RGBA:
     32        case GL_BGR:
     33        case GL_BGRA:
     34        case GL_RED_INTEGER:
     35        case GL_GREEN_INTEGER:
     36        case GL_BLUE_INTEGER:
     37        case GL_RG_INTEGER:
     38        case GL_RGB_INTEGER:
     39        case GL_RGBA_INTEGER:
     40        case GL_BGR_INTEGER:
     41        case GL_BGRA_INTEGER:
     42            return true;
     43 
     44        default:
     45            return false;
     46    }
     47 }
     48 
     49 bool ValidDesktopType(GLenum type)
     50 {
     51    switch (type)
     52    {
     53        case GL_UNSIGNED_BYTE:
     54        case GL_BYTE:
     55        case GL_UNSIGNED_SHORT:
     56        case GL_SHORT:
     57        case GL_UNSIGNED_INT:
     58        case GL_INT:
     59        case GL_HALF_FLOAT:
     60        case GL_FLOAT:
     61        case GL_UNSIGNED_BYTE_3_3_2:
     62        case GL_UNSIGNED_BYTE_2_3_3_REV:
     63        case GL_UNSIGNED_SHORT_5_6_5:
     64        case GL_UNSIGNED_SHORT_5_6_5_REV:
     65        case GL_UNSIGNED_SHORT_4_4_4_4:
     66        case GL_UNSIGNED_SHORT_4_4_4_4_REV:
     67        case GL_UNSIGNED_SHORT_5_5_5_1:
     68        case GL_UNSIGNED_SHORT_1_5_5_5_REV:
     69        case GL_UNSIGNED_INT_10_10_10_2:
     70        case GL_UNSIGNED_INT_2_10_10_10_REV:
     71        case GL_UNSIGNED_INT_24_8:
     72        case GL_UNSIGNED_INT_10F_11F_11F_REV:
     73        case GL_UNSIGNED_INT_5_9_9_9_REV:
     74        case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
     75            return true;
     76 
     77        default:
     78            return false;
     79    }
     80 }
     81 
     82 // From OpenGL 4.6 spec section 8.4
     83 bool ValidDesktopFormatCombination(GLenum format, GLenum type, GLenum internalFormat)
     84 {
     85    ASSERT(ValidDesktopFormat(format) && ValidDesktopType(type));
     86    const InternalFormat &internalFormatInfo = GetInternalFormatInfo(internalFormat, type);
     87    const InternalFormat &formatInfo         = GetInternalFormatInfo(format, type);
     88 
     89    switch (format)
     90    {
     91        case GL_RED_INTEGER:
     92        case GL_GREEN_INTEGER:
     93        case GL_BLUE_INTEGER:
     94        case GL_RG_INTEGER:
     95        case GL_RGB_INTEGER:
     96        case GL_RGBA_INTEGER:
     97        case GL_BGR_INTEGER:
     98        case GL_BGRA_INTEGER:
     99            switch (type)
    100            {
    101                case GL_HALF_FLOAT:
    102                case GL_FLOAT:
    103                case GL_UNSIGNED_INT_10F_11F_11F_REV:
    104                case GL_UNSIGNED_INT_5_9_9_9_REV:
    105                    return false;
    106                default:
    107                    break;
    108            }
    109            if (!internalFormatInfo.isInt())
    110                return false;
    111            break;
    112        default:
    113            // format is not an integer
    114            if (internalFormatInfo.isInt())
    115                return false;
    116 
    117            if (formatInfo.isDepthOrStencil() != internalFormatInfo.isDepthOrStencil())
    118                return false;
    119 
    120            if (format == GL_STENCIL_INDEX && internalFormat != GL_STENCIL_INDEX)
    121                return false;
    122            break;
    123    }
    124 
    125    return true;
    126 }
    127 
    128 }  // namespace gl