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

Side by Side Diff: include/gpu/GrInvariantOutput.h

Issue 1334293003: Create fragment processor for performing input color blend with child processor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: fix Created 5 years, 3 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
« no previous file with comments | « include/gpu/GrColor.h ('k') | include/gpu/SkGr.h » ('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 GrInvariantOutput_DEFINED 8 #ifndef GrInvariantOutput_DEFINED
9 #define GrInvariantOutput_DEFINED 9 #define GrInvariantOutput_DEFINED
10 10
11 #include "GrColor.h" 11 #include "GrColor.h"
12 12
13 struct GrInitInvariantOutput { 13 struct GrInitInvariantOutput {
14 GrInitInvariantOutput() 14 GrInitInvariantOutput()
15 : fValidFlags(0) 15 : fValidFlags(kNone_GrColorComponentFlags)
16 , fColor(0) 16 , fColor(0)
17 , fIsSingleComponent(false) 17 , fIsSingleComponent(false)
18 , fIsLCDCoverage(false) {} 18 , fIsLCDCoverage(false) {}
19 19
20 void setKnownFourComponents(GrColor color) { 20 void setKnownFourComponents(GrColor color) {
21 fColor = color; 21 fColor = color;
22 fValidFlags = kRGBA_GrColorComponentFlags; 22 fValidFlags = kRGBA_GrColorComponentFlags;
23 fIsSingleComponent = false; 23 fIsSingleComponent = false;
24 } 24 }
25 25
26 void setUnknownFourComponents() { 26 void setUnknownFourComponents() {
27 fValidFlags = 0; 27 fValidFlags = kNone_GrColorComponentFlags;
28 fIsSingleComponent = false; 28 fIsSingleComponent = false;
29 } 29 }
30 30
31 void setUnknownOpaqueFourComponents() { 31 void setUnknownOpaqueFourComponents() {
32 fColor = 0xffU << GrColor_SHIFT_A; 32 fColor = 0xffU << GrColor_SHIFT_A;
33 fValidFlags = kA_GrColorComponentFlag; 33 fValidFlags = kA_GrColorComponentFlag;
34 fIsSingleComponent = false; 34 fIsSingleComponent = false;
35 } 35 }
36 36
37 void setKnownSingleComponent(uint8_t alpha) { 37 void setKnownSingleComponent(uint8_t alpha) {
38 fColor = GrColorPackRGBA(alpha, alpha, alpha, alpha); 38 fColor = GrColorPackRGBA(alpha, alpha, alpha, alpha);
39 fValidFlags = kRGBA_GrColorComponentFlags; 39 fValidFlags = kRGBA_GrColorComponentFlags;
40 fIsSingleComponent = true; 40 fIsSingleComponent = true;
41 } 41 }
42 42
43 void setUnknownSingleComponent() { 43 void setUnknownSingleComponent() {
44 fValidFlags = 0; 44 fValidFlags = kNone_GrColorComponentFlags;
45 fIsSingleComponent = true; 45 fIsSingleComponent = true;
46 } 46 }
47 47
48 void setUsingLCDCoverage() { fIsLCDCoverage = true; } 48 void setUsingLCDCoverage() { fIsLCDCoverage = true; }
49 49
50 uint32_t fValidFlags; 50 GrColorComponentFlags fValidFlags;
51 GrColor fColor; 51 GrColor fColor;
52 bool fIsSingleComponent; 52 bool fIsSingleComponent;
53 bool fIsLCDCoverage; // Temorary data member until texture pixel configs are updated 53 bool fIsLCDCoverage; // Temorary data member until textur e pixel configs are
54 // updated
54 }; 55 };
55 56
56 class GrInvariantOutput { 57 class GrInvariantOutput {
57 public: 58 public:
58 GrInvariantOutput(GrColor color, GrColorComponentFlags flags, bool isSingleC omponent) 59 GrInvariantOutput(GrColor color, GrColorComponentFlags flags, bool isSingleC omponent)
59 : fColor(color) 60 : fColor(color)
60 , fValidFlags(flags) 61 , fValidFlags(flags)
61 , fIsSingleComponent(isSingleComponent) 62 , fIsSingleComponent(isSingleComponent)
62 , fNonMulStageFound(false) 63 , fNonMulStageFound(false)
63 , fWillUseInputColor(true) 64 , fWillUseInputColor(true)
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 } 101 }
101 SkDEBUGCODE(this->validate()); 102 SkDEBUGCODE(this->validate());
102 } 103 }
103 104
104 void mulByUnknownSingleComponent() { 105 void mulByUnknownSingleComponent() {
105 SkDEBUGCODE(this->validate()); 106 SkDEBUGCODE(this->validate());
106 if (this->hasZeroAlpha()) { 107 if (this->hasZeroAlpha()) {
107 this->internalSetToTransparentBlack(); 108 this->internalSetToTransparentBlack();
108 } else { 109 } else {
109 // We don't need to change fIsSingleComponent in this case 110 // We don't need to change fIsSingleComponent in this case
110 fValidFlags = 0; 111 fValidFlags = kNone_GrColorComponentFlags;
111 } 112 }
112 SkDEBUGCODE(this->validate()); 113 SkDEBUGCODE(this->validate());
113 } 114 }
114 115
115 void mulByKnownSingleComponent(uint8_t alpha) { 116 void mulByKnownSingleComponent(uint8_t alpha) {
116 SkDEBUGCODE(this->validate()); 117 SkDEBUGCODE(this->validate());
117 if (this->hasZeroAlpha() || 0 == alpha) { 118 if (this->hasZeroAlpha() || 0 == alpha) {
118 this->internalSetToTransparentBlack(); 119 this->internalSetToTransparentBlack();
119 } else { 120 } else {
120 if (alpha != 255) { 121 if (alpha != 255) {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 fIsSingleComponent = false; 165 fIsSingleComponent = false;
165 fColor = GrColorPackRGBA( 166 fColor = GrColorPackRGBA(
166 SkMulDiv255Round(preAlpha, GrColorUnpackR(color)), 167 SkMulDiv255Round(preAlpha, GrColorUnpackR(color)),
167 SkMulDiv255Round(preAlpha, GrColorUnpackG(color)), 168 SkMulDiv255Round(preAlpha, GrColorUnpackG(color)),
168 SkMulDiv255Round(preAlpha, GrColorUnpackB(color)), 169 SkMulDiv255Round(preAlpha, GrColorUnpackB(color)),
169 SkMulDiv255Round(preAlpha, a)); 170 SkMulDiv255Round(preAlpha, a));
170 fValidFlags = kRGBA_GrColorComponentFlags; 171 fValidFlags = kRGBA_GrColorComponentFlags;
171 } 172 }
172 } else { 173 } else {
173 fIsSingleComponent = false; 174 fIsSingleComponent = false;
174 fValidFlags = 0; 175 fValidFlags = kNone_GrColorComponentFlags;
175 } 176 }
176 SkDEBUGCODE(this->validate()); 177 SkDEBUGCODE(this->validate());
177 } 178 }
178 179
179 // Ignores the incoming color's RGB and muls its alpha by the alpha param an d sets all channels 180 // Ignores the incoming color's RGB and muls its alpha by the alpha param an d sets all channels
180 // equal to that value. 181 // equal to that value.
181 void mulAlphaByKnownSingleComponent(uint8_t alpha) { 182 void mulAlphaByKnownSingleComponent(uint8_t alpha) {
182 SkDEBUGCODE(this->validate()); 183 SkDEBUGCODE(this->validate());
183 if (0 == alpha || this->hasZeroAlpha()) { 184 if (0 == alpha || this->hasZeroAlpha()) {
184 this->internalSetToTransparentBlack(); 185 this->internalSetToTransparentBlack();
185 } else { 186 } else {
186 if (fValidFlags & kA_GrColorComponentFlag) { 187 if (fValidFlags & kA_GrColorComponentFlag) {
187 GrColor a = GrColorUnpackA(fColor); 188 GrColor a = GrColorUnpackA(fColor);
188 a = SkMulDiv255Round(alpha, a); 189 a = SkMulDiv255Round(alpha, a);
189 fColor = GrColorPackRGBA(a, a, a, a); 190 fColor = GrColorPackRGBA(a, a, a, a);
190 fValidFlags = kRGBA_GrColorComponentFlags; 191 fValidFlags = kRGBA_GrColorComponentFlags;
191 } else { 192 } else {
192 fValidFlags = 0; 193 fValidFlags = kNone_GrColorComponentFlags;
193 } 194 }
194 fIsSingleComponent = true; 195 fIsSingleComponent = true;
195 } 196 }
196 SkDEBUGCODE(this->validate()); 197 SkDEBUGCODE(this->validate());
197 } 198 }
198 199
199 void invalidateComponents(uint8_t invalidateFlags, ReadInput readsInput) { 200 void invalidateComponents(GrColorComponentFlags invalidateFlags, ReadInput r eadsInput) {
200 SkDEBUGCODE(this->validate()); 201 SkDEBUGCODE(this->validate());
201 fValidFlags &= ~invalidateFlags; 202 fValidFlags = (fValidFlags & ~invalidateFlags);
202 fIsSingleComponent = false; 203 fIsSingleComponent = false;
203 fNonMulStageFound = true; 204 fNonMulStageFound = true;
204 if (kWillNot_ReadInput == readsInput) { 205 if (kWillNot_ReadInput == readsInput) {
205 fWillUseInputColor = false; 206 fWillUseInputColor = false;
206 } 207 }
207 SkDEBUGCODE(this->validate()); 208 SkDEBUGCODE(this->validate());
208 } 209 }
209 210
210 void setToOther(uint8_t validFlags, GrColor color, ReadInput readsInput) { 211 void setToOther(GrColorComponentFlags validFlags, GrColor color, ReadInput r eadsInput) {
211 SkDEBUGCODE(this->validate()); 212 SkDEBUGCODE(this->validate());
212 fValidFlags = validFlags; 213 fValidFlags = validFlags;
213 fColor = color; 214 fColor = color;
214 fIsSingleComponent = false; 215 fIsSingleComponent = false;
215 fNonMulStageFound = true; 216 fNonMulStageFound = true;
216 if (kWillNot_ReadInput == readsInput) { 217 if (kWillNot_ReadInput == readsInput) {
217 fWillUseInputColor = false; 218 fWillUseInputColor = false;
218 } 219 }
219 if (kRGBA_GrColorComponentFlags == fValidFlags) { 220 if (kRGBA_GrColorComponentFlags == fValidFlags) {
220 uint32_t a; 221 uint32_t a;
(...skipping 19 matching lines...) Expand all
240 SkDEBUGCODE(this->validate()); 241 SkDEBUGCODE(this->validate());
241 } 242 }
242 243
243 // Temporary setter to handle LCD text correctly until we improve texture pi xel config queries 244 // Temporary setter to handle LCD text correctly until we improve texture pi xel config queries
244 // and thus can rely solely on number of coverage components for RGA vs sing le channel coverage. 245 // and thus can rely solely on number of coverage components for RGA vs sing le channel coverage.
245 void setUsingLCDCoverage() { 246 void setUsingLCDCoverage() {
246 fIsLCDCoverage = true; 247 fIsLCDCoverage = true;
247 } 248 }
248 249
249 GrColor color() const { return fColor; } 250 GrColor color() const { return fColor; }
250 uint8_t validFlags() const { return fValidFlags; } 251 GrColorComponentFlags validFlags() const { return fValidFlags; }
251 252
252 /** 253 /**
253 * If isSingleComponent is true, then the flag values for r, g, b, and a mus t all be the 254 * If isSingleComponent is true, then the flag values for r, g, b, and a mus t all be the
254 * same. If the flags are all set then all color components must be equal. 255 * same. If the flags are all set then all color components must be equal.
255 */ 256 */
256 SkDEBUGCODE(void validate() const;) 257 SkDEBUGCODE(void validate() const;)
257 258
258 private: 259 private:
259 friend class GrProcOptInfo; 260 friend class GrProcOptInfo;
260 261
(...skipping 21 matching lines...) Expand all
282 fIsLCDCoverage = io.fIsLCDCoverage; 283 fIsLCDCoverage = io.fIsLCDCoverage;
283 } 284 }
284 285
285 void internalSetToTransparentBlack() { 286 void internalSetToTransparentBlack() {
286 fValidFlags = kRGBA_GrColorComponentFlags; 287 fValidFlags = kRGBA_GrColorComponentFlags;
287 fColor = 0; 288 fColor = 0;
288 fIsSingleComponent = true; 289 fIsSingleComponent = true;
289 } 290 }
290 291
291 void internalSetToUnknown() { 292 void internalSetToUnknown() {
292 fValidFlags = 0; 293 fValidFlags = kNone_GrColorComponentFlags;
293 fIsSingleComponent = false; 294 fIsSingleComponent = false;
294 } 295 }
295 296
296 bool hasZeroAlpha() const { 297 bool hasZeroAlpha() const {
297 return ((fValidFlags & kA_GrColorComponentFlag) && 0 == GrColorUnpackA(f Color)); 298 return ((fValidFlags & kA_GrColorComponentFlag) && 0 == GrColorUnpackA(f Color));
298 } 299 }
299 300
300 bool isOpaque() const { 301 bool isOpaque() const {
301 return ((fValidFlags & kA_GrColorComponentFlag) && 0xFF == GrColorUnpack A(fColor)); 302 return ((fValidFlags & kA_GrColorComponentFlag) && 0xFF == GrColorUnpack A(fColor));
302 } 303 }
(...skipping 12 matching lines...) Expand all
315 316
316 bool isLCDCoverage() const { return fIsLCDCoverage; } 317 bool isLCDCoverage() const { return fIsLCDCoverage; }
317 318
318 SkDEBUGCODE(bool colorComponentsAllEqual() const;) 319 SkDEBUGCODE(bool colorComponentsAllEqual() const;)
319 /** 320 /**
320 * If alpha is valid, check that any valid R,G,B values are <= A 321 * If alpha is valid, check that any valid R,G,B values are <= A
321 */ 322 */
322 SkDEBUGCODE(bool validPreMulColor() const;) 323 SkDEBUGCODE(bool validPreMulColor() const;)
323 324
324 GrColor fColor; 325 GrColor fColor;
325 uint32_t fValidFlags; 326 GrColorComponentFlags fValidFlags;
326 bool fIsSingleComponent; 327 bool fIsSingleComponent;
327 bool fNonMulStageFound; 328 bool fNonMulStageFound;
328 bool fWillUseInputColor; 329 bool fWillUseInputColor;
329 bool fIsLCDCoverage; // Temorary data member until texture pixel configs are updated 330 bool fIsLCDCoverage; // Temorary data member until texture pixel configs are updated
330 331
331 }; 332 };
332 333
333 #endif 334 #endif
334 335
OLDNEW
« no previous file with comments | « include/gpu/GrColor.h ('k') | include/gpu/SkGr.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698