From 851c2386bad44fb6c453744d970237e681e693f0 Mon Sep 17 00:00:00 2001 From: brianosman Date: Wed, 7 Dec 2016 10:03:25 -0800 Subject: Skip the sRGB mip-map testing on command buffer Chromium command buffer now has the sRGB decode extension, but it doesn't make any guarantees about the interaction with glGenerateMipmap. BUG=skia: Review-Url: https://codereview.chromium.org/2557603006 --- src/gpu/gl/GrGLCaps.cpp | 3 +++ src/gpu/gl/GrGLCaps.h | 2 ++ tests/SRGBMipMapTest.cpp | 6 +++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp index 168acdec73..5a0864e8cf 100644 --- a/src/gpu/gl/GrGLCaps.cpp +++ b/src/gpu/gl/GrGLCaps.cpp @@ -52,6 +52,7 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions, fRGBAToBGRAReadbackConversionsAreSlow = false; fDoManualMipmapping = false; fSRGBDecodeDisableSupport = false; + fSRGBDecodeDisableAffectsMipmaps = false; fBlitFramebufferFlags = kNoSupport_BlitFramebufferFlag; @@ -609,6 +610,8 @@ void GrGLCaps::init(const GrContextOptions& contextOptions, } fSRGBDecodeDisableSupport = ctxInfo.hasExtension("GL_EXT_texture_sRGB_decode"); + fSRGBDecodeDisableAffectsMipmaps = fSRGBDecodeDisableSupport && + kChromium_GrGLDriver != ctxInfo.driver(); // Requires fTextureRedSupport, fTextureSwizzleSupport, msaa support, ES compatibility have // already been detected. diff --git a/src/gpu/gl/GrGLCaps.h b/src/gpu/gl/GrGLCaps.h index deb0889c82..8a83e02222 100644 --- a/src/gpu/gl/GrGLCaps.h +++ b/src/gpu/gl/GrGLCaps.h @@ -346,6 +346,7 @@ public: bool doManualMipmapping() const { return fDoManualMipmapping; } bool srgbDecodeDisableSupport() const { return fSRGBDecodeDisableSupport; } + bool srgbDecodeDisableAffectsMipmaps() const { return fSRGBDecodeDisableAffectsMipmaps; } /** * Returns a string containing the caps info. @@ -424,6 +425,7 @@ private: bool fRGBAToBGRAReadbackConversionsAreSlow : 1; bool fDoManualMipmapping : 1; bool fSRGBDecodeDisableSupport : 1; + bool fSRGBDecodeDisableAffectsMipmaps : 1; uint32_t fBlitFramebufferFlags; diff --git a/tests/SRGBMipMapTest.cpp b/tests/SRGBMipMapTest.cpp index 88f08d43d7..b963aaff4b 100644 --- a/tests/SRGBMipMapTest.cpp +++ b/tests/SRGBMipMapTest.cpp @@ -148,10 +148,14 @@ DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SRGBMipMaps, reporter, ctxInfo) { // skbug.com/5048). On GL, we may not have sRGB decode support. In that case, rendering sRGB // textures to a legacy surface produces nonsense, so this part of the test is meaningless. // + // We also skip this part of the test on command buffer (via srgbDecodeDisableAffectsMipmaps), + // because that implementation of the extension doesn't ensure that mips respect the setting. + // // TODO: Once Vulkan supports legacy mip-mapping, we can promote this to GrCaps. Right now, // Vulkan has most of the functionality, but not the mip-mapping part that's being tested here. GrGLGpu* glGpu = static_cast(context->getGpu()); - if (glGpu->glCaps().srgbDecodeDisableSupport()) { + if (glGpu->glCaps().srgbDecodeDisableSupport() && + glGpu->glCaps().srgbDecodeDisableAffectsMipmaps()) { read_and_check_pixels(reporter, l32RenderTargetContext->asTexture().get(), expectedLinear, error, "re-render as linear"); } -- cgit v1.2.3