blob: 0d3e8ed05ef5a125011af646c9493dae2c2b2cab [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#include "src/gpu/ops/GrSimpleMeshDrawOpHelperWithStencil.h"
9
Robert Phillips55f681f2020-02-28 08:58:15 -050010GrSimpleMeshDrawOpHelperWithStencil::GrSimpleMeshDrawOpHelperWithStencil(
Herb Derbyc76d4092020-10-07 16:46:15 -040011 GrProcessorSet* processorSet,
Robert Phillips360ec182020-03-26 13:29:50 -040012 GrAAType aaType,
13 const GrUserStencilSettings* stencilSettings,
14 InputFlags inputFlags)
Herb Derbyc76d4092020-10-07 16:46:15 -040015 : INHERITED(processorSet, aaType, inputFlags)
Robert Phillips55f681f2020-02-28 08:58:15 -050016 , fStencilSettings(stencilSettings ? stencilSettings : &GrUserStencilSettings::kUnused) {}
17
18GrDrawOp::FixedFunctionFlags GrSimpleMeshDrawOpHelperWithStencil::fixedFunctionFlags() const {
19 GrDrawOp::FixedFunctionFlags flags = INHERITED::fixedFunctionFlags();
20 if (fStencilSettings != &GrUserStencilSettings::kUnused) {
21 flags |= GrDrawOp::FixedFunctionFlags::kUsesStencil;
22 }
23 return flags;
24}
25
26GrProcessorSet::Analysis GrSimpleMeshDrawOpHelperWithStencil::finalizeProcessors(
27 const GrCaps& caps, const GrAppliedClip* clip, bool hasMixedSampledCoverage,
28 GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage,
29 SkPMColor4f* geometryColor, bool* wideColor) {
30 GrProcessorAnalysisColor color = *geometryColor;
31 auto result = this->finalizeProcessors(
32 caps, clip, hasMixedSampledCoverage, clampType, geometryCoverage, &color);
33 color.isConstant(geometryColor);
34 if (wideColor) {
35 *wideColor = !geometryColor->fitsInBytes();
36 }
37 return result;
38}
39
40bool GrSimpleMeshDrawOpHelperWithStencil::isCompatible(
41 const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps& caps,
42 const SkRect& thisBounds, const SkRect& thatBounds, bool ignoreAAType) const {
43 return INHERITED::isCompatible(that, caps, thisBounds, thatBounds, ignoreAAType) &&
44 fStencilSettings == that.fStencilSettings;
45}
46
Robert Phillips50d7d6f2020-03-04 11:12:24 -050047GrProgramInfo* GrSimpleMeshDrawOpHelperWithStencil::createProgramInfoWithStencil(
48 const GrCaps* caps,
49 SkArenaAlloc* arena,
Brian Salomon8afde5f2020-04-01 16:22:00 -040050 const GrSurfaceProxyView* writeViewSwizzle,
Robert Phillips50d7d6f2020-03-04 11:12:24 -050051 GrAppliedClip&& appliedClip,
52 const GrXferProcessor::DstProxyView& dstProxyView,
53 GrGeometryProcessor* gp,
Greg Danield358cbe2020-09-11 09:33:54 -040054 GrPrimitiveType primType,
55 GrXferBarrierFlags renderPassXferBarriers) {
Robert Phillips50d7d6f2020-03-04 11:12:24 -050056 return CreateProgramInfo(caps,
57 arena,
Brian Salomon8afde5f2020-04-01 16:22:00 -040058 writeViewSwizzle,
Robert Phillips50d7d6f2020-03-04 11:12:24 -050059 std::move(appliedClip),
60 dstProxyView,
61 gp,
62 this->detachProcessorSet(),
63 primType,
Greg Danield358cbe2020-09-11 09:33:54 -040064 renderPassXferBarriers,
Robert Phillips50d7d6f2020-03-04 11:12:24 -050065 this->pipelineFlags(),
66 this->stencilSettings());
67}
68
John Stiles8d9bf642020-08-12 15:07:45 -040069#if GR_TEST_UTILS
Robert Phillips55f681f2020-02-28 08:58:15 -050070SkString GrSimpleMeshDrawOpHelperWithStencil::dumpInfo() const {
71 SkString result = INHERITED::dumpInfo();
72 result.appendf("Stencil settings: %s\n", (fStencilSettings ? "yes" : "no"));
73 return result;
74}
75#endif