// 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:
                        case GL_RGBX8_ANGLE:
                            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
