1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2020 Google Inc. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrSimpleMeshDrawOpHelperWithStencil_DEFINED 9*c8dee2aaSAndroid Build Coastguard Worker #define GrSimpleMeshDrawOpHelperWithStencil_DEFINED 10*c8dee2aaSAndroid Build Coastguard Worker 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkString.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/SkColorData.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrCaps.h" 14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrPaint.h" 15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrProcessorSet.h" 16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/ops/GrDrawOp.h" 17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/ops/GrOp.h" 18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/ops/GrSimpleMeshDrawOpHelper.h" 19*c8dee2aaSAndroid Build Coastguard Worker 20*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint> 21*c8dee2aaSAndroid Build Coastguard Worker #include <utility> 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard Worker class GrAppliedClip; 24*c8dee2aaSAndroid Build Coastguard Worker class GrDstProxyView; 25*c8dee2aaSAndroid Build Coastguard Worker class GrGeometryProcessor; 26*c8dee2aaSAndroid Build Coastguard Worker class GrProcessorAnalysisColor; 27*c8dee2aaSAndroid Build Coastguard Worker class GrProgramInfo; 28*c8dee2aaSAndroid Build Coastguard Worker class GrRecordingContext; 29*c8dee2aaSAndroid Build Coastguard Worker class GrSurfaceProxyView; 30*c8dee2aaSAndroid Build Coastguard Worker class SkArenaAlloc; 31*c8dee2aaSAndroid Build Coastguard Worker enum class GrAAType : unsigned int; 32*c8dee2aaSAndroid Build Coastguard Worker enum class GrClampType; 33*c8dee2aaSAndroid Build Coastguard Worker enum class GrLoadOp; 34*c8dee2aaSAndroid Build Coastguard Worker enum class GrPrimitiveType : uint8_t; 35*c8dee2aaSAndroid Build Coastguard Worker enum class GrProcessorAnalysisCoverage; 36*c8dee2aaSAndroid Build Coastguard Worker enum class GrXferBarrierFlags; 37*c8dee2aaSAndroid Build Coastguard Worker struct GrUserStencilSettings; 38*c8dee2aaSAndroid Build Coastguard Worker struct SkRect; 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker /** 41*c8dee2aaSAndroid Build Coastguard Worker * This class extends GrSimpleMeshDrawOpHelper to support an optional GrUserStencilSettings. This 42*c8dee2aaSAndroid Build Coastguard Worker * uses private inheritance because it non-virtually overrides methods in the base class and should 43*c8dee2aaSAndroid Build Coastguard Worker * never be used with a GrSimpleMeshDrawOpHelper pointer or reference. 44*c8dee2aaSAndroid Build Coastguard Worker */ 45*c8dee2aaSAndroid Build Coastguard Worker class GrSimpleMeshDrawOpHelperWithStencil : private GrSimpleMeshDrawOpHelper { 46*c8dee2aaSAndroid Build Coastguard Worker public: 47*c8dee2aaSAndroid Build Coastguard Worker using InputFlags = GrSimpleMeshDrawOpHelper::InputFlags; 48*c8dee2aaSAndroid Build Coastguard Worker 49*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::visitProxies; 50*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::createPipeline; 51*c8dee2aaSAndroid Build Coastguard Worker 52*c8dee2aaSAndroid Build Coastguard Worker GrProgramInfo* createProgramInfoWithStencil(const GrCaps*, 53*c8dee2aaSAndroid Build Coastguard Worker SkArenaAlloc*, 54*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView& writeView, 55*c8dee2aaSAndroid Build Coastguard Worker bool usesMSAASurface, 56*c8dee2aaSAndroid Build Coastguard Worker GrAppliedClip&&, 57*c8dee2aaSAndroid Build Coastguard Worker const GrDstProxyView&, 58*c8dee2aaSAndroid Build Coastguard Worker GrGeometryProcessor*, 59*c8dee2aaSAndroid Build Coastguard Worker GrPrimitiveType, 60*c8dee2aaSAndroid Build Coastguard Worker GrXferBarrierFlags renderPassXferBarriers, 61*c8dee2aaSAndroid Build Coastguard Worker GrLoadOp colorLoadOp); 62*c8dee2aaSAndroid Build Coastguard Worker 63*c8dee2aaSAndroid Build Coastguard Worker // using declarations can't be templated, so this is a pass through function instead. 64*c8dee2aaSAndroid Build Coastguard Worker template <typename Op, typename... OpArgs> FactoryHelper(GrRecordingContext * context,GrPaint && paint,OpArgs...opArgs)65*c8dee2aaSAndroid Build Coastguard Worker static GrOp::Owner FactoryHelper(GrRecordingContext* context, GrPaint&& paint, 66*c8dee2aaSAndroid Build Coastguard Worker OpArgs... opArgs) { 67*c8dee2aaSAndroid Build Coastguard Worker return GrSimpleMeshDrawOpHelper::FactoryHelper<Op, OpArgs...>( 68*c8dee2aaSAndroid Build Coastguard Worker context, std::move(paint), std::forward<OpArgs>(opArgs)...); 69*c8dee2aaSAndroid Build Coastguard Worker } 70*c8dee2aaSAndroid Build Coastguard Worker 71*c8dee2aaSAndroid Build Coastguard Worker GrSimpleMeshDrawOpHelperWithStencil(GrProcessorSet*, GrAAType, const GrUserStencilSettings*, 72*c8dee2aaSAndroid Build Coastguard Worker InputFlags = InputFlags::kNone); 73*c8dee2aaSAndroid Build Coastguard Worker 74*c8dee2aaSAndroid Build Coastguard Worker GrDrawOp::FixedFunctionFlags fixedFunctionFlags() const; 75*c8dee2aaSAndroid Build Coastguard Worker finalizeProcessors(const GrCaps & caps,const GrAppliedClip * clip,GrClampType clampType,GrProcessorAnalysisCoverage geometryCoverage,GrProcessorAnalysisColor * geometryColor)76*c8dee2aaSAndroid Build Coastguard Worker GrProcessorSet::Analysis finalizeProcessors(const GrCaps& caps, const GrAppliedClip* clip, 77*c8dee2aaSAndroid Build Coastguard Worker GrClampType clampType, 78*c8dee2aaSAndroid Build Coastguard Worker GrProcessorAnalysisCoverage geometryCoverage, 79*c8dee2aaSAndroid Build Coastguard Worker GrProcessorAnalysisColor* geometryColor) { 80*c8dee2aaSAndroid Build Coastguard Worker return this->INHERITED::finalizeProcessors(caps, clip, fStencilSettings, clampType, 81*c8dee2aaSAndroid Build Coastguard Worker geometryCoverage, geometryColor); 82*c8dee2aaSAndroid Build Coastguard Worker } 83*c8dee2aaSAndroid Build Coastguard Worker 84*c8dee2aaSAndroid Build Coastguard Worker GrProcessorSet::Analysis finalizeProcessors(const GrCaps&, const GrAppliedClip*, GrClampType, 85*c8dee2aaSAndroid Build Coastguard Worker GrProcessorAnalysisCoverage geometryCoverage, 86*c8dee2aaSAndroid Build Coastguard Worker SkPMColor4f* geometryColor, bool* wideColor); 87*c8dee2aaSAndroid Build Coastguard Worker 88*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::aaType; 89*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::setAAType; 90*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::isTrivial; 91*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::usesLocalCoords; 92*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::compatibleWithCoverageAsAlpha; 93*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::detachProcessorSet; 94*c8dee2aaSAndroid Build Coastguard Worker using GrSimpleMeshDrawOpHelper::pipelineFlags; 95*c8dee2aaSAndroid Build Coastguard Worker 96*c8dee2aaSAndroid Build Coastguard Worker bool isCompatible(const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps&, 97*c8dee2aaSAndroid Build Coastguard Worker const SkRect& thisBounds, const SkRect& thatBounds, 98*c8dee2aaSAndroid Build Coastguard Worker bool ignoreAAType = false) const; 99*c8dee2aaSAndroid Build Coastguard Worker 100*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS) 101*c8dee2aaSAndroid Build Coastguard Worker SkString dumpInfo() const; 102*c8dee2aaSAndroid Build Coastguard Worker #endif 103*c8dee2aaSAndroid Build Coastguard Worker stencilSettings()104*c8dee2aaSAndroid Build Coastguard Worker const GrUserStencilSettings* stencilSettings() const { return fStencilSettings; } 105*c8dee2aaSAndroid Build Coastguard Worker 106*c8dee2aaSAndroid Build Coastguard Worker private: 107*c8dee2aaSAndroid Build Coastguard Worker const GrUserStencilSettings* fStencilSettings; 108*c8dee2aaSAndroid Build Coastguard Worker using INHERITED = GrSimpleMeshDrawOpHelper; 109*c8dee2aaSAndroid Build Coastguard Worker }; 110*c8dee2aaSAndroid Build Coastguard Worker 111*c8dee2aaSAndroid Build Coastguard Worker #endif 112