| Index: src/gpu/glsl/GrGLSLProgramBuilder.h
|
| diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.h b/src/gpu/glsl/GrGLSLProgramBuilder.h
|
| index 81037084e9805968b0dbb2cb88413bbca32c4ed2..db28b2d8355100cd19359b1c809f62c4f2b66b0e 100644
|
| --- a/src/gpu/glsl/GrGLSLProgramBuilder.h
|
| +++ b/src/gpu/glsl/GrGLSLProgramBuilder.h
|
| @@ -13,116 +13,21 @@
|
| #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 {
|
| -public:
|
| - /*
|
| - * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE
|
| - */
|
| -};
|
| -
|
| -
|
| -/* a specializations for FPs. Lets the user add uniforms and FS code */
|
| -class GrGLSLFPBuilder : public virtual GrGLSLUniformBuilder {
|
| -public:
|
| - /*
|
| - * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE
|
| - */
|
| -};
|
| -
|
| -/* a specializations for XPs. Lets the user add uniforms and FS code */
|
| -class GrGLSLXPBuilder : public virtual GrGLSLUniformBuilder {
|
| -public:
|
| - /*
|
| - * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE
|
| - */
|
| -};
|
| -
|
| -class GrGLSLProgramBuilder : public GrGLSLGPBuilder,
|
| - public GrGLSLFPBuilder,
|
| - public GrGLSLXPBuilder {
|
| +class GrGLSLProgramBuilder {
|
| public:
|
| typedef GrGpu::DrawArgs DrawArgs;
|
| + typedef GrGLSLUniformHandler::ShaderVisibility ShaderVisibility;
|
|
|
| - virtual const GrGLSLCaps* glslCaps() const = 0;
|
| -
|
| - // Handles for program uniforms (other than per-effect uniforms)
|
| - struct BuiltinUniformHandles {
|
| - UniformHandle fRTAdjustmentUni;
|
| + virtual ~GrGLSLProgramBuilder() {}
|
|
|
| - // We use the render target height to provide a y-down frag coord when specifying
|
| - // origin_upper_left is not supported.
|
| - UniformHandle fRTHeightUni;
|
| - };
|
| -
|
| -protected:
|
| - explicit GrGLSLProgramBuilder(const DrawArgs& args);
|
| + virtual const GrGLSLCaps* glslCaps() const = 0;
|
|
|
| const GrPrimitiveProcessor& primitiveProcessor() const { return *fArgs.fPrimitiveProcessor; }
|
| const GrPipeline& pipeline() const { return *fArgs.fPipeline; }
|
| @@ -131,16 +36,6 @@ protected:
|
|
|
| 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);
|
| - }
|
| -
|
| const char* rtAdjustment() const { return "rtAdjustment"; }
|
|
|
| // Generates a name for a variable. The generated string will be name prefixed by the prefix
|
| @@ -148,6 +43,8 @@ protected:
|
| // 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 +56,10 @@ protected:
|
|
|
| int fStageIndex;
|
|
|
| - BuiltinUniformHandles fUniformHandles;
|
| -
|
| const DrawArgs& fArgs;
|
|
|
| -private:
|
| - virtual void onAppendUniformDecls(ShaderVisibility visibility, SkString* out) const = 0;
|
| -
|
| - friend class GrGLSLShaderBuilder;
|
| - friend class GrGLSLVertexBuilder;
|
| - friend class GrGLSLFragmentShaderBuilder;
|
| - friend class GrGLSLGeometryBuilder;
|
| - friend class GrGLSLVaryingHandler;
|
| +protected:
|
| + explicit GrGLSLProgramBuilder(const DrawArgs& args);
|
| };
|
|
|
| #endif
|
|
|