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

Side by Side Diff: src/gpu/GrOptDrawState.cpp

Issue 732693002: Drawstate on stack (Closed) Base URL: https://skia.googlesource.com/skia.git@real_def_gp
Patch Set: ready Created 6 years, 1 month 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
OLDNEW
1 /* 1 /*
2 * Copyright 2014 Google Inc. 2 * Copyright 2014 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 "GrOptDrawState.h" 8 #include "GrOptDrawState.h"
9 9
10 #include "GrDefaultGeoProcFactory.h" 10 #include "GrDefaultGeoProcFactory.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 fFragmentStages.push_back_n(drawState.numCoverageStages() - firstCoverag eStageIdx, 83 fFragmentStages.push_back_n(drawState.numCoverageStages() - firstCoverag eStageIdx,
84 &drawState.getCoverageStage(firstCoverageSta geIdx)); 84 &drawState.getCoverageStage(firstCoverageSta geIdx));
85 } 85 }
86 86
87 this->setOutputStateInfo(drawState, *gpu->caps(), &descInfo); 87 this->setOutputStateInfo(drawState, *gpu->caps(), &descInfo);
88 88
89 // now create a key 89 // now create a key
90 gpu->buildProgramDesc(*this, descInfo, drawType, dstCopy, &fDesc); 90 gpu->buildProgramDesc(*this, descInfo, drawType, dstCopy, &fDesc);
91 }; 91 };
92 92
93 GrOptDrawState* GrOptDrawState::Create(const GrDrawState& drawState, 93 GrOptDrawState* GrOptDrawState::Create(GrGpu* gpu,
94 GrGpu* gpu, 94 const GrDrawState& drawState,
95 const GrDeviceCoordTexture* dstCopy, 95 const GrDeviceCoordTexture* dstCopy,
96 GrGpu::DrawType drawType) { 96 GrGpu::DrawType drawType) {
97 GrBlendCoeff srcCoeff; 97 GrBlendCoeff srcCoeff;
98 GrBlendCoeff dstCoeff; 98 GrBlendCoeff dstCoeff;
99 BlendOptFlags blendFlags = (BlendOptFlags) drawState.getBlendOpts(false, 99 BlendOptFlags blendFlags = (BlendOptFlags) drawState.getBlendOpts(false,
100 &srcCoeff, 100 &srcCoeff,
101 &dstCoeff) ; 101 &dstCoeff) ;
102 102
103 // If our blend coeffs are set to 0,1 we know we will not end up drawing unl ess we are 103 // If our blend coeffs are set to 0,1 we know we will not end up drawing unl ess we are
104 // stenciling. When path rendering the stencil settings are not always set o n the draw state 104 // stenciling. When path rendering the stencil settings are not always set o n the draw state
105 // so we must check the draw type. In cases where we will skip drawing we si mply return a 105 // so we must check the draw type. In cases where we will skip drawing we si mply return a
106 // null GrOptDrawState. 106 // null GrOptDrawState.
107 if (kZero_GrBlendCoeff == srcCoeff && kOne_GrBlendCoeff == dstCoeff && 107 if (kZero_GrBlendCoeff == srcCoeff && kOne_GrBlendCoeff == dstCoeff &&
108 !drawState.getStencil().doesWrite() && GrGpu::kStencilPath_DrawType != d rawType) { 108 !drawState.getStencil().doesWrite() && GrGpu::kStencilPath_DrawType != d rawType) {
109 return NULL; 109 return NULL;
110 } 110 }
111 111
112 return SkNEW_ARGS(GrOptDrawState, (drawState, blendFlags, srcCoeff, 112 return SkNEW_ARGS(GrOptDrawState, (drawState, blendFlags, srcCoeff, dstCoeff , gpu, dstCopy,
113 dstCoeff, gpu, dstCopy, drawType)); 113 drawType));
114 } 114 }
115 115
116 void GrOptDrawState::setOutputStateInfo(const GrDrawState& ds, 116 void GrOptDrawState::setOutputStateInfo(const GrDrawState& ds,
117 const GrDrawTargetCaps& caps, 117 const GrDrawTargetCaps& caps,
118 GrProgramDesc::DescInfo* descInfo) { 118 GrProgramDesc::DescInfo* descInfo) {
119 // Set this default and then possibly change our mind if there is coverage. 119 // Set this default and then possibly change our mind if there is coverage.
120 descInfo->fPrimaryOutputType = GrProgramDesc::kModulate_PrimaryOutputType; 120 descInfo->fPrimaryOutputType = GrProgramDesc::kModulate_PrimaryOutputType;
121 descInfo->fSecondaryOutputType = GrProgramDesc::kNone_SecondaryOutputType; 121 descInfo->fSecondaryOutputType = GrProgramDesc::kNone_SecondaryOutputType;
122 122
123 // If we do have coverage determine whether it matters. Dual source blendin g is expensive so 123 // If we do have coverage determine whether it matters. Dual source blendin g is expensive so
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 bool explicitLocalCoords = this->fDesc.header().fLocalCoordAttributeIndex != -1; 359 bool explicitLocalCoords = this->fDesc.header().fLocalCoordAttributeIndex != -1;
360 for (int i = 0; i < this->numFragmentStages(); i++) { 360 for (int i = 0; i < this->numFragmentStages(); i++) {
361 if (!GrFragmentStage::AreCompatible(this->getFragmentStage(i), that.getF ragmentStage(i), 361 if (!GrFragmentStage::AreCompatible(this->getFragmentStage(i), that.getF ragmentStage(i),
362 explicitLocalCoords)) { 362 explicitLocalCoords)) {
363 return false; 363 return false;
364 } 364 }
365 } 365 }
366 return true; 366 return true;
367 } 367 }
368 368
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698