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

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

Issue 1109863004: Use GLSLCaps for creating processor keys and GLSL-specific programs (Closed) Base URL: https://chromium.googlesource.com/skia@master
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') | src/gpu/effects/GrDitherEffect.cpp » ('j') | 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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo r) { 158 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo r) {
159 GrGLfloat c[4]; 159 GrGLfloat c[4];
160 GrColorToRGBAFloat(local.fColor, c); 160 GrColorToRGBAFloat(local.fColor, c);
161 pdman.set4fv(fColorUniform, 1, c); 161 pdman.set4fv(fColorUniform, 1, c);
162 fColor = local.fColor; 162 fColor = local.fColor;
163 } 163 }
164 } 164 }
165 165
166 static inline void GenKey(const GrGeometryProcessor& gp, 166 static inline void GenKey(const GrGeometryProcessor& gp,
167 const GrBatchTracker& bt, 167 const GrBatchTracker& bt,
168 const GrGLCaps&, 168 const GrGLSLCaps&,
169 GrProcessorKeyBuilder* b) { 169 GrProcessorKeyBuilder* b) {
170 const GrDistanceFieldA8TextGeoProc& dfTexEffect = gp.cast<GrDistanceFiel dA8TextGeoProc>(); 170 const GrDistanceFieldA8TextGeoProc& dfTexEffect = gp.cast<GrDistanceFiel dA8TextGeoProc>();
171 const DistanceFieldBatchTracker& local = bt.cast<DistanceFieldBatchTrack er>(); 171 const DistanceFieldBatchTracker& local = bt.cast<DistanceFieldBatchTrack er>();
172 uint32_t key = dfTexEffect.getFlags(); 172 uint32_t key = dfTexEffect.getFlags();
173 key |= local.fInputColorType << 16; 173 key |= local.fInputColorType << 16;
174 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0; 174 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0;
175 key |= ComputePosKey(gp.viewMatrix()) << 25; 175 key |= ComputePosKey(gp.viewMatrix()) << 25;
176 b->add32(key); 176 b->add32(key);
177 } 177 }
178 178
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
223 fDistanceAdjust == cte.fDistanceAdjust && 223 fDistanceAdjust == cte.fDistanceAdjust &&
224 #endif 224 #endif
225 fFlags == cte.fFlags; 225 fFlags == cte.fFlags;
226 } 226 }
227 227
228 void GrDistanceFieldA8TextGeoProc::onGetInvariantOutputCoverage(GrInitInvariantO utput* out) const { 228 void GrDistanceFieldA8TextGeoProc::onGetInvariantOutputCoverage(GrInitInvariantO utput* out) const {
229 out->setUnknownSingleComponent(); 229 out->setUnknownSingleComponent();
230 } 230 }
231 231
232 void GrDistanceFieldA8TextGeoProc::getGLProcessorKey(const GrBatchTracker& bt, 232 void GrDistanceFieldA8TextGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
233 const GrGLCaps& caps, 233 const GrGLSLCaps& caps,
234 GrProcessorKeyBuilder* b) c onst { 234 GrProcessorKeyBuilder* b) c onst {
235 GrGLDistanceFieldA8TextGeoProc::GenKey(*this, bt, caps, b); 235 GrGLDistanceFieldA8TextGeoProc::GenKey(*this, bt, caps, b);
236 } 236 }
237 237
238 GrGLPrimitiveProcessor* 238 GrGLPrimitiveProcessor*
239 GrDistanceFieldA8TextGeoProc::createGLInstance(const GrBatchTracker& bt, 239 GrDistanceFieldA8TextGeoProc::createGLInstance(const GrBatchTracker& bt,
240 const GrGLCaps&) const { 240 const GrGLSLCaps&) const {
241 return SkNEW_ARGS(GrGLDistanceFieldA8TextGeoProc, (*this, bt)); 241 return SkNEW_ARGS(GrGLDistanceFieldA8TextGeoProc, (*this, bt));
242 } 242 }
243 243
244 void GrDistanceFieldA8TextGeoProc::initBatchTracker(GrBatchTracker* bt, 244 void GrDistanceFieldA8TextGeoProc::initBatchTracker(GrBatchTracker* bt,
245 const GrPipelineInfo& init) const { 245 const GrPipelineInfo& init) const {
246 DistanceFieldBatchTracker* local = bt->cast<DistanceFieldBatchTracker>(); 246 DistanceFieldBatchTracker* local = bt->cast<DistanceFieldBatchTracker>();
247 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, 247 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it,
248 SkToBool(fInColor)); 248 SkToBool(fInColor));
249 local->fUsesLocalCoords = init.fUsesLocalCoords; 249 local->fUsesLocalCoords = init.fUsesLocalCoords;
250 } 250 }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo r) { 413 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo r) {
414 GrGLfloat c[4]; 414 GrGLfloat c[4];
415 GrColorToRGBAFloat(local.fColor, c); 415 GrColorToRGBAFloat(local.fColor, c);
416 pdman.set4fv(fColorUniform, 1, c); 416 pdman.set4fv(fColorUniform, 1, c);
417 fColor = local.fColor; 417 fColor = local.fColor;
418 } 418 }
419 } 419 }
420 420
421 static inline void GenKey(const GrGeometryProcessor& gp, 421 static inline void GenKey(const GrGeometryProcessor& gp,
422 const GrBatchTracker& bt, 422 const GrBatchTracker& bt,
423 const GrGLCaps&, 423 const GrGLSLCaps&,
424 GrProcessorKeyBuilder* b) { 424 GrProcessorKeyBuilder* b) {
425 const GrDistanceFieldPathGeoProc& dfTexEffect = gp.cast<GrDistanceFieldP athGeoProc>(); 425 const GrDistanceFieldPathGeoProc& dfTexEffect = gp.cast<GrDistanceFieldP athGeoProc>();
426 426
427 const DistanceFieldPathBatchTracker& local = bt.cast<DistanceFieldPathBa tchTracker>(); 427 const DistanceFieldPathBatchTracker& local = bt.cast<DistanceFieldPathBa tchTracker>();
428 uint32_t key = dfTexEffect.getFlags(); 428 uint32_t key = dfTexEffect.getFlags();
429 key |= local.fInputColorType << 16; 429 key |= local.fInputColorType << 16;
430 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0; 430 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0;
431 key |= ComputePosKey(gp.viewMatrix()) << 25; 431 key |= ComputePosKey(gp.viewMatrix()) << 25;
432 b->add32(key); 432 b->add32(key);
433 } 433 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
469 bool GrDistanceFieldPathGeoProc::onIsEqual(const GrGeometryProcessor& other) con st { 469 bool GrDistanceFieldPathGeoProc::onIsEqual(const GrGeometryProcessor& other) con st {
470 const GrDistanceFieldPathGeoProc& cte = other.cast<GrDistanceFieldPathGeoPro c>(); 470 const GrDistanceFieldPathGeoProc& cte = other.cast<GrDistanceFieldPathGeoPro c>();
471 return fFlags == cte.fFlags; 471 return fFlags == cte.fFlags;
472 } 472 }
473 473
474 void GrDistanceFieldPathGeoProc::onGetInvariantOutputCoverage(GrInitInvariantOut put* out) const { 474 void GrDistanceFieldPathGeoProc::onGetInvariantOutputCoverage(GrInitInvariantOut put* out) const {
475 out->setUnknownSingleComponent(); 475 out->setUnknownSingleComponent();
476 } 476 }
477 477
478 void GrDistanceFieldPathGeoProc::getGLProcessorKey(const GrBatchTracker& bt, 478 void GrDistanceFieldPathGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
479 const GrGLCaps& caps, 479 const GrGLSLCaps& caps,
480 GrProcessorKeyBuilder* b) con st { 480 GrProcessorKeyBuilder* b) con st {
481 GrGLDistanceFieldPathGeoProc::GenKey(*this, bt, caps, b); 481 GrGLDistanceFieldPathGeoProc::GenKey(*this, bt, caps, b);
482 } 482 }
483 483
484 GrGLPrimitiveProcessor* 484 GrGLPrimitiveProcessor*
485 GrDistanceFieldPathGeoProc::createGLInstance(const GrBatchTracker& bt, const GrG LCaps&) const { 485 GrDistanceFieldPathGeoProc::createGLInstance(const GrBatchTracker& bt, const GrG LSLCaps&) const {
486 return SkNEW_ARGS(GrGLDistanceFieldPathGeoProc, (*this, bt)); 486 return SkNEW_ARGS(GrGLDistanceFieldPathGeoProc, (*this, bt));
487 } 487 }
488 488
489 void GrDistanceFieldPathGeoProc::initBatchTracker(GrBatchTracker* bt, 489 void GrDistanceFieldPathGeoProc::initBatchTracker(GrBatchTracker* bt,
490 const GrPipelineInfo& init) co nst { 490 const GrPipelineInfo& init) co nst {
491 DistanceFieldPathBatchTracker* local = bt->cast<DistanceFieldPathBatchTracke r>(); 491 DistanceFieldPathBatchTracker* local = bt->cast<DistanceFieldPathBatchTracke r>();
492 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, 492 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it,
493 SkToBool(fInColor)); 493 SkToBool(fInColor));
494 local->fUsesLocalCoords = init.fUsesLocalCoords; 494 local->fUsesLocalCoords = init.fUsesLocalCoords;
495 } 495 }
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
704 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo r) { 704 if (kUniform_GrGPInput == local.fInputColorType && local.fColor != fColo r) {
705 GrGLfloat c[4]; 705 GrGLfloat c[4];
706 GrColorToRGBAFloat(local.fColor, c); 706 GrColorToRGBAFloat(local.fColor, c);
707 pdman.set4fv(fColorUniform, 1, c); 707 pdman.set4fv(fColorUniform, 1, c);
708 fColor = local.fColor; 708 fColor = local.fColor;
709 } 709 }
710 } 710 }
711 711
712 static inline void GenKey(const GrGeometryProcessor& gp, 712 static inline void GenKey(const GrGeometryProcessor& gp,
713 const GrBatchTracker& bt, 713 const GrBatchTracker& bt,
714 const GrGLCaps&, 714 const GrGLSLCaps&,
715 GrProcessorKeyBuilder* b) { 715 GrProcessorKeyBuilder* b) {
716 const GrDistanceFieldLCDTextGeoProc& dfTexEffect = gp.cast<GrDistanceFie ldLCDTextGeoProc>(); 716 const GrDistanceFieldLCDTextGeoProc& dfTexEffect = gp.cast<GrDistanceFie ldLCDTextGeoProc>();
717 717
718 const DistanceFieldLCDBatchTracker& local = bt.cast<DistanceFieldLCDBatc hTracker>(); 718 const DistanceFieldLCDBatchTracker& local = bt.cast<DistanceFieldLCDBatc hTracker>();
719 uint32_t key = dfTexEffect.getFlags(); 719 uint32_t key = dfTexEffect.getFlags();
720 key |= local.fInputColorType << 16; 720 key |= local.fInputColorType << 16;
721 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0; 721 key |= local.fUsesLocalCoords && gp.localMatrix().hasPerspective() ? 0x1 << 24: 0x0;
722 key |= ComputePosKey(gp.viewMatrix()) << 25; 722 key |= ComputePosKey(gp.viewMatrix()) << 25;
723 b->add32(key); 723 b->add32(key);
724 } 724 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 return (fDistanceAdjust == cte.fDistanceAdjust && 756 return (fDistanceAdjust == cte.fDistanceAdjust &&
757 fFlags == cte.fFlags); 757 fFlags == cte.fFlags);
758 } 758 }
759 759
760 void GrDistanceFieldLCDTextGeoProc::onGetInvariantOutputCoverage(GrInitInvariant Output* out) const { 760 void GrDistanceFieldLCDTextGeoProc::onGetInvariantOutputCoverage(GrInitInvariant Output* out) const {
761 out->setUnknownFourComponents(); 761 out->setUnknownFourComponents();
762 out->setUsingLCDCoverage(); 762 out->setUsingLCDCoverage();
763 } 763 }
764 764
765 void GrDistanceFieldLCDTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt, 765 void GrDistanceFieldLCDTextGeoProc::getGLProcessorKey(const GrBatchTracker& bt,
766 const GrGLCaps& caps, 766 const GrGLSLCaps& caps,
767 GrProcessorKeyBuilder* b) const { 767 GrProcessorKeyBuilder* b) const {
768 GrGLDistanceFieldLCDTextGeoProc::GenKey(*this, bt, caps, b); 768 GrGLDistanceFieldLCDTextGeoProc::GenKey(*this, bt, caps, b);
769 } 769 }
770 770
771 GrGLPrimitiveProcessor* 771 GrGLPrimitiveProcessor*
772 GrDistanceFieldLCDTextGeoProc::createGLInstance(const GrBatchTracker& bt, 772 GrDistanceFieldLCDTextGeoProc::createGLInstance(const GrBatchTracker& bt,
773 const GrGLCaps&) const { 773 const GrGLSLCaps&) const {
774 return SkNEW_ARGS(GrGLDistanceFieldLCDTextGeoProc, (*this, bt)); 774 return SkNEW_ARGS(GrGLDistanceFieldLCDTextGeoProc, (*this, bt));
775 } 775 }
776 776
777 void GrDistanceFieldLCDTextGeoProc::initBatchTracker(GrBatchTracker* bt, 777 void GrDistanceFieldLCDTextGeoProc::initBatchTracker(GrBatchTracker* bt,
778 const GrPipelineInfo& init) const { 778 const GrPipelineInfo& init) const {
779 DistanceFieldLCDBatchTracker* local = bt->cast<DistanceFieldLCDBatchTracker> (); 779 DistanceFieldLCDBatchTracker* local = bt->cast<DistanceFieldLCDBatchTracker> ();
780 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false); 780 local->fInputColorType = GetColorInputType(&local->fColor, this->color(), in it, false);
781 local->fUsesLocalCoords = init.fUsesLocalCoords; 781 local->fUsesLocalCoords = init.fUsesLocalCoords;
782 } 782 }
783 783
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 DistanceAdjust wa = { 0.0f, 0.1f, -0.1f }; 816 DistanceAdjust wa = { 0.0f, 0.1f, -0.1f };
817 uint32_t flags = kUseLCD_DistanceFieldEffectFlag; 817 uint32_t flags = kUseLCD_DistanceFieldEffectFlag;
818 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0; 818 flags |= random->nextBool() ? kUniformScale_DistanceFieldEffectMask : 0;
819 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0; 819 flags |= random->nextBool() ? kBGR_DistanceFieldEffectFlag : 0;
820 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random), 820 return GrDistanceFieldLCDTextGeoProc::Create(GrRandomColor(random),
821 GrProcessorUnitTest::TestMatrix (random), 821 GrProcessorUnitTest::TestMatrix (random),
822 textures[texIdx], params, 822 textures[texIdx], params,
823 wa, 823 wa,
824 flags); 824 flags);
825 } 825 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrDistanceFieldGeoProc.h ('k') | src/gpu/effects/GrDitherEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698