| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "GrGLGpu.h" | 8 #include "GrGLGpu.h" |
| 9 #include "GrGLGLSL.h" | 9 #include "GrGLGLSL.h" |
| 10 #include "GrGLStencilAttachment.h" | 10 #include "GrGLStencilAttachment.h" |
| (...skipping 2096 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2107 this->bindTexture(i, textureAccesses[i]->getParams(), allowSRGB, | 2107 this->bindTexture(i, textureAccesses[i]->getParams(), allowSRGB, |
| 2108 static_cast<GrGLTexture*>(textureAccesses[i]->getTextu
re())); | 2108 static_cast<GrGLTexture*>(textureAccesses[i]->getTextu
re())); |
| 2109 } | 2109 } |
| 2110 | 2110 |
| 2111 this->flushStencil(pipeline.getStencil()); | 2111 this->flushStencil(pipeline.getStencil()); |
| 2112 this->flushScissor(pipeline.getScissorState(), glRT->getViewport(), glRT->or
igin()); | 2112 this->flushScissor(pipeline.getScissorState(), glRT->getViewport(), glRT->or
igin()); |
| 2113 this->flushHWAAState(glRT, pipeline.isHWAntialiasState(), !pipeline.getStenc
il().isDisabled()); | 2113 this->flushHWAAState(glRT, pipeline.isHWAntialiasState(), !pipeline.getStenc
il().isDisabled()); |
| 2114 | 2114 |
| 2115 // This must come after textures are flushed because a texture may need | 2115 // This must come after textures are flushed because a texture may need |
| 2116 // to be msaa-resolved (which will modify bound FBO state). | 2116 // to be msaa-resolved (which will modify bound FBO state). |
| 2117 this->flushRenderTarget(glRT, nullptr); | 2117 this->flushRenderTarget(glRT, nullptr, pipeline.getDisableOutputConversionTo
SRGB()); |
| 2118 | 2118 |
| 2119 return true; | 2119 return true; |
| 2120 } | 2120 } |
| 2121 | 2121 |
| 2122 void GrGLGpu::setupGeometry(const GrPrimitiveProcessor& primProc, | 2122 void GrGLGpu::setupGeometry(const GrPrimitiveProcessor& primProc, |
| 2123 const GrNonInstancedMesh& mesh, | 2123 const GrNonInstancedMesh& mesh, |
| 2124 size_t* indexOffsetInBytes) { | 2124 size_t* indexOffsetInBytes) { |
| 2125 GrGLVertexBuffer* vbuf; | 2125 GrGLVertexBuffer* vbuf; |
| 2126 vbuf = (GrGLVertexBuffer*) mesh.vertexBuffer(); | 2126 vbuf = (GrGLVertexBuffer*) mesh.vertexBuffer(); |
| 2127 | 2127 |
| (...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2826 SkASSERT(fMSAAEnabled != kYes_TriState); | 2826 SkASSERT(fMSAAEnabled != kYes_TriState); |
| 2827 GL_CALL(Enable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); | 2827 GL_CALL(Enable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); |
| 2828 this->stampRectUsingProgram(fPLSSetupProgram.fProgram, | 2828 this->stampRectUsingProgram(fPLSSetupProgram.fProgram, |
| 2829 SkRect::MakeXYWH(-100.0f, -100.0f, 0.01f, 0.
01f), | 2829 SkRect::MakeXYWH(-100.0f, -100.0f, 0.01f, 0.
01f), |
| 2830 fPLSSetupProgram.fPosXformUniform, | 2830 fPLSSetupProgram.fPosXformUniform, |
| 2831 fPLSSetupProgram.fArrayBuffer); | 2831 fPLSSetupProgram.fArrayBuffer); |
| 2832 GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); | 2832 GL_CALL(Disable(GR_GL_SHADER_PIXEL_LOCAL_STORAGE)); |
| 2833 } | 2833 } |
| 2834 } | 2834 } |
| 2835 | 2835 |
| 2836 void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bounds)
{ | 2836 void GrGLGpu::flushRenderTarget(GrGLRenderTarget* target, const SkIRect* bounds,
bool disableSRGB) { |
| 2837 SkASSERT(target); | 2837 SkASSERT(target); |
| 2838 | 2838 |
| 2839 uint32_t rtID = target->getUniqueID(); | 2839 uint32_t rtID = target->getUniqueID(); |
| 2840 if (fHWBoundRenderTargetUniqueID != rtID) { | 2840 if (fHWBoundRenderTargetUniqueID != rtID) { |
| 2841 fStats.incRenderTargetBinds(); | 2841 fStats.incRenderTargetBinds(); |
| 2842 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, target->renderFBOID())); | 2842 GL_CALL(BindFramebuffer(GR_GL_FRAMEBUFFER, target->renderFBOID())); |
| 2843 #ifdef SK_DEBUG | 2843 #ifdef SK_DEBUG |
| 2844 // don't do this check in Chromium -- this is causing | 2844 // don't do this check in Chromium -- this is causing |
| 2845 // lots of repeated command buffer flushes when the compositor is | 2845 // lots of repeated command buffer flushes when the compositor is |
| 2846 // rendering with Ganesh, which is really slow; even too slow for | 2846 // rendering with Ganesh, which is really slow; even too slow for |
| 2847 // Debug mode. | 2847 // Debug mode. |
| 2848 if (kChromium_GrGLDriver != this->glContext().driver()) { | 2848 if (kChromium_GrGLDriver != this->glContext().driver()) { |
| 2849 GrGLenum status; | 2849 GrGLenum status; |
| 2850 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); | 2850 GL_CALL_RET(status, CheckFramebufferStatus(GR_GL_FRAMEBUFFER)); |
| 2851 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { | 2851 if (status != GR_GL_FRAMEBUFFER_COMPLETE) { |
| 2852 SkDebugf("GrGLGpu::flushRenderTarget glCheckFramebufferStatus %x
\n", status); | 2852 SkDebugf("GrGLGpu::flushRenderTarget glCheckFramebufferStatus %x
\n", status); |
| 2853 } | 2853 } |
| 2854 } | 2854 } |
| 2855 #endif | 2855 #endif |
| 2856 fHWBoundRenderTargetUniqueID = rtID; | 2856 fHWBoundRenderTargetUniqueID = rtID; |
| 2857 this->flushViewport(target->getViewport()); | 2857 this->flushViewport(target->getViewport()); |
| 2858 if (this->glCaps().srgbWriteControl()) { | 2858 } |
| 2859 bool enableSRGBWrite = GrPixelConfigIsSRGB(target->config()); | 2859 |
| 2860 if (enableSRGBWrite && kYes_TriState != fHWSRGBFramebuffer) { | 2860 if (this->glCaps().srgbSupport()) { |
| 2861 GL_CALL(Enable(GR_GL_FRAMEBUFFER_SRGB)); | 2861 bool enableSRGBWrite = GrPixelConfigIsSRGB(target->config()) && !disable
SRGB; |
| 2862 fHWSRGBFramebuffer = kYes_TriState; | 2862 if (enableSRGBWrite && kYes_TriState != fHWSRGBFramebuffer) { |
| 2863 } else if (!enableSRGBWrite && kNo_TriState != fHWSRGBFramebuffer) { | 2863 GL_CALL(Enable(GR_GL_FRAMEBUFFER_SRGB)); |
| 2864 GL_CALL(Disable(GR_GL_FRAMEBUFFER_SRGB)); | 2864 fHWSRGBFramebuffer = kYes_TriState; |
| 2865 fHWSRGBFramebuffer = kNo_TriState; | 2865 } else if (!enableSRGBWrite && kNo_TriState != fHWSRGBFramebuffer) { |
| 2866 } | 2866 GL_CALL(Disable(GR_GL_FRAMEBUFFER_SRGB)); |
| 2867 fHWSRGBFramebuffer = kNo_TriState; |
| 2867 } | 2868 } |
| 2868 } | 2869 } |
| 2870 |
| 2869 this->didWriteToSurface(target, bounds); | 2871 this->didWriteToSurface(target, bounds); |
| 2870 } | 2872 } |
| 2871 | 2873 |
| 2872 void GrGLGpu::flushViewport(const GrGLIRect& viewport) { | 2874 void GrGLGpu::flushViewport(const GrGLIRect& viewport) { |
| 2873 if (fHWViewport != viewport) { | 2875 if (fHWViewport != viewport) { |
| 2874 viewport.pushToGLViewport(this->glInterface()); | 2876 viewport.pushToGLViewport(this->glInterface()); |
| 2875 fHWViewport = viewport; | 2877 fHWViewport = viewport; |
| 2876 } | 2878 } |
| 2877 } | 2879 } |
| 2878 | 2880 |
| (...skipping 1536 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4415 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || | 4417 if (GR_GL_TEXTURE_EXTERNAL == glTexture->target() || |
| 4416 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { | 4418 GR_GL_TEXTURE_RECTANGLE == glTexture->target()) { |
| 4417 copyParams->fFilter = GrTextureParams::kNone_FilterMode; | 4419 copyParams->fFilter = GrTextureParams::kNone_FilterMode; |
| 4418 copyParams->fWidth = texture->width(); | 4420 copyParams->fWidth = texture->width(); |
| 4419 copyParams->fHeight = texture->height(); | 4421 copyParams->fHeight = texture->height(); |
| 4420 return true; | 4422 return true; |
| 4421 } | 4423 } |
| 4422 } | 4424 } |
| 4423 return false; | 4425 return false; |
| 4424 } | 4426 } |
| OLD | NEW |