Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(120)

Side by Side Diff: src/gpu/gl/GrGpuGL.cpp

Issue 787233003: Add XP to handle the cases where we disable color write. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/gl/GrGpuGL.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 8
9 #include "GrGpuGL.h" 9 #include "GrGpuGL.h"
10 #include "GrGLStencilBuffer.h" 10 #include "GrGLStencilBuffer.h"
(...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after
1337 } 1337 }
1338 return; 1338 return;
1339 } 1339 }
1340 } 1340 }
1341 1341
1342 // See fall through note above 1342 // See fall through note above
1343 this->disableScissor(); 1343 this->disableScissor();
1344 } 1344 }
1345 1345
1346 bool GrGLGpu::flushGLState(const GrOptDrawState& optState) { 1346 bool GrGLGpu::flushGLState(const GrOptDrawState& optState) {
1347 GrXferProcessor::BlendInfo blendInfo;
1348 optState.getXferProcessor()->getBlendInfo(&blendInfo);
1349
1347 this->flushDither(optState.isDitherState()); 1350 this->flushDither(optState.isDitherState());
1348 this->flushColorWriteDisable(optState.isColorWriteDisabled()); 1351 this->flushColorWrite(blendInfo.fWriteColor);
1349 this->flushDrawFace(optState.getDrawFace()); 1352 this->flushDrawFace(optState.getDrawFace());
1350 1353
1351 fCurrentProgram.reset(fProgramCache->getProgram(optState)); 1354 fCurrentProgram.reset(fProgramCache->getProgram(optState));
1352 if (NULL == fCurrentProgram.get()) { 1355 if (NULL == fCurrentProgram.get()) {
1353 SkDEBUGFAIL("Failed to create program!"); 1356 SkDEBUGFAIL("Failed to create program!");
1354 return false; 1357 return false;
1355 } 1358 }
1356 1359
1357 fCurrentProgram.get()->ref(); 1360 fCurrentProgram.get()->ref();
1358 1361
1359 GrGLuint programID = fCurrentProgram->programID(); 1362 GrGLuint programID = fCurrentProgram->programID();
1360 if (fHWProgramID != programID) { 1363 if (fHWProgramID != programID) {
1361 GL_CALL(UseProgram(programID)); 1364 GL_CALL(UseProgram(programID));
1362 fHWProgramID = programID; 1365 fHWProgramID = programID;
1363 } 1366 }
1364 1367
1365 this->flushBlend(optState); 1368 if (blendInfo.fWriteColor) {
1369 this->flushBlend(blendInfo);
1370 }
1366 1371
1367 fCurrentProgram->setData(optState); 1372 fCurrentProgram->setData(optState);
1368 1373
1369 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(optState.getRenderTa rget()); 1374 GrGLRenderTarget* glRT = static_cast<GrGLRenderTarget*>(optState.getRenderTa rget());
1370 this->flushStencil(optState.getStencil()); 1375 this->flushStencil(optState.getStencil());
1371 this->flushScissor(optState.getScissorState(), glRT->getViewport(), glRT->or igin()); 1376 this->flushScissor(optState.getScissorState(), glRT->getViewport(), glRT->or igin());
1372 this->flushHWAAState(glRT, optState.isHWAntialiasState(), 1377 this->flushHWAAState(glRT, optState.isHWAntialiasState(),
1373 kDrawLines_DrawType == optState.drawType()); 1378 kDrawLines_DrawType == optState.drawType());
1374 1379
1375 // This must come after textures are flushed because a texture may need 1380 // This must come after textures are flushed because a texture may need
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
1857 aglSwapBuffers(aglGetCurrentContext()); 1862 aglSwapBuffers(aglGetCurrentContext());
1858 #elif defined(SK_BUILD_FOR_WIN32) 1863 #elif defined(SK_BUILD_FOR_WIN32)
1859 SwapBuf(); 1864 SwapBuf();
1860 int set_a_break_pt_here = 9; 1865 int set_a_break_pt_here = 9;
1861 SwapBuf(); 1866 SwapBuf();
1862 #endif 1867 #endif
1863 #endif 1868 #endif
1864 } 1869 }
1865 1870
1866 void GrGLGpu::onStencilPath(const GrPath* path, const StencilPathState& state) { 1871 void GrGLGpu::onStencilPath(const GrPath* path, const StencilPathState& state) {
1867 this->flushColorWriteDisable(true); 1872 this->flushColorWrite(false);
1868 this->flushDrawFace(GrDrawState::kBoth_DrawFace); 1873 this->flushDrawFace(GrDrawState::kBoth_DrawFace);
1869 1874
1870 GrGLRenderTarget* rt = static_cast<GrGLRenderTarget*>(state.fRenderTarget); 1875 GrGLRenderTarget* rt = static_cast<GrGLRenderTarget*>(state.fRenderTarget);
1871 SkISize size = SkISize::Make(rt->width(), rt->height()); 1876 SkISize size = SkISize::Make(rt->width(), rt->height());
1872 this->glPathRendering()->setProjectionMatrix(*state.fViewMatrix, size, rt->o rigin()); 1877 this->glPathRendering()->setProjectionMatrix(*state.fViewMatrix, size, rt->o rigin());
1873 this->flushScissor(*state.fScissor, rt->getViewport(), rt->origin()); 1878 this->flushScissor(*state.fScissor, rt->getViewport(), rt->origin());
1874 this->flushHWAAState(rt, state.fUseHWAA, false); 1879 this->flushHWAAState(rt, state.fUseHWAA, false);
1875 this->flushRenderTarget(rt, NULL); 1880 this->flushRenderTarget(rt, NULL);
1876 1881
1877 fPathRendering->stencilPath(path, *state.fStencil); 1882 fPathRendering->stencilPath(path, *state.fStencil);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
2048 } else { 2053 } else {
2049 if (kNo_TriState != fMSAAEnabled) { 2054 if (kNo_TriState != fMSAAEnabled) {
2050 GL_CALL(Disable(GR_GL_MULTISAMPLE)); 2055 GL_CALL(Disable(GR_GL_MULTISAMPLE));
2051 fMSAAEnabled = kNo_TriState; 2056 fMSAAEnabled = kNo_TriState;
2052 } 2057 }
2053 } 2058 }
2054 } 2059 }
2055 } 2060 }
2056 } 2061 }
2057 2062
2058 void GrGLGpu::flushBlend(const GrOptDrawState& optState) { 2063 void GrGLGpu::flushBlend(const GrXferProcessor::BlendInfo& blendInfo) {
2059 // Any optimization to disable blending should have already been applied and 2064 // Any optimization to disable blending should have already been applied and
2060 // tweaked the coeffs to (1, 0). 2065 // tweaked the coeffs to (1, 0).
2061 2066
2062 GrXferProcessor::BlendInfo blendInfo;
2063 optState.getXferProcessor()->getBlendInfo(&blendInfo);
2064 GrBlendCoeff srcCoeff = blendInfo.fSrcBlend; 2067 GrBlendCoeff srcCoeff = blendInfo.fSrcBlend;
2065 GrBlendCoeff dstCoeff = blendInfo.fDstBlend; 2068 GrBlendCoeff dstCoeff = blendInfo.fDstBlend;
2066 bool blendOff = kOne_GrBlendCoeff == srcCoeff && kZero_GrBlendCoeff == dstCo eff; 2069 bool blendOff = kOne_GrBlendCoeff == srcCoeff && kZero_GrBlendCoeff == dstCo eff;
2067 if (blendOff) { 2070 if (blendOff) {
2068 if (kNo_TriState != fHWBlendState.fEnabled) { 2071 if (kNo_TriState != fHWBlendState.fEnabled) {
2069 GL_CALL(Disable(GR_GL_BLEND)); 2072 GL_CALL(Disable(GR_GL_BLEND));
2070 fHWBlendState.fEnabled = kNo_TriState; 2073 fHWBlendState.fEnabled = kNo_TriState;
2071 } 2074 }
2072 } else { 2075 } else {
2073 if (kYes_TriState != fHWBlendState.fEnabled) { 2076 if (kYes_TriState != fHWBlendState.fEnabled) {
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
2215 fHWDitherEnabled = kYes_TriState; 2218 fHWDitherEnabled = kYes_TriState;
2216 } 2219 }
2217 } else { 2220 } else {
2218 if (kNo_TriState != fHWDitherEnabled) { 2221 if (kNo_TriState != fHWDitherEnabled) {
2219 GL_CALL(Disable(GR_GL_DITHER)); 2222 GL_CALL(Disable(GR_GL_DITHER));
2220 fHWDitherEnabled = kNo_TriState; 2223 fHWDitherEnabled = kNo_TriState;
2221 } 2224 }
2222 } 2225 }
2223 } 2226 }
2224 2227
2225 void GrGLGpu::flushColorWriteDisable(bool disableColorWrites) { 2228 void GrGLGpu::flushColorWrite(bool writeColor) {
2226 if (disableColorWrites) { 2229 if (!writeColor) {
2227 if (kNo_TriState != fHWWriteToColor) { 2230 if (kNo_TriState != fHWWriteToColor) {
2228 GL_CALL(ColorMask(GR_GL_FALSE, GR_GL_FALSE, 2231 GL_CALL(ColorMask(GR_GL_FALSE, GR_GL_FALSE,
2229 GR_GL_FALSE, GR_GL_FALSE)); 2232 GR_GL_FALSE, GR_GL_FALSE));
2230 fHWWriteToColor = kNo_TriState; 2233 fHWWriteToColor = kNo_TriState;
2231 } 2234 }
2232 } else { 2235 } else {
2233 if (kYes_TriState != fHWWriteToColor) { 2236 if (kYes_TriState != fHWWriteToColor) {
2234 GL_CALL(ColorMask(GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE)); 2237 GL_CALL(ColorMask(GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE, GR_GL_TRUE));
2235 fHWWriteToColor = kYes_TriState; 2238 fHWWriteToColor = kYes_TriState;
2236 } 2239 }
(...skipping 499 matching lines...) Expand 10 before | Expand all | Expand 10 after
2736 this->setVertexArrayID(gpu, 0); 2739 this->setVertexArrayID(gpu, 0);
2737 } 2740 }
2738 int attrCount = gpu->glCaps().maxVertexAttributes(); 2741 int attrCount = gpu->glCaps().maxVertexAttributes();
2739 if (fDefaultVertexArrayAttribState.count() != attrCount) { 2742 if (fDefaultVertexArrayAttribState.count() != attrCount) {
2740 fDefaultVertexArrayAttribState.resize(attrCount); 2743 fDefaultVertexArrayAttribState.resize(attrCount);
2741 } 2744 }
2742 attribState = &fDefaultVertexArrayAttribState; 2745 attribState = &fDefaultVertexArrayAttribState;
2743 } 2746 }
2744 return attribState; 2747 return attribState;
2745 } 2748 }
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGpuGL.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698