| OLD | NEW |
| 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 |
| 11 #include "GrGLFragmentShaderBuilder.h" | 11 #include "GrGLFragmentShaderBuilder.h" |
| 12 #include "GrGLGeometryShaderBuilder.h" | 12 #include "GrGLGeometryShaderBuilder.h" |
| 13 #include "GrGLVertexShaderBuilder.h" | 13 #include "GrGLVertexShaderBuilder.h" |
| 14 #include "../GrGLProgramDataManager.h" | 14 #include "../GrGLProgramDataManager.h" |
| 15 #include "../GrGLPathProgramDataManager.h" |
| 15 #include "../GrGLUniformHandle.h" | 16 #include "../GrGLUniformHandle.h" |
| 16 #include "../GrGLPrimitiveProcessor.h" | 17 #include "../GrGLPrimitiveProcessor.h" |
| 17 #include "../GrGLXferProcessor.h" | 18 #include "../GrGLXferProcessor.h" |
| 18 #include "../../GrPendingFragmentStage.h" | 19 #include "../../GrPendingFragmentStage.h" |
| 19 #include "../../GrPipeline.h" | 20 #include "../../GrPipeline.h" |
| 20 | 21 |
| 21 /* | 22 /* |
| 22 * This is the base class for a series of interfaces. This base class *MUST* re
main abstract with | 23 * This is the base class for a series of interfaces. This base class *MUST* re
main abstract with |
| 23 * NO data members because it is used in multiple interface inheritance. | 24 * NO data members because it is used in multiple interface inheritance. |
| 24 * Heirarchy: | 25 * Heirarchy: |
| 25 * GrGLUniformBuilder | 26 * GrGLUniformBuilder |
| 26 * / \ | 27 * / \ |
| 27 * GrGLFPBuilder GrGLGPBuilder | 28 * GrGLFPBuilder GrGLGPBuilder |
| 28 * \ / | 29 * \ / |
| 29 * GrGLProgramBuilder(internal use only) | 30 * GrGLProgramBuilder(internal use only) |
| 30 */ | 31 */ |
| 31 class GrGLUniformBuilder { | 32 class GrGLUniformBuilder { |
| 32 public: | 33 public: |
| 33 enum ShaderVisibility { | 34 enum ShaderVisibility { |
| 34 kVertex_Visibility = 1 << kVertex_GrShaderType, | 35 kVertex_Visibility = 1 << kVertex_GrShaderType, |
| 35 kGeometry_Visibility = 1 << kGeometry_GrShaderType, | 36 kGeometry_Visibility = 1 << kGeometry_GrShaderType, |
| 36 kFragment_Visibility = 1 << kFragment_GrShaderType, | 37 kFragment_Visibility = 1 << kFragment_GrShaderType, |
| 37 }; | 38 }; |
| 38 | 39 |
| 39 virtual ~GrGLUniformBuilder() {} | 40 virtual ~GrGLUniformBuilder() {} |
| 40 | 41 |
| 41 typedef GrGLProgramDataManager::UniformHandle UniformHandle; | 42 typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
| 43 typedef GrGLPathProgramDataManager::SeparableVaryingHandle SeparableVaryingH
andle; |
| 42 | 44 |
| 43 /** Add a uniform variable to the current program, that has visibility in on
e or more shaders. | 45 /** Add a uniform variable to the current program, that has visibility in on
e or more shaders. |
| 44 visibility is a bitfield of ShaderVisibility values indicating from whic
h shaders the | 46 visibility is a bitfield of ShaderVisibility values indicating from whic
h shaders the |
| 45 uniform should be accessible. At least one bit must be set. Geometry sha
der uniforms are not | 47 uniform should be accessible. At least one bit must be set. Geometry sha
der uniforms are not |
| 46 supported at this time. The actual uniform name will be mangled. If outN
ame is not NULL then | 48 supported at this time. The actual uniform name will be mangled. If outN
ame is not NULL then |
| 47 it will refer to the final uniform name after return. Use the addUniform
Array variant to add | 49 it will refer to the final uniform name after return. Use the addUniform
Array variant to add |
| 48 an array of uniforms. */ | 50 an array of uniforms. */ |
| 49 UniformHandle addUniform(uint32_t visibility, | 51 UniformHandle addUniform(uint32_t visibility, |
| 50 GrSLType type, | 52 GrSLType type, |
| 51 GrSLPrecision precision, | 53 GrSLPrecision precision, |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 | 149 |
| 148 /* | 150 /* |
| 149 * This call can be used by GP to pass an attribute through all shaders dire
ctly to 'output' in | 151 * This call can be used by GP to pass an attribute through all shaders dire
ctly to 'output' in |
| 150 * the fragment shader. Though this call effects both the vertex shader and
fragment shader, | 152 * the fragment shader. Though this call effects both the vertex shader and
fragment shader, |
| 151 * it expects 'output' to be defined in the fragment shader before this call
is made. | 153 * it expects 'output' to be defined in the fragment shader before this call
is made. |
| 152 * TODO it might be nicer behavior to have a flag to declare output inside t
his call | 154 * TODO it might be nicer behavior to have a flag to declare output inside t
his call |
| 153 */ | 155 */ |
| 154 virtual void addPassThroughAttribute(const GrGeometryProcessor::Attribute*, | 156 virtual void addPassThroughAttribute(const GrGeometryProcessor::Attribute*, |
| 155 const char* output) = 0; | 157 const char* output) = 0; |
| 156 | 158 |
| 159 /* |
| 160 * Creates a fragment shader varying that can be referred to. |
| 161 * Comparable to GrGLUniformBuilder::addUniform(). |
| 162 */ |
| 163 virtual SeparableVaryingHandle addSeparableVarying( |
| 164 const char* name, GrGLVertToFrag*, GrSLPrecision fsPrecision = kDefault_
GrSLPrecision) = 0; |
| 165 |
| 157 // TODO rename getFragmentBuilder | 166 // TODO rename getFragmentBuilder |
| 158 virtual GrGLFragmentBuilder* getFragmentShaderBuilder() = 0; | 167 virtual GrGLFragmentBuilder* getFragmentShaderBuilder() = 0; |
| 159 virtual GrGLVertexBuilder* getVertexShaderBuilder() = 0; | 168 virtual GrGLVertexBuilder* getVertexShaderBuilder() = 0; |
| 160 | 169 |
| 161 /* | 170 /* |
| 162 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE | 171 * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
| 163 */ | 172 */ |
| 164 }; | 173 }; |
| 165 | 174 |
| 166 /* a specializations for FPs. Lets the user add uniforms and FS code */ | 175 /* a specializations for FPs. Lets the user add uniforms and FS code */ |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 245 GrGLVertexBuilder* getVertexShaderBuilder() override { return &fVS; } | 254 GrGLVertexBuilder* getVertexShaderBuilder() override { return &fVS; } |
| 246 | 255 |
| 247 void addVarying( | 256 void addVarying( |
| 248 const char* name, | 257 const char* name, |
| 249 GrGLVarying*, | 258 GrGLVarying*, |
| 250 GrSLPrecision fsPrecision = kDefault_GrSLPrecision) override; | 259 GrSLPrecision fsPrecision = kDefault_GrSLPrecision) override; |
| 251 | 260 |
| 252 void addPassThroughAttribute(const GrPrimitiveProcessor::Attribute*, | 261 void addPassThroughAttribute(const GrPrimitiveProcessor::Attribute*, |
| 253 const char* output) override; | 262 const char* output) override; |
| 254 | 263 |
| 264 SeparableVaryingHandle addSeparableVarying( |
| 265 const char* name, |
| 266 GrGLVertToFrag*, |
| 267 GrSLPrecision fsPrecision = kDefault_GrSLPrecision) override; |
| 255 | 268 |
| 256 // Handles for program uniforms (other than per-effect uniforms) | 269 // Handles for program uniforms (other than per-effect uniforms) |
| 257 struct BuiltinUniformHandles { | 270 struct BuiltinUniformHandles { |
| 258 UniformHandle fRTAdjustmentUni; | 271 UniformHandle fRTAdjustmentUni; |
| 259 | 272 |
| 260 // We use the render target height to provide a y-down frag coord when s
pecifying | 273 // We use the render target height to provide a y-down frag coord when s
pecifying |
| 261 // origin_upper_left is not supported. | 274 // origin_upper_left is not supported. |
| 262 UniformHandle fRTHeightUni; | 275 UniformHandle fRTHeightUni; |
| 263 }; | 276 }; |
| 264 | 277 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 | 321 |
| 309 void verify(const GrPrimitiveProcessor&); | 322 void verify(const GrPrimitiveProcessor&); |
| 310 void verify(const GrXferProcessor&); | 323 void verify(const GrXferProcessor&); |
| 311 void verify(const GrFragmentProcessor&); | 324 void verify(const GrFragmentProcessor&); |
| 312 template <class Proc> | 325 template <class Proc> |
| 313 void emitSamplers(const GrProcessor&, | 326 void emitSamplers(const GrProcessor&, |
| 314 GrGLProcessor::TextureSamplerArray* outSamplers, | 327 GrGLProcessor::TextureSamplerArray* outSamplers, |
| 315 GrGLInstalledProc<Proc>*); | 328 GrGLInstalledProc<Proc>*); |
| 316 | 329 |
| 317 GrGLProgram* finalize(); | 330 GrGLProgram* finalize(); |
| 318 void bindUniformLocations(GrGLuint programID); | 331 void bindProgramResourceLocations(GrGLuint programID); |
| 319 bool checkLinkStatus(GrGLuint programID); | 332 bool checkLinkStatus(GrGLuint programID); |
| 320 void resolveUniformLocations(GrGLuint programID); | 333 virtual void resolveProgramResourceLocations(GrGLuint programID); |
| 321 void cleanupProgram(GrGLuint programID, const SkTDArray<GrGLuint>& shaderIDs
); | 334 void cleanupProgram(GrGLuint programID, const SkTDArray<GrGLuint>& shaderIDs
); |
| 322 void cleanupShaders(const SkTDArray<GrGLuint>& shaderIDs); | 335 void cleanupShaders(const SkTDArray<GrGLuint>& shaderIDs); |
| 323 | 336 |
| 324 // Subclasses create different programs | 337 // Subclasses create different programs |
| 325 virtual GrGLProgram* createProgram(GrGLuint programID); | 338 virtual GrGLProgram* createProgram(GrGLuint programID); |
| 326 | 339 |
| 327 void appendUniformDecls(ShaderVisibility, SkString*) const; | 340 void appendUniformDecls(ShaderVisibility, SkString*) const; |
| 328 | 341 |
| 329 // reset is called by program creator between each processor's emit code. I
t increments the | 342 // reset is called by program creator between each processor's emit code. I
t increments the |
| 330 // stage offset for variable name mangling, and also ensures verfication var
iables in the | 343 // stage offset for variable name mangling, and also ensures verfication var
iables in the |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 GrGLPrimitiveProcessor::TransformsIn fCoordTransforms; | 397 GrGLPrimitiveProcessor::TransformsIn fCoordTransforms; |
| 385 GrGLPrimitiveProcessor::TransformsOut fOutCoords; | 398 GrGLPrimitiveProcessor::TransformsOut fOutCoords; |
| 386 SkTArray<UniformHandle> fSamplerUniforms; | 399 SkTArray<UniformHandle> fSamplerUniforms; |
| 387 | 400 |
| 388 friend class GrGLShaderBuilder; | 401 friend class GrGLShaderBuilder; |
| 389 friend class GrGLVertexBuilder; | 402 friend class GrGLVertexBuilder; |
| 390 friend class GrGLFragmentShaderBuilder; | 403 friend class GrGLFragmentShaderBuilder; |
| 391 friend class GrGLGeometryBuilder; | 404 friend class GrGLGeometryBuilder; |
| 392 }; | 405 }; |
| 393 #endif | 406 #endif |
| OLD | NEW |