| Index: src/gpu/glsl/GrGLSLProgramBuilder.h | 
| diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.h b/src/gpu/glsl/GrGLSLProgramBuilder.h | 
| index e87ab0aee93d37fee610f90e15467346ee54e724..81037084e9805968b0dbb2cb88413bbca32c4ed2 100644 | 
| --- a/src/gpu/glsl/GrGLSLProgramBuilder.h | 
| +++ b/src/gpu/glsl/GrGLSLProgramBuilder.h | 
| @@ -17,6 +17,7 @@ | 
|  | 
| class GrGLSLCaps; | 
| class GrGLSLShaderVar; | 
| +class GrGLSLVaryingHandler; | 
|  | 
| // Enough precision to represent 1 / 2048 accurately in printf | 
| #define GR_SIGNIFICANT_POW2_DECIMAL_DIG 11 | 
| @@ -32,7 +33,6 @@ public: | 
| virtual ~GrGLSLUniformBuilder() {} | 
|  | 
| typedef GrGLSLProgramDataManager::UniformHandle UniformHandle; | 
| -    typedef GrGLSLProgramDataManager::SeparableVaryingHandle SeparableVaryingHandle; | 
|  | 
| /** 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 | 
| @@ -79,91 +79,10 @@ protected: | 
| const char** outName) = 0; | 
| }; | 
|  | 
| -// TODO move this into GrGLSLGPBuilder and move them both out of this file | 
| -class GrGLSLVarying { | 
| -public: | 
| -    bool vsVarying() const { return kVertToFrag_Varying == fVarying || | 
| -                                    kVertToGeo_Varying == fVarying; } | 
| -    bool fsVarying() const { return kVertToFrag_Varying == fVarying || | 
| -                                    kGeoToFrag_Varying == fVarying; } | 
| -    const char* vsOut() const { return fVsOut; } | 
| -    const char* gsIn() const { return fGsIn; } | 
| -    const char* gsOut() const { return fGsOut; } | 
| -    const char* fsIn() const { return fFsIn; } | 
| -    GrSLType type() const { return fType; } | 
| - | 
| -protected: | 
| -    enum Varying { | 
| -        kVertToFrag_Varying, | 
| -        kVertToGeo_Varying, | 
| -        kGeoToFrag_Varying, | 
| -    }; | 
| - | 
| -    GrGLSLVarying(GrSLType type, Varying varying) | 
| -        : fVarying(varying), fType(type), fVsOut(nullptr), fGsIn(nullptr), fGsOut(nullptr), | 
| -          fFsIn(nullptr) {} | 
| - | 
| -    Varying fVarying; | 
| - | 
| -private: | 
| -    GrSLType fType; | 
| -    const char* fVsOut; | 
| -    const char* fGsIn; | 
| -    const char* fGsOut; | 
| -    const char* fFsIn; | 
| - | 
| -    friend class GrGLSLVertexBuilder; | 
| -    friend class GrGLSLGeometryBuilder; | 
| -    friend class GrGLSLXferBuilder; | 
| -    friend class GrGLSLFragmentShaderBuilder; | 
| -}; | 
| - | 
| -struct GrGLSLVertToFrag : public GrGLSLVarying { | 
| -    GrGLSLVertToFrag(GrSLType type) | 
| -        : GrGLSLVarying(type, kVertToFrag_Varying) {} | 
| -}; | 
| - | 
| -struct GrGLSLVertToGeo : public GrGLSLVarying { | 
| -    GrGLSLVertToGeo(GrSLType type) | 
| -        : GrGLSLVarying(type, kVertToGeo_Varying) {} | 
| -}; | 
| - | 
| -struct GrGLSLGeoToFrag : public GrGLSLVarying { | 
| -    GrGLSLGeoToFrag(GrSLType type) | 
| -        : GrGLSLVarying(type, kGeoToFrag_Varying) {} | 
| -}; | 
| - | 
| /* a specialization of the above for GPs.  Lets the user add uniforms, varyings, and VS / FS code */ | 
| class GrGLSLGPBuilder : public virtual GrGLSLUniformBuilder { | 
| public: | 
| /* | 
| -     * addVarying allows fine grained control for setting up varyings between stages.  If you just | 
| -     * need to take an attribute and pass it through to an output value in a fragment shader, use | 
| -     * addPassThroughAttribute. | 
| -     * TODO convert most uses of addVarying to addPassThroughAttribute | 
| -     */ | 
| -    virtual void addVarying(const char* name, | 
| -                            GrGLSLVarying*, | 
| -                            GrSLPrecision precision = kDefault_GrSLPrecision) = 0; | 
| - | 
| -    /* | 
| -     * This call can be used by GP to pass an attribute through all shaders directly to 'output' in | 
| -     * the fragment shader.  Though this call effects both the vertex shader and fragment shader, | 
| -     * it expects 'output' to be defined in the fragment shader before this call is made. | 
| -     * TODO it might be nicer behavior to have a flag to declare output inside this call | 
| -     */ | 
| -    virtual void addPassThroughAttribute(const GrGeometryProcessor::Attribute*, | 
| -                                         const char* output) = 0; | 
| - | 
| -    /* | 
| -     * Creates a fragment shader varying that can be referred to. | 
| -     * Comparable to GrGLSLUniformBuilder::addUniform(). | 
| -     */ | 
| -    virtual SeparableVaryingHandle addSeparableVarying( | 
| -        const char* name, GrGLSLVertToFrag*, | 
| -        GrSLPrecision fsPrecision = kDefault_GrSLPrecision) = 0; | 
| - | 
| -    /* | 
| * *NOTE* NO MEMBERS ALLOWED, MULTIPLE INHERITANCE | 
| */ | 
| }; | 
| @@ -229,12 +148,15 @@ protected: | 
| // explicitly asked not to. | 
| void nameVariable(SkString* out, char prefix, const char* name, bool mangle = true); | 
|  | 
| +    virtual GrGLSLVaryingHandler* varyingHandler() = 0; | 
| + | 
| // number of each input/output type in a single allocation block, used by many builders | 
| static const int kVarsPerBlock; | 
|  | 
| -    GrGLSLVertexBuilder fVS; | 
| -    GrGLSLGeometryBuilder fGS; | 
| +    GrGLSLVertexBuilder         fVS; | 
| +    GrGLSLGeometryBuilder       fGS; | 
| GrGLSLFragmentShaderBuilder fFS; | 
| + | 
| int fStageIndex; | 
|  | 
| BuiltinUniformHandles fUniformHandles; | 
| @@ -248,6 +170,7 @@ private: | 
| friend class GrGLSLVertexBuilder; | 
| friend class GrGLSLFragmentShaderBuilder; | 
| friend class GrGLSLGeometryBuilder; | 
| +    friend class GrGLSLVaryingHandler; | 
| }; | 
|  | 
| #endif | 
|  |