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

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: Properly track the previous patch 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 654 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 /////////////////////////////////////////////////////////////////////////////// 665 ///////////////////////////////////////////////////////////////////////////////
666 666
667 bool SkXfermode::asMode(Mode* mode) const { 667 bool SkXfermode::asMode(Mode* mode) const {
668 return false; 668 return false;
669 } 669 }
670 670
671 bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const { 671 bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const {
672 return false; 672 return false;
673 } 673 }
674 674
675 bool SkXfermode::asXPFactory(GrXPFactory**) const { 675 bool SkXfermode::asXPFactory(const GrContext*, GrXPFactory**) const {
676 return false; 676 return false;
677 } 677 }
678 678
679 679
680 #if SK_SUPPORT_GPU 680 #if SK_SUPPORT_GPU
681 #include "effects/GrPorterDuffXferProcessor.h" 681 #include "effects/GrPorterDuffXferProcessor.h"
682 682
683 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, GrXPFactory** xpf) { 683 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, const GrContext* context, GrX PFactory** xpf) {
684 if (NULL == xfermode) { 684 if (NULL == xfermode) {
685 if (xpf) { 685 if (xpf) {
686 *xpf = GrPorterDuffXPFactory::Create(kSrcOver_Mode); 686 *xpf = GrPorterDuffXPFactory::Create(kSrcOver_Mode);
687 } 687 }
688 return true; 688 return true;
689 } else { 689 } else {
690 return xfermode->asXPFactory(xpf); 690 return xfermode->asXPFactory(context, xpf);
691 } 691 }
692 } 692 }
693 #else 693 #else
694 bool SkXfermode::AsXPFactory(SkXfermode* xfermode, GrXPFactory** xpf) { 694 bool SkXfermode::AsXPFactory(SkXfermode*, const GrContext*, GrXPFactory**) {
695 return false; 695 return false;
696 } 696 }
697 #endif 697 #endif
698 698
699 SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{ 699 SkPMColor SkXfermode::xferColor(SkPMColor src, SkPMColor dst) const{
700 // no-op. subclasses should override this 700 // no-op. subclasses should override this
701 return dst; 701 return dst;
702 } 702 }
703 703
704 void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst, 704 void SkXfermode::xfer32(SkPMColor* SK_RESTRICT dst,
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a)); 928 A = SkAlphaBlend(A, dstA, SkAlpha255To256(a));
929 } 929 }
930 dst[i] = SkToU8(A); 930 dst[i] = SkToU8(A);
931 } 931 }
932 } 932 }
933 } 933 }
934 } 934 }
935 } 935 }
936 936
937 #if SK_SUPPORT_GPU 937 #if SK_SUPPORT_GPU
938 #include "effects/GrAdvancedEquationXferProcessor.h"
938 #include "effects/GrCustomXfermode.h" 939 #include "effects/GrCustomXfermode.h"
939 940
940 bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp, 941 bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp,
941 GrTexture* background) const { 942 GrTexture* background) const {
942 if (GrCustomXfermode::IsSupportedMode(fMode)) { 943 if (GrCustomXfermode::IsSupportedMode(fMode)) {
943 if (fp) { 944 if (fp) {
944 *fp = GrCustomXfermode::CreateFP(fMode, background); 945 *fp = GrCustomXfermode::CreateFP(fMode, background);
945 SkASSERT(*fp); 946 SkASSERT(*fp);
946 } 947 }
947 return true; 948 return true;
948 } 949 }
949 return false; 950 return false;
950 } 951 }
951 952
952 bool SkProcCoeffXfermode::asXPFactory(GrXPFactory** xp) const { 953 bool SkProcCoeffXfermode::asXPFactory(const GrContext* context, GrXPFactory** xp ) const {
953 if (CANNOT_USE_COEFF != fSrcCoeff) { 954 if (CANNOT_USE_COEFF != fSrcCoeff) {
954 if (xp) { 955 if (xp) {
955 *xp = GrPorterDuffXPFactory::Create(fMode); 956 *xp = GrPorterDuffXPFactory::Create(fMode);
956 SkASSERT(*xp); 957 SkASSERT(*xp);
957 } 958 }
958 return true; 959 return true;
959 } 960 }
960 961
962 if (GrAdvancedEquationXPFactory::IsSupported(context, fMode)) {
963 if (xp) {
964 *xp = GrAdvancedEquationXPFactory::Create(context, fMode);
965 SkASSERT(*xp);
966 }
967 return true;
968 }
969
961 if (GrCustomXfermode::IsSupportedMode(fMode)) { 970 if (GrCustomXfermode::IsSupportedMode(fMode)) {
962 if (xp) { 971 if (xp) {
963 *xp = GrCustomXfermode::CreateXPFactory(fMode); 972 *xp = GrCustomXfermode::CreateXPFactory(fMode);
964 SkASSERT(*xp); 973 SkASSERT(*xp);
965 } 974 }
966 return true; 975 return true;
967 } 976 }
968 return false; 977 return false;
969 } 978 }
970 #endif 979 #endif
(...skipping 791 matching lines...) Expand 10 before | Expand all | Expand 10 after
1762 } else { 1771 } else {
1763 proc16 = rec.fProc16_General; 1772 proc16 = rec.fProc16_General;
1764 } 1773 }
1765 } 1774 }
1766 return proc16; 1775 return proc16;
1767 } 1776 }
1768 1777
1769 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) 1778 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode)
1770 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) 1779 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode)
1771 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 1780 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698