Commit 2be35682 by Mohan Maiya Committed by Commit Bot

Add sRGBOverrideFormats end2end test

Addition of a new end2end test to verify that all supported formats can be overridden for the GL_EXT_texture_sRGB_override extension. Bug: angleproject:4561 Test: angle_end2end_tests --gtest_filter=SRGBTextureTestES3.SRGBOverrideFormats*Vulkan* Change-Id: I93c4eab0489a1daadeb27c70ba1f755ed2e58fc4 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2483564Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 7bbe497a
...@@ -83,6 +83,9 @@ class SRGBTextureTest : public ANGLETest ...@@ -83,6 +83,9 @@ class SRGBTextureTest : public ANGLETest
GLint mTextureLocation = -1; GLint mTextureLocation = -1;
}; };
class SRGBTextureTestES3 : public SRGBTextureTest
{};
// GenerateMipmaps should generate INVALID_OPERATION in ES 2.0 / WebGL 1.0 with EXT_sRGB. // GenerateMipmaps should generate INVALID_OPERATION in ES 2.0 / WebGL 1.0 with EXT_sRGB.
// https://bugs.chromium.org/p/chromium/issues/detail?id=769989 // https://bugs.chromium.org/p/chromium/issues/detail?id=769989
TEST_P(SRGBTextureTest, SRGBValidation) TEST_P(SRGBTextureTest, SRGBValidation)
...@@ -160,14 +163,11 @@ TEST_P(SRGBTextureTest, SRGBAValidation) ...@@ -160,14 +163,11 @@ TEST_P(SRGBTextureTest, SRGBAValidation)
} }
// Test that sized SRGBA formats allow generating mipmaps // Test that sized SRGBA formats allow generating mipmaps
TEST_P(SRGBTextureTest, SRGBASizedValidation) TEST_P(SRGBTextureTestES3, SRGBASizedValidation)
{ {
// TODO(fjhenigman): Figure out why this fails on Ozone Intel. // TODO(fjhenigman): Figure out why this fails on Ozone Intel.
ANGLE_SKIP_TEST_IF(IsOzone() && IsIntel() && IsOpenGLES()); ANGLE_SKIP_TEST_IF(IsOzone() && IsIntel() && IsOpenGLES());
// ES3 required for sized SRGB textures
ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3);
GLTexture tex; GLTexture tex;
glBindTexture(GL_TEXTURE_2D, tex); glBindTexture(GL_TEXTURE_2D, tex);
...@@ -304,11 +304,72 @@ TEST_P(SRGBTextureTest, SRGBOverrideTextureParameter) ...@@ -304,11 +304,72 @@ TEST_P(SRGBTextureTest, SRGBOverrideTextureParameter)
EXPECT_PIXEL_COLOR_NEAR(0, 0, srgbColor, 1.0); EXPECT_PIXEL_COLOR_NEAR(0, 0, srgbColor, 1.0);
} }
// Test that all supported formats can be overridden
TEST_P(SRGBTextureTestES3, SRGBOverrideFormats)
{
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_override"));
constexpr GLenum possibleFormats[] = {GL_RGB8,
GL_RGBA8,
GL_COMPRESSED_RGB8_ETC2,
GL_COMPRESSED_RGBA8_ETC2_EAC,
GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,
GL_COMPRESSED_RGBA_ASTC_4x4,
GL_COMPRESSED_RGBA_ASTC_5x4,
GL_COMPRESSED_RGBA_ASTC_5x5,
GL_COMPRESSED_RGBA_ASTC_6x5,
GL_COMPRESSED_RGBA_ASTC_6x6,
GL_COMPRESSED_RGBA_ASTC_8x5,
GL_COMPRESSED_RGBA_ASTC_8x6,
GL_COMPRESSED_RGBA_ASTC_8x8,
GL_COMPRESSED_RGBA_ASTC_10x5,
GL_COMPRESSED_RGBA_ASTC_10x6,
GL_COMPRESSED_RGBA_ASTC_10x8,
GL_COMPRESSED_RGBA_ASTC_10x10,
GL_COMPRESSED_RGBA_ASTC_12x10,
GL_COMPRESSED_RGBA_ASTC_12x12,
GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
GL_COMPRESSED_RGBA_S3TC_DXT1_EXT,
GL_COMPRESSED_RGBA_S3TC_DXT3_EXT,
GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
GL_R8,
GL_RG8,
GL_COMPRESSED_RGBA_BPTC_UNORM_EXT};
for (GLenum format : possibleFormats)
{
GLTexture tex;
glBindTexture(GL_TEXTURE_2D, tex.get());
glTexStorage2D(GL_TEXTURE_2D, 1, format, 1, 1);
GLenum error = glGetError();
if (error == GL_INVALID_ENUM)
{
// Format is not supported, we don't require the sRGB counterpart to be supported either
continue;
}
else
{
ASSERT_EQ(static_cast<GLenum>(GL_NO_ERROR), error);
}
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_FORMAT_SRGB_OVERRIDE_EXT, GL_NONE);
ASSERT_GL_NO_ERROR();
glUseProgram(mProgram);
glUniform1i(mTextureLocation, 0);
glDisable(GL_DEPTH_TEST);
drawQuad(mProgram, "position", 0.5f);
ASSERT_GL_NO_ERROR();
// Discard result, we are only checking that we don't try to reinterpret to an unsupported
// format
}
}
// Test interaction between sRGB_override and sampler objects // Test interaction between sRGB_override and sampler objects
TEST_P(SRGBTextureTest, SRGBOverrideTextureParameterWithSampler) TEST_P(SRGBTextureTestES3, SRGBOverrideTextureParameterWithSampler)
{ {
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_override") || ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_override"));
getClientMajorVersion() < 3);
GLColor linearColor = kLinearColor; GLColor linearColor = kLinearColor;
GLColor srgbColor = kNonlinearColor; GLColor srgbColor = kNonlinearColor;
...@@ -348,10 +409,10 @@ TEST_P(SRGBTextureTest, SRGBOverrideTextureParameterWithSampler) ...@@ -348,10 +409,10 @@ TEST_P(SRGBTextureTest, SRGBOverrideTextureParameterWithSampler)
// EXT_texture_format_sRGB_override spec says: // EXT_texture_format_sRGB_override spec says:
// "If the internal format is not one of the above formats, then // "If the internal format is not one of the above formats, then
// the value of TEXTURE_FORMAT_SRGB_OVERRIDE_EXT is ignored." // the value of TEXTURE_FORMAT_SRGB_OVERRIDE_EXT is ignored."
TEST_P(SRGBTextureTest, SRGBOverrideTextureParameterNoop) TEST_P(SRGBTextureTestES3, SRGBOverrideTextureParameterNoop)
{ {
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_override")); ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_override"));
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_sRGB") || getClientMajorVersion() < 3); ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_sRGB"));
GLColor linearColor = kLinearColor; GLColor linearColor = kLinearColor;
GLColor srgbColor = kNonlinearColor; GLColor srgbColor = kNonlinearColor;
...@@ -378,10 +439,9 @@ TEST_P(SRGBTextureTest, SRGBOverrideTextureParameterNoop) ...@@ -378,10 +439,9 @@ TEST_P(SRGBTextureTest, SRGBOverrideTextureParameterNoop)
} }
// Test basic functionality of SRGB decode using the sampler parameter // Test basic functionality of SRGB decode using the sampler parameter
TEST_P(SRGBTextureTest, SRGBDecodeSamplerParameter) TEST_P(SRGBTextureTestES3, SRGBDecodeSamplerParameter)
{ {
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_decode") || ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_decode"));
getClientMajorVersion() < 3);
GLColor linearColor = kLinearColor; GLColor linearColor = kLinearColor;
GLColor srgbColor = kNonlinearColor; GLColor srgbColor = kNonlinearColor;
...@@ -411,10 +471,9 @@ TEST_P(SRGBTextureTest, SRGBDecodeSamplerParameter) ...@@ -411,10 +471,9 @@ TEST_P(SRGBTextureTest, SRGBDecodeSamplerParameter)
} }
// Test that sampler state overrides texture state for srgb decode // Test that sampler state overrides texture state for srgb decode
TEST_P(SRGBTextureTest, SRGBDecodeTextureAndSamplerParameter) TEST_P(SRGBTextureTestES3, SRGBDecodeTextureAndSamplerParameter)
{ {
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_decode") || ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_decode"));
getClientMajorVersion() < 3);
GLColor linearColor = kLinearColor; GLColor linearColor = kLinearColor;
GLColor srgbColor = kNonlinearColor; GLColor srgbColor = kNonlinearColor;
...@@ -448,10 +507,9 @@ TEST_P(SRGBTextureTest, SRGBDecodeTextureAndSamplerParameter) ...@@ -448,10 +507,9 @@ TEST_P(SRGBTextureTest, SRGBDecodeTextureAndSamplerParameter)
} }
// Test that srgb decode state takes priority over srgb override state // Test that srgb decode state takes priority over srgb override state
TEST_P(SRGBTextureTest, SRGBDecodeOverridePriority) TEST_P(SRGBTextureTestES3, SRGBDecodeOverridePriority)
{ {
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_decode") || ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_decode"));
getClientMajorVersion() < 3);
ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_override")); ANGLE_SKIP_TEST_IF(!IsGLExtensionEnabled("GL_EXT_texture_sRGB_override"));
GLColor linearColor = kLinearColor; GLColor linearColor = kLinearColor;
...@@ -477,10 +535,8 @@ TEST_P(SRGBTextureTest, SRGBDecodeOverridePriority) ...@@ -477,10 +535,8 @@ TEST_P(SRGBTextureTest, SRGBDecodeOverridePriority)
} }
// Test that mipmaps are generated correctly for sRGB textures // Test that mipmaps are generated correctly for sRGB textures
TEST_P(SRGBTextureTest, GenerateMipmaps) TEST_P(SRGBTextureTestES3, GenerateMipmaps)
{ {
ANGLE_SKIP_TEST_IF(getClientMajorVersion() < 3);
ANGLE_SKIP_TEST_IF(IsOpenGL() && ((IsIntel() && IsOSX()) || IsAMD())); ANGLE_SKIP_TEST_IF(IsOpenGL() && ((IsIntel() && IsOSX()) || IsAMD()));
auto createAndReadBackTexture = [this](GLenum internalFormat, const GLColor &color) { auto createAndReadBackTexture = [this](GLenum internalFormat, const GLColor &color) {
...@@ -538,5 +594,6 @@ TEST_P(SRGBTextureTest, GenerateMipmaps) ...@@ -538,5 +594,6 @@ TEST_P(SRGBTextureTest, GenerateMipmaps)
// Use this to select which configurations (e.g. which renderer, which GLES major version) these // Use this to select which configurations (e.g. which renderer, which GLES major version) these
// tests should be run against. // tests should be run against.
ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(SRGBTextureTest); ANGLE_INSTANTIATE_TEST_ES2_AND_ES3(SRGBTextureTest);
ANGLE_INSTANTIATE_TEST_ES3(SRGBTextureTestES3);
} // namespace angle } // namespace angle
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