mirror of
https://github.com/godotengine/godot-angle-static.git
synced 2026-01-06 02:09:55 +03:00
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:
@@ -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"
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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> );
|
||||
|
||||
@@ -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>"
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"));
|
||||
|
||||
Reference in New Issue
Block a user