blob: 575b23f768b7652d2679da9863b6f23b4426ff85 [file] [log] [blame]
Robert Phillips55f681f2020-02-28 08:58:15 -05001/*
2 * Copyright 2020 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef GrSimpleMeshDrawOpHelperWithStencil_DEFINED
9#define GrSimpleMeshDrawOpHelperWithStencil_DEFINED
10
11#include "src/gpu/ops/GrSimpleMeshDrawOpHelper.h"
12
13/**
14 * This class extends GrSimpleMeshDrawOpHelper to support an optional GrUserStencilSettings. This
15 * uses private inheritance because it non-virtually overrides methods in the base class and should
16 * never be used with a GrSimpleMeshDrawOpHelper pointer or reference.
17 */
18class GrSimpleMeshDrawOpHelperWithStencil : private GrSimpleMeshDrawOpHelper {
19public:
Robert Phillips55f681f2020-02-28 08:58:15 -050020 using InputFlags = GrSimpleMeshDrawOpHelper::InputFlags;
21
22 using GrSimpleMeshDrawOpHelper::visitProxies;
Chris Dalton1b6a43c2020-09-25 12:21:18 -060023 using GrSimpleMeshDrawOpHelper::createPipeline;
Robert Phillips55f681f2020-02-28 08:58:15 -050024
Robert Phillips50d7d6f2020-03-04 11:12:24 -050025 GrProgramInfo* createProgramInfoWithStencil(const GrCaps*,
26 SkArenaAlloc*,
Adlai Hollere2296f72020-11-19 13:41:26 -050027 const GrSurfaceProxyView& writeViewSwizzle,
Robert Phillips50d7d6f2020-03-04 11:12:24 -050028 GrAppliedClip&&,
29 const GrXferProcessor::DstProxyView&,
30 GrGeometryProcessor*,
Greg Danield358cbe2020-09-11 09:33:54 -040031 GrPrimitiveType,
Greg Daniel42dbca52020-11-20 10:22:43 -050032 GrXferBarrierFlags renderPassXferBarriers,
33 GrLoadOp colorLoadOp);
Robert Phillips50d7d6f2020-03-04 11:12:24 -050034
Robert Phillips55f681f2020-02-28 08:58:15 -050035 // using declarations can't be templated, so this is a pass through function instead.
36 template <typename Op, typename... OpArgs>
Herb Derbyc76d4092020-10-07 16:46:15 -040037 static GrOp::Owner FactoryHelper(GrRecordingContext* context, GrPaint&& paint,
38 OpArgs... opArgs) {
Robert Phillips55f681f2020-02-28 08:58:15 -050039 return GrSimpleMeshDrawOpHelper::FactoryHelper<Op, OpArgs...>(
40 context, std::move(paint), std::forward<OpArgs>(opArgs)...);
41 }
42
Herb Derbyc76d4092020-10-07 16:46:15 -040043 GrSimpleMeshDrawOpHelperWithStencil(GrProcessorSet*, GrAAType, const GrUserStencilSettings*,
Robert Phillips55f681f2020-02-28 08:58:15 -050044 InputFlags = InputFlags::kNone);
45
46 GrDrawOp::FixedFunctionFlags fixedFunctionFlags() const;
47
48 GrProcessorSet::Analysis finalizeProcessors(
49 const GrCaps& caps, const GrAppliedClip* clip, bool hasMixedSampledCoverage,
50 GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage,
51 GrProcessorAnalysisColor* geometryColor) {
52 return this->INHERITED::finalizeProcessors(
53 caps, clip, fStencilSettings, hasMixedSampledCoverage, clampType, geometryCoverage,
54 geometryColor);
55 }
56
57 GrProcessorSet::Analysis finalizeProcessors(
58 const GrCaps&, const GrAppliedClip*, bool hasMixedSampledCoverage, GrClampType,
59 GrProcessorAnalysisCoverage geometryCoverage, SkPMColor4f* geometryColor, bool*
60 wideColor);
61
62 using GrSimpleMeshDrawOpHelper::aaType;
63 using GrSimpleMeshDrawOpHelper::setAAType;
64 using GrSimpleMeshDrawOpHelper::isTrivial;
65 using GrSimpleMeshDrawOpHelper::usesLocalCoords;
66 using GrSimpleMeshDrawOpHelper::compatibleWithCoverageAsAlpha;
67 using GrSimpleMeshDrawOpHelper::detachProcessorSet;
68 using GrSimpleMeshDrawOpHelper::pipelineFlags;
69
70 bool isCompatible(const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps&,
71 const SkRect& thisBounds, const SkRect& thatBounds,
72 bool ignoreAAType = false) const;
73
John Stiles8d9bf642020-08-12 15:07:45 -040074#if GR_TEST_UTILS
Robert Phillips55f681f2020-02-28 08:58:15 -050075 SkString dumpInfo() const;
76#endif
77
78 const GrUserStencilSettings* stencilSettings() const { return fStencilSettings; }
79
80private:
81 const GrUserStencilSettings* fStencilSettings;
John Stiles7571f9e2020-09-02 22:42:33 -040082 using INHERITED = GrSimpleMeshDrawOpHelper;
Robert Phillips55f681f2020-02-28 08:58:15 -050083};
84
85#endif