blob: c174ae8afe3b43783ccc0f0f7f00068ae29603e0 [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*,
Chris Dalton2a26c502021-08-26 10:05:11 -060027 const GrSurfaceProxyView& writeView,
28 bool usesMSAASurface,
Robert Phillips50d7d6f2020-03-04 11:12:24 -050029 GrAppliedClip&&,
John Stiles52cb1d02021-06-02 11:58:05 -040030 const GrDstProxyView&,
Robert Phillips50d7d6f2020-03-04 11:12:24 -050031 GrGeometryProcessor*,
Greg Danield358cbe2020-09-11 09:33:54 -040032 GrPrimitiveType,
Greg Daniel42dbca52020-11-20 10:22:43 -050033 GrXferBarrierFlags renderPassXferBarriers,
34 GrLoadOp colorLoadOp);
Robert Phillips50d7d6f2020-03-04 11:12:24 -050035
Robert Phillips55f681f2020-02-28 08:58:15 -050036 // using declarations can't be templated, so this is a pass through function instead.
37 template <typename Op, typename... OpArgs>
Herb Derbyc76d4092020-10-07 16:46:15 -040038 static GrOp::Owner FactoryHelper(GrRecordingContext* context, GrPaint&& paint,
39 OpArgs... opArgs) {
Robert Phillips55f681f2020-02-28 08:58:15 -050040 return GrSimpleMeshDrawOpHelper::FactoryHelper<Op, OpArgs...>(
41 context, std::move(paint), std::forward<OpArgs>(opArgs)...);
42 }
43
Herb Derbyc76d4092020-10-07 16:46:15 -040044 GrSimpleMeshDrawOpHelperWithStencil(GrProcessorSet*, GrAAType, const GrUserStencilSettings*,
Robert Phillips55f681f2020-02-28 08:58:15 -050045 InputFlags = InputFlags::kNone);
46
47 GrDrawOp::FixedFunctionFlags fixedFunctionFlags() const;
48
Chris Dalton57ab06c2021-04-22 12:57:28 -060049 GrProcessorSet::Analysis finalizeProcessors(const GrCaps& caps, const GrAppliedClip* clip,
50 GrClampType clampType,
51 GrProcessorAnalysisCoverage geometryCoverage,
52 GrProcessorAnalysisColor* geometryColor) {
53 return this->INHERITED::finalizeProcessors(caps, clip, fStencilSettings, clampType,
54 geometryCoverage, geometryColor);
Robert Phillips55f681f2020-02-28 08:58:15 -050055 }
56
Chris Dalton57ab06c2021-04-22 12:57:28 -060057 GrProcessorSet::Analysis finalizeProcessors(const GrCaps&, const GrAppliedClip*, GrClampType,
58 GrProcessorAnalysisCoverage geometryCoverage,
59 SkPMColor4f* geometryColor, bool* wideColor);
Robert Phillips55f681f2020-02-28 08:58:15 -050060
61 using GrSimpleMeshDrawOpHelper::aaType;
62 using GrSimpleMeshDrawOpHelper::setAAType;
63 using GrSimpleMeshDrawOpHelper::isTrivial;
64 using GrSimpleMeshDrawOpHelper::usesLocalCoords;
65 using GrSimpleMeshDrawOpHelper::compatibleWithCoverageAsAlpha;
66 using GrSimpleMeshDrawOpHelper::detachProcessorSet;
67 using GrSimpleMeshDrawOpHelper::pipelineFlags;
68
69 bool isCompatible(const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps&,
70 const SkRect& thisBounds, const SkRect& thatBounds,
71 bool ignoreAAType = false) const;
72
John Stiles8d9bf642020-08-12 15:07:45 -040073#if GR_TEST_UTILS
Robert Phillips55f681f2020-02-28 08:58:15 -050074 SkString dumpInfo() const;
75#endif
76
77 const GrUserStencilSettings* stencilSettings() const { return fStencilSettings; }
78
79private:
80 const GrUserStencilSettings* fStencilSettings;
John Stiles7571f9e2020-09-02 22:42:33 -040081 using INHERITED = GrSimpleMeshDrawOpHelper;
Robert Phillips55f681f2020-02-28 08:58:15 -050082};
83
84#endif