skia2/tests/AdvancedBlendTest.cpp
Chris Dalton 57ab06c14e Delete mixed samples
Mixed samples is no longer relevant for Ganesh. DMSAA and the new
Ganesh architecture both rely on full MSAA, and any platform where
mixed samples is supported will ultimately not use the old
architecture.

Change-Id: I5acc745010e090ef26310d92ec6240be2cd494cf
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/399837
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
2021-04-22 20:11:34 +00:00

71 lines
3.1 KiB
C++

/*
* Copyright 2019 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/core/SkBlendMode.h"
#include "include/gpu/GrDirectContext.h"
#include "include/private/GrTypesPriv.h"
#include "include/private/SkColorData.h"
#include "src/gpu/GrBlend.h"
#include "src/gpu/GrCaps.h"
#include "src/gpu/GrDirectContextPriv.h"
#include "src/gpu/GrPaint.h"
#include "src/gpu/GrProcessorAnalysis.h"
#include "src/gpu/GrProcessorSet.h"
#include "src/gpu/GrUserStencilSettings.h"
#include "src/gpu/GrXferProcessor.h"
#include "src/gpu/effects/GrCustomXfermode.h"
#include "tests/Test.h"
#include "tools/gpu/GrContextFactory.h"
#include <utility>
DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AdvancedBlendTest, reporter, ctxInfo) {
static constexpr auto opaque = GrProcessorAnalysisColor::Opaque::kYes;
static constexpr auto coverage = GrProcessorAnalysisCoverage::kSingleChannel;
const GrCaps& caps = *ctxInfo.directContext()->priv().caps();
for (int mode = (int)SkBlendMode::kLastMode; mode > (int)SkBlendMode::kLastCoeffMode; --mode) {
const SkBlendMode blendMode = (SkBlendMode)mode;
const GrBlendEquation blendEquation =
(GrBlendEquation)(mode + (kOverlay_GrBlendEquation - (int)SkBlendMode::kOverlay));
const GrXPFactory* xpf = GrCustomXfermode::Get(blendMode);
GrXPFactory::AnalysisProperties xpfAnalysis =
GrXPFactory::GetAnalysisProperties(xpf, opaque, coverage, caps, GrClampType::kAuto);
GrPaint paint;
paint.setXPFactory(xpf);
GrProcessorSet procs(std::move(paint));
SkPMColor4f overrideColor;
GrProcessorSet::Analysis processorAnalysis = procs.finalize(
opaque, coverage, nullptr, &GrUserStencilSettings::kUnused, caps,
GrClampType::kAuto, &overrideColor);
if (caps.advancedBlendEquationSupport() &&
!caps.isAdvancedBlendEquationDisabled(blendEquation)) {
REPORTER_ASSERT(reporter,
!(xpfAnalysis & GrXPFactory::AnalysisProperties::kReadsDstInShader));
if (GrCaps::kAdvancedCoherent_BlendEquationSupport == caps.blendEquationSupport()) {
REPORTER_ASSERT(reporter, !processorAnalysis.requiresNonOverlappingDraws());
} else {
REPORTER_ASSERT(reporter,
GrCaps::kAdvanced_BlendEquationSupport
== caps.blendEquationSupport());
REPORTER_ASSERT(reporter, processorAnalysis.requiresNonOverlappingDraws());
}
} else {
REPORTER_ASSERT(reporter,
(xpfAnalysis & GrXPFactory::AnalysisProperties::kReadsDstInShader));
if (xpfAnalysis & GrXPFactory::AnalysisProperties::kRequiresDstTexture) {
REPORTER_ASSERT(reporter, processorAnalysis.requiresNonOverlappingDraws());
} else {
REPORTER_ASSERT(reporter, !processorAnalysis.requiresNonOverlappingDraws());
}
}
}
}