Index: src/gpu/glsl/GrGLSLProgramBuilder.h |
diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.h b/src/gpu/glsl/GrGLSLProgramBuilder.h |
index 81037084e9805968b0dbb2cb88413bbca32c4ed2..2a3b48508c71c9837feff5b66df56dccb3fc34d5 100644 |
--- a/src/gpu/glsl/GrGLSLProgramBuilder.h |
+++ b/src/gpu/glsl/GrGLSLProgramBuilder.h |
@@ -13,104 +13,29 @@ |
#include "glsl/GrGLSLFragmentShaderBuilder.h" |
#include "glsl/GrGLSLGeometryShaderBuilder.h" |
#include "glsl/GrGLSLProgramDataManager.h" |
+#include "glsl/GrGLSLUniformHandler.h" |
#include "glsl/GrGLSLVertexShaderBuilder.h" |
class GrGLSLCaps; |
class GrGLSLShaderVar; |
class GrGLSLVaryingHandler; |
-// Enough precision to represent 1 / 2048 accurately in printf |
-#define GR_SIGNIFICANT_POW2_DECIMAL_DIG 11 |
- |
-class GrGLSLUniformBuilder { |
-public: |
- enum ShaderVisibility { |
- kVertex_Visibility = 1 << kVertex_GrShaderType, |
- kGeometry_Visibility = 1 << kGeometry_GrShaderType, |
- kFragment_Visibility = 1 << kFragment_GrShaderType, |
- }; |
- |
- virtual ~GrGLSLUniformBuilder() {} |
- |
- typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; |
- |
- /** Add a uniform variable to the current program, that has visibility in one or more shaders. |
- visibility is a bitfield of ShaderVisibility values indicating from which shaders the |
- uniform should be accessible. At least one bit must be set. Geometry shader uniforms are not |
- supported at this time. The actual uniform name will be mangled. If outName is not nullptr |
- then it will refer to the final uniform name after return. Use the addUniformArray variant |
- to add an array of uniforms. */ |
- UniformHandle addUniform(uint32_t visibility, |
- GrSLType type, |
- GrSLPrecision precision, |
- const char* name, |
- const char** outName = nullptr) { |
- return this->addUniformArray(visibility, type, precision, name, 0, outName); |
- } |
- |
- UniformHandle addUniformArray(uint32_t visibility, |
- GrSLType type, |
- GrSLPrecision precision, |
- const char* name, |
- int arrayCount, |
- const char** outName = nullptr) { |
- return this->internalAddUniformArray(visibility, type, precision, name, true, arrayCount, |
- outName); |
- } |
- |
- virtual const GrGLSLShaderVar& getUniformVariable(UniformHandle u) const = 0; |
- |
- /** |
- * Shortcut for getUniformVariable(u).c_str() |
- */ |
- virtual const char* getUniformCStr(UniformHandle u) const = 0; |
- |
- /* |
- * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
- */ |
-protected: |
- virtual UniformHandle internalAddUniformArray( |
- uint32_t visibility, |
- GrSLType type, |
- GrSLPrecision precision, |
- const char* name, |
- bool mangleName, |
- int arrayCount, |
- const char** outName) = 0; |
-}; |
- |
-/* a specialization of the above for GPs. Lets the user add uniforms, varyings, and VS / FS code */ |
-class GrGLSLGPBuilder : public virtual GrGLSLUniformBuilder { |
+class GrGLSLProgramBuilder { |
public: |
- /* |
- * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
- */ |
-}; |
- |
+ typedef GrGpu::DrawArgs DrawArgs; |
+ typedef GrGLSLUniformHandler::ShaderVisibility ShaderVisibility; |
+ typedef GrGLSLUniformHandler::UniformHandle UniformHandle; |
-/* a specializations for FPs. Lets the user add uniforms and FS code */ |
-class GrGLSLFPBuilder : public virtual GrGLSLUniformBuilder { |
-public: |
- /* |
- * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
- */ |
-}; |
+ virtual ~GrGLSLProgramBuilder() {} |
-/* a specializations for XPs. Lets the user add uniforms and FS code */ |
-class GrGLSLXPBuilder : public virtual GrGLSLUniformBuilder { |
-public: |
- /* |
- * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE |
- */ |
-}; |
+ virtual const GrGLSLCaps* glslCaps() const = 0; |
-class GrGLSLProgramBuilder : public GrGLSLGPBuilder, |
- public GrGLSLFPBuilder, |
- public GrGLSLXPBuilder { |
-public: |
- typedef GrGpu::DrawArgs DrawArgs; |
+ const GrPrimitiveProcessor& primitiveProcessor() const { return *fArgs.fPrimitiveProcessor; } |
+ const GrPipeline& pipeline() const { return *fArgs.fPipeline; } |
+ const GrProgramDesc& desc() const { return *fArgs.fDesc; } |
+ const GrProgramDesc::KeyHeader& header() const { return fArgs.fDesc->header(); } |
- virtual const GrGLSLCaps* glslCaps() const = 0; |
+ void appendUniformDecls(ShaderVisibility, SkString*) const; |
// Handles for program uniforms (other than per-effect uniforms) |
struct BuiltinUniformHandles { |
@@ -121,33 +46,21 @@ public: |
UniformHandle fRTHeightUni; |
}; |
-protected: |
- explicit GrGLSLProgramBuilder(const DrawArgs& args); |
- |
- const GrPrimitiveProcessor& primitiveProcessor() const { return *fArgs.fPrimitiveProcessor; } |
- const GrPipeline& pipeline() const { return *fArgs.fPipeline; } |
- const GrProgramDesc& desc() const { return *fArgs.fDesc; } |
- const GrProgramDesc::KeyHeader& header() const { return fArgs.fDesc->header(); } |
- |
- void appendUniformDecls(ShaderVisibility, SkString*) const; |
- |
- // Used to add a uniform for frag position without mangling the name of the uniform inside of a |
- // stage. |
- UniformHandle addFragPosUniform(uint32_t visibility, |
- GrSLType type, |
- GrSLPrecision precision, |
- const char* name, |
- const char** outName) { |
- return this->internalAddUniformArray(visibility, type, precision, name, false, 0, outName); |
- } |
- |
+ // Used to add a uniform in the vertex shader for transforming into normalized device space. |
+ void addRTAdjustmentUniform(GrSLPrecision precision, const char* name, const char** outName); |
const char* rtAdjustment() const { return "rtAdjustment"; } |
+ |
+ // Used to add a uniform for the RenderTarget height (used for frag position) without mangling |
+ // the name of the uniform inside of a stage. |
+ void addRTHeightUniform(const char* name, const char** outName); |
// Generates a name for a variable. The generated string will be name prefixed by the prefix |
// char (unless the prefix is '\0'). It also will mangle the name to be stage-specific unless |
// explicitly asked not to. |
void nameVariable(SkString* out, char prefix, const char* name, bool mangle = true); |
+ virtual GrGLSLUniformHandler* uniformHandler() = 0; |
+ virtual const GrGLSLUniformHandler* uniformHandler() const = 0; |
virtual GrGLSLVaryingHandler* varyingHandler() = 0; |
// number of each input/output type in a single allocation block, used by many builders |
@@ -159,18 +72,12 @@ protected: |
int fStageIndex; |
- BuiltinUniformHandles fUniformHandles; |
- |
const DrawArgs& fArgs; |
-private: |
- virtual void onAppendUniformDecls(ShaderVisibility visibility, SkString* out) const = 0; |
+ BuiltinUniformHandles fUniformHandles; |
- friend class GrGLSLShaderBuilder; |
- friend class GrGLSLVertexBuilder; |
- friend class GrGLSLFragmentShaderBuilder; |
- friend class GrGLSLGeometryBuilder; |
- friend class GrGLSLVaryingHandler; |
+protected: |
+ explicit GrGLSLProgramBuilder(const DrawArgs& args); |
}; |
#endif |