1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2017 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 #include "src/gpu/ganesh/ops/GrSimpleMeshDrawOpHelper.h"
8*c8dee2aaSAndroid Build Coastguard Worker
9*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkTo.h"
10*c8dee2aaSAndroid Build Coastguard Worker #include "src/base/SkArenaAlloc.h"
11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/Swizzle.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrAppliedClip.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrDstProxyView.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrOpFlushState.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrProcessorAnalysis.h"
16*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrProcessorSet.h"
17*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrProgramInfo.h"
18*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrSurfaceProxyView.h"
19*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/ops/GrMeshDrawOp.h"
20*c8dee2aaSAndroid Build Coastguard Worker
21*c8dee2aaSAndroid Build Coastguard Worker enum class GrXferBarrierFlags;
22*c8dee2aaSAndroid Build Coastguard Worker struct SkRect;
23*c8dee2aaSAndroid Build Coastguard Worker
GrSimpleMeshDrawOpHelper(GrProcessorSet * processorSet,GrAAType aaType,InputFlags inputFlags)24*c8dee2aaSAndroid Build Coastguard Worker GrSimpleMeshDrawOpHelper::GrSimpleMeshDrawOpHelper(GrProcessorSet* processorSet,
25*c8dee2aaSAndroid Build Coastguard Worker GrAAType aaType,
26*c8dee2aaSAndroid Build Coastguard Worker InputFlags inputFlags)
27*c8dee2aaSAndroid Build Coastguard Worker : fProcessors(processorSet)
28*c8dee2aaSAndroid Build Coastguard Worker , fPipelineFlags((GrPipeline::InputFlags)inputFlags)
29*c8dee2aaSAndroid Build Coastguard Worker , fAAType((int)aaType)
30*c8dee2aaSAndroid Build Coastguard Worker , fUsesLocalCoords(false)
31*c8dee2aaSAndroid Build Coastguard Worker , fCompatibleWithCoverageAsAlpha(false) {
32*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGCODE(fDidAnalysis = false);
33*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGCODE(fMadePipeline = false);
34*c8dee2aaSAndroid Build Coastguard Worker }
35*c8dee2aaSAndroid Build Coastguard Worker
~GrSimpleMeshDrawOpHelper()36*c8dee2aaSAndroid Build Coastguard Worker GrSimpleMeshDrawOpHelper::~GrSimpleMeshDrawOpHelper() {
37*c8dee2aaSAndroid Build Coastguard Worker if (fProcessors) {
38*c8dee2aaSAndroid Build Coastguard Worker fProcessors->~GrProcessorSet();
39*c8dee2aaSAndroid Build Coastguard Worker }
40*c8dee2aaSAndroid Build Coastguard Worker }
41*c8dee2aaSAndroid Build Coastguard Worker
fixedFunctionFlags() const42*c8dee2aaSAndroid Build Coastguard Worker GrDrawOp::FixedFunctionFlags GrSimpleMeshDrawOpHelper::fixedFunctionFlags() const {
43*c8dee2aaSAndroid Build Coastguard Worker return GrAATypeIsHW(this->aaType()) ? GrDrawOp::FixedFunctionFlags::kUsesHWAA
44*c8dee2aaSAndroid Build Coastguard Worker : GrDrawOp::FixedFunctionFlags::kNone;
45*c8dee2aaSAndroid Build Coastguard Worker }
46*c8dee2aaSAndroid Build Coastguard Worker
isCompatible(const GrSimpleMeshDrawOpHelper & that,const GrCaps & caps,const SkRect & thisBounds,const SkRect & thatBounds,bool ignoreAAType) const47*c8dee2aaSAndroid Build Coastguard Worker bool GrSimpleMeshDrawOpHelper::isCompatible(const GrSimpleMeshDrawOpHelper& that,
48*c8dee2aaSAndroid Build Coastguard Worker const GrCaps& caps, const SkRect& thisBounds,
49*c8dee2aaSAndroid Build Coastguard Worker const SkRect& thatBounds, bool ignoreAAType) const {
50*c8dee2aaSAndroid Build Coastguard Worker if (SkToBool(fProcessors) != SkToBool(that.fProcessors)) {
51*c8dee2aaSAndroid Build Coastguard Worker return false;
52*c8dee2aaSAndroid Build Coastguard Worker }
53*c8dee2aaSAndroid Build Coastguard Worker if (fProcessors) {
54*c8dee2aaSAndroid Build Coastguard Worker if (*fProcessors != *that.fProcessors) {
55*c8dee2aaSAndroid Build Coastguard Worker return false;
56*c8dee2aaSAndroid Build Coastguard Worker }
57*c8dee2aaSAndroid Build Coastguard Worker }
58*c8dee2aaSAndroid Build Coastguard Worker
59*c8dee2aaSAndroid Build Coastguard Worker #ifdef SK_DEBUG
60*c8dee2aaSAndroid Build Coastguard Worker if (ignoreAAType) {
61*c8dee2aaSAndroid Build Coastguard Worker // If we're ignoring AA it should be bc we already know they are the same or that
62*c8dee2aaSAndroid Build Coastguard Worker // the are different but are compatible (i.e., one is AA and the other is None)
63*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(fAAType == that.fAAType ||
64*c8dee2aaSAndroid Build Coastguard Worker GrMeshDrawOp::CanUpgradeAAOnMerge(this->aaType(), that.aaType()));
65*c8dee2aaSAndroid Build Coastguard Worker }
66*c8dee2aaSAndroid Build Coastguard Worker #endif
67*c8dee2aaSAndroid Build Coastguard Worker
68*c8dee2aaSAndroid Build Coastguard Worker bool result = fPipelineFlags == that.fPipelineFlags &&
69*c8dee2aaSAndroid Build Coastguard Worker (ignoreAAType || fAAType == that.fAAType);
70*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(!result || fCompatibleWithCoverageAsAlpha == that.fCompatibleWithCoverageAsAlpha);
71*c8dee2aaSAndroid Build Coastguard Worker SkASSERT(!result || fUsesLocalCoords == that.fUsesLocalCoords);
72*c8dee2aaSAndroid Build Coastguard Worker return result;
73*c8dee2aaSAndroid Build Coastguard Worker }
74*c8dee2aaSAndroid Build Coastguard Worker
finalizeProcessors(const GrCaps & caps,const GrAppliedClip * clip,GrClampType clampType,GrProcessorAnalysisCoverage geometryCoverage,SkPMColor4f * geometryColor,bool * wideColor)75*c8dee2aaSAndroid Build Coastguard Worker GrProcessorSet::Analysis GrSimpleMeshDrawOpHelper::finalizeProcessors(
76*c8dee2aaSAndroid Build Coastguard Worker const GrCaps& caps, const GrAppliedClip* clip, GrClampType clampType,
77*c8dee2aaSAndroid Build Coastguard Worker GrProcessorAnalysisCoverage geometryCoverage, SkPMColor4f* geometryColor, bool* wideColor) {
78*c8dee2aaSAndroid Build Coastguard Worker GrProcessorAnalysisColor color = *geometryColor;
79*c8dee2aaSAndroid Build Coastguard Worker auto result = this->finalizeProcessors(caps, clip, clampType, geometryCoverage, &color);
80*c8dee2aaSAndroid Build Coastguard Worker color.isConstant(geometryColor);
81*c8dee2aaSAndroid Build Coastguard Worker if (wideColor) {
82*c8dee2aaSAndroid Build Coastguard Worker *wideColor = !geometryColor->fitsInBytes();
83*c8dee2aaSAndroid Build Coastguard Worker }
84*c8dee2aaSAndroid Build Coastguard Worker return result;
85*c8dee2aaSAndroid Build Coastguard Worker }
86*c8dee2aaSAndroid Build Coastguard Worker
finalizeProcessors(const GrCaps & caps,const GrAppliedClip * clip,const GrUserStencilSettings * userStencil,GrClampType clampType,GrProcessorAnalysisCoverage geometryCoverage,GrProcessorAnalysisColor * geometryColor)87*c8dee2aaSAndroid Build Coastguard Worker GrProcessorSet::Analysis GrSimpleMeshDrawOpHelper::finalizeProcessors(
88*c8dee2aaSAndroid Build Coastguard Worker const GrCaps& caps, const GrAppliedClip* clip, const GrUserStencilSettings* userStencil,
89*c8dee2aaSAndroid Build Coastguard Worker GrClampType clampType, GrProcessorAnalysisCoverage geometryCoverage,
90*c8dee2aaSAndroid Build Coastguard Worker GrProcessorAnalysisColor* geometryColor) {
91*c8dee2aaSAndroid Build Coastguard Worker SkDEBUGCODE(fDidAnalysis = true);
92*c8dee2aaSAndroid Build Coastguard Worker GrProcessorSet::Analysis analysis;
93*c8dee2aaSAndroid Build Coastguard Worker if (fProcessors) {
94*c8dee2aaSAndroid Build Coastguard Worker GrProcessorAnalysisCoverage coverage = geometryCoverage;
95*c8dee2aaSAndroid Build Coastguard Worker if (GrProcessorAnalysisCoverage::kNone == coverage) {
96*c8dee2aaSAndroid Build Coastguard Worker coverage = (clip && clip->hasCoverageFragmentProcessor())
97*c8dee2aaSAndroid Build Coastguard Worker ? GrProcessorAnalysisCoverage::kSingleChannel
98*c8dee2aaSAndroid Build Coastguard Worker : GrProcessorAnalysisCoverage::kNone;
99*c8dee2aaSAndroid Build Coastguard Worker }
100*c8dee2aaSAndroid Build Coastguard Worker SkPMColor4f overrideColor;
101*c8dee2aaSAndroid Build Coastguard Worker analysis = fProcessors->finalize(*geometryColor, coverage, clip, userStencil, caps,
102*c8dee2aaSAndroid Build Coastguard Worker clampType, &overrideColor);
103*c8dee2aaSAndroid Build Coastguard Worker if (analysis.inputColorIsOverridden()) {
104*c8dee2aaSAndroid Build Coastguard Worker *geometryColor = overrideColor;
105*c8dee2aaSAndroid Build Coastguard Worker }
106*c8dee2aaSAndroid Build Coastguard Worker } else {
107*c8dee2aaSAndroid Build Coastguard Worker analysis = GrProcessorSet::EmptySetAnalysis();
108*c8dee2aaSAndroid Build Coastguard Worker }
109*c8dee2aaSAndroid Build Coastguard Worker fUsesLocalCoords = analysis.usesLocalCoords();
110*c8dee2aaSAndroid Build Coastguard Worker fCompatibleWithCoverageAsAlpha = analysis.isCompatibleWithCoverageAsAlpha();
111*c8dee2aaSAndroid Build Coastguard Worker return analysis;
112*c8dee2aaSAndroid Build Coastguard Worker }
113*c8dee2aaSAndroid Build Coastguard Worker
CreatePipeline(const GrCaps * caps,SkArenaAlloc * arena,skgpu::Swizzle writeViewSwizzle,GrAppliedClip && appliedClip,const GrDstProxyView & dstProxyView,GrProcessorSet && processorSet,GrPipeline::InputFlags pipelineFlags)114*c8dee2aaSAndroid Build Coastguard Worker const GrPipeline* GrSimpleMeshDrawOpHelper::CreatePipeline(const GrCaps* caps,
115*c8dee2aaSAndroid Build Coastguard Worker SkArenaAlloc* arena,
116*c8dee2aaSAndroid Build Coastguard Worker skgpu::Swizzle writeViewSwizzle,
117*c8dee2aaSAndroid Build Coastguard Worker GrAppliedClip&& appliedClip,
118*c8dee2aaSAndroid Build Coastguard Worker const GrDstProxyView& dstProxyView,
119*c8dee2aaSAndroid Build Coastguard Worker GrProcessorSet&& processorSet,
120*c8dee2aaSAndroid Build Coastguard Worker GrPipeline::InputFlags pipelineFlags) {
121*c8dee2aaSAndroid Build Coastguard Worker GrPipeline::InitArgs pipelineArgs;
122*c8dee2aaSAndroid Build Coastguard Worker
123*c8dee2aaSAndroid Build Coastguard Worker pipelineArgs.fInputFlags = pipelineFlags;
124*c8dee2aaSAndroid Build Coastguard Worker pipelineArgs.fCaps = caps;
125*c8dee2aaSAndroid Build Coastguard Worker pipelineArgs.fDstProxyView = dstProxyView;
126*c8dee2aaSAndroid Build Coastguard Worker pipelineArgs.fWriteSwizzle = writeViewSwizzle;
127*c8dee2aaSAndroid Build Coastguard Worker
128*c8dee2aaSAndroid Build Coastguard Worker return arena->make<GrPipeline>(pipelineArgs,
129*c8dee2aaSAndroid Build Coastguard Worker std::move(processorSet),
130*c8dee2aaSAndroid Build Coastguard Worker std::move(appliedClip));
131*c8dee2aaSAndroid Build Coastguard Worker }
132*c8dee2aaSAndroid Build Coastguard Worker
CreatePipeline(GrOpFlushState * flushState,GrProcessorSet && processorSet,GrPipeline::InputFlags pipelineFlags)133*c8dee2aaSAndroid Build Coastguard Worker const GrPipeline* GrSimpleMeshDrawOpHelper::CreatePipeline(GrOpFlushState* flushState,
134*c8dee2aaSAndroid Build Coastguard Worker GrProcessorSet&& processorSet,
135*c8dee2aaSAndroid Build Coastguard Worker GrPipeline::InputFlags pipelineFlags) {
136*c8dee2aaSAndroid Build Coastguard Worker return CreatePipeline(&flushState->caps(),
137*c8dee2aaSAndroid Build Coastguard Worker flushState->allocator(),
138*c8dee2aaSAndroid Build Coastguard Worker flushState->writeView().swizzle(),
139*c8dee2aaSAndroid Build Coastguard Worker flushState->detachAppliedClip(),
140*c8dee2aaSAndroid Build Coastguard Worker flushState->dstProxyView(),
141*c8dee2aaSAndroid Build Coastguard Worker std::move(processorSet),
142*c8dee2aaSAndroid Build Coastguard Worker pipelineFlags);
143*c8dee2aaSAndroid Build Coastguard Worker }
144*c8dee2aaSAndroid Build Coastguard Worker
createPipeline(GrOpFlushState * flushState)145*c8dee2aaSAndroid Build Coastguard Worker const GrPipeline* GrSimpleMeshDrawOpHelper::createPipeline(GrOpFlushState* flushState) {
146*c8dee2aaSAndroid Build Coastguard Worker return CreatePipeline(&flushState->caps(),
147*c8dee2aaSAndroid Build Coastguard Worker flushState->allocator(),
148*c8dee2aaSAndroid Build Coastguard Worker flushState->writeView().swizzle(),
149*c8dee2aaSAndroid Build Coastguard Worker flushState->detachAppliedClip(),
150*c8dee2aaSAndroid Build Coastguard Worker flushState->dstProxyView(),
151*c8dee2aaSAndroid Build Coastguard Worker this->detachProcessorSet(),
152*c8dee2aaSAndroid Build Coastguard Worker this->pipelineFlags());
153*c8dee2aaSAndroid Build Coastguard Worker }
154*c8dee2aaSAndroid Build Coastguard Worker
createPipeline(const GrCaps * caps,SkArenaAlloc * arena,skgpu::Swizzle writeViewSwizzle,GrAppliedClip && appliedClip,const GrDstProxyView & dstProxyView)155*c8dee2aaSAndroid Build Coastguard Worker const GrPipeline* GrSimpleMeshDrawOpHelper::createPipeline(const GrCaps* caps,
156*c8dee2aaSAndroid Build Coastguard Worker SkArenaAlloc* arena,
157*c8dee2aaSAndroid Build Coastguard Worker skgpu::Swizzle writeViewSwizzle,
158*c8dee2aaSAndroid Build Coastguard Worker GrAppliedClip&& appliedClip,
159*c8dee2aaSAndroid Build Coastguard Worker const GrDstProxyView& dstProxyView) {
160*c8dee2aaSAndroid Build Coastguard Worker return GrSimpleMeshDrawOpHelper::CreatePipeline(caps,
161*c8dee2aaSAndroid Build Coastguard Worker arena,
162*c8dee2aaSAndroid Build Coastguard Worker writeViewSwizzle,
163*c8dee2aaSAndroid Build Coastguard Worker std::move(appliedClip),
164*c8dee2aaSAndroid Build Coastguard Worker dstProxyView,
165*c8dee2aaSAndroid Build Coastguard Worker this->detachProcessorSet(),
166*c8dee2aaSAndroid Build Coastguard Worker this->pipelineFlags());
167*c8dee2aaSAndroid Build Coastguard Worker }
168*c8dee2aaSAndroid Build Coastguard Worker
CreateProgramInfo(const GrCaps * caps,SkArenaAlloc * arena,const GrSurfaceProxyView & writeView,bool usesMSAASurface,GrAppliedClip && appliedClip,const GrDstProxyView & dstProxyView,GrGeometryProcessor * geometryProcessor,GrProcessorSet && processorSet,GrPrimitiveType primitiveType,GrXferBarrierFlags renderPassXferBarriers,GrLoadOp colorLoadOp,GrPipeline::InputFlags pipelineFlags,const GrUserStencilSettings * stencilSettings)169*c8dee2aaSAndroid Build Coastguard Worker GrProgramInfo* GrSimpleMeshDrawOpHelper::CreateProgramInfo(
170*c8dee2aaSAndroid Build Coastguard Worker const GrCaps* caps,
171*c8dee2aaSAndroid Build Coastguard Worker SkArenaAlloc* arena,
172*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView& writeView,
173*c8dee2aaSAndroid Build Coastguard Worker bool usesMSAASurface,
174*c8dee2aaSAndroid Build Coastguard Worker GrAppliedClip&& appliedClip,
175*c8dee2aaSAndroid Build Coastguard Worker const GrDstProxyView& dstProxyView,
176*c8dee2aaSAndroid Build Coastguard Worker GrGeometryProcessor* geometryProcessor,
177*c8dee2aaSAndroid Build Coastguard Worker GrProcessorSet&& processorSet,
178*c8dee2aaSAndroid Build Coastguard Worker GrPrimitiveType primitiveType,
179*c8dee2aaSAndroid Build Coastguard Worker GrXferBarrierFlags renderPassXferBarriers,
180*c8dee2aaSAndroid Build Coastguard Worker GrLoadOp colorLoadOp,
181*c8dee2aaSAndroid Build Coastguard Worker GrPipeline::InputFlags pipelineFlags,
182*c8dee2aaSAndroid Build Coastguard Worker const GrUserStencilSettings* stencilSettings) {
183*c8dee2aaSAndroid Build Coastguard Worker auto pipeline = CreatePipeline(caps,
184*c8dee2aaSAndroid Build Coastguard Worker arena,
185*c8dee2aaSAndroid Build Coastguard Worker writeView.swizzle(),
186*c8dee2aaSAndroid Build Coastguard Worker std::move(appliedClip),
187*c8dee2aaSAndroid Build Coastguard Worker dstProxyView,
188*c8dee2aaSAndroid Build Coastguard Worker std::move(processorSet),
189*c8dee2aaSAndroid Build Coastguard Worker pipelineFlags);
190*c8dee2aaSAndroid Build Coastguard Worker
191*c8dee2aaSAndroid Build Coastguard Worker return CreateProgramInfo(caps, arena, pipeline, writeView, usesMSAASurface, geometryProcessor,
192*c8dee2aaSAndroid Build Coastguard Worker primitiveType, renderPassXferBarriers, colorLoadOp, stencilSettings);
193*c8dee2aaSAndroid Build Coastguard Worker }
194*c8dee2aaSAndroid Build Coastguard Worker
CreateProgramInfo(const GrCaps * caps,SkArenaAlloc * arena,const GrPipeline * pipeline,const GrSurfaceProxyView & writeView,bool usesMSAASurface,GrGeometryProcessor * geometryProcessor,GrPrimitiveType primitiveType,GrXferBarrierFlags xferBarrierFlags,GrLoadOp colorLoadOp,const GrUserStencilSettings * stencilSettings)195*c8dee2aaSAndroid Build Coastguard Worker GrProgramInfo* GrSimpleMeshDrawOpHelper::CreateProgramInfo(const GrCaps* caps,
196*c8dee2aaSAndroid Build Coastguard Worker SkArenaAlloc* arena,
197*c8dee2aaSAndroid Build Coastguard Worker const GrPipeline* pipeline,
198*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView& writeView,
199*c8dee2aaSAndroid Build Coastguard Worker bool usesMSAASurface,
200*c8dee2aaSAndroid Build Coastguard Worker GrGeometryProcessor* geometryProcessor,
201*c8dee2aaSAndroid Build Coastguard Worker GrPrimitiveType primitiveType,
202*c8dee2aaSAndroid Build Coastguard Worker GrXferBarrierFlags xferBarrierFlags,
203*c8dee2aaSAndroid Build Coastguard Worker GrLoadOp colorLoadOp,
204*c8dee2aaSAndroid Build Coastguard Worker const GrUserStencilSettings* stencilSettings) {
205*c8dee2aaSAndroid Build Coastguard Worker auto tmp = arena->make<GrProgramInfo>(*caps,
206*c8dee2aaSAndroid Build Coastguard Worker writeView,
207*c8dee2aaSAndroid Build Coastguard Worker usesMSAASurface,
208*c8dee2aaSAndroid Build Coastguard Worker pipeline,
209*c8dee2aaSAndroid Build Coastguard Worker stencilSettings,
210*c8dee2aaSAndroid Build Coastguard Worker geometryProcessor,
211*c8dee2aaSAndroid Build Coastguard Worker primitiveType,
212*c8dee2aaSAndroid Build Coastguard Worker xferBarrierFlags,
213*c8dee2aaSAndroid Build Coastguard Worker colorLoadOp);
214*c8dee2aaSAndroid Build Coastguard Worker return tmp;
215*c8dee2aaSAndroid Build Coastguard Worker }
216*c8dee2aaSAndroid Build Coastguard Worker
createProgramInfo(const GrCaps * caps,SkArenaAlloc * arena,const GrSurfaceProxyView & writeView,bool usesMSAASurface,GrAppliedClip && appliedClip,const GrDstProxyView & dstProxyView,GrGeometryProcessor * gp,GrPrimitiveType primType,GrXferBarrierFlags renderPassXferBarriers,GrLoadOp colorLoadOp)217*c8dee2aaSAndroid Build Coastguard Worker GrProgramInfo* GrSimpleMeshDrawOpHelper::createProgramInfo(
218*c8dee2aaSAndroid Build Coastguard Worker const GrCaps* caps,
219*c8dee2aaSAndroid Build Coastguard Worker SkArenaAlloc* arena,
220*c8dee2aaSAndroid Build Coastguard Worker const GrSurfaceProxyView& writeView,
221*c8dee2aaSAndroid Build Coastguard Worker bool usesMSAASurface,
222*c8dee2aaSAndroid Build Coastguard Worker GrAppliedClip&& appliedClip,
223*c8dee2aaSAndroid Build Coastguard Worker const GrDstProxyView& dstProxyView,
224*c8dee2aaSAndroid Build Coastguard Worker GrGeometryProcessor* gp,
225*c8dee2aaSAndroid Build Coastguard Worker GrPrimitiveType primType,
226*c8dee2aaSAndroid Build Coastguard Worker GrXferBarrierFlags renderPassXferBarriers,
227*c8dee2aaSAndroid Build Coastguard Worker GrLoadOp colorLoadOp) {
228*c8dee2aaSAndroid Build Coastguard Worker return CreateProgramInfo(caps,
229*c8dee2aaSAndroid Build Coastguard Worker arena,
230*c8dee2aaSAndroid Build Coastguard Worker writeView,
231*c8dee2aaSAndroid Build Coastguard Worker usesMSAASurface,
232*c8dee2aaSAndroid Build Coastguard Worker std::move(appliedClip),
233*c8dee2aaSAndroid Build Coastguard Worker dstProxyView,
234*c8dee2aaSAndroid Build Coastguard Worker gp,
235*c8dee2aaSAndroid Build Coastguard Worker this->detachProcessorSet(),
236*c8dee2aaSAndroid Build Coastguard Worker primType,
237*c8dee2aaSAndroid Build Coastguard Worker renderPassXferBarriers,
238*c8dee2aaSAndroid Build Coastguard Worker colorLoadOp,
239*c8dee2aaSAndroid Build Coastguard Worker this->pipelineFlags());
240*c8dee2aaSAndroid Build Coastguard Worker }
241*c8dee2aaSAndroid Build Coastguard Worker
242*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS)
dump_pipeline_flags(GrPipeline::InputFlags flags,SkString * result)243*c8dee2aaSAndroid Build Coastguard Worker static void dump_pipeline_flags(GrPipeline::InputFlags flags, SkString* result) {
244*c8dee2aaSAndroid Build Coastguard Worker if (GrPipeline::InputFlags::kNone != flags) {
245*c8dee2aaSAndroid Build Coastguard Worker if (flags & GrPipeline::InputFlags::kSnapVerticesToPixelCenters) {
246*c8dee2aaSAndroid Build Coastguard Worker result->append("Snap vertices to pixel center.\n");
247*c8dee2aaSAndroid Build Coastguard Worker }
248*c8dee2aaSAndroid Build Coastguard Worker if (flags & GrPipeline::InputFlags::kWireframe) {
249*c8dee2aaSAndroid Build Coastguard Worker result->append("Wireframe enabled.\n");
250*c8dee2aaSAndroid Build Coastguard Worker }
251*c8dee2aaSAndroid Build Coastguard Worker if (flags & GrPipeline::InputFlags::kConservativeRaster) {
252*c8dee2aaSAndroid Build Coastguard Worker result->append("Conservative raster enabled.\n");
253*c8dee2aaSAndroid Build Coastguard Worker }
254*c8dee2aaSAndroid Build Coastguard Worker return;
255*c8dee2aaSAndroid Build Coastguard Worker }
256*c8dee2aaSAndroid Build Coastguard Worker result->append("No pipeline flags\n");
257*c8dee2aaSAndroid Build Coastguard Worker }
258*c8dee2aaSAndroid Build Coastguard Worker
dumpInfo() const259*c8dee2aaSAndroid Build Coastguard Worker SkString GrSimpleMeshDrawOpHelper::dumpInfo() const {
260*c8dee2aaSAndroid Build Coastguard Worker const GrProcessorSet& processors = fProcessors ? *fProcessors : GrProcessorSet::EmptySet();
261*c8dee2aaSAndroid Build Coastguard Worker SkString result = processors.dumpProcessors();
262*c8dee2aaSAndroid Build Coastguard Worker result.append("AA Type: ");
263*c8dee2aaSAndroid Build Coastguard Worker switch (this->aaType()) {
264*c8dee2aaSAndroid Build Coastguard Worker case GrAAType::kNone:
265*c8dee2aaSAndroid Build Coastguard Worker result.append(" none\n");
266*c8dee2aaSAndroid Build Coastguard Worker break;
267*c8dee2aaSAndroid Build Coastguard Worker case GrAAType::kCoverage:
268*c8dee2aaSAndroid Build Coastguard Worker result.append(" coverage\n");
269*c8dee2aaSAndroid Build Coastguard Worker break;
270*c8dee2aaSAndroid Build Coastguard Worker case GrAAType::kMSAA:
271*c8dee2aaSAndroid Build Coastguard Worker result.append(" msaa\n");
272*c8dee2aaSAndroid Build Coastguard Worker break;
273*c8dee2aaSAndroid Build Coastguard Worker }
274*c8dee2aaSAndroid Build Coastguard Worker dump_pipeline_flags(fPipelineFlags, &result);
275*c8dee2aaSAndroid Build Coastguard Worker return result;
276*c8dee2aaSAndroid Build Coastguard Worker }
277*c8dee2aaSAndroid Build Coastguard Worker #endif
278