Chromium Code Reviews| Index: src/gpu/gl/GrGLGpu.cpp |
| diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp |
| index 3a293610f2f8e34fcc79c41462822274207c1bae..3bbc77aa9b128529bb66e27804466b64bf8eb4b5 100644 |
| --- a/src/gpu/gl/GrGLGpu.cpp |
| +++ b/src/gpu/gl/GrGLGpu.cpp |
| @@ -2114,7 +2114,7 @@ bool GrGLGpu::flushGLState(const GrPipeline& pipeline, const GrPrimitiveProcesso |
| // This must come after textures are flushed because a texture may need |
| // to be msaa-resolved (which will modify bound FBO state). |
| - this->flushRenderTarget(glRT, nullptr); |
| + this->flushRenderTarget(glRT, nullptr, pipeline.getDisableOutputConversionToSRGB()); |
| return true; |
| } |
| @@ -2833,7 +2833,7 @@ void GrGLGpu::finishDrawTarget() { |
| } |
| } |
| -void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bounds) { |
| +void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bounds, bool disableSRGB) { |
| SkASSERT(target); |
| uint32_t rtID = target->getUniqueID(); |
| @@ -2855,17 +2855,19 @@ void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bounds) |
| #endif |
| fHWBoundRenderTargetUniqueID = rtID; |
| this->flushViewport(target->getViewport()); |
| - if (this->glCaps().srgbWriteControl()) { |
| - bool enableSRGBWrite = GrPixelConfigIsSRGB(target->config()); |
| - if (enableSRGBWrite && kYes_TriState != fHWSRGBFramebuffer) { |
| - GL_CALL(Enable(GR_GL_FRAMEBUFFER_SRGB)); |
| - fHWSRGBFramebuffer = kYes_TriState; |
| - } else if (!enableSRGBWrite && kNo_TriState != fHWSRGBFramebuffer) { |
| - GL_CALL(Disable(GR_GL_FRAMEBUFFER_SRGB)); |
| - fHWSRGBFramebuffer = kNo_TriState; |
| - } |
| + } |
| + |
| + if (this->glCaps().srgbSupport()) { |
|
Brian Osman
2016/03/24 18:39:17
Easy-to-miss: Had to promote this code out one sco
bsalomon
2016/03/25 01:29:54
right, nice catch.
|
| + bool enableSRGBWrite = GrPixelConfigIsSRGB(target->config()) && !disableSRGB; |
| + if (enableSRGBWrite && kYes_TriState != fHWSRGBFramebuffer) { |
| + GL_CALL(Enable(GR_GL_FRAMEBUFFER_SRGB)); |
| + fHWSRGBFramebuffer = kYes_TriState; |
| + } else if (!enableSRGBWrite && kNo_TriState != fHWSRGBFramebuffer) { |
| + GL_CALL(Disable(GR_GL_FRAMEBUFFER_SRGB)); |
| + fHWSRGBFramebuffer = kNo_TriState; |
| } |
| } |
| + |
| this->didWriteToSurface(target, bounds); |
| } |