Commit 6ee394a1 by Olli Etuaho Committed by Commit Bot

Add initializer function to more texture formats

All GL RGB formats that ANGLE stores as RGBA formats under the covers need to have their alpha channel set to 1. See GLES 3.0.4 table 3.24 for the relevant spec. In some cases, this is handled by the dataInitializerFunction associated with the format. Previously, some texture formats had the function set correctly, but not all. Associating formats with the datainitializerFormat is now a responsibility of the gen_texture_format_table.py script. The new automation there makes sure that all GL RGB formats emulated with RGBA formats get a data initializer function. Tests are added in end2end_tests for most of the RGB formats. BUG=angleproject:1318 TEST=angle_end2end_tests Change-Id: Iad860357f33d87c625445ea6c58a53af47e0b547 Reviewed-on: https://chromium-review.googlesource.com/328253Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
parent 7a533f74
......@@ -9,6 +9,7 @@
import json
import pprint
import re
template = """// GENERATED FILE - DO NOT EDIT.
// Generated by gen_texture_format_table.py using data from texture_format_data.json
......@@ -24,7 +25,6 @@ template = """// GENERATED FILE - DO NOT EDIT.
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.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"
......@@ -118,13 +118,15 @@ const TextureFormat GetD3D11FormatInfo(GLenum internalFormat,
DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat)
DXGI_FORMAT dsvFormat,
InitializeTextureDataFunction internalFormatInitializer)
{{
TextureFormat info;
info.texFormat = texFormat;
info.srvFormat = srvFormat;
info.rtvFormat = rtvFormat;
info.dsvFormat = dsvFormat;
info.dataInitializerFunction = internalFormatInitializer;
// Given a GL internal format, the renderFormat is the DSV format if it is depth- or
// stencil-renderable,
......@@ -196,8 +198,6 @@ const TextureFormat GetD3D11FormatInfo(GLenum internalFormat,
info.swizzleRTVFormat = DXGI_FORMAT_UNKNOWN;
}}
// Check if there is an initialization function for this texture format
info.dataInitializerFunction = GetInternalFormatInitializer(internalFormat, texFormat);
// Gather all the load functions for this internal format
info.loadFunctions = GetLoadFunctionsMap(internalFormat, texFormat);
......@@ -243,7 +243,78 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
}} // namespace rx
"""
def get_texture_format_item(idx, requirements_fn, angle_format):
# TODO(oetuaho): Expand this code so that it could generate the gl format info tables as well.
def gl_format_channels(internal_format):
if internal_format == 'GL_BGR5_A1_ANGLEX':
return 'bgra'
if internal_format == 'GL_R11F_G11F_B10F':
return 'rgb'
if internal_format == 'GL_RGB5_A1':
return 'rgba'
if internal_format.find('GL_RGB10_A2') == 0:
return 'rgba'
channels_pattern = re.compile('GL_(COMPRESSED_)?(SIGNED_)?(ETC\d_)?([A-Z]+)')
match = re.search(channels_pattern, internal_format)
channels_string = match.group(4)
if channels_string == 'ALPHA':
return 'a'
if channels_string == 'LUMINANCE':
if (internal_format.find('ALPHA') >= 0):
return 'la'
return 'l'
if channels_string == 'SRGB':
if (internal_format.find('ALPHA') >= 0):
return 'rgba'
return 'rgb'
if channels_string == 'DEPTH':
if (internal_format.find('STENCIL') >= 0):
return 'ds'
return 'd'
if channels_string == 'STENCIL':
return 's'
return channels_string.lower()
def get_internal_format_initializer(internal_format, angle_format):
internal_format_initializer = 'nullptr'
gl_channels = gl_format_channels(internal_format)
gl_format_no_alpha = gl_channels == 'rgb' or gl_channels == 'l'
if gl_format_no_alpha and angle_format['channels'] == 'rgba':
if angle_format['texFormat'] == 'DXGI_FORMAT_BC1_UNORM':
# BC1 is a special case since the texture data determines whether each block has an alpha channel or not.
# This if statement is hit by COMPRESSED_RGB_S3TC_DXT1, which is a bit of a mess.
# TODO(oetuaho): Look into whether COMPRESSED_RGB_S3TC_DXT1 works right in general.
# Reference: https://www.opengl.org/registry/specs/EXT/texture_compression_s3tc.txt
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':
internal_format_initializer = 'Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>'
elif angle_format['componentType'] == 'byte_unorm':
internal_format_initializer = 'Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>'
elif angle_format['componentType'] == 'byte_int':
internal_format_initializer = 'Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>'
elif angle_format['componentType'] == 'byte_snorm':
internal_format_initializer = 'Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x7F>'
elif angle_format['componentType'] == 'half':
internal_format_initializer = 'Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>'
elif angle_format['componentType'] == 'short_uint':
internal_format_initializer = 'Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>'
elif angle_format['componentType'] == 'short_int':
internal_format_initializer = 'Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>'
elif angle_format['componentType'] == 'float':
internal_format_initializer = 'Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>'
elif angle_format['componentType'] == 'int':
internal_format_initializer = 'Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>'
elif angle_format['componentType'] == 'uint':
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_texture_format_item(idx, internal_format, requirements_fn, angle_format):
table_data = '';
tex_format = angle_format["texFormat"] if "texFormat" in angle_format else "DXGI_FORMAT_UNKNOWN"
......@@ -251,6 +322,8 @@ def get_texture_format_item(idx, requirements_fn, angle_format):
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"
internal_format_initializer = get_internal_format_initializer(internal_format, angle_format)
indent = ' '
if requirements_fn != None:
if idx == 0:
......@@ -264,7 +337,8 @@ def get_texture_format_item(idx, requirements_fn, angle_format):
table_data += indent + ' ' + tex_format + ',\n'
table_data += indent + ' ' + srv_format + ',\n'
table_data += indent + ' ' + rtv_format + ',\n'
table_data += indent + ' ' + dsv_format + ');\n'
table_data += indent + ' ' + dsv_format + ',\n'
table_data += indent + ' ' + internal_format_initializer + ');\n'
table_data += indent + 'return textureFormat;\n'
if requirements_fn != None:
......@@ -282,10 +356,10 @@ def parse_json_into_switch_string(json_map, json_data):
table_data += ' {\n'
if isinstance(json_map[internal_format], basestring):
table_data += get_texture_format_item(0, None, json_data[json_map[internal_format]])
table_data += get_texture_format_item(0, internal_format, None, json_data[json_map[internal_format]])
else:
for idx, requirements_map in enumerate(sorted(json_map[internal_format].iteritems())):
table_data += get_texture_format_item(idx, requirements_map[0], json_data[requirements_map[1]])
table_data += get_texture_format_item(idx, internal_format, requirements_map[0], json_data[requirements_map[1]])
table_data += ' else\n'
table_data += ' {\n'
table_data += ' break;\n'
......
//
// 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.
//
// internal_format_initializer_table:
// Contains table to go from internal format and dxgi format to initializer function
// for TextureFormat
//
#include "libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.h"
#include "libANGLE/renderer/d3d/loadimage.h"
namespace rx
{
namespace d3d11
{
// TODO: This should be generated by a JSON file
InitializeTextureDataFunction GetInternalFormatInitializer(GLenum internalFormat,
DXGI_FORMAT dxgiFormat)
{
switch (internalFormat)
{
case GL_RGB8:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R8G8B8A8_UNORM:
{
return Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>;
}
default:
break;
}
}
case GL_RGB565:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R8G8B8A8_UNORM:
{
return Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>;
}
default:
break;
}
}
case GL_SRGB8:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:
{
return Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>;
}
default:
break;
}
}
case GL_RGB16F:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R16G16B16A16_FLOAT:
{
return Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>;
}
default:
break;
}
}
case GL_RGB32F:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R32G32B32A32_FLOAT:
{
return Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000,
gl::Float32One>;
}
default:
break;
}
}
case GL_RGB8UI:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R8G8B8A8_UINT:
{
return Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>;
}
default:
break;
}
}
case GL_RGB8I:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R8G8B8A8_SINT:
{
return Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>;
}
default:
break;
}
}
case GL_RGB16UI:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R16G16B16A16_UINT:
{
return Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>;
}
default:
break;
}
}
case GL_RGB16I:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R16G16B16A16_SINT:
{
return Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>;
}
default:
break;
}
}
case GL_RGB32UI:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R32G32B32A32_UINT:
{
return Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000,
0x00000001>;
}
default:
break;
}
}
case GL_RGB32I:
{
switch (dxgiFormat)
{
case DXGI_FORMAT_R32G32B32A32_SINT:
{
return Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000,
0x00000001>;
}
default:
break;
}
}
default:
{
return nullptr;
}
}
}
} // namespace d3d11
} // namespace rx
//
// 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.
//
// internal_format_initializer_table:
// Contains table to go from internal format and dxgi format to initializer function
// for TextureFormat
//
#ifndef LIBANGLE_RENDERER_D3D_D3D11_INTERNALFORMATINITIALIZERTABLE_H_
#define LIBANGLE_RENDERER_D3D_D3D11_INTERNALFORMATINITIALIZERTABLE_H_
#include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#include <map>
namespace rx
{
namespace d3d11
{
InitializeTextureDataFunction GetInternalFormatInitializer(GLenum internalFormat,
DXGI_FORMAT dxgiFormat);
} // namespace d3d11
} // namespace rx
#endif // LIBANGLE_RENDERER_D3D_D3D11_INTERNALFORMATINITIALIZERTABLE_H_
......@@ -5,266 +5,364 @@
"ANGLE_FORMAT_A8_UNORM": {
"texFormat": "DXGI_FORMAT_A8_UNORM",
"srvFormat": "DXGI_FORMAT_A8_UNORM",
"rtvFormat": "DXGI_FORMAT_A8_UNORM"
"rtvFormat": "DXGI_FORMAT_A8_UNORM",
"channels": "a",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_R8G8B8A8_UNORM": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM"
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"channels": "rgba",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_R16G16B16A16_FLOAT": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT"
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_FLOAT",
"channels": "rgba",
"componentType": "half"
},
"ANGLE_FORMAT_R32G32B32A32_FLOAT": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT"
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_FLOAT",
"channels": "rgba",
"componentType": "float"
},
"ANGLE_FORMAT_B8G8R8A8_UNORM": {
"texFormat": "DXGI_FORMAT_B8G8R8A8_UNORM",
"srvFormat": "DXGI_FORMAT_B8G8R8A8_UNORM",
"rtvFormat": "DXGI_FORMAT_B8G8R8A8_UNORM"
"rtvFormat": "DXGI_FORMAT_B8G8R8A8_UNORM",
"channels": "bgra",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_R8G8B8A8_UNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM"
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM",
"channels": "rgba",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_BC1_UNORM": {
"texFormat": "DXGI_FORMAT_BC1_UNORM",
"srvFormat": "DXGI_FORMAT_BC1_UNORM"
"srvFormat": "DXGI_FORMAT_BC1_UNORM",
"channels": "rgba"
},
"ANGLE_FORMAT_BC2_UNORM": {
"texFormat": "DXGI_FORMAT_BC2_UNORM",
"srvFormat": "DXGI_FORMAT_BC2_UNORM"
"srvFormat": "DXGI_FORMAT_BC2_UNORM",
"channels": "rgba"
},
"ANGLE_FORMAT_BC3_UNORM": {
"texFormat": "DXGI_FORMAT_BC3_UNORM",
"srvFormat": "DXGI_FORMAT_BC3_UNORM"
"srvFormat": "DXGI_FORMAT_BC3_UNORM",
"channels": "rgba"
},
"ANGLE_FORMAT_R8_SNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8_SNORM",
"srvFormat": "DXGI_FORMAT_R8_SNORM"
"srvFormat": "DXGI_FORMAT_R8_SNORM",
"channels": "r",
"componentType": "byte_snorm"
},
"ANGLE_FORMAT_R8G8_SNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8G8_SNORM",
"srvFormat": "DXGI_FORMAT_R8G8_SNORM"
"srvFormat": "DXGI_FORMAT_R8G8_SNORM",
"channels": "rg",
"componentType": "byte_snorm"
},
"ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB"
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"channels": "rgba",
"componentType": "byte_unorm"
},
"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"
"dsvFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT",
"channels": "ds"
},
"ANGLE_FORMAT_D24_UNORM_S8_UINT_FL9_3": {
"texFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT",
"dsvFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT"
"dsvFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT",
"channels": "ds"
},
"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"
"dsvFormat": "DXGI_FORMAT_D32_FLOAT_S8X24_UINT",
"channels": "ds"
},
"ANGLE_FORMAT_D16_UNORM_FL10": {
"texFormat": "DXGI_FORMAT_R16_TYPELESS",
"srvFormat": "DXGI_FORMAT_R16_UNORM",
"dsvFormat": "DXGI_FORMAT_D16_UNORM"
"dsvFormat": "DXGI_FORMAT_D16_UNORM",
"channels": "d",
"componentType": "short_unorm"
},
"ANGLE_FORMAT_D16_UNORM_FL9_3": {
"texFormat": "DXGI_FORMAT_D16_UNORM",
"dsvFormat": "DXGI_FORMAT_D16_UNORM"
"dsvFormat": "DXGI_FORMAT_D16_UNORM",
"channels": "d",
"componentType": "short_unorm"
},
"ANGLE_FORMAT_D32_FLOAT": {
"texFormat": "DXGI_FORMAT_R32_TYPELESS",
"srvFormat": "DXGI_FORMAT_R32_FLOAT",
"dsvFormat": "DXGI_FORMAT_D32_FLOAT"
"dsvFormat": "DXGI_FORMAT_D32_FLOAT",
"channels": "d",
"componentType": "float"
},
"ANGLE_FORMAT_R11G11B10_FLOAT": {
"texFormat": "DXGI_FORMAT_R11G11B10_FLOAT",
"srvFormat": "DXGI_FORMAT_R11G11B10_FLOAT",
"rtvFormat": "DXGI_FORMAT_R11G11B10_FLOAT"
"rtvFormat": "DXGI_FORMAT_R11G11B10_FLOAT",
"channels": "rgb"
},
"ANGLE_FORMAT_R16_FLOAT": {
"texFormat": "DXGI_FORMAT_R16_FLOAT",
"srvFormat": "DXGI_FORMAT_R16_FLOAT",
"rtvFormat": "DXGI_FORMAT_R16_FLOAT"
"rtvFormat": "DXGI_FORMAT_R16_FLOAT",
"channels": "r",
"componentType": "half"
},
"ANGLE_FORMAT_R16_SINT": {
"texFormat": "DXGI_FORMAT_R16_SINT",
"srvFormat": "DXGI_FORMAT_R16_SINT",
"rtvFormat": "DXGI_FORMAT_R16_SINT"
"rtvFormat": "DXGI_FORMAT_R16_SINT",
"channels": "r",
"componentType": "short_int"
},
"ANGLE_FORMAT_R16_UINT": {
"texFormat": "DXGI_FORMAT_R16_UINT",
"srvFormat": "DXGI_FORMAT_R16_UINT",
"rtvFormat": "DXGI_FORMAT_R16_UINT"
"rtvFormat": "DXGI_FORMAT_R16_UINT",
"channels": "r",
"componentType": "short_uint"
},
"ANGLE_FORMAT_R32_FLOAT": {
"texFormat": "DXGI_FORMAT_R32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32_FLOAT"
"rtvFormat": "DXGI_FORMAT_R32_FLOAT",
"channels": "r",
"componentType": "float"
},
"ANGLE_FORMAT_R32_SINT": {
"texFormat": "DXGI_FORMAT_R32_SINT",
"srvFormat": "DXGI_FORMAT_R32_SINT",
"rtvFormat": "DXGI_FORMAT_R32_SINT"
"rtvFormat": "DXGI_FORMAT_R32_SINT",
"channels": "r",
"componentType": "int"
},
"ANGLE_FORMAT_R32_UINT": {
"texFormat": "DXGI_FORMAT_R32_UINT",
"srvFormat": "DXGI_FORMAT_R32_UINT",
"rtvFormat": "DXGI_FORMAT_R32_UINT"
"rtvFormat": "DXGI_FORMAT_R32_UINT",
"channels": "r",
"componentType": "uint"
},
"ANGLE_FORMAT_R8_UNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8_UNORM",
"srvFormat": "DXGI_FORMAT_R8_UNORM"
"srvFormat": "DXGI_FORMAT_R8_UNORM",
"channels": "r",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_R8_UNORM": {
"texFormat": "DXGI_FORMAT_R8_UNORM",
"srvFormat": "DXGI_FORMAT_R8_UNORM",
"rtvFormat": "DXGI_FORMAT_R8_UNORM"
"rtvFormat": "DXGI_FORMAT_R8_UNORM",
"channels": "r",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_R8_SINT": {
"texFormat": "DXGI_FORMAT_R8_SINT",
"srvFormat": "DXGI_FORMAT_R8_SINT",
"rtvFormat": "DXGI_FORMAT_R8_SINT"
"rtvFormat": "DXGI_FORMAT_R8_SINT",
"channels": "r",
"componentType": "byte_int"
},
"ANGLE_FORMAT_R8_UINT": {
"texFormat": "DXGI_FORMAT_R8_UINT",
"srvFormat": "DXGI_FORMAT_R8_UINT",
"rtvFormat": "DXGI_FORMAT_R8_UINT"
"rtvFormat": "DXGI_FORMAT_R8_UINT",
"channels": "r",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_R8_SNORM": {
"texFormat": "DXGI_FORMAT_R8_SNORM",
"srvFormat": "DXGI_FORMAT_R8_SNORM"
"srvFormat": "DXGI_FORMAT_R8_SNORM",
"channels": "r",
"componentType": "byte_snorm"
},
"ANGLE_FORMAT_R16G16_FLOAT": {
"texFormat": "DXGI_FORMAT_R16G16_FLOAT",
"srvFormat": "DXGI_FORMAT_R16G16_FLOAT",
"rtvFormat": "DXGI_FORMAT_R16G16_FLOAT"
"rtvFormat": "DXGI_FORMAT_R16G16_FLOAT",
"channels": "rg",
"componentType": "half"
},
"ANGLE_FORMAT_R16G16_SINT": {
"texFormat": "DXGI_FORMAT_R16G16_SINT",
"srvFormat": "DXGI_FORMAT_R16G16_SINT",
"rtvFormat": "DXGI_FORMAT_R16G16_SINT"
"rtvFormat": "DXGI_FORMAT_R16G16_SINT",
"channels": "rg",
"componentType": "short_int"
},
"ANGLE_FORMAT_R16G16_UINT": {
"texFormat": "DXGI_FORMAT_R16G16_UINT",
"srvFormat": "DXGI_FORMAT_R16G16_UINT",
"rtvFormat": "DXGI_FORMAT_R16G16_UINT"
"rtvFormat": "DXGI_FORMAT_R16G16_UINT",
"channels": "rg",
"componentType": "short_uint"
},
"ANGLE_FORMAT_R32G32_FLOAT": {
"texFormat": "DXGI_FORMAT_R32G32_FLOAT",
"srvFormat": "DXGI_FORMAT_R32G32_FLOAT",
"rtvFormat": "DXGI_FORMAT_R32G32_FLOAT"
"rtvFormat": "DXGI_FORMAT_R32G32_FLOAT",
"channels": "rg",
"componentType": "float"
},
"ANGLE_FORMAT_R32G32_SINT": {
"texFormat": "DXGI_FORMAT_R32G32_SINT",
"srvFormat": "DXGI_FORMAT_R32G32_SINT",
"rtvFormat": "DXGI_FORMAT_R32G32_SINT"
"rtvFormat": "DXGI_FORMAT_R32G32_SINT",
"channels": "rg",
"componentType": "int"
},
"ANGLE_FORMAT_R32G32_UINT": {
"texFormat": "DXGI_FORMAT_R32G32_UINT",
"srvFormat": "DXGI_FORMAT_R32G32_UINT",
"rtvFormat": "DXGI_FORMAT_R32G32_UINT"
"rtvFormat": "DXGI_FORMAT_R32G32_UINT",
"channels": "rg",
"componentType": "uint"
},
"ANGLE_FORMAT_R8G8_UNORM": {
"texFormat": "DXGI_FORMAT_R8G8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8_UNORM",
"rtvFormat": "DXGI_FORMAT_R8G8_UNORM"
"rtvFormat": "DXGI_FORMAT_R8G8_UNORM",
"channels": "rg",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_R8G8_UNORM_NONRENDERABLE": {
"texFormat": "DXGI_FORMAT_R8G8_UNORM",
"srvFormat": "DXGI_FORMAT_R8G8_UNORM"
"srvFormat": "DXGI_FORMAT_R8G8_UNORM",
"channels": "rg",
"componentType": "byte_unorm"
},
"ANGLE_FORMAT_R8G8_SINT": {
"texFormat": "DXGI_FORMAT_R8G8_SINT",
"srvFormat": "DXGI_FORMAT_R8G8_SINT",
"rtvFormat": "DXGI_FORMAT_R8G8_SINT"
"rtvFormat": "DXGI_FORMAT_R8G8_SINT",
"channels": "rg",
"componentType": "byte_int"
},
"ANGLE_FORMAT_R8G8_UINT": {
"texFormat": "DXGI_FORMAT_R8G8_UINT",
"srvFormat": "DXGI_FORMAT_R8G8_UINT",
"rtvFormat": "DXGI_FORMAT_R8G8_UINT"
"rtvFormat": "DXGI_FORMAT_R8G8_UINT",
"channels": "rg",
"componentType": "byte_uint"
},
"ANGLE_FORMAT_R8G8_SNORM": {
"texFormat": "DXGI_FORMAT_R8G8_SNORM",
"srvFormat": "DXGI_FORMAT_R8G8_SNORM"
"srvFormat": "DXGI_FORMAT_R8G8_SNORM",
"channels": "rg",
"componentType": "byte_snorm"
},
"ANGLE_FORMAT_R10G10B10A2_UNORM": {
"texFormat": "DXGI_FORMAT_R10G10B10A2_UNORM",
"srvFormat": "DXGI_FORMAT_R10G10B10A2_UNORM",
"rtvFormat": "DXGI_FORMAT_R10G10B10A2_UNORM"
"rtvFormat": "DXGI_FORMAT_R10G10B10A2_UNORM",
"channels": "rgba"
},
"ANGLE_FORMAT_R10G10B10A2_UINT": {
"texFormat": "DXGI_FORMAT_R10G10B10A2_UINT",
"srvFormat": "DXGI_FORMAT_R10G10B10A2_UINT",
"rtvFormat": "DXGI_FORMAT_R10G10B10A2_UINT"
"rtvFormat": "DXGI_FORMAT_R10G10B10A2_UINT",
"channels": "rgba"
},
"ANGLE_FORMAT_R16G16B16A16_SINT": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_SINT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_SINT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_SINT"
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_SINT",
"channels": "rgba",
"componentType": "short_int"
},
"ANGLE_FORMAT_R16G16B16A16_UINT": {
"texFormat": "DXGI_FORMAT_R16G16B16A16_UINT",
"srvFormat": "DXGI_FORMAT_R16G16B16A16_UINT",
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_UINT"
"rtvFormat": "DXGI_FORMAT_R16G16B16A16_UINT",
"channels": "rgba",
"componentType": "short_uint"
},
"ANGLE_FORMAT_R32G32B32A32_SINT": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_SINT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_SINT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_SINT"
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_SINT",
"channels": "rgba",
"componentType": "int"
},
"ANGLE_FORMAT_R32G32B32A32_UINT": {
"texFormat": "DXGI_FORMAT_R32G32B32A32_UINT",
"srvFormat": "DXGI_FORMAT_R32G32B32A32_UINT",
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_UINT"
"rtvFormat": "DXGI_FORMAT_R32G32B32A32_UINT",
"channels": "rgba",
"componentType": "uint"
},
"ANGLE_FORMAT_B5G6R5_UNORM": {
"texFormat": "DXGI_FORMAT_B5G6R5_UNORM",
"srvFormat": "DXGI_FORMAT_B5G6R5_UNORM",
"rtvFormat": "DXGI_FORMAT_B5G6R5_UNORM"
"rtvFormat": "DXGI_FORMAT_B5G6R5_UNORM",
"channels": "bgr"
},
"ANGLE_FORMAT_B5G5R5A1_UNORM": {
"texFormat": "DXGI_FORMAT_B5G5R5A1_UNORM",
"srvFormat": "DXGI_FORMAT_B5G5R5A1_UNORM",
"rtvFormat": "DXGI_FORMAT_B5G5R5A1_UNORM"
"rtvFormat": "DXGI_FORMAT_B5G5R5A1_UNORM",
"channels": "bgra"
},
"ANGLE_FORMAT_R8G8B8A8_SINT": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_SINT"
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_SINT",
"channels": "rgba",
"componentType": "byte_int"
},
"ANGLE_FORMAT_R8G8B8A8_UINT": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UINT",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UINT",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UINT"
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UINT",
"channels": "rgba",
"componentType": "byte_uint"
},
"ANGLE_FORMAT_R8G8B8A8_SNORM": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_SNORM",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_SNORM"
"srvFormat": "DXGI_FORMAT_R8G8B8A8_SNORM",
"channels": "rgba",
"componentType": "byte_snorm"
},
"ANGLE_FORMAT_R9G9B9E5_SHAREDEXP": {
"texFormat": "DXGI_FORMAT_R9G9B9E5_SHAREDEXP",
"srvFormat": "DXGI_FORMAT_R9G9B9E5_SHAREDEXP"
"srvFormat": "DXGI_FORMAT_R9G9B9E5_SHAREDEXP",
"channels": "rgb"
},
"ANGLE_FORMAT_B4G4R4A4_UNORM": {
"texFormat": "DXGI_FORMAT_B4G4R4A4_UNORM",
"srvFormat": "DXGI_FORMAT_B4G4R4A4_UNORM",
"rtvFormat": "DXGI_FORMAT_B4G4R4A4_UNORM"
"rtvFormat": "DXGI_FORMAT_B4G4R4A4_UNORM",
"channels": "bgra"
},
"ANGLE_FORMAT_R8G8B8A8_UNORM_SRGB": {
"texFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"srvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB"
"rtvFormat": "DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",
"channels": "rgba",
"componentType": "byte_unorm"
},
"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"
"dsvFormat": "DXGI_FORMAT_D24_UNORM_S8_UINT",
"channels": "ds"
}
}
......@@ -12,7 +12,6 @@
#include "libANGLE/renderer/d3d/d3d11/texture_format_table.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include "libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.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"
......@@ -106,13 +105,15 @@ const TextureFormat GetD3D11FormatInfo(GLenum internalFormat,
DXGI_FORMAT texFormat,
DXGI_FORMAT srvFormat,
DXGI_FORMAT rtvFormat,
DXGI_FORMAT dsvFormat)
DXGI_FORMAT dsvFormat,
InitializeTextureDataFunction internalFormatInitializer)
{
TextureFormat info;
info.texFormat = texFormat;
info.srvFormat = srvFormat;
info.rtvFormat = rtvFormat;
info.dsvFormat = dsvFormat;
info.dataInitializerFunction = internalFormatInitializer;
// Given a GL internal format, the renderFormat is the DSV format if it is depth- or
// stencil-renderable,
......@@ -184,8 +185,6 @@ const TextureFormat GetD3D11FormatInfo(GLenum internalFormat,
info.swizzleRTVFormat = DXGI_FORMAT_UNKNOWN;
}
// Check if there is an initialization function for this texture format
info.dataInitializerFunction = GetInternalFormatInitializer(internalFormat, texFormat);
// Gather all the load functions for this internal format
info.loadFunctions = GetLoadFunctionsMap(internalFormat, texFormat);
......@@ -224,7 +223,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else if (OnlyFL9_3(renderer11DeviceCaps))
......@@ -233,7 +233,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -247,7 +248,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_ALPHA32F_EXT:
......@@ -256,7 +258,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_ALPHA8_EXT:
......@@ -267,7 +270,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else if (OnlyFL9_3(renderer11DeviceCaps))
......@@ -276,7 +280,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -290,7 +295,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_BGRA4_ANGLEX:
......@@ -299,7 +305,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_BGRA8_EXT:
......@@ -308,7 +315,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_BGRA_EXT:
......@@ -317,7 +325,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_B8G8R8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_COMPRESSED_R11_EAC:
......@@ -328,7 +337,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -344,7 +354,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -360,7 +371,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
else
......@@ -376,7 +388,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
else
......@@ -392,7 +405,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -406,7 +420,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE:
......@@ -415,7 +430,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_BC2_UNORM,
DXGI_FORMAT_BC2_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE:
......@@ -424,7 +440,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
......@@ -433,7 +450,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_COMPRESSED_SIGNED_R11_EAC:
......@@ -444,7 +462,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -460,7 +479,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -476,7 +496,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -492,7 +513,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
else
......@@ -508,7 +530,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -524,7 +547,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R24G8_TYPELESS,
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
DXGI_FORMAT_D24_UNORM_S8_UINT,
nullptr);
return textureFormat;
}
else if (OnlyFL9_3(renderer11DeviceCaps))
......@@ -533,7 +557,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_D24_UNORM_S8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
DXGI_FORMAT_D24_UNORM_S8_UINT,
nullptr);
return textureFormat;
}
else
......@@ -549,7 +574,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G8X24_TYPELESS,
DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT_S8X24_UINT);
DXGI_FORMAT_D32_FLOAT_S8X24_UINT,
nullptr);
return textureFormat;
}
else if (OnlyFL9_3(renderer11DeviceCaps))
......@@ -558,7 +584,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -574,7 +601,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16_TYPELESS,
DXGI_FORMAT_R16_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM);
DXGI_FORMAT_D16_UNORM,
nullptr);
return textureFormat;
}
else if (OnlyFL9_3(renderer11DeviceCaps))
......@@ -583,7 +611,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_D16_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D16_UNORM);
DXGI_FORMAT_D16_UNORM,
nullptr);
return textureFormat;
}
else
......@@ -599,7 +628,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R24G8_TYPELESS,
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
DXGI_FORMAT_D24_UNORM_S8_UINT,
nullptr);
return textureFormat;
}
else if (OnlyFL9_3(renderer11DeviceCaps))
......@@ -608,7 +638,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_D24_UNORM_S8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
DXGI_FORMAT_D24_UNORM_S8_UINT,
nullptr);
return textureFormat;
}
else
......@@ -624,7 +655,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32_TYPELESS,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D32_FLOAT);
DXGI_FORMAT_D32_FLOAT,
nullptr);
return textureFormat;
}
else if (OnlyFL9_3(renderer11DeviceCaps))
......@@ -633,7 +665,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -649,7 +682,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R24G8_TYPELESS,
DXGI_FORMAT_R24_UNORM_X8_TYPELESS,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
DXGI_FORMAT_D24_UNORM_S8_UINT,
nullptr);
return textureFormat;
}
else
......@@ -663,7 +697,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_ETC1_RGB8_OES:
......@@ -672,7 +707,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
case GL_LUMINANCE:
......@@ -681,7 +717,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
case GL_LUMINANCE16F_EXT:
......@@ -690,7 +727,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>);
return textureFormat;
}
case GL_LUMINANCE32F_EXT:
......@@ -699,7 +737,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>);
return textureFormat;
}
case GL_LUMINANCE8_ALPHA8_EXT:
......@@ -708,7 +747,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_LUMINANCE8_EXT:
......@@ -717,7 +757,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
case GL_LUMINANCE_ALPHA:
......@@ -726,7 +767,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_LUMINANCE_ALPHA16F_EXT:
......@@ -735,7 +777,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_LUMINANCE_ALPHA32F_EXT:
......@@ -744,7 +787,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_NONE:
......@@ -753,7 +797,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R11F_G11F_B10F:
......@@ -762,7 +807,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_R11G11B10_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R16F:
......@@ -771,7 +817,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_R16_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R16I:
......@@ -780,7 +827,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_R16_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R16UI:
......@@ -789,7 +837,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_R16_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R32F:
......@@ -798,7 +847,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_R32_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R32I:
......@@ -807,7 +857,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_R32_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R32UI:
......@@ -816,7 +867,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_R32_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R8:
......@@ -825,7 +877,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_R8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R8I:
......@@ -834,7 +887,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_R8_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R8UI:
......@@ -843,7 +897,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_R8_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_R8_SNORM:
......@@ -852,7 +907,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_R8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG16F:
......@@ -861,7 +917,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_R16G16_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG16I:
......@@ -870,7 +927,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_R16G16_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG16UI:
......@@ -879,7 +937,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_R16G16_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG32F:
......@@ -888,7 +947,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_R32G32_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG32I:
......@@ -897,7 +957,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_R32G32_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG32UI:
......@@ -906,7 +967,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_R32G32_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG8:
......@@ -915,7 +977,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_R8G8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG8I:
......@@ -924,7 +987,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_R8G8_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG8UI:
......@@ -933,7 +997,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_R8G8_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RG8_SNORM:
......@@ -942,7 +1007,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_R8G8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGB:
......@@ -951,7 +1017,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
case GL_RGB10_A2:
......@@ -960,7 +1027,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_R10G10B10A2_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGB10_A2UI:
......@@ -969,7 +1037,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_R10G10B10A2_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGB16F:
......@@ -978,7 +1047,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLhalf, 0x0000, 0x0000, 0x0000, gl::Float16One>);
return textureFormat;
}
case GL_RGB16I:
......@@ -987,7 +1057,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLshort, 0x0000, 0x0000, 0x0000, 0x0001>);
return textureFormat;
}
case GL_RGB16UI:
......@@ -996,7 +1067,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLushort, 0x0000, 0x0000, 0x0000, 0x0001>);
return textureFormat;
}
case GL_RGB32F:
......@@ -1005,7 +1077,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLfloat, 0x00000000, 0x00000000, 0x00000000, gl::Float32One>);
return textureFormat;
}
case GL_RGB32I:
......@@ -1014,7 +1087,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>);
return textureFormat;
}
case GL_RGB32UI:
......@@ -1023,7 +1097,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLuint, 0x00000000, 0x00000000, 0x00000000, 0x00000001>);
return textureFormat;
}
case GL_RGB565:
......@@ -1034,7 +1109,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
else if (SupportsFormat<DXGI_FORMAT_B5G6R5_UNORM,true>(renderer11DeviceCaps))
......@@ -1043,7 +1119,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_B5G6R5_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -1059,7 +1136,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else if (SupportsFormat<DXGI_FORMAT_B5G5R5A1_UNORM,true>(renderer11DeviceCaps))
......@@ -1068,7 +1146,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_B5G5R5A1_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -1082,7 +1161,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
case GL_RGB8I:
......@@ -1091,7 +1171,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x01>);
return textureFormat;
}
case GL_RGB8UI:
......@@ -1100,7 +1181,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0x01>);
return textureFormat;
}
case GL_RGB8_SNORM:
......@@ -1109,7 +1191,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLbyte, 0x00, 0x00, 0x00, 0x7F>);
return textureFormat;
}
case GL_RGB9_E5:
......@@ -1118,7 +1201,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
DXGI_FORMAT_R9G9B9E5_SHAREDEXP,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA:
......@@ -1127,7 +1211,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA16F:
......@@ -1136,7 +1221,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_R16G16B16A16_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA16I:
......@@ -1145,7 +1231,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_R16G16B16A16_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA16UI:
......@@ -1154,7 +1241,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_R16G16B16A16_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA32F:
......@@ -1163,7 +1251,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_R32G32B32A32_FLOAT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA32I:
......@@ -1172,7 +1261,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_R32G32B32A32_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA32UI:
......@@ -1181,7 +1271,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_R32G32B32A32_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA4:
......@@ -1192,7 +1283,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else if (SupportsFormat<DXGI_FORMAT_B4G4R4A4_UNORM,true>(renderer11DeviceCaps))
......@@ -1201,7 +1293,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_B4G4R4A4_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
else
......@@ -1215,7 +1308,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_R8G8B8A8_UNORM,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA8I:
......@@ -1224,7 +1318,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_R8G8B8A8_SINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA8UI:
......@@ -1233,7 +1328,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_R8G8B8A8_UINT,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_RGBA8_SNORM:
......@@ -1242,7 +1338,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_R8G8B8A8_SNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_SRGB8:
......@@ -1251,7 +1348,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
Initialize4ComponentData<GLubyte, 0x00, 0x00, 0x00, 0xFF>);
return textureFormat;
}
case GL_SRGB8_ALPHA8:
......@@ -1260,7 +1358,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_R8G8B8A8_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN);
DXGI_FORMAT_UNKNOWN,
nullptr);
return textureFormat;
}
case GL_STENCIL_INDEX8:
......@@ -1271,7 +1370,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_R24G8_TYPELESS,
DXGI_FORMAT_X24_TYPELESS_G8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
DXGI_FORMAT_D24_UNORM_S8_UINT,
nullptr);
return textureFormat;
}
else if (OnlyFL9_3(renderer11DeviceCaps))
......@@ -1280,7 +1380,8 @@ const TextureFormat &GetTextureFormatInfo(GLenum internalFormat,
DXGI_FORMAT_D24_UNORM_S8_UINT,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_D24_UNORM_S8_UINT);
DXGI_FORMAT_D24_UNORM_S8_UINT,
nullptr);
return textureFormat;
}
else
......
......@@ -307,8 +307,6 @@
'libANGLE/renderer/d3d/d3d11/IndexBuffer11.h',
'libANGLE/renderer/d3d/d3d11/InputLayoutCache.cpp',
'libANGLE/renderer/d3d/d3d11/InputLayoutCache.h',
'libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.h',
'libANGLE/renderer/d3d/d3d11/internal_format_initializer_table.cpp',
'libANGLE/renderer/d3d/d3d11/load_functions_table.h',
'libANGLE/renderer/d3d/d3d11/load_functions_table_autogen.cpp',
'libANGLE/renderer/d3d/d3d11/NativeWindow.h',
......
......@@ -310,6 +310,76 @@ class Texture2DTestES3 : public Texture2DTest
}
};
class Texture2DIntegerAlpha1TestES3 : public Texture2DTest
{
protected:
Texture2DIntegerAlpha1TestES3() : Texture2DTest() {}
std::string getVertexShaderSource() override
{
return std::string(
"#version 300 es\n"
"out vec2 texcoord;\n"
"in vec4 position;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(position.xy, 0.0, 1.0);\n"
" texcoord = (position.xy * 0.5) + 0.5;\n"
"}\n");
}
std::string getFragmentShaderSource() override
{
return std::string(
"#version 300 es\n"
"precision highp float;\n"
"uniform highp isampler2D tex;\n"
"in vec2 texcoord;\n"
"out vec4 fragColor;\n"
"void main()\n"
"{\n"
" vec4 green = vec4(0, 1, 0, 1);\n"
" vec4 black = vec4(0, 0, 0, 0);\n"
" fragColor = (texture(tex, texcoord).a == 1) ? green : black;\n"
"}\n");
}
};
class Texture2DUnsignedIntegerAlpha1TestES3 : public Texture2DTest
{
protected:
Texture2DUnsignedIntegerAlpha1TestES3() : Texture2DTest() {}
std::string getVertexShaderSource() override
{
return std::string(
"#version 300 es\n"
"out vec2 texcoord;\n"
"in vec4 position;\n"
"void main()\n"
"{\n"
" gl_Position = vec4(position.xy, 0.0, 1.0);\n"
" texcoord = (position.xy * 0.5) + 0.5;\n"
"}\n");
}
std::string getFragmentShaderSource() override
{
return std::string(
"#version 300 es\n"
"precision highp float;\n"
"uniform highp usampler2D tex;\n"
"in vec2 texcoord;\n"
"out vec4 fragColor;\n"
"void main()\n"
"{\n"
" vec4 green = vec4(0, 1, 0, 1);\n"
" vec4 black = vec4(0, 0, 0, 0);\n"
" fragColor = (texture(tex, texcoord).a == 1u) ? green : black;\n"
"}\n");
}
};
class Texture2DTestWithDrawScale : public Texture2DTest
{
protected:
......@@ -1532,6 +1602,258 @@ TEST_P(TextureSizeTextureArrayTest, BaseLevelVariesInTextureArray)
EXPECT_PIXEL_NEAR(0, 0, 32, 16, 0, 255, 2);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DTestES3, TextureRGBImplicitAlpha1)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DTestES3, TextureLuminanceImplicitAlpha1)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 1, 1, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, nullptr);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DTestES3, TextureLuminance32ImplicitAlpha1)
{
if (extensionEnabled("GL_OES_texture_float"))
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 1, 1, 0, GL_LUMINANCE, GL_FLOAT, nullptr);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DTestES3, TextureLuminance16ImplicitAlpha1)
{
if (extensionEnabled("GL_OES_texture_half_float"))
{
if (isNVidia() && getPlatformRenderer() == EGL_PLATFORM_ANGLE_TYPE_OPENGLES_ANGLE)
{
std::cout << "Test skipped on NVIDIA" << std::endl;
return;
}
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 1, 1, 0, GL_LUMINANCE, GL_HALF_FLOAT_OES,
nullptr);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DUnsignedIntegerAlpha1TestES3, TextureRGB8UIImplicitAlpha1)
{
if (isOSX() && isIntel())
{
std::cout << "Test disabled on OSX Intel." << std::endl;
return;
}
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8UI, 1, 1, 0, GL_RGB_INTEGER, GL_UNSIGNED_BYTE, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DIntegerAlpha1TestES3, TextureRGB8IImplicitAlpha1)
{
if (isOSX() && isIntel())
{
std::cout << "Test disabled on OSX Intel." << std::endl;
return;
}
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8I, 1, 1, 0, GL_RGB_INTEGER, GL_BYTE, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DUnsignedIntegerAlpha1TestES3, TextureRGB16UIImplicitAlpha1)
{
if (isOSX() && isIntel())
{
std::cout << "Test disabled on OSX Intel." << std::endl;
return;
}
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16UI, 1, 1, 0, GL_RGB_INTEGER, GL_UNSIGNED_SHORT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DIntegerAlpha1TestES3, TextureRGB16IImplicitAlpha1)
{
if (isOSX() && isIntel())
{
std::cout << "Test disabled on OSX Intel." << std::endl;
return;
}
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16I, 1, 1, 0, GL_RGB_INTEGER, GL_SHORT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DUnsignedIntegerAlpha1TestES3, TextureRGB32UIImplicitAlpha1)
{
if (isOSX() && isIntel())
{
std::cout << "Test disabled on OSX Intel." << std::endl;
return;
}
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32UI, 1, 1, 0, GL_RGB_INTEGER, GL_UNSIGNED_INT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DIntegerAlpha1TestES3, TextureRGB32IImplicitAlpha1)
{
if (isOSX() && isIntel())
{
std::cout << "Test disabled on OSX Intel." << std::endl;
return;
}
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32I, 1, 1, 0, GL_RGB_INTEGER, GL_INT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DTestES3, TextureRGBSNORMImplicitAlpha1)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8_SNORM, 1, 1, 0, GL_RGB, GL_BYTE, nullptr);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DTestES3, TextureRGB9E5ImplicitAlpha1)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB9_E5, 1, 1, 0, GL_RGB, GL_UNSIGNED_INT_5_9_9_9_REV,
nullptr);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DTestES3, TextureCOMPRESSEDRGB8ETC2ImplicitAlpha1)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB8_ETC2, 1, 1, 0, 8, nullptr);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
// When sampling a texture without an alpha channel, "1" is returned as the alpha value.
// ES 3.0.4 table 3.24
TEST_P(Texture2DTestES3, TextureCOMPRESSEDSRGB8ETC2ImplicitAlpha1)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, mTexture2D);
glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_SRGB8_ETC2, 1, 1, 0, 8, nullptr);
EXPECT_GL_NO_ERROR();
drawQuad(mProgram, "position", 0.5f);
EXPECT_PIXEL_ALPHA_EQ(0, 0, 255);
}
class TextureLimitsTest : public ANGLETest
{
protected:
......@@ -1966,6 +2288,11 @@ ANGLE_INSTANTIATE_TEST(SamplerArrayAsFunctionParameterTest,
ES2_OPENGL(),
ES2_OPENGLES());
ANGLE_INSTANTIATE_TEST(Texture2DTestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(Texture2DIntegerAlpha1TestES3, ES3_D3D11(), ES3_OPENGL(), ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(Texture2DUnsignedIntegerAlpha1TestES3,
ES3_D3D11(),
ES3_OPENGL(),
ES3_OPENGLES());
ANGLE_INSTANTIATE_TEST(ShadowSamplerPlusSampler3DTestES3,
ES3_D3D11(),
ES3_OPENGL(),
......
......@@ -67,6 +67,8 @@ GLColor ReadColor(GLint x, GLint y);
#define EXPECT_PIXEL_EQ(x, y, r, g, b, a) \
EXPECT_EQ(angle::MakeGLColor(r, g, b, a), angle::ReadColor(x, y))
#define EXPECT_PIXEL_ALPHA_EQ(x, y, a) EXPECT_EQ(a, angle::ReadColor(x, y).A)
#define EXPECT_PIXEL_COLOR_EQ(x, y, angleColor) EXPECT_EQ(angleColor, angle::ReadColor(x, y))
// TODO(jmadill): Figure out how we can use GLColor's nice printing with EXPECT_NEAR.
......
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