tor-browser

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

PackedEnums.cpp (20011B)


      1 // Copyright 2018 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 // PackedGLEnums.cpp:
      6 //   Declares ANGLE-specific enums classes for GLEnum and functions operating
      7 //   on them.
      8 
      9 #include "common/PackedEnums.h"
     10 
     11 #include "common/utilities.h"
     12 
     13 namespace gl
     14 {
     15 
     16 TextureType TextureTargetToType(TextureTarget target)
     17 {
     18    switch (target)
     19    {
     20        case TextureTarget::CubeMapNegativeX:
     21        case TextureTarget::CubeMapNegativeY:
     22        case TextureTarget::CubeMapNegativeZ:
     23        case TextureTarget::CubeMapPositiveX:
     24        case TextureTarget::CubeMapPositiveY:
     25        case TextureTarget::CubeMapPositiveZ:
     26            return TextureType::CubeMap;
     27        case TextureTarget::CubeMapArray:
     28            return TextureType::CubeMapArray;
     29        case TextureTarget::External:
     30            return TextureType::External;
     31        case TextureTarget::Rectangle:
     32            return TextureType::Rectangle;
     33        case TextureTarget::_2D:
     34            return TextureType::_2D;
     35        case TextureTarget::_2DArray:
     36            return TextureType::_2DArray;
     37        case TextureTarget::_2DMultisample:
     38            return TextureType::_2DMultisample;
     39        case TextureTarget::_2DMultisampleArray:
     40            return TextureType::_2DMultisampleArray;
     41        case TextureTarget::_3D:
     42            return TextureType::_3D;
     43        case TextureTarget::VideoImage:
     44            return TextureType::VideoImage;
     45        case TextureTarget::Buffer:
     46            return TextureType::Buffer;
     47        case TextureTarget::InvalidEnum:
     48            return TextureType::InvalidEnum;
     49        default:
     50            UNREACHABLE();
     51            return TextureType::InvalidEnum;
     52    }
     53 }
     54 
     55 bool IsCubeMapFaceTarget(TextureTarget target)
     56 {
     57    return TextureTargetToType(target) == TextureType::CubeMap;
     58 }
     59 
     60 TextureTarget NonCubeTextureTypeToTarget(TextureType type)
     61 {
     62    switch (type)
     63    {
     64        case TextureType::External:
     65            return TextureTarget::External;
     66        case TextureType::Rectangle:
     67            return TextureTarget::Rectangle;
     68        case TextureType::_2D:
     69            return TextureTarget::_2D;
     70        case TextureType::_2DArray:
     71            return TextureTarget::_2DArray;
     72        case TextureType::_2DMultisample:
     73            return TextureTarget::_2DMultisample;
     74        case TextureType::_2DMultisampleArray:
     75            return TextureTarget::_2DMultisampleArray;
     76        case TextureType::_3D:
     77            return TextureTarget::_3D;
     78        case TextureType::CubeMapArray:
     79            return TextureTarget::CubeMapArray;
     80        case TextureType::VideoImage:
     81            return TextureTarget::VideoImage;
     82        case TextureType::Buffer:
     83            return TextureTarget::Buffer;
     84        default:
     85            UNREACHABLE();
     86            return TextureTarget::InvalidEnum;
     87    }
     88 }
     89 
     90 // Check that we can do arithmetic on TextureTarget to convert from / to cube map faces
     91 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeX) -
     92                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
     93                  1u,
     94              "");
     95 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveY) -
     96                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
     97                  2u,
     98              "");
     99 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeY) -
    100                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
    101                  3u,
    102              "");
    103 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapPositiveZ) -
    104                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
    105                  4u,
    106              "");
    107 static_assert(static_cast<uint8_t>(TextureTarget::CubeMapNegativeZ) -
    108                      static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) ==
    109                  5u,
    110              "");
    111 
    112 TextureTarget CubeFaceIndexToTextureTarget(size_t face)
    113 {
    114    ASSERT(face < 6u);
    115    return static_cast<TextureTarget>(static_cast<uint8_t>(TextureTarget::CubeMapPositiveX) + face);
    116 }
    117 
    118 size_t CubeMapTextureTargetToFaceIndex(TextureTarget target)
    119 {
    120    ASSERT(IsCubeMapFaceTarget(target));
    121    return static_cast<uint8_t>(target) - static_cast<uint8_t>(TextureTarget::CubeMapPositiveX);
    122 }
    123 
    124 TextureType SamplerTypeToTextureType(GLenum samplerType)
    125 {
    126    switch (samplerType)
    127    {
    128        case GL_SAMPLER_2D:
    129        case GL_INT_SAMPLER_2D:
    130        case GL_UNSIGNED_INT_SAMPLER_2D:
    131        case GL_SAMPLER_2D_SHADOW:
    132            return TextureType::_2D;
    133 
    134        case GL_SAMPLER_EXTERNAL_OES:
    135        case GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT:
    136            return TextureType::External;
    137 
    138        case GL_SAMPLER_CUBE:
    139        case GL_INT_SAMPLER_CUBE:
    140        case GL_UNSIGNED_INT_SAMPLER_CUBE:
    141        case GL_SAMPLER_CUBE_SHADOW:
    142            return TextureType::CubeMap;
    143 
    144        case GL_SAMPLER_CUBE_MAP_ARRAY:
    145        case GL_INT_SAMPLER_CUBE_MAP_ARRAY:
    146        case GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY:
    147        case GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW:
    148            return TextureType::CubeMapArray;
    149 
    150        case GL_SAMPLER_2D_ARRAY:
    151        case GL_INT_SAMPLER_2D_ARRAY:
    152        case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY:
    153        case GL_SAMPLER_2D_ARRAY_SHADOW:
    154            return TextureType::_2DArray;
    155 
    156        case GL_SAMPLER_3D:
    157        case GL_INT_SAMPLER_3D:
    158        case GL_UNSIGNED_INT_SAMPLER_3D:
    159            return TextureType::_3D;
    160 
    161        case GL_SAMPLER_2D_MULTISAMPLE:
    162        case GL_INT_SAMPLER_2D_MULTISAMPLE:
    163        case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE:
    164            return TextureType::_2DMultisample;
    165 
    166        case GL_SAMPLER_2D_MULTISAMPLE_ARRAY:
    167        case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
    168        case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY:
    169            return TextureType::_2DMultisampleArray;
    170 
    171        case GL_SAMPLER_BUFFER:
    172        case GL_INT_SAMPLER_BUFFER:
    173        case GL_UNSIGNED_INT_SAMPLER_BUFFER:
    174            return TextureType::Buffer;
    175 
    176        case GL_SAMPLER_2D_RECT_ANGLE:
    177            return TextureType::Rectangle;
    178 
    179        case GL_SAMPLER_VIDEO_IMAGE_WEBGL:
    180            return TextureType::VideoImage;
    181 
    182        default:
    183            UNREACHABLE();
    184            return TextureType::InvalidEnum;
    185    }
    186 }
    187 
    188 TextureType ImageTypeToTextureType(GLenum imageType)
    189 {
    190    switch (imageType)
    191    {
    192        case GL_IMAGE_2D:
    193        case GL_INT_IMAGE_2D:
    194        case GL_UNSIGNED_INT_IMAGE_2D:
    195            return TextureType::_2D;
    196 
    197        case GL_IMAGE_CUBE:
    198        case GL_INT_IMAGE_CUBE:
    199        case GL_UNSIGNED_INT_IMAGE_CUBE:
    200            return TextureType::CubeMap;
    201 
    202        case GL_IMAGE_CUBE_MAP_ARRAY:
    203        case GL_INT_IMAGE_CUBE_MAP_ARRAY:
    204        case GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY:
    205            return TextureType::CubeMapArray;
    206 
    207        case GL_IMAGE_2D_ARRAY:
    208        case GL_INT_IMAGE_2D_ARRAY:
    209        case GL_UNSIGNED_INT_IMAGE_2D_ARRAY:
    210            return TextureType::_2DArray;
    211 
    212        case GL_IMAGE_3D:
    213        case GL_INT_IMAGE_3D:
    214        case GL_UNSIGNED_INT_IMAGE_3D:
    215            return TextureType::_3D;
    216 
    217        case GL_IMAGE_BUFFER:
    218        case GL_INT_IMAGE_BUFFER:
    219        case GL_UNSIGNED_INT_IMAGE_BUFFER:
    220            return TextureType::Buffer;
    221 
    222        default:
    223            UNREACHABLE();
    224            return TextureType::InvalidEnum;
    225    }
    226 }
    227 
    228 bool IsMultisampled(TextureType type)
    229 {
    230    switch (type)
    231    {
    232        case TextureType::_2DMultisample:
    233        case TextureType::_2DMultisampleArray:
    234            return true;
    235        default:
    236            return false;
    237    }
    238 }
    239 
    240 bool IsArrayTextureType(TextureType type)
    241 {
    242    switch (type)
    243    {
    244        case TextureType::_2DArray:
    245        case TextureType::_2DMultisampleArray:
    246        case TextureType::CubeMapArray:
    247            return true;
    248        default:
    249            return false;
    250    }
    251 }
    252 
    253 bool IsStaticBufferUsage(BufferUsage useage)
    254 {
    255    switch (useage)
    256    {
    257        case BufferUsage::StaticCopy:
    258        case BufferUsage::StaticDraw:
    259        case BufferUsage::StaticRead:
    260            return true;
    261        default:
    262            return false;
    263    }
    264 }
    265 
    266 std::ostream &operator<<(std::ostream &os, PrimitiveMode value)
    267 {
    268    switch (value)
    269    {
    270        case PrimitiveMode::LineLoop:
    271            os << "GL_LINE_LOOP";
    272            break;
    273        case PrimitiveMode::Lines:
    274            os << "GL_LINES";
    275            break;
    276        case PrimitiveMode::LinesAdjacency:
    277            os << "GL_LINES_ADJACENCY";
    278            break;
    279        case PrimitiveMode::LineStrip:
    280            os << "GL_LINE_STRIP";
    281            break;
    282        case PrimitiveMode::LineStripAdjacency:
    283            os << "GL_LINE_STRIP_ADJANCENCY";
    284            break;
    285        case PrimitiveMode::Patches:
    286            os << "GL_PATCHES";
    287            break;
    288        case PrimitiveMode::Points:
    289            os << "GL_POINTS";
    290            break;
    291        case PrimitiveMode::TriangleFan:
    292            os << "GL_TRIANGLE_FAN";
    293            break;
    294        case PrimitiveMode::Triangles:
    295            os << "GL_TRIANGLES";
    296            break;
    297        case PrimitiveMode::TrianglesAdjacency:
    298            os << "GL_TRIANGLES_ADJANCENCY";
    299            break;
    300        case PrimitiveMode::TriangleStrip:
    301            os << "GL_TRIANGLE_STRIP";
    302            break;
    303        case PrimitiveMode::TriangleStripAdjacency:
    304            os << "GL_TRIANGLE_STRIP_ADJACENCY";
    305            break;
    306        default:
    307            os << "GL_INVALID_ENUM";
    308            break;
    309    }
    310    return os;
    311 }
    312 
    313 std::ostream &operator<<(std::ostream &os, DrawElementsType value)
    314 {
    315    switch (value)
    316    {
    317        case DrawElementsType::UnsignedByte:
    318            os << "GL_UNSIGNED_BYTE";
    319            break;
    320        case DrawElementsType::UnsignedShort:
    321            os << "GL_UNSIGNED_SHORT";
    322            break;
    323        case DrawElementsType::UnsignedInt:
    324            os << "GL_UNSIGNED_INT";
    325            break;
    326        default:
    327            os << "GL_INVALID_ENUM";
    328            break;
    329    }
    330 
    331    return os;
    332 }
    333 
    334 std::ostream &operator<<(std::ostream &os, BlendEquationType value)
    335 {
    336    switch (value)
    337    {
    338        case BlendEquationType::Add:
    339            os << "GL_FUNC_ADD";
    340            break;
    341        case BlendEquationType::Min:
    342            os << "GL_MIN";
    343            break;
    344        case BlendEquationType::Max:
    345            os << "GL_MAX";
    346            break;
    347        case BlendEquationType::Subtract:
    348            os << "GL_FUNC_SUBTRACT";
    349            break;
    350        case BlendEquationType::ReverseSubtract:
    351            os << "GL_FUNC_REVERSE_SUBTRACT";
    352            break;
    353        case BlendEquationType::Multiply:
    354            os << "GL_MULTIPLY_KHR";
    355            break;
    356        case BlendEquationType::Screen:
    357            os << "GL_SCREEN_KHR";
    358            break;
    359        case BlendEquationType::Overlay:
    360            os << "GL_OVERLAY_KHR";
    361            break;
    362        case BlendEquationType::Darken:
    363            os << "GL_DARKEN_KHR";
    364            break;
    365        case BlendEquationType::Lighten:
    366            os << "GL_LIGHTEN_KHR";
    367            break;
    368        case BlendEquationType::Colordodge:
    369            os << "GL_COLORDODGE_KHR";
    370            break;
    371        case BlendEquationType::Colorburn:
    372            os << "GL_COLORBURN_KHR";
    373            break;
    374        case BlendEquationType::Hardlight:
    375            os << "GL_HARDLIGHT_KHR";
    376            break;
    377        case BlendEquationType::Softlight:
    378            os << "GL_SOFTLIGHT_KHR";
    379            break;
    380        case BlendEquationType::Difference:
    381            os << "GL_DIFFERENCE_KHR";
    382            break;
    383        case BlendEquationType::Exclusion:
    384            os << "GL_EXCLUSION_KHR";
    385            break;
    386        case BlendEquationType::HslHue:
    387            os << "GL_HSL_HUE_KHR";
    388            break;
    389        case BlendEquationType::HslSaturation:
    390            os << "GL_HSL_SATURATION_KHR";
    391            break;
    392        case BlendEquationType::HslColor:
    393            os << "GL_HSL_COLOR_KHR";
    394            break;
    395        case BlendEquationType::HslLuminosity:
    396            os << "GL_HSL_LUMINOSITY_KHR";
    397            break;
    398        default:
    399            os << "GL_INVALID_ENUM";
    400            break;
    401    }
    402 
    403    return os;
    404 }
    405 
    406 std::ostream &operator<<(std::ostream &os, BlendFactorType value)
    407 {
    408    switch (value)
    409    {
    410        case BlendFactorType::Zero:
    411            os << "GL_ZERO";
    412            break;
    413        case BlendFactorType::One:
    414            os << "GL_ONE";
    415            break;
    416        case BlendFactorType::SrcColor:
    417            os << "GL_SRC_COLOR";
    418            break;
    419        case BlendFactorType::OneMinusSrcColor:
    420            os << "GL_ONE_MINUS_SRC_COLOR";
    421            break;
    422        case BlendFactorType::SrcAlpha:
    423            os << "GL_SRC_ALPHA";
    424            break;
    425        case BlendFactorType::OneMinusSrcAlpha:
    426            os << "GL_ONE_MINUS_SRC_ALPHA";
    427            break;
    428        case BlendFactorType::DstAlpha:
    429            os << "GL_DST_ALPHA";
    430            break;
    431        case BlendFactorType::OneMinusDstAlpha:
    432            os << "GL_ONE_MINUS_DST_ALPHA";
    433            break;
    434        case BlendFactorType::DstColor:
    435            os << "GL_DST_COLOR";
    436            break;
    437        case BlendFactorType::OneMinusDstColor:
    438            os << "GL_ONE_MINUS_DST_COLOR";
    439            break;
    440        case BlendFactorType::SrcAlphaSaturate:
    441            os << "GL_SRC_ALPHA_SATURATE";
    442            break;
    443        case BlendFactorType::ConstantColor:
    444            os << "GL_CONSTANT_COLOR";
    445            break;
    446        case BlendFactorType::OneMinusConstantColor:
    447            os << "GL_ONE_MINUS_CONSTANT_COLOR";
    448            break;
    449        case BlendFactorType::ConstantAlpha:
    450            os << "GL_CONSTANT_ALPHA";
    451            break;
    452        case BlendFactorType::OneMinusConstantAlpha:
    453            os << "GL_ONE_MINUS_CONSTANT_ALPHA";
    454            break;
    455        case BlendFactorType::Src1Alpha:
    456            os << "GL_SRC1_ALPHA_EXT";
    457            break;
    458        case BlendFactorType::Src1Color:
    459            os << "GL_SRC1_COLOR_EXT";
    460            break;
    461        case BlendFactorType::OneMinusSrc1Color:
    462            os << "GL_ONE_MINUS_SRC1_COLOR_EXT";
    463            break;
    464        case BlendFactorType::OneMinusSrc1Alpha:
    465            os << "GL_ONE_MINUS_SRC1_ALPHA_EXT";
    466            break;
    467        default:
    468            os << "GL_INVALID_ENUM";
    469            break;
    470    }
    471 
    472    return os;
    473 }
    474 
    475 std::ostream &operator<<(std::ostream &os, VertexAttribType value)
    476 {
    477    switch (value)
    478    {
    479        case VertexAttribType::Byte:
    480            os << "GL_BYTE";
    481            break;
    482        case VertexAttribType::Fixed:
    483            os << "GL_FIXED";
    484            break;
    485        case VertexAttribType::Float:
    486            os << "GL_FLOAT";
    487            break;
    488        case VertexAttribType::HalfFloat:
    489            os << "GL_HALF_FLOAT";
    490            break;
    491        case VertexAttribType::HalfFloatOES:
    492            os << "GL_HALF_FLOAT_OES";
    493            break;
    494        case VertexAttribType::Int:
    495            os << "GL_INT";
    496            break;
    497        case VertexAttribType::Int2101010:
    498            os << "GL_INT_2_10_10_10_REV";
    499            break;
    500        case VertexAttribType::Int1010102:
    501            os << "GL_INT_10_10_10_2_OES";
    502            break;
    503        case VertexAttribType::Short:
    504            os << "GL_SHORT";
    505            break;
    506        case VertexAttribType::UnsignedByte:
    507            os << "GL_UNSIGNED_BYTE";
    508            break;
    509        case VertexAttribType::UnsignedInt:
    510            os << "GL_UNSIGNED_INT";
    511            break;
    512        case VertexAttribType::UnsignedInt2101010:
    513            os << "GL_UNSIGNED_INT_2_10_10_10_REV";
    514            break;
    515        case VertexAttribType::UnsignedInt1010102:
    516            os << "GL_UNSIGNED_INT_10_10_10_2_OES";
    517            break;
    518        case VertexAttribType::UnsignedShort:
    519            os << "GL_UNSIGNED_SHORT";
    520            break;
    521        default:
    522            os << "GL_INVALID_ENUM";
    523            break;
    524    }
    525    return os;
    526 }
    527 
    528 std::ostream &operator<<(std::ostream &os, TessEvaluationType value)
    529 {
    530    switch (value)
    531    {
    532        case TessEvaluationType::Triangles:
    533            os << "GL_TRIANGLES";
    534            break;
    535        case TessEvaluationType::Quads:
    536            os << "GL_QUADS";
    537            break;
    538        case TessEvaluationType::Isolines:
    539            os << "GL_ISOLINES";
    540            break;
    541        case TessEvaluationType::EqualSpacing:
    542            os << "GL_EQUAL";
    543            break;
    544        case TessEvaluationType::FractionalEvenSpacing:
    545            os << "GL_FRACTIONAL_EVEN";
    546            break;
    547        case TessEvaluationType::FractionalOddSpacing:
    548            os << "GL_FRACTIONAL_ODD";
    549            break;
    550        case TessEvaluationType::Cw:
    551            os << "GL_CW";
    552            break;
    553        case TessEvaluationType::Ccw:
    554            os << "GL_CCW";
    555            break;
    556        case TessEvaluationType::PointMode:
    557            os << "GL_TESS_GEN_POINT_MODE";
    558            break;
    559        default:
    560            os << "GL_INVALID_ENUM";
    561            break;
    562    }
    563    return os;
    564 }
    565 
    566 const char *ShaderTypeToString(ShaderType shaderType)
    567 {
    568    constexpr ShaderMap<const char *> kShaderTypeNameMap = {
    569        {ShaderType::Vertex, "Vertex"},
    570        {ShaderType::TessControl, "Tessellation control"},
    571        {ShaderType::TessEvaluation, "Tessellation evaluation"},
    572        {ShaderType::Geometry, "Geometry"},
    573        {ShaderType::Fragment, "Fragment"},
    574        {ShaderType::Compute, "Compute"}};
    575    return kShaderTypeNameMap[shaderType];
    576 }
    577 
    578 bool operator<(const UniformLocation &lhs, const UniformLocation &rhs)
    579 {
    580    return lhs.value < rhs.value;
    581 }
    582 
    583 bool IsEmulatedCompressedFormat(GLenum format)
    584 {
    585    // TODO(anglebug.com/6177): Check for all formats ANGLE will use to emulate a compressed texture
    586    return format == GL_RGBA || format == GL_RG || format == GL_RED;
    587 }
    588 }  // namespace gl
    589 
    590 namespace egl
    591 {
    592 MessageType ErrorCodeToMessageType(EGLint errorCode)
    593 {
    594    switch (errorCode)
    595    {
    596        case EGL_BAD_ALLOC:
    597        case EGL_CONTEXT_LOST:
    598        case EGL_NOT_INITIALIZED:
    599            return MessageType::Critical;
    600 
    601        case EGL_BAD_ACCESS:
    602        case EGL_BAD_ATTRIBUTE:
    603        case EGL_BAD_CONFIG:
    604        case EGL_BAD_CONTEXT:
    605        case EGL_BAD_CURRENT_SURFACE:
    606        case EGL_BAD_DISPLAY:
    607        case EGL_BAD_MATCH:
    608        case EGL_BAD_NATIVE_PIXMAP:
    609        case EGL_BAD_NATIVE_WINDOW:
    610        case EGL_BAD_PARAMETER:
    611        case EGL_BAD_SURFACE:
    612        case EGL_BAD_STREAM_KHR:
    613        case EGL_BAD_STATE_KHR:
    614        case EGL_BAD_DEVICE_EXT:
    615            return MessageType::Error;
    616 
    617        case EGL_SUCCESS:
    618        default:
    619            UNREACHABLE();
    620            return MessageType::InvalidEnum;
    621    }
    622 }
    623 }  // namespace egl
    624 
    625 namespace egl_gl
    626 {
    627 
    628 gl::TextureTarget EGLCubeMapTargetToCubeMapTarget(EGLenum eglTarget)
    629 {
    630    ASSERT(egl::IsCubeMapTextureTarget(eglTarget));
    631    return gl::CubeFaceIndexToTextureTarget(egl::CubeMapTextureTargetToLayerIndex(eglTarget));
    632 }
    633 
    634 gl::TextureTarget EGLImageTargetToTextureTarget(EGLenum eglTarget)
    635 {
    636    switch (eglTarget)
    637    {
    638        case EGL_GL_TEXTURE_2D_KHR:
    639            return gl::TextureTarget::_2D;
    640 
    641        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_X_KHR:
    642        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_X_KHR:
    643        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Y_KHR:
    644        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_KHR:
    645        case EGL_GL_TEXTURE_CUBE_MAP_POSITIVE_Z_KHR:
    646        case EGL_GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_KHR:
    647            return EGLCubeMapTargetToCubeMapTarget(eglTarget);
    648 
    649        case EGL_GL_TEXTURE_3D_KHR:
    650            return gl::TextureTarget::_3D;
    651 
    652        default:
    653            UNREACHABLE();
    654            return gl::TextureTarget::InvalidEnum;
    655    }
    656 }
    657 
    658 gl::TextureType EGLTextureTargetToTextureType(EGLenum eglTarget)
    659 {
    660    switch (eglTarget)
    661    {
    662        case EGL_TEXTURE_2D:
    663            return gl::TextureType::_2D;
    664 
    665        case EGL_TEXTURE_RECTANGLE_ANGLE:
    666            return gl::TextureType::Rectangle;
    667 
    668        default:
    669            UNREACHABLE();
    670            return gl::TextureType::InvalidEnum;
    671    }
    672 }
    673 }  // namespace egl_gl