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
This commit is contained in:
parent
27eb22b994
commit
851c2386ba
@ -52,6 +52,7 @@ GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions,
|
|||||||
fRGBAToBGRAReadbackConversionsAreSlow = false;
|
fRGBAToBGRAReadbackConversionsAreSlow = false;
|
||||||
fDoManualMipmapping = false;
|
fDoManualMipmapping = false;
|
||||||
fSRGBDecodeDisableSupport = false;
|
fSRGBDecodeDisableSupport = false;
|
||||||
|
fSRGBDecodeDisableAffectsMipmaps = false;
|
||||||
|
|
||||||
fBlitFramebufferFlags = kNoSupport_BlitFramebufferFlag;
|
fBlitFramebufferFlags = kNoSupport_BlitFramebufferFlag;
|
||||||
|
|
||||||
@ -609,6 +610,8 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
|
|||||||
}
|
}
|
||||||
|
|
||||||
fSRGBDecodeDisableSupport = ctxInfo.hasExtension("GL_EXT_texture_sRGB_decode");
|
fSRGBDecodeDisableSupport = ctxInfo.hasExtension("GL_EXT_texture_sRGB_decode");
|
||||||
|
fSRGBDecodeDisableAffectsMipmaps = fSRGBDecodeDisableSupport &&
|
||||||
|
kChromium_GrGLDriver != ctxInfo.driver();
|
||||||
|
|
||||||
// Requires fTextureRedSupport, fTextureSwizzleSupport, msaa support, ES compatibility have
|
// Requires fTextureRedSupport, fTextureSwizzleSupport, msaa support, ES compatibility have
|
||||||
// already been detected.
|
// already been detected.
|
||||||
|
@ -346,6 +346,7 @@ public:
|
|||||||
bool doManualMipmapping() const { return fDoManualMipmapping; }
|
bool doManualMipmapping() const { return fDoManualMipmapping; }
|
||||||
|
|
||||||
bool srgbDecodeDisableSupport() const { return fSRGBDecodeDisableSupport; }
|
bool srgbDecodeDisableSupport() const { return fSRGBDecodeDisableSupport; }
|
||||||
|
bool srgbDecodeDisableAffectsMipmaps() const { return fSRGBDecodeDisableAffectsMipmaps; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a string containing the caps info.
|
* Returns a string containing the caps info.
|
||||||
@ -424,6 +425,7 @@ private:
|
|||||||
bool fRGBAToBGRAReadbackConversionsAreSlow : 1;
|
bool fRGBAToBGRAReadbackConversionsAreSlow : 1;
|
||||||
bool fDoManualMipmapping : 1;
|
bool fDoManualMipmapping : 1;
|
||||||
bool fSRGBDecodeDisableSupport : 1;
|
bool fSRGBDecodeDisableSupport : 1;
|
||||||
|
bool fSRGBDecodeDisableAffectsMipmaps : 1;
|
||||||
|
|
||||||
uint32_t fBlitFramebufferFlags;
|
uint32_t fBlitFramebufferFlags;
|
||||||
|
|
||||||
|
@ -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
|
// 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.
|
// 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,
|
// 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.
|
// Vulkan has most of the functionality, but not the mip-mapping part that's being tested here.
|
||||||
GrGLGpu* glGpu = static_cast<GrGLGpu*>(context->getGpu());
|
GrGLGpu* glGpu = static_cast<GrGLGpu*>(context->getGpu());
|
||||||
if (glGpu->glCaps().srgbDecodeDisableSupport()) {
|
if (glGpu->glCaps().srgbDecodeDisableSupport() &&
|
||||||
|
glGpu->glCaps().srgbDecodeDisableAffectsMipmaps()) {
|
||||||
read_and_check_pixels(reporter, l32RenderTargetContext->asTexture().get(), expectedLinear,
|
read_and_check_pixels(reporter, l32RenderTargetContext->asTexture().get(), expectedLinear,
|
||||||
error, "re-render as linear");
|
error, "re-render as linear");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user