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

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

Issue 699943003: Move GrInvariantOutput out of GrProcessor and into its own class. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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 "GrDrawState.h" 10 #include "GrDrawState.h"
11 #include "GrDrawTargetCaps.h" 11 #include "GrDrawTargetCaps.h"
12 #include "GrInvariantOutput.h"
12 #include "gl/GrGpuGL.h" 13 #include "gl/GrGpuGL.h"
13 14
14 GrOptDrawState::GrOptDrawState(const GrDrawState& drawState, 15 GrOptDrawState::GrOptDrawState(const GrDrawState& drawState,
15 BlendOptFlags blendOptFlags, 16 BlendOptFlags blendOptFlags,
16 GrBlendCoeff optSrcCoeff, 17 GrBlendCoeff optSrcCoeff,
17 GrBlendCoeff optDstCoeff, 18 GrBlendCoeff optDstCoeff,
18 GrGpu* gpu, 19 GrGpu* gpu,
19 const GrDeviceCoordTexture* dstCopy, 20 const GrDeviceCoordTexture* dstCopy,
20 GrGpu::DrawType drawType) { 21 GrGpu::DrawType drawType) {
21 fRenderTarget.set(SkSafeRef(drawState.getRenderTarget()), kWrite_GrIOType); 22 fRenderTarget.set(SkSafeRef(drawState.getRenderTarget()), kWrite_GrIOType);
(...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 } 239 }
239 fVACount -= numToRemove; 240 fVACount -= numToRemove;
240 fVAPtr = fOptVA.get(); 241 fVAPtr = fOptVA.get();
241 } 242 }
242 243
243 void GrOptDrawState::computeEffectiveColorStages(const GrDrawState& ds, 244 void GrOptDrawState::computeEffectiveColorStages(const GrDrawState& ds,
244 GrProgramDesc::DescInfo* descIn fo, 245 GrProgramDesc::DescInfo* descIn fo,
245 int* firstColorStageIdx, 246 int* firstColorStageIdx,
246 uint8_t* fixedFunctionVAToRemov e) { 247 uint8_t* fixedFunctionVAToRemov e) {
247 // Set up color and flags for ConstantColorComponent checks 248 // Set up color and flags for ConstantColorComponent checks
248 GrProcessor::InvariantOutput inout; 249 GrInvariantOutput inout;
249 inout.fIsSingleComponent = false; 250 inout.fIsSingleComponent = false;
250 if (!descInfo->hasColorVertexAttribute()) { 251 if (!descInfo->hasColorVertexAttribute()) {
251 inout.fColor = ds.getColor(); 252 inout.fColor = ds.getColor();
252 inout.fValidFlags = kRGBA_GrColorComponentFlags; 253 inout.fValidFlags = kRGBA_GrColorComponentFlags;
253 } else { 254 } else {
254 if (ds.vertexColorsAreOpaque()) { 255 if (ds.vertexColorsAreOpaque()) {
255 inout.fColor = 0xFF << GrColor_SHIFT_A; 256 inout.fColor = 0xFF << GrColor_SHIFT_A;
256 inout.fValidFlags = kA_GrColorComponentFlag; 257 inout.fValidFlags = kA_GrColorComponentFlag;
257 } else { 258 } else {
258 inout.fValidFlags = 0; 259 inout.fValidFlags = 0;
(...skipping 24 matching lines...) Expand all
283 void GrOptDrawState::computeEffectiveCoverageStages(const GrDrawState& ds, 284 void GrOptDrawState::computeEffectiveCoverageStages(const GrDrawState& ds,
284 GrProgramDesc::DescInfo* des cInfo, 285 GrProgramDesc::DescInfo* des cInfo,
285 int* firstCoverageStageIdx) { 286 int* firstCoverageStageIdx) {
286 // We do not try to optimize out constantColor coverage effects here. It is extremely rare 287 // We do not try to optimize out constantColor coverage effects here. It is extremely rare
287 // to have a coverage effect that returns a constant value for all four chan nels. Thus we 288 // to have a coverage effect that returns a constant value for all four chan nels. Thus we
288 // save having to make extra virtual calls by not checking for it. 289 // save having to make extra virtual calls by not checking for it.
289 290
290 // Don't do any optimizations on coverage stages. It should not be the case where we do not use 291 // Don't do any optimizations on coverage stages. It should not be the case where we do not use
291 // input coverage in an effect 292 // input coverage in an effect
292 #ifdef OptCoverageStages 293 #ifdef OptCoverageStages
293 GrProcessor::InvariantOutput inout; 294 GrInvariantOutput inout;
294 for (int i = 0; i < ds.numCoverageStages(); ++i) { 295 for (int i = 0; i < ds.numCoverageStages(); ++i) {
295 const GrFragmentProcessor* fp = ds.getCoverageStage(i).getProcessor(); 296 const GrFragmentProcessor* fp = ds.getCoverageStage(i).getProcessor();
296 fp->computeInvariantOutput(&inout); 297 fp->computeInvariantOutput(&inout);
297 if (!inout.fWillUseInputColor) { 298 if (!inout.fWillUseInputColor) {
298 *firstCoverageStageIdx = i; 299 *firstCoverageStageIdx = i;
299 descInfo->fInputCoverageIsUsed = false; 300 descInfo->fInputCoverageIsUsed = false;
300 } 301 }
301 } 302 }
302 #endif 303 #endif
303 } 304 }
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
382 bool explicitLocalCoords = this->fDesc.header().fLocalCoordAttributeIndex != -1; 383 bool explicitLocalCoords = this->fDesc.header().fLocalCoordAttributeIndex != -1;
383 for (int i = 0; i < this->numFragmentStages(); i++) { 384 for (int i = 0; i < this->numFragmentStages(); i++) {
384 if (!GrFragmentStage::AreCompatible(this->getFragmentStage(i), that.getF ragmentStage(i), 385 if (!GrFragmentStage::AreCompatible(this->getFragmentStage(i), that.getF ragmentStage(i),
385 explicitLocalCoords)) { 386 explicitLocalCoords)) {
386 return false; 387 return false;
387 } 388 }
388 } 389 }
389 return true; 390 return true;
390 } 391 }
391 392
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698