Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 2833ec6

Browse files
csmartdalton86Skia Commit-Bot
authored andcommitted
Plumb mixed samples through GrXPFactory::GetAnalysisProperties
Bug: skia:10419 Change-Id: I43898b0131231e2a4d1d6153e60530ba372b1c19 Reviewed-on: https://skia-review.googlesource.com/c/skia/+/340516 Reviewed-by: Brian Salomon <[email protected]> Reviewed-by: Greg Daniel <[email protected]> Commit-Queue: Chris Dalton <[email protected]>
1 parent 62a5646 commit 2833ec6

10 files changed

+26
-14
lines changed

src/gpu/GrProcessorSet.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,8 @@ GrProcessorSet::Analysis GrProcessorSet::finalize(
153153
}
154154

155155
GrXPFactory::AnalysisProperties props = GrXPFactory::GetAnalysisProperties(
156-
this->xpFactory(), colorAnalysis.outputColor(), outputCoverage, caps, clampType);
156+
this->xpFactory(), colorAnalysis.outputColor(), outputCoverage, hasMixedSampledCoverage,
157+
caps, clampType);
157158
analysis.fRequiresDstTexture =
158159
SkToBool(props & GrXPFactory::AnalysisProperties::kRequiresDstTexture);
159160
analysis.fCompatibleWithCoverageAsAlpha &=

