| Index: src/gpu/gl/builders/GrGLProgramBuilder.h | 
| diff --git a/src/gpu/gl/builders/GrGLProgramBuilder.h b/src/gpu/gl/builders/GrGLProgramBuilder.h | 
| index 70cfad5633ec652417cc6e42cae2b5c1e09f37c1..20879253cae37940c21dbbb1c3748e7f1dd30698 100644 | 
| --- a/src/gpu/gl/builders/GrGLProgramBuilder.h | 
| +++ b/src/gpu/gl/builders/GrGLProgramBuilder.h | 
| @@ -12,42 +12,14 @@ | 
| #include "gl/GrGLProgramDataManager.h" | 
| #include "gl/GrGLUniformHandler.h" | 
| #include "gl/GrGLVaryingHandler.h" | 
| -#include "glsl/GrGLSLPrimitiveProcessor.h" | 
| #include "glsl/GrGLSLProgramBuilder.h" | 
| #include "glsl/GrGLSLProgramDataManager.h" | 
| -#include "glsl/GrGLSLTextureSampler.h" | 
| -#include "glsl/GrGLSLXferProcessor.h" | 
|  | 
| class GrFragmentProcessor; | 
| class GrGLContextInfo; | 
| class GrGLSLShaderBuilder; | 
| class GrGLSLCaps; | 
|  | 
| -/** | 
| - * The below struct represent processors installed in programs. | 
| - */ | 
| -template <class Proc> | 
| -struct GrGLInstalledProc { | 
| -    SkDEBUGCODE(int fSamplersIdx;) | 
| -    SkAutoTDelete<Proc> fGLProc; | 
| -}; | 
| - | 
| -typedef GrGLInstalledProc<GrGLSLPrimitiveProcessor> GrGLInstalledGeoProc; | 
| -typedef GrGLInstalledProc<GrGLSLXferProcessor> GrGLInstalledXferProc; | 
| -typedef GrGLInstalledProc<GrGLSLFragmentProcessor> GrGLInstalledFragProc; | 
| - | 
| -struct GrGLInstalledFragProcs : public SkRefCnt { | 
| -    virtual ~GrGLInstalledFragProcs(); | 
| -    SkSTArray<8, GrGLInstalledFragProc*, true> fProcs; | 
| -}; | 
| - | 
| -/* | 
| - * Please note - no diamond problems because of virtual inheritance.  Also, both base classes | 
| - * are pure virtual with no data members.  This is the base class for program building. | 
| - * Subclasses are nearly identical but each has their own way of emitting transforms.  State for | 
| - * each of the elements of the shader pipeline, ie vertex, fragment, geometry, etc, lives in those | 
| - * respective builders | 
| -*/ | 
| class GrGLProgramBuilder : public GrGLSLProgramBuilder { | 
| public: | 
| /** Generates a shader program. | 
| @@ -59,6 +31,7 @@ public: | 
| */ | 
| static GrGLProgram* CreateProgram(const DrawArgs&, GrGLGpu*); | 
|  | 
| +    const GrCaps* caps() const override; | 
| const GrGLSLCaps* glslCaps() const override; | 
|  | 
| GrGLGpu* gpu() const { return fGpu; } | 
| @@ -66,41 +39,8 @@ public: | 
| private: | 
| GrGLProgramBuilder(GrGLGpu*, const DrawArgs&); | 
|  | 
| -    // Generates a possibly mangled name for a stage variable and writes it to the fragment shader. | 
| -    // If GrGLSLExpr4 has a valid name then it will use that instead | 
| -    void nameExpression(GrGLSLExpr4*, const char* baseName); | 
| -    bool emitAndInstallProcs(GrGLSLExpr4* inputColor, GrGLSLExpr4* inputCoverage); | 
| -    void emitAndInstallFragProcs(int procOffset, int numProcs, GrGLSLExpr4* inOut); | 
| -    void emitAndInstallProc(const GrFragmentProcessor&, | 
| -                            int index, | 
| -                            const GrGLSLExpr4& input, | 
| -                            GrGLSLExpr4* output); | 
| - | 
| -    void emitAndInstallProc(const GrPrimitiveProcessor&, | 
| -                            GrGLSLExpr4* outputColor, | 
| -                            GrGLSLExpr4* outputCoverage); | 
| - | 
| -    // these emit functions help to keep the createAndEmitProcessors template general | 
| -    void emitAndInstallProc(const GrFragmentProcessor&, | 
| -                            int index, | 
| -                            const char* outColor, | 
| -                            const char* inColor); | 
| -    void emitAndInstallProc(const GrPrimitiveProcessor&, | 
| -                            const char* outColor, | 
| -                            const char* outCoverage); | 
| -    void emitAndInstallXferProc(const GrXferProcessor&, | 
| -                                const GrGLSLExpr4& colorIn, | 
| -                                const GrGLSLExpr4& coverageIn, | 
| -                                bool ignoresCoverage); | 
| -    void emitFSOutputSwizzle(bool hasSecondaryOutput); | 
| - | 
| -    void verify(const GrPrimitiveProcessor&); | 
| -    void verify(const GrXferProcessor&); | 
| -    void verify(const GrFragmentProcessor&); | 
| -    template <class Proc> | 
| void emitSamplers(const GrProcessor&, | 
| -                      GrGLSLTextureSampler::TextureSamplerArray* outSamplers, | 
| -                      GrGLInstalledProc<Proc>*); | 
| +                      GrGLSLTextureSampler::TextureSamplerArray* outSamplers) override; | 
|  | 
| bool compileAndAttachShaders(GrGLSLShaderBuilder& shader, | 
| GrGLuint programId, | 
| @@ -120,35 +60,8 @@ private: | 
| const GrGLSLUniformHandler* uniformHandler() const override { return &fUniformHandler; } | 
| GrGLSLVaryingHandler* varyingHandler() override { return &fVaryingHandler; } | 
|  | 
| -    // reset is called by program creator between each processor's emit code.  It increments the | 
| -    // stage offset for variable name mangling, and also ensures verfication variables in the | 
| -    // fragment shader are cleared. | 
| -    void reset() { | 
| -        this->addStage(); | 
| -        fFS.reset(); | 
| -    } | 
| -    void addStage() { fStageIndex++; } | 
| - | 
| -    class AutoStageAdvance { | 
| -    public: | 
| -        AutoStageAdvance(GrGLProgramBuilder* pb) | 
| -            : fPB(pb) { | 
| -            fPB->reset(); | 
| -            // Each output to the fragment processor gets its own code section | 
| -            fPB->fFS.nextStage(); | 
| -        } | 
| -        ~AutoStageAdvance() {} | 
| -    private: | 
| -        GrGLProgramBuilder* fPB; | 
| -    }; | 
| - | 
| -    GrGLInstalledGeoProc* fGeometryProcessor; | 
| -    GrGLInstalledXferProc* fXferProcessor; | 
| -    SkAutoTUnref<GrGLInstalledFragProcs> fFragmentProcessors; | 
|  | 
| GrGLGpu* fGpu; | 
| -    GrGLSLPrimitiveProcessor::TransformsIn fCoordTransforms; | 
| -    GrGLSLPrimitiveProcessor::TransformsOut fOutCoords; | 
| typedef GrGLSLUniformHandler::UniformHandle UniformHandle; | 
| SkTArray<UniformHandle> fSamplerUniforms; | 
|  | 
|  |