// GENERATED FILE - DO NOT EDIT.
// Generated by gen_dxgi_format_table.py using data from dxgi_format_data.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.
//
// DXGI format info:
//   Determining metadata about a DXGI format.

#include "libANGLE/renderer/Format.h"

using namespace angle;

namespace rx
{

namespace d3d11
{

GLenum GetComponentType(DXGI_FORMAT dxgiFormat)
{
    switch (dxgiFormat)
    {
        case DXGI_FORMAT_420_OPAQUE:
            break;
        case DXGI_FORMAT_A8P8:
            break;
        case DXGI_FORMAT_A8_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_AI44:
            break;
        case DXGI_FORMAT_AYUV:
            break;
        case DXGI_FORMAT_B4G4R4A4_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_B5G5R5A1_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_B5G6R5_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_B8G8R8A8_TYPELESS:
            break;
        case DXGI_FORMAT_B8G8R8A8_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_B8G8R8X8_TYPELESS:
            break;
        case DXGI_FORMAT_B8G8R8X8_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC1_TYPELESS:
            break;
        case DXGI_FORMAT_BC1_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC1_UNORM_SRGB:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC2_TYPELESS:
            break;
        case DXGI_FORMAT_BC2_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC2_UNORM_SRGB:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC3_TYPELESS:
            break;
        case DXGI_FORMAT_BC3_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC3_UNORM_SRGB:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC4_SNORM:
            return GL_SIGNED_NORMALIZED;
        case DXGI_FORMAT_BC4_TYPELESS:
            break;
        case DXGI_FORMAT_BC4_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC5_SNORM:
            return GL_SIGNED_NORMALIZED;
        case DXGI_FORMAT_BC5_TYPELESS:
            break;
        case DXGI_FORMAT_BC5_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC6H_SF16:
            break;
        case DXGI_FORMAT_BC6H_TYPELESS:
            break;
        case DXGI_FORMAT_BC6H_UF16:
            break;
        case DXGI_FORMAT_BC7_TYPELESS:
            break;
        case DXGI_FORMAT_BC7_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_BC7_UNORM_SRGB:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_D16_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_D24_UNORM_S8_UINT:
            break;
        case DXGI_FORMAT_D32_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
            break;
        case DXGI_FORMAT_G8R8_G8B8_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_IA44:
            break;
        case DXGI_FORMAT_NV11:
            break;
        case DXGI_FORMAT_P010:
            break;
        case DXGI_FORMAT_P016:
            break;
        case DXGI_FORMAT_P8:
            break;
        case DXGI_FORMAT_R10G10B10A2_TYPELESS:
            break;
        case DXGI_FORMAT_R10G10B10A2_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R10G10B10A2_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R11G11B10_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_R16G16B16A16_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_R16G16B16A16_SINT:
            return GL_INT;
        case DXGI_FORMAT_R16G16B16A16_SNORM:
            return GL_SIGNED_NORMALIZED;
        case DXGI_FORMAT_R16G16B16A16_TYPELESS:
            break;
        case DXGI_FORMAT_R16G16B16A16_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R16G16B16A16_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R16G16_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_R16G16_SINT:
            return GL_INT;
        case DXGI_FORMAT_R16G16_SNORM:
            return GL_SIGNED_NORMALIZED;
        case DXGI_FORMAT_R16G16_TYPELESS:
            break;
        case DXGI_FORMAT_R16G16_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R16G16_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R16_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_R16_SINT:
            return GL_INT;
        case DXGI_FORMAT_R16_SNORM:
            return GL_SIGNED_NORMALIZED;
        case DXGI_FORMAT_R16_TYPELESS:
            break;
        case DXGI_FORMAT_R16_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R16_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R1_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R24G8_TYPELESS:
            break;
        case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R32G32B32A32_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_R32G32B32A32_SINT:
            return GL_INT;
        case DXGI_FORMAT_R32G32B32A32_TYPELESS:
            break;
        case DXGI_FORMAT_R32G32B32A32_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R32G32B32_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_R32G32B32_SINT:
            return GL_INT;
        case DXGI_FORMAT_R32G32B32_TYPELESS:
            break;
        case DXGI_FORMAT_R32G32B32_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R32G32_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_R32G32_SINT:
            return GL_INT;
        case DXGI_FORMAT_R32G32_TYPELESS:
            break;
        case DXGI_FORMAT_R32G32_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R32G8X24_TYPELESS:
            break;
        case DXGI_FORMAT_R32_FLOAT:
            return GL_FLOAT;
        case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
            return GL_FLOAT;
        case DXGI_FORMAT_R32_SINT:
            return GL_INT;
        case DXGI_FORMAT_R32_TYPELESS:
            break;
        case DXGI_FORMAT_R32_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R8G8B8A8_SINT:
            return GL_INT;
        case DXGI_FORMAT_R8G8B8A8_SNORM:
            return GL_SIGNED_NORMALIZED;
        case DXGI_FORMAT_R8G8B8A8_TYPELESS:
            break;
        case DXGI_FORMAT_R8G8B8A8_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_NV12:
        case DXGI_FORMAT_R8G8B8A8_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R8G8_B8G8_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R8G8_SINT:
            return GL_INT;
        case DXGI_FORMAT_R8G8_SNORM:
            return GL_SIGNED_NORMALIZED;
        case DXGI_FORMAT_R8G8_TYPELESS:
            break;
        case DXGI_FORMAT_R8G8_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R8G8_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R8_SINT:
            return GL_INT;
        case DXGI_FORMAT_R8_SNORM:
            return GL_SIGNED_NORMALIZED;
        case DXGI_FORMAT_R8_TYPELESS:
            break;
        case DXGI_FORMAT_R8_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_R8_UNORM:
            return GL_UNSIGNED_NORMALIZED;
        case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
            return GL_FLOAT;
        case DXGI_FORMAT_UNKNOWN:
            break;
        case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
            return GL_UNSIGNED_INT;
        case DXGI_FORMAT_Y210:
            break;
        case DXGI_FORMAT_Y216:
            break;
        case DXGI_FORMAT_Y410:
            break;
        case DXGI_FORMAT_Y416:
            break;
        case DXGI_FORMAT_YUY2:
            break;
        default:
            break;
    }

    UNREACHABLE();
    return GL_NONE;
}

}  // namespace d3d11

namespace d3d11_angle
{

const Format &GetFormat(DXGI_FORMAT dxgiFormat)
{
    switch (dxgiFormat)
    {
        case DXGI_FORMAT_420_OPAQUE:
            break;
        case DXGI_FORMAT_A8P8:
            break;
        case DXGI_FORMAT_A8_UNORM:
            return Format::Get(Format::ID::A8_UNORM);
        case DXGI_FORMAT_AI44:
            break;
        case DXGI_FORMAT_AYUV:
            break;
        case DXGI_FORMAT_B4G4R4A4_UNORM:
            return Format::Get(Format::ID::B4G4R4A4_UNORM);
        case DXGI_FORMAT_B5G5R5A1_UNORM:
            return Format::Get(Format::ID::B5G5R5A1_UNORM);
        case DXGI_FORMAT_B5G6R5_UNORM:
            return Format::Get(Format::ID::B5G6R5_UNORM);
        case DXGI_FORMAT_B8G8R8A8_TYPELESS:
            break;
        case DXGI_FORMAT_B8G8R8A8_UNORM:
            return Format::Get(Format::ID::B8G8R8A8_UNORM);
        case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:
            break;
        case DXGI_FORMAT_B8G8R8X8_TYPELESS:
            break;
        case DXGI_FORMAT_B8G8R8X8_UNORM:
            return Format::Get(Format::ID::B8G8R8X8_UNORM);
        case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
            break;
        case DXGI_FORMAT_BC1_TYPELESS:
            break;
        case DXGI_FORMAT_BC1_UNORM:
            return Format::Get(Format::ID::BC1_RGBA_UNORM_BLOCK);
        case DXGI_FORMAT_BC1_UNORM_SRGB:
            return Format::Get(Format::ID::BC1_RGBA_UNORM_SRGB_BLOCK);
        case DXGI_FORMAT_BC2_TYPELESS:
            break;
        case DXGI_FORMAT_BC2_UNORM:
            return Format::Get(Format::ID::BC2_RGBA_UNORM_BLOCK);
        case DXGI_FORMAT_BC2_UNORM_SRGB:
            return Format::Get(Format::ID::BC2_RGBA_UNORM_SRGB_BLOCK);
        case DXGI_FORMAT_BC3_TYPELESS:
            break;
        case DXGI_FORMAT_BC3_UNORM:
            return Format::Get(Format::ID::BC3_RGBA_UNORM_BLOCK);
        case DXGI_FORMAT_BC3_UNORM_SRGB:
            return Format::Get(Format::ID::BC3_RGBA_UNORM_SRGB_BLOCK);
        case DXGI_FORMAT_BC4_SNORM:
            break;
        case DXGI_FORMAT_BC4_TYPELESS:
            break;
        case DXGI_FORMAT_BC4_UNORM:
            break;
        case DXGI_FORMAT_BC5_SNORM:
            break;
        case DXGI_FORMAT_BC5_TYPELESS:
            break;
        case DXGI_FORMAT_BC5_UNORM:
            break;
        case DXGI_FORMAT_BC6H_SF16:
            break;
        case DXGI_FORMAT_BC6H_TYPELESS:
            break;
        case DXGI_FORMAT_BC6H_UF16:
            break;
        case DXGI_FORMAT_BC7_TYPELESS:
            break;
        case DXGI_FORMAT_BC7_UNORM:
            break;
        case DXGI_FORMAT_BC7_UNORM_SRGB:
            break;
        case DXGI_FORMAT_D16_UNORM:
            return Format::Get(Format::ID::D16_UNORM);
        case DXGI_FORMAT_D24_UNORM_S8_UINT:
            return Format::Get(Format::ID::D24_UNORM_S8_UINT);
        case DXGI_FORMAT_D32_FLOAT:
            return Format::Get(Format::ID::D32_FLOAT);
        case DXGI_FORMAT_D32_FLOAT_S8X24_UINT:
            return Format::Get(Format::ID::D32_FLOAT_S8X24_UINT);
        case DXGI_FORMAT_G8R8_G8B8_UNORM:
            break;
        case DXGI_FORMAT_IA44:
            break;
        case DXGI_FORMAT_NV11:
            break;
        case DXGI_FORMAT_P010:
            break;
        case DXGI_FORMAT_P016:
            break;
        case DXGI_FORMAT_P8:
            break;
        case DXGI_FORMAT_R10G10B10A2_TYPELESS:
            break;
        case DXGI_FORMAT_R10G10B10A2_UINT:
            return Format::Get(Format::ID::R10G10B10A2_UINT);
        case DXGI_FORMAT_R10G10B10A2_UNORM:
            return Format::Get(Format::ID::R10G10B10A2_UNORM);
        case DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:
            break;
        case DXGI_FORMAT_R11G11B10_FLOAT:
            return Format::Get(Format::ID::R11G11B10_FLOAT);
        case DXGI_FORMAT_R16G16B16A16_FLOAT:
            return Format::Get(Format::ID::R16G16B16A16_FLOAT);
        case DXGI_FORMAT_R16G16B16A16_SINT:
            return Format::Get(Format::ID::R16G16B16A16_SINT);
        case DXGI_FORMAT_R16G16B16A16_SNORM:
            return Format::Get(Format::ID::R16G16B16A16_SNORM);
        case DXGI_FORMAT_R16G16B16A16_TYPELESS:
            break;
        case DXGI_FORMAT_R16G16B16A16_UINT:
            return Format::Get(Format::ID::R16G16B16A16_UINT);
        case DXGI_FORMAT_R16G16B16A16_UNORM:
            return Format::Get(Format::ID::R16G16B16A16_UNORM);
        case DXGI_FORMAT_R16G16_FLOAT:
            return Format::Get(Format::ID::R16G16_FLOAT);
        case DXGI_FORMAT_R16G16_SINT:
            return Format::Get(Format::ID::R16G16_SINT);
        case DXGI_FORMAT_R16G16_SNORM:
            return Format::Get(Format::ID::R16G16_SNORM);
        case DXGI_FORMAT_R16G16_TYPELESS:
            break;
        case DXGI_FORMAT_R16G16_UINT:
            return Format::Get(Format::ID::R16G16_UINT);
        case DXGI_FORMAT_R16G16_UNORM:
            return Format::Get(Format::ID::R16G16_UNORM);
        case DXGI_FORMAT_R16_FLOAT:
            return Format::Get(Format::ID::R16_FLOAT);
        case DXGI_FORMAT_R16_SINT:
            return Format::Get(Format::ID::R16_SINT);
        case DXGI_FORMAT_R16_SNORM:
            return Format::Get(Format::ID::R16_SNORM);
        case DXGI_FORMAT_R16_TYPELESS:
            break;
        case DXGI_FORMAT_R16_UINT:
            return Format::Get(Format::ID::R16_UINT);
        case DXGI_FORMAT_R16_UNORM:
            return Format::Get(Format::ID::R16_UNORM);
        case DXGI_FORMAT_R1_UNORM:
            break;
        case DXGI_FORMAT_R24G8_TYPELESS:
            break;
        case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
            break;
        case DXGI_FORMAT_R32G32B32A32_FLOAT:
            return Format::Get(Format::ID::R32G32B32A32_FLOAT);
        case DXGI_FORMAT_R32G32B32A32_SINT:
            return Format::Get(Format::ID::R32G32B32A32_SINT);
        case DXGI_FORMAT_R32G32B32A32_TYPELESS:
            break;
        case DXGI_FORMAT_R32G32B32A32_UINT:
            return Format::Get(Format::ID::R32G32B32A32_UINT);
        case DXGI_FORMAT_R32G32B32_FLOAT:
            return Format::Get(Format::ID::R32G32B32_FLOAT);
        case DXGI_FORMAT_R32G32B32_SINT:
            return Format::Get(Format::ID::R32G32B32_SINT);
        case DXGI_FORMAT_R32G32B32_TYPELESS:
            break;
        case DXGI_FORMAT_R32G32B32_UINT:
            return Format::Get(Format::ID::R32G32B32_UINT);
        case DXGI_FORMAT_R32G32_FLOAT:
            return Format::Get(Format::ID::R32G32_FLOAT);
        case DXGI_FORMAT_R32G32_SINT:
            return Format::Get(Format::ID::R32G32_SINT);
        case DXGI_FORMAT_R32G32_TYPELESS:
            break;
        case DXGI_FORMAT_R32G32_UINT:
            return Format::Get(Format::ID::R32G32_UINT);
        case DXGI_FORMAT_R32G8X24_TYPELESS:
            break;
        case DXGI_FORMAT_R32_FLOAT:
            return Format::Get(Format::ID::R32_FLOAT);
        case DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:
            break;
        case DXGI_FORMAT_R32_SINT:
            return Format::Get(Format::ID::R32_SINT);
        case DXGI_FORMAT_R32_TYPELESS:
            break;
        case DXGI_FORMAT_R32_UINT:
            return Format::Get(Format::ID::R32_UINT);
        case DXGI_FORMAT_R8G8B8A8_SINT:
            return Format::Get(Format::ID::R8G8B8A8_SINT);
        case DXGI_FORMAT_R8G8B8A8_SNORM:
            return Format::Get(Format::ID::R8G8B8A8_SNORM);
        case DXGI_FORMAT_R8G8B8A8_TYPELESS:
            break;
        case DXGI_FORMAT_R8G8B8A8_UINT:
            return Format::Get(Format::ID::R8G8B8A8_UINT);
        case DXGI_FORMAT_NV12:
        case DXGI_FORMAT_R8G8B8A8_UNORM:
            return Format::Get(Format::ID::R8G8B8A8_UNORM);
        case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
            return Format::Get(Format::ID::R8G8B8A8_UNORM_SRGB);
        case DXGI_FORMAT_R8G8_B8G8_UNORM:
            break;
        case DXGI_FORMAT_R8G8_SINT:
            return Format::Get(Format::ID::R8G8_SINT);
        case DXGI_FORMAT_R8G8_SNORM:
            return Format::Get(Format::ID::R8G8_SNORM);
        case DXGI_FORMAT_R8G8_TYPELESS:
            break;
        case DXGI_FORMAT_R8G8_UINT:
            return Format::Get(Format::ID::R8G8_UINT);
        case DXGI_FORMAT_R8G8_UNORM:
            return Format::Get(Format::ID::R8G8_UNORM);
        case DXGI_FORMAT_R8_SINT:
            return Format::Get(Format::ID::R8_SINT);
        case DXGI_FORMAT_R8_SNORM:
            return Format::Get(Format::ID::R8_SNORM);
        case DXGI_FORMAT_R8_TYPELESS:
            break;
        case DXGI_FORMAT_R8_UINT:
            return Format::Get(Format::ID::R8_UINT);
        case DXGI_FORMAT_R8_UNORM:
            return Format::Get(Format::ID::R8_UNORM);
        case DXGI_FORMAT_R9G9B9E5_SHAREDEXP:
            return Format::Get(Format::ID::R9G9B9E5_SHAREDEXP);
        case DXGI_FORMAT_UNKNOWN:
            return Format::Get(Format::ID::NONE);
        case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
            break;
        case DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:
            break;
        case DXGI_FORMAT_Y210:
            break;
        case DXGI_FORMAT_Y216:
            break;
        case DXGI_FORMAT_Y410:
            break;
        case DXGI_FORMAT_Y416:
            break;
        case DXGI_FORMAT_YUY2:
            break;
        default:
            break;
    }

    UNREACHABLE();
    return Format::Get(Format::ID::NONE);
}

}  // namespace d3d11_angle

}  // namespace rx
