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

Side by Side Diff: tests/GrPorterDuffTest.cpp

Issue 1480353002: APIs which took colorPOI / coveragePOI pairs updated to take a GrPipelineOptimizations struct (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years 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
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 kSkipDraw_OptFlag = GrXferProcessor::kSkipDraw_OptFlag, 69 kSkipDraw_OptFlag = GrXferProcessor::kSkipDraw_OptFlag,
70 kIgnoreColor_OptFlag = GrXferProcessor::kIgnoreColor_OptFlag, 70 kIgnoreColor_OptFlag = GrXferProcessor::kIgnoreColor_OptFlag,
71 kIgnoreCoverage_OptFlag = GrXferProcessor::kIgnoreCoverage_OptFlag , 71 kIgnoreCoverage_OptFlag = GrXferProcessor::kIgnoreCoverage_OptFlag ,
72 kCanTweakAlphaForCoverage_OptFlag = GrXferProcessor::kCanTweakAlphaForCovera ge_OptFlag 72 kCanTweakAlphaForCoverage_OptFlag = GrXferProcessor::kCanTweakAlphaForCovera ge_OptFlag
73 }; 73 };
74 74
75 class GrPorterDuffTest { 75 class GrPorterDuffTest {
76 public: 76 public:
77 struct XPInfo { 77 struct XPInfo {
78 XPInfo(skiatest::Reporter* reporter, SkXfermode::Mode xfermode, const Gr Caps& caps, 78 XPInfo(skiatest::Reporter* reporter, SkXfermode::Mode xfermode, const Gr Caps& caps,
79 const GrProcOptInfo& colorPOI, const GrProcOptInfo& covPOI) { 79 const GrPipelineOptimizations& optimizations) {
80 SkAutoTUnref<GrXPFactory> xpf(GrPorterDuffXPFactory::Create(xfermode )); 80 SkAutoTUnref<GrXPFactory> xpf(GrPorterDuffXPFactory::Create(xfermode ));
81 SkAutoTUnref<GrXferProcessor> xp( 81 SkAutoTUnref<GrXferProcessor> xp(
82 xpf->createXferProcessor(colorPOI, covPOI, false, nullptr, caps) ); 82 xpf->createXferProcessor(optimizations, false, nullptr, caps));
83 TEST_ASSERT(!xpf->willNeedDstTexture(caps, colorPOI, covPOI, false)) ; 83 TEST_ASSERT(!xpf->willNeedDstTexture(caps, optimizations, false));
84 xpf->getInvariantBlendedColor(colorPOI, &fBlendedColor); 84 xpf->getInvariantBlendedColor(optimizations.fColorPOI, &fBlendedColo r);
85 fOptFlags = xp->getOptimizations(colorPOI, covPOI, false, nullptr, c aps); 85 fOptFlags = xp->getOptimizations(optimizations, false, nullptr, caps );
86 GetXPOutputTypes(xp, &fPrimaryOutputType, &fSecondaryOutputType); 86 GetXPOutputTypes(xp, &fPrimaryOutputType, &fSecondaryOutputType);
87 xp->getBlendInfo(&fBlendInfo); 87 xp->getBlendInfo(&fBlendInfo);
88 TEST_ASSERT(!xp->willReadDstColor()); 88 TEST_ASSERT(!xp->willReadDstColor());
89 TEST_ASSERT(xp->hasSecondaryOutput() == GrBlendCoeffRefsSrc2(fBlendI nfo.fDstBlend)); 89 TEST_ASSERT(xp->hasSecondaryOutput() == GrBlendCoeffRefsSrc2(fBlendI nfo.fDstBlend));
90 } 90 }
91 91
92 GrXPFactory::InvariantBlendedColor fBlendedColor; 92 GrXPFactory::InvariantBlendedColor fBlendedColor;
93 int fOptFlags; 93 int fOptFlags;
94 int fPrimaryOutputType; 94 int fPrimaryOutputType;
95 int fSecondaryOutputType; 95 int fSecondaryOutputType;
96 GrXferProcessor::BlendInfo fBlendInfo; 96 GrXferProcessor::BlendInfo fBlendInfo;
97 }; 97 };
98 98
99 static void GetXPOutputTypes(const GrXferProcessor* xp, int* outPrimary, int * outSecondary) { 99 static void GetXPOutputTypes(const GrXferProcessor* xp, int* outPrimary, int * outSecondary) {
100 GrPorterDuffXPFactory::TestGetXPOutputTypes(xp, outPrimary, outSecondary ); 100 GrPorterDuffXPFactory::TestGetXPOutputTypes(xp, outPrimary, outSecondary );
101 } 101 }
102 }; 102 };
103 103
104 static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) { 104 static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
105 GrProcOptInfo colorPOI, covPOI; 105 GrPipelineOptimizations opt;
106 colorPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, fals e); 106 opt.fColorPOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFlags, false);
107 // Setting 2nd to last value to false and last to true will force covPOI to LCD coverage. 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); 108 opt.fCoveragePOI.calcWithInitialValues(NULL, 0, 0, kNone_GrColorComponentFla gs, false, true);
109 109
110 SkASSERT(!colorPOI.isOpaque()); 110 SkASSERT(!opt.fColorPOI.isOpaque());
111 SkASSERT(!colorPOI.isSolidWhite()); 111 SkASSERT(!opt.fColorPOI.isSolidWhite());
112 SkASSERT(!covPOI.isSolidWhite()); 112 SkASSERT(!opt.fCoveragePOI.isSolidWhite());
113 SkASSERT(covPOI.isFourChannelOutput()); 113 SkASSERT(opt.fCoveragePOI.isFourChannelOutput());
114 114
115 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { 115 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
116 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); 116 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
117 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI); 117 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, opt);
118 118
119 switch (xfermode) { 119 switch (xfermode) {
120 case SkXfermode::kClear_Mode: 120 case SkXfermode::kClear_Mode:
121 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); 121 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst);
122 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); 122 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor);
123 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags); 123 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
124 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); 124 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
125 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType); 125 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
126 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType); 126 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
127 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation); 127 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend); 286 TEST_ASSERT(kISC_GrBlendCoeff == xpi.fBlendInfo.fDstBlend);
287 TEST_ASSERT(xpi.fBlendInfo.fWriteColor); 287 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
288 break; 288 break;
289 default: 289 default:
290 ERRORF(reporter, "Invalid xfermode."); 290 ERRORF(reporter, "Invalid xfermode.");
291 break; 291 break;
292 } 292 }
293 } 293 }
294 } 294 }
295 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) {
296 GrProcOptInfo colorPOI, covPOI; 296 GrPipelineOptimizations optimizations;
297 colorPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorComponentFlags, f alse); 297 optimizations.fColorPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorCo mponentFlags,
298 covPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorComponentFlags, tru e); 298 false);
299 optimizations.fCoveragePOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColo rComponentFlags,
300 true);
299 301
300 SkASSERT(!colorPOI.isOpaque()); 302 SkASSERT(!optimizations.fColorPOI.isOpaque());
301 SkASSERT(!colorPOI.isSolidWhite()); 303 SkASSERT(!optimizations.fColorPOI.isSolidWhite());
302 SkASSERT(!covPOI.isSolidWhite()); 304 SkASSERT(!optimizations.fCoveragePOI.isSolidWhite());
303 SkASSERT(!covPOI.isFourChannelOutput()); 305 SkASSERT(!optimizations.fCoveragePOI.isFourChannelOutput());
304 306
305 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { 307 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
306 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); 308 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
307 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI); 309 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, optimizatio ns);
308 310
309 311
310 switch (xfermode) { 312 switch (xfermode) {
311 case SkXfermode::kClear_Mode: 313 case SkXfermode::kClear_Mode:
312 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); 314 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst);
313 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); 315 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor);
314 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags); 316 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
315 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); 317 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
316 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType); 318 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
317 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType); 319 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 TEST_ASSERT(xpi.fBlendInfo.fWriteColor); 480 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
479 break; 481 break;
480 default: 482 default:
481 ERRORF(reporter, "Invalid xfermode."); 483 ERRORF(reporter, "Invalid xfermode.");
482 break; 484 break;
483 } 485 }
484 } 486 }
485 } 487 }
486 488
487 static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G rCaps& caps) { 489 static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G rCaps& caps) {
488 GrProcOptInfo colorPOI, covPOI; 490 GrPipelineOptimizations optimizations;
489 colorPOI.calcWithInitialValues(nullptr, 0, GrColorPackRGBA(229, 0, 154, 0), 491 optimizations.fColorPOI.calcWithInitialValues(nullptr, 0, GrColorPackRGBA(22 9, 0, 154, 0),
490 kR_GrColorComponentFlag | kB_GrColorComponent Flag, false); 492 kR_GrColorComponentFlag | kB_GrColorComponent Flag, false);
491 covPOI.calcWithInitialValues(nullptr, 0, GrColorPackA4(255), kRGBA_GrColorCo mponentFlags, true); 493 optimizations.fCoveragePOI.calcWithInitialValues(nullptr, 0, GrColorPackA4(2 55),
494 kRGBA_GrColorComponentFlags , true);
492 495
493 SkASSERT(!colorPOI.isOpaque()); 496 SkASSERT(!optimizations.fColorPOI.isOpaque());
494 SkASSERT(!colorPOI.isSolidWhite()); 497 SkASSERT(!optimizations.fColorPOI.isSolidWhite());
495 SkASSERT(covPOI.isSolidWhite()); 498 SkASSERT(optimizations.fCoveragePOI.isSolidWhite());
496 SkASSERT(!covPOI.isFourChannelOutput()); 499 SkASSERT(!optimizations.fCoveragePOI.isFourChannelOutput());
497 500
498 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { 501 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
499 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); 502 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
500 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI); 503 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, optimizatio ns);
501 504
502 switch (xfermode) { 505 switch (xfermode) {
503 case SkXfermode::kClear_Mode: 506 case SkXfermode::kClear_Mode:
504 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); 507 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst);
505 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); 508 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor);
506 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags); 509 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
507 TEST_ASSERT((kIgnoreColor_OptFlag | 510 TEST_ASSERT((kIgnoreColor_OptFlag |
508 kIgnoreCoverage_OptFlag) == xpi.fOptFlags); 511 kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
509 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType); 512 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
510 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType); 513 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 TEST_ASSERT(xpi.fBlendInfo.fWriteColor); 684 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
682 break; 685 break;
683 default: 686 default:
684 ERRORF(reporter, "Invalid xfermode."); 687 ERRORF(reporter, "Invalid xfermode.");
685 break; 688 break;
686 } 689 }
687 } 690 }
688 } 691 }
689 692
690 static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) { 693 static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
691 GrProcOptInfo colorPOI, covPOI; 694 GrPipelineOptimizations optimizations;
692 colorPOI.calcWithInitialValues(nullptr, 0, GrColorPackA4(255), kA_GrColorCom ponentFlag, false); 695 optimizations.fColorPOI.calcWithInitialValues(nullptr, 0, GrColorPackA4(255) ,
693 covPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorComponentFlags, tru e); 696 kA_GrColorComponentFlag, false );
697 optimizations.fCoveragePOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColo rComponentFlags,
698 true);
694 699
695 SkASSERT(colorPOI.isOpaque()); 700 SkASSERT(optimizations.fColorPOI.isOpaque());
696 SkASSERT(!colorPOI.isSolidWhite()); 701 SkASSERT(!optimizations.fColorPOI.isSolidWhite());
697 SkASSERT(!covPOI.isSolidWhite()); 702 SkASSERT(!optimizations.fCoveragePOI.isSolidWhite());
698 SkASSERT(!covPOI.isFourChannelOutput()); 703 SkASSERT(!optimizations.fCoveragePOI.isFourChannelOutput());
699 704
700 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { 705 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
701 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); 706 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
702 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI); 707 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, optimizatio ns);
703 708
704 switch (xfermode) { 709 switch (xfermode) {
705 case SkXfermode::kClear_Mode: 710 case SkXfermode::kClear_Mode:
706 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); 711 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst);
707 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); 712 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor);
708 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags); 713 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
709 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags); 714 TEST_ASSERT((kIgnoreColor_OptFlag) == xpi.fOptFlags);
710 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType); 715 TEST_ASSERT(kCoverage_OutputType == xpi.fPrimaryOutputType);
711 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType); 716 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
712 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation); 717 TEST_ASSERT(kReverseSubtract_GrBlendEquation == xpi.fBlendInfo.f Equation);
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 TEST_ASSERT(xpi.fBlendInfo.fWriteColor); 883 TEST_ASSERT(xpi.fBlendInfo.fWriteColor);
879 break; 884 break;
880 default: 885 default:
881 ERRORF(reporter, "Invalid xfermode."); 886 ERRORF(reporter, "Invalid xfermode.");
882 break; 887 break;
883 } 888 }
884 } 889 }
885 } 890 }
886 891
887 static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr Caps& caps) { 892 static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const Gr Caps& caps) {
888 GrProcOptInfo colorPOI, covPOI; 893 GrPipelineOptimizations optimizations;
889 colorPOI.calcWithInitialValues(nullptr, 0, GrColorPackRGBA(0, 82, 0, 255), 894 optimizations.fColorPOI.calcWithInitialValues(nullptr, 0, GrColorPackRGBA(0, 82, 0, 255),
890 kG_GrColorComponentFlag | kA_GrColorComponent Flag, false); 895 kG_GrColorComponentFlag | kA_GrColorComponent Flag, false);
891 covPOI.calcWithInitialValues(nullptr, 0, GrColorPackA4(255), kRGBA_GrColorCo mponentFlags, true); 896 optimizations.fCoveragePOI.calcWithInitialValues(nullptr, 0, GrColorPackA4(2 55),
897 kRGBA_GrColorComponentFlags , true);
892 898
893 SkASSERT(colorPOI.isOpaque()); 899 SkASSERT(optimizations.fColorPOI.isOpaque());
894 SkASSERT(!colorPOI.isSolidWhite()); 900 SkASSERT(!optimizations.fColorPOI.isSolidWhite());
895 SkASSERT(covPOI.isSolidWhite()); 901 SkASSERT(optimizations.fCoveragePOI.isSolidWhite());
896 SkASSERT(!covPOI.isFourChannelOutput()); 902 SkASSERT(!optimizations.fCoveragePOI.isFourChannelOutput());
897 903
898 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { 904 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
899 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); 905 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
900 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, colorPOI, c ovPOI); 906 const GrPorterDuffTest::XPInfo xpi(reporter, xfermode, caps, optimizatio ns);
901 907
902 switch (xfermode) { 908 switch (xfermode) {
903 case SkXfermode::kClear_Mode: 909 case SkXfermode::kClear_Mode:
904 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst); 910 TEST_ASSERT(!xpi.fBlendedColor.fWillBlendWithDst);
905 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor); 911 TEST_ASSERT(0 == xpi.fBlendedColor.fKnownColor);
906 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags); 912 TEST_ASSERT(kRGBA_GrColorComponentFlags == xpi.fBlendedColor.fKn ownColorFlags);
907 TEST_ASSERT((kIgnoreColor_OptFlag | 913 TEST_ASSERT((kIgnoreColor_OptFlag |
908 kIgnoreCoverage_OptFlag) == xpi.fOptFlags); 914 kIgnoreCoverage_OptFlag) == xpi.fOptFlags);
909 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType); 915 TEST_ASSERT(kNone_OutputType == xpi.fPrimaryOutputType);
910 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType); 916 TEST_ASSERT(kNone_OutputType == xpi.fSecondaryOutputType);
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
1119 1125
1120 GrPipelineOptimizations opts; 1126 GrPipelineOptimizations opts;
1121 testLCDCoverageBatch.getPipelineOptimizations(&opts); 1127 testLCDCoverageBatch.getPipelineOptimizations(&opts);
1122 GrProcOptInfo colorPOI = opts.fColorPOI; 1128 GrProcOptInfo colorPOI = opts.fColorPOI;
1123 GrProcOptInfo covPOI = opts.fCoveragePOI; 1129 GrProcOptInfo covPOI = opts.fCoveragePOI;
1124 1130
1125 SkASSERT(kRGBA_GrColorComponentFlags == colorPOI.validFlags()); 1131 SkASSERT(kRGBA_GrColorComponentFlags == colorPOI.validFlags());
1126 SkASSERT(covPOI.isFourChannelOutput()); 1132 SkASSERT(covPOI.isFourChannelOutput());
1127 1133
1128 SkAutoTUnref<GrXPFactory> xpf(GrPorterDuffXPFactory::Create(SkXfermode::kSrc Over_Mode)); 1134 SkAutoTUnref<GrXPFactory> xpf(GrPorterDuffXPFactory::Create(SkXfermode::kSrc Over_Mode));
1129 TEST_ASSERT(!xpf->willNeedDstTexture(caps, colorPOI, covPOI, false)); 1135 TEST_ASSERT(!xpf->willNeedDstTexture(caps, opts, false));
1130 1136
1131 SkAutoTUnref<GrXferProcessor> xp( 1137 SkAutoTUnref<GrXferProcessor> xp(
1132 xpf->createXferProcessor(colorPOI, covPOI, false, nullptr, caps)); 1138 xpf->createXferProcessor(opts, false, nullptr, caps));
1133 if (!xp) { 1139 if (!xp) {
1134 ERRORF(reporter, "Failed to create an XP with LCD coverage."); 1140 ERRORF(reporter, "Failed to create an XP with LCD coverage.");
1135 return; 1141 return;
1136 } 1142 }
1137 1143
1138 GrXPFactory::InvariantBlendedColor blendedColor; 1144 GrXPFactory::InvariantBlendedColor blendedColor;
1139 xpf->getInvariantBlendedColor(colorPOI, &blendedColor); 1145 xpf->getInvariantBlendedColor(colorPOI, &blendedColor);
1140 TEST_ASSERT(blendedColor.fWillBlendWithDst); 1146 TEST_ASSERT(blendedColor.fWillBlendWithDst);
1141 TEST_ASSERT(kNone_GrColorComponentFlags == blendedColor.fKnownColorFlags); 1147 TEST_ASSERT(kNone_GrColorComponentFlags == blendedColor.fKnownColorFlags);
1142 1148
1143 GrColor overrideColor; 1149 GrColor overrideColor;
1144 xp->getOptimizations(colorPOI, covPOI, false, &overrideColor, caps); 1150 xp->getOptimizations(opts, false, &overrideColor, caps);
1145 1151
1146 GrXferProcessor::BlendInfo blendInfo; 1152 GrXferProcessor::BlendInfo blendInfo;
1147 xp->getBlendInfo(&blendInfo); 1153 xp->getBlendInfo(&blendInfo);
1148 TEST_ASSERT(blendInfo.fWriteColor); 1154 TEST_ASSERT(blendInfo.fWriteColor);
1149 } 1155 }
1150 1156
1151 static void test_no_dual_source_blending(skiatest::Reporter* reporter) { 1157 static void test_no_dual_source_blending(skiatest::Reporter* reporter) {
1152 GrContextOptions opts; 1158 GrContextOptions opts;
1153 opts.fSuppressDualSourceBlending = true; 1159 opts.fSuppressDualSourceBlending = true;
1154 GrContextFactory factory(opts); 1160 GrContextFactory factory(opts);
(...skipping 27 matching lines...) Expand all
1182 GrColorPackA4(255) 1188 GrColorPackA4(255)
1183 }; 1189 };
1184 static const GrColorComponentFlags testColorFlags[] = { 1190 static const GrColorComponentFlags testColorFlags[] = {
1185 kNone_GrColorComponentFlags, 1191 kNone_GrColorComponentFlags,
1186 kG_GrColorComponentFlag | kA_GrColorComponentFlag, 1192 kG_GrColorComponentFlag | kA_GrColorComponentFlag,
1187 kRGBA_GrColorComponentFlags 1193 kRGBA_GrColorComponentFlags
1188 }; 1194 };
1189 GR_STATIC_ASSERT(SK_ARRAY_COUNT(testColors) == SK_ARRAY_COUNT(testColorFlags )); 1195 GR_STATIC_ASSERT(SK_ARRAY_COUNT(testColors) == SK_ARRAY_COUNT(testColorFlags ));
1190 1196
1191 for (size_t c = 0; c < SK_ARRAY_COUNT(testColors); c++) { 1197 for (size_t c = 0; c < SK_ARRAY_COUNT(testColors); c++) {
1192 GrProcOptInfo colorPOI; 1198 GrPipelineOptimizations optimizations;
1193 colorPOI.calcWithInitialValues(nullptr, 0, testColors[c], testColorFlags [c], false); 1199 optimizations.fColorPOI.calcWithInitialValues(nullptr, 0, testColors[c], testColorFlags[c],
1200 false);
1194 for (int f = 0; f <= 1; f++) { 1201 for (int f = 0; f <= 1; f++) {
1195 GrProcOptInfo covPOI;
1196 if (!f) { 1202 if (!f) {
1197 covPOI.calcWithInitialValues(nullptr, 0, 0, kNone_GrColorCompone ntFlags, true); 1203 optimizations.fCoveragePOI.calcWithInitialValues(nullptr, 0, 0,
1204 kNone_GrColorCo mponentFlags, true);
1198 } else { 1205 } else {
1199 covPOI.calcWithInitialValues(nullptr, 0, GrColorPackA4(255), 1206 optimizations.fCoveragePOI.calcWithInitialValues(nullptr, 0, GrC olorPackA4(255),
1200 kRGBA_GrColorComponentFlags, true); 1207 kRGBA_GrColorCo mponentFlags, true);
1201 } 1208 }
1202 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) { 1209 for (int m = 0; m <= SkXfermode::kLastCoeffMode; m++) {
1203 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m); 1210 SkXfermode::Mode xfermode = static_cast<SkXfermode::Mode>(m);
1204 SkAutoTUnref<GrXPFactory> xpf(GrPorterDuffXPFactory::Create(xfer mode)); 1211 SkAutoTUnref<GrXPFactory> xpf(GrPorterDuffXPFactory::Create(xfer mode));
1205 GrXferProcessor::DstTexture* dstTexture = 1212 GrXferProcessor::DstTexture* dstTexture =
1206 xpf->willNeedDstTexture(caps, colorPOI, covPOI, false) ? &fa keDstTexture : 0; 1213 xpf->willNeedDstTexture(caps, optimizations, false) ? &fakeD stTexture : 0;
1207 SkAutoTUnref<GrXferProcessor> xp( 1214 SkAutoTUnref<GrXferProcessor> xp(
1208 xpf->createXferProcessor(colorPOI, covPOI, false, dstTexture , caps)); 1215 xpf->createXferProcessor(optimizations, false, dstTexture, c aps));
1209 if (!xp) { 1216 if (!xp) {
1210 ERRORF(reporter, "Failed to create an XP without dual source blending."); 1217 ERRORF(reporter, "Failed to create an XP without dual source blending.");
1211 return; 1218 return;
1212 } 1219 }
1213 TEST_ASSERT(!xp->hasSecondaryOutput()); 1220 TEST_ASSERT(!xp->hasSecondaryOutput());
1214 xp->getOptimizations(colorPOI, covPOI, false, 0, caps); 1221 xp->getOptimizations(optimizations, false, 0, caps);
1215 TEST_ASSERT(!xp->hasSecondaryOutput()); 1222 TEST_ASSERT(!xp->hasSecondaryOutput());
1216 } 1223 }
1217 } 1224 }
1218 } 1225 }
1219 ctx->getGpu()->deleteTestingOnlyBackendTexture(backendTex); 1226 ctx->getGpu()->deleteTestingOnlyBackendTexture(backendTex);
1220 } 1227 }
1221 1228
1222 #endif 1229 #endif
1223 1230
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