/* * Copyright 2020 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "src/gpu/ganesh/ops/GrSimpleMeshDrawOpHelperWithStencil.h" #include "src/gpu/ganesh/GrProcessorAnalysis.h" #include "src/gpu/ganesh/GrUserStencilSettings.h" GrSimpleMeshDrawOpHelperWithStencil::GrSimpleMeshDrawOpHelperWithStencil( GrProcessorSet* processorSet, GrAAType aaType, const GrUserStencilSettings* stencilSettings, InputFlags inputFlags) : INHERITED(processorSet, aaType, inputFlags) , fStencilSettings(stencilSettings ? stencilSettings : &GrUserStencilSettings::kUnused) {} GrDrawOp::FixedFunctionFlags GrSimpleMeshDrawOpHelperWithStencil::fixedFunctionFlags() const { GrDrawOp::FixedFunctionFlags flags = INHERITED::fixedFunctionFlags(); if (fStencilSettings != &GrUserStencilSettings::kUnused) { flags |= GrDrawOp::FixedFunctionFlags::kUsesStencil; } return flags; } GrProcessorSet::Analysis GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors( const GrCaps& caps, const GrAppliedClip* clip, GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage, SkPMColor4f* geometryColor, bool* wideColor) { GrProcessorAnalysisColor color = *geometryColor; auto result = this->finalizeProcessors(caps, clip, clampType, geometryCoverage, &color); color.isConstant(geometryColor); if (wideColor) { *wideColor = !geometryColor->fitsInBytes(); } return result; } bool GrSimpleMeshDrawOpHelperWithStencil::isCompatible( const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps& caps, const SkRect& thisBounds, const SkRect& thatBounds, bool ignoreAAType) const { return INHERITED::isCompatible(that, caps, thisBounds, thatBounds, ignoreAAType) && fStencilSettings == that.fStencilSettings; } GrProgramInfo* GrSimpleMeshDrawOpHelperWithStencil::createProgramInfoWithStencil( const GrCaps* caps, SkArenaAlloc* arena, const GrSurfaceProxyView& writeView, bool usesMSAASurface, GrAppliedClip&& appliedClip, const GrDstProxyView& dstProxyView, GrGeometryProcessor* gp, GrPrimitiveType primType, GrXferBarrierFlags renderPassXferBarriers, GrLoadOp colorLoadOp) { return CreateProgramInfo(caps, arena, writeView, usesMSAASurface, std::move(appliedClip), dstProxyView, gp, this->detachProcessorSet(), primType, renderPassXferBarriers, colorLoadOp, this->pipelineFlags(), this->stencilSettings()); } #if defined(GPU_TEST_UTILS) SkString GrSimpleMeshDrawOpHelperWithStencil::dumpInfo() const { SkString result = INHERITED::dumpInfo(); result.appendf("Stencil settings: %s\n", (fStencilSettings ? "yes" : "no")); return result; } #endif