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

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

Issue 1133123009: rename GrDrawTargetCaps to GrCaps (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix gypi filename 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/GrOvalEffect.cpp ('k') | src/gpu/effects/GrRRectEffect.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 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 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 GrBlendCoeff getDstBlend() const { return fDstBlend; } 88 GrBlendCoeff getDstBlend() const { return fDstBlend; }
89 89
90 private: 90 private:
91 PorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrColo r constant, 91 PorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrColo r constant,
92 const GrDeviceCoordTexture* dstCopy, bool willReadDs tColor); 92 const GrDeviceCoordTexture* dstCopy, bool willReadDs tColor);
93 93
94 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, 94 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI,
95 const GrProcOptInfo& coveragePO I, 95 const GrProcOptInfo& coveragePO I,
96 bool doesStencilWrite, 96 bool doesStencilWrite,
97 GrColor* overrideColor, 97 GrColor* overrideColor,
98 const GrDrawTargetCaps& caps) o verride; 98 const GrCaps& caps) override;
99 99
100 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c onst override; 100 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c onst override;
101 101
102 void onGetBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const override { 102 void onGetBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const override {
103 if (!this->willReadDstColor()) { 103 if (!this->willReadDstColor()) {
104 blendInfo->fSrcBlend = fSrcBlend; 104 blendInfo->fSrcBlend = fSrcBlend;
105 blendInfo->fDstBlend = fDstBlend; 105 blendInfo->fDstBlend = fDstBlend;
106 } else { 106 } else {
107 blendInfo->fSrcBlend = kOne_GrBlendCoeff; 107 blendInfo->fSrcBlend = kOne_GrBlendCoeff;
108 blendInfo->fDstBlend = kZero_GrBlendCoeff; 108 blendInfo->fDstBlend = kZero_GrBlendCoeff;
(...skipping 10 matching lines...) Expand all
119 fSecondaryOutputType != xp.fSecondaryOutputType) { 119 fSecondaryOutputType != xp.fSecondaryOutputType) {
120 return false; 120 return false;
121 } 121 }
122 return true; 122 return true;
123 } 123 }
124 124
125 GrXferProcessor::OptFlags internalGetOptimizations(const GrProcOptInfo& colo rPOI, 125 GrXferProcessor::OptFlags internalGetOptimizations(const GrProcOptInfo& colo rPOI,
126 const GrProcOptInfo& cove ragePOI, 126 const GrProcOptInfo& cove ragePOI,
127 bool doesStencilWrite); 127 bool doesStencilWrite);
128 128
129 void calcOutputTypes(GrXferProcessor::OptFlags blendOpts, const GrDrawTarget Caps& caps, 129 void calcOutputTypes(GrXferProcessor::OptFlags blendOpts, const GrCaps& caps ,
130 bool hasSolidCoverage); 130 bool hasSolidCoverage);
131 131
132 GrBlendCoeff fSrcBlend; 132 GrBlendCoeff fSrcBlend;
133 GrBlendCoeff fDstBlend; 133 GrBlendCoeff fDstBlend;
134 GrColor fBlendConstant; 134 GrColor fBlendConstant;
135 PrimaryOutputType fPrimaryOutputType; 135 PrimaryOutputType fPrimaryOutputType;
136 SecondaryOutputType fSecondaryOutputType; 136 SecondaryOutputType fSecondaryOutputType;
137 137
138 typedef GrXferProcessor INHERITED; 138 typedef GrXferProcessor INHERITED;
139 }; 139 };
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 298
299 GrGLXferProcessor* PorterDuffXferProcessor::createGLInstance() const { 299 GrGLXferProcessor* PorterDuffXferProcessor::createGLInstance() const {
300 return SkNEW_ARGS(GLPorterDuffXferProcessor, (*this)); 300 return SkNEW_ARGS(GLPorterDuffXferProcessor, (*this));
301 } 301 }
302 302
303 GrXferProcessor::OptFlags 303 GrXferProcessor::OptFlags
304 PorterDuffXferProcessor::onGetOptimizations(const GrProcOptInfo& colorPOI, 304 PorterDuffXferProcessor::onGetOptimizations(const GrProcOptInfo& colorPOI,
305 const GrProcOptInfo& coveragePOI, 305 const GrProcOptInfo& coveragePOI,
306 bool doesStencilWrite, 306 bool doesStencilWrite,
307 GrColor* overrideColor, 307 GrColor* overrideColor,
308 const GrDrawTargetCaps& caps) { 308 const GrCaps& caps) {
309 GrXferProcessor::OptFlags optFlags = this->internalGetOptimizations(colorPOI , 309 GrXferProcessor::OptFlags optFlags = this->internalGetOptimizations(colorPOI ,
310 coverage POI, 310 coverage POI,
311 doesSten cilWrite); 311 doesSten cilWrite);
312 this->calcOutputTypes(optFlags, caps, coveragePOI.isSolidWhite()); 312 this->calcOutputTypes(optFlags, caps, coveragePOI.isSolidWhite());
313 return optFlags; 313 return optFlags;
314 } 314 }
315 315
316 void PorterDuffXferProcessor::calcOutputTypes(GrXferProcessor::OptFlags optFlags , 316 void PorterDuffXferProcessor::calcOutputTypes(GrXferProcessor::OptFlags optFlags ,
317 const GrDrawTargetCaps& caps, 317 const GrCaps& caps,
318 bool hasSolidCoverage) { 318 bool hasSolidCoverage) {
319 if (this->willReadDstColor()) { 319 if (this->willReadDstColor()) {
320 fPrimaryOutputType = kCustom_PrimaryOutputType; 320 fPrimaryOutputType = kCustom_PrimaryOutputType;
321 return; 321 return;
322 } 322 }
323 323
324 if (optFlags & kIgnoreColor_OptFlag) { 324 if (optFlags & kIgnoreColor_OptFlag) {
325 if (optFlags & kIgnoreCoverage_OptFlag) { 325 if (optFlags & kIgnoreCoverage_OptFlag) {
326 fPrimaryOutputType = kNone_PrimaryOutputType; 326 fPrimaryOutputType = kNone_PrimaryOutputType;
327 return; 327 return;
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 477
478 bool hasSecondaryOutput() const override { return false; } 478 bool hasSecondaryOutput() const override { return false; }
479 479
480 private: 480 private:
481 PDLCDXferProcessor(GrColor blendConstant, uint8_t alpha); 481 PDLCDXferProcessor(GrColor blendConstant, uint8_t alpha);
482 482
483 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, 483 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI,
484 const GrProcOptInfo& coveragePO I, 484 const GrProcOptInfo& coveragePO I,
485 bool doesStencilWrite, 485 bool doesStencilWrite,
486 GrColor* overrideColor, 486 GrColor* overrideColor,
487 const GrDrawTargetCaps& caps) o verride; 487 const GrCaps& caps) override;
488 488
489 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c onst override; 489 void onGetGLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b) c onst override;
490 490
491 void onGetBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const override { 491 void onGetBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const override {
492 blendInfo->fSrcBlend = kConstC_GrBlendCoeff; 492 blendInfo->fSrcBlend = kConstC_GrBlendCoeff;
493 blendInfo->fDstBlend = kISC_GrBlendCoeff; 493 blendInfo->fDstBlend = kISC_GrBlendCoeff;
494 blendInfo->fBlendConstant = fBlendConstant; 494 blendInfo->fBlendConstant = fBlendConstant;
495 } 495 }
496 496
497 bool onIsEqual(const GrXferProcessor& xpBase) const override { 497 bool onIsEqual(const GrXferProcessor& xpBase) const override {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 568
569 GrGLXferProcessor* PDLCDXferProcessor::createGLInstance() const { 569 GrGLXferProcessor* PDLCDXferProcessor::createGLInstance() const {
570 return SkNEW_ARGS(GLPDLCDXferProcessor, (*this)); 570 return SkNEW_ARGS(GLPDLCDXferProcessor, (*this));
571 } 571 }
572 572
573 GrXferProcessor::OptFlags 573 GrXferProcessor::OptFlags
574 PDLCDXferProcessor::onGetOptimizations(const GrProcOptInfo& colorPOI, 574 PDLCDXferProcessor::onGetOptimizations(const GrProcOptInfo& colorPOI,
575 const GrProcOptInfo& coveragePOI, 575 const GrProcOptInfo& coveragePOI,
576 bool doesStencilWrite, 576 bool doesStencilWrite,
577 GrColor* overrideColor, 577 GrColor* overrideColor,
578 const GrDrawTargetCaps& caps) { 578 const GrCaps& caps) {
579 // We want to force our primary output to be alpha * Coverage, where alp ha is the alpha 579 // We want to force our primary output to be alpha * Coverage, where alp ha is the alpha
580 // value of the blend the constant. We should already have valid blend c oeff's if we are at 580 // value of the blend the constant. We should already have valid blend c oeff's if we are at
581 // a point where we have RGB coverage. We don't need any color stages si nce the known color 581 // a point where we have RGB coverage. We don't need any color stages si nce the known color
582 // output is already baked into the blendConstant. 582 // output is already baked into the blendConstant.
583 *overrideColor = GrColorPackRGBA(fAlpha, fAlpha, fAlpha, fAlpha); 583 *overrideColor = GrColorPackRGBA(fAlpha, fAlpha, fAlpha, fAlpha);
584 return GrXferProcessor::kOverrideColor_OptFlag; 584 return GrXferProcessor::kOverrideColor_OptFlag;
585 } 585 }
586 586
587 /////////////////////////////////////////////////////////////////////////////// 587 ///////////////////////////////////////////////////////////////////////////////
588 GrPorterDuffXPFactory::GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst) 588 GrPorterDuffXPFactory::GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst)
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 static GrPorterDuffXPFactory gScreenPDXPF(kOne_GrBlendCoeff, kISC_Gr BlendCoeff); 666 static GrPorterDuffXPFactory gScreenPDXPF(kOne_GrBlendCoeff, kISC_Gr BlendCoeff);
667 return SkRef(&gScreenPDXPF); 667 return SkRef(&gScreenPDXPF);
668 break; 668 break;
669 } 669 }
670 default: 670 default:
671 return NULL; 671 return NULL;
672 } 672 }
673 } 673 }
674 674
675 GrXferProcessor* 675 GrXferProcessor*
676 GrPorterDuffXPFactory::onCreateXferProcessor(const GrDrawTargetCaps& caps, 676 GrPorterDuffXPFactory::onCreateXferProcessor(const GrCaps& caps,
677 const GrProcOptInfo& colorPOI, 677 const GrProcOptInfo& colorPOI,
678 const GrProcOptInfo& covPOI, 678 const GrProcOptInfo& covPOI,
679 const GrDeviceCoordTexture* dstCopy ) const { 679 const GrDeviceCoordTexture* dstCopy ) const {
680 if (covPOI.isFourChannelOutput()) { 680 if (covPOI.isFourChannelOutput()) {
681 return PDLCDXferProcessor::Create(fSrcCoeff, fDstCoeff, colorPOI); 681 return PDLCDXferProcessor::Create(fSrcCoeff, fDstCoeff, colorPOI);
682 } else { 682 } else {
683 return PorterDuffXferProcessor::Create(fSrcCoeff, fDstCoeff, 0, dstCopy, 683 return PorterDuffXferProcessor::Create(fSrcCoeff, fDstCoeff, 0, dstCopy,
684 this->willReadDstColor(caps, colo rPOI, covPOI)); 684 this->willReadDstColor(caps, colo rPOI, covPOI));
685 } 685 }
686 } 686 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 case kIConstC_GrBlendCoeff: 756 case kIConstC_GrBlendCoeff:
757 case kConstA_GrBlendCoeff: 757 case kConstA_GrBlendCoeff:
758 case kIConstA_GrBlendCoeff: 758 case kIConstA_GrBlendCoeff:
759 output->fBlendedColorFlags = 0; 759 output->fBlendedColorFlags = 0;
760 break; 760 break;
761 } 761 }
762 762
763 output->fWillBlendWithDst = false; 763 output->fWillBlendWithDst = false;
764 } 764 }
765 765
766 bool GrPorterDuffXPFactory::willReadDstColor(const GrDrawTargetCaps& caps, 766 bool GrPorterDuffXPFactory::willReadDstColor(const GrCaps& caps,
767 const GrProcOptInfo& colorPOI, 767 const GrProcOptInfo& colorPOI,
768 const GrProcOptInfo& coveragePOI) c onst { 768 const GrProcOptInfo& coveragePOI) c onst {
769 // We can always blend correctly if we have dual source blending. 769 // We can always blend correctly if we have dual source blending.
770 if (caps.shaderCaps()->dualSourceBlendingSupport()) { 770 if (caps.shaderCaps()->dualSourceBlendingSupport()) {
771 return false; 771 return false;
772 } 772 }
773 773
774 if (can_tweak_alpha_for_coverage(fDstCoeff)) { 774 if (can_tweak_alpha_for_coverage(fDstCoeff)) {
775 return false; 775 return false;
776 } 776 }
(...skipping 16 matching lines...) Expand all
793 return false; 793 return false;
794 } 794 }
795 795
796 return true; 796 return true;
797 } 797 }
798 798
799 GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory); 799 GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory);
800 800
801 GrXPFactory* GrPorterDuffXPFactory::TestCreate(SkRandom* random, 801 GrXPFactory* GrPorterDuffXPFactory::TestCreate(SkRandom* random,
802 GrContext*, 802 GrContext*,
803 const GrDrawTargetCaps&, 803 const GrCaps&,
804 GrTexture*[]) { 804 GrTexture*[]) {
805 SkXfermode::Mode mode = SkXfermode::Mode(random->nextULessThan(SkXfermode::k LastCoeffMode)); 805 SkXfermode::Mode mode = SkXfermode::Mode(random->nextULessThan(SkXfermode::k LastCoeffMode));
806 return GrPorterDuffXPFactory::Create(mode); 806 return GrPorterDuffXPFactory::Create(mode);
807 } 807 }
808 808
OLDNEW
« no previous file with comments | « src/gpu/effects/GrOvalEffect.cpp ('k') | src/gpu/effects/GrRRectEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698