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

Side by Side Diff: tests/GrPorterDuffTest.cpp

Issue 1313623002: Add support for blending of LCD for all blend modes. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 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 | « src/gpu/effects/GrPorterDuffXferProcessor.cpp ('k') | no next file » | 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 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 #include "SkXfermode.h" 8 #include "SkXfermode.h"
9 #include "Test.h" 9 #include "Test.h"
10 10
11 #if SK_SUPPORT_GPU 11 #if SK_SUPPORT_GPU
12 12
13 #include "GrContextFactory.h" 13 #include "GrContextFactory.h"
14 #include "GrContextOptions.h" 14 #include "GrContextOptions.h"
15 #include "GrGpu.h" 15 #include "GrGpu.h"
16 #include "GrResourceProvider.h" 16 #include "GrResourceProvider.h"
17 #include "GrXferProcessor.h" 17 #include "GrXferProcessor.h"
18 #include "batches/GrVertexBatch.h" 18 #include "batches/GrVertexBatch.h"
19 #include "effects/GrPorterDuffXferProcessor.h" 19 #include "effects/GrPorterDuffXferProcessor.h"
20 #include "gl/GrGLCaps.h" 20 #include "gl/GrGLCaps.h"
21 21
22 //////////////////////////////////////////////////////////////////////////////// 22 ////////////////////////////////////////////////////////////////////////////////
23 23
24 static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps); 24 static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps);
25 static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G rCaps& caps); 25 static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G rCaps& caps);
26 static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps); 26 static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps);
27 static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr Caps& caps); 27 static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr Caps& caps);
28 static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps); 28 static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps);
29 static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const GrCaps& caps);
29 static void test_no_dual_source_blending(skiatest::Reporter* reporter); 30 static void test_no_dual_source_blending(skiatest::Reporter* reporter);
30 31
31 DEF_GPUTEST(GrPorterDuff, reporter, factory) { 32 DEF_GPUTEST(GrPorterDuff, reporter, factory) {
32 GrContext* ctx = factory->get(GrContextFactory::kNull_GLContextType); 33 GrContext* ctx = factory->get(GrContextFactory::kNull_GLContextType);
33 if (!ctx) { 34 if (!ctx) {
34 SkFAIL("Failed to create null context."); 35 SkFAIL("Failed to create null context.");
35 return; 36 return;
36 } 37 }
37 38
38 const GrCaps& caps = *ctx->getGpu()->caps(); 39 const GrCaps& caps = *ctx->getGpu()->caps();
39 if (!caps.shaderCaps()->dualSourceBlendingSupport()) { 40 if (!caps.shaderCaps()->dualSourceBlendingSupport()) {
40 SkFAIL("Null context does not support dual source blending."); 41 SkFAIL("Null context does not support dual source blending.");
41 return; 42 return;
42 } 43 }
43 44
44 test_color_unknown_with_coverage(reporter, caps); 45 test_color_unknown_with_coverage(reporter, caps);
45 test_color_unknown_no_coverage(reporter, caps); 46 test_color_unknown_no_coverage(reporter, caps);
46 test_color_opaque_with_coverage(reporter, caps); 47 test_color_opaque_with_coverage(reporter, caps);
47 test_color_opaque_no_coverage(reporter, caps); 48 test_color_opaque_no_coverage(reporter, caps);
48 test_lcd_coverage(reporter, caps); 49 test_lcd_coverage(reporter, caps);
50 test_lcd_coverage_fallback_case(reporter, caps);
49 test_no_dual_source_blending(reporter); 51 test_no_dual_source_blending(reporter);
50 } 52 }
51 53
52 //////////////////////////////////////////////////////////////////////////////// 54 ////////////////////////////////////////////////////////////////////////////////
53 55
54 #define TEST_ASSERT(...) REPORTER_ASSERT(reporter, __VA_ARGS__) 56 #define TEST_ASSERT(...) REPORTER_ASSERT(reporter, __VA_ARGS__)
55 57
56 enum { 58 enum {
57 kNone_OutputType, 59 kNone_OutputType,
58 kCoverage_OutputType, 60 kCoverage_OutputType,
59 kModulate_OutputType, 61 kModulate_OutputType,
62 kSAModulate_OutputType,
60 kISAModulate_OutputType, 63 kISAModulate_OutputType,
61 kISCModulate_OutputType 64 kISCModulate_OutputType
62 }; 65 };
63 66
64 enum { 67 enum {
65 kNone_OptFlags = GrXferProcessor::kNone_OptFlags, 68 kNone_OptFlags = GrXferProcessor::kNone_OptFlags,
66 kSkipDraw_OptFlag = GrXferProcessor::kSkipDraw_OptFlag, 69 kSkipDraw_OptFlag = GrXferProcessor::kSkipDraw_OptFlag,
67 kIgnoreColor_OptFlag = GrXferProcessor::kIgnoreColor_OptFlag, 70 kIgnoreColor_OptFlag = GrXferProcessor::kIgnoreColor_OptFlag,
68 kIgnoreCoverage_OptFlag = GrXferProcessor::kIgnoreCoverage_OptFlag , 71 kIgnoreCoverage_OptFlag = GrXferProcessor::kIgnoreCoverage_OptFlag ,
69 kCanTweakAlphaForCoverage_OptFlag = GrXferProcessor::kCanTweakAlphaForCovera ge_OptFlag 72 kCanTweakAlphaForCoverage_OptFlag = GrXferProcessor::kCanTweakAlphaForCovera ge_OptFlag
(...skipping 21 matching lines...) Expand all
91 int fPrimaryOutputType; 94 int fPrimaryOutputType;
92 int fSecondaryOutputType; 95 int fSecondaryOutputType;
93 GrXferProcessor::BlendInfo fBlendInfo; 96 GrXferProcessor::BlendInfo fBlendInfo;
94 }; 97 };
95 98
96 static void GetXPOutputTypes(const GrXferProcessor* xp, int* outPrimary, int * outSecondary) { 99 static void GetXPOutputTypes(const GrXferProcessor* xp, int* outPrimary, int * outSecondary) {
97 GrPorterDuffXPFactory::TestGetXPOutputTypes(xp, outPrimary, outSecondary ); 100 GrPorterDuffXPFactory::TestGetXPOutputTypes(xp, outPrimary, outSecondary );
98 } 101 }
99 }; 102 };
100 103
104 static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
105 GrProcOptInfo colorPOI, covPOI;
106 colorPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, fals e);
107 // Setting 2nd to last value to false and last to true will force covPOI to LCD coverage.
108 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, false, true);
109
110 SkASSERT(!colorPOI.isOpaque());
111 SkASSERT(!colorPOI.isSolidWhite());
112 SkASSERT(!covPOI.isSolidWhite());
113 SkASSERT(covPOI.isFourChannelOutput());
114
115 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
116 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
117 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI);
118
119 switch (xfermode) {
120 case SkXfermode::kClear_Mode:
121 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst);
122 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor);
123 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
124 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
125 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
126 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
127 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
128 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
129 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
130 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
131 break;
132 case SkXfermode::kSrc_Mode:
133 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst);
134 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
135 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
136 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
137 TEST_ASSERT(kCoverage_OutputType == xpi.fSecondaryOutputType);
138 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
139 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
140 TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
141 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
142 break;
143 case SkXfermode::kDst_Mode:
144 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
145 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
146 TEST_ASSERT((kSkipDraw_OptFlag |
147 kIgnoreColor_OptFlag |
148 kIgnoreCoverage_OptFlag |
149 kCanTweakAlphaForCoverage_OptFlag) == xpi.fOptFlags );
150 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
151 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
152 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
153 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
154 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
155 TEST_ASSERT(!xpi.fBlendInfo.fWriteColor);
156 break;
157 case SkXfermode::kSrcOver_Mode:
158 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
159 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
160 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
161 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
162 TEST_ASSERT(kSAModulate_OutputType == xpi.fSecondaryOutputType);
163 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
164 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
165 TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
166 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
167 break;
168 case SkXfermode::kDstOver_Mode:
169 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
170 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
171 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
172 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
173 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
174 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
175 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
176 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
177 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
178 break;
179 case SkXfermode::kSrcIn_Mode:
180 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
181 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
182 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
183 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
184 TEST_ASSERT(kCoverage_OutputType == xpi.fSecondaryOutputType);
185 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
186 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
187 TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
188 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
189 break;
190 case SkXfermode::kDstIn_Mode:
191 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
192 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
193 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
194 TEST_ASSERT(kISAModulate_OutputType == xpi.fPrimaryOutputType);
195 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
196 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
197 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
198 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
199 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
200 break;
201 case SkXfermode::kSrcOut_Mode:
202 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
203 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
204 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
205 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
206 TEST_ASSERT(kCoverage_OutputType == xpi.fSecondaryOutputType);
207 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
208 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
209 TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
210 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
211 break;
212 case SkXfermode::kDstOut_Mode:
213 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
214 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
215 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
216 TEST_ASSERT(kSAModulate_OutputType == xpi.fPrimaryOutputType);
217 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
218 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
219 TEST_ASSERT(kZero_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
220 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
221 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
222 break;
223 case SkXfermode::kSrcATop_Mode:
224 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
225 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
226 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
227 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
228 TEST_ASSERT(kSAModulate_OutputType == xpi.fSecondaryOutputType);
229 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
230 TEST_ASSERT(kDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
231 TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
232 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
233 break;
234 case SkXfermode::kDstATop_Mode:
235 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
236 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
237 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
238 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
239 TEST_ASSERT(kISAModulate_OutputType == xpi.fSecondaryOutputType) ;
240 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
241 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
242 TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
243 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
244 break;
245 case SkXfermode::kXor_Mode:
246 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
247 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
248 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
249 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
250 TEST_ASSERT(kSAModulate_OutputType == xpi.fSecondaryOutputType);
251 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
252 TEST_ASSERT(kIDA_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
253 TEST_ASSERT(kIS2C_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
254 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
255 break;
256 case SkXfermode::kPlus_Mode:
257 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
258 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
259 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
260 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
261 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
262 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
263 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
264 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
265 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
266 break;
267 case SkXfermode::kModulate_Mode:
268 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
269 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
270 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
271 TEST_ASSERT(kISCModulate_OutputType == xpi.fPrimaryOutputType);
272 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
273 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
274 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
275 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
276 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
277 break;
278 case SkXfermode::kScreen_Mode:
279 TEST_ASSERT(xpi.fBlendedColor.fWillBlendWithDst);
280 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
281 TEST_ASSERT((kNone_OptFlags) == xpi.fOptFlags);
282 TEST_ASSERT(kModulate_OutputType == xpi.fPrimaryOutputType);
283 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
284 TEST_ASSERT(kAdd_GrBlendEquation == xpi.fBlendInfo.fEquation);
285 TEST_ASSERT(kOne_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
286 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
287 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
288 break;
289 default:
290 ERRORF(reporter, "Invalid xfermode.");
291 break;
292 }
293 }
294 }
101 static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) { 295 static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
102 GrProcOptInfo colorPOI, covPOI; 296 GrProcOptInfo colorPOI, covPOI;
103 colorPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorComponentFlags, f alse); 297 colorPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorComponentFlags, f alse);
104 covPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorComponentFlags, tru e); 298 covPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorComponentFlags, tru e);
105 299
106 SkASSERT(!colorPOI.isOpaque()); 300 SkASSERT(!colorPOI.isOpaque());
107 SkASSERT(!colorPOI.isSolidWhite()); 301 SkASSERT(!colorPOI.isSolidWhite());
108 SkASSERT(!covPOI.isSolidWhite()); 302 SkASSERT(!covPOI.isSolidWhite());
109 SkASSERT(!covPOI.isFourChannelOutput()); 303 SkASSERT(!covPOI.isFourChannelOutput());
110 304
111 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { 305 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
112 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); 306 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
113 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI); 307 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI);
114 308
309
115 switch (xfermode) { 310 switch (xfermode) {
116 case SkXfermode::kClear_Mode: 311 case SkXfermode::kClear_Mode:
117 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); 312 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst);
118 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); 313 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor);
119 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags); 314 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
120 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); 315 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
121 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType); 316 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
122 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType); 317 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
123 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation); 318 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
124 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend); 319 TEST_ASSERT(kDC_GrBlendCoeff == xpi.fBlendInfo.fSrcBlend);
(...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after
890 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); 1085 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
891 TEST_ASSERT(xpi.fBlendInfo.fWriteColor); 1086 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
892 break; 1087 break;
893 default: 1088 default:
894 ERRORF(reporter, "Invalid xfermode."); 1089 ERRORF(reporter, "Invalid xfermode.");
895 break; 1090 break;
896 } 1091 }
897 } 1092 }
898 } 1093 }
899 1094
900 static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) { 1095 static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const GrCaps& caps) {
901 class : public GrVertexBatch { 1096 class : public GrVertexBatch {
902 void getInvariantOutputColor(GrInitInvariantOutput* out) const override { 1097 void getInvariantOutputColor(GrInitInvariantOutput* out) const override {
903 out->setKnownFourComponents(GrColorPackRGBA(123, 45, 67, 221)); 1098 out->setKnownFourComponents(GrColorPackRGBA(123, 45, 67, 221));
904 } 1099 }
905 1100
906 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const overri de { 1101 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const overri de {
907 out->setUnknownFourComponents(); 1102 out->setUnknownFourComponents();
908 out->setUsingLCDCoverage(); 1103 out->setUsingLCDCoverage();
909 } 1104 }
910 1105
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 TEST_ASSERT(!xp->hasSecondaryOutput()); 1203 TEST_ASSERT(!xp->hasSecondaryOutput());
1009 xp->getOptimizations(colorPOI, covPOI, false, 0, caps); 1204 xp->getOptimizations(colorPOI, covPOI, false, 0, caps);
1010 TEST_ASSERT(!xp->hasSecondaryOutput()); 1205 TEST_ASSERT(!xp->hasSecondaryOutput());
1011 } 1206 }
1012 } 1207 }
1013 } 1208 }
1014 } 1209 }
1015 1210
1016 #endif 1211 #endif
1017 1212
OLDNEW
« no previous file with comments | « src/gpu/effects/GrPorterDuffXferProcessor.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698