Edit

kc3-lang/angle/src/libANGLE/format_map_autogen.cpp

Branch :

  • Show log

    Commit

  • Author : Alexey Knyazev
    Date : 2021-05-08 13:24:58
    Hash : 835bcb1e
    Message : Vulkan: Support GL_EXT_texture_sRGB_RG8 For completeness, added mappings of R8_SRGB and R8G8_SRGB to OpenGL and Metal. Bug: angleproject:4932 Change-Id: Ic8e44e3a94c114e985f6965fcd43fbcb8071432d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2880661 Commit-Queue: Alexey Knyazev <lexa.knyazev@gmail.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org>

  • src/libANGLE/format_map_autogen.cpp
  • // GENERATED FILE - DO NOT EDIT.
    // Generated by gen_format_map.py using data from format_map_data.json.
    // ES3 format info from es3_format_type_combinations.json.
    //
    // Copyright 2016 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // format_map:
    //   Determining the sized internal format from a (format,type) pair.
    //   Also check es3 format combinations for validity.
    
    #include "angle_gl.h"
    #include "common/debug.h"
    
    namespace gl
    {
    
    GLenum GetSizedFormatInternal(GLenum format, GLenum type)
    {
        switch (format)
        {
            case GL_ALPHA:
                switch (type)
                {
                    case GL_FLOAT:
                        return GL_ALPHA32F_EXT;
                    case GL_HALF_FLOAT:
                        return GL_ALPHA16F_EXT;
                    case GL_HALF_FLOAT_OES:
                        return GL_ALPHA16F_EXT;
                    case GL_UNSIGNED_BYTE:
                        return GL_ALPHA8_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_BGRA_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_BGRA8_EXT;
                    case GL_UNSIGNED_INT_2_10_10_10_REV:
                        return GL_BGR10_A2_ANGLEX;
                    case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
                        return GL_BGR5_A1_ANGLEX;
                    case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
                        return GL_BGRA4_ANGLEX;
                    case GL_UNSIGNED_SHORT_5_6_5:
                        return GL_BGR565_ANGLEX;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RED_GREEN_RGTC2_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RED_GREEN_RGTC2_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RED_RGTC1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RED_RGTC1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGBA_BPTC_UNORM_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGBA_BPTC_UNORM_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SIGNED_RED_RGTC1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SIGNED_RED_RGTC1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_COMPRESSED_SRGB_S3TC_DXT1_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_DEPTH_COMPONENT:
                switch (type)
                {
                    case GL_FLOAT:
                        return GL_DEPTH_COMPONENT32F;
                    case GL_UNSIGNED_INT:
                        return GL_DEPTH_COMPONENT32_OES;
                    case GL_UNSIGNED_INT_24_8:
                        return GL_DEPTH24_STENCIL8;
                    case GL_UNSIGNED_SHORT:
                        return GL_DEPTH_COMPONENT16;
                    default:
                        break;
                }
                break;
    
            case GL_DEPTH_STENCIL:
                switch (type)
                {
                    case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
                        return GL_DEPTH32F_STENCIL8;
                    case GL_UNSIGNED_INT_24_8:
                        return GL_DEPTH24_STENCIL8;
                    default:
                        break;
                }
                break;
    
            case GL_LUMINANCE:
                switch (type)
                {
                    case GL_FLOAT:
                        return GL_LUMINANCE32F_EXT;
                    case GL_HALF_FLOAT:
                        return GL_LUMINANCE16F_EXT;
                    case GL_HALF_FLOAT_OES:
                        return GL_LUMINANCE16F_EXT;
                    case GL_UNSIGNED_BYTE:
                        return GL_LUMINANCE8_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_LUMINANCE_ALPHA:
                switch (type)
                {
                    case GL_FLOAT:
                        return GL_LUMINANCE_ALPHA32F_EXT;
                    case GL_HALF_FLOAT:
                        return GL_LUMINANCE_ALPHA16F_EXT;
                    case GL_HALF_FLOAT_OES:
                        return GL_LUMINANCE_ALPHA16F_EXT;
                    case GL_UNSIGNED_BYTE:
                        return GL_LUMINANCE8_ALPHA8_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_RED:
                switch (type)
                {
                    case GL_BYTE:
                        return GL_R8_SNORM;
                    case GL_FLOAT:
                        return GL_R32F;
                    case GL_HALF_FLOAT:
                        return GL_R16F;
                    case GL_HALF_FLOAT_OES:
                        return GL_R16F;
                    case GL_SHORT:
                        return GL_R16_SNORM_EXT;
                    case GL_UNSIGNED_BYTE:
                        return GL_R8;
                    case GL_UNSIGNED_SHORT:
                        return GL_R16_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_RED_INTEGER:
                switch (type)
                {
                    case GL_BYTE:
                        return GL_R8I;
                    case GL_INT:
                        return GL_R32I;
                    case GL_SHORT:
                        return GL_R16I;
                    case GL_UNSIGNED_BYTE:
                        return GL_R8UI;
                    case GL_UNSIGNED_INT:
                        return GL_R32UI;
                    case GL_UNSIGNED_SHORT:
                        return GL_R16UI;
                    default:
                        break;
                }
                break;
    
            case GL_RG:
                switch (type)
                {
                    case GL_BYTE:
                        return GL_RG8_SNORM;
                    case GL_FLOAT:
                        return GL_RG32F;
                    case GL_HALF_FLOAT:
                        return GL_RG16F;
                    case GL_HALF_FLOAT_OES:
                        return GL_RG16F;
                    case GL_SHORT:
                        return GL_RG16_SNORM_EXT;
                    case GL_UNSIGNED_BYTE:
                        return GL_RG8;
                    case GL_UNSIGNED_SHORT:
                        return GL_RG16_EXT;
                    default:
                        break;
                }
                break;
    
            case GL_RGB:
                switch (type)
                {
                    case GL_BYTE:
                        return GL_RGB8_SNORM;
                    case GL_FLOAT:
                        return GL_RGB32F;
                    case GL_HALF_FLOAT:
                        return GL_RGB16F;
                    case GL_HALF_FLOAT_OES:
                        return GL_RGB16F;
                    case GL_SHORT:
                        return GL_RGB16_SNORM_EXT;
                    case GL_UNSIGNED_BYTE:
                        return GL_RGB8;
                    case GL_UNSIGNED_INT_10F_11F_11F_REV:
                        return GL_R11F_G11F_B10F;
                    case GL_UNSIGNED_INT_2_10_10_10_REV:
                        return GL_RGB10_UNORM_ANGLEX;
                    case GL_UNSIGNED_INT_5_9_9_9_REV:
                        return GL_RGB9_E5;
                    case GL_UNSIGNED_SHORT:
                        return GL_RGB16_EXT;
                    case GL_UNSIGNED_SHORT_5_6_5:
                        return GL_RGB565;
                    default:
                        break;
                }
                break;
    
            case GL_RGBA:
                switch (type)
                {
                    case GL_BYTE:
                        return GL_RGBA8_SNORM;
                    case GL_FLOAT:
                        return GL_RGBA32F;
                    case GL_HALF_FLOAT:
                        return GL_RGBA16F;
                    case GL_HALF_FLOAT_OES:
                        return GL_RGBA16F;
                    case GL_SHORT:
                        return GL_RGBA16_SNORM_EXT;
                    case GL_UNSIGNED_BYTE:
                        return GL_RGBA8;
                    case GL_UNSIGNED_INT_2_10_10_10_REV:
                        return GL_RGB10_A2;
                    case GL_UNSIGNED_SHORT:
                        return GL_RGBA16_EXT;
                    case GL_UNSIGNED_SHORT_4_4_4_4:
                        return GL_RGBA4;
                    case GL_UNSIGNED_SHORT_5_5_5_1:
                        return GL_RGB5_A1;
                    default:
                        break;
                }
                break;
    
            case GL_RGBA_INTEGER:
                switch (type)
                {
                    case GL_BYTE:
                        return GL_RGBA8I;
                    case GL_INT:
                        return GL_RGBA32I;
                    case GL_SHORT:
                        return GL_RGBA16I;
                    case GL_UNSIGNED_BYTE:
                        return GL_RGBA8UI;
                    case GL_UNSIGNED_INT:
                        return GL_RGBA32UI;
                    case GL_UNSIGNED_INT_2_10_10_10_REV:
                        return GL_RGB10_A2UI;
                    case GL_UNSIGNED_SHORT:
                        return GL_RGBA16UI;
                    default:
                        break;
                }
                break;
    
            case GL_RGB_INTEGER:
                switch (type)
                {
                    case GL_BYTE:
                        return GL_RGB8I;
                    case GL_INT:
                        return GL_RGB32I;
                    case GL_SHORT:
                        return GL_RGB16I;
                    case GL_UNSIGNED_BYTE:
                        return GL_RGB8UI;
                    case GL_UNSIGNED_INT:
                        return GL_RGB32UI;
                    case GL_UNSIGNED_SHORT:
                        return GL_RGB16UI;
                    default:
                        break;
                }
                break;
    
            case GL_RG_INTEGER:
                switch (type)
                {
                    case GL_BYTE:
                        return GL_RG8I;
                    case GL_INT:
                        return GL_RG32I;
                    case GL_SHORT:
                        return GL_RG16I;
                    case GL_UNSIGNED_BYTE:
                        return GL_RG8UI;
                    case GL_UNSIGNED_INT:
                        return GL_RG32UI;
                    case GL_UNSIGNED_SHORT:
                        return GL_RG16UI;
                    default:
                        break;
                }
                break;
    
            case GL_SRGB_ALPHA_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_SRGB8_ALPHA8;
                    default:
                        break;
                }
                break;
    
            case GL_SRGB_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_SRGB8;
                    default:
                        break;
                }
                break;
    
            case GL_STENCIL:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_STENCIL_INDEX8;
                    default:
                        break;
                }
                break;
    
            case GL_STENCIL_INDEX_OES:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                        return GL_STENCIL_INDEX8;
                    default:
                        break;
                }
                break;
    
            case GL_NONE:
                return GL_NONE;
    
            default:
                break;
        }
    
        return GL_NONE;
    }
    
    bool ValidES3Format(GLenum format)
    {
        switch (format)
        {
            case GL_ALPHA:
            case GL_BGRA_EXT:
            case GL_DEPTH_COMPONENT:
            case GL_DEPTH_STENCIL:
            case GL_LUMINANCE:
            case GL_LUMINANCE_ALPHA:
            case GL_RED:
            case GL_RED_INTEGER:
            case GL_RG:
            case GL_RGB:
            case GL_RGBA:
            case GL_RGBA_INTEGER:
            case GL_RGB_INTEGER:
            case GL_RG_INTEGER:
            case GL_SRGB_ALPHA_EXT:
            case GL_SRGB_EXT:
            case GL_STENCIL_INDEX:
                return true;
    
            default:
                return false;
        }
    }
    
    bool ValidES3Type(GLenum type)
    {
        switch (type)
        {
            case GL_BYTE:
            case GL_FLOAT:
            case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
            case GL_HALF_FLOAT:
            case GL_HALF_FLOAT_OES:
            case GL_INT:
            case GL_SHORT:
            case GL_UNSIGNED_BYTE:
            case GL_UNSIGNED_INT:
            case GL_UNSIGNED_INT_10F_11F_11F_REV:
            case GL_UNSIGNED_INT_24_8:
            case GL_UNSIGNED_INT_2_10_10_10_REV:
            case GL_UNSIGNED_INT_5_9_9_9_REV:
            case GL_UNSIGNED_SHORT:
            case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
            case GL_UNSIGNED_SHORT_4_4_4_4:
            case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
            case GL_UNSIGNED_SHORT_5_5_5_1:
            case GL_UNSIGNED_SHORT_5_6_5:
                return true;
    
            default:
                return false;
        }
    }
    
    bool ValidES3FormatCombination(GLenum format, GLenum type, GLenum internalFormat)
    {
        ASSERT(ValidES3Format(format) && ValidES3Type(type));
    
        switch (format)
        {
            case GL_ALPHA:
                switch (type)
                {
                    case GL_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_ALPHA:
                            case GL_ALPHA32F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_ALPHA:
                            case GL_ALPHA16F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT_OES:
                    {
                        switch (internalFormat)
                        {
                            case GL_ALPHA:
                            case GL_ALPHA16F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_ALPHA:
                            case GL_ALPHA8_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_BGRA_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_BGRA_EXT:
                            case GL_BGRA8_EXT:
                            case GL_BGRA4_ANGLEX:
                            case GL_BGR5_A1_ANGLEX:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT:
                    {
                        switch (internalFormat)
                        {
                            case GL_BGR5_A1_ANGLEX:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
                    {
                        switch (internalFormat)
                        {
                            case GL_BGRA4_ANGLEX:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_DEPTH_COMPONENT:
                switch (type)
                {
                    case GL_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_DEPTH_COMPONENT32F:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_DEPTH_COMPONENT24:
                            case GL_DEPTH_COMPONENT16:
                            case GL_DEPTH_COMPONENT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT_24_8:
                    {
                        switch (internalFormat)
                        {
                            case GL_DEPTH_COMPONENT32_OES:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_DEPTH_COMPONENT16:
                            case GL_DEPTH_COMPONENT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_DEPTH_STENCIL:
                switch (type)
                {
                    case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
                    {
                        switch (internalFormat)
                        {
                            case GL_DEPTH32F_STENCIL8:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT_24_8:
                    {
                        switch (internalFormat)
                        {
                            case GL_DEPTH_STENCIL:
                            case GL_DEPTH24_STENCIL8:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_LUMINANCE:
                switch (type)
                {
                    case GL_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_LUMINANCE:
                            case GL_LUMINANCE32F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_LUMINANCE:
                            case GL_LUMINANCE16F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT_OES:
                    {
                        switch (internalFormat)
                        {
                            case GL_LUMINANCE:
                            case GL_LUMINANCE16F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_LUMINANCE:
                            case GL_LUMINANCE8_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_LUMINANCE_ALPHA:
                switch (type)
                {
                    case GL_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_LUMINANCE_ALPHA:
                            case GL_LUMINANCE_ALPHA32F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_LUMINANCE_ALPHA:
                            case GL_LUMINANCE_ALPHA16F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT_OES:
                    {
                        switch (internalFormat)
                        {
                            case GL_LUMINANCE_ALPHA:
                            case GL_LUMINANCE_ALPHA16F_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_LUMINANCE_ALPHA:
                            case GL_LUMINANCE8_ALPHA8_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_RED:
                switch (type)
                {
                    case GL_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_R8_SNORM:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_R32F:
                            case GL_R16F:
                            case GL_RED:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_R16F:
                            case GL_RED:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT_OES:
                    {
                        switch (internalFormat)
                        {
                            case GL_R16F:
                            case GL_RED:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_R16_SNORM_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_R8:
                            case GL_RED:
                            case GL_SR8_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_R16_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_RED_INTEGER:
                switch (type)
                {
                    case GL_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_R8I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_R32I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_R16I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_R8UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_R32UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_R16UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_RG:
                switch (type)
                {
                    case GL_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG8_SNORM:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG32F:
                            case GL_RG16F:
                            case GL_RG:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG16F:
                            case GL_RG:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT_OES:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG16F:
                            case GL_RG:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG16_SNORM_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG8:
                            case GL_RG:
                            case GL_SRG8_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG16_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_RGB:
                switch (type)
                {
                    case GL_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB8_SNORM:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB32F:
                            case GL_RGB16F:
                            case GL_R11F_G11F_B10F:
                            case GL_RGB9_E5:
                            case GL_RGB:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB16F:
                            case GL_R11F_G11F_B10F:
                            case GL_RGB9_E5:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT_OES:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB16F:
                            case GL_R11F_G11F_B10F:
                            case GL_RGB9_E5:
                            case GL_RGB:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB16_SNORM_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB8:
                            case GL_RGB565:
                            case GL_SRGB8:
                            case GL_RGB:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT_10F_11F_11F_REV:
                    {
                        switch (internalFormat)
                        {
                            case GL_R11F_G11F_B10F:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT_2_10_10_10_REV:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT_5_9_9_9_REV:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB9_E5:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB16_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT_5_6_5:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB565:
                            case GL_RGB:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_RGBA:
                switch (type)
                {
                    case GL_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA8_SNORM:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA32F:
                            case GL_RGBA16F:
                            case GL_RGBA:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA16F:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_HALF_FLOAT_OES:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA16F:
                            case GL_RGBA:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA16_SNORM_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA8:
                            case GL_RGB5_A1:
                            case GL_RGBA4:
                            case GL_SRGB8_ALPHA8:
                            case GL_RGBA:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT_2_10_10_10_REV:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB10_A2:
                            case GL_RGB5_A1:
                            case GL_RGBA:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA16_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT_4_4_4_4:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA4:
                            case GL_RGBA:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT_5_5_5_1:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB5_A1:
                            case GL_RGBA:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_RGBA_INTEGER:
                switch (type)
                {
                    case GL_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA8I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA32I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA16I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA8UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA32UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT_2_10_10_10_REV:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB10_A2UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGBA16UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_RGB_INTEGER:
                switch (type)
                {
                    case GL_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB8I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB32I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB16I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB8UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB32UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RGB16UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_RG_INTEGER:
                switch (type)
                {
                    case GL_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG8I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG32I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG16I:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG8UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_INT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG32UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    case GL_UNSIGNED_SHORT:
                    {
                        switch (internalFormat)
                        {
                            case GL_RG16UI:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_SRGB_ALPHA_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_SRGB_ALPHA_EXT:
                            case GL_SRGB8_ALPHA8_EXT:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_SRGB_EXT:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_SRGB_EXT:
                            case GL_SRGB8:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            case GL_STENCIL_INDEX:
                switch (type)
                {
                    case GL_UNSIGNED_BYTE:
                    {
                        switch (internalFormat)
                        {
                            case GL_STENCIL_INDEX8:
                                return true;
                            default:
                                break;
                        }
                        break;
                    }
                    default:
                        break;
                }
                break;
    
            default:
                UNREACHABLE();
                break;
        }
    
        return false;
    }
    
    }  // namespace gl