Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(369)

Unified Diff: src/gpu/gl/GrGLProgramEffects.h

Issue 551253004: Changes to remove program effects builder (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/gpu/gl/GrGLProgramDesc.cpp ('k') | src/gpu/gl/GrGLProgramEffects.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/gl/GrGLProgramEffects.h
diff --git a/src/gpu/gl/GrGLProgramEffects.h b/src/gpu/gl/GrGLProgramEffects.h
index dd3feab8435147f1aebc99572ffc573901349948..8b870d4410c7bfe5510bc5a265f4e8be75b77d77 100644
--- a/src/gpu/gl/GrGLProgramEffects.h
+++ b/src/gpu/gl/GrGLProgramEffects.h
@@ -31,19 +31,6 @@ public:
typedef GrGLProgramDataManager::UniformHandle UniformHandle;
typedef GrGLProgramDataManager::VaryingHandle VaryingHandle;
- /**
- * This class emits some of the code inserted into the shaders for an effect. The code it
- * creates may be dependent on properties of the effect that the effect itself doesn't use
- * in its key (e.g. the pixel format of textures used). So this class inserts a meta-key for
- * every effect using this function. It is also responsible for inserting the effect's class ID
- * which must be different for every GrEffect subclass. It can fail if an effect uses too many
- * textures, attributes, etc for the space allotted in the meta-key.
- */
- static bool GenEffectMetaKey(const GrEffectStage&,
- bool,
- const GrGLCaps&,
- GrEffectKeyBuilder*);
-
virtual ~GrGLProgramEffects();
/**
@@ -60,80 +47,13 @@ public:
const GrGLProgramDataManager&,
const GrEffectStage* effectStages[]) = 0;
- virtual void setData(GrGpuGL*,
- GrGpu::DrawType,
- const GrGLProgramDataManager&,
- const GrEffectStage* effectStages) { SkFAIL("DO NOT USE"); }
-
- void addEffect(GrGLEffect* effect) { fGLEffects.push_back(effect); }
-
- /**
- * Passed to GrGLEffects so they can add transformed coordinates to their shader code.
- */
- class TransformedCoords {
- public:
- TransformedCoords(const SkString& name, GrSLType type)
- : fName(name), fType(type) {
- }
-
- const char* c_str() const { return fName.c_str(); }
- GrSLType type() const { return fType; }
- const SkString& getName() const { return fName; }
-
- private:
- SkString fName;
- GrSLType fType;
- };
-
- typedef SkTArray<TransformedCoords> TransformedCoordsArray;
-
- /**
- * Passed to GrGLEffects so they can add texture reads to their shader code.
- */
- class TextureSampler {
- public:
- TextureSampler(UniformHandle uniform, const GrTextureAccess& access)
- : fSamplerUniform(uniform)
- , fConfigComponentMask(GrPixelConfigComponentMask(access.getTexture()->config())) {
- SkASSERT(0 != fConfigComponentMask);
- memcpy(fSwizzle, access.getSwizzle(), 5);
- }
-
- UniformHandle samplerUniform() const { return fSamplerUniform; }
- // bitfield of GrColorComponentFlags present in the texture's config.
- uint32_t configComponentMask() const { return fConfigComponentMask; }
- const char* swizzle() const { return fSwizzle; }
-
- private:
- UniformHandle fSamplerUniform;
- uint32_t fConfigComponentMask;
- char fSwizzle[5];
- };
-
- typedef SkTArray<TextureSampler> TextureSamplerArray;
-
protected:
-
- /**
- * Helpers for GenEffectMetaKey.
- */
- static uint32_t GenAttribKey(const GrEffect*);
- static uint32_t GenTransformKey(const GrEffectStage&, bool useExplicitLocalCoords);
- static uint32_t GenTextureKey(const GrEffect*, const GrGLCaps&);
-
GrGLProgramEffects(int reserveCount)
: fGLEffects(reserveCount)
, fSamplers(reserveCount) {
}
/**
- * Helper for emitEffect() in a subclasses. Emits uniforms for an effect's texture accesses and
- * appends the necessary data to the TextureSamplerArray* object so effects can add texture
- * lookups to their code. This method is only meant to be called during the construction phase.
- */
- void emitSamplers(GrGLProgramBuilder*, const GrEffect&, TextureSamplerArray*);
-
- /**
* Helper for setData(). Binds all the textures for an effect.
*/
void bindTextures(GrGpuGL*, const GrEffect&, int effectIdx);
@@ -144,27 +64,21 @@ protected:
int fTextureUnit;
};
+ /*
+ * Helpers for shader builders to build up program effects objects alongside shader code
+ */
+ void addEffect(GrGLEffect* effect) { fGLEffects.push_back(effect); }
+ SkTArray<Sampler, true>& addSamplers() { return fSamplers.push_back(); }
+
SkTArray<GrGLEffect*> fGLEffects;
SkTArray<SkSTArray<4, Sampler, true> > fSamplers;
private:
- typedef SkRefCnt INHERITED;
-};
+ friend class GrGLProgramBuilder;
+ friend class GrGLFullProgramBuilder;
+ friend class GrGLFragmentOnlyShaderBuilder;
-/**
- * This is an abstract base class for constructing different types of GrGLProgramEffects objects.
- */
-class GrGLProgramEffectsBuilder {
-public:
- virtual ~GrGLProgramEffectsBuilder() { }
- /**
- * Emits the effect's shader code, and stores the necessary uniforms internally.
- */
- virtual void emitEffect(const GrEffectStage&,
- const GrEffectKey&,
- const char* outColor,
- const char* inColor,
- int stageIndex) = 0;
+ typedef SkRefCnt INHERITED;
};
////////////////////////////////////////////////////////////////////////////////
@@ -179,52 +93,12 @@ public:
const GrGLProgramDataManager&,
const GrEffectStage* effectStages[]) SK_OVERRIDE;
- virtual void setData(GrGpuGL*,
- GrGpu::DrawType,
- const GrGLProgramDataManager&,
- const GrEffectStage* effectStages) SK_OVERRIDE;
-
private:
- friend class GrGLFullProgramBuilder;
-
GrGLVertexProgramEffects(int reserveCount, bool explicitLocalCoords)
: INHERITED(reserveCount)
, fTransforms(reserveCount)
, fHasExplicitLocalCoords(explicitLocalCoords) {
}
- /**
- * This method is meant to only be called during the construction phase.
- */
- void emitEffect(GrGLFullProgramBuilder*,
- const GrEffectStage&,
- const GrEffectKey&,
- const char* outColor,
- const char* inColor,
- int stageIndex);
-
- /**
- * Helper for emitEffect(). Emits any attributes an effect may have.
- */
- void emitAttributes(GrGLFullProgramBuilder*, const GrEffectStage&);
-
- /**
- * Helper for emitEffect(). Emits code to implement an effect's coord transforms in the VS.
- * Varyings are added as an outputs of the VS and inputs to the FS. The varyings may be either a
- * vec2f or vec3f depending upon whether perspective interpolation is required or not. The names
- * of the varyings in the VS and FS as well their types are appended to the
- * TransformedCoordsArray* object, which is in turn passed to the effect's emitCode() function.
- */
- void emitTransforms(GrGLFullProgramBuilder*,
- const GrEffectStage&,
- TransformedCoordsArray*);
-
- /**
- * Helper for setData(). Sets all the transform matrices for an effect.
- */
- void setTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrEffectStage&,
- int effectIdx);
- void setPathTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrEffectStage&,
- int effectIdx);
struct Transform {
Transform() { fCurrentValue = SkMatrix::InvalidMatrix(); }
@@ -239,38 +113,30 @@ private:
GrSLType fType;
};
+ /*
+ * These functions are used by the builders to build up program effects along side the shader
+ * code itself
+ */
+ SkSTArray<2, Transform, true>& addTransforms() { return fTransforms.push_back(); }
+ SkTArray<PathTransform, true>& addPathTransforms() { return fPathTransforms.push_back(); }
+
+ /**
+ * Helper for setData(). Sets all the transform matrices for an effect.
+ */
+ void setTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrEffectStage&,
+ int effectIdx);
+ void setPathTransformData(GrGpuGL* gpu, const GrGLProgramDataManager&, const GrEffectStage&,
+ int effectIdx);
+
SkTArray<SkSTArray<2, Transform, true> > fTransforms;
SkTArray<SkTArray<PathTransform, true> > fPathTransforms;
bool fHasExplicitLocalCoords;
- friend class GrGLVertexProgramEffectsBuilder;
+ friend class GrGLFullProgramBuilder;
typedef GrGLProgramEffects INHERITED;
};
-/**
- * This class is used to construct a GrGLVertexProgramEffects* object.
- */
-class GrGLVertexProgramEffectsBuilder : public GrGLProgramEffectsBuilder {
-public:
- GrGLVertexProgramEffectsBuilder(GrGLFullProgramBuilder*, int reserveCount);
- virtual ~GrGLVertexProgramEffectsBuilder() { }
- virtual void emitEffect(const GrEffectStage&,
- const GrEffectKey&,
- const char* outColor,
- const char* inColor,
- int stageIndex) SK_OVERRIDE;
- /**
- * Finalizes the building process and returns the effect array. After this call, the builder
- * becomes invalid.
- */
- GrGLProgramEffects* finish() { return fProgramEffects.detach(); }
-private:
- GrGLFullProgramBuilder* fBuilder;
- SkAutoTDelete<GrGLVertexProgramEffects> fProgramEffects;
- typedef GrGLProgramEffectsBuilder INHERITED;
-};
-
////////////////////////////////////////////////////////////////////////////////
/**
@@ -285,75 +151,34 @@ public:
const GrEffectStage* effectStages[]) SK_OVERRIDE;
private:
- friend class GrGLFragmentOnlyProgramBuilder;
-
GrGLPathTexGenProgramEffects(int reserveCount)
: INHERITED(reserveCount)
, fTransforms(reserveCount) {
}
/**
- * This method is meant to only be called during the construction phase.
- */
- void emitEffect(GrGLFragmentOnlyProgramBuilder*,
- const GrEffectStage&,
- const GrEffectKey&,
- const char* outColor,
- const char* inColor,
- int stageIndex);
-
- /**
- * Helper for emitEffect(). Allocates texture units from the builder for each transform in an
- * effect. The transforms all use adjacent texture units. They either use two or three of the
- * coordinates at a given texture unit, depending on if they need perspective interpolation.
- * The expressions to access the transformed coords (i.e. 'vec2(gl_TexCoord[0])') as well as the
- * types are appended to the TransformedCoordsArray* object, which is in turn passed to the
- * effect's emitCode() function.
- */
- void setupPathTexGen(GrGLFragmentOnlyProgramBuilder*,
- const GrEffectStage&,
- TransformedCoordsArray*);
-
- /**
* Helper for setData(). Sets the PathTexGen state for each transform in an effect.
*/
void setPathTexGenState(GrGpuGL*, const GrEffectStage&, int effectIdx);
struct Transforms {
- Transforms(uint32_t transformKey, int texCoordIndex)
- : fTransformKey(transformKey), fTexCoordIndex(texCoordIndex) {}
- uint32_t fTransformKey;
- int fTexCoordIndex;
+ Transforms(int texCoordIndex)
+ : fTexCoordIndex(texCoordIndex) {}
+ int fTexCoordIndex;
};
+ /*
+ * Helper for fragment only shader builder to build up the program effects alongside the shader
+ */
+ void addTransforms(int coordIndex) {
+ fTransforms.push_back(Transforms(coordIndex));
+ }
+
SkTArray<Transforms> fTransforms;
- friend class GrGLPathTexGenProgramEffectsBuilder;
- typedef GrGLProgramEffects INHERITED;
-};
+ friend class GrGLFragmentOnlyProgramBuilder;
-/**
- * This class is used to construct a GrGLPathTexGenProgramEffects* object.
- */
-class GrGLPathTexGenProgramEffectsBuilder : public GrGLProgramEffectsBuilder {
-public:
- GrGLPathTexGenProgramEffectsBuilder(GrGLFragmentOnlyProgramBuilder*, int reserveCount);
- virtual ~GrGLPathTexGenProgramEffectsBuilder() { }
- virtual void emitEffect(const GrEffectStage&,
- const GrEffectKey&,
- const char* outColor,
- const char* inColor,
- int stageIndex) SK_OVERRIDE;
- /**
- * Finalizes the building process and returns the effect array. After this call, the builder
- * becomes invalid.
- */
- GrGLProgramEffects* finish() { return fProgramEffects.detach(); }
-private:
- GrGLFragmentOnlyProgramBuilder* fBuilder;
- SkAutoTDelete<GrGLPathTexGenProgramEffects> fProgramEffects;
- typedef GrGLProgramEffectsBuilder INHERITED;
+ typedef GrGLProgramEffects INHERITED;
};
-
#endif
« no previous file with comments | « src/gpu/gl/GrGLProgramDesc.cpp ('k') | src/gpu/gl/GrGLProgramEffects.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698