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

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

Issue 1110993002: Revert of removing equality / compute invariant loops from GrGeometryProcessors (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanup1
Patch Set: Created 5 years, 7 months 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/effects/GrDistanceFieldGeoProc.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 2013 Google Inc. 2 * Copyright 2013 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 "GrDistanceFieldGeoProc.h" 8 #include "GrDistanceFieldGeoProc.h"
9 #include "GrFontAtlasSizes.h" 9 #include "GrFontAtlasSizes.h"
10 #include "GrInvariantOutput.h" 10 #include "GrInvariantOutput.h"
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 189
190 /////////////////////////////////////////////////////////////////////////////// 190 ///////////////////////////////////////////////////////////////////////////////
191 191
192 GrDistanceFieldA8TextGeoProc::GrDistanceFieldA8TextGeoProc(GrColor color, 192 GrDistanceFieldA8TextGeoProc::GrDistanceFieldA8TextGeoProc(GrColor color,
193 const SkMatrix& viewM atrix, 193 const SkMatrix& viewM atrix,
194 GrTexture* texture, 194 GrTexture* texture,
195 const GrTextureParams & params, 195 const GrTextureParams & params,
196 #ifdef SK_GAMMA_APPLY_TO_A8 196 #ifdef SK_GAMMA_APPLY_TO_A8
197 float distanceAdjust, 197 float distanceAdjust,
198 #endif 198 #endif
199 uint32_t flags) 199 uint32_t flags, bool opaqueVertexColors)
200 : INHERITED(color, viewMatrix, SkMatrix::I()) 200 : INHERITED(color, viewMatrix, SkMatrix::I(), opaqueVertexColors)
201 , fTextureAccess(texture, params) 201 , fTextureAccess(texture, params)
202 #ifdef SK_GAMMA_APPLY_TO_A8 202 #ifdef SK_GAMMA_APPLY_TO_A8
203 , fDistanceAdjust(distanceAdjust) 203 , fDistanceAdjust(distanceAdjust)
204 #endif 204 #endif
205 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 205 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
206 , fInColor(NULL) { 206 , fInColor(NULL) {
207 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 207 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
208 this->initClassID<GrDistanceFieldA8TextGeoProc>(); 208 this->initClassID<GrDistanceFieldA8TextGeoProc>();
209 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType)); 209 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType));
210 if (flags & kColorAttr_DistanceFieldEffectFlag) { 210 if (flags & kColorAttr_DistanceFieldEffectFlag) {
211 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA ttribType)); 211 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA ttribType));
212 this->setHasVertexColor();
212 } 213 }
213 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", 214 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
214 kVec2s_GrVertexAttribT ype)); 215 kVec2s_GrVertexAttribT ype));
215 this->addTextureAccess(&fTextureAccess); 216 this->addTextureAccess(&fTextureAccess);
216 } 217 }
217 218
219 bool GrDistanceFieldA8TextGeoProc::onIsEqual(const GrGeometryProcessor& other) c onst {
220 const GrDistanceFieldA8TextGeoProc& cte = other.cast<GrDistanceFieldA8TextGe oProc>();
221 return
222 #ifdef SK_GAMMA_APPLY_TO_A8
223 fDistanceAdjust == cte.fDistanceAdjust &&
224 #endif
225 fFlags == cte.fFlags;
226 }
227
228 void GrDistanceFieldA8TextGeoProc::onGetInvariantOutputCoverage(GrInitInvariantO utput* out) const {
229 out->setUnknownSingleComponent();
230 }
231
218 void GrDistanceFieldA8TextGeoProc::getGLProcessorKey(const GrBatchTracker& bt, 232 void GrDistanceFieldA8TextGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
219 const GrGLCaps& caps, 233 const GrGLCaps& caps,
220 GrProcessorKeyBuilder* b) c onst { 234 GrProcessorKeyBuilder* b) c onst {
221 GrGLDistanceFieldA8TextGeoProc::GenKey(*this, bt, caps, b); 235 GrGLDistanceFieldA8TextGeoProc::GenKey(*this, bt, caps, b);
222 } 236 }
223 237
224 GrGLPrimitiveProcessor* 238 GrGLPrimitiveProcessor*
225 GrDistanceFieldA8TextGeoProc::createGLInstance(const GrBatchTracker& bt, 239 GrDistanceFieldA8TextGeoProc::createGLInstance(const GrBatchTracker& bt,
226 const GrGLCaps&) const { 240 const GrGLCaps&) const {
227 return SkNEW_ARGS(GrGLDistanceFieldA8TextGeoProc, (*this, bt)); 241 return SkNEW_ARGS(GrGLDistanceFieldA8TextGeoProc, (*this, bt));
228 } 242 }
229 243
230 void GrDistanceFieldA8TextGeoProc::initBatchTracker(GrBatchTracker* bt, 244 void GrDistanceFieldA8TextGeoProc::initBatchTracker(GrBatchTracker* bt,
231 const GrPipelineInfo& init) const { 245 const GrPipelineInfo& init) const {
232 DistanceFieldBatchTracker* local = bt->cast<DistanceFieldBatchTracker>(); 246 DistanceFieldBatchTracker* local = bt->cast<DistanceFieldBatchTracker>();
233 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, 247 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it,
234 SkToBool(fInColor)); 248 SkToBool(fInColor));
235 local->fUsesLocalCoords = init.fUsesLocalCoords; 249 local->fUsesLocalCoords = init.fUsesLocalCoords;
236 } 250 }
237 251
252 bool GrDistanceFieldA8TextGeoProc::onCanMakeEqual(const GrBatchTracker& m,
253 const GrGeometryProcessor& tha t,
254 const GrBatchTracker& t) const {
255 const DistanceFieldBatchTracker& mine = m.cast<DistanceFieldBatchTracker>();
256 const DistanceFieldBatchTracker& theirs = t.cast<DistanceFieldBatchTracker>( );
257 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
258 that, theirs.fUsesLocalCoords) &&
259 CanCombineOutput(mine.fInputColorType, mine.fColor,
260 theirs.fInputColorType, theirs.fColor);
261 }
262
238 /////////////////////////////////////////////////////////////////////////////// 263 ///////////////////////////////////////////////////////////////////////////////
239 264
240 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldA8TextGeoProc); 265 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldA8TextGeoProc);
241 266
242 GrGeometryProcessor* GrDistanceFieldA8TextGeoProc::TestCreate(SkRandom* random, 267 GrGeometryProcessor* GrDistanceFieldA8TextGeoProc::TestCreate(SkRandom* random,
243 GrContext*, 268 GrContext*,
244 const GrDrawTarget Caps&, 269 const GrDrawTarget Caps&,
245 GrTexture* texture s[]) { 270 GrTexture* texture s[]) {
246 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : 271 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
247 GrProcessorUnitTest::kAlphaTextureIdx; 272 GrProcessorUnitTest::kAlphaTextureIdx;
248 static const SkShader::TileMode kTileModes[] = { 273 static const SkShader::TileMode kTileModes[] = {
249 SkShader::kClamp_TileMode, 274 SkShader::kClamp_TileMode,
250 SkShader::kRepeat_TileMode, 275 SkShader::kRepeat_TileMode,
251 SkShader::kMirror_TileMode, 276 SkShader::kMirror_TileMode,
252 }; 277 };
253 SkShader::TileMode tileModes[] = { 278 SkShader::TileMode tileModes[] = {
254 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], 279 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
255 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], 280 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
256 }; 281 };
257 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil erp_FilterMode : 282 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil erp_FilterMode :
258 GrTextureParams::kNon e_FilterMode); 283 GrTextureParams::kNon e_FilterMode);
259 284
260 return GrDistanceFieldA8TextGeoProc::Create(GrRandomColor(random), 285 return GrDistanceFieldA8TextGeoProc::Create(GrRandomColor(random),
261 GrProcessorUnitTest::TestMatrix( random), 286 GrProcessorUnitTest::TestMatrix( random),
262 textures[texIdx], params, 287 textures[texIdx], params,
263 #ifdef SK_GAMMA_APPLY_TO_A8 288 #ifdef SK_GAMMA_APPLY_TO_A8
264 random->nextF(), 289 random->nextF(),
265 #endif 290 #endif
266 random->nextBool() ? 291 random->nextBool() ?
267 kSimilarity_DistanceFieldEff ectFlag : 0); 292 kSimilarity_DistanceFieldEff ectFlag : 0,
293 random->nextBool());
268 } 294 }
269 295
270 /////////////////////////////////////////////////////////////////////////////// 296 ///////////////////////////////////////////////////////////////////////////////
271 297
272 struct DistanceFieldPathBatchTracker { 298 struct DistanceFieldPathBatchTracker {
273 GrGPInput fInputColorType; 299 GrGPInput fInputColorType;
274 GrColor fColor; 300 GrColor fColor;
275 bool fUsesLocalCoords; 301 bool fUsesLocalCoords;
276 }; 302 };
277 303
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 typedef GrGLGeometryProcessor INHERITED; 441 typedef GrGLGeometryProcessor INHERITED;
416 }; 442 };
417 443
418 /////////////////////////////////////////////////////////////////////////////// 444 ///////////////////////////////////////////////////////////////////////////////
419 445
420 GrDistanceFieldPathGeoProc::GrDistanceFieldPathGeoProc( 446 GrDistanceFieldPathGeoProc::GrDistanceFieldPathGeoProc(
421 GrColor color, 447 GrColor color,
422 const SkMatrix& viewMatrix, 448 const SkMatrix& viewMatrix,
423 GrTexture* texture, 449 GrTexture* texture,
424 const GrTextureParams& params, 450 const GrTextureParams& params,
425 uint32_t flags) 451 uint32_t flags,
426 : INHERITED(color, viewMatrix, SkMatrix::I()) 452 bool opaqueVertexColors)
453 : INHERITED(color, viewMatrix, SkMatrix::I(), opaqueVertexColors)
427 , fTextureAccess(texture, params) 454 , fTextureAccess(texture, params)
428 , fFlags(flags & kNonLCD_DistanceFieldEffectMask) 455 , fFlags(flags & kNonLCD_DistanceFieldEffectMask)
429 , fInColor(NULL) { 456 , fInColor(NULL) {
430 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask)); 457 SkASSERT(!(flags & ~kNonLCD_DistanceFieldEffectMask));
431 this->initClassID<GrDistanceFieldPathGeoProc>(); 458 this->initClassID<GrDistanceFieldPathGeoProc>();
432 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType)); 459 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType));
433 if (flags & kColorAttr_DistanceFieldEffectFlag) { 460 if (flags & kColorAttr_DistanceFieldEffectFlag) {
434 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA ttribType)); 461 fInColor = &this->addVertexAttrib(Attribute("inColor", kVec4ub_GrVertexA ttribType));
462 this->setHasVertexColor();
435 } 463 }
436 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", 464 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
437 kVec2f_GrVertexAttribT ype)); 465 kVec2f_GrVertexAttribT ype));
438 this->addTextureAccess(&fTextureAccess); 466 this->addTextureAccess(&fTextureAccess);
439 } 467 }
440 468
469 bool GrDistanceFieldPathGeoProc::onIsEqual(const GrGeometryProcessor& other) con st {
470 const GrDistanceFieldPathGeoProc& cte = other.cast<GrDistanceFieldPathGeoPro c>();
471 return fFlags == cte.fFlags;
472 }
473
474 void GrDistanceFieldPathGeoProc::onGetInvariantOutputCoverage(GrInitInvariantOut put* out) const {
475 out->setUnknownSingleComponent();
476 }
477
441 void GrDistanceFieldPathGeoProc::getGLProcessorKey(const GrBatchTracker& bt, 478 void GrDistanceFieldPathGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
442 const GrGLCaps& caps, 479 const GrGLCaps& caps,
443 GrProcessorKeyBuilder* b) con st { 480 GrProcessorKeyBuilder* b) con st {
444 GrGLDistanceFieldPathGeoProc::GenKey(*this, bt, caps, b); 481 GrGLDistanceFieldPathGeoProc::GenKey(*this, bt, caps, b);
445 } 482 }
446 483
447 GrGLPrimitiveProcessor* 484 GrGLPrimitiveProcessor*
448 GrDistanceFieldPathGeoProc::createGLInstance(const GrBatchTracker& bt, const GrG LCaps&) const { 485 GrDistanceFieldPathGeoProc::createGLInstance(const GrBatchTracker& bt, const GrG LCaps&) const {
449 return SkNEW_ARGS(GrGLDistanceFieldPathGeoProc, (*this, bt)); 486 return SkNEW_ARGS(GrGLDistanceFieldPathGeoProc, (*this, bt));
450 } 487 }
451 488
452 void GrDistanceFieldPathGeoProc::initBatchTracker(GrBatchTracker* bt, 489 void GrDistanceFieldPathGeoProc::initBatchTracker(GrBatchTracker* bt,
453 const GrPipelineInfo& init) co nst { 490 const GrPipelineInfo& init) co nst {
454 DistanceFieldPathBatchTracker* local = bt->cast<DistanceFieldPathBatchTracke r>(); 491 DistanceFieldPathBatchTracker* local = bt->cast<DistanceFieldPathBatchTracke r>();
455 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, 492 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it,
456 SkToBool(fInColor)); 493 SkToBool(fInColor));
457 local->fUsesLocalCoords = init.fUsesLocalCoords; 494 local->fUsesLocalCoords = init.fUsesLocalCoords;
458 } 495 }
459 496
497 bool GrDistanceFieldPathGeoProc::onCanMakeEqual(const GrBatchTracker& m,
498 const GrGeometryProcessor& that,
499 const GrBatchTracker& t) const {
500 const DistanceFieldPathBatchTracker& mine = m.cast<DistanceFieldPathBatchTra cker>();
501 const DistanceFieldPathBatchTracker& theirs = t.cast<DistanceFieldPathBatchT racker>();
502 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
503 that, theirs.fUsesLocalCoords) &&
504 CanCombineOutput(mine.fInputColorType, mine.fColor,
505 theirs.fInputColorType, theirs.fColor);
506 }
507
460 /////////////////////////////////////////////////////////////////////////////// 508 ///////////////////////////////////////////////////////////////////////////////
461 509
462 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldPathGeoProc); 510 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldPathGeoProc);
463 511
464 GrGeometryProcessor* GrDistanceFieldPathGeoProc::TestCreate(SkRandom* random, 512 GrGeometryProcessor* GrDistanceFieldPathGeoProc::TestCreate(SkRandom* random,
465 GrContext*, 513 GrContext*,
466 const GrDrawTargetCa ps&, 514 const GrDrawTargetCa ps&,
467 GrTexture* textures[ ]) { 515 GrTexture* textures[ ]) {
468 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx 516 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx
469 : GrProcessorUnitTest::kAlphaTextureIdx; 517 : GrProcessorUnitTest::kAlphaTextureIdx;
470 static const SkShader::TileMode kTileModes[] = { 518 static const SkShader::TileMode kTileModes[] = {
471 SkShader::kClamp_TileMode, 519 SkShader::kClamp_TileMode,
472 SkShader::kRepeat_TileMode, 520 SkShader::kRepeat_TileMode,
473 SkShader::kMirror_TileMode, 521 SkShader::kMirror_TileMode,
474 }; 522 };
475 SkShader::TileMode tileModes[] = { 523 SkShader::TileMode tileModes[] = {
476 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], 524 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
477 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))], 525 kTileModes[random->nextULessThan(SK_ARRAY_COUNT(kTileModes))],
478 }; 526 };
479 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil erp_FilterMode 527 GrTextureParams params(tileModes, random->nextBool() ? GrTextureParams::kBil erp_FilterMode
480 : GrTextureParams::kNon e_FilterMode); 528 : GrTextureParams::kNon e_FilterMode);
481 529
482 return GrDistanceFieldPathGeoProc::Create(GrRandomColor(random), 530 return GrDistanceFieldPathGeoProc::Create(GrRandomColor(random),
483 GrProcessorUnitTest::TestMatrix(ra ndom), 531 GrProcessorUnitTest::TestMatrix(ra ndom),
484 textures[texIdx], 532 textures[texIdx],
485 params, 533 params,
486 random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0); 534 random->nextBool() ? kSimilarity_DistanceFieldEffectFlag : 0, random->ne xtBool());
487 } 535 }
488 536
489 /////////////////////////////////////////////////////////////////////////////// 537 ///////////////////////////////////////////////////////////////////////////////
490 538
491 struct DistanceFieldLCDBatchTracker { 539 struct DistanceFieldLCDBatchTracker {
492 GrGPInput fInputColorType; 540 GrGPInput fInputColorType;
493 GrColor fColor; 541 GrColor fColor;
494 bool fUsesLocalCoords; 542 bool fUsesLocalCoords;
495 }; 543 };
496 544
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 , fDistanceAdjust(distanceAdjust) 744 , fDistanceAdjust(distanceAdjust)
697 , fFlags(flags & kLCD_DistanceFieldEffectMask){ 745 , fFlags(flags & kLCD_DistanceFieldEffectMask){
698 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan ceFieldEffectFlag)); 746 SkASSERT(!(flags & ~kLCD_DistanceFieldEffectMask) && (flags & kUseLCD_Distan ceFieldEffectFlag));
699 this->initClassID<GrDistanceFieldLCDTextGeoProc>(); 747 this->initClassID<GrDistanceFieldLCDTextGeoProc>();
700 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType)); 748 fInPosition = &this->addVertexAttrib(Attribute("inPosition", kVec2f_GrVertex AttribType));
701 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords", 749 fInTextureCoords = &this->addVertexAttrib(Attribute("inTextureCoords",
702 kVec2s_GrVertexAttribT ype)); 750 kVec2s_GrVertexAttribT ype));
703 this->addTextureAccess(&fTextureAccess); 751 this->addTextureAccess(&fTextureAccess);
704 } 752 }
705 753
754 bool GrDistanceFieldLCDTextGeoProc::onIsEqual(const GrGeometryProcessor& other) const {
755 const GrDistanceFieldLCDTextGeoProc& cte = other.cast<GrDistanceFieldLCDText GeoProc>();
756 return (fDistanceAdjust == cte.fDistanceAdjust &&
757 fFlags == cte.fFlags);
758 }
759
760 void GrDistanceFieldLCDTextGeoProc::onGetInvariantOutputCoverage(GrInitInvariant Output* out) const {
761 out->setUnknownFourComponents();
762 out->setUsingLCDCoverage();
763 }
764
706 void GrDistanceFieldLCDTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt, 765 void GrDistanceFieldLCDTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
707 const GrGLCaps& caps, 766 const GrGLCaps& caps,
708 GrProcessorKeyBuilder* b) const { 767 GrProcessorKeyBuilder* b) const {
709 GrGLDistanceFieldLCDTextGeoProc::GenKey(*this, bt, caps, b); 768 GrGLDistanceFieldLCDTextGeoProc::GenKey(*this, bt, caps, b);
710 } 769 }
711 770
712 GrGLPrimitiveProcessor* 771 GrGLPrimitiveProcessor*
713 GrDistanceFieldLCDTextGeoProc::createGLInstance(const GrBatchTracker& bt, 772 GrDistanceFieldLCDTextGeoProc::createGLInstance(const GrBatchTracker& bt,
714 const GrGLCaps&) const { 773 const GrGLCaps&) const {
715 return SkNEW_ARGS(GrGLDistanceFieldLCDTextGeoProc, (*this, bt)); 774 return SkNEW_ARGS(GrGLDistanceFieldLCDTextGeoProc, (*this, bt));
716 } 775 }
717 776
718 void GrDistanceFieldLCDTextGeoProc::initBatchTracker(GrBatchTracker* bt, 777 void GrDistanceFieldLCDTextGeoProc::initBatchTracker(GrBatchTracker* bt,
719 const GrPipelineInfo& init) const { 778 const GrPipelineInfo& init) const {
720 DistanceFieldLCDBatchTracker* local = bt->cast<DistanceFieldLCDBatchTracker> (); 779 DistanceFieldLCDBatchTracker* local = bt->cast<DistanceFieldLCDBatchTracker> ();
721 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false); 780 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false);
722 local->fUsesLocalCoords = init.fUsesLocalCoords; 781 local->fUsesLocalCoords = init.fUsesLocalCoords;
723 } 782 }
724 783
784 bool GrDistanceFieldLCDTextGeoProc::onCanMakeEqual(const GrBatchTracker& m,
785 const GrGeometryProcessor& th at,
786 const GrBatchTracker& t) cons t {
787 const DistanceFieldLCDBatchTracker& mine = m.cast<DistanceFieldLCDBatchTrack er>();
788 const DistanceFieldLCDBatchTracker& theirs = t.cast<DistanceFieldLCDBatchTra cker>();
789 return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords,
790 that, theirs.fUsesLocalCoords) &&
791 CanCombineOutput(mine.fInputColorType, mine.fColor,
792 theirs.fInputColorType, theirs.fColor);
793 }
794
725 /////////////////////////////////////////////////////////////////////////////// 795 ///////////////////////////////////////////////////////////////////////////////
726 796
727 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldLCDTextGeoProc); 797 GR_DEFINE_GEOMETRY_PROCESSOR_TEST(GrDistanceFieldLCDTextGeoProc);
728 798
729 GrGeometryProcessor* GrDistanceFieldLCDTextGeoProc::TestCreate(SkRandom* random, 799 GrGeometryProcessor* GrDistanceFieldLCDTextGeoProc::TestCreate(SkRandom* random,
730 GrContext*, 800 GrContext*,
731 const GrDrawTar getCaps&, 801 const GrDrawTar getCaps&,
732 GrTexture* text ures[]) { 802 GrTexture* text ures[]) {
733 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx : 803 int texIdx = random->nextBool() ? GrProcessorUnitTest::kSkiaPMTextureIdx :
734 GrProcessorUnitTest::kAlphaTextureIdx; 804 GrProcessorUnitTest::kAlphaTextureIdx;
(...skipping 11 matching lines...) Expand all
746 DistanceAdjust wa = { 0.0f, 0.1f, -0.1f }; 816 DistanceAdjust wa = { 0.0f, 0.1f, -0.1f };
747 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; 817 uint32_t flags = kUseLCD_DistanceFieldEffectFlag;
748 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; 818 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0;
749 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 819 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
750 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random), 820 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random),
751 GrProcessorUnitTest::TestMatrix (random), 821 GrProcessorUnitTest::TestMatrix (random),
752 textures[texIdx], params, 822 textures[texIdx], params,
753 wa, 823 wa,
754 flags); 824 flags);
755 } 825 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrDistanceFieldGeoProc.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698