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

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

Issue 814933002: Add an InvariantOutput for the XPF. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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 /* 2 /*
3 * Copyright 2014 Google Inc. 3 * Copyright 2014 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "effects/GrCoverageSetOpXP.h" 9 #include "effects/GrCoverageSetOpXP.h"
10 #include "GrColor.h" 10 #include "GrColor.h"
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 default: 179 default:
180 return NULL; 180 return NULL;
181 } 181 }
182 } 182 }
183 183
184 GrXferProcessor* GrCoverageSetOpXPFactory::createXferProcessor(const GrProcOptIn fo& /* colorPOI*/, 184 GrXferProcessor* GrCoverageSetOpXPFactory::createXferProcessor(const GrProcOptIn fo& /* colorPOI*/,
185 const GrProcOptIn fo& covPOI) const { 185 const GrProcOptIn fo& covPOI) const {
186 return GrCoverageSetOpXP::Create(fRegionOp, fInvertCoverage); 186 return GrCoverageSetOpXP::Create(fRegionOp, fInvertCoverage);
187 } 187 }
188 188
189 bool GrCoverageSetOpXPFactory::willBlendWithDst(const GrProcOptInfo& colorPOI, 189 void GrCoverageSetOpXPFactory::getInvariantOutput(const GrProcOptInfo& colorPOI,
190 const GrProcOptInfo& coveragePOI , 190 const GrProcOptInfo& coverageP OI,
191 bool colorWriteDisabled) const { 191 bool colorWriteDisabled,
192 // TODO: once all SkXferEffects are XP's then we will never reads dst here s ince only XP's 192 GrXPFactory::InvariantOutput* output) const {
193 // will readDst and this XP doesn't read dst. 193 if (SkRegion::kReplace_Op == fRegionOp) {
194 if (coveragePOI.readsDst()) { 194 if (coveragePOI.isSolidWhite()) {
195 return true; 195 output->fBlendedColor = GrColor_WHITE;
196 output->fBlendedColorFlags = kRGBA_GrColorComponentFlags;
197 } else {
198 output->fBlendedColorFlags = 0;
199 }
200
201 if (coveragePOI.readsDst()) {
202 output->fWillBlendWithDst = true;
203 } else {
204 output->fWillBlendWithDst = false;
205 }
206 } else {
207 output->fBlendedColorFlags = 0;
208 output->fWillBlendWithDst = true;
196 } 209 }
197
198 // Besides Replace all other SkRegion ops will either have a src coeff that references dst or a
199 // non zero dst coeff
200 return SkRegion::kReplace_Op != fRegionOp;
201 }
202
203 bool GrCoverageSetOpXPFactory::getOpaqueAndKnownColor(const GrProcOptInfo& color POI,
204 const GrProcOptInfo& cover agePOI,
205 GrColor* solidColor,
206 uint32_t* solidColorKnownC omponents) const {
207 if (!coveragePOI.isSolidWhite()) {
208 return false;
209 }
210
211 SkASSERT((NULL == solidColor) == (NULL == solidColorKnownComponents));
212
213 bool opaque = SkRegion::kReplace_Op == fRegionOp;
214 if (solidColor) {
215 if (opaque) {
216 *solidColor = GrColor_WHITE;
217 *solidColorKnownComponents = kRGBA_GrColorComponentFlags;
218 } else {
219 solidColorKnownComponents = 0;
220 }
221 }
222 return opaque;
223 } 210 }
224 211
225 GR_DEFINE_XP_FACTORY_TEST(GrCoverageSetOpXPFactory); 212 GR_DEFINE_XP_FACTORY_TEST(GrCoverageSetOpXPFactory);
226 213
227 GrXPFactory* GrCoverageSetOpXPFactory::TestCreate(SkRandom* random, 214 GrXPFactory* GrCoverageSetOpXPFactory::TestCreate(SkRandom* random,
228 GrContext*, 215 GrContext*,
229 const GrDrawTargetCaps&, 216 const GrDrawTargetCaps&,
230 GrTexture*[]) { 217 GrTexture*[]) {
231 SkRegion::Op regionOp = SkRegion::Op(random->nextULessThan(SkRegion::kLastOp + 1)); 218 SkRegion::Op regionOp = SkRegion::Op(random->nextULessThan(SkRegion::kLastOp + 1));
232 bool invertCoverage = random->nextBool(); 219 bool invertCoverage = random->nextBool();
233 return GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage); 220 return GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage);
234 } 221 }
235 222
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698