57ab06c14e
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>
71 lines
3.1 KiB
C++
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());
|
|
}
|
|
}
|
|
}
|
|
}
|