// 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 2020 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_RGB_INTEGER:
            switch (type)
            {
                case GL_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB32I:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB16UI:
                            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_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB8I:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB32UI:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_RGBA_INTEGER:
            switch (type)
            {
                case GL_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA32I:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA16UI:
                            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_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_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA8I:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA32UI:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_RGB:
            switch (type)
            {
                case GL_UNSIGNED_INT_10F_11F_11F_REV:
                {
                    switch (internalFormat)
                    {
                        case GL_R11F_G11F_B10F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB16_EXT:
                            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_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB16_SNORM_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB:
                        case GL_RGB32F:
                        case GL_RGB16F:
                        case GL_R11F_G11F_B10F:
                        case GL_RGB9_E5:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT_5_6_5:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB:
                        case GL_RGB565:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT_OES:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB:
                        case GL_RGB16F:
                        case GL_R11F_G11F_B10F:
                        case GL_RGB9_E5:
                            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_UNSIGNED_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB:
                        case GL_RGB8:
                        case GL_RGB565:
                        case GL_SRGB8:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RGB8_SNORM:
                            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;
                }
                default:
                    break;
            }
            break;

        case GL_LUMINANCE_ALPHA:
            switch (type)
            {
                case GL_HALF_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_LUMINANCE_ALPHA16F_EXT:
                        case GL_LUMINANCE_ALPHA:
                            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;
                }
                case GL_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_LUMINANCE_ALPHA:
                        case GL_LUMINANCE_ALPHA32F_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT_OES:
                {
                    switch (internalFormat)
                    {
                        case GL_LUMINANCE_ALPHA16F_EXT:
                        case GL_LUMINANCE_ALPHA:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_ALPHA:
            switch (type)
            {
                case GL_HALF_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_ALPHA16F_EXT:
                        case GL_ALPHA:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_ALPHA:
                        case GL_ALPHA8_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_ALPHA:
                        case GL_ALPHA32F_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT_OES:
                {
                    switch (internalFormat)
                    {
                        case GL_ALPHA16F_EXT:
                        case GL_ALPHA:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_RGBA:
            switch (type)
            {
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA16_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_INT_2_10_10_10_REV:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA:
                        case GL_RGB10_A2:
                        case GL_RGB5_A1:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA16_SNORM_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT_4_4_4_4:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA:
                        case GL_RGBA4:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA:
                        case GL_RGBA32F:
                        case GL_RGBA16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT_OES:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA:
                        case GL_RGBA16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA:
                        case GL_RGBA8:
                        case GL_RGB5_A1:
                        case GL_RGBA4:
                        case GL_SRGB8_ALPHA8:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA8_SNORM:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT_5_5_5_1:
                {
                    switch (internalFormat)
                    {
                        case GL_RGBA:
                        case GL_RGB5_A1:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_LUMINANCE:
            switch (type)
            {
                case GL_HALF_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_LUMINANCE16F_EXT:
                        case GL_LUMINANCE:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_LUMINANCE:
                        case GL_LUMINANCE8_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_LUMINANCE:
                        case GL_LUMINANCE32F_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT_OES:
                {
                    switch (internalFormat)
                    {
                        case GL_LUMINANCE16F_EXT:
                        case GL_LUMINANCE:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_RG_INTEGER:
            switch (type)
            {
                case GL_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_RG32I:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RG16UI:
                            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_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RG8I:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_RG32UI:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_RED_INTEGER:
            switch (type)
            {
                case GL_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_R32I:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_R16UI:
                            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_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_R8I:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_R32UI:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_DEPTH_STENCIL:
            switch (type)
            {
                case GL_UNSIGNED_INT_24_8:
                {
                    switch (internalFormat)
                    {
                        case GL_DEPTH_STENCIL:
                        case GL_DEPTH24_STENCIL8:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_FLOAT_32_UNSIGNED_INT_24_8_REV:
                {
                    switch (internalFormat)
                    {
                        case GL_DEPTH32F_STENCIL8:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_RED:
            switch (type)
            {
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_R16_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_R16_SNORM_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_RED:
                        case GL_R32F:
                        case GL_R16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT_OES:
                {
                    switch (internalFormat)
                    {
                        case GL_RED:
                        case GL_R16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_RED:
                        case GL_R16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RED:
                        case GL_SR8_EXT:
                        case GL_R8:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_R8_SNORM:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_DEPTH_COMPONENT:
            switch (type)
            {
                case GL_UNSIGNED_INT:
                {
                    switch (internalFormat)
                    {
                        case GL_DEPTH_COMPONENT:
                        case GL_DEPTH_COMPONENT24:
                        case GL_DEPTH_COMPONENT16:
                            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_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_DEPTH_COMPONENT32F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_DEPTH_COMPONENT:
                        case GL_DEPTH_COMPONENT16:
                            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;

        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_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_RG:
            switch (type)
            {
                case GL_UNSIGNED_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RG16_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_SHORT:
                {
                    switch (internalFormat)
                    {
                        case GL_RG16_SNORM_EXT:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_RG:
                        case GL_RG32F:
                        case GL_RG16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT_OES:
                {
                    switch (internalFormat)
                    {
                        case GL_RG:
                        case GL_RG16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_HALF_FLOAT:
                {
                    switch (internalFormat)
                    {
                        case GL_RG:
                        case GL_RG16F:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RG:
                        case GL_RG8:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_RG8_SNORM:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                default:
                    break;
            }
            break;

        case GL_BGRA_EXT:
            switch (type)
            {
                case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT:
                {
                    switch (internalFormat)
                    {
                        case GL_BGRA4_ANGLEX:
                            return true;
                        default:
                            break;
                    }
                    break;
                }
                case GL_UNSIGNED_BYTE:
                {
                    switch (internalFormat)
                    {
                        case GL_BGRA8_EXT:
                        case GL_BGRA4_ANGLEX:
                        case GL_BGR5_A1_ANGLEX:
                        case GL_BGRA_EXT:
                            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;
                }
                default:
                    break;
            }
            break;

        default:
            UNREACHABLE();
            break;
    }

    return false;
}

}  // namespace gl
