/****************************************************************************
* Copyright (C) 2016 Intel Corporation.   All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
* IN THE SOFTWARE.
*
* @file format_traits.h
*
* @brief Format Traits.  auto-generated file
*
* DO NOT EDIT
*
******************************************************************************/
#pragma once

#include "format_types.h"
#include "utils.h"

//////////////////////////////////////////////////////////////////////////
/// FormatSwizzle - Component swizzle selects
//////////////////////////////////////////////////////////////////////////
template<UINT comp0 = 0, uint32_t comp1 = 0, uint32_t comp2 = 0, uint32_t comp3 = 0>
struct FormatSwizzle
{
    // Return swizzle select for component.
    INLINE static uint32_t swizzle(UINT c)
    {
        static const uint32_t s[4] = { comp0, comp1, comp2, comp3 };
        return s[c];
    }
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits - Format traits
//////////////////////////////////////////////////////////////////////////
template<SWR_FORMAT format>
struct FormatTraits :
    ComponentTraits<SWR_TYPE_UNKNOWN, 0>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0>
{
    static const uint32_t bpp{ 0 };
    static const uint32_t numComps{ 0 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };

    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32A32_FLOAT> - Format traits specialization for R32G32B32A32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32A32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32_32    TransposeT;
    typedef Format4<32, 32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32A32_SINT> - Format traits specialization for R32G32B32A32_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32A32_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 32, SWR_TYPE_SINT, 32, SWR_TYPE_SINT, 32, SWR_TYPE_SINT, 32>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32_32    TransposeT;
    typedef Format4<32, 32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32A32_UINT> - Format traits specialization for R32G32B32A32_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32A32_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 32, SWR_TYPE_UINT, 32, SWR_TYPE_UINT, 32, SWR_TYPE_UINT, 32>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32_32    TransposeT;
    typedef Format4<32, 32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32X32_FLOAT> - Format traits specialization for R32G32B32X32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32X32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32, SWR_TYPE_UNUSED, 32>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32_32    TransposeT;
    typedef Format4<32, 32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32A32_SSCALED> - Format traits specialization for R32G32B32A32_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32A32_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 32, SWR_TYPE_SSCALED, 32, SWR_TYPE_SSCALED, 32, SWR_TYPE_SSCALED, 32>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32_32    TransposeT;
    typedef Format4<32, 32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32A32_USCALED> - Format traits specialization for R32G32B32A32_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32A32_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 32, SWR_TYPE_USCALED, 32, SWR_TYPE_USCALED, 32, SWR_TYPE_USCALED, 32>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32_32    TransposeT;
    typedef Format4<32, 32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32_FLOAT> - Format traits specialization for R32G32B32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 96 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32   TransposeT;
    typedef Format3<32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32_SINT> - Format traits specialization for R32G32B32_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 32, SWR_TYPE_SINT, 32, SWR_TYPE_SINT, 32>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 96 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32   TransposeT;
    typedef Format3<32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32_UINT> - Format traits specialization for R32G32B32_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 32, SWR_TYPE_UINT, 32, SWR_TYPE_UINT, 32>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 96 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32   TransposeT;
    typedef Format3<32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32_SSCALED> - Format traits specialization for R32G32B32_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 32, SWR_TYPE_SSCALED, 32, SWR_TYPE_SSCALED, 32>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 96 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32   TransposeT;
    typedef Format3<32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32B32_USCALED> - Format traits specialization for R32G32B32_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32B32_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 32, SWR_TYPE_USCALED, 32, SWR_TYPE_USCALED, 32>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 96 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32_32   TransposeT;
    typedef Format3<32, 32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16A16_UNORM> - Format traits specialization for R16G16B16A16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16A16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16A16_SNORM> - Format traits specialization for R16G16B16A16_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16A16_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 16, SWR_TYPE_SNORM, 16, SWR_TYPE_SNORM, 16, SWR_TYPE_SNORM, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16A16_SINT> - Format traits specialization for R16G16B16A16_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16A16_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 16, SWR_TYPE_SINT, 16, SWR_TYPE_SINT, 16, SWR_TYPE_SINT, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16A16_UINT> - Format traits specialization for R16G16B16A16_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16A16_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 16, SWR_TYPE_UINT, 16, SWR_TYPE_UINT, 16, SWR_TYPE_UINT, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16A16_FLOAT> - Format traits specialization for R16G16B16A16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16A16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32_FLOAT> - Format traits specialization for R32G32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32_SINT> - Format traits specialization for R32G32_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 32, SWR_TYPE_SINT, 32>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32_UINT> - Format traits specialization for R32G32_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 32, SWR_TYPE_UINT, 32>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32_FLOAT_X8X24_TYPELESS> - Format traits specialization for R32_FLOAT_X8X24_TYPELESS
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32_FLOAT_X8X24_TYPELESS> :
    ComponentTraits<SWR_TYPE_FLOAT, 32, SWR_TYPE_UNUSED, 32>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<X32_TYPELESS_G8X24_UINT> - Format traits specialization for X32_TYPELESS_G8X24_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<X32_TYPELESS_G8X24_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 32, SWR_TYPE_UNUSED, 32>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L32A32_FLOAT> - Format traits specialization for L32A32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L32A32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 1 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16X16_UNORM> - Format traits specialization for R16G16B16X16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16X16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16, SWR_TYPE_UNUSED, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16X16_FLOAT> - Format traits specialization for R16G16B16X16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16X16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16, SWR_TYPE_UNUSED, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L32X32_FLOAT> - Format traits specialization for L32X32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L32X32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<I32X32_FLOAT> - Format traits specialization for I32X32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<I32X32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32, SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16A16_SSCALED> - Format traits specialization for R16G16B16A16_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16A16_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 16, SWR_TYPE_SSCALED, 16, SWR_TYPE_SSCALED, 16, SWR_TYPE_SSCALED, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16A16_USCALED> - Format traits specialization for R16G16B16A16_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16A16_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 16, SWR_TYPE_USCALED, 16, SWR_TYPE_USCALED, 16, SWR_TYPE_USCALED, 16>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16_16    TransposeT;
    typedef Format4<16, 16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32_SSCALED> - Format traits specialization for R32G32_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 32, SWR_TYPE_SSCALED, 32>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32G32_USCALED> - Format traits specialization for R32G32_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32G32_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 32, SWR_TYPE_USCALED, 32>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose32_32  TransposeT;
    typedef Format2<32, 32> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B8G8R8A8_UNORM> - Format traits specialization for B8G8R8A8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B8G8R8A8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B8G8R8A8_UNORM_SRGB> - Format traits specialization for B8G8R8A8_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B8G8R8A8_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10A2_UNORM> - Format traits specialization for R10G10B10A2_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10A2_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10A2_UNORM_SRGB> - Format traits specialization for R10G10B10A2_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10A2_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10A2_UINT> - Format traits specialization for R10G10B10A2_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10A2_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 10, SWR_TYPE_UINT, 10, SWR_TYPE_UINT, 10, SWR_TYPE_UINT, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8A8_UNORM> - Format traits specialization for R8G8B8A8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8A8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8A8_UNORM_SRGB> - Format traits specialization for R8G8B8A8_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8A8_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8A8_SNORM> - Format traits specialization for R8G8B8A8_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8A8_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 8, SWR_TYPE_SNORM, 8, SWR_TYPE_SNORM, 8, SWR_TYPE_SNORM, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8A8_SINT> - Format traits specialization for R8G8B8A8_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8A8_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 8, SWR_TYPE_SINT, 8, SWR_TYPE_SINT, 8, SWR_TYPE_SINT, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8A8_UINT> - Format traits specialization for R8G8B8A8_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8A8_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16_UNORM> - Format traits specialization for R16G16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16_SNORM> - Format traits specialization for R16G16_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 16, SWR_TYPE_SNORM, 16>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16_SINT> - Format traits specialization for R16G16_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 16, SWR_TYPE_SINT, 16>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16_UINT> - Format traits specialization for R16G16_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 16, SWR_TYPE_UINT, 16>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16_FLOAT> - Format traits specialization for R16G16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B10G10R10A2_UNORM> - Format traits specialization for B10G10R10A2_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B10G10R10A2_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 2>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B10G10R10A2_UNORM_SRGB> - Format traits specialization for B10G10R10A2_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B10G10R10A2_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 2>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R11G11B10_FLOAT> - Format traits specialization for R11G11B10_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R11G11B10_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 11, SWR_TYPE_FLOAT, 11, SWR_TYPE_FLOAT, 10>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose11_11_10   TransposeT;
    typedef Format3<11, 11, 10> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10_FLOAT_A2_UNORM> - Format traits specialization for R10G10B10_FLOAT_A2_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10_FLOAT_A2_UNORM> :
    ComponentTraits<SWR_TYPE_FLOAT, 10, SWR_TYPE_FLOAT, 10, SWR_TYPE_FLOAT, 10, SWR_TYPE_FLOAT, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32_SINT> - Format traits specialization for R32_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 32>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32_UINT> - Format traits specialization for R32_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 32>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32_FLOAT> - Format traits specialization for R32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R24_UNORM_X8_TYPELESS> - Format traits specialization for R24_UNORM_X8_TYPELESS
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R24_UNORM_X8_TYPELESS> :
    ComponentTraits<SWR_TYPE_UNORM, 24>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<24>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<X24_TYPELESS_G8_UINT> - Format traits specialization for X24_TYPELESS_G8_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<X24_TYPELESS_G8_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 32>,
    FormatSwizzle<1>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L32_UNORM> - Format traits specialization for L32_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L32_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 32>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L16A16_UNORM> - Format traits specialization for L16A16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L16A16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 1 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<I24X8_UNORM> - Format traits specialization for I24X8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<I24X8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 24, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose24_8  TransposeT;
    typedef Format2<24, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L24X8_UNORM> - Format traits specialization for L24X8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L24X8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 24, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose24_8  TransposeT;
    typedef Format2<24, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<I32_FLOAT> - Format traits specialization for I32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<I32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L32_FLOAT> - Format traits specialization for L32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<A32_FLOAT> - Format traits specialization for A32_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<A32_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 32>,
    FormatSwizzle<3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B8G8R8X8_UNORM> - Format traits specialization for B8G8R8X8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B8G8R8X8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNUSED, 8>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B8G8R8X8_UNORM_SRGB> - Format traits specialization for B8G8R8X8_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B8G8R8X8_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNUSED, 8>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8X8_UNORM> - Format traits specialization for R8G8B8X8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8X8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNUSED, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8X8_UNORM_SRGB> - Format traits specialization for R8G8B8X8_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8X8_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNUSED, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R9G9B9E5_SHAREDEXP> - Format traits specialization for R9G9B9E5_SHAREDEXP
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R9G9B9E5_SHAREDEXP> :
    ComponentTraits<SWR_TYPE_UINT, 9, SWR_TYPE_UINT, 9, SWR_TYPE_UINT, 9, SWR_TYPE_UINT, 5>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose9_9_9_5    TransposeT;
    typedef Format4<9, 9, 9, 5> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B10G10R10X2_UNORM> - Format traits specialization for B10G10R10X2_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B10G10R10X2_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNORM, 10, SWR_TYPE_UNUSED, 2>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L16A16_FLOAT> - Format traits specialization for L16A16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L16A16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 1 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10X2_USCALED> - Format traits specialization for R10G10B10X2_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10X2_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 10, SWR_TYPE_USCALED, 10, SWR_TYPE_USCALED, 10, SWR_TYPE_UNUSED, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8A8_SSCALED> - Format traits specialization for R8G8B8A8_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8A8_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 8, SWR_TYPE_SSCALED, 8, SWR_TYPE_SSCALED, 8, SWR_TYPE_SSCALED, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8A8_USCALED> - Format traits specialization for R8G8B8A8_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8A8_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 8, SWR_TYPE_USCALED, 8, SWR_TYPE_USCALED, 8, SWR_TYPE_USCALED, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16_SSCALED> - Format traits specialization for R16G16_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 16, SWR_TYPE_SSCALED, 16>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16_USCALED> - Format traits specialization for R16G16_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 16, SWR_TYPE_USCALED, 16>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16  TransposeT;
    typedef Format2<16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32_SSCALED> - Format traits specialization for R32_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 32>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R32_USCALED> - Format traits specialization for R32_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R32_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 32>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<32> TransposeT;
    typedef Format1<32>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B5G6R5_UNORM> - Format traits specialization for B5G6R5_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B5G6R5_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 6, SWR_TYPE_UNORM, 5>,
    FormatSwizzle<2, 1, 0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose5_6_5   TransposeT;
    typedef Format3<5, 6, 5> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B5G6R5_UNORM_SRGB> - Format traits specialization for B5G6R5_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B5G6R5_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 6, SWR_TYPE_UNORM, 5>,
    FormatSwizzle<2, 1, 0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose5_6_5   TransposeT;
    typedef Format3<5, 6, 5> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B5G5R5A1_UNORM> - Format traits specialization for B5G5R5A1_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B5G5R5A1_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 1>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose5_5_5_1    TransposeT;
    typedef Format4<5, 5, 5, 1> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B5G5R5A1_UNORM_SRGB> - Format traits specialization for B5G5R5A1_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B5G5R5A1_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 1>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose5_5_5_1    TransposeT;
    typedef Format4<5, 5, 5, 1> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B4G4R4A4_UNORM> - Format traits specialization for B4G4R4A4_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B4G4R4A4_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose4_4_4_4    TransposeT;
    typedef Format4<4, 4, 4, 4> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B4G4R4A4_UNORM_SRGB> - Format traits specialization for B4G4R4A4_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B4G4R4A4_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose4_4_4_4    TransposeT;
    typedef Format4<4, 4, 4, 4> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8_UNORM> - Format traits specialization for R8G8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8_SNORM> - Format traits specialization for R8G8_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 8, SWR_TYPE_SNORM, 8>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8_SINT> - Format traits specialization for R8G8_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 8, SWR_TYPE_SINT, 8>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8_UINT> - Format traits specialization for R8G8_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16_UNORM> - Format traits specialization for R16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16_SNORM> - Format traits specialization for R16_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16_SINT> - Format traits specialization for R16_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16_UINT> - Format traits specialization for R16_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16_FLOAT> - Format traits specialization for R16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<I16_UNORM> - Format traits specialization for I16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<I16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L16_UNORM> - Format traits specialization for L16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<A16_UNORM> - Format traits specialization for A16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<A16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16>,
    FormatSwizzle<3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L8A8_UNORM> - Format traits specialization for L8A8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L8A8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 1 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<I16_FLOAT> - Format traits specialization for I16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<I16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L16_FLOAT> - Format traits specialization for L16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<A16_FLOAT> - Format traits specialization for A16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<A16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16>,
    FormatSwizzle<3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L8A8_UNORM_SRGB> - Format traits specialization for L8A8_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L8A8_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 1 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B5G5R5X1_UNORM> - Format traits specialization for B5G5R5X1_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B5G5R5X1_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNUSED, 1>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose5_5_5_1    TransposeT;
    typedef Format4<5, 5, 5, 1> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B5G5R5X1_UNORM_SRGB> - Format traits specialization for B5G5R5X1_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B5G5R5X1_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNUSED, 1>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose5_5_5_1    TransposeT;
    typedef Format4<5, 5, 5, 1> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8_SSCALED> - Format traits specialization for R8G8_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 8, SWR_TYPE_SSCALED, 8>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8_USCALED> - Format traits specialization for R8G8_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 8, SWR_TYPE_USCALED, 8>,
    FormatSwizzle<0, 1>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16_SSCALED> - Format traits specialization for R16_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16_USCALED> - Format traits specialization for R16_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 16>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<16> TransposeT;
    typedef Format1<16>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<A1B5G5R5_UNORM> - Format traits specialization for A1B5G5R5_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<A1B5G5R5_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 1, SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5, SWR_TYPE_UNORM, 5>,
    FormatSwizzle<3, 2, 1, 0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose1_5_5_5    TransposeT;
    typedef Format4<1, 5, 5, 5> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<A4B4G4R4_UNORM> - Format traits specialization for A4B4G4R4_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<A4B4G4R4_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4, SWR_TYPE_UNORM, 4>,
    FormatSwizzle<3, 2, 1, 0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose4_4_4_4    TransposeT;
    typedef Format4<4, 4, 4, 4> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L8A8_UINT> - Format traits specialization for L8A8_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L8A8_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 1 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L8A8_SINT> - Format traits specialization for L8A8_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L8A8_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 8, SWR_TYPE_SINT, 8>,
    FormatSwizzle<0, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 16 };
    static const uint32_t numComps{ 2 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 1 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8  TransposeT;
    typedef Format2<8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8_UNORM> - Format traits specialization for R8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8_SNORM> - Format traits specialization for R8_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8_SINT> - Format traits specialization for R8_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8_UINT> - Format traits specialization for R8_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<A8_UNORM> - Format traits specialization for A8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<A8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<I8_UNORM> - Format traits specialization for I8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<I8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L8_UNORM> - Format traits specialization for L8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8_SSCALED> - Format traits specialization for R8_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8_USCALED> - Format traits specialization for R8_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L8_UNORM_SRGB> - Format traits specialization for L8_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L8_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L8_UINT> - Format traits specialization for L8_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L8_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<L8_SINT> - Format traits specialization for L8_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<L8_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<I8_UINT> - Format traits specialization for I8_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<I8_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<I8_SINT> - Format traits specialization for I8_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<I8_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<YCRCB_SWAPUVY> - Format traits specialization for YCRCB_SWAPUVY
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<YCRCB_SWAPUVY> :
    ComponentTraits<SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ true };
    static const uint32_t bcWidth{ 2 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC1_UNORM> - Format traits specialization for BC1_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC1_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC2_UNORM> - Format traits specialization for BC2_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC2_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC3_UNORM> - Format traits specialization for BC3_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC3_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC4_UNORM> - Format traits specialization for BC4_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC4_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC5_UNORM> - Format traits specialization for BC5_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC5_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC1_UNORM_SRGB> - Format traits specialization for BC1_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC1_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC2_UNORM_SRGB> - Format traits specialization for BC2_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC2_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC3_UNORM_SRGB> - Format traits specialization for BC3_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC3_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<YCRCB_SWAPUV> - Format traits specialization for YCRCB_SWAPUV
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<YCRCB_SWAPUV> :
    ComponentTraits<SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ true };
    static const uint32_t bcWidth{ 2 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8_8    TransposeT;
    typedef Format4<8, 8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8_UNORM> - Format traits specialization for R8G8B8_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 24 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8   TransposeT;
    typedef Format3<8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8_SNORM> - Format traits specialization for R8G8B8_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 8, SWR_TYPE_SNORM, 8, SWR_TYPE_SNORM, 8>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 24 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8   TransposeT;
    typedef Format3<8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8_SSCALED> - Format traits specialization for R8G8B8_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 8, SWR_TYPE_SSCALED, 8, SWR_TYPE_SSCALED, 8>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 24 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8   TransposeT;
    typedef Format3<8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8_USCALED> - Format traits specialization for R8G8B8_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 8, SWR_TYPE_USCALED, 8, SWR_TYPE_USCALED, 8>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 24 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8   TransposeT;
    typedef Format3<8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC4_SNORM> - Format traits specialization for BC4_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC4_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 64 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC5_SNORM> - Format traits specialization for BC5_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC5_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16_FLOAT> - Format traits specialization for R16G16B16_FLOAT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16_FLOAT> :
    ComponentTraits<SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16, SWR_TYPE_FLOAT, 16>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 48 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16   TransposeT;
    typedef Format3<16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16_UNORM> - Format traits specialization for R16G16B16_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16, SWR_TYPE_UNORM, 16>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 48 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16   TransposeT;
    typedef Format3<16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16_SNORM> - Format traits specialization for R16G16B16_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 16, SWR_TYPE_SNORM, 16, SWR_TYPE_SNORM, 16>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 48 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16   TransposeT;
    typedef Format3<16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16_SSCALED> - Format traits specialization for R16G16B16_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 16, SWR_TYPE_SSCALED, 16, SWR_TYPE_SSCALED, 16>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 48 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16   TransposeT;
    typedef Format3<16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16_USCALED> - Format traits specialization for R16G16B16_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 16, SWR_TYPE_USCALED, 16, SWR_TYPE_USCALED, 16>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 48 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16   TransposeT;
    typedef Format3<16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC6H_SF16> - Format traits specialization for BC6H_SF16
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC6H_SF16> :
    ComponentTraits<SWR_TYPE_SNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC7_UNORM> - Format traits specialization for BC7_UNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC7_UNORM> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC7_UNORM_SRGB> - Format traits specialization for BC7_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC7_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ true };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<BC6H_UF16> - Format traits specialization for BC6H_UF16
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<BC6H_UF16> :
    ComponentTraits<SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 128 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ true };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 4 };
    static const uint32_t bcHeight{ 4 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8_UNORM_SRGB> - Format traits specialization for R8G8B8_UNORM_SRGB
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8_UNORM_SRGB> :
    ComponentTraits<SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8, SWR_TYPE_UNORM, 8>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 24 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ true };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8   TransposeT;
    typedef Format3<8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16_UINT> - Format traits specialization for R16G16B16_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 16, SWR_TYPE_UINT, 16, SWR_TYPE_UINT, 16>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 48 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16   TransposeT;
    typedef Format3<16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R16G16B16_SINT> - Format traits specialization for R16G16B16_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R16G16B16_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 16, SWR_TYPE_SINT, 16, SWR_TYPE_SINT, 16>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 48 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose16_16_16   TransposeT;
    typedef Format3<16, 16, 16> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10A2_SNORM> - Format traits specialization for R10G10B10A2_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10A2_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 10, SWR_TYPE_SNORM, 10, SWR_TYPE_SNORM, 10, SWR_TYPE_SNORM, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10A2_USCALED> - Format traits specialization for R10G10B10A2_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10A2_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 10, SWR_TYPE_USCALED, 10, SWR_TYPE_USCALED, 10, SWR_TYPE_USCALED, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10A2_SSCALED> - Format traits specialization for R10G10B10A2_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10A2_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 10, SWR_TYPE_SSCALED, 10, SWR_TYPE_SSCALED, 10, SWR_TYPE_SSCALED, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R10G10B10A2_SINT> - Format traits specialization for R10G10B10A2_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R10G10B10A2_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 10, SWR_TYPE_SINT, 10, SWR_TYPE_SINT, 10, SWR_TYPE_SINT, 2>,
    FormatSwizzle<0, 1, 2, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B10G10R10A2_SNORM> - Format traits specialization for B10G10R10A2_SNORM
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B10G10R10A2_SNORM> :
    ComponentTraits<SWR_TYPE_SNORM, 10, SWR_TYPE_SNORM, 10, SWR_TYPE_SNORM, 10, SWR_TYPE_SNORM, 2>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B10G10R10A2_USCALED> - Format traits specialization for B10G10R10A2_USCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B10G10R10A2_USCALED> :
    ComponentTraits<SWR_TYPE_USCALED, 10, SWR_TYPE_USCALED, 10, SWR_TYPE_USCALED, 10, SWR_TYPE_USCALED, 2>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B10G10R10A2_SSCALED> - Format traits specialization for B10G10R10A2_SSCALED
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B10G10R10A2_SSCALED> :
    ComponentTraits<SWR_TYPE_SSCALED, 10, SWR_TYPE_SSCALED, 10, SWR_TYPE_SSCALED, 10, SWR_TYPE_SSCALED, 2>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x3f800000>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B10G10R10A2_UINT> - Format traits specialization for B10G10R10A2_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B10G10R10A2_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 10, SWR_TYPE_UINT, 10, SWR_TYPE_UINT, 10, SWR_TYPE_UINT, 2>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<B10G10R10A2_SINT> - Format traits specialization for B10G10R10A2_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<B10G10R10A2_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 10, SWR_TYPE_SINT, 10, SWR_TYPE_SINT, 10, SWR_TYPE_SINT, 2>,
    FormatSwizzle<2, 1, 0, 3>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 32 };
    static const uint32_t numComps{ 4 };
    static const bool hasAlpha{ true };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose10_10_10_2    TransposeT;
    typedef Format4<10, 10, 10, 2> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8_UINT> - Format traits specialization for R8G8B8_UINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8_UINT> :
    ComponentTraits<SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8, SWR_TYPE_UINT, 8>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 24 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8   TransposeT;
    typedef Format3<8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<R8G8B8_SINT> - Format traits specialization for R8G8B8_SINT
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<R8G8B8_SINT> :
    ComponentTraits<SWR_TYPE_SINT, 8, SWR_TYPE_SINT, 8, SWR_TYPE_SINT, 8>,
    FormatSwizzle<0, 1, 2>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 24 };
    static const uint32_t numComps{ 3 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 0 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef Transpose8_8_8   TransposeT;
    typedef Format3<8, 8, 8> FormatT;
};

//////////////////////////////////////////////////////////////////////////
/// FormatTraits<RAW> - Format traits specialization for RAW
//////////////////////////////////////////////////////////////////////////
template<> struct FormatTraits<RAW> :
    ComponentTraits<SWR_TYPE_UINT, 8>,
    FormatSwizzle<0>,
    Defaults<0, 0, 0, 0x1>
{
    static const uint32_t bpp{ 8 };
    static const uint32_t numComps{ 1 };
    static const bool hasAlpha{ false };
    static const uint32_t alphaComp{ 3 };
    static const bool isSRGB{ false };
    static const bool isBC{ false };
    static const bool isSubsampled{ false };
    static const uint32_t bcWidth{ 1 };
    static const uint32_t bcHeight{ 1 };

    typedef TransposeSingleComponent<8> TransposeT;
    typedef Format1<8>                  FormatT;
};
