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

Side by Side Diff: include/gpu/effects/GrPorterDuffXferProcessor.h

Issue 787233003: Add XP to handle the cases where we disable color write. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: update Created 6 years 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 | « include/gpu/GrXferProcessor.h ('k') | src/gpu/GrClipMaskManager.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 #ifndef GrPorterDuffXferProcessor_DEFINED 8 #ifndef GrPorterDuffXferProcessor_DEFINED
9 #define GrPorterDuffXferProcessor_DEFINED 9 #define GrPorterDuffXferProcessor_DEFINED
10 10
11 #include "GrTypes.h" 11 #include "GrTypes.h"
12 #include "GrXferProcessor.h" 12 #include "GrXferProcessor.h"
13 #include "SkXfermode.h" 13 #include "SkXfermode.h"
14 14
15 class GrInvariantOutput;
16 class GrProcOptInfo; 15 class GrProcOptInfo;
17 16
18 class GrPorterDuffXferProcessor : public GrXferProcessor { 17 class GrPorterDuffXferProcessor : public GrXferProcessor {
19 public: 18 public:
20 static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, 19 static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend,
21 GrColor constant = 0) { 20 GrColor constant = 0) {
22 return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend, consta nt)); 21 return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend, consta nt));
23 } 22 }
24 23
25 virtual ~GrPorterDuffXferProcessor(); 24 ~GrPorterDuffXferProcessor() SK_OVERRIDE;
26 25
27 virtual const char* name() const SK_OVERRIDE { return "Porter Duff"; } 26 const char* name() const SK_OVERRIDE { return "Porter Duff"; }
28 27
29 void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE; 28 void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE;
30 29
31 GrGLXferProcessor* createGLInstance() const SK_OVERRIDE; 30 GrGLXferProcessor* createGLInstance() const SK_OVERRIDE;
32 31
33 virtual bool hasSecondaryOutput() const SK_OVERRIDE; 32 bool hasSecondaryOutput() const SK_OVERRIDE;
34 33
35 /////////////////////////////////////////////////////////////////////////// 34 ///////////////////////////////////////////////////////////////////////////
36 /// @name Stage Output Types 35 /// @name Stage Output Types
37 //// 36 ////
38 37
39 enum PrimaryOutputType { 38 enum PrimaryOutputType {
40 kNone_PrimaryOutputType, 39 kNone_PrimaryOutputType,
41 kColor_PrimaryOutputType, 40 kColor_PrimaryOutputType,
42 kCoverage_PrimaryOutputType, 41 kCoverage_PrimaryOutputType,
43 // Modulate color and coverage, write result as the color output. 42 // Modulate color and coverage, write result as the color output.
(...skipping 17 matching lines...) Expand all
61 kCoverageISC_SecondaryOutputType, 60 kCoverageISC_SecondaryOutputType,
62 61
63 kSecondaryOutputTypeCnt, 62 kSecondaryOutputTypeCnt,
64 }; 63 };
65 64
66 PrimaryOutputType primaryOutputType() const { return fPrimaryOutputType; } 65 PrimaryOutputType primaryOutputType() const { return fPrimaryOutputType; }
67 SecondaryOutputType secondaryOutputType() const { return fSecondaryOutputTyp e; } 66 SecondaryOutputType secondaryOutputType() const { return fSecondaryOutputTyp e; }
68 67
69 GrXferProcessor::OptFlags getOptimizations(const GrProcOptInfo& colorPOI, 68 GrXferProcessor::OptFlags getOptimizations(const GrProcOptInfo& colorPOI,
70 const GrProcOptInfo& coveragePOI, 69 const GrProcOptInfo& coveragePOI,
71 bool colorWriteDisabled,
72 bool doesStencilWrite, 70 bool doesStencilWrite,
73 GrColor* overrideColor, 71 GrColor* overrideColor,
74 const GrDrawTargetCaps& caps) SK_ OVERRIDE; 72 const GrDrawTargetCaps& caps) SK_ OVERRIDE;
75 73
76 void getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const SK_OVERRIDE { 74 void getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const SK_OVERRIDE {
77 blendInfo->fSrcBlend = fSrcBlend; 75 blendInfo->fSrcBlend = fSrcBlend;
78 blendInfo->fDstBlend = fDstBlend; 76 blendInfo->fDstBlend = fDstBlend;
79 blendInfo->fBlendConstant = fBlendConstant; 77 blendInfo->fBlendConstant = fBlendConstant;
80 } 78 }
81 79
82 private: 80 private:
83 GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrCo lor constant); 81 GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrCo lor constant);
84 82
85 bool onIsEqual(const GrXferProcessor& xpBase) const SK_OVERRIDE { 83 bool onIsEqual(const GrXferProcessor& xpBase) const SK_OVERRIDE {
86 const GrPorterDuffXferProcessor& xp = xpBase.cast<GrPorterDuffXferProces sor>(); 84 const GrPorterDuffXferProcessor& xp = xpBase.cast<GrPorterDuffXferProces sor>();
87 if (fSrcBlend != xp.fSrcBlend || 85 if (fSrcBlend != xp.fSrcBlend ||
88 fDstBlend != xp.fDstBlend || 86 fDstBlend != xp.fDstBlend ||
89 fBlendConstant != xp.fBlendConstant || 87 fBlendConstant != xp.fBlendConstant ||
90 fPrimaryOutputType != xp.fPrimaryOutputType || 88 fPrimaryOutputType != xp.fPrimaryOutputType ||
91 fSecondaryOutputType != xp.fSecondaryOutputType) { 89 fSecondaryOutputType != xp.fSecondaryOutputType) {
92 return false; 90 return false;
93 } 91 }
94 return true; 92 return true;
95 } 93 }
96 94
97 GrXferProcessor::OptFlags internalGetOptimizations(const GrProcOptInfo& colo rPOI, 95 GrXferProcessor::OptFlags internalGetOptimizations(const GrProcOptInfo& colo rPOI,
98 const GrProcOptInfo& cove ragePOI, 96 const GrProcOptInfo& cove ragePOI,
99 bool colorWriteDisabled,
100 bool doesStencilWrite); 97 bool doesStencilWrite);
101 98
102 void calcOutputTypes(GrXferProcessor::OptFlags blendOpts, const GrDrawTarget Caps& caps, 99 void calcOutputTypes(GrXferProcessor::OptFlags blendOpts, const GrDrawTarget Caps& caps,
103 bool hasSolidCoverage, bool readDst); 100 bool hasSolidCoverage, bool readDst);
104 101
105 GrBlendCoeff fSrcBlend; 102 GrBlendCoeff fSrcBlend;
106 GrBlendCoeff fDstBlend; 103 GrBlendCoeff fDstBlend;
107 GrColor fBlendConstant; 104 GrColor fBlendConstant;
108 PrimaryOutputType fPrimaryOutputType; 105 PrimaryOutputType fPrimaryOutputType;
109 SecondaryOutputType fSecondaryOutputType; 106 SecondaryOutputType fSecondaryOutputType;
(...skipping 13 matching lines...) Expand all
123 120
124 static GrXPFactory* Create(GrBlendCoeff src, GrBlendCoeff dst) { 121 static GrXPFactory* Create(GrBlendCoeff src, GrBlendCoeff dst) {
125 return SkNEW_ARGS(GrPorterDuffXPFactory, (src, dst)); 122 return SkNEW_ARGS(GrPorterDuffXPFactory, (src, dst));
126 } 123 }
127 124
128 GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI, 125 GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI,
129 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE; 126 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE;
130 127
131 bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE; 128 bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE;
132 129
133 bool canApplyCoverage(const GrProcOptInfo& colorPOI, const GrProcOptInfo& co veragePOI, 130 bool canApplyCoverage(const GrProcOptInfo& colorPOI,
134 bool colorWriteDisabled) const SK_OVERRIDE; 131 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE;
135 132
136 bool canTweakAlphaForCoverage() const SK_OVERRIDE; 133 bool canTweakAlphaForCoverage() const SK_OVERRIDE;
137 134
138 void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI, 135 void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI,
139 bool colorWriteDisabled,
140 GrXPFactory::InvariantOutput*) const SK_OVERRIDE; 136 GrXPFactory::InvariantOutput*) const SK_OVERRIDE;
141 137
138 bool willReadDst(const GrProcOptInfo& colorPOI,
139 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE;
140
142 private: 141 private:
143 GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst); 142 GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst);
144 143
145 bool onIsEqual(const GrXPFactory& xpfBase) const SK_OVERRIDE { 144 bool onIsEqual(const GrXPFactory& xpfBase) const SK_OVERRIDE {
146 const GrPorterDuffXPFactory& xpf = xpfBase.cast<GrPorterDuffXPFactory>() ; 145 const GrPorterDuffXPFactory& xpf = xpfBase.cast<GrPorterDuffXPFactory>() ;
147 return (fSrcCoeff == xpf.fSrcCoeff && fDstCoeff == xpf.fDstCoeff); 146 return (fSrcCoeff == xpf.fSrcCoeff && fDstCoeff == xpf.fDstCoeff);
148 } 147 }
149 148
150 GR_DECLARE_XP_FACTORY_TEST; 149 GR_DECLARE_XP_FACTORY_TEST;
151 150
152 GrBlendCoeff fSrcCoeff; 151 GrBlendCoeff fSrcCoeff;
153 GrBlendCoeff fDstCoeff; 152 GrBlendCoeff fDstCoeff;
154 153
155 typedef GrXPFactory INHERITED; 154 typedef GrXPFactory INHERITED;
156 }; 155 };
157 156
158 #endif 157 #endif
OLDNEW
« no previous file with comments | « include/gpu/GrXferProcessor.h ('k') | src/gpu/GrClipMaskManager.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698