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; |