Partially Revert "Convert DXT1 RGB data to DXT3 RGBA when uploading to the GPU."

This reverts commit e6582161b0.

Remove the DXT1->DXT3 transcoding but leave in the MacOS workarounds for fixing
the alpha channel of DXT1 textures.

BUG=angleproject:3729

Change-Id: Ib276c1e4a58155866da8c661cba2063a4e4304fe
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1846015
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Geoff Lang <geofflang@chromium.org>
This commit is contained in:
Geoff Lang
2019-10-07 16:35:38 -04:00
committed by Commit Bot
parent 2d5c8d3197
commit 2fa9d73469
10 changed files with 15 additions and 151 deletions

View File

@@ -2,7 +2,7 @@
"src/libANGLE/renderer/gen_load_functions_table.py":
"e65c50e84fc38ad34d0eb0bebb84aab6",
"src/libANGLE/renderer/load_functions_data.json":
"15adad07ae96288c2060016efbd6e97a",
"5e9a50b1eeda3b5bca68aac4bc379437",
"src/libANGLE/renderer/load_functions_table_autogen.cpp":
"66ebc5b10e1c6c2554030fbcf894d0c7"
"a5dc01dc05a08f7c674f9241d36b095c"
}

View File

@@ -6,7 +6,7 @@
"src/libANGLE/renderer/d3d/d3d11/texture_format_data.json":
"d7483ece817e819588f4ca157716dc7b",
"src/libANGLE/renderer/d3d/d3d11/texture_format_map.json":
"e70603310b68f658c7d73003705eebc8",
"511730c698bfc3da18f745d2036c70c7",
"src/libANGLE/renderer/d3d/d3d11/texture_format_table_autogen.cpp":
"baeaa3bb5a7cf728f38339753970711b"
"2e6fef6d2b8bfb0da5a90f5e6aa550b8"
}

View File

