// 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_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:
            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_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_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_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
