OLD | NEW |
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 "GrBatch.h" | |
14 #include "GrContextFactory.h" | 13 #include "GrContextFactory.h" |
15 #include "GrGpu.h" | 14 #include "GrGpu.h" |
16 #include "GrXferProcessor.h" | 15 #include "GrXferProcessor.h" |
17 #include "effects/GrPorterDuffXferProcessor.h" | 16 #include "effects/GrPorterDuffXferProcessor.h" |
18 | 17 |
19 //////////////////////////////////////////////////////////////////////////////// | 18 //////////////////////////////////////////////////////////////////////////////// |
20 | 19 |
21 static void test_alpha_unknown_with_coverage(skiatest::Reporter* reporter, const
GrCaps& caps); | 20 static void test_alpha_unknown_with_coverage(skiatest::Reporter* reporter, const
GrCaps& caps); |
22 static void test_alpha_unknown_no_coverage(skiatest::Reporter* reporter, const G
rCaps& caps); | 21 static void test_alpha_unknown_no_coverage(skiatest::Reporter* reporter, const G
rCaps& caps); |
23 static void test_alpha_opaque_with_coverage(skiatest::Reporter* reporter, const
GrCaps& caps); | 22 static void test_alpha_opaque_with_coverage(skiatest::Reporter* reporter, const
GrCaps& caps); |
24 static void test_alpha_opaque_no_coverage(skiatest::Reporter* reporter, const Gr
Caps& caps); | 23 static void test_alpha_opaque_no_coverage(skiatest::Reporter* reporter, const Gr
Caps& caps); |
25 static void test_color_white_with_coverage(skiatest::Reporter* reporter, const G
rCaps& caps); | 24 static void test_color_white_with_coverage(skiatest::Reporter* reporter, const G
rCaps& caps); |
26 static void test_color_white_no_coverage(skiatest::Reporter* reporter, const GrC
aps& caps); | 25 static void test_color_white_no_coverage(skiatest::Reporter* reporter, const GrC
aps& caps); |
27 static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps); | |
28 | 26 |
29 DEF_GPUTEST(GrPorterDuff, reporter, factory) { | 27 DEF_GPUTEST(GrPorterDuff, reporter, factory) { |
30 GrContext* ctx = factory->get(GrContextFactory::kNull_GLContextType); | 28 GrContext* ctx = factory->get(GrContextFactory::kNull_GLContextType); |
31 if (!ctx) { | 29 if (!ctx) { |
32 SkFAIL("Failed to create null context."); | 30 SkFAIL("Failed to create null context."); |
33 return; | 31 return; |
34 } | 32 } |
35 | 33 |
36 const GrCaps& caps = *ctx->getGpu()->caps(); | 34 const GrCaps& caps = *ctx->getGpu()->caps(); |
37 if (!caps.shaderCaps()->dualSourceBlendingSupport()) { | 35 if (!caps.shaderCaps()->dualSourceBlendingSupport()) { |
38 SkFAIL("Null context does not support dual source blending."); | 36 SkFAIL("Null context does not support dual source blending."); |
39 return; | 37 return; |
40 } | 38 } |
41 | 39 |
42 test_alpha_unknown_with_coverage(reporter, caps); | 40 test_alpha_unknown_with_coverage(reporter, caps); |
43 test_alpha_unknown_no_coverage(reporter, caps); | 41 test_alpha_unknown_no_coverage(reporter, caps); |
44 test_alpha_opaque_with_coverage(reporter, caps); | 42 test_alpha_opaque_with_coverage(reporter, caps); |
45 test_alpha_opaque_no_coverage(reporter, caps); | 43 test_alpha_opaque_no_coverage(reporter, caps); |
46 test_color_white_with_coverage(reporter, caps); | 44 test_color_white_with_coverage(reporter, caps); |
47 test_color_white_with_coverage(reporter, caps); | 45 test_color_white_with_coverage(reporter, caps); |
48 test_color_white_no_coverage(reporter, caps); | 46 test_color_white_no_coverage(reporter, caps); |
49 test_lcd_coverage(reporter, caps); | |
50 } | 47 } |
51 | 48 |
52 //////////////////////////////////////////////////////////////////////////////// | 49 //////////////////////////////////////////////////////////////////////////////// |
53 | 50 |
54 #define TEST_ASSERT(...) REPORTER_ASSERT(reporter, __VA_ARGS__) | 51 #define TEST_ASSERT(...) REPORTER_ASSERT(reporter, __VA_ARGS__) |
55 | 52 |
56 enum { | 53 enum { |
57 kNone_OutputType, | 54 kNone_OutputType, |
58 kCoverage_OutputType, | 55 kCoverage_OutputType, |
59 kModulate_OutputType, | 56 kModulate_OutputType, |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
96 }; | 93 }; |
97 | 94 |
98 static void test_alpha_unknown_with_coverage(skiatest::Reporter* reporter, const
GrCaps& caps) { | 95 static void test_alpha_unknown_with_coverage(skiatest::Reporter* reporter, const
GrCaps& caps) { |
99 GrProcOptInfo colorPOI, covPOI; | 96 GrProcOptInfo colorPOI, covPOI; |
100 colorPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, fals
e); | 97 colorPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, fals
e); |
101 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true); | 98 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true); |
102 | 99 |
103 SkASSERT(!colorPOI.isOpaque()); | 100 SkASSERT(!colorPOI.isOpaque()); |
104 SkASSERT(!colorPOI.isSolidWhite()); | 101 SkASSERT(!colorPOI.isSolidWhite()); |
105 SkASSERT(!covPOI.isSolidWhite()); | 102 SkASSERT(!covPOI.isSolidWhite()); |
106 SkASSERT(!covPOI.isFourChannelOutput()); | |
107 | 103 |
108 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { | 104 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { |
109 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); | 105 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); |
110 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); | 106 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); |
111 | 107 |
112 switch (xfermode) { | 108 switch (xfermode) { |
113 case SkXfermode::kClear_Mode: | 109 case SkXfermode::kClear_Mode: |
114 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst); | 110 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst); |
115 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); | 111 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); |
116 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); | 112 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 | 283 |
288 static void test_alpha_unknown_no_coverage(skiatest::Reporter* reporter, const G
rCaps& caps) { | 284 static void test_alpha_unknown_no_coverage(skiatest::Reporter* reporter, const G
rCaps& caps) { |
289 GrProcOptInfo colorPOI, covPOI; | 285 GrProcOptInfo colorPOI, covPOI; |
290 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackRGBA(229, 0, 154, 0), | 286 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackRGBA(229, 0, 154, 0), |
291 kR_GrColorComponentFlag | kB_GrColorComponent
Flag, false); | 287 kR_GrColorComponentFlag | kB_GrColorComponent
Flag, false); |
292 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo
nentFlags, true); | 288 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo
nentFlags, true); |
293 | 289 |
294 SkASSERT(!colorPOI.isOpaque()); | 290 SkASSERT(!colorPOI.isOpaque()); |
295 SkASSERT(!colorPOI.isSolidWhite()); | 291 SkASSERT(!colorPOI.isSolidWhite()); |
296 SkASSERT(covPOI.isSolidWhite()); | 292 SkASSERT(covPOI.isSolidWhite()); |
297 SkASSERT(!covPOI.isFourChannelOutput()); | |
298 | 293 |
299 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { | 294 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { |
300 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); | 295 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); |
301 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); | 296 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); |
302 | 297 |
303 switch (xfermode) { | 298 switch (xfermode) { |
304 case SkXfermode::kClear_Mode: | 299 case SkXfermode::kClear_Mode: |
305 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst); | 300 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst); |
306 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor); | 301 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor); |
307 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); | 302 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); |
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
489 } | 484 } |
490 | 485 |
491 static void test_alpha_opaque_with_coverage(skiatest::Reporter* reporter, const
GrCaps& caps) { | 486 static void test_alpha_opaque_with_coverage(skiatest::Reporter* reporter, const
GrCaps& caps) { |
492 GrProcOptInfo colorPOI, covPOI; | 487 GrProcOptInfo colorPOI, covPOI; |
493 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kA_GrColorCompon
entFlag, false); | 488 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kA_GrColorCompon
entFlag, false); |
494 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true); | 489 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true); |
495 | 490 |
496 SkASSERT(colorPOI.isOpaque()); | 491 SkASSERT(colorPOI.isOpaque()); |
497 SkASSERT(!colorPOI.isSolidWhite()); | 492 SkASSERT(!colorPOI.isSolidWhite()); |
498 SkASSERT(!covPOI.isSolidWhite()); | 493 SkASSERT(!covPOI.isSolidWhite()); |
499 SkASSERT(!covPOI.isFourChannelOutput()); | |
500 | 494 |
501 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { | 495 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { |
502 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); | 496 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); |
503 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); | 497 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); |
504 | 498 |
505 switch (xfermode) { | 499 switch (xfermode) { |
506 case SkXfermode::kClear_Mode: | 500 case SkXfermode::kClear_Mode: |
507 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst); | 501 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst); |
508 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); | 502 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); |
509 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); | 503 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
683 | 677 |
684 static void test_alpha_opaque_no_coverage(skiatest::Reporter* reporter, const Gr
Caps& caps) { | 678 static void test_alpha_opaque_no_coverage(skiatest::Reporter* reporter, const Gr
Caps& caps) { |
685 GrProcOptInfo colorPOI, covPOI; | 679 GrProcOptInfo colorPOI, covPOI; |
686 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackRGBA(0, 82, 0, 255), | 680 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackRGBA(0, 82, 0, 255), |
687 kG_GrColorComponentFlag | kA_GrColorComponent
Flag, false); | 681 kG_GrColorComponentFlag | kA_GrColorComponent
Flag, false); |
688 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo
nentFlags, true); | 682 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo
nentFlags, true); |
689 | 683 |
690 SkASSERT(colorPOI.isOpaque()); | 684 SkASSERT(colorPOI.isOpaque()); |
691 SkASSERT(!colorPOI.isSolidWhite()); | 685 SkASSERT(!colorPOI.isSolidWhite()); |
692 SkASSERT(covPOI.isSolidWhite()); | 686 SkASSERT(covPOI.isSolidWhite()); |
693 SkASSERT(!covPOI.isFourChannelOutput()); | |
694 | 687 |
695 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { | 688 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { |
696 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); | 689 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); |
697 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); | 690 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); |
698 | 691 |
699 switch (xfermode) { | 692 switch (xfermode) { |
700 case SkXfermode::kClear_Mode: | 693 case SkXfermode::kClear_Mode: |
701 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst); | 694 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst); |
702 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor); | 695 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor); |
703 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); | 696 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 } | 883 } |
891 | 884 |
892 static void test_color_white_with_coverage(skiatest::Reporter* reporter, const G
rCaps& caps) { | 885 static void test_color_white_with_coverage(skiatest::Reporter* reporter, const G
rCaps& caps) { |
893 GrProcOptInfo colorPOI, covPOI; | 886 GrProcOptInfo colorPOI, covPOI; |
894 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCom
ponentFlags, false); | 887 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCom
ponentFlags, false); |
895 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true); | 888 covPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, true); |
896 | 889 |
897 SkASSERT(colorPOI.isOpaque()); | 890 SkASSERT(colorPOI.isOpaque()); |
898 SkASSERT(colorPOI.isSolidWhite()); | 891 SkASSERT(colorPOI.isSolidWhite()); |
899 SkASSERT(!covPOI.isSolidWhite()); | 892 SkASSERT(!covPOI.isSolidWhite()); |
900 SkASSERT(!covPOI.isFourChannelOutput()); | |
901 | 893 |
902 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { | 894 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { |
903 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); | 895 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); |
904 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); | 896 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); |
905 | 897 |
906 switch (xfermode) { | 898 switch (xfermode) { |
907 case SkXfermode::kClear_Mode: | 899 case SkXfermode::kClear_Mode: |
908 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst); | 900 TEST_ASSERT(xpi.fInvariantOutput.fWillBlendWithDst); |
909 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); | 901 TEST_ASSERT(kNone_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); |
910 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); | 902 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1083 } | 1075 } |
1084 | 1076 |
1085 static void test_color_white_no_coverage(skiatest::Reporter* reporter, const GrC
aps& caps) { | 1077 static void test_color_white_no_coverage(skiatest::Reporter* reporter, const GrC
aps& caps) { |
1086 GrProcOptInfo colorPOI, covPOI; | 1078 GrProcOptInfo colorPOI, covPOI; |
1087 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCom
ponentFlags, false); | 1079 colorPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCom
ponentFlags, false); |
1088 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo
nentFlags, true); | 1080 covPOI.calcWithInitialValues(NULL, 0, GrColorPackA4(255), kRGBA_GrColorCompo
nentFlags, true); |
1089 | 1081 |
1090 SkASSERT(colorPOI.isOpaque()); | 1082 SkASSERT(colorPOI.isOpaque()); |
1091 SkASSERT(colorPOI.isSolidWhite()); | 1083 SkASSERT(colorPOI.isSolidWhite()); |
1092 SkASSERT(covPOI.isSolidWhite()); | 1084 SkASSERT(covPOI.isSolidWhite()); |
1093 SkASSERT(!covPOI.isFourChannelOutput()); | |
1094 | 1085 |
1095 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { | 1086 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { |
1096 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); | 1087 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); |
1097 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); | 1088 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c
ovPOI); |
1098 | 1089 |
1099 switch (xfermode) { | 1090 switch (xfermode) { |
1100 case SkXfermode::kClear_Mode: | 1091 case SkXfermode::kClear_Mode: |
1101 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst); | 1092 TEST_ASSERT(!xpi.fInvariantOutput.fWillBlendWithDst); |
1102 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor); | 1093 TEST_ASSERT(0 == xpi.fInvariantOutput.fBlendedColor); |
1103 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); | 1094 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fInvariantOutput.
fBlendedColorFlags); |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1278 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); | 1269 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); |
1279 TEST_ASSERT(xpi.fBlendInfo.fWriteColor); | 1270 TEST_ASSERT(xpi.fBlendInfo.fWriteColor); |
1280 break; | 1271 break; |
1281 default: | 1272 default: |
1282 ERRORF(reporter, "Invalid xfermode."); | 1273 ERRORF(reporter, "Invalid xfermode."); |
1283 break; | 1274 break; |
1284 } | 1275 } |
1285 } | 1276 } |
1286 } | 1277 } |
1287 | 1278 |
1288 static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps)
{ | |
1289 class : public GrBatch { | |
1290 void getInvariantOutputColor(GrInitInvariantOutput* out) const override
{ | |
1291 out->setKnownFourComponents(GrColorPackRGBA(123, 45, 67, 221)); | |
1292 } | |
1293 | |
1294 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const overri
de { | |
1295 out->setUnknownFourComponents(); | |
1296 out->setUsingLCDCoverage(); | |
1297 } | |
1298 | |
1299 const char* name() const override { return "Test LCD Text Batch"; } | |
1300 void initBatchTracker(const GrPipelineInfo&) override {} | |
1301 bool onCombineIfPossible(GrBatch*) override { return false; } | |
1302 void generateGeometry(GrBatchTarget*, const GrPipeline*) override {} | |
1303 | |
1304 } testLCDCoverageBatch; | |
1305 | |
1306 GrProcOptInfo colorPOI, covPOI; | |
1307 colorPOI.calcColorWithBatch(&testLCDCoverageBatch, NULL, 0); | |
1308 covPOI.calcCoverageWithBatch(&testLCDCoverageBatch, NULL, 0); | |
1309 | |
1310 SkASSERT(kRGBA_GrColorComponentFlags == colorPOI.validFlags()); | |
1311 SkASSERT(covPOI.isFourChannelOutput()); | |
1312 | |
1313 SkAutoTUnref<GrXPFactory> xpf(GrPorterDuffXPFactory::Create(SkXfermode::kSrc
Over_Mode)); | |
1314 TEST_ASSERT(!xpf->willNeedDstCopy(caps, colorPOI, covPOI)); | |
1315 | |
1316 GrXPFactory::InvariantOutput invariantOutput; | |
1317 xpf->getInvariantOutput(colorPOI, covPOI, &invariantOutput); | |
1318 TEST_ASSERT(invariantOutput.fWillBlendWithDst); | |
1319 TEST_ASSERT(kNone_GrColorComponentFlags == invariantOutput.fBlendedColorFlag
s); | |
1320 | |
1321 SkAutoTUnref<GrXferProcessor> xp(xpf->createXferProcessor(colorPOI, covPOI,
0, caps)); | |
1322 if (!xp) { | |
1323 ERRORF(reporter, "Failed to create an XP with LCD coverage."); | |
1324 return; | |
1325 } | |
1326 | |
1327 GrColor overrideColor; | |
1328 xp->getOptimizations(colorPOI, covPOI, false, &overrideColor, caps); | |
1329 | |
1330 GrXferProcessor::BlendInfo blendInfo; | |
1331 xp->getBlendInfo(&blendInfo); | |
1332 TEST_ASSERT(blendInfo.fWriteColor); | |
1333 } | |
1334 | |
1335 #endif | 1279 #endif |
1336 | 1280 |
OLD | NEW |