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

Side by Side Diff: tests/GrPorterDuffTest.cpp

Issue 1124373002: Implement Porter Duff XP with a blend table (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: add coverage at runtime Created 5 years, 7 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
(Empty)
1 /*
2 * Copyright 2015 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8 #include "SkXfermode.h"
9 #include "Test.h"
10
11 #if SK_SUPPORT_GPU
12
13 #include "GrContextFactory.h"
14 #include "GrGpu.h"
15 #include "GrXferProcessor.h"
16 #include "effects/GrPorterDuffXferProcessor.h"
17
18 ////////////////////////////////////////////////////////////////////////////////
19
20 static void test_alpha_unknown_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps);
21 static void test_alpha_unknown_no_coverage(skiatest::Reporter* reporter, const G rCaps& caps);
22 static void test_alpha_opaque_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps);
23 static void test_alpha_opaque_no_coverage(skiatest::Reporter* reporter, const Gr Caps& caps);
24 static void test_color_white_with_coverage(skiatest::Reporter* reporter, const G rCaps& caps);
25 static void test_color_white_no_coverage(skiatest::Reporter* reporter, const GrC aps& caps);
26
27 DEF_GPUTEST(GrPorterDuff, reporter, factory) {
28 GrContext* ctx = factory->get(GrContextFactory::kNull_GLContextType);
29 if (!ctx) {
30 SkFAIL("Failed to create null context.");
31 return;
32 }
33
34 const GrCaps& caps = *ctx->getGpu()->caps();
35 if (!caps.shaderCaps()->dualSourceBlendingSupport()) {
36 SkFAIL("Null context does not support dual source blending.");
37 return;
38 }
39
40 test_alpha_unknown_with_coverage(reporter, caps);
41 test_alpha_unknown_no_coverage(reporter, caps);
42 test_alpha_opaque_with_coverage(reporter, caps);
43 test_alpha_opaque_no_coverage(reporter, caps);
44 test_color_white_with_coverage(reporter, caps);
45 test_color_white_with_coverage(reporter, caps);
46 test_color_white_no_coverage(reporter, caps);
47 }
48
49 ////////////////////////////////////////////////////////////////////////////////
50
51 #define TEST_ASSERT(...) REPORTER_ASSERT(reporter, __VA_ARGS__)
52
53 enum {
54 kNone_OutputType,
55 kCoverage_OutputType,
56 kModulate_OutputType,
57 kISAModulate_OutputType,
58 kISCModulate_OutputType
59 };
60
61 enum {
62 kNone_Opt = GrXferProcessor::kNone_Opt,
63 kSkipDraw_OptFlag = GrXferProcessor::kSkipDraw_OptFlag,
64 kIgnoreColor_OptFlag = GrXferProcessor::kIgnoreColor_OptFlag,
65 kIgnoreCoverage_OptFlag = GrXferProcessor::kIgnoreCoverage_OptFlag ,
66 kCanTweakAlphaForCoverage_OptFlag = GrXferProcessor::kCanTweakAlphaForCovera ge_OptFlag
67 };
68
69 class GrPorterDuffTest {
70 public:
71 struct XPInfo {
72 XPInfo(skiatest::Reporter* reporter, SkXfermode::Mode xfermode, const Gr Caps& caps,
73 const GrProcOptInfo& colorPOI, const GrProcOptInfo& covPOI) {
74 SkAutoTUnref<GrXPFactory> xpf(GrPorterDuffXPFactory::Create(xfermode ));
75 SkAutoTUnref<GrXferProcessor> xp(xpf->createXferProcessor(colorPOI, covPOI, 0, caps));
76 TEST_ASSERT(!xpf->willNeedDstCopy(caps, colorPOI, covPOI));
77 xpf->getInvariantOutput(colorPOI, covPOI, &fInvariantOutput);
78 fOptFlags = xp->getOptimizations(colorPOI, covPOI, false, 0, caps);
79 GetXPOutputTypes(xp, &fPrimaryOutputType, &fSecondaryOutputType);
80 xp->getBlendInfo(&fBlendInfo);
81 }
82
83 GrXPFactory::InvariantOutput fInvariantOutput;
84 int fOptFlags;
85 int fPrimaryOutputType;
86 int fSecondaryOutputType;
87 GrXferProcessor::BlendInfo fBlendInfo;
88 };
89
90 static void GetXPOutputTypes(const GrXferProcessor* xp, int* outPrimary, int * outSecondary) {
91 GrPorterDuffXPFactory::TestGetXPOutputTypes(xp, outPrimary, outSecondary );
92 }
93 };
94
95 static void test_alpha_unknown_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
96 GrProcOptInfo colorPOI, covPOI;
97 colorPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, fals e);
98 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true);
99
100 SkASSERT(!colorPOI.isOpaque());
101 SkASSERT(!colorPOI.isSolidWhite());
102 SkASSERT(!covPOI.isSolidWhite());
103
104 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
105 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
106 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI);
107
108 switch (xfermode) {
109 case SkXfermode::kClear_Mode:
110 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
111 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
112 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
113 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
114 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
115 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
116 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
117 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
118 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
119 break;
120 case SkXfermode::kSrc_Mode:
121 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
122 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
123 TEST_ASSERT((kNone_Opt) == xpi.fOptFlags);
124 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
125 TEST_ASSERT(kCoverage_OutputType == xpi.fSecondaryOutputType);
126 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
127 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
128 TEST_ASSERT(kIS2A_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
129 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
130 break;
131 case SkXfermode::kDst_Mode:
132 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
133 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
134 TEST_ASSERT((kSkipDraw_OptFlag |
135 kIgnoreColor_OptFlag |
136 kIgnoreCoverage_OptFlag |
137 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
138 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
139 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
140 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
141 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
142 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
143 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
144 break;
145 case SkXfermode::kSrcOver_Mode:
146 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
147 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
148 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
149 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
150 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
151 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
152 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
153 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
154 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
155 break;
156 case SkXfermode::kDstOver_Mode:
157 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
158 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
159 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
160 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
161 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
162 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
163 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
164 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
165 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
166 break;
167 case SkXfermode::kSrcIn_Mode:
168 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
169 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
170 TEST_ASSERT((kNone_Opt) == xpi.fOptFlags);
171 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
172 TEST_ASSERT(kCoverage_OutputType == xpi.fSecondaryOutputType);
173 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
174 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
175 TEST_ASSERT(kIS2A_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
176 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
177 break;
178 case SkXfermode::kDstIn_Mode:
179 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
180 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
181 TEST_ASSERT((kNone_Opt) == xpi.fOptFlags);
182 TEST_ASSERT(kISAModulate_OutputType == xpi.fPrimaryOutputType);
183 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
184 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
185 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
186 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
187 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
188 break;
189 case SkXfermode::kSrcOut_Mode:
190 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
191 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
192 TEST_ASSERT((kNone_Opt) == xpi.fOptFlags);
193 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
194 TEST_ASSERT(kCoverage_OutputType == xpi.fSecondaryOutputType);
195 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
196 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
197 TEST_ASSERT(kIS2A_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
198 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
199 break;
200 case SkXfermode::kDstOut_Mode:
201 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
202 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
203 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
204 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
205 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
206 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
207 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
208 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
209 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
210 break;
211 case SkXfermode::kSrcATop_Mode:
212 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
213 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
214 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
215 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
216 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
217 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
218 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
219 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
220 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
221 break;
222 case SkXfermode::kDstATop_Mode:
223 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
224 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
225 TEST_ASSERT((kNone_Opt) == xpi.fOptFlags);
226 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
227 TEST_ASSERT(kISAModulate_OutputType == xpi.fSecondaryOutputType) ;
228 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
229 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
230 TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
231 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
232 break;
233 case SkXfermode::kXor_Mode:
234 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
235 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
236 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
237 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
238 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
239 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
240 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
241 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
242 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
243 break;
244 case SkXfermode::kPlus_Mode:
245 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
246 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
247 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
248 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
249 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
250 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
251 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
252 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
253 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
254 break;
255 case SkXfermode::kModulate_Mode:
256 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
257 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
258 TEST_ASSERT((kNone_Opt) == xpi.fOptFlags);
259 TEST_ASSERT(kISCModulate_OutputType == xpi.fPrimaryOutputType);
260 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
261 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
262 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
263 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
264 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
265 break;
266 case SkXfermode::kScreen_Mode:
267 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
268 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
269 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
270 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
271 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
272 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
273 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
274 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
275 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
276 break;
277 default:
278 ERRORF(reporter, "Invalid xfermode.");
279 break;
280 }
281 }
282 }
283
284 static void test_alpha_unknown_no_coverage(skiatest::Reporter* reporter, const G rCaps& caps) {
285 GrProcOptInfo colorPOI, covPOI;
286 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackRGBA(229, 0, 154, 0),
287 kR_GrColorComponentFlag | kB_GrColorComponent Flag, false);
288 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo nentFlags, true);
289
290 SkASSERT(!colorPOI.isOpaque());
291 SkASSERT(!colorPOI.isSolidWhite());
292 SkASSERT(covPOI.isSolidWhite());
293
294 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
295 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
296 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI);
297
298 switch (xfermode) {
299 case SkXfermode::kClear_Mode:
300 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
301 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor);
302 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
303 TEST_ASSERT((kIgnoreColor_OptFlag |
304 kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
305 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
306 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
307 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
308 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
309 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
310 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
311 break;
312 case SkXfermode::kSrc_Mode:
313 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
314 TEST_ASSERT(229 == GrColorUnpackR(xpi.fInvariantOutput.fBlendedC olor));
315 TEST_ASSERT(154 == GrColorUnpackB(xpi.fInvariantOutput.fBlendedC olor));
316 TEST_ASSERT((kR_GrColorComponentFlag |
317 kB_GrColorComponentFlag) == xpi.fInvariantOutput.fB lendedColorFlags);
318 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
319 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
320 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
321 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
322 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
323 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
324 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
325 break;
326 case SkXfermode::kDst_Mode:
327 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
328 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
329 TEST_ASSERT((kSkipDraw_OptFlag |
330 kIgnoreColor_OptFlag |
331 kIgnoreCoverage_OptFlag |
332 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
333 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
334 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
335 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
336 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
337 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
338 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
339 break;
340 case SkXfermode::kSrcOver_Mode:
341 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
342 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
343 TEST_ASSERT((kIgnoreCoverage_OptFlag |
344 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
345 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
346 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
347 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
348 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
349 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
350 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
351 break;
352 case SkXfermode::kDstOver_Mode:
353 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
354 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
355 TEST_ASSERT((kIgnoreCoverage_OptFlag |
356 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
357 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
358 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
359 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
360 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
361 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
362 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
363 break;
364 case SkXfermode::kSrcIn_Mode:
365 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
366 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
367 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
368 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
369 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
370 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
371 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
372 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
373 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
374 break;
375 case SkXfermode::kDstIn_Mode:
376 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
377 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
378 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
379 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
380 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
381 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
382 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
383 TEST_ASSERT(kSA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
384 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
385 break;
386 case SkXfermode::kSrcOut_Mode:
387 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
388 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
389 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
390 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
391 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
392 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
393 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
394 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
395 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
396 break;
397 case SkXfermode::kDstOut_Mode:
398 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
399 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
400 TEST_ASSERT((kIgnoreCoverage_OptFlag |
401 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
402 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
403 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
404 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
405 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
406 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
407 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
408 break;
409 case SkXfermode::kSrcATop_Mode:
410 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
411 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
412 TEST_ASSERT((kIgnoreCoverage_OptFlag |
413 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
414 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
415 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
416 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
417 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
418 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
419 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
420 break;
421 case SkXfermode::kDstATop_Mode:
422 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
423 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
424 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
425 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
426 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
427 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
428 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
429 TEST_ASSERT(kSA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
430 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
431 break;
432 case SkXfermode::kXor_Mode:
433 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
434 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
435 TEST_ASSERT((kIgnoreCoverage_OptFlag |
436 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
437 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
438 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
439 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
440 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
441 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
442 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
443 break;
444 case SkXfermode::kPlus_Mode:
445 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
446 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
447 TEST_ASSERT((kIgnoreCoverage_OptFlag |
448 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
449 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
450 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
451 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
452 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
453 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
454 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
455 break;
456 case SkXfermode::kModulate_Mode:
457 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
458 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
459 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
460 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
461 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
462 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
463 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
464 TEST_ASSERT(kSC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
465 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
466 break;
467 case SkXfermode::kScreen_Mode:
468 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
469 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
470 TEST_ASSERT((kIgnoreCoverage_OptFlag |
471 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
472 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
473 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
474 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
475 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
476 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
477 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
478 break;
479 default:
480 ERRORF(reporter, "Invalid xfermode.");
481 break;
482 }
483 }
484 }
485
486 static void test_alpha_opaque_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
487 GrProcOptInfo colorPOI, covPOI;
488 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kA_GrColorCompon entFlag, false);
489 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true);
490
491 SkASSERT(colorPOI.isOpaque());
492 SkASSERT(!colorPOI.isSolidWhite());
493 SkASSERT(!covPOI.isSolidWhite());
494
495 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
496 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
497 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI);
498
499 switch (xfermode) {
500 case SkXfermode::kClear_Mode:
501 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
502 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
503 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
504 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
505 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
506 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
507 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
508 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
509 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
510 break;
511 case SkXfermode::kSrc_Mode:
512 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
513 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
514 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
515 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
516 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
517 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
518 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
519 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
520 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
521 break;
522 case SkXfermode::kDst_Mode:
523 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
524 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
525 TEST_ASSERT((kSkipDraw_OptFlag |
526 kIgnoreColor_OptFlag |
527 kIgnoreCoverage_OptFlag |
528 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
529 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
530 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
531 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
532 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
533 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
534 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
535 break;
536 case SkXfermode::kSrcOver_Mode:
537 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
538 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
539 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
540 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
541 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
542 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
543 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
544 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
545 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
546 break;
547 case SkXfermode::kDstOver_Mode:
548 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
549 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
550 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
551 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
552 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
553 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
554 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
555 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
556 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
557 break;
558 case SkXfermode::kSrcIn_Mode:
559 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
560 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
561 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
562 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
563 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
564 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
565 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
566 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
567 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
568 break;
569 case SkXfermode::kDstIn_Mode:
570 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
571 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
572 TEST_ASSERT((kSkipDraw_OptFlag |
573 kIgnoreColor_OptFlag |
574 kIgnoreCoverage_OptFlag |
575 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
576 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
577 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
578 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
579 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
580 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
581 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
582 break;
583 case SkXfermode::kSrcOut_Mode:
584 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
585 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
586 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
587 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
588 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
589 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
590 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
591 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
592 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
593 break;
594 case SkXfermode::kDstOut_Mode:
595 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
596 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
597 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
598 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
599 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
600 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
601 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
602 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
603 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
604 break;
605 case SkXfermode::kSrcATop_Mode:
606 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
607 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
608 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
609 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
610 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
611 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
612 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
613 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
614 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
615 break;
616 case SkXfermode::kDstATop_Mode:
617 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
618 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
619 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
620 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
621 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
622 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
623 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
624 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
625 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
626 break;
627 case SkXfermode::kXor_Mode:
628 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
629 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
630 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
631 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
632 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
633 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
634 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
635 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
636 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
637 break;
638 case SkXfermode::kPlus_Mode:
639 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
640 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
641 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
642 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
643 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
644 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
645 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
646 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
647 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
648 break;
649 case SkXfermode::kModulate_Mode:
650 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
651 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
652 TEST_ASSERT((kNone_Opt) == xpi.fOptFlags);
653 TEST_ASSERT(kISCModulate_OutputType == xpi.fPrimaryOutputType);
654 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
655 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
656 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
657 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
658 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
659 break;
660 case SkXfermode::kScreen_Mode:
661 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
662 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
663 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
664 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
665 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
666 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
667 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
668 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
669 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
670 break;
671 default:
672 ERRORF(reporter, "Invalid xfermode.");
673 break;
674 }
675 }
676 }
677
678 static void test_alpha_opaque_no_coverage(skiatest::Reporter* reporter, const Gr Caps& caps) {
679 GrProcOptInfo colorPOI, covPOI;
680 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackRGBA(0, 82, 0, 255),
681 kG_GrColorComponentFlag | kA_GrColorComponent Flag, false);
682 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo nentFlags, true);
683
684 SkASSERT(colorPOI.isOpaque());
685 SkASSERT(!colorPOI.isSolidWhite());
686 SkASSERT(covPOI.isSolidWhite());
687
688 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
689 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
690 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI);
691
692 switch (xfermode) {
693 case SkXfermode::kClear_Mode:
694 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
695 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor);
696 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
697 TEST_ASSERT((kIgnoreColor_OptFlag |
698 kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
699 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
700 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
701 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
702 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
703 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
704 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
705 break;
706 case SkXfermode::kSrc_Mode:
707 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
708 TEST_ASSERT(82 == GrColorUnpackG(xpi.fInvariantOutput.fBlendedCo lor));
709 TEST_ASSERT(255 == GrColorUnpackA(xpi.fInvariantOutput.fBlendedC olor));
710 TEST_ASSERT((kG_GrColorComponentFlag |
711 kA_GrColorComponentFlag) == xpi.fInvariantOutput.fB lendedColorFlags);
712 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
713 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
714 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
715 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
716 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
717 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
718 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
719 break;
720 case SkXfermode::kDst_Mode:
721 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
722 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
723 TEST_ASSERT((kSkipDraw_OptFlag |
724 kIgnoreColor_OptFlag |
725 kIgnoreCoverage_OptFlag |
726 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
727 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
728 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
729 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
730 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
731 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
732 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
733 break;
734 case SkXfermode::kSrcOver_Mode:
735 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
736 TEST_ASSERT(82 == GrColorUnpackG(xpi.fInvariantOutput.fBlendedCo lor));
737 TEST_ASSERT(255 == GrColorUnpackA(xpi.fInvariantOutput.fBlendedC olor));
738 TEST_ASSERT((kG_GrColorComponentFlag |
739 kA_GrColorComponentFlag) == xpi.fInvariantOutput.fB lendedColorFlags);
740 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
741 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
742 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
743 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
744 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
745 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
746 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
747 break;
748 case SkXfermode::kDstOver_Mode:
749 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
750 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
751 TEST_ASSERT((kIgnoreCoverage_OptFlag |
752 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
753 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
754 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
755 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
756 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
757 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
758 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
759 break;
760 case SkXfermode::kSrcIn_Mode:
761 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
762 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
763 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
764 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
765 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
766 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
767 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
768 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
769 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
770 break;
771 case SkXfermode::kDstIn_Mode:
772 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
773 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
774 TEST_ASSERT((kSkipDraw_OptFlag |
775 kIgnoreColor_OptFlag |
776 kIgnoreCoverage_OptFlag |
777 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
778 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
779 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
780 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
781 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
782 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
783 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
784 break;
785 case SkXfermode::kSrcOut_Mode:
786 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
787 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
788 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
789 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
790 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
791 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
792 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
793 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
794 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
795 break;
796 case SkXfermode::kDstOut_Mode:
797 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
798 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor);
799 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
800 TEST_ASSERT((kIgnoreColor_OptFlag |
801 kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
802 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
803 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
804 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
805 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
806 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
807 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
808 break;
809 case SkXfermode::kSrcATop_Mode:
810 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
811 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
812 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
813 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
814 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
815 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
816 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
817 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
818 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
819 break;
820 case SkXfermode::kDstATop_Mode:
821 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
822 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
823 TEST_ASSERT((kIgnoreCoverage_OptFlag |
824 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
825 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
826 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
827 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
828 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
829 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
830 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
831 break;
832 case SkXfermode::kXor_Mode:
833 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
834 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
835 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
836 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
837 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
838 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
839 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
840 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
841 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
842 break;
843 case SkXfermode::kPlus_Mode:
844 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
845 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
846 TEST_ASSERT((kIgnoreCoverage_OptFlag |
847 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
848 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
849 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
850 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
851 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
852 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
853 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
854 break;
855 case SkXfermode::kModulate_Mode:
856 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
857 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
858 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
859 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
860 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
861 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
862 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
863 TEST_ASSERT(kSC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
864 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
865 break;
866 case SkXfermode::kScreen_Mode:
867 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
868 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
869 TEST_ASSERT((kIgnoreCoverage_OptFlag |
870 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
871 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
872 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
873 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
874 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
875 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
876 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
877 break;
878 default:
879 ERRORF(reporter, "Invalid xfermode.");
880 break;
881 }
882 }
883 }
884
885 static void test_color_white_with_coverage(skiatest::Reporter* reporter, const G rCaps& caps) {
886 GrProcOptInfo colorPOI, covPOI;
887 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCom ponentFlags, false);
888 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true);
889
890 SkASSERT(colorPOI.isOpaque());
891 SkASSERT(colorPOI.isSolidWhite());
892 SkASSERT(!covPOI.isSolidWhite());
893
894 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
895 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
896 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI);
897
898 switch (xfermode) {
899 case SkXfermode::kClear_Mode:
900 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
901 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
902 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
903 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
904 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
905 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
906 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
907 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
908 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
909 break;
910 case SkXfermode::kSrc_Mode:
911 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
912 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
913 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
914 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
915 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
916 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
917 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
918 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
919 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
920 break;
921 case SkXfermode::kDst_Mode:
922 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
923 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
924 TEST_ASSERT((kSkipDraw_OptFlag |
925 kIgnoreColor_OptFlag |
926 kIgnoreCoverage_OptFlag |
927 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
928 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
929 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
930 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
931 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
932 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
933 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
934 break;
935 case SkXfermode::kSrcOver_Mode:
936 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
937 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
938 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
939 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
940 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
941 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
942 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
943 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
944 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
945 break;
946 case SkXfermode::kDstOver_Mode:
947 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
948 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
949 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
950 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
951 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
952 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
953 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
954 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
955 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
956 break;
957 case SkXfermode::kSrcIn_Mode:
958 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
959 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
960 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
961 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
962 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
963 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
964 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
965 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
966 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
967 break;
968 case SkXfermode::kDstIn_Mode:
969 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
970 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
971 TEST_ASSERT((kSkipDraw_OptFlag |
972 kIgnoreColor_OptFlag |
973 kIgnoreCoverage_OptFlag |
974 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
975 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
976 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
977 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
978 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
979 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
980 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
981 break;
982 case SkXfermode::kSrcOut_Mode:
983 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
984 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
985 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
986 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
987 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
988 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
989 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
990 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
991 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
992 break;
993 case SkXfermode::kDstOut_Mode:
994 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
995 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
996 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
997 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
998 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
999 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
1000 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1001 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1002 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1003 break;
1004 case SkXfermode::kSrcATop_Mode:
1005 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1006 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1007 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1008 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1009 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1010 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1011 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1012 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1013 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1014 break;
1015 case SkXfermode::kDstATop_Mode:
1016 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1017 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1018 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1019 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1020 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1021 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1022 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1023 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1024 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1025 break;
1026 case SkXfermode::kXor_Mode:
1027 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1028 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1029 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1030 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1031 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1032 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1033 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1034 TEST_ASSERT(kISA_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1035 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1036 break;
1037 case SkXfermode::kPlus_Mode:
1038 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1039 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1040 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1041 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1042 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1043 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1044 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1045 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1046 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1047 break;
1048 case SkXfermode::kModulate_Mode:
1049 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1050 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1051 TEST_ASSERT((kNone_Opt) == xpi.fOptFlags);
1052 TEST_ASSERT(kISCModulate_OutputType == xpi.fPrimaryOutputType);
1053 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1054 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
1055 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1056 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1057 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1058 break;
1059 case SkXfermode::kScreen_Mode:
1060 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1061 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1062 TEST_ASSERT((kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1063 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1064 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1065 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1066 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1067 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1068 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1069 break;
1070 default:
1071 ERRORF(reporter, "Invalid xfermode.");
1072 break;
1073 }
1074 }
1075 }
1076
1077 static void test_color_white_no_coverage(skiatest::Reporter* reporter, const GrC aps& caps) {
1078 GrProcOptInfo colorPOI, covPOI;
1079 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCom ponentFlags, false);
1080 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo nentFlags, true);
1081
1082 SkASSERT(colorPOI.isOpaque());
1083 SkASSERT(colorPOI.isSolidWhite());
1084 SkASSERT(covPOI.isSolidWhite());
1085
1086 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
1087 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
1088 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI);
1089
1090 switch (xfermode) {
1091 case SkXfermode::kClear_Mode:
1092 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
1093 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor);
1094 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1095 TEST_ASSERT((kIgnoreColor_OptFlag |
1096 kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1097 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
1098 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1099 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1100 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1101 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1102 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1103 break;
1104 case SkXfermode::kSrc_Mode:
1105 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
1106 TEST_ASSERT(GrColorPackA4(255) == xpi.fInvariantOutput.fBlendedC olor);
1107 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1108 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1109 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1110 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1111 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1112 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1113 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1114 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1115 break;
1116 case SkXfermode::kDst_Mode:
1117 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1118 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1119 TEST_ASSERT((kSkipDraw_OptFlag |
1120 kIgnoreColor_OptFlag |
1121 kIgnoreCoverage_OptFlag |
1122 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1123 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
1124 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1125 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1126 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1127 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1128 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
1129 break;
1130 case SkXfermode::kSrcOver_Mode:
1131 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
1132 TEST_ASSERT(GrColorPackA4(255) == xpi.fInvariantOutput.fBlendedC olor);
1133 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1134 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1135 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1136 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1137 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1138 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1139 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1140 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1141 break;
1142 case SkXfermode::kDstOver_Mode:
1143 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1144 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1145 TEST_ASSERT((kIgnoreCoverage_OptFlag |
1146 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1147 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1148 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1149 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1150 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1151 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1152 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1153 break;
1154 case SkXfermode::kSrcIn_Mode:
1155 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1156 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1157 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1158 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1159 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1160 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1161 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1162 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1163 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1164 break;
1165 case SkXfermode::kDstIn_Mode:
1166 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1167 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1168 TEST_ASSERT((kSkipDraw_OptFlag |
1169 kIgnoreColor_OptFlag |
1170 kIgnoreCoverage_OptFlag |
1171 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1172 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
1173 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1174 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1175 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1176 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1177 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
1178 break;
1179 case SkXfermode::kSrcOut_Mode:
1180 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1181 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1182 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1183 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1184 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1185 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1186 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1187 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1188 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1189 break;
1190 case SkXfermode::kDstOut_Mode:
1191 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst);
1192 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor);
1193 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1194 TEST_ASSERT((kIgnoreColor_OptFlag |
1195 kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1196 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
1197 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1198 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1199 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1200 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1201 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1202 break;
1203 case SkXfermode::kSrcATop_Mode:
1204 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1205 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1206 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1207 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1208 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1209 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1210 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1211 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1212 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1213 break;
1214 case SkXfermode::kDstATop_Mode:
1215 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1216 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1217 TEST_ASSERT((kIgnoreCoverage_OptFlag |
1218 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1219 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1220 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1221 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1222 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1223 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1224 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1225 break;
1226 case SkXfermode::kXor_Mode:
1227 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1228 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1229 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1230 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1231 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1232 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1233 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1234 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1235 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1236 break;
1237 case SkXfermode::kPlus_Mode:
1238 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1239 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1240 TEST_ASSERT((kIgnoreCoverage_OptFlag |
1241 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1242 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1243 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1244 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1245 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1246 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1247 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1248 break;
1249 case SkXfermode::kModulate_Mode:
1250 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1251 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1252 TEST_ASSERT((kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
1253 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1254 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1255 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1256 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1257 TEST_ASSERT(kSC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1258 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1259 break;
1260 case SkXfermode::kScreen_Mode:
1261 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst);
1262 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput. fBlendedColorFlags);
1263 TEST_ASSERT((kIgnoreCoverage_OptFlag |
1264 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
1265 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
1266 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
1267 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
1268 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
1269 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
1270 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
1271 break;
1272 default:
1273 ERRORF(reporter, "Invalid xfermode.");
1274 break;
1275 }
1276 }
1277 }
1278
1279 #endif
1280
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698