src/gpu/GrXferProcessor.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -159,14 +159,15 @@ GrXPFactory::AnalysisProperties GrXPFactory::GetAnalysisProperties(
159159
const GrXPFactory* factory,
160160
const GrProcessorAnalysisColor& color,
161161
const GrProcessorAnalysisCoverage& coverage,
162+
bool hasMixedSamples,
162163
const GrCaps& caps,
163164
GrClampType clampType) {
164165
AnalysisProperties result;
165166
if (factory) {
166-
result = factory->analysisProperties(color, coverage, caps, clampType);
167+
result = factory->analysisProperties(color, coverage, hasMixedSamples, caps, clampType);
167168
} else {
168-
result = GrPorterDuffXPFactory::SrcOverAnalysisProperties(color, coverage, caps,
169-
clampType);
169+
result = GrPorterDuffXPFactory::SrcOverAnalysisProperties(color, coverage, hasMixedSamples,
170+
caps, clampType);
170171
}
171172
if (coverage == GrProcessorAnalysisCoverage::kNone) {
172173
result |= AnalysisProperties::kCompatibleWithCoverageAsAlpha;

src/gpu/GrXferProcessor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,7 @@ class GrXPFactory {
303303
static AnalysisProperties GetAnalysisProperties(const GrXPFactory*,
304304
const GrProcessorAnalysisColor&,
305305
const GrProcessorAnalysisCoverage&,
306+
bool hasMixedSamples,
306307
const GrCaps&,
307308
GrClampType);
308309

@@ -322,6 +323,7 @@ class GrXPFactory {
322323
*/
323324
virtual AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&,
324325
const GrProcessorAnalysisCoverage&,
326+
bool hasMixedSamples,
325327
const GrCaps&,
326328
GrClampType) const = 0;
327329
};

src/gpu/effects/GrCoverageSetOpXP.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class GrCoverageSetOpXPFactory : public GrXPFactory {
4242

4343
AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&,
4444
const GrProcessorAnalysisCoverage&,
45+
bool hasMixedSamples,
4546
const GrCaps&,
4647
GrClampType) const override {
4748
return AnalysisProperties::kIgnoresInputColor;

src/gpu/effects/GrCustomXfermode.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,6 +224,7 @@ class CustomXPFactory : public GrXPFactory {
224224

225225
AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&,
226226
const GrProcessorAnalysisCoverage&,
227+
bool hasMixedSamples,
227228
const GrCaps&,
228229
GrClampType) const override;
229230

@@ -256,7 +257,7 @@ sk_sp<const GrXferProcessor> CustomXPFactory::makeXferProcessor(
256257

257258
GrXPFactory::AnalysisProperties CustomXPFactory::analysisProperties(
258259
const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage& coverage,
259-
const GrCaps& caps, GrClampType clampType) const {
260+
bool hasMixedSamples, const GrCaps& caps, GrClampType clampType) const {
260261
/*
261262
The general SVG blend equation is defined in the spec as follows:
262263

src/gpu/effects/GrDisableColorXP.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ class GrDisableColorXPFactory : public GrXPFactory {
3131
constexpr GrDisableColorXPFactory() {}
3232

3333
AnalysisProperties analysisProperties(
34-
const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&, const GrCaps&,
35-
GrClampType) const override {
34+
const GrProcessorAnalysisColor&, const GrProcessorAnalysisCoverage&,
35+
bool hasMixedSamples, const GrCaps&, GrClampType) const override {
3636
return AnalysisProperties::kCompatibleWithCoverageAsAlpha |
3737
AnalysisProperties::kIgnoresInputColor;
3838
}

src/gpu/effects/GrPorterDuffXferProcessor.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -755,7 +755,7 @@ sk_sp<const GrXferProcessor> GrPorterDuffXPFactory::makeXferProcessor(
755755

756756
static inline GrXPFactory::AnalysisProperties analysis_properties(
757757
const GrProcessorAnalysisColor& color, const GrProcessorAnalysisCoverage& coverage,
758-
const GrCaps& caps, GrClampType clampType, SkBlendMode mode) {
758+
bool hasMixedSamples, const GrCaps& caps, GrClampType clampType, SkBlendMode mode) {
759759
using AnalysisProperties = GrXPFactory::AnalysisProperties;
760760
AnalysisProperties props = AnalysisProperties::kNone;
761761
bool hasCoverage = GrProcessorAnalysisCoverage::kNone != coverage;
@@ -764,7 +764,7 @@ static inline GrXPFactory::AnalysisProperties analysis_properties(
764764
if (isLCD) {
765765
return gLCDBlendTable[(int)mode];
766766
}
767-
return gBlendTable[color.isOpaque()][hasCoverage][(int)mode];
767+
return get_blend_formula(color.isOpaque(), hasCoverage, hasMixedSamples, mode);
768768
}();
769769

770770
if (formula.canTweakAlphaForCoverage() && !isLCD) {
@@ -815,9 +815,10 @@ static inline GrXPFactory::AnalysisProperties analysis_properties(
815815
GrXPFactory::AnalysisProperties GrPorterDuffXPFactory::analysisProperties(
816816
const GrProcessorAnalysisColor& color,
817817
const GrProcessorAnalysisCoverage& coverage,
818+
bool hasMixedSamples,
818819
const GrCaps& caps,
819820
GrClampType clampType) const {
820-
return analysis_properties(color, coverage, caps, clampType, fBlendMode);
821+
return analysis_properties(color, coverage, hasMixedSamples, caps, clampType, fBlendMode);
821822
}
822823

823824
GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory);
@@ -908,7 +909,9 @@ sk_sp<const GrXferProcessor> GrPorterDuffXPFactory::MakeNoCoverageXP(SkBlendMode
908909
GrXPFactory::AnalysisProperties GrPorterDuffXPFactory::SrcOverAnalysisProperties(
909910
const GrProcessorAnalysisColor& color,
910911
const GrProcessorAnalysisCoverage& coverage,
912+
bool hasMixedSamples,
911913
const GrCaps& caps,
912914
GrClampType clampType) {
913-
return analysis_properties(color, coverage, caps, clampType, SkBlendMode::kSrcOver);
915+
return analysis_properties(color, coverage, hasMixedSamples, caps, clampType,
916+
SkBlendMode::kSrcOver);
914917
}

src/gpu/effects/GrPorterDuffXferProcessor.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class GrPorterDuffXPFactory : public GrXPFactory {
4141

4242
static AnalysisProperties SrcOverAnalysisProperties(const GrProcessorAnalysisColor&,
4343
const GrProcessorAnalysisCoverage&,
44+
bool hasMixedSamples,
4445
const GrCaps&,
4546
GrClampType);
4647

@@ -55,6 +56,7 @@ class GrPorterDuffXPFactory : public GrXPFactory {
5556

5657
AnalysisProperties analysisProperties(const GrProcessorAnalysisColor&,
5758
const GrProcessorAnalysisCoverage&,
59+
bool hasMixedSamples,
5860
const GrCaps&,
5961
GrClampType) const override;
6062

tests/AdvancedBlendTest.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ DEF_GPUTEST_FOR_RENDERING_CONTEXTS(AdvancedBlendTest, reporter, ctxInfo) {
3535
const GrXPFactory* xpf = GrCustomXfermode::Get(blendMode);
3636

3737
GrXPFactory::AnalysisProperties xpfAnalysis =
38-
GrXPFactory::GetAnalysisProperties(xpf, opaque, coverage, caps, GrClampType::kAuto);
38+
GrXPFactory::GetAnalysisProperties(xpf, opaque, coverage, false, caps,
39+
GrClampType::kAuto);
3940

4041
GrPaint paint;
4142
paint.setXPFactory(xpf);

tests/GrPorterDuffTest.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -956,7 +956,7 @@ static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const
956956
const GrXPFactory* xpf = GrPorterDuffXPFactory::Get(SkBlendMode::kSrcOver);
957957
GrProcessorAnalysisColor color = SkPMColor4f::FromBytes_RGBA(GrColorPackRGBA(123, 45, 67, 255));
958958
GrProcessorAnalysisCoverage coverage = GrProcessorAnalysisCoverage::kLCD;
959-
TEST_ASSERT(!(GrXPFactory::GetAnalysisProperties(xpf, color, coverage, caps, autoClamp) &
959+
TEST_ASSERT(!(GrXPFactory::GetAnalysisProperties(xpf, color, coverage, false, caps, autoClamp) &
960960
GrXPFactory::AnalysisProperties::kRequiresDstTexture));
961961
sk_sp<const GrXferProcessor> xp_opaque(
962962
GrXPFactory::MakeXferProcessor(xpf, color, coverage, false, caps, autoClamp));
@@ -971,7 +971,7 @@ static void test_lcd_coverage_fallback_case(skiatest::Reporter* reporter, const
971971
// Test with non-opaque alpha
972972
color = SkPMColor4f::FromBytes_RGBA(GrColorPackRGBA(123, 45, 67, 221));
973973
coverage = GrProcessorAnalysisCoverage::kLCD;
974-
TEST_ASSERT(!(GrXPFactory::GetAnalysisProperties(xpf, color, coverage, caps, autoClamp) &
974+
TEST_ASSERT(!(GrXPFactory::GetAnalysisProperties(xpf, color, coverage, false, caps, autoClamp) &
975975
GrXPFactory::AnalysisProperties::kRequiresDstTexture));
976976
sk_sp<const GrXferProcessor> xp(
977977
GrXPFactory::MakeXferProcessor(xpf, color, coverage, false, caps, autoClamp));

0 commit comments

Comments
 (0)