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

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

Issue 1164973002: Add mixed samples support to XPs (Closed) Base URL: https://skia.googlesource.com/skia.git@upload2_reenablebea
Patch Set: Created 5 years, 6 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
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 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/GrCustomXfermode.h" 8 #include "effects/GrCustomXfermode.h"
9 #include "effects/GrCustomXfermodePriv.h" 9 #include "effects/GrCustomXfermodePriv.h"
10 10
(...skipping 511 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 /////////////////////////////////////////////////////////////////////////////// 522 ///////////////////////////////////////////////////////////////////////////////
523 523
524 class CustomXP : public GrXferProcessor { 524 class CustomXP : public GrXferProcessor {
525 public: 525 public:
526 CustomXP(SkXfermode::Mode mode, GrBlendEquation hwBlendEquation) 526 CustomXP(SkXfermode::Mode mode, GrBlendEquation hwBlendEquation)
527 : fMode(mode), 527 : fMode(mode),
528 fHWBlendEquation(hwBlendEquation) { 528 fHWBlendEquation(hwBlendEquation) {
529 this->initClassID<CustomXP>(); 529 this->initClassID<CustomXP>();
530 } 530 }
531 531
532 CustomXP(SkXfermode::Mode mode, const DstTexture* dstTexture) 532 CustomXP(const GrPipelineBuilder& builder, const DstTexture* dstTexture, SkX fermode::Mode mode)
533 : INHERITED(dstTexture, true), 533 : INHERITED(builder, dstTexture, true),
534 fMode(mode), 534 fMode(mode),
535 fHWBlendEquation(static_cast<GrBlendEquation>(-1)) { 535 fHWBlendEquation(static_cast<GrBlendEquation>(-1)) {
536 this->initClassID<CustomXP>(); 536 this->initClassID<CustomXP>();
537 } 537 }
538 538
539 const char* name() const override { return "Custom Xfermode"; } 539 const char* name() const override { return "Custom Xfermode"; }
540 540
541 GrGLXferProcessor* createGLInstance() const override; 541 GrGLXferProcessor* createGLInstance() const override;
542 542
543 bool hasSecondaryOutput() const override { return false; }
544
545 SkXfermode::Mode mode() const { return fMode; } 543 SkXfermode::Mode mode() const { return fMode; }
546 bool hasHWBlendEquation() const { return -1 != static_cast<int>(fHWBlendEqua tion); } 544 bool hasHWBlendEquation() const { return -1 != static_cast<int>(fHWBlendEqua tion); }
547 545
548 GrBlendEquation hwBlendEquation() const { 546 GrBlendEquation hwBlendEquation() const {
549 SkASSERT(this->hasHWBlendEquation()); 547 SkASSERT(this->hasHWBlendEquation());
550 return fHWBlendEquation; 548 return fHWBlendEquation;
551 } 549 }
552 550
553 private: 551 private:
554 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI, 552 GrXferProcessor::OptFlags onGetOptimizations(const GrProcOptInfo& colorPOI,
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
786 784
787 GrCustomXPFactory::GrCustomXPFactory(SkXfermode::Mode mode) 785 GrCustomXPFactory::GrCustomXPFactory(SkXfermode::Mode mode)
788 : fMode(mode), 786 : fMode(mode),
789 fHWBlendEquation(hw_blend_equation(mode)) { 787 fHWBlendEquation(hw_blend_equation(mode)) {
790 SkASSERT(GrCustomXfermode::IsSupportedMode(fMode)); 788 SkASSERT(GrCustomXfermode::IsSupportedMode(fMode));
791 this->initClassID<GrCustomXPFactory>(); 789 this->initClassID<GrCustomXPFactory>();
792 } 790 }
793 791
794 GrXferProcessor* 792 GrXferProcessor*
795 GrCustomXPFactory::onCreateXferProcessor(const GrCaps& caps, 793 GrCustomXPFactory::onCreateXferProcessor(const GrCaps& caps,
794 const GrPipelineBuilder& builder,
796 const GrProcOptInfo& colorPOI, 795 const GrProcOptInfo& colorPOI,
797 const GrProcOptInfo& coveragePOI, 796 const GrProcOptInfo& coveragePOI,
798 const DstTexture* dstTexture) const { 797 const DstTexture* dstTexture) const {
799 if (can_use_hw_blend_equation(fHWBlendEquation, coveragePOI, caps)) { 798 if (can_use_hw_blend_equation(fHWBlendEquation, coveragePOI, caps)) {
800 SkASSERT(!dstTexture || !dstTexture->texture()); 799 SkASSERT(!dstTexture || !dstTexture->texture());
801 return SkNEW_ARGS(CustomXP, (fMode, fHWBlendEquation)); 800 return SkNEW_ARGS(CustomXP, (fMode, fHWBlendEquation));
802 } 801 }
803 return SkNEW_ARGS(CustomXP, (fMode, dstTexture)); 802 return SkNEW_ARGS(CustomXP, (builder, dstTexture, fMode));
804 } 803 }
805 804
806 bool GrCustomXPFactory::willReadDstColor(const GrCaps& caps, 805 bool GrCustomXPFactory::willReadDstColor(const GrCaps& caps,
806 const GrPipelineBuilder&,
807 const GrProcOptInfo& colorPOI, 807 const GrProcOptInfo& colorPOI,
808 const GrProcOptInfo& coveragePOI) const { 808 const GrProcOptInfo& coveragePOI) const {
809 return !can_use_hw_blend_equation(fHWBlendEquation, coveragePOI, caps); 809 return !can_use_hw_blend_equation(fHWBlendEquation, coveragePOI, caps);
810 } 810 }
811 811
812 void GrCustomXPFactory::getInvariantBlendedColor(const GrProcOptInfo& colorPOI, 812 void GrCustomXPFactory::getInvariantBlendedColor(const GrProcOptInfo& colorPOI,
813 InvariantBlendedColor* blendedC olor) const { 813 InvariantBlendedColor* blendedC olor) const {
814 blendedColor->fWillBlendWithDst = true; 814 blendedColor->fWillBlendWithDst = true;
815 blendedColor->fKnownColorFlags = kNone_GrColorComponentFlags; 815 blendedColor->fKnownColorFlags = kNone_GrColorComponentFlags;
816 } 816 }
817 817
818 GR_DEFINE_XP_FACTORY_TEST(GrCustomXPFactory); 818 GR_DEFINE_XP_FACTORY_TEST(GrCustomXPFactory);
819 GrXPFactory* GrCustomXPFactory::TestCreate(SkRandom* rand, 819 GrXPFactory* GrCustomXPFactory::TestCreate(SkRandom* rand,
820 GrContext*, 820 GrContext*,
821 const GrCaps&, 821 const GrCaps&,
822 GrTexture*[]) { 822 GrTexture*[]) {
823 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas tSeparableMode); 823 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas tSeparableMode);
824 824
825 return SkNEW_ARGS(GrCustomXPFactory, (static_cast<SkXfermode::Mode>(mode))); 825 return SkNEW_ARGS(GrCustomXPFactory, (static_cast<SkXfermode::Mode>(mode)));
826 } 826 }
827 827
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698