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

Side by Side Diff: src/gpu/gl/builders/GrGLProgramBuilder.h

Issue 761563002: First step to moving vertex attributes to the geometryProcessor (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: adding test to ignore Created 6 years 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/gl/GrGpuGL_program.cpp ('k') | src/gpu/gl/builders/GrGLProgramBuilder.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 2014 Google Inc. 2 * Copyright 2014 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 GrGLProgramBuilder_DEFINED 8 #ifndef GrGLProgramBuilder_DEFINED
9 #define GrGLProgramBuilder_DEFINED 9 #define GrGLProgramBuilder_DEFINED
10 10
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 }; 119 };
120 120
121 struct GrGLGeoToFrag : public GrGLVarying { 121 struct GrGLGeoToFrag : public GrGLVarying {
122 GrGLGeoToFrag(GrSLType type) 122 GrGLGeoToFrag(GrSLType type)
123 : GrGLVarying(type, kGeoToFrag_Varying) {} 123 : GrGLVarying(type, kGeoToFrag_Varying) {}
124 }; 124 };
125 125
126 /* a specialization of the above for GPs. Lets the user add uniforms, varyings, and VS / FS code */ 126 /* a specialization of the above for GPs. Lets the user add uniforms, varyings, and VS / FS code */
127 class GrGLGPBuilder : public virtual GrGLUniformBuilder { 127 class GrGLGPBuilder : public virtual GrGLUniformBuilder {
128 public: 128 public:
129 /*
130 * addVarying allows fine grained control for setting up varyings between st ages. If you just
131 * need to take an attribute and pass it through to an output value in a fra gment shader, use
132 * addPassThroughAttribute.
133 * TODO convert most uses of addVarying to addPassThroughAttribute
134 */
129 virtual void addVarying(const char* name, 135 virtual void addVarying(const char* name,
130 GrGLVarying*, 136 GrGLVarying*,
131 GrGLShaderVar::Precision fsPrecision=GrGLShaderVar:: kDefault_Precision) = 0; 137 GrGLShaderVar::Precision fsPrecision=GrGLShaderVar:: kDefault_Precision) = 0;
132 138
139 /*
140 * This call can be used by GP to pass an attribute through all shaders dire ctly to 'output' in
141 * the fragment shader. Though this call effects both the vertex shader and fragment shader,
142 * it expects 'output' to be defined in the fragment shader before this call is made.
143 * TODO it might be nicer behavior to have a flag to declare output inside t his call
144 */
145 virtual void addPassThroughAttribute(const GrGeometryProcessor::GrAttribute* ,
146 const char* output) = 0;
147
133 // TODO rename getFragmentBuilder 148 // TODO rename getFragmentBuilder
134 virtual GrGLGPFragmentBuilder* getFragmentShaderBuilder() = 0; 149 virtual GrGLGPFragmentBuilder* getFragmentShaderBuilder() = 0;
135 virtual GrGLVertexBuilder* getVertexShaderBuilder() = 0; 150 virtual GrGLVertexBuilder* getVertexShaderBuilder() = 0;
136 151
137 /* 152 /*
138 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE 153 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE
139 */ 154 */
140 }; 155 };
141 156
142 /* a specializations for FPs. Lets the user add uniforms and FS code */ 157 /* a specializations for FPs. Lets the user add uniforms and FS code */
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
198 virtual GrGpuGL* gpu() const SK_OVERRIDE { return fGpu; } 213 virtual GrGpuGL* gpu() const SK_OVERRIDE { return fGpu; }
199 214
200 virtual GrGLFPFragmentBuilder* getFragmentShaderBuilder() SK_OVERRIDE { retu rn &fFS; } 215 virtual GrGLFPFragmentBuilder* getFragmentShaderBuilder() SK_OVERRIDE { retu rn &fFS; }
201 virtual GrGLVertexBuilder* getVertexShaderBuilder() SK_OVERRIDE { return &fV S; } 216 virtual GrGLVertexBuilder* getVertexShaderBuilder() SK_OVERRIDE { return &fV S; }
202 217
203 virtual void addVarying( 218 virtual void addVarying(
204 const char* name, 219 const char* name,
205 GrGLVarying*, 220 GrGLVarying*,
206 GrGLShaderVar::Precision fsPrecision=GrGLShaderVar::kDefault_Precisi on) SK_OVERRIDE; 221 GrGLShaderVar::Precision fsPrecision=GrGLShaderVar::kDefault_Precisi on) SK_OVERRIDE;
207 222
223 virtual void addPassThroughAttribute(const GrGeometryProcessor::GrAttribute* ,
224 const char* output) SK_OVERRIDE;
225
226
208 // Handles for program uniforms (other than per-effect uniforms) 227 // Handles for program uniforms (other than per-effect uniforms)
209 struct BuiltinUniformHandles { 228 struct BuiltinUniformHandles {
210 UniformHandle fViewMatrixUni; 229 UniformHandle fViewMatrixUni;
211 UniformHandle fRTAdjustmentUni; 230 UniformHandle fRTAdjustmentUni;
212 UniformHandle fColorUni; 231 UniformHandle fColorUni;
213 UniformHandle fCoverageUni; 232 UniformHandle fCoverageUni;
214 233
215 // We use the render target height to provide a y-down frag coord when s pecifying 234 // We use the render target height to provide a y-down frag coord when s pecifying
216 // origin_upper_left is not supported. 235 // origin_upper_left is not supported.
217 UniformHandle fRTHeightUni; 236 UniformHandle fRTHeightUni;
(...skipping 17 matching lines...) Expand all
235 254
236 const GrOptDrawState& optState() const { return fOptState; } 255 const GrOptDrawState& optState() const { return fOptState; }
237 const GrProgramDesc& desc() const { return fDesc; } 256 const GrProgramDesc& desc() const { return fDesc; }
238 const GrProgramDesc::KeyHeader& header() const { return fDesc.header(); } 257 const GrProgramDesc::KeyHeader& header() const { return fDesc.header(); }
239 258
240 // Generates a name for a variable. The generated string will be name prefix ed by the prefix 259 // Generates a name for a variable. The generated string will be name prefix ed by the prefix
241 // char (unless the prefix is '\0'). It also mangles the name to be stage-sp ecific if we're 260 // char (unless the prefix is '\0'). It also mangles the name to be stage-sp ecific if we're
242 // generating stage code. 261 // generating stage code.
243 void nameVariable(SkString* out, char prefix, const char* name); 262 void nameVariable(SkString* out, char prefix, const char* name);
244 void setupUniformColorAndCoverageIfNeeded(GrGLSLExpr4* inputColor, GrGLSLExp r1* inputCoverage); 263 void setupUniformColorAndCoverageIfNeeded(GrGLSLExpr4* inputColor, GrGLSLExp r1* inputCoverage);
264 // Generates a possibly mangled name for a stage variable and writes it to t he fragment shader.
265 // If GrGLSLExpr4 has a valid name then it will use that instead
266 void nameExpression(GrGLSLExpr4*, const char* baseName);
245 void emitAndInstallProcs(GrGLSLExpr4* inputColor, 267 void emitAndInstallProcs(GrGLSLExpr4* inputColor,
246 GrGLSLExpr4* inputCoverage); 268 GrGLSLExpr4* inputCoverage);
247 void emitAndInstallFragProcs(int procOffset, int numProcs, GrGLSLExpr4* inOu t); 269 void emitAndInstallFragProcs(int procOffset, int numProcs, GrGLSLExpr4* inOu t);
248 template <class Proc> 270 void emitAndInstallProc(const GrPendingFragmentStage&,
249 void emitAndInstallProc(const Proc&,
250 int index, 271 int index,
251 const GrGLSLExpr4& input, 272 const GrGLSLExpr4& input,
252 GrGLSLExpr4* output); 273 GrGLSLExpr4* output);
253 274
275 void emitAndInstallProc(const GrGeometryProcessor&,
276 GrGLSLExpr4* outputColor,
277 GrGLSLExpr4* outputCoverage);
278
254 // these emit functions help to keep the createAndEmitProcessors template ge neral 279 // these emit functions help to keep the createAndEmitProcessors template ge neral
255 void emitAndInstallProc(const GrPendingFragmentStage&, 280 void emitAndInstallProc(const GrPendingFragmentStage&,
256 const char* outColor, 281 const char* outColor,
257 const char* inColor); 282 const char* inColor);
258 void emitAndInstallProc(const GrGeometryProcessor&, 283 void emitAndInstallProc(const GrGeometryProcessor&,
259 const char* outCoverage, 284 const char* outColor,
260 const char* inCoverage); 285 const char* outCoverage);
286
261 void verify(const GrGeometryProcessor&); 287 void verify(const GrGeometryProcessor&);
262 void verify(const GrFragmentProcessor&); 288 void verify(const GrFragmentProcessor&);
263 void emitSamplers(const GrProcessor&, 289 void emitSamplers(const GrProcessor&,
264 GrGLProcessor::TextureSamplerArray* outSamplers, 290 GrGLProcessor::TextureSamplerArray* outSamplers,
265 GrGLInstalledProc*); 291 GrGLInstalledProc*);
266 292
267 // each specific program builder has a distinct transform and must override this function 293 // each specific program builder has a distinct transform and must override this function
268 virtual void emitTransforms(const GrPendingFragmentStage&, 294 virtual void emitTransforms(const GrPendingFragmentStage&,
269 GrGLProcessor::TransformedCoordsArray* outCoords , 295 GrGLProcessor::TransformedCoordsArray* outCoords ,
270 GrGLInstalledFragProc*); 296 GrGLInstalledFragProc*);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 int fTextureUnit; 391 int fTextureUnit;
366 }; 392 };
367 SkSTArray<4, Sampler, true> fSamplers; 393 SkSTArray<4, Sampler, true> fSamplers;
368 }; 394 };
369 395
370 struct GrGLInstalledGeoProc : public GrGLInstalledProc { 396 struct GrGLInstalledGeoProc : public GrGLInstalledProc {
371 SkAutoTDelete<GrGLGeometryProcessor> fGLProc; 397 SkAutoTDelete<GrGLGeometryProcessor> fGLProc;
372 }; 398 };
373 399
374 struct GrGLInstalledFragProc : public GrGLInstalledProc { 400 struct GrGLInstalledFragProc : public GrGLInstalledProc {
375 GrGLInstalledFragProc(bool useLocalCoords) : fGLProc(NULL), fLocalCoordAttri b(useLocalCoords) {} 401 GrGLInstalledFragProc() : fGLProc(NULL) {}
376 class ShaderVarHandle { 402 class ShaderVarHandle {
377 public: 403 public:
378 bool isValid() const { return fHandle > -1; } 404 bool isValid() const { return fHandle > -1; }
379 ShaderVarHandle() : fHandle(-1) {} 405 ShaderVarHandle() : fHandle(-1) {}
380 ShaderVarHandle(int value) : fHandle(value) { SkASSERT(this->isValid()); } 406 ShaderVarHandle(int value) : fHandle(value) { SkASSERT(this->isValid()); }
381 int handle() const { SkASSERT(this->isValid()); return fHandle; } 407 int handle() const { SkASSERT(this->isValid()); return fHandle; }
382 UniformHandle convertToUniformHandle() { 408 UniformHandle convertToUniformHandle() {
383 SkASSERT(this->isValid()); 409 SkASSERT(this->isValid());
384 return GrGLProgramDataManager::UniformHandle::CreateFromUniformIndex (fHandle); 410 return GrGLProgramDataManager::UniformHandle::CreateFromUniformIndex (fHandle);
385 } 411 }
386 412
387 private: 413 private:
388 int fHandle; 414 int fHandle;
389 }; 415 };
390 416
391 struct Transform { 417 struct Transform {
392 Transform() : fType(kVoid_GrSLType) { fCurrentValue = SkMatrix::InvalidM atrix(); } 418 Transform() : fType(kVoid_GrSLType) { fCurrentValue = SkMatrix::InvalidM atrix(); }
393 ShaderVarHandle fHandle; 419 ShaderVarHandle fHandle;
394 SkMatrix fCurrentValue; 420 SkMatrix fCurrentValue;
395 GrSLType fType; 421 GrSLType fType;
396 }; 422 };
397 423
398 SkAutoTDelete<GrGLFragmentProcessor> fGLProc; 424 SkAutoTDelete<GrGLFragmentProcessor> fGLProc;
399 SkSTArray<2, Transform, true> fTransforms; 425 SkSTArray<2, Transform, true> fTransforms;
400 bool fLocalCoordAttrib;
401 }; 426 };
402 427
403 struct GrGLInstalledFragProcs : public SkRefCnt { 428 struct GrGLInstalledFragProcs : public SkRefCnt {
404 virtual ~GrGLInstalledFragProcs(); 429 virtual ~GrGLInstalledFragProcs();
405 SkSTArray<8, GrGLInstalledFragProc*, true> fProcs; 430 SkSTArray<8, GrGLInstalledFragProc*, true> fProcs;
406 }; 431 };
407 432
408 #endif 433 #endif
OLDNEW
« no previous file with comments | « src/gpu/gl/GrGpuGL_program.cpp ('k') | src/gpu/gl/builders/GrGLProgramBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698