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

Side by Side Diff: src/core/SkXfermode.cpp

Issue 1037123003: Implement support for KHR_blend_equation_advanced (Closed) Base URL: https://skia.googlesource.com/skia.git@upload_zzz2_barriers
Patch Set: Created 5 years, 8 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 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
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 "SkXfermode.h" 9 #include "SkXfermode.h"
10 #include "SkXfermode_opts_SSE2.h" 10 #include "SkXfermode_opts_SSE2.h"
(...skipping 657 matching lines...) Expand 10 before | Expand all | Expand 10 after
668 /////////////////////////////////////////////////////////////////////////////// 668 ///////////////////////////////////////////////////////////////////////////////
669 669
670 bool SkXfermode::asMode(Mode* mode) const { 670 bool SkXfermode::asMode(Mode* mode) const {
671 return false; 671 return false;
672 } 672 }
673 673
674 bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const { 674 bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const {
675 return false; 675 return false;
676 } 676 }
677 677
678 bool SkXfermode::asXPFactory(GrXPFactory**) const { 678 bool SkXfermode::asXPFactory(const GrContext*, GrXPFactory**) const {
679 return false; 679 return false;
680 } 680 }
681 681
682 682
683 #if SK_SUPPORT_GPU 683 #if SK_SUPPORT_GPU
684 #include "effects/GrPorterDuffXferProcessor.h" 684 #include "effects/GrPorterDuffXferProcessor.h"
685 685
686 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, GrXPFactory** xpf) { 686 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, const GrContext* context, GrX PFactory** xpf) {
687 if (NULL == xfermode) { 687 if (NULL == xfermode) {
688 if (xpf) { 688 if (xpf) {
689 *xpf = GrPorterDuffXPFactory::Create(kSrcOver_Mode); 689 *xpf = GrPorterDuffXPFactory::Create(kSrcOver_Mode);
690 } 690 }
691 return true; 691 return true;
692 } else { 692 } else {
693 return xfermode->asXPFactory(xpf); 693 return xfermode->asXPFactory(context, xpf);
694 } 694 }
695 } 695 }
696 #else 696 #else
697 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, GrXPFactory** xpf) { 697 bool SkXfermode::AsXPFactory(SkXfermode*, const GrContext*, GrXPFactory**) {
698 return false; 698 return false;
699 } 699 }
700 #endif 700 #endif
701 701
702 SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{ 702 SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{
703 // no-op. subclasses should override this 703 // no-op. subclasses should override this
704 return dst; 704 return dst;
705 } 705 }
706 706
707 void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst, 707 void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
931 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a)); 931 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a));
932 } 932 }
933 dst[i] = SkToU8(A); 933 dst[i] = SkToU8(A);
934 } 934 }
935 } 935 }
936 } 936 }
937 } 937 }
938 } 938 }
939 939
940 #if SK_SUPPORT_GPU 940 #if SK_SUPPORT_GPU
941 #include "effects/GrAdvancedEquationXPFactory.h"
941 #include "effects/GrCustomXfermode.h" 942 #include "effects/GrCustomXfermode.h"
942 943
943 bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp, 944 bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp,
944 GrTexture* background) const { 945 GrTexture* background) const {
945 if (GrCustomXfermode::IsSupportedMode(fMode)) { 946 if (GrCustomXfermode::IsSupportedMode(fMode)) {
946 if (fp) { 947 if (fp) {
947 *fp = GrCustomXfermode::CreateFP(fMode, background); 948 *fp = GrCustomXfermode::CreateFP(fMode, background);
948 SkASSERT(*fp); 949 SkASSERT(*fp);
949 } 950 }
950 return true; 951 return true;
951 } 952 }
952 return false; 953 return false;
953 } 954 }
954 955
955 bool SkProcCoeffXfermode::asXPFactory(GrXPFactory** xp) const { 956 bool SkProcCoeffXfermode::asXPFactory(const GrContext* context, GrXPFactory** xp ) const {
956 if (CANNOT_USE_COEFF != fSrcCoeff) { 957 if (CANNOT_USE_COEFF != fSrcCoeff) {
957 if (xp) { 958 if (xp) {
958 *xp = GrPorterDuffXPFactory::Create(fMode); 959 *xp = GrPorterDuffXPFactory::Create(fMode);
959 SkASSERT(*xp); 960 SkASSERT(*xp);
960 } 961 }
961 return true; 962 return true;
962 } 963 }
963 964
965 if (GrAdvancedEquationXPFactory::IsSupported(context, fMode)) {
966 if (xp) {
967 *xp = GrAdvancedEquationXPFactory::Create(context, fMode);
968 SkASSERT(*xp);
969 }
970 return true;
971 }
972
964 if (GrCustomXfermode::IsSupportedMode(fMode)) { 973 if (GrCustomXfermode::IsSupportedMode(fMode)) {
965 if (xp) { 974 if (xp) {
966 *xp = GrCustomXfermode::CreateXPFactory(fMode); 975 *xp = GrCustomXfermode::CreateXPFactory(fMode);
967 SkASSERT(*xp); 976 SkASSERT(*xp);
968 } 977 }
969 return true; 978 return true;
970 } 979 }
971 return false; 980 return false;
972 } 981 }
973 #endif 982 #endif
(...skipping 562 matching lines...) Expand 10 before | Expand all | Expand 10 after
1536 } else { 1545 } else {
1537 proc16 = rec.fProc16_General; 1546 proc16 = rec.fProc16_General;
1538 } 1547 }
1539 } 1548 }
1540 return proc16; 1549 return proc16;
1541 } 1550 }
1542 1551
1543 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) 1552 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode)
1544 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) 1553 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode)
1545 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1554 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698