Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(150)

Side by Side Diff: src/gpu/glsl/GrGLSLPrimitiveProcessor.h

Issue 2351753002: Revert of Stop flattening GrCoordTransforms in parent GrFragmentProcessors. (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/glsl/GrGLSLGeometryProcessor.cpp ('k') | src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #ifndef GrGLSLPrimitiveProcessor_DEFINED 8 #ifndef GrGLSLPrimitiveProcessor_DEFINED
9 #define GrGLSLPrimitiveProcessor_DEFINED 9 #define GrGLSLPrimitiveProcessor_DEFINED
10 10
11 #include "GrFragmentProcessor.h"
12 #include "GrPrimitiveProcessor.h" 11 #include "GrPrimitiveProcessor.h"
13 #include "glsl/GrGLSLProgramDataManager.h" 12 #include "glsl/GrGLSLProgramDataManager.h"
14 #include "glsl/GrGLSLSampler.h" 13 #include "glsl/GrGLSLSampler.h"
15 14
16 class GrBatchTracker; 15 class GrBatchTracker;
17 class GrPrimitiveProcessor; 16 class GrPrimitiveProcessor;
18 class GrGLSLCaps; 17 class GrGLSLCaps;
19 class GrGLSLPPFragmentBuilder; 18 class GrGLSLPPFragmentBuilder;
20 class GrGLSLGPBuilder; 19 class GrGLSLGPBuilder;
21 class GrGLSLUniformHandler; 20 class GrGLSLUniformHandler;
22 class GrGLSLVaryingHandler; 21 class GrGLSLVaryingHandler;
23 class GrGLSLVertexBuilder; 22 class GrGLSLVertexBuilder;
24 23
25 class GrGLSLPrimitiveProcessor { 24 class GrGLSLPrimitiveProcessor {
26 public: 25 public:
27 using FPCoordTransformIter = GrFragmentProcessor::CoordTransformIter;
28
29 virtual ~GrGLSLPrimitiveProcessor() {} 26 virtual ~GrGLSLPrimitiveProcessor() {}
30 27
31 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; 28 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle;
32 typedef GrGLSLProgramDataManager::UniformHandle SamplerHandle; 29 typedef GrGLSLProgramDataManager::UniformHandle SamplerHandle;
33 30
34 /** 31 typedef SkSTArray<2, const GrCoordTransform*, true> ProcCoords;
35 * This class provides access to the GrCoordTransforms across all GrFragment Processors in a 32 typedef SkSTArray<8, ProcCoords> TransformsIn;
36 * GrPipeline. It is also used by the primitive processor to specify the fra gment shader 33 typedef SkSTArray<8, SkTArray<GrShaderVar>> TransformsOut;
37 * variable that will hold the transformed coords for each GrCoordTransform. It is required that
38 * the primitive processor iterate over each coord transform and insert a sh ader var result for
39 * each. The GrGLSLFragmentProcessors will reference these variables in thei r fragment code.
40 */
41 class FPCoordTransformHandler : public SkNoncopyable {
42 public:
43 FPCoordTransformHandler(const GrPipeline& pipeline,
44 SkTArray<GrShaderVar>* transformedCoordVars)
45 : fIter(pipeline)
46 , fTransformedCoordVars(transformedCoordVars) {}
47
48 ~FPCoordTransformHandler() { SkASSERT(!this->nextCoordTransform());}
49
50 const GrCoordTransform* nextCoordTransform();
51
52 // 'args' are constructor params to GrShaderVar.
53 template<typename... Args>
54 void specifyCoordsForCurrCoordTransform(Args&&... args) {
55 SkASSERT(!fAddedCoord);
56 fTransformedCoordVars->emplace_back(std::forward<Args>(args)...);
57 SkDEBUGCODE(fAddedCoord = true;)
58 }
59
60 private:
61 GrFragmentProcessor::CoordTransformIter fIter;
62 SkDEBUGCODE(bool fAddedCoord = false;)
63 SkDEBUGCODE(const GrCoordTransform* fCurr = nullptr;)
64 SkTArray<GrShaderVar>* fTransformedCoordVars;
65 };
66 34
67 struct EmitArgs { 35 struct EmitArgs {
68 EmitArgs(GrGLSLVertexBuilder* vertBuilder, 36 EmitArgs(GrGLSLVertexBuilder* vertBuilder,
69 GrGLSLPPFragmentBuilder* fragBuilder, 37 GrGLSLPPFragmentBuilder* fragBuilder,
70 GrGLSLVaryingHandler* varyingHandler, 38 GrGLSLVaryingHandler* varyingHandler,
71 GrGLSLUniformHandler* uniformHandler, 39 GrGLSLUniformHandler* uniformHandler,
72 const GrGLSLCaps* caps, 40 const GrGLSLCaps* caps,
73 const GrPrimitiveProcessor& gp, 41 const GrPrimitiveProcessor& gp,
74 const char* outputColor, 42 const char* outputColor,
75 const char* outputCoverage, 43 const char* outputCoverage,
76 const char* distanceVectorName, 44 const char* distanceVectorName,
77 const SamplerHandle* texSamplers, 45 const SamplerHandle* texSamplers,
78 const SamplerHandle* bufferSamplers, 46 const SamplerHandle* bufferSamplers,
79 FPCoordTransformHandler* transformHandler) 47 const TransformsIn& transformsIn,
48 TransformsOut* transformsOut)
80 : fVertBuilder(vertBuilder) 49 : fVertBuilder(vertBuilder)
81 , fFragBuilder(fragBuilder) 50 , fFragBuilder(fragBuilder)
82 , fVaryingHandler(varyingHandler) 51 , fVaryingHandler(varyingHandler)
83 , fUniformHandler(uniformHandler) 52 , fUniformHandler(uniformHandler)
84 , fGLSLCaps(caps) 53 , fGLSLCaps(caps)
85 , fGP(gp) 54 , fGP(gp)
86 , fOutputColor(outputColor) 55 , fOutputColor(outputColor)
87 , fOutputCoverage(outputCoverage) 56 , fOutputCoverage(outputCoverage)
88 , fDistanceVectorName(distanceVectorName) 57 , fDistanceVectorName(distanceVectorName)
89 , fTexSamplers(texSamplers) 58 , fTexSamplers(texSamplers)
90 , fBufferSamplers(bufferSamplers) 59 , fBufferSamplers(bufferSamplers)
91 , fFPCoordTransformHandler(transformHandler) {} 60 , fTransformsIn(transformsIn)
61 , fTransformsOut(transformsOut) {}
92 GrGLSLVertexBuilder* fVertBuilder; 62 GrGLSLVertexBuilder* fVertBuilder;
93 GrGLSLPPFragmentBuilder* fFragBuilder; 63 GrGLSLPPFragmentBuilder* fFragBuilder;
94 GrGLSLVaryingHandler* fVaryingHandler; 64 GrGLSLVaryingHandler* fVaryingHandler;
95 GrGLSLUniformHandler* fUniformHandler; 65 GrGLSLUniformHandler* fUniformHandler;
96 const GrGLSLCaps* fGLSLCaps; 66 const GrGLSLCaps* fGLSLCaps;
97 const GrPrimitiveProcessor& fGP; 67 const GrPrimitiveProcessor& fGP;
98 const char* fOutputColor; 68 const char* fOutputColor;
99 const char* fOutputCoverage; 69 const char* fOutputCoverage;
100 const char* fDistanceVectorName; 70 const char* fDistanceVectorName;
101 const SamplerHandle* fTexSamplers; 71 const SamplerHandle* fTexSamplers;
102 const SamplerHandle* fBufferSamplers; 72 const SamplerHandle* fBufferSamplers;
103 FPCoordTransformHandler* fFPCoordTransformHandler; 73 const TransformsIn& fTransformsIn;
74 TransformsOut* fTransformsOut;
104 }; 75 };
105 76
106 /** 77 /**
107 * This is similar to emitCode() in the base class, except it takes a full s hader builder. 78 * This is similar to emitCode() in the base class, except it takes a full s hader builder.
108 * This allows the effect subclass to emit vertex code. 79 * This allows the effect subclass to emit vertex code.
109 */ 80 */
110 virtual void emitCode(EmitArgs&) = 0; 81 virtual void emitCode(EmitArgs&) = 0;
111 82
112 /** 83 /** A GrGLSLPrimitiveProcessor instance can be reused with any GrGLSLPrimiti veProcessor that
113 * A GrGLSLPrimitiveProcessor instance can be reused with any GrGLSLPrimitiv eProcessor that 84 produces the same stage key; this function reads data from a GrGLSLPrimi tiveProcessor and
114 * produces the same stage key; this function reads data from a GrGLSLPrimit iveProcessor and 85 uploads any uniform variables required by the shaders created in emitCo de(). The
115 * uploads any uniform variables required by the shaders created in emitCod e(). The 86 GrPrimitiveProcessor parameter is guaranteed to be of the same type that created this
116 * GrPrimitiveProcessor parameter is guaranteed to be of the same type and t o have an 87 GrGLSLPrimitiveProcessor and to have an identical processor key as the o ne that created this
117 * identical processor key as the GrPrimitiveProcessor that created this 88 GrGLSLPrimitiveProcessor. */
118 * GrGLSLPrimitiveProcessor. 89 virtual void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProce ssor&) = 0;
119 * The subclass may use the transform iterator to perform any setup required for the particular
120 * set of fp transform matrices, such as uploading via uniforms. The iterato r will iterate over
121 * the transforms in the same order as the TransformHandler passed to emitCo de.
122 */
123 virtual void setData(const GrGLSLProgramDataManager&, const GrPrimitiveProce ssor&,
124 FPCoordTransformIter&&) = 0;
125 90
126 static SkMatrix GetTransformMatrix(const SkMatrix& localMatrix, const GrCoor dTransform&); 91 static SkMatrix GetTransformMatrix(const SkMatrix& localMatrix, const GrCoor dTransform&);
127 92
93 virtual void setTransformData(const GrPrimitiveProcessor&,
94 const GrGLSLProgramDataManager& pdman,
95 int index,
96 const SkTArray<const GrCoordTransform*, true>& transforms) = 0;
97
128 protected: 98 protected:
129 void setupUniformColor(GrGLSLPPFragmentBuilder* fragBuilder, 99 void setupUniformColor(GrGLSLPPFragmentBuilder* fragBuilder,
130 GrGLSLUniformHandler* uniformHandler, 100 GrGLSLUniformHandler* uniformHandler,
131 const char* outputName, 101 const char* outputName,
132 UniformHandle* colorUniform); 102 UniformHandle* colorUniform);
133 }; 103 };
134 104
135 #endif 105 #endif
OLDNEW
« no previous file with comments | « src/gpu/glsl/GrGLSLGeometryProcessor.cpp ('k') | src/gpu/glsl/GrGLSLPrimitiveProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698