@@ -1539,46 +1539,6 @@ void LoadRGB32FToRGB16F(size_t width,
}
}
void LoadRGBDXT1ToRGBADXT3(size_t width,
size_t height,
size_t depth,
const uint8_t *input,
size_t inputRowPitch,
size_t inputDepthPitch,
uint8_t *output,
size_t outputRowPitch,
size_t outputDepthPitch)
{
constexpr size_t kBlockWidth = 4;
constexpr size_t kBlockHeight = 4;
constexpr size_t kBlockDepth = 1;
constexpr size_t kBlockSize = 8;
const size_t columns = (width + (kBlockWidth - 1)) / kBlockWidth;
const size_t rows = (height + (kBlockHeight - 1)) / kBlockHeight;
const size_t layers = (depth + (kBlockDepth - 1)) / kBlockDepth;
for (size_t z = 0; z < layers; ++z)
{
for (size_t y = 0; y < rows; ++y)
{
for (size_t x = 0; x < columns; x++)
{
const uint8_t *source =
priv::OffsetDataPointer<uint8_t>(input, y, z, inputRowPitch, inputDepthPitch) +
(x * kBlockSize);
uint8_t *dest = priv::OffsetDataPointer<uint8_t>(output, y, z, outputRowPitch,
outputDepthPitch) +
(x * kBlockSize * 2);
// DXT3 has a block for alpha then a block for color
memset(dest, 0xFF, kBlockSize);
memcpy(dest + kBlockSize, source, kBlockSize);
}
}
}
}
void LoadR32ToR16(size_t width,
size_t height,
size_t depth,

View File

@@ -559,16 +559,6 @@ inline void LoadCompressedToNative(size_t width,
size_t outputRowPitch,
size_t outputDepthPitch);
void LoadRGBDXT1ToRGBADXT3(size_t width,
size_t height,
size_t depth,
const uint8_t *input,
size_t inputRowPitch,
size_t inputDepthPitch,
uint8_t *output,
size_t outputRowPitch,
size_t outputDepthPitch);
void LoadR32ToR16(size_t width,
size_t height,
size_t depth,

View File

@@ -64,8 +64,6 @@
"GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2": "R8G8B8A8_UNORM_SRGB",
"GL_DEPTH_COMPONENT24": "D24_UNORM_S8_UINT",
"GL_DEPTH_COMPONENT32_OES": "D24_UNORM_S8_UINT",
"GL_COMPRESSED_RGB_S3TC_DXT1_EXT": "BC3_RGBA_UNORM_BLOCK",
"GL_COMPRESSED_SRGB_S3TC_DXT1_EXT": "BC3_RGBA_UNORM_SRGB_BLOCK",
"GL_ETC1_RGB8_OES": "R8G8B8A8_UNORM",
"GL_ETC1_RGB8_LOSSY_DECODE_ANGLE": "BC1_RGB_UNORM_BLOCK",
"GL_COMPRESSED_RGB8_LOSSY_DECODE_ETC2_ANGLE": "BC1_RGB_UNORM_BLOCK",

View File

@@ -731,13 +731,13 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
{
static constexpr Format info(GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
angle::FormatID::BC3_RGBA_UNORM_BLOCK,
DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_BC3_UNORM,
angle::FormatID::BC1_RGB_UNORM_BLOCK,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_BC1_UNORM,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_BC3_UNORM,
DXGI_FORMAT_BC1_UNORM,
GL_RGBA8,
nullptr);
return info;
@@ -1235,13 +1235,13 @@ const Format &Format::Get(GLenum internalFormat, const Renderer11DeviceCaps &dev
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
{
static constexpr Format info(GL_COMPRESSED_SRGB_S3TC_DXT1_EXT,
angle::FormatID::BC3_RGBA_UNORM_SRGB_BLOCK,
DXGI_FORMAT_BC3_UNORM_SRGB,
DXGI_FORMAT_BC3_UNORM_SRGB,
angle::FormatID::BC1_RGB_UNORM_SRGB_BLOCK,
DXGI_FORMAT_BC1_UNORM_SRGB,
DXGI_FORMAT_BC1_UNORM_SRGB,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_UNKNOWN,
DXGI_FORMAT_BC3_UNORM_SRGB,
DXGI_FORMAT_BC1_UNORM_SRGB,
GL_RGBA8,
nullptr);
return info;

View File

@@ -332,7 +332,7 @@ static D3D9FormatMap BuildD3D9FormatMap()
InsertD3D9FormatInfo(&map, GL_BGRA4_ANGLEX, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, LoadBGRA4ToBGRA8 );
InsertD3D9FormatInfo(&map, GL_BGR5_A1_ANGLEX, D3DFMT_A8R8G8B8, D3DFMT_A8R8G8B8, LoadBGR5A1ToBGRA8 );
InsertD3D9FormatInfo(&map, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, D3DFMT_DXT3, D3DFMT_UNKNOWN, LoadRGBDXT1ToRGBADXT3 );
InsertD3D9FormatInfo(&map, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, D3DFMT_DXT1, D3DFMT_UNKNOWN, LoadCompressedToNative<4, 4, 1, 8> );
InsertD3D9FormatInfo(&map, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, D3DFMT_DXT1, D3DFMT_UNKNOWN, LoadCompressedToNative<4, 4, 1, 8> );
InsertD3D9FormatInfo(&map, GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE, D3DFMT_DXT3, D3DFMT_UNKNOWN, LoadCompressedToNative<4, 4, 1, 16> );
InsertD3D9FormatInfo(&map, GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE, D3DFMT_DXT5, D3DFMT_UNKNOWN, LoadCompressedToNative<4, 4, 1, 16> );

View File

@@ -608,9 +608,6 @@
}
},
"GL_COMPRESSED_RGB_S3TC_DXT1_EXT": {
"BC3_RGBA_UNORM_BLOCK": {
"GL_UNSIGNED_BYTE": "LoadRGBDXT1ToRGBADXT3"
},
"NONE": {
"GL_UNSIGNED_BYTE": "LoadCompressedToNative<4, 4, 1, 8>"
}
@@ -846,9 +843,6 @@
}
},
"GL_COMPRESSED_SRGB_S3TC_DXT1_EXT": {
"BC3_RGBA_UNORM_SRGB_BLOCK": {
"GL_UNSIGNED_BYTE": "LoadRGBDXT1ToRGBADXT3"
},
"NONE": {
"GL_UNSIGNED_BYTE": "LoadCompressedToNative<4, 4, 1, 8>"
}

View File

@@ -832,18 +832,6 @@ LoadImageFunctionInfo COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT_to_default(GLenum t
}
}
LoadImageFunctionInfo COMPRESSED_RGB_S3TC_DXT1_EXT_to_BC3_RGBA_UNORM_BLOCK(GLenum type)
{
switch (type)
{
case GL_UNSIGNED_BYTE:
return LoadImageFunctionInfo(LoadRGBDXT1ToRGBADXT3, true);
default:
UNREACHABLE();
return LoadImageFunctionInfo(UnreachableLoadFunction, true);
}
}
LoadImageFunctionInfo COMPRESSED_RGB_S3TC_DXT1_EXT_to_default(GLenum type)
{
switch (type)
@@ -1364,18 +1352,6 @@ LoadImageFunctionInfo COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT_to_default(GLenum type
}
}
LoadImageFunctionInfo COMPRESSED_SRGB_S3TC_DXT1_EXT_to_BC3_RGBA_UNORM_SRGB_BLOCK(GLenum type)
{
switch (type)
{
case GL_UNSIGNED_BYTE:
return LoadImageFunctionInfo(LoadRGBDXT1ToRGBADXT3, true);
default:
UNREACHABLE();
return LoadImageFunctionInfo(UnreachableLoadFunction, true);
}
}
LoadImageFunctionInfo COMPRESSED_SRGB_S3TC_DXT1_EXT_to_default(GLenum type)
{
switch (type)
@@ -3272,15 +3248,7 @@ LoadFunctionMap GetLoadFunctionsMap(GLenum internalFormat, FormatID angleFormat)
case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT:
return COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT_to_default;
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
{
switch (angleFormat)
{
case FormatID::BC3_RGBA_UNORM_BLOCK:
return COMPRESSED_RGB_S3TC_DXT1_EXT_to_BC3_RGBA_UNORM_BLOCK;
default:
return COMPRESSED_RGB_S3TC_DXT1_EXT_to_default;
}
}
return COMPRESSED_RGB_S3TC_DXT1_EXT_to_default;
case GL_COMPRESSED_SIGNED_R11_EAC:
{
switch (angleFormat)
@@ -3429,15 +3397,7 @@ LoadFunctionMap GetLoadFunctionsMap(GLenum internalFormat, FormatID angleFormat)
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
return COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT_to_default;
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
{
switch (angleFormat)
{
case FormatID::BC3_RGBA_UNORM_SRGB_BLOCK:
return COMPRESSED_SRGB_S3TC_DXT1_EXT_to_BC3_RGBA_UNORM_SRGB_BLOCK;
default:
return COMPRESSED_SRGB_S3TC_DXT1_EXT_to_default;
}
}
return COMPRESSED_SRGB_S3TC_DXT1_EXT_to_default;
case GL_DEPTH24_STENCIL8:
{
switch (angleFormat)

View File

@@ -110,44 +110,6 @@ TEST_P(DXT1CompressedTextureTest, CompressedTexImage)
EXPECT_GL_NO_ERROR();
}
// Verify that DXT1 RGB textures have 1.0 alpha when sampled
TEST_P(DXT1CompressedTextureTest, DXT1Alpha)
{
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_compression_dxt1"));
GLTexture texture;
glBindTexture(GL_TEXTURE_2D, texture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
// Image using pixels with the code for transparent black:
// "BLACK, if color0 <= color1 and code(x,y) == 3"
constexpr uint8_t CompressedImageDXT1[] = {0, 0, 0, 0, 51, 204, 51, 204};
glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 4, 4, 0,
sizeof(CompressedImageDXT1), CompressedImageDXT1);
EXPECT_GL_NO_ERROR();
glUseProgram(mTextureProgram);
glUniform1i(mTextureUniformLocation, 0);
constexpr GLint kDrawSize = 4;
// The image is one 4x4 block, make the viewport only 4x4.
glViewport(0, 0, kDrawSize, kDrawSize);
drawQuad(mTextureProgram, "position", 0.5f);
EXPECT_GL_NO_ERROR();
for (GLint y = 0; y < kDrawSize; y++)
{
for (GLint x = 0; x < kDrawSize; x++)
{
EXPECT_PIXEL_EQ(x, y, 0, 0, 0, 255) << "at (" << x << ", " << y << ")";
}
}
}
TEST_P(DXT1CompressedTextureTest, CompressedTexStorage)
{
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_compression_dxt1"));