Commit bc49758c by Olli Etuaho

Choose D3D11 swizzle formats in gen_texture_format_table.py

Making swizzle format data come from the ANGLE format table will make it easier to make changes that affect both swizzle formats and regular texture formats. Swizzle format is now specified manually for some tricky formats, but for most it can be determined automatically from the ANGLE texture format info. The ANGLE texture format info in texture_format_table.json is changed to facilitate this. The componentType field now captures only whether the data is normalized, int or float and its signedness, but not the width of the data type. Bit widths of the individual channels are recorded in a separate "bits" object for each ANGLE format entry. Also, a new 16-bit RGBA UNORM ANGLE format is added to support swizzling 16-bit normalized depth formats. This change is mostly just refactoring, but it fixes swizzling for formats which have less bits for alpha than other channels: - RGB10_A2 - RGB10_A2UI - RGB5_A1 BUG=angleproject:1322 BUG=angleproject:1244 TEST=angle_end2end_tests, dEQP-GLES3.functional.texture.swizzle.* (all pass) Change-Id: I87d8a9cc0b6569191f50c41754d77b20ca6afef9 Reviewed-on: https://chromium-review.googlesource.com/329074Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent 9062b3b7
......@@ -104,8 +104,8 @@ class TextureStorage11 : public TextureStorage
unsigned int mMipLevels;
GLenum mInternalFormat;
d3d11::DXGIFormatSet mTextureFormatSet;
d3d11::DXGIFormatSet mSwizzleFormatSet;
d3d11::ANGLEFormatSet mTextureFormatSet;
d3d11::ANGLEFormatSet mSwizzleFormatSet;
unsigned int mTextureWidth;
unsigned int mTextureHeight;
unsigned int mTextureDepth;
......
#!/usr/bin/python
# Copyright 2015 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# gen_swizzle_format_table.py:
# Code generation for the swizzle format table used for texture formats
#
import json
import pprint
template = """// GENERATED FILE - DO NOT EDIT
// Generated by gen_swizzle_format_table.py using data from swizzle_format_data.json
//
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// swizzle_format_info:
// Provides information for swizzle format and a map from type->formatinfo
//
#include "libANGLE/renderer/d3d/d3d11/swizzle_format_info.h"
#include <GLES3/gl3.h>
namespace rx
{{
namespace d3d11
{{
SwizzleSizeType::SwizzleSizeType() : maxComponentSize(0), componentType(GL_NONE)
{{
}}
SwizzleSizeType::SwizzleSizeType(size_t maxComponentSize, GLenum componentType)
: maxComponentSize(maxComponentSize), componentType(componentType)
{{
}}
bool SwizzleSizeType::operator<(const SwizzleSizeType &other) const
{{
return (maxComponentSize != other.maxComponentSize)
? (maxComponentSize < other.maxComponentSize)
: (componentType < other.componentType);
}}
SwizzleFormatInfo::SwizzleFormatInfo()
: mTexFormat(DXGI_FORMAT_UNKNOWN),
mSRVFormat(DXGI_FORMAT_UNKNOWN),
mRTVFormat(DXGI_FORMAT_UNKNOWN)
{{
}}
SwizzleFormatInfo::SwizzleFormatInfo(DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat)
: mTexFormat(texFormat), mSRVFormat(srvFormat), mRTVFormat(rtvFormat)
{{
}}
const SwizzleFormatInfo &GetSwizzleFormatInfo(GLuint maxBits, GLenum componentType)
{{
// clang-format off
switch ({component_type_param})
{{
{data}
default:
{{
static const SwizzleFormatInfo defaultInfo(DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
return defaultInfo;
}}
}}
// clang-format on
}} // GetSwizzleFormatInfo
}} // namespace d3d11
}} // namespace rx
"""
max_bits_param = 'maxBits'
component_type_param = 'componentType'
tex_format_key = 'texFormat'
srv_format_key = 'srvFormat'
rtv_format_key = 'rtvFormat'
def parse_json_into_switch_string(json_data):
table_data = ''
for component_type in sorted(json_data.iteritems()):
type_str = component_type[0]
table_data += ' case ' + type_str + ':\n'
table_data += ' {\n'
table_data += ' switch (' + max_bits_param + ')\n'
table_data += ' {\n'
for max_width_item in sorted(json_data[type_str].iteritems()):
max_width = max_width_item[0]
table_data += ' case ' + max_width + ':\n'
table_data += ' {\n'
table_data += ' static const SwizzleFormatInfo formatInfo(' + json_data[type_str][max_width][tex_format_key] + ',\n'
table_data += ' ' + json_data[type_str][max_width][srv_format_key] + ',\n'
table_data += ' ' + json_data[type_str][max_width][rtv_format_key] + ');\n'
table_data += ' return formatInfo;\n'
table_data += ' }\n'
table_data += ' default:\n'
table_data += ' break;\n'
table_data += ' }\n'
table_data += ' }\n'
return table_data
with open('swizzle_format_data.json') as functions_json_file:
functions_data = functions_json_file.read();
functions_json_file.close()
json_data = json.loads(functions_data)
table_data = parse_json_into_switch_string(json_data)
output = template.format(component_type_param=component_type_param,
data=table_data)
with open('swizzle_format_info_autogen.cpp', 'wt') as out_file:
out_file.write(output)
out_file.close()
......@@ -8,6 +8,7 @@
#
import json
import math
import pprint
import re
......@@ -51,7 +52,6 @@ template_texture_format_table_autogen_cpp = """// GENERATED FILE - DO NOT EDIT.
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/load_functions_table.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/swizzle_format_info.h"
#include "libANGLE/renderer/d3d/loadimage.h"
namespace rx
......@@ -135,11 +135,12 @@ bool SupportsFormat(const Renderer11DeviceCaps &deviceCaps)
// End Format Support Functions
}} // namespace
DXGIFormatSet::DXGIFormatSet()
ANGLEFormatSet::ANGLEFormatSet()
: texFormat(DXGI_FORMAT_UNKNOWN),
srvFormat(DXGI_FORMAT_UNKNOWN),
rtvFormat(DXGI_FORMAT_UNKNOWN),
dsvFormat(DXGI_FORMAT_UNKNOWN)
dsvFormat(DXGI_FORMAT_UNKNOWN),
swizzleFormat(ANGLE_FORMAT_NONE)
{{
}}
......@@ -148,59 +149,11 @@ DXGIFormatSet::DXGIFormatSet()
// This function allows querying for the DXGI texture formats to use for textures, SRVs, RTVs and
// DSVs given a GL internal format.
TextureFormat::TextureFormat(GLenum internalFormat,
const DXGIFormatSet &formatSet,
const ANGLEFormatSet &formatSet,
InitializeTextureDataFunction internalFormatInitializer)
: formatSet(formatSet), dataInitializerFunction(internalFormatInitializer)
{{
// Compute the swizzle formats
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat);
if (internalFormat != GL_NONE && formatInfo.pixelBytes > 0)
{{
if (formatInfo.componentCount != 4 || formatSet.texFormat == DXGI_FORMAT_UNKNOWN ||
formatSet.srvFormat == DXGI_FORMAT_UNKNOWN ||
formatSet.rtvFormat == DXGI_FORMAT_UNKNOWN)
{{
// Get the maximum sized component
unsigned int maxBits = 1;
if (formatInfo.compressed)
{{
unsigned int compressedBitsPerBlock = formatInfo.pixelBytes * 8;
unsigned int blockSize =
formatInfo.compressedBlockWidth * formatInfo.compressedBlockHeight;
maxBits = std::max(compressedBitsPerBlock / blockSize, maxBits);
}}
else
{{
maxBits = std::max(maxBits, formatInfo.alphaBits);
maxBits = std::max(maxBits, formatInfo.redBits);
maxBits = std::max(maxBits, formatInfo.greenBits);
maxBits = std::max(maxBits, formatInfo.blueBits);
maxBits = std::max(maxBits, formatInfo.luminanceBits);
maxBits = std::max(maxBits, formatInfo.depthBits);
}}
maxBits = roundUp(maxBits, 8U);
const SwizzleFormatInfo &swizzleInfo =
GetSwizzleFormatInfo(maxBits, formatInfo.componentType);
swizzleFormatSet.texFormat = swizzleInfo.mTexFormat;
swizzleFormatSet.srvFormat = swizzleInfo.mSRVFormat;
swizzleFormatSet.rtvFormat = swizzleInfo.mRTVFormat;
}}
else
{{
// The original texture format is suitable for swizzle operations
swizzleFormatSet = formatSet;
}}
}}
else
{{
// Not possible to swizzle with this texture format since it is either unsized or GL_NONE
ASSERT(swizzleFormatSet.texFormat == DXGI_FORMAT_UNKNOWN);
ASSERT(swizzleFormatSet.srvFormat == DXGI_FORMAT_UNKNOWN);
ASSERT(swizzleFormatSet.rtvFormat == DXGI_FORMAT_UNKNOWN);
}}
swizzleFormatSet = GetANGLEFormatSet(formatSet.swizzleFormat);
// Gather all the load functions for this internal format
loadFunctions = GetLoadFunctionsMap(internalFormat, formatSet.texFormat);
......@@ -208,15 +161,20 @@ TextureFormat::TextureFormat(GLenum internalFormat,
ASSERT(loadFunctions.size() != 0 || internalFormat == GL_NONE);
}}
DXGIFormatSet::DXGIFormatSet(DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat)
: texFormat(texFormat), srvFormat(srvFormat), rtvFormat(rtvFormat), dsvFormat(dsvFormat)
ANGLEFormatSet::ANGLEFormatSet(DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat)
: texFormat(texFormat),
srvFormat(srvFormat),
rtvFormat(rtvFormat),
dsvFormat(dsvFormat),
swizzleFormat(swizzleFormat)
{{
}}
const DXGIFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
{{
// clang-format off
switch (angleFormat)
......@@ -228,7 +186,7 @@ const DXGIFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
// clang-format on
UNREACHABLE();
static const DXGIFormatSet defaultInfo;
static const ANGLEFormatSet defaultInfo;
return defaultInfo;
}}
......@@ -244,7 +202,7 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
}}
// clang-format on
static const TextureFormat defaultInfo(GL_NONE, DXGIFormatSet(), nullptr);
static const TextureFormat defaultInfo(GL_NONE, ANGLEFormatSet(), nullptr);
return defaultInfo;
}} // GetTextureFormatInfo
......@@ -299,31 +257,81 @@ def get_internal_format_initializer(internal_format, angle_format):
pass
elif 'componentType' not in angle_format:
raise ValueError('warning: internal format initializer could not be generated and may be needed for ' + internal_format)
elif angle_format['componentType'] == 'byte_uint':
elif angle_format['componentType'] == 'uint' and angle_format['bits']['red'] == 8:
internal_format_initializer = 'Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>'
elif angle_format['componentType'] == 'byte_unorm':
elif angle_format['componentType'] == 'unorm' and angle_format['bits']['red'] == 8:
internal_format_initializer = 'Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>'
elif angle_format['componentType'] == 'byte_int':
elif angle_format['componentType'] == 'int' and angle_format['bits']['red'] == 8:
internal_format_initializer = 'Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>'
elif angle_format['componentType'] == 'byte_snorm':
elif angle_format['componentType'] == 'snorm' and angle_format['bits']['red'] == 8:
internal_format_initializer = 'Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x7F>'
elif angle_format['componentType'] == 'half':
elif angle_format['componentType'] == 'float' and angle_format['bits']['red'] == 16:
internal_format_initializer = 'Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>'
elif angle_format['componentType'] == 'short_uint':
elif angle_format['componentType'] == 'uint' and angle_format['bits']['red'] == 16:
internal_format_initializer = 'Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>'
elif angle_format['componentType'] == 'short_int':
elif angle_format['componentType'] == 'int' and angle_format['bits']['red'] == 16:
internal_format_initializer = 'Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>'
elif angle_format['componentType'] == 'float':
elif angle_format['componentType'] == 'float' and angle_format['bits']['red'] == 32:
internal_format_initializer = 'Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>'
elif angle_format['componentType'] == 'int':
elif angle_format['componentType'] == 'int' and angle_format['bits']['red'] == 32:
internal_format_initializer = 'Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>'
elif angle_format['componentType'] == 'uint':
elif angle_format['componentType'] == 'uint' and angle_format['bits']['red'] == 32:
internal_format_initializer = 'Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>'
else:
raise ValueError('warning: internal format initializer could not be generated and may be needed for ' + internal_format)
return internal_format_initializer
def get_swizzle_format_id(angle_format_id, angle_format):
if angle_format_id == 'ANGLE_FORMAT_NONE':
return 'ANGLE_FORMAT_NONE'
elif 'swizzleFormat' in angle_format:
# For some special formats like compressed formats that don't have a clearly defined number
# of bits per channel, swizzle format needs to be specified manually.
return angle_format['swizzleFormat']
if 'bits' not in angle_format:
raise ValueError('no bits information for determining swizzleformat for format: ' + angle_format_id)
bits = angle_format['bits']
max_component_bits = max(bits.itervalues())
channels_different = not all([component_bits == bits.itervalues().next() for component_bits in bits.itervalues()])
# The format itself can be used for swizzles if it can be accessed as a render target and
# sampled and the bit count for all 4 channels is the same.
if "rtvFormat" in angle_format and "srvFormat" in angle_format and not channels_different and len(angle_format['channels']) == 4:
return angle_format_id
b = int(math.ceil(float(max_component_bits) / 8) * 8)
# Depth formats need special handling, since combined depth/stencil formats don't have a clearly
# defined component type.
if angle_format['channels'].find('d') >= 0:
if b == 24 or b == 32:
return 'ANGLE_FORMAT_R32G32B32A32_FLOAT'
if b == 16:
return 'ANGLE_FORMAT_R16G16B16A16_UNORM'
if b == 24:
raise ValueError('unexpected 24-bit format when determining swizzleformat for format: ' + angle_format_id)
if 'componentType' not in angle_format:
raise ValueError('no component type information for determining swizzleformat for format: ' + angle_format_id)
component_type = angle_format['componentType']
if component_type == 'uint':
return 'ANGLE_FORMAT_R{}G{}B{}A{}_UINT'.format(b, b, b, b)
elif component_type == 'int':
return 'ANGLE_FORMAT_R{}G{}B{}A{}_SINT'.format(b, b, b, b)
elif component_type == 'unorm':
return 'ANGLE_FORMAT_R{}G{}B{}A{}_UNORM'.format(b, b, b, b)
elif component_type == 'snorm':
return 'ANGLE_FORMAT_R{}G{}B{}A{}_SNORM'.format(b, b, b, b)
elif component_type == 'float':
return 'ANGLE_FORMAT_R{}G{}B{}A{}_FLOAT'.format(b, b, b, b)
else:
raise ValueError('could not determine swizzleformat based on componentType for format: ' + angle_format_id)
def get_texture_format_item(idx, internal_format, requirements_fn, angle_format_id, angle_format):
table_data = '';
......@@ -382,11 +390,13 @@ def parse_json_into_switch_angle_format_string(json_data):
srv_format = angle_format["srvFormat"] if "srvFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
rtv_format = angle_format["rtvFormat"] if "rtvFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
dsv_format = angle_format["dsvFormat"] if "dsvFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
swizzle_format = get_swizzle_format_id(angle_format_item[0], angle_format)
table_data += ' {\n'
table_data += ' static const DXGIFormatSet formatInfo(' + tex_format + ',\n'
table_data += ' ' + srv_format + ',\n'
table_data += ' ' + rtv_format + ',\n'
table_data += ' ' + dsv_format + ');\n'
table_data += ' static const ANGLEFormatSet formatInfo(' + tex_format + ',\n'
table_data += ' ' + srv_format + ',\n'
table_data += ' ' + rtv_format + ',\n'
table_data += ' ' + dsv_format + ',\n'
table_data += ' ' + swizzle_format + ');\n'
table_data += ' return formatInfo;\n'
table_data += ' }\n'
return table_data
......
{
"GL_UNSIGNED_NORMALIZED": {
"8": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM"
},
"16": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_UNORM",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_UNORM",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_UNORM"
},
"24": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT"
},
"32": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT"
}
},
"GL_SIGNED_NORMALIZED": {
"8": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_SNORM",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_SNORM",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_SNORM"
}
},
"GL_FLOAT": {
"16": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT"
},
"32": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT"
}
},
"GL_UNSIGNED_INT": {
"8": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UINT",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UINT",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UINT"
},
"16": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_UINT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_UINT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_UINT"
},
"32": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_UINT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_UINT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_UINT"
}
},
"GL_INT": {
"8": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_SINT"
},
"16": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_SINT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_SINT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_SINT"
},
"32": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_SINT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_SINT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_SINT"
}
}
}
\ No newline at end of file
//
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// swizzle_format_info:
// Provides information for swizzle format and a map from type->formatinfo
//
#ifndef LIBANGLE_RENDERER_D3D_D3D11_SWIZZLEFORMATINFO_H_
#define LIBANGLE_RENDERER_D3D_D3D11_SWIZZLEFORMATINFO_H_
#include <GLES2/gl2.h>
#include <map>
#include "common/platform.h"
namespace rx
{
namespace d3d11
{
struct SwizzleSizeType
{
size_t maxComponentSize;
GLenum componentType;
SwizzleSizeType();
SwizzleSizeType(size_t maxComponentSize, GLenum componentType);
bool operator<(const SwizzleSizeType &other) const;
};
struct SwizzleFormatInfo
{
DXGI_FORMAT mTexFormat;
DXGI_FORMAT mSRVFormat;
DXGI_FORMAT mRTVFormat;
SwizzleFormatInfo();
SwizzleFormatInfo(DXGI_FORMAT texFormat, DXGI_FORMAT srvFormat, DXGI_FORMAT rtvFormat);
};
const SwizzleFormatInfo &GetSwizzleFormatInfo(GLuint maxBits, GLenum componentType);
} // namespace d3d11
} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_SWIZZLEFORMATINFO_H_
// GENERATED FILE - DO NOT EDIT
// Generated by gen_swizzle_format_table.py using data from swizzle_format_data.json
//
// Copyright 2015 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// swizzle_format_info:
// Provides information for swizzle format and a map from type->formatinfo
//
#include "libANGLE/renderer/d3d/d3d11/swizzle_format_info.h"
#include <GLES3/gl3.h>
namespace rx
{
namespace d3d11
{
SwizzleSizeType::SwizzleSizeType() : maxComponentSize(0), componentType(GL_NONE)
{
}
SwizzleSizeType::SwizzleSizeType(size_t maxComponentSize, GLenum componentType)
: maxComponentSize(maxComponentSize), componentType(componentType)
{
}
bool SwizzleSizeType::operator<(const SwizzleSizeType &other) const
{
return (maxComponentSize != other.maxComponentSize)
? (maxComponentSize < other.maxComponentSize)
: (componentType < other.componentType);
}
SwizzleFormatInfo::SwizzleFormatInfo()
: mTexFormat(DXGI_FORMAT_UNKNOWN),
mSRVFormat(DXGI_FORMAT_UNKNOWN),
mRTVFormat(DXGI_FORMAT_UNKNOWN)
{
}
SwizzleFormatInfo::SwizzleFormatInfo(DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat)
: mTexFormat(texFormat), mSRVFormat(srvFormat), mRTVFormat(rtvFormat)
{
}
const SwizzleFormatInfo &GetSwizzleFormatInfo(GLuint maxBits, GLenum componentType)
{
// clang-format off
switch (componentType)
{
case GL_FLOAT:
{
switch (maxBits)
{
case 16:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT);
return formatInfo;
}
case 32:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
default:
break;
}
}
case GL_INT:
{
switch (maxBits)
{
case 16:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT);
return formatInfo;
}
case 32:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT);
return formatInfo;
}
case 8:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT);
return formatInfo;
}
default:
break;
}
}
case GL_SIGNED_NORMALIZED:
{
switch (maxBits)
{
case 8:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_R8G8B8A8_SNORM);
return formatInfo;
}
default:
break;
}
}
case GL_UNSIGNED_INT:
{
switch (maxBits)
{
case 16:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT);
return formatInfo;
}
case 32:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT);
return formatInfo;
}
case 8:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT);
return formatInfo;
}
default:
break;
}
}
case GL_UNSIGNED_NORMALIZED:
{
switch (maxBits)
{
case 16:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R16G16B16A16_UNORM,
DXGI_FORMAT_R16G16B16A16_UNORM,
DXGI_FORMAT_R16G16B16A16_UNORM);
return formatInfo;
}
case 24:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case 32:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case 8:
{
static const SwizzleFormatInfo formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
default:
break;
}
}
default:
{
static const SwizzleFormatInfo defaultInfo(DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
return defaultInfo;
}
}
// clang-format on
} // GetSwizzleFormatInfo
} // namespace d3d11
} // namespace rx
......@@ -7,362 +7,433 @@
"srvFormat": "DXGI_FORMAT_A8_UNORM",
"rtvFormat": "DXGI_FORMAT_A8_UNORM",
"channels": "a",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "alpha": 8 }
},
"ANGLE_FORMAT_R8G8B8A8_UNORM": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"channels": "rgba",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8, "green": 8, "blue": 8, "alpha": 8 }
},
"ANGLE_FORMAT_R16G16B16A16_UNORM": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_UNORM",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_UNORM",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_UNORM",
"channels": "rgba",
"componentType": "unorm",
"bits": { "red": 16, "green": 16, "blue": 16, "alpha": 16 }
},
"ANGLE_FORMAT_R16G16B16A16_FLOAT": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT",
"channels": "rgba",
"componentType": "half"
"componentType": "float",
"bits": { "red": 16, "green": 16, "blue": 16, "alpha": 16 }
},
"ANGLE_FORMAT_R32G32B32A32_FLOAT": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"channels": "rgba",
"componentType": "float"
"componentType": "float",
"bits": { "red": 32, "green": 32, "blue": 32, "alpha": 32 }
},
"ANGLE_FORMAT_B8G8R8A8_UNORM": {
"texFormat": "DXGI_FORMAT_B8G8R8A8_UNORM",
"srvFormat": "DXGI_FORMAT_B8G8R8A8_UNORM",
"rtvFormat": "DXGI_FORMAT_B8G8R8A8_UNORM",
"channels": "bgra",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8, "green": 8, "blue": 8, "alpha": 8 }
},
"ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"channels": "rgba",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8, "green": 8, "blue": 8, "alpha": 8 }
},
"ANGLE_FORMAT_BC1_UNORM": {
"texFormat": "DXGI_FORMAT_BC1_UNORM",
"srvFormat": "DXGI_FORMAT_BC1_UNORM",
"channels": "rgba"
"channels": "rgba",
"swizzleFormat": "ANGLE_FORMAT_R8G8B8A8_UNORM"
},
"ANGLE_FORMAT_BC2_UNORM": {
"texFormat": "DXGI_FORMAT_BC2_UNORM",
"srvFormat": "DXGI_FORMAT_BC2_UNORM",
"channels": "rgba"
"channels": "rgba",
"swizzleFormat": "ANGLE_FORMAT_R8G8B8A8_UNORM"
},
"ANGLE_FORMAT_BC3_UNORM": {
"texFormat": "DXGI_FORMAT_BC3_UNORM",
"srvFormat": "DXGI_FORMAT_BC3_UNORM",
"channels": "rgba"
"channels": "rgba",
"swizzleFormat": "ANGLE_FORMAT_R8G8B8A8_UNORM"
},
"ANGLE_FORMAT_R8_SNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8_SNORM",
"srvFormat": "DXGI_FORMAT_R8_SNORM",
"channels": "r",
"componentType": "byte_snorm"
"componentType": "snorm",
"bits": { "red": 8 }
},
"ANGLE_FORMAT_R8G8_SNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8G8_SNORM",
"srvFormat": "DXGI_FORMAT_R8G8_SNORM",
"channels": "rg",
"componentType": "byte_snorm"
"componentType": "snorm",
"bits": { "red": 8, "green": 8 }
},
"ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"channels": "rgba",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8, "green": 8, "blue": 8, "alpha": 8 }
},
"ANGLE_FORMAT_D24_UNORM_S8_UINT_FL10": {
"texFormat": "DXGI_FORMAT_R24G8_TYPELESS",
"srvFormat": "DXGI_FORMAT_R24_UNORM_X8_TYPELESS",
"dsvFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT",
"channels": "ds"
"channels": "ds",
"bits": { "depth": 24, "stencil": 8 }
},
"ANGLE_FORMAT_D24_UNORM_S8_UINT_FL9_3": {
"texFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT",
"dsvFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT",
"channels": "ds"
"channels": "ds",
"bits": { "depth": 24, "stencil": 8 }
},
"ANGLE_FORMAT_D32_FLOAT_S8X24_UINT_FL10": {
"texFormat": "DXGI_FORMAT_R32G8X24_TYPELESS",
"srvFormat": "DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS",
"dsvFormat": "DXGI_FORMAT_D32_FLOAT_S8X24_UINT",
"channels": "ds"
"channels": "ds",
"bits": { "depth": 32, "stencil": 8 }
},
"ANGLE_FORMAT_D16_UNORM_FL10": {
"texFormat": "DXGI_FORMAT_R16_TYPELESS",
"srvFormat": "DXGI_FORMAT_R16_UNORM",
"dsvFormat": "DXGI_FORMAT_D16_UNORM",
"channels": "d",
"componentType": "short_unorm"
"componentType": "unorm",
"bits": { "depth": 16 }
},
"ANGLE_FORMAT_D16_UNORM_FL9_3": {
"texFormat": "DXGI_FORMAT_D16_UNORM",
"dsvFormat": "DXGI_FORMAT_D16_UNORM",
"channels": "d",
"componentType": "short_unorm"
"componentType": "unorm",
"bits": { "depth": 16 }
},
"ANGLE_FORMAT_D32_FLOAT": {
"texFormat": "DXGI_FORMAT_R32_TYPELESS",
"srvFormat": "DXGI_FORMAT_R32_FLOAT",
"dsvFormat": "DXGI_FORMAT_D32_FLOAT",
"channels": "d",
"componentType": "float"
"componentType": "float",
"bits": { "depth": 32 }
},
"ANGLE_FORMAT_R11G11B10_FLOAT": {
"texFormat": "DXGI_FORMAT_R11G11B10_FLOAT",
"srvFormat": "DXGI_FORMAT_R11G11B10_FLOAT",
"rtvFormat": "DXGI_FORMAT_R11G11B10_FLOAT",
"channels": "rgb"
"channels": "rgb",
"componentType": "float",
"bits": { "red": 11, "green": 11, "blue": 10 }
},
"ANGLE_FORMAT_R16_FLOAT": {
"texFormat": "DXGI_FORMAT_R16_FLOAT",
"srvFormat": "DXGI_FORMAT_R16_FLOAT",
"rtvFormat": "DXGI_FORMAT_R16_FLOAT",
"channels": "r",
"componentType": "half"
"componentType": "float",
"bits": { "red": 16 }
},
"ANGLE_FORMAT_R16_SINT": {
"texFormat": "DXGI_FORMAT_R16_SINT",
"srvFormat": "DXGI_FORMAT_R16_SINT",
"rtvFormat": "DXGI_FORMAT_R16_SINT",
"channels": "r",
"componentType": "short_int"
"componentType": "int",
"bits": { "red": 16 }
},
"ANGLE_FORMAT_R16_UINT": {
"texFormat": "DXGI_FORMAT_R16_UINT",
"srvFormat": "DXGI_FORMAT_R16_UINT",
"rtvFormat": "DXGI_FORMAT_R16_UINT",
"channels": "r",
"componentType": "short_uint"
"componentType": "uint",
"bits": { "red": 16 }
},
"ANGLE_FORMAT_R32_FLOAT": {
"texFormat": "DXGI_FORMAT_R32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32_FLOAT",
"channels": "r",
"componentType": "float"
"componentType": "float",
"bits": { "red": 32 }
},
"ANGLE_FORMAT_R32_SINT": {
"texFormat": "DXGI_FORMAT_R32_SINT",
"srvFormat": "DXGI_FORMAT_R32_SINT",
"rtvFormat": "DXGI_FORMAT_R32_SINT",
"channels": "r",
"componentType": "int"
"componentType": "int",
"bits": { "red": 32 }
},
"ANGLE_FORMAT_R32_UINT": {
"texFormat": "DXGI_FORMAT_R32_UINT",
"srvFormat": "DXGI_FORMAT_R32_UINT",
"rtvFormat": "DXGI_FORMAT_R32_UINT",
"channels": "r",
"componentType": "uint"
"componentType": "uint",
"bits": { "red": 32 }
},
"ANGLE_FORMAT_R8_UNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8_UNORM",
"srvFormat": "DXGI_FORMAT_R8_UNORM",
"channels": "r",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8 }
},
"ANGLE_FORMAT_R8_UNORM": {
"texFormat": "DXGI_FORMAT_R8_UNORM",
"srvFormat": "DXGI_FORMAT_R8_UNORM",
"rtvFormat": "DXGI_FORMAT_R8_UNORM",
"channels": "r",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8 }
},
"ANGLE_FORMAT_R8_SINT": {
"texFormat": "DXGI_FORMAT_R8_SINT",
"srvFormat": "DXGI_FORMAT_R8_SINT",
"rtvFormat": "DXGI_FORMAT_R8_SINT",
"channels": "r",
"componentType": "byte_int"
"componentType": "int",
"bits": { "red": 8 }
},
"ANGLE_FORMAT_R8_UINT": {
"texFormat": "DXGI_FORMAT_R8_UINT",
"srvFormat": "DXGI_FORMAT_R8_UINT",
"rtvFormat": "DXGI_FORMAT_R8_UINT",
"channels": "r",
"componentType": "byte_unorm"
"componentType": "uint",
"bits": { "red": 8 }
},
"ANGLE_FORMAT_R8_SNORM": {
"texFormat": "DXGI_FORMAT_R8_SNORM",
"srvFormat": "DXGI_FORMAT_R8_SNORM",
"channels": "r",
"componentType": "byte_snorm"
"componentType": "snorm",
"bits": { "red": 8 }
},
"ANGLE_FORMAT_R16G16_FLOAT": {
"texFormat": "DXGI_FORMAT_R16G16_FLOAT",
"srvFormat": "DXGI_FORMAT_R16G16_FLOAT",
"rtvFormat": "DXGI_FORMAT_R16G16_FLOAT",
"channels": "rg",
"componentType": "half"
"componentType": "float",
"bits": { "red": 16, "green": 16 }
},
"ANGLE_FORMAT_R16G16_SINT": {
"texFormat": "DXGI_FORMAT_R16G16_SINT",
"srvFormat": "DXGI_FORMAT_R16G16_SINT",
"rtvFormat": "DXGI_FORMAT_R16G16_SINT",
"channels": "rg",
"componentType": "short_int"
"componentType": "int",
"bits": { "red": 16, "green": 16 }
},
"ANGLE_FORMAT_R16G16_UINT": {
"texFormat": "DXGI_FORMAT_R16G16_UINT",
"srvFormat": "DXGI_FORMAT_R16G16_UINT",
"rtvFormat": "DXGI_FORMAT_R16G16_UINT",
"channels": "rg",
"componentType": "short_uint"
"componentType": "uint",
"bits": { "red": 16, "green": 16 }
},
"ANGLE_FORMAT_R32G32_FLOAT": {
"texFormat": "DXGI_FORMAT_R32G32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32G32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32G32_FLOAT",
"channels": "rg",
"componentType": "float"
"componentType": "float",
"bits": { "red": 32, "green": 32 }
},
"ANGLE_FORMAT_R32G32_SINT": {
"texFormat": "DXGI_FORMAT_R32G32_SINT",
"srvFormat": "DXGI_FORMAT_R32G32_SINT",
"rtvFormat": "DXGI_FORMAT_R32G32_SINT",
"channels": "rg",
"componentType": "int"
"componentType": "int",
"bits": { "red": 32, "green": 32 }
},
"ANGLE_FORMAT_R32G32_UINT": {
"texFormat": "DXGI_FORMAT_R32G32_UINT",
"srvFormat": "DXGI_FORMAT_R32G32_UINT",
"rtvFormat": "DXGI_FORMAT_R32G32_UINT",
"channels": "rg",
"componentType": "uint"
"componentType": "uint",
"bits": { "red": 32, "green": 32 }
},
"ANGLE_FORMAT_R8G8_UNORM": {
"texFormat": "DXGI_FORMAT_R8G8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8_UNORM",
"rtvFormat": "DXGI_FORMAT_R8G8_UNORM",
"channels": "rg",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8, "green": 8 }
},
"ANGLE_FORMAT_R8G8_UNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8G8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8_UNORM",
"channels": "rg",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8, "green": 8 }
},
"ANGLE_FORMAT_R8G8_SINT": {
"texFormat": "DXGI_FORMAT_R8G8_SINT",
"srvFormat": "DXGI_FORMAT_R8G8_SINT",
"rtvFormat": "DXGI_FORMAT_R8G8_SINT",
"channels": "rg",
"componentType": "byte_int"
"componentType": "int",
"bits": { "red": 8, "green": 8 }
},
"ANGLE_FORMAT_R8G8_UINT": {
"texFormat": "DXGI_FORMAT_R8G8_UINT",
"srvFormat": "DXGI_FORMAT_R8G8_UINT",
"rtvFormat": "DXGI_FORMAT_R8G8_UINT",
"channels": "rg",
"componentType": "byte_uint"
"componentType": "uint",
"bits": { "red": 8, "green": 8 }
},
"ANGLE_FORMAT_R8G8_SNORM": {
"texFormat": "DXGI_FORMAT_R8G8_SNORM",
"srvFormat": "DXGI_FORMAT_R8G8_SNORM",
"channels": "rg",
"componentType": "byte_snorm"
"componentType": "snorm",
"bits": { "red": 8, "green": 8 }
},
"ANGLE_FORMAT_R10G10B10A2_UNORM": {
"texFormat": "DXGI_FORMAT_R10G10B10A2_UNORM",
"srvFormat": "DXGI_FORMAT_R10G10B10A2_UNORM",
"rtvFormat": "DXGI_FORMAT_R10G10B10A2_UNORM",
"channels": "rgba"
"channels": "rgba",
"componentType": "unorm",
"bits": { "red": 10, "green": 10, "blue": 10, "alpha": 2 }
},
"ANGLE_FORMAT_R10G10B10A2_UINT": {
"texFormat": "DXGI_FORMAT_R10G10B10A2_UINT",
"srvFormat": "DXGI_FORMAT_R10G10B10A2_UINT",
"rtvFormat": "DXGI_FORMAT_R10G10B10A2_UINT",
"channels": "rgba"
"channels": "rgba",
"componentType": "uint",
"bits": { "red": 10, "green": 10, "blue": 10, "alpha": 2 }
},
"ANGLE_FORMAT_R16G16B16A16_SINT": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_SINT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_SINT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_SINT",
"channels": "rgba",
"componentType": "short_int"
"componentType": "int",
"bits": { "red": 16, "green": 16, "blue": 16, "alpha": 16 }
},
"ANGLE_FORMAT_R16G16B16A16_UINT": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_UINT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_UINT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_UINT",
"channels": "rgba",
"componentType": "short_uint"
"componentType": "uint",
"bits": { "red": 16, "green": 16, "blue": 16, "alpha": 16 }
},
"ANGLE_FORMAT_R32G32B32A32_SINT": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_SINT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_SINT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_SINT",
"channels": "rgba",
"componentType": "int"
"componentType": "int",
"bits": { "red": 32, "green": 32, "blue": 32, "alpha": 32 }
},
"ANGLE_FORMAT_R32G32B32A32_UINT": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_UINT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_UINT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_UINT",
"channels": "rgba",
"componentType": "uint"
"componentType": "uint",
"bits": { "red": 32, "green": 32, "blue": 32, "alpha": 32 }
},
"ANGLE_FORMAT_B5G6R5_UNORM": {
"texFormat": "DXGI_FORMAT_B5G6R5_UNORM",
"srvFormat": "DXGI_FORMAT_B5G6R5_UNORM",
"rtvFormat": "DXGI_FORMAT_B5G6R5_UNORM",
"channels": "bgr"
"channels": "bgr",
"componentType": "unorm",
"bits": { "red": 5, "green": 6, "blue": 5 }
},
"ANGLE_FORMAT_B5G5R5A1_UNORM": {
"texFormat": "DXGI_FORMAT_B5G5R5A1_UNORM",
"srvFormat": "DXGI_FORMAT_B5G5R5A1_UNORM",
"rtvFormat": "DXGI_FORMAT_B5G5R5A1_UNORM",
"channels": "bgra"
"channels": "bgra",
"componentType": "unorm",
"bits": { "red": 5, "green": 5, "blue": 5, "alpha": 1 }
},
"ANGLE_FORMAT_R8G8B8A8_SINT": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
"channels": "rgba",
"componentType": "byte_int"
"componentType": "int",
"bits": { "red": 8, "green": 8, "blue": 8, "alpha": 8 }
},
"ANGLE_FORMAT_R8G8B8A8_UINT": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UINT",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UINT",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UINT",
"channels": "rgba",
"componentType": "byte_uint"
"componentType": "uint",
"bits": { "red": 8, "green": 8, "blue": 8, "alpha": 8 }
},
"ANGLE_FORMAT_R8G8B8A8_SNORM": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_SNORM",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_SNORM",
"channels": "rgba",
"componentType": "byte_snorm"
"componentType": "snorm",
"bits": { "red": 8, "green": 8, "blue": 8, "alpha": 8 }
},
"ANGLE_FORMAT_R9G9B9E5_SHAREDEXP": {
"texFormat": "DXGI_FORMAT_R9G9B9E5_SHAREDEXP",
"srvFormat": "DXGI_FORMAT_R9G9B9E5_SHAREDEXP",
"channels": "rgb"
"channels": "rgb",
"componentType": "float",
"bits": { "red": 9, "green": 9, "blue": 9, "shared": 5 }
},
"ANGLE_FORMAT_B4G4R4A4_UNORM": {
"texFormat": "DXGI_FORMAT_B4G4R4A4_UNORM",
"srvFormat": "DXGI_FORMAT_B4G4R4A4_UNORM",
"rtvFormat": "DXGI_FORMAT_B4G4R4A4_UNORM",
"channels": "bgra"
"channels": "bgra",
"componentType": "unorm",
"bits": { "red": 4, "green": 4, "blue": 4, "alpha": 4 }
},
"ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"channels": "rgba",
"componentType": "byte_unorm"
"componentType": "unorm",
"bits": { "red": 8, "green": 8, "blue": 8, "alpha": 8 }
},
"ANGLE_FORMAT_X24_TYPELESS_G8_UINT": {
"texFormat": "DXGI_FORMAT_R24G8_TYPELESS",
"srvFormat": "DXGI_FORMAT_X24_TYPELESS_G8_UINT",
"dsvFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT",
"channels": "ds"
"channels": "ds",
"bits": { "depth": 24, "stencil": 8 }
}
}
......@@ -35,30 +35,33 @@ struct LoadImageFunctionInfo
bool requiresConversion;
};
struct DXGIFormatSet
struct ANGLEFormatSet
{
DXGIFormatSet();
DXGIFormatSet(DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat);
DXGIFormatSet(const DXGIFormatSet &) = default;
DXGIFormatSet &operator=(const DXGIFormatSet &) = default;
ANGLEFormatSet();
ANGLEFormatSet(DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat);
ANGLEFormatSet(const ANGLEFormatSet &) = default;
ANGLEFormatSet &operator=(const ANGLEFormatSet &) = default;
DXGI_FORMAT texFormat;
DXGI_FORMAT srvFormat;
DXGI_FORMAT rtvFormat;
DXGI_FORMAT dsvFormat;
ANGLEFormat swizzleFormat;
};
struct TextureFormat : public angle::NonCopyable
{
TextureFormat(GLenum internalFormat,
const DXGIFormatSet &formatSet,
const ANGLEFormatSet &formatSet,
InitializeTextureDataFunction internalFormatInitializer);
DXGIFormatSet formatSet;
DXGIFormatSet swizzleFormatSet;
ANGLEFormatSet formatSet;
ANGLEFormatSet swizzleFormatSet;
InitializeTextureDataFunction dataInitializerFunction;
typedef std::map<GLenum, LoadImageFunctionInfo> LoadFunctionMap;
......@@ -66,7 +69,7 @@ struct TextureFormat : public angle::NonCopyable
LoadFunctionMap loadFunctions;
};
const DXGIFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat);
const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat);
const TextureFormat &GetTextureFormatInfo(GLenum internalformat,
const Renderer11DeviceCaps &renderer11DeviceCaps);
......
......@@ -14,7 +14,6 @@
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/load_functions_table.h"
#include "libANGLE/renderer/d3d/d3d11/renderer11_utils.h"
#include "libANGLE/renderer/d3d/d3d11/swizzle_format_info.h"
#include "libANGLE/renderer/d3d/loadimage.h"
namespace rx
......@@ -98,11 +97,12 @@ bool SupportsFormat(const Renderer11DeviceCaps &deviceCaps)
// End Format Support Functions
} // namespace
DXGIFormatSet::DXGIFormatSet()
ANGLEFormatSet::ANGLEFormatSet()
: texFormat(DXGI_FORMAT_UNKNOWN),
srvFormat(DXGI_FORMAT_UNKNOWN),
rtvFormat(DXGI_FORMAT_UNKNOWN),
dsvFormat(DXGI_FORMAT_UNKNOWN)
dsvFormat(DXGI_FORMAT_UNKNOWN),
swizzleFormat(ANGLE_FORMAT_NONE)
{
}
......@@ -111,59 +111,11 @@ DXGIFormatSet::DXGIFormatSet()
// This function allows querying for the DXGI texture formats to use for textures, SRVs, RTVs and
// DSVs given a GL internal format.
TextureFormat::TextureFormat(GLenum internalFormat,
const DXGIFormatSet &formatSet,
const ANGLEFormatSet &formatSet,
InitializeTextureDataFunction internalFormatInitializer)
: formatSet(formatSet), dataInitializerFunction(internalFormatInitializer)
{
// Compute the swizzle formats
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat);
if (internalFormat != GL_NONE && formatInfo.pixelBytes > 0)
{
if (formatInfo.componentCount != 4 || formatSet.texFormat == DXGI_FORMAT_UNKNOWN ||
formatSet.srvFormat == DXGI_FORMAT_UNKNOWN ||
formatSet.rtvFormat == DXGI_FORMAT_UNKNOWN)
{
// Get the maximum sized component
unsigned int maxBits = 1;
if (formatInfo.compressed)
{
unsigned int compressedBitsPerBlock = formatInfo.pixelBytes * 8;
unsigned int blockSize =
formatInfo.compressedBlockWidth * formatInfo.compressedBlockHeight;
maxBits = std::max(compressedBitsPerBlock / blockSize, maxBits);
}
else
{
maxBits = std::max(maxBits, formatInfo.alphaBits);
maxBits = std::max(maxBits, formatInfo.redBits);
maxBits = std::max(maxBits, formatInfo.greenBits);
maxBits = std::max(maxBits, formatInfo.blueBits);
maxBits = std::max(maxBits, formatInfo.luminanceBits);
maxBits = std::max(maxBits, formatInfo.depthBits);
}
maxBits = roundUp(maxBits, 8U);
const SwizzleFormatInfo &swizzleInfo =
GetSwizzleFormatInfo(maxBits, formatInfo.componentType);
swizzleFormatSet.texFormat = swizzleInfo.mTexFormat;
swizzleFormatSet.srvFormat = swizzleInfo.mSRVFormat;
swizzleFormatSet.rtvFormat = swizzleInfo.mRTVFormat;
}
else
{
// The original texture format is suitable for swizzle operations
swizzleFormatSet = formatSet;
}
}
else
{
// Not possible to swizzle with this texture format since it is either unsized or GL_NONE
ASSERT(swizzleFormatSet.texFormat == DXGI_FORMAT_UNKNOWN);
ASSERT(swizzleFormatSet.srvFormat == DXGI_FORMAT_UNKNOWN);
ASSERT(swizzleFormatSet.rtvFormat == DXGI_FORMAT_UNKNOWN);
}
swizzleFormatSet = GetANGLEFormatSet(formatSet.swizzleFormat);
// Gather all the load functions for this internal format
loadFunctions = GetLoadFunctionsMap(internalFormat, formatSet.texFormat);
......@@ -171,473 +123,544 @@ TextureFormat::TextureFormat(GLenum internalFormat,
ASSERT(loadFunctions.size() != 0 || internalFormat == GL_NONE);
}
DXGIFormatSet::DXGIFormatSet(DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat)
: texFormat(texFormat), srvFormat(srvFormat), rtvFormat(rtvFormat), dsvFormat(dsvFormat)
ANGLEFormatSet::ANGLEFormatSet(DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat,
ANGLEFormat swizzleFormat)
: texFormat(texFormat),
srvFormat(srvFormat),
rtvFormat(rtvFormat),
dsvFormat(dsvFormat),
swizzleFormat(swizzleFormat)
{
}
const DXGIFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
const ANGLEFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
{
// clang-format off
switch (angleFormat)
{
case ANGLE_FORMAT_A8_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_B4G4R4A4_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_B4G4R4A4_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_B5G5R5A1_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_B5G6R5_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_B8G8R8A8_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_B8G8R8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_BC1_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_BC2_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_BC2_UNORM,
DXGI_FORMAT_BC2_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_BC2_UNORM,
DXGI_FORMAT_BC2_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_BC3_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_D16_UNORM_FL10:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16_TYPELESS,
DXGI_FORMAT_R16_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16_TYPELESS,
DXGI_FORMAT_R16_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM,
ANGLE_FORMAT_R16G16B16A16_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_D16_UNORM_FL9_3:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_D16_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_D16_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM,
ANGLE_FORMAT_R16G16B16A16_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_D24_UNORM_S8_UINT_FL10:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R24G8_TYPELESS,
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R24G8_TYPELESS,
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_D24_UNORM_S8_UINT_FL9_3:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_D24_UNORM_S8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_D24_UNORM_S8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_D32_FLOAT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32_TYPELESS,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32_TYPELESS,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_D32_FLOAT_S8X24_UINT_FL10:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32G8X24_TYPELESS,
DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT_S8X24_UINT);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32G8X24_TYPELESS,
DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_NONE:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_NONE);
return formatInfo;
}
case ANGLE_FORMAT_R10G10B10A2_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R10G10B10A2_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R11G11B10_FLOAT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_FLOAT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R16G16B16A16_UNORM:
{
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16G16B16A16_UNORM,
DXGI_FORMAT_R16G16B16A16_UNORM,
DXGI_FORMAT_R16G16B16A16_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_FLOAT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R16G16_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R16_FLOAT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_R16_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R16_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_FLOAT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R32G32B32A32_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_FLOAT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R32G32_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R32_FLOAT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_R32_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R32_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R32G32B32A32_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_SNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB);
return formatInfo;
}
case ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_SNORM_NONRENDERABLE:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8G8_UNORM_NONRENDERABLE:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8_SINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SINT);
return formatInfo;
}
case ANGLE_FORMAT_R8_SNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8_SNORM_NONRENDERABLE:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_SNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UINT);
return formatInfo;
}
case ANGLE_FORMAT_R8_UNORM:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R8_UNORM_NONRENDERABLE:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R8G8B8A8_UNORM);
return formatInfo;
}
case ANGLE_FORMAT_R9G9B9E5_SHAREDEXP:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
ANGLE_FORMAT_R16G16B16A16_FLOAT);
return formatInfo;
}
case ANGLE_FORMAT_X24_TYPELESS_G8_UINT:
{
static const DXGIFormatSet formatInfo(DXGI_FORMAT_R24G8_TYPELESS,
DXGI_FORMAT_X24_TYPELESS_G8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
static const ANGLEFormatSet formatInfo(DXGI_FORMAT_R24G8_TYPELESS,
DXGI_FORMAT_X24_TYPELESS_G8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT,
ANGLE_FORMAT_R32G32B32A32_FLOAT);
return formatInfo;
}
......@@ -647,7 +670,7 @@ const DXGIFormatSet &GetANGLEFormatSet(ANGLEFormat angleFormat)
// clang-format on
UNREACHABLE();
static const DXGIFormatSet defaultInfo;
static const ANGLEFormatSet defaultInfo;
return defaultInfo;
}
......@@ -1531,7 +1554,7 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
}
// clang-format on
static const TextureFormat defaultInfo(GL_NONE, DXGIFormatSet(), nullptr);
static const TextureFormat defaultInfo(GL_NONE, ANGLEFormatSet(), nullptr);
return defaultInfo;
} // GetTextureFormatInfo
......
......@@ -35,6 +35,7 @@ enum ANGLEFormat
ANGLE_FORMAT_R16G16B16A16_FLOAT,
ANGLE_FORMAT_R16G16B16A16_SINT,
ANGLE_FORMAT_R16G16B16A16_UINT,
ANGLE_FORMAT_R16G16B16A16_UNORM,
ANGLE_FORMAT_R16G16_FLOAT,
ANGLE_FORMAT_R16G16_SINT,
ANGLE_FORMAT_R16G16_UINT,
......
......@@ -380,8 +380,6 @@
'libANGLE/renderer/d3d/d3d11/StateManager11.h',
'libANGLE/renderer/d3d/d3d11/SwapChain11.cpp',
'libANGLE/renderer/d3d/d3d11/SwapChain11.h',
'libANGLE/renderer/d3d/d3d11/swizzle_format_info.h',
'libANGLE/renderer/d3d/d3d11/swizzle_format_info_autogen.cpp',
'libANGLE/renderer/d3d/d3d11/TextureStorage11.cpp',
'libANGLE/renderer/d3d/d3d11/TextureStorage11.h',
'libANGLE/renderer/d3d/d3d11/Trim11.cpp',
......
......@@ -230,6 +230,13 @@ TEST_P(SwizzleTest, R8_2D)
runTest2D();
}
TEST_P(SwizzleTest, RGB10_A2_2D)
{
GLuint data[] = {20u | (40u << 10) | (60u << 20) | (2u << 30)};
init2DTexture(GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, data);
runTest2D();
}
TEST_P(SwizzleTest, RGBA32F_2D)
{
GLfloat data[] = { 0.25f, 0.5f, 0.75f, 0.8f };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment