Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 GrGLSLUniformHandler_DEFINED | 8 #ifndef GrGLSLUniformHandler_DEFINED |
| 9 #define GrGLSLUniformHandler_DEFINED | 9 #define GrGLSLUniformHandler_DEFINED |
| 10 | 10 |
| 11 #include "GrGLSLProgramDataManager.h" | 11 #include "GrGLSLProgramDataManager.h" |
| 12 #include "GrGLSLShaderVar.h" | 12 #include "GrGLSLShaderVar.h" |
| 13 | 13 |
| 14 class GrGLSLProgramBuilder; | 14 class GrGLSLProgramBuilder; |
| 15 class GrGLSLSampler; | |
| 15 | 16 |
| 16 class GrGLSLUniformHandler { | 17 class GrGLSLUniformHandler { |
| 17 public: | 18 public: |
| 18 virtual ~GrGLSLUniformHandler() {} | 19 virtual ~GrGLSLUniformHandler() {} |
| 19 | 20 |
| 20 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; | 21 typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
| 22 typedef GrGLSLProgramDataManager::UniformHandle SamplerHandle; | |
| 21 | 23 |
| 22 /** Add a uniform variable to the current program, that has visibility in on e or more shaders. | 24 /** Add a uniform variable to the current program, that has visibility in on e or more shaders. |
| 23 visibility is a bitfield of GrShaderFlag values indicating from which sh aders the uniform | 25 visibility is a bitfield of GrShaderFlag values indicating from which sh aders the uniform |
| 24 should be accessible. At least one bit must be set. Geometry shader unif orms are not | 26 should be accessible. At least one bit must be set. Geometry shader unif orms are not |
| 25 supported at this time. The actual uniform name will be mangled. If outN ame is not nullptr | 27 supported at this time. The actual uniform name will be mangled. If outN ame is not nullptr |
| 26 then it will refer to the final uniform name after return. Use the addUn iformArray variant | 28 then it will refer to the final uniform name after return. Use the addUn iformArray variant |
| 27 to add an array of uniforms. */ | 29 to add an array of uniforms. */ |
| 28 UniformHandle addUniform(uint32_t visibility, | 30 UniformHandle addUniform(uint32_t visibility, |
| 29 GrSLType type, | 31 GrSLType type, |
| 30 GrSLPrecision precision, | 32 GrSLPrecision precision, |
| 31 const char* name, | 33 const char* name, |
| 32 const char** outName = nullptr) { | 34 const char** outName = nullptr) { |
| 35 SkASSERT(!GrSLTypeIsSamplerType(type)); | |
| 33 return this->addUniformArray(visibility, type, precision, name, 0, outNa me); | 36 return this->addUniformArray(visibility, type, precision, name, 0, outNa me); |
| 34 } | 37 } |
| 35 | 38 |
| 36 UniformHandle addUniformArray(uint32_t visibility, | 39 UniformHandle addUniformArray(uint32_t visibility, |
| 37 GrSLType type, | 40 GrSLType type, |
| 38 GrSLPrecision precision, | 41 GrSLPrecision precision, |
| 39 const char* name, | 42 const char* name, |
| 40 int arrayCount, | 43 int arrayCount, |
| 41 const char** outName = nullptr) { | 44 const char** outName = nullptr) { |
| 45 SkASSERT(!GrSLTypeIsSamplerType(type)); | |
| 42 return this->internalAddUniformArray(visibility, type, precision, name, true, arrayCount, | 46 return this->internalAddUniformArray(visibility, type, precision, name, true, arrayCount, |
| 43 outName); | 47 outName); |
| 44 } | 48 } |
| 45 | 49 |
| 46 virtual const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const = 0 ; | 50 virtual const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const = 0 ; |
| 47 | 51 |
| 48 /** | 52 /** |
| 49 * Shortcut for getUniformVariable(u).c_str() | 53 * Shortcut for getUniformVariable(u).c_str() |
| 50 */ | 54 */ |
| 51 virtual const char* getUniformCStr(UniformHandle u) const = 0; | 55 virtual const char* getUniformCStr(UniformHandle u) const = 0; |
| 56 | |
| 57 virtual const GrGLSLSampler& getSampler(SamplerHandle handle) const = 0; | |
|
bsalomon
2016/04/14 01:40:16
It seems a bit unfortunate to make every processor
egdaniel
2016/04/14 03:11:50
Yeah I think it would be fine for appendTexLookup
| |
| 58 | |
| 52 protected: | 59 protected: |
| 53 explicit GrGLSLUniformHandler(GrGLSLProgramBuilder* program) : fProgramBuild er(program) {} | 60 explicit GrGLSLUniformHandler(GrGLSLProgramBuilder* program) : fProgramBuild er(program) {} |
| 54 | 61 |
| 55 // This is not owned by the class | 62 // This is not owned by the class |
| 56 GrGLSLProgramBuilder* fProgramBuilder; | 63 GrGLSLProgramBuilder* fProgramBuilder; |
| 57 | 64 |
| 58 private: | 65 private: |
| 66 virtual int numSamplers() const = 0; | |
| 67 | |
| 68 SamplerHandle addSampler(uint32_t visibility, | |
| 69 GrPixelConfig config, | |
| 70 GrSLType type, | |
| 71 GrSLPrecision precision, | |
| 72 const char* name) { | |
| 73 this->internalAddSampler(visibility, config, type, precision, name); | |
| 74 } | |
| 75 | |
| 76 virtual SamplerHandle internalAddSampler(uint32_t visibility, | |
| 77 GrPixelConfig config, | |
| 78 GrSLType type, | |
| 79 GrSLPrecision precision, | |
| 80 const char* name) = 0; | |
| 81 | |
| 59 virtual UniformHandle internalAddUniformArray(uint32_t visibility, | 82 virtual UniformHandle internalAddUniformArray(uint32_t visibility, |
| 60 GrSLType type, | 83 GrSLType type, |
| 61 GrSLPrecision precision, | 84 GrSLPrecision precision, |
| 62 const char* name, | 85 const char* name, |
| 63 bool mangleName, | 86 bool mangleName, |
| 64 int arrayCount, | 87 int arrayCount, |
| 65 const char** outName) = 0; | 88 const char** outName) = 0; |
| 66 | 89 |
| 90 | |
| 67 virtual void appendUniformDecls(GrShaderFlags visibility, SkString*) const = 0; | 91 virtual void appendUniformDecls(GrShaderFlags visibility, SkString*) const = 0; |
| 68 | 92 |
| 69 friend class GrGLSLProgramBuilder; | 93 friend class GrGLSLProgramBuilder; |
| 70 }; | 94 }; |
| 71 | 95 |
| 72 #endif | 96 #endif |
| OLD | NEW |