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

Side by Side Diff: src/gpu/effects/GrPorterDuffXferProcessor.cpp

Issue 746423007: Draft change to start pulling uniform color into GP (Closed) Base URL: https://skia.googlesource.com/skia.git@no_factories
Patch Set: more cleanup 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
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 "effects/GrPorterDuffXferProcessor.h" 8 #include "effects/GrPorterDuffXferProcessor.h"
9 9
10 #include "GrBlend.h" 10 #include "GrBlend.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 case GrPorterDuffXferProcessor::kCoverageISC_SecondaryOutputType : 59 case GrPorterDuffXferProcessor::kCoverageISC_SecondaryOutputType :
60 fsBuilder->codeAppendf("%s = (vec4(1.0) - %s) * %s;", 60 fsBuilder->codeAppendf("%s = (vec4(1.0) - %s) * %s;",
61 args.fOutputSecondary, args.fInputCol or, 61 args.fOutputSecondary, args.fInputCol or,
62 args.fInputCoverage); 62 args.fInputCoverage);
63 break; 63 break;
64 default: 64 default:
65 SkFAIL("Unexpected Secondary Output"); 65 SkFAIL("Unexpected Secondary Output");
66 } 66 }
67 } 67 }
68 68
69 fsBuilder->codeAppendf("%s = %s * %s;", args.fOutputPrimary, args.fInput Color, 69 switch (xp.primaryOutputType()) {
70 args.fInputCoverage); 70 case GrPorterDuffXferProcessor::kNone_PrimaryOutputType:
71 if (GrPorterDuffXferProcessor::kCombineWithDst_PrimaryOutputType == xp.p rimaryOutputType()){ 71 fsBuilder->codeAppendf("%s = vec4(0);", args.fOutputPrimary);
72 fsBuilder->codeAppendf("%s += (vec4(1.0) - %s) * %s;", args.fOutputP rimary, 72 break;
73 args.fInputCoverage, fsBuilder->dstColor()); 73 case GrPorterDuffXferProcessor::kColor_PrimaryOutputType:
74 fsBuilder->codeAppendf("%s = %s;", args.fOutputPrimary, args.fIn putColor);
75 break;
76 case GrPorterDuffXferProcessor::kCoverage_PrimaryOutputType:
77 fsBuilder->codeAppendf("%s = %s;", args.fOutputPrimary, args.fIn putCoverage);
78 break;
79 case GrPorterDuffXferProcessor::kModulate_PrimaryOutputType:
80 case GrPorterDuffXferProcessor::kCombineWithDst_PrimaryOutputType:
81 fsBuilder->codeAppendf("%s = %s * %s;", args.fOutputPrimary, arg s.fInputColor,
82 args.fInputCoverage);
83 if (GrPorterDuffXferProcessor::kCombineWithDst_PrimaryOutputType ==
84 xp.primaryOutputType()){
85 fsBuilder->codeAppendf("%s += (vec4(1.0) - %s) * %s;", args. fOutputPrimary,
86 args.fInputCoverage, fsBuilder->dstCo lor());
87 }
88 break;
89 default:
90 SkFAIL("Unexpected Primary Output");
74 } 91 }
75 } 92 }
76 93
77 virtual void setData(const GrGLProgramDataManager&, const GrXferProcessor&) SK_OVERRIDE {}; 94 virtual void setData(const GrGLProgramDataManager&, const GrXferProcessor&) SK_OVERRIDE {};
78 95
79 static void GenKey(const GrProcessor& processor, const GrGLCaps& caps, 96 static void GenKey(const GrProcessor& processor, const GrGLCaps& caps,
80 GrProcessorKeyBuilder* b) { 97 GrProcessorKeyBuilder* b) {
81 const GrPorterDuffXferProcessor& xp = processor.cast<GrPorterDuffXferPro cessor>(); 98 const GrPorterDuffXferProcessor& xp = processor.cast<GrPorterDuffXferPro cessor>();
82 b->add32(xp.primaryOutputType()); 99 b->add32(xp.primaryOutputType());
83 b->add32(xp.secondaryOutputType()); 100 b->add32(xp.secondaryOutputType());
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 coverage ); 149 coverage );
133 150
134 this->calcOutputTypes(optFlags, caps, isCoverageDrawing || coveragePOI.isSol idWhite(), 151 this->calcOutputTypes(optFlags, caps, isCoverageDrawing || coveragePOI.isSol idWhite(),
135 colorPOI.readsDst() || coveragePOI.readsDst()); 152 colorPOI.readsDst() || coveragePOI.readsDst());
136 return optFlags; 153 return optFlags;
137 } 154 }
138 155
139 void GrPorterDuffXferProcessor::calcOutputTypes(GrXferProcessor::OptFlags optFla gs, 156 void GrPorterDuffXferProcessor::calcOutputTypes(GrXferProcessor::OptFlags optFla gs,
140 const GrDrawTargetCaps& caps, 157 const GrDrawTargetCaps& caps,
141 bool hasSolidCoverage, bool read sDst) { 158 bool hasSolidCoverage, bool read sDst) {
159 if (optFlags & kClearColorStages_OptFlag) {
160 if (optFlags & kClearCoverageStages_OptFlag) {
161 fPrimaryOutputType = kNone_PrimaryOutputType;
162 return;
163 } else {
164 fPrimaryOutputType = kCoverage_PrimaryOutputType;
165 return;
166 }
167 } else if (optFlags & kClearCoverageStages_OptFlag) {
168 fPrimaryOutputType = kColor_PrimaryOutputType;
169 return;
170 }
171
142 // If we do have coverage determine whether it matters. Dual source blendin g is expensive so 172 // If we do have coverage determine whether it matters. Dual source blendin g is expensive so
143 // we don't do it if we are doing coverage drawing. If we aren't then We al ways do dual source 173 // we don't do it if we are doing coverage drawing. If we aren't then We al ways do dual source
144 // blending if we have any effective coverage stages OR the geometry process or doesn't emits 174 // blending if we have any effective coverage stages OR the geometry process or doesn't emits
145 // solid coverage. 175 // solid coverage.
146 if (!(optFlags & kSetCoverageDrawing_OptFlag) && !hasSolidCoverage) { 176 if (!(optFlags & kSetCoverageDrawing_OptFlag) && !hasSolidCoverage) {
147 if (caps.dualSourceBlendingSupport()) { 177 if (caps.dualSourceBlendingSupport()) {
148 if (kZero_GrBlendCoeff == fDstBlend) { 178 if (kZero_GrBlendCoeff == fDstBlend) {
149 // write the coverage value to second color 179 // write the coverage value to second color
150 fSecondaryOutputType = kCoverage_SecondaryOutputType; 180 fSecondaryOutputType = kCoverage_SecondaryOutputType;
151 fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff; 181 fDstBlend = (GrBlendCoeff)GrGpu::kIS2C_GrBlendCoeff;
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 } while (GrBlendCoeffRefsSrc(src)); 579 } while (GrBlendCoeffRefsSrc(src));
550 580
551 GrBlendCoeff dst; 581 GrBlendCoeff dst;
552 do { 582 do {
553 dst = GrBlendCoeff(random->nextRangeU(kFirstPublicGrBlendCoeff, kLastPub licGrBlendCoeff)); 583 dst = GrBlendCoeff(random->nextRangeU(kFirstPublicGrBlendCoeff, kLastPub licGrBlendCoeff));
554 } while (GrBlendCoeffRefsDst(dst)); 584 } while (GrBlendCoeffRefsDst(dst));
555 585
556 return GrPorterDuffXPFactory::Create(src, dst); 586 return GrPorterDuffXPFactory::Create(src, dst);
557 } 587 }
558 588
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698