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

Side by Side Diff: src/effects/SkArithmeticMode_gpu.h

Issue 837633005: Add Arithmetic mode xp. (Closed) Base URL: https://skia.googlesource.com/skia.git@arithGpuFile
Patch Set: Cleanup Created 5 years, 11 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 #ifndef SkArithmeticMode_gpu_DEFINED 8 #ifndef SkArithmeticMode_gpu_DEFINED
9 #define SkArithmeticMode_gpu_DEFINED 9 #define SkArithmeticMode_gpu_DEFINED
10 10
11 #if SK_SUPPORT_GPU 11 #if SK_SUPPORT_GPU
12 12
13 #include "GrCoordTransform.h" 13 #include "GrCoordTransform.h"
14 #include "GrFragmentProcessor.h" 14 #include "GrFragmentProcessor.h"
15 #include "GrTextureAccess.h" 15 #include "GrTextureAccess.h"
16 #include "GrTypes.h"
17 #include "GrXferProcessor.h"
16 18
17 class GrInvariantOutput; 19 class GrInvariantOutput;
20 class GrProcOptInfo;
18 class GrTexture; 21 class GrTexture;
19 22
20 /////////////////////////////////////////////////////////////////////////////// 23 ///////////////////////////////////////////////////////////////////////////////
21 // Fragment Processor 24 // Fragment Processor
22 /////////////////////////////////////////////////////////////////////////////// 25 ///////////////////////////////////////////////////////////////////////////////
23 26
24 class GrGLArtithmeticFP; 27 class GrGLArtithmeticFP;
25 28
26 class GrArithmeticFP : public GrFragmentProcessor { 29 class GrArithmeticFP : public GrFragmentProcessor {
27 public: 30 public:
28 static GrFragmentProcessor* Create(float k1, float k2, float k3, float k4, b ool enforcePMColor, 31 static GrFragmentProcessor* Create(float k1, float k2, float k3, float k4, b ool enforcePMColor,
29 GrTexture* background) { 32 GrTexture* background) {
30 return SkNEW_ARGS(GrArithmeticFP, (k1, k2, k3, k4, enforcePMColor, backg round)); 33 return SkNEW_ARGS(GrArithmeticFP, (k1, k2, k3, k4, enforcePMColor, backg round));
31 } 34 }
32 35
33 ~GrArithmeticFP() SK_OVERRIDE {}; 36 ~GrArithmeticFP() SK_OVERRIDE {};
34 37
35 const char* name() const SK_OVERRIDE { return "Arithmetic"; } 38 const char* name() const SK_OVERRIDE { return "Arithmetic"; }
36 39
37 void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE; 40 void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE;
38 41
39 GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE; 42 GrGLFragmentProcessor* createGLInstance() const SK_OVERRIDE;
40 43
41 GrTexture* backgroundTexture() const { return fBackgroundAccess.getTexture() ; }
42
43 float k1() const { return fK1; } 44 float k1() const { return fK1; }
44 float k2() const { return fK2; } 45 float k2() const { return fK2; }
45 float k3() const { return fK3; } 46 float k3() const { return fK3; }
46 float k4() const { return fK4; } 47 float k4() const { return fK4; }
47 bool enforcePMColor() const { return fEnforcePMColor; } 48 bool enforcePMColor() const { return fEnforcePMColor; }
48 49
49 private: 50 private:
50 bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE; 51 bool onIsEqual(const GrFragmentProcessor&) const SK_OVERRIDE;
51 52
52 void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE; 53 void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
53 54
54 GrArithmeticFP(float k1, float k2, float k3, float k4, bool enforcePMColor, 55 GrArithmeticFP(float k1, float k2, float k3, float k4, bool enforcePMColor,
55 GrTexture* background); 56 GrTexture* background);
56 57
57 float fK1, fK2, fK3, fK4; 58 float fK1, fK2, fK3, fK4;
58 bool fEnforcePMColor; 59 bool fEnforcePMColor;
59 GrCoordTransform fBackgroundTransform; 60 GrCoordTransform fBackgroundTransform;
60 GrTextureAccess fBackgroundAccess; 61 GrTextureAccess fBackgroundAccess;
61 62
62 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; 63 GR_DECLARE_FRAGMENT_PROCESSOR_TEST;
63 typedef GrFragmentProcessor INHERITED; 64 typedef GrFragmentProcessor INHERITED;
64 }; 65 };
65 66
67 ///////////////////////////////////////////////////////////////////////////////
68 // Xfer Processor
69 ///////////////////////////////////////////////////////////////////////////////
70
71 class GrArithmeticXP : public GrXferProcessor {
72 public:
73 static GrXferProcessor* Create(float k1, float k2, float k3, float k4, bool enforcePMColor) {
74 return SkNEW_ARGS(GrArithmeticXP, (k1, k2, k3, k4, enforcePMColor));
75 }
76
77 ~GrArithmeticXP() SK_OVERRIDE {};
78
79 const char* name() const SK_OVERRIDE { return "Arithmetic"; }
80
81 void getGLProcessorKey(const GrGLCaps& caps, GrProcessorKeyBuilder* b) const SK_OVERRIDE;
82
83 GrGLXferProcessor* createGLInstance() const SK_OVERRIDE;
84
85 bool hasSecondaryOutput() const SK_OVERRIDE { return false; }
86
87 bool willReadDst(const GrProcOptInfo& colorPOI,
88 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE {
89 return true;
90 }
91
92 GrXferProcessor::OptFlags getOptimizations(const GrProcOptInfo& colorPOI,
93 const GrProcOptInfo& coveragePOI,
94 bool doesStencilWrite,
95 GrColor* overrideColor,
96 const GrDrawTargetCaps& caps) SK_ OVERRIDE;
97
98 void getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const SK_OVERRIDE {
99 blendInfo->fSrcBlend = kOne_GrBlendCoeff;
100 blendInfo->fDstBlend = kZero_GrBlendCoeff;
101 blendInfo->fBlendConstant = 0;
102 }
103
104 float k1() const { return fK1; }
105 float k2() const { return fK2; }
106 float k3() const { return fK3; }
107 float k4() const { return fK4; }
108 bool enforcePMColor() const { return fEnforcePMColor; }
109
110 private:
111 GrArithmeticXP(float k1, float k2, float k3, float k4, bool enforcePMColor);
112
113 bool onIsEqual(const GrXferProcessor& xpBase) const SK_OVERRIDE {
114 const GrArithmeticXP& xp = xpBase.cast<GrArithmeticXP>();
115 if (fK1 != xp.fK1 ||
116 fK2 != xp.fK2 ||
117 fK3 != xp.fK3 ||
118 fK4 != xp.fK4 ||
119 fEnforcePMColor != xp.fEnforcePMColor) {
120 return false;
121 }
122 return true;
123 }
124
125 float fK1, fK2, fK3, fK4;
126 bool fEnforcePMColor;
127
128 typedef GrXferProcessor INHERITED;
129 };
130
131 ///////////////////////////////////////////////////////////////////////////////
132
133 class GrArithmeticXPFactory : public GrXPFactory {
134 public:
135 static GrXPFactory* Create(float k1, float k2, float k3, float k4, bool enfo rcePMColor) {
136 return SkNEW_ARGS(GrArithmeticXPFactory, (k1, k2, k3, k4, enforcePMColor ));
137 }
138
139 GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI,
140 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE {
141 return GrArithmeticXP::Create(fK1, fK2, fK3, fK4, fEnforcePMColor);
142 }
143
144 bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE {
145 return true;
146 }
147
148 bool canApplyCoverage(const GrProcOptInfo& colorPOI,
149 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE {
150 return true;
151 }
152
153 bool canTweakAlphaForCoverage() const SK_OVERRIDE {
154 return false;
155 }
156
157 void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcOptInfo& coveragePOI,
158 GrXPFactory::InvariantOutput*) const SK_OVERRIDE;
159
160 bool willReadDst(const GrProcOptInfo& colorPOI,
161 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE {
162 return true;
163 }
164
165 private:
166 GrArithmeticXPFactory(float k1, float k2, float k3, float k4, bool enforcePM Color);
167
168 bool onIsEqual(const GrXPFactory& xpfBase) const SK_OVERRIDE {
169 const GrArithmeticXPFactory& xpf = xpfBase.cast<GrArithmeticXPFactory>() ;
170 if (fK1 != xpf.fK1 ||
171 fK2 != xpf.fK2 ||
172 fK3 != xpf.fK3 ||
173 fK4 != xpf.fK4 ||
174 fEnforcePMColor != xpf.fEnforcePMColor) {
175 return false;
176 }
177 return true;
178 }
179
180 GR_DECLARE_XP_FACTORY_TEST;
181
182 float fK1, fK2, fK3, fK4;
183 bool fEnforcePMColor;
184
185 typedef GrXPFactory INHERITED;
186 };
187
66 #endif 188 #endif
67 #endif 189 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698