Revert "Work around deprecated LUMA formats in the core profile."
Caused failures in the WebglConformance.conformance_textures_misc_copy_tex_image_2d_formats test on the ATI FYI waterfall bot.
This reverts commit 61f51dc1b7d383bcb3632218cd2434f65cac4b7a.
Change-Id: Iddea03d53ae2a9b639e36931f01c1e889e550af4
Reviewed-on: https://chromium-review.googlesource.com/294262
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/gl/TextureGL.cpp b/src/libANGLE/renderer/gl/TextureGL.cpp
index dadf0fd..9a18953 100644
--- a/src/libANGLE/renderer/gl/TextureGL.cpp
+++ b/src/libANGLE/renderer/gl/TextureGL.cpp
@@ -45,36 +45,6 @@
}
}
-static bool IsLUMAFormat(GLenum format)
-{
- return format == GL_LUMINANCE || format == GL_ALPHA || format == GL_LUMINANCE_ALPHA;
-}
-
-static LUMAWorkaround GetLUMAWorkaroundInfo(GLenum originalFormat, GLenum destinationFormat)
-{
- const gl::InternalFormat &originalFormatInfo = gl::GetInternalFormatInfo(originalFormat);
- if (IsLUMAFormat(originalFormatInfo.format))
- {
- const gl::InternalFormat &destinationFormatInfo =
- gl::GetInternalFormatInfo(destinationFormat);
- return LUMAWorkaround(!IsLUMAFormat(destinationFormatInfo.format),
- originalFormatInfo.format, destinationFormatInfo.format);
- }
- else
- {
- return LUMAWorkaround(false, GL_NONE, GL_NONE);
- }
-}
-
-LUMAWorkaround::LUMAWorkaround() : LUMAWorkaround(false, GL_NONE, GL_NONE)
-{
-}
-
-LUMAWorkaround::LUMAWorkaround(bool enabled_, GLenum sourceFormat_, GLenum workaroundFormat_)
- : enabled(enabled_), sourceFormat(sourceFormat_), workaroundFormat(workaroundFormat_)
-{
-}
-
TextureGL::TextureGL(GLenum type,
const FunctionsGL *functions,
const WorkaroundsGL &workarounds,
@@ -84,7 +54,6 @@
mFunctions(functions),
mWorkarounds(workarounds),
mStateManager(stateManager),
- mLUMAWorkaroundLevels(gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS),
mAppliedSamplerState(),
mTextureID(0)
{
@@ -135,9 +104,6 @@
UNREACHABLE();
}
- mLUMAWorkaroundLevels[level] =
- GetLUMAWorkaroundInfo(internalFormat, texImageFormat.internalFormat);
-
return gl::Error(GL_NO_ERROR);
}
@@ -168,9 +134,6 @@
UNREACHABLE();
}
- ASSERT(mLUMAWorkaroundLevels[level].enabled ==
- GetLUMAWorkaroundInfo(format, texSubImageFormat.format).enabled);
-
return gl::Error(GL_NO_ERROR);
}
@@ -201,9 +164,6 @@
UNREACHABLE();
}
- ASSERT(!GetLUMAWorkaroundInfo(internalFormat, compressedTexImageFormat.internalFormat).enabled);
- mLUMAWorkaroundLevels[level].enabled = false;
-
return gl::Error(GL_NO_ERROR);
}
@@ -235,9 +195,6 @@
UNREACHABLE();
}
- ASSERT(!mLUMAWorkaroundLevels[level].enabled &&
- !GetLUMAWorkaroundInfo(format, compressedTexSubImageFormat.format).enabled);
-
return gl::Error(GL_NO_ERROR);
}
@@ -263,9 +220,6 @@
UNREACHABLE();
}
- mLUMAWorkaroundLevels[level] =
- GetLUMAWorkaroundInfo(internalFormat, copyTexImageFormat.internalFormat);
-
return gl::Error(GL_NO_ERROR);
}
@@ -425,13 +379,6 @@
UNREACHABLE();
}
- LUMAWorkaround lumaWorkaround =
- GetLUMAWorkaroundInfo(internalFormat, texStorageFormat.internalFormat);
- for (size_t level = 0; level < mLUMAWorkaroundLevels.size(); level++)
- {
- mLUMAWorkaroundLevels[level] = lumaWorkaround;
- }
-
return gl::Error(GL_NO_ERROR);
}
@@ -439,12 +386,6 @@
{
mStateManager->bindTexture(mTextureType, mTextureID);
mFunctions->generateMipmap(mTextureType);
-
- for (size_t level = samplerState.baseLevel; level < mLUMAWorkaroundLevels.size(); level++)
- {
- mLUMAWorkaroundLevels[level] = mLUMAWorkaroundLevels[samplerState.baseLevel];
- }
-
return gl::Error(GL_NO_ERROR);
}
@@ -454,8 +395,6 @@
// Make sure this texture is bound
mStateManager->bindTexture(mTextureType, mTextureID);
-
- mLUMAWorkaroundLevels[0].enabled = false;
}
void TextureGL::releaseTexImage()
@@ -480,148 +419,40 @@
return gl::Error(GL_INVALID_OPERATION);
}
-template <typename T, typename ApplyTextureFuncType>
-static inline void SyncSamplerStateMember(const FunctionsGL *functions,
- ApplyTextureFuncType applyTextureFunc,
- const gl::SamplerState &newState,
- gl::SamplerState &curState,
- GLenum textureType,
- GLenum name,
+template <typename T>
+static inline void SyncSamplerStateMember(const FunctionsGL *functions, const gl::SamplerState &newState,
+ gl::SamplerState &curState, GLenum textureType, GLenum name,
T(gl::SamplerState::*samplerMember))
{
if (curState.*samplerMember != newState.*samplerMember)
{
- applyTextureFunc();
curState.*samplerMember = newState.*samplerMember;
functions->texParameterf(textureType, name, static_cast<GLfloat>(curState.*samplerMember));
}
}
-template <typename T, typename ApplyTextureFuncType>
-static inline void SyncSamplerStateSwizzle(const FunctionsGL *functions,
- ApplyTextureFuncType applyTextureFunc,
- const LUMAWorkaround &lumaWorkaround,
- const gl::SamplerState &newState,
- gl::SamplerState &curState,
- GLenum textureType,
- GLenum name,
- T(gl::SamplerState::*samplerMember))
-{
- if (lumaWorkaround.enabled)
- {
- UNUSED_ASSERTION_VARIABLE(lumaWorkaround.workaroundFormat);
-
- GLenum resultSwizzle = GL_NONE;
- switch (newState.*samplerMember)
- {
- case GL_RED:
- case GL_GREEN:
- case GL_BLUE:
- if (lumaWorkaround.sourceFormat == GL_LUMINANCE ||
- lumaWorkaround.sourceFormat == GL_LUMINANCE_ALPHA)
- {
- // Texture is backed by a RED or RG texture, point all color channels at the red
- // channel.
- ASSERT(lumaWorkaround.workaroundFormat == GL_RED ||
- lumaWorkaround.workaroundFormat == GL_RG);
- resultSwizzle = GL_RED;
- }
- else if (lumaWorkaround.sourceFormat == GL_ALPHA)
- {
- // Color channels are not supposed to exist, make them always sample 0.
- resultSwizzle = GL_ZERO;
- }
- else
- {
- UNREACHABLE();
- }
- break;
-
- case GL_ALPHA:
- if (lumaWorkaround.sourceFormat == GL_LUMINANCE)
- {
- // Alpha channel is not supposed to exist, make it always sample 1.
- resultSwizzle = GL_ONE;
- }
- else if (lumaWorkaround.sourceFormat == GL_ALPHA)
- {
- // Texture is backed by a RED texture, point the alpha channel at the red
- // channel.
- ASSERT(lumaWorkaround.workaroundFormat == GL_RED);
- resultSwizzle = GL_RED;
- }
- else if (lumaWorkaround.sourceFormat == GL_LUMINANCE_ALPHA)
- {
- // Texture is backed by an RG texture, point the alpha channel at the green
- // channel.
- ASSERT(lumaWorkaround.workaroundFormat == GL_RG);
- resultSwizzle = GL_GREEN;
- }
- else
- {
- UNREACHABLE();
- }
- break;
-
- case GL_ZERO:
- case GL_ONE:
- // Don't modify the swizzle state when requesting ZERO or ONE.
- resultSwizzle = newState.*samplerMember;
- break;
-
- default:
- UNREACHABLE();
- break;
- }
-
- // Apply the new swizzle state if needed
- if (curState.*samplerMember != resultSwizzle)
- {
- applyTextureFunc();
- curState.*samplerMember = resultSwizzle;
- functions->texParameterf(textureType, name, static_cast<GLfloat>(resultSwizzle));
- }
- }
- else
- {
- SyncSamplerStateMember(functions, applyTextureFunc, newState, curState, textureType, name,
- samplerMember);
- }
-}
-
void TextureGL::syncSamplerState(const gl::SamplerState &samplerState) const
{
- // Callback lamdba to bind this texture only if needed.
- bool textureApplied = false;
- auto applyTextureFunc = [&]()
+ if (mAppliedSamplerState != samplerState)
{
- if (!textureApplied)
- {
- mStateManager->bindTexture(mTextureType, mTextureID);
- textureApplied = true;
- }
- };
-
- // clang-format off
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MIN_FILTER, &gl::SamplerState::minFilter);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MAG_FILTER, &gl::SamplerState::magFilter);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_WRAP_S, &gl::SamplerState::wrapS);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_WRAP_T, &gl::SamplerState::wrapT);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_WRAP_R, &gl::SamplerState::wrapR);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT, &gl::SamplerState::maxAnisotropy);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_BASE_LEVEL, &gl::SamplerState::baseLevel);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MAX_LEVEL, &gl::SamplerState::maxLevel);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MIN_LOD, &gl::SamplerState::minLod);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MAX_LOD, &gl::SamplerState::maxLod);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_COMPARE_MODE, &gl::SamplerState::compareMode);
- SyncSamplerStateMember(mFunctions, applyTextureFunc, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_COMPARE_FUNC, &gl::SamplerState::compareFunc);
-
- const LUMAWorkaround &LUMAWorkaround = mLUMAWorkaroundLevels[samplerState.baseLevel];
- SyncSamplerStateSwizzle(mFunctions, applyTextureFunc, LUMAWorkaround, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_SWIZZLE_R, &gl::SamplerState::swizzleRed);
- SyncSamplerStateSwizzle(mFunctions, applyTextureFunc, LUMAWorkaround, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_SWIZZLE_G, &gl::SamplerState::swizzleGreen);
- SyncSamplerStateSwizzle(mFunctions, applyTextureFunc, LUMAWorkaround, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_SWIZZLE_B, &gl::SamplerState::swizzleBlue);
- SyncSamplerStateSwizzle(mFunctions, applyTextureFunc, LUMAWorkaround, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_SWIZZLE_A, &gl::SamplerState::swizzleAlpha);
- // clang-format on
+ mStateManager->bindTexture(mTextureType, mTextureID);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MIN_FILTER, &gl::SamplerState::minFilter);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MAG_FILTER, &gl::SamplerState::magFilter);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_WRAP_S, &gl::SamplerState::wrapS);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_WRAP_T, &gl::SamplerState::wrapT);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_WRAP_R, &gl::SamplerState::wrapR);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MAX_ANISOTROPY_EXT, &gl::SamplerState::maxAnisotropy);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_BASE_LEVEL, &gl::SamplerState::baseLevel);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MAX_LEVEL, &gl::SamplerState::maxLevel);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MIN_LOD, &gl::SamplerState::minLod);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_MAX_LOD, &gl::SamplerState::maxLod);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_COMPARE_MODE, &gl::SamplerState::compareMode);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_COMPARE_FUNC, &gl::SamplerState::compareFunc);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_SWIZZLE_R, &gl::SamplerState::swizzleRed);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_SWIZZLE_G, &gl::SamplerState::swizzleGreen);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_SWIZZLE_B, &gl::SamplerState::swizzleBlue);
+ SyncSamplerStateMember(mFunctions, samplerState, mAppliedSamplerState, mTextureType, GL_TEXTURE_SWIZZLE_A, &gl::SamplerState::swizzleAlpha);
+ }
}
GLuint TextureGL::getTextureID() const
diff --git a/src/libANGLE/renderer/gl/TextureGL.h b/src/libANGLE/renderer/gl/TextureGL.h
index 027152b..4df047f 100644
--- a/src/libANGLE/renderer/gl/TextureGL.h
+++ b/src/libANGLE/renderer/gl/TextureGL.h
@@ -19,16 +19,6 @@
class StateManagerGL;
struct WorkaroundsGL;
-struct LUMAWorkaround
-{
- bool enabled;
- GLenum sourceFormat;
- GLenum workaroundFormat;
-
- LUMAWorkaround();
- LUMAWorkaround(bool enabled, GLenum sourceFormat, GLenum workaroundFormat);
-};
-
class TextureGL : public TextureImpl
{
public:
@@ -80,8 +70,6 @@
const WorkaroundsGL &mWorkarounds;
StateManagerGL *mStateManager;
- std::vector<LUMAWorkaround> mLUMAWorkaroundLevels;
-
mutable gl::SamplerState mAppliedSamplerState;
GLuint mTextureID;
};
diff --git a/src/libANGLE/renderer/gl/formatutilsgl.cpp b/src/libANGLE/renderer/gl/formatutilsgl.cpp
index 7d34e94..c500a10 100644
--- a/src/libANGLE/renderer/gl/formatutilsgl.cpp
+++ b/src/libANGLE/renderer/gl/formatutilsgl.cpp
@@ -316,21 +316,6 @@
// Update the internal format to GL_RGBA.
result = GL_RGBA8;
}
-
- if ((functions->profile & GL_CONTEXT_CORE_PROFILE_BIT) != 0)
- {
- // Work around deprecated luminance alpha formats in the OpenGL core profile by backing
- // them with R or RG textures.
- if (formatInfo.format == GL_LUMINANCE || formatInfo.format == GL_ALPHA)
- {
- result = gl::GetSizedInternalFormat(GL_RED, formatInfo.type);
- }
-
- if (formatInfo.format == GL_LUMINANCE_ALPHA)
- {
- result = gl::GetSizedInternalFormat(GL_RG, formatInfo.type);
- }
- }
}
else if (functions->isAtLeastGLES(gl::Version(3, 0)))
{
@@ -359,21 +344,6 @@
{
result = GL_RGBA;
}
-
- if ((functions->profile & GL_CONTEXT_CORE_PROFILE_BIT) != 0)
- {
- // Work around deprecated luminance alpha formats in the OpenGL core profile by backing
- // them with R or RG textures.
- if (format == GL_LUMINANCE || format == GL_ALPHA)
- {
- result = GL_RED;
- }
-
- if (format == GL_LUMINANCE_ALPHA)
- {
- result = GL_RG;
- }
- }
}
return result;
diff --git a/src/tests/gl_tests/SwizzleTest.cpp b/src/tests/gl_tests/SwizzleTest.cpp
index 4d0dbda..92cafd9 100644
--- a/src/tests/gl_tests/SwizzleTest.cpp
+++ b/src/tests/gl_tests/SwizzleTest.cpp
@@ -108,7 +108,8 @@
{
glGenTextures(1, &mTexture);
glBindTexture(GL_TEXTURE_2D, mTexture);
- glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, 1, 1, 0, dataFormat, dataType, data);
+ glTexStorage2D(GL_TEXTURE_2D, 1, internalFormat, 1, 1);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1, 1, dataFormat, dataType, data);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
@@ -267,48 +268,6 @@
runTest2D();
}
-TEST_P(SwizzleTest, L8_2D)
-{
- GLubyte data[] = { 0x77 };
- init2DTexture(GL_LUMINANCE, GL_LUMINANCE, GL_UNSIGNED_BYTE, data);
- runTest2D();
-}
-
-TEST_P(SwizzleTest, A8_2D)
-{
- GLubyte data[] = { 0x55 };
- init2DTexture(GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE, data);
- runTest2D();
-}
-
-TEST_P(SwizzleTest, LA8_2D)
-{
- GLubyte data[] = { 0x77, 0x66 };
- init2DTexture(GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_UNSIGNED_BYTE, data);
- runTest2D();
-}
-
-TEST_P(SwizzleTest, L32F_2D)
-{
- GLfloat data[] = { 0.7f };
- init2DTexture(GL_LUMINANCE, GL_LUMINANCE, GL_FLOAT, data);
- runTest2D();
-}
-
-TEST_P(SwizzleTest, A32F_2D)
-{
- GLfloat data[] = { 0.4f, };
- init2DTexture(GL_ALPHA, GL_ALPHA, GL_FLOAT, data);
- runTest2D();
-}
-
-TEST_P(SwizzleTest, LA32F_2D)
-{
- GLfloat data[] = { 0.5f, 0.6f, };
- init2DTexture(GL_LUMINANCE_ALPHA, GL_LUMINANCE_ALPHA, GL_FLOAT, data);
- runTest2D();
-}
-
#include "media/pixel.inl"
TEST_P(SwizzleTest, CompressedDXT_2D)
diff --git a/src/tests/gl_tests/UnpackAlignmentTest.cpp b/src/tests/gl_tests/UnpackAlignmentTest.cpp
index f9c31c1..9799a9d 100644
--- a/src/tests/gl_tests/UnpackAlignmentTest.cpp
+++ b/src/tests/gl_tests/UnpackAlignmentTest.cpp
@@ -105,6 +105,14 @@
void testAlignment(int alignment, unsigned int offset, GLenum format, GLenum type)
{
+ // TODO(geofflang): Support LUMA formats in the core profile.
+ if (getPlatformRenderer() == EGL_PLATFORM_ANGLE_TYPE_OPENGL_ANGLE &&
+ (format == GL_LUMINANCE_ALPHA || format == GL_LUMINANCE || format == GL_ALPHA))
+ {
+ std::cout << "Test skipped on OpenGL with LUMA formats." << std::endl;
+ return;
+ }
+
static const unsigned int width = 7;
static const unsigned int height = 2;