| /* | |
| * 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 |