aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrXferProcessor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gpu/GrXferProcessor.cpp')
-rw-r--r--src/gpu/GrXferProcessor.cpp41
1 files changed, 14 insertions, 27 deletions
diff --git a/src/gpu/GrXferProcessor.cpp b/src/gpu/GrXferProcessor.cpp
index bd63a0a40b..45bcc2d595 100644
--- a/src/gpu/GrXferProcessor.cpp
+++ b/src/gpu/GrXferProcessor.cpp
@@ -29,11 +29,6 @@ GrXferProcessor::GrXferProcessor(const DstTexture* dstTexture,
}
}
-GrXferProcessor::OptFlags GrXferProcessor::getOptimizations(
- const FragmentProcessorAnalysis& analysis) const {
- return this->onGetOptimizations(analysis);
-}
-
bool GrXferProcessor::hasSecondaryOutput() const {
if (!this->willReadDstColor()) {
return this->onHasSecondaryOutput();
@@ -175,31 +170,23 @@ SkString GrXferProcessor::BlendInfo::dump() const {
///////////////////////////////////////////////////////////////////////////////
-bool GrXPFactory::WillNeedDstTexture(const GrXPFactory* factory, const GrCaps& caps,
- const GrProcessorSet::FragmentProcessorAnalysis& analysis) {
- bool result;
+GrXPFactory::AnalysisProperties GrXPFactory::GetAnalysisProperties(
+ const GrXPFactory* factory,
+ const GrPipelineAnalysisColor& color,
+ const GrPipelineAnalysisCoverage& coverage,
+ const GrCaps& caps) {
+ AnalysisProperties result;
if (factory) {
- result = !caps.shaderCaps()->dstReadInShaderSupport() &&
- factory->willReadDstInShader(caps, analysis);
+ result = factory->analysisProperties(color, coverage, caps);
} else {
- result = GrPorterDuffXPFactory::WillSrcOverNeedDstTexture(caps, analysis);
+ result = GrPorterDuffXPFactory::SrcOverAnalysisProperties(color, coverage, caps);
}
- return result;
-}
-
-bool GrXPFactory::CompatibleWithCoverageAsAlpha(const GrXPFactory* factory, bool colorIsOpaque) {
- if (factory) {
- return factory->compatibleWithCoverageAsAlpha(colorIsOpaque);
+ SkASSERT(!(result & AnalysisProperties::kRequiresDstTexture));
+ if ((result & AnalysisProperties::kReadsDstInShader) &&
+ !caps.shaderCaps()->dstReadInShaderSupport()) {
+ result |= AnalysisProperties::kRequiresDstTexture;
}
- return GrPorterDuffXPFactory::SrcOverIsCompatibleWithCoverageAsAlpha();
-}
-
-bool GrXPFactory::CanCombineOverlappedStencilAndCover(const GrXPFactory* factory,
- bool colorIsOpaque) {
- if (factory) {
- return factory->canCombineOverlappedStencilAndCover(colorIsOpaque);
- }
- return GrPorterDuffXPFactory::SrcOverCanCombineOverlappedStencilAndCover(colorIsOpaque);
+ return result;
}
GrXferProcessor* GrXPFactory::createXferProcessor(const FragmentProcessorAnalysis& analysis,
@@ -207,7 +194,7 @@ GrXferProcessor* GrXPFactory::createXferProcessor(const FragmentProcessorAnalysi
const DstTexture* dstTexture,
const GrCaps& caps) const {
#ifdef SK_DEBUG
- if (this->willReadDstInShader(caps, analysis)) {
+ if (analysis.requiresDstTexture()) {
if (!caps.shaderCaps()->dstReadInShaderSupport()) {
SkASSERT(dstTexture && dstTexture->texture());
} else {