aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/GrPorterDuffTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/GrPorterDuffTest.cpp')
-rw-r--r--tests/GrPorterDuffTest.cpp104
1 files changed, 50 insertions, 54 deletions
diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp
index a193162ada..d87e252141 100644
--- a/tests/GrPorterDuffTest.cpp
+++ b/tests/GrPorterDuffTest.cpp
@@ -9,6 +9,7 @@
#if SK_SUPPORT_GPU
+#include "GrAppliedClip.h"
#include "GrContextFactory.h"
#include "GrContextOptions.h"
#include "GrGpu.h"
@@ -66,11 +67,11 @@ class GrPorterDuffTest {
public:
struct XPInfo {
XPInfo(skiatest::Reporter* reporter, SkBlendMode xfermode, const GrCaps& caps,
- const GrPipelineAnalysis& analysis) {
+ const GrProcessorSet::FragmentProcessorAnalysis& analysis) {
const GrXPFactory* xpf = GrPorterDuffXPFactory::Get(xfermode);
- fReadsDst = GrXPFactory::WillReadDst(xpf, analysis.fColorPOI, analysis.fCoveragePOI);
+ fReadsDst = GrXPFactory::WillReadDst(xpf, analysis);
sk_sp<GrXferProcessor> xp(xpf->createXferProcessor(analysis, false, nullptr, caps));
- TEST_ASSERT(!xpf->willNeedDstTexture(caps, analysis));
+ TEST_ASSERT(!GrXPFactory::WillNeedDstTexture(xpf, caps, analysis));
GrColor ignoredOverrideColor;
fOptFlags = xp->getOptimizations(analysis, false, &ignoredOverrideColor, caps);
GetXPOutputTypes(xp.get(), &fPrimaryOutputType, &fSecondaryOutputType);
@@ -92,14 +93,13 @@ public:
};
static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
- GrPipelineAnalysis analysis;
- // Setting the last argument to true will force covPOI to LCD coverage.
- analysis.fCoveragePOI.resetToLCDCoverage();
+ GrPipelineInput lcdInput;
+ lcdInput.setToLCDCoverage();
+ GrProcessorSet::FragmentProcessorAnalysis analysis(GrPipelineInput(), lcdInput, caps);
- SkASSERT(!analysis.fColorPOI.isOpaque());
- SkASSERT(!analysis.fColorPOI.isSolidWhite());
- SkASSERT(!analysis.fCoveragePOI.isSolidWhite());
- SkASSERT(analysis.fCoveragePOI.isLCDCoverage());
+ SkASSERT(!analysis.isOutputColorOpaque());
+ SkASSERT(!analysis.hasKnownOutputColor());
+ SkASSERT(analysis.hasLCDCoverage());
for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) {
SkBlendMode xfermode = static_cast<SkBlendMode>(m);
@@ -264,12 +264,12 @@ static void test_lcd_coverage(skiatest::Reporter* reporter, const GrCaps& caps)
}
}
static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
- GrPipelineAnalysis analysis;
+ GrProcessorSet::FragmentProcessorAnalysis analysis(GrPipelineInput(), GrPipelineInput(), caps);
- SkASSERT(!analysis.fColorPOI.isOpaque());
- SkASSERT(!analysis.fColorPOI.isSolidWhite());
- SkASSERT(!analysis.fCoveragePOI.isSolidWhite());
- SkASSERT(!analysis.fCoveragePOI.isLCDCoverage());
+ SkASSERT(!analysis.isOutputColorOpaque());
+ SkASSERT(!analysis.hasKnownOutputColor());
+ SkASSERT(!analysis.hasLCDCoverage());
+ SkASSERT(analysis.hasCoverage());
for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) {
SkBlendMode xfermode = static_cast<SkBlendMode>(m);
@@ -435,14 +435,12 @@ static void test_color_unknown_with_coverage(skiatest::Reporter* reporter, const
}
static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
- GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(GrPipelineInput(GrColorPackRGBA(229, 0, 154, 240)));
- analysis.fCoveragePOI.reset(GrPipelineInput(GrColorPackA4(255)));
+ GrProcessorSet::FragmentProcessorAnalysis analysis(GrColorPackRGBA(229, 0, 154, 240),
+ GrColorPackA4(255), caps);
- SkASSERT(!analysis.fColorPOI.isOpaque());
- SkASSERT(!analysis.fColorPOI.isSolidWhite());
- SkASSERT(analysis.fCoveragePOI.isSolidWhite());
- SkASSERT(!analysis.fCoveragePOI.isLCDCoverage());
+ SkASSERT(!analysis.isOutputColorOpaque());
+ SkASSERT(analysis.hasKnownOutputColor());
+ SkASSERT(!analysis.hasCoverage());
for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) {
SkBlendMode xfermode = static_cast<SkBlendMode>(m);
@@ -608,13 +606,13 @@ static void test_color_unknown_no_coverage(skiatest::Reporter* reporter, const G
}
static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
- GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(GrPipelineInput(GrPipelineInput::Opaque::kYes));
+ GrProcessorSet::FragmentProcessorAnalysis analysis(GrPipelineInput::Opaque::kYes,
+ GrPipelineInput(), caps);
- SkASSERT(analysis.fColorPOI.isOpaque());
- SkASSERT(!analysis.fColorPOI.isSolidWhite());
- SkASSERT(!analysis.fCoveragePOI.isSolidWhite());
- SkASSERT(!analysis.fCoveragePOI.isLCDCoverage());
+ SkASSERT(analysis.isOutputColorOpaque());
+ SkASSERT(!analysis.hasKnownOutputColor());
+ SkASSERT(analysis.hasCoverage());
+ SkASSERT(!analysis.hasLCDCoverage());
for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) {
SkBlendMode xfermode = static_cast<SkBlendMode>(m);
@@ -782,14 +780,12 @@ static void test_color_opaque_with_coverage(skiatest::Reporter* reporter, const
}
static void test_color_opaque_no_coverage(skiatest::Reporter* reporter, const GrCaps& caps) {
- GrPipelineAnalysis analysis;
- analysis.fColorPOI.reset(GrPipelineInput(GrPipelineInput::Opaque::kYes));
- analysis.fCoveragePOI.reset(GrPipelineInput(GrColorPackA4(255)));
+ GrProcessorSet::FragmentProcessorAnalysis analysis(GrPipelineInput::Opaque::kYes,
+ GrColorPackA4(255), caps);
- SkASSERT(analysis.fColorPOI.isOpaque());
- SkASSERT(!analysis.fColorPOI.isSolidWhite());
- SkASSERT(analysis.fCoveragePOI.isSolidWhite());
- SkASSERT(!analysis.fCoveragePOI.isLCDCoverage());
+ SkASSERT(analysis.isOutputColorOpaque());
+ SkASSERT(!analysis.hasKnownOutputColor());
+ SkASSERT(!analysis.hasCoverage());
for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) {
SkBlendMode xfermode = static_cast<SkBlendMode>(m);
@@ -967,9 +963,10 @@ static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const
const char* name() const override { return "Test LCD Text Op"; }
private:
- void getPipelineAnalysisInput(GrPipelineAnalysisDrawOpInput* input) const override {
- input->pipelineColorInput()->setToConstant(GrColorPackRGBA(123, 45, 67, 221));
- input->pipelineCoverageInput()->setToLCDCoverage();
+ void getFragmentProcessorAnalysisInputs(
+ FragmentProcessorAnalysisInputs* input) const override {
+ input->colorInput()->setToConstant(GrColorPackRGBA(123, 45, 67, 221));
+ input->coverageInput()->setToLCDCoverage();
}
void applyPipelineOptimizations(const GrPipelineOptimizations&) override {}
@@ -979,19 +976,15 @@ static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const
typedef GrMeshDrawOp INHERITED;
} testLCDCoverageOp;
- GrPipelineAnalysis analysis;
- testLCDCoverageOp.initPipelineAnalysis(&analysis);
- GrProcOptInfo colorPOI = analysis.fColorPOI;
- GrProcOptInfo covPOI = analysis.fCoveragePOI;
- // Prevent unused var warnings in release.
- (void)colorPOI;
- (void)covPOI;
+ GrProcessorSet::FragmentProcessorAnalysis analysis;
+ GrAppliedClip clip(SkRect::MakeLargest());
+ testLCDCoverageOp.analyzeProcessors(&analysis, GrProcessorSet(GrPaint()), clip, caps);
- SkASSERT(colorPOI.hasKnownOutputColor());
- SkASSERT(covPOI.isLCDCoverage());
+ SkASSERT(analysis.hasKnownOutputColor());
+ SkASSERT(analysis.hasLCDCoverage());
const GrXPFactory* xpf = GrPorterDuffXPFactory::Get(SkBlendMode::kSrcOver);
- TEST_ASSERT(!xpf->willNeedDstTexture(caps, analysis));
+ TEST_ASSERT(!GrXPFactory::WillNeedDstTexture(xpf, caps, analysis));
sk_sp<GrXferProcessor> xp(xpf->createXferProcessor(analysis, false, nullptr, caps));
if (!xp) {
@@ -999,7 +992,7 @@ static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const
return;
}
- TEST_ASSERT(GrXPFactory::WillReadDst(xpf, colorPOI, covPOI));
+ TEST_ASSERT(GrXPFactory::WillReadDst(xpf, analysis));
GrColor overrideColor;
xp->getOptimizations(analysis, false, &overrideColor, caps);
@@ -1041,17 +1034,20 @@ DEF_GPUTEST(PorterDuffNoDualSourceBlending, reporter, /*factory*/) {
GrPipelineInput(GrColorPackRGBA(0, 82, 17, 255))};
for (const auto& colorInput : colorInputs) {
- GrPipelineAnalysis analysis;
- analysis.fColorPOI = colorInput;
+ GrProcessorSet::FragmentProcessorAnalysis analysis;
for (bool fractionalCoverage : {true, false}) {
- if (!fractionalCoverage) {
- analysis.fCoveragePOI.reset(GrPipelineInput(GrColorPackA4(255)));
+ if (fractionalCoverage) {
+ analysis = GrProcessorSet::FragmentProcessorAnalysis(colorInput, GrPipelineInput(),
+ caps);
+ } else {
+ analysis = GrProcessorSet::FragmentProcessorAnalysis(colorInput, GrColorPackA4(255),
+ caps);
}
for (int m = 0; m <= (int)SkBlendMode::kLastCoeffMode; m++) {
SkBlendMode xfermode = static_cast<SkBlendMode>(m);
const GrXPFactory* xpf = GrPorterDuffXPFactory::Get(xfermode);
GrXferProcessor::DstTexture* dstTexture =
- xpf->willNeedDstTexture(caps, analysis) ? &fakeDstTexture : 0;
+ GrXPFactory::WillNeedDstTexture(xpf, caps, analysis) ? &fakeDstTexture : 0;
sk_sp<GrXferProcessor> xp(
xpf->createXferProcessor(analysis, false, dstTexture, caps));
if (!xp) {