| Index: src/gpu/gl/GrGLShaderBuilder.h
|
| diff --git a/src/gpu/gl/GrGLShaderBuilder.h b/src/gpu/gl/GrGLShaderBuilder.h
|
| index a70a0b04a72f5f4f7eb1804048e8747ce705b8bb..4553ac3a0efc0841821d7a8c1bd110abf3f49b6a 100644
|
| --- a/src/gpu/gl/GrGLShaderBuilder.h
|
| +++ b/src/gpu/gl/GrGLShaderBuilder.h
|
| @@ -13,7 +13,7 @@
|
| #include "GrColor.h"
|
| #include "GrEffect.h"
|
| #include "SkTypes.h"
|
| -#include "gl/GrGLCoordTransform.h"
|
| +#include "gl/GrGLProgramEffects.h"
|
| #include "gl/GrGLSL.h"
|
| #include "gl/GrGLUniformManager.h"
|
|
|
| @@ -29,78 +29,10 @@ class GrGLProgramDesc;
|
| */
|
| class GrGLShaderBuilder {
|
| public:
|
| - /**
|
| - * Passed to GrGLEffects to add texture reads to their shader code.
|
| - */
|
| - class TextureSampler {
|
| - public:
|
| - TextureSampler()
|
| - : fConfigComponentMask(0) {
|
| - // we will memcpy the first 4 bytes from passed in swizzle. This ensures the string is
|
| - // terminated.
|
| - fSwizzle[4] = '\0';
|
| - }
|
| -
|
| - TextureSampler(const TextureSampler& other) { *this = other; }
|
| -
|
| - TextureSampler& operator= (const TextureSampler& other) {
|
| - SkASSERT(0 == fConfigComponentMask);
|
| - SkASSERT(!fSamplerUniform.isValid());
|
| -
|
| - fConfigComponentMask = other.fConfigComponentMask;
|
| - fSamplerUniform = other.fSamplerUniform;
|
| - return *this;
|
| - }
|
| -
|
| - // bitfield of GrColorComponentFlags present in the texture's config.
|
| - uint32_t configComponentMask() const { return fConfigComponentMask; }
|
| -
|
| - const char* swizzle() const { return fSwizzle; }
|
| -
|
| - bool isInitialized() const { return 0 != fConfigComponentMask; }
|
| -
|
| - private:
|
| - // The idx param is used to ensure multiple samplers within a single effect have unique
|
| - // uniform names. swizzle is a four char max string made up of chars 'r', 'g', 'b', and 'a'.
|
| - void init(GrGLShaderBuilder* builder,
|
| - uint32_t configComponentMask,
|
| - const char* swizzle,
|
| - int idx) {
|
| - SkASSERT(!this->isInitialized());
|
| - SkASSERT(0 != configComponentMask);
|
| - SkASSERT(!fSamplerUniform.isValid());
|
| -
|
| - SkASSERT(NULL != builder);
|
| - SkString name;
|
| - name.printf("Sampler%d", idx);
|
| - fSamplerUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| - kSampler2D_GrSLType,
|
| - name.c_str());
|
| - SkASSERT(fSamplerUniform.isValid());
|
| -
|
| - fConfigComponentMask = configComponentMask;
|
| - memcpy(fSwizzle, swizzle, 4);
|
| - }
|
| -
|
| - void init(GrGLShaderBuilder* builder, const GrTextureAccess* access, int idx) {
|
| - SkASSERT(NULL != access);
|
| - this->init(builder,
|
| - GrPixelConfigComponentMask(access->getTexture()->config()),
|
| - access->getSwizzle(),
|
| - idx);
|
| - }
|
| -
|
| - uint32_t fConfigComponentMask;
|
| - char fSwizzle[5];
|
| - GrGLUniformManager::UniformHandle fSamplerUniform;
|
| -
|
| - friend class GrGLShaderBuilder; // to call init().
|
| - };
|
| -
|
| - typedef SkTArray<GrGLCoordTransform::TransformedCoords> TransformedCoordsArray;
|
| - typedef SkTArray<TextureSampler> TextureSamplerArray;
|
| typedef GrTAllocator<GrGLShaderVar> VarArray;
|
| typedef GrBackendEffectFactory::EffectKey EffectKey;
|
| + typedef GrGLProgramEffects::TextureSampler TextureSampler;
|
| + typedef GrGLProgramEffects::TransformedCoordsArray TransformedCoordsArray;
|
|
|
| enum ShaderVisibility {
|
| kVertex_Visibility = 0x1,
|
| @@ -175,11 +107,6 @@ public:
|
| /** Add input/output variable declarations (i.e. 'varying') to the fragment shader. */
|
| GrGLShaderVar& fsInputAppend() { return fFSInputs.push_back(); }
|
|
|
| - /** Generates a EffectKey for the shader code based on the texture access parameters and the
|
| - capabilities of the GL context. This is useful for keying the shader programs that may
|
| - have multiple representations, based on the type/format of textures used. */
|
| - static EffectKey KeyForTextureAccess(const GrTextureAccess&, const GrGLCaps&);
|
| -
|
| typedef uint8_t DstReadKey;
|
| typedef uint8_t FragPosKey;
|
|
|
| @@ -253,24 +180,19 @@ public:
|
| GrSLConstantVec getKnownCoverageValue() const { return fKnownCoverageValue; }
|
|
|
| /**
|
| - * Adds code for effects. effectStages contains the effects to add. effectKeys[i] is the key
|
| - * generated from effectStages[i]. An entry in effectStages can be NULL, in which case it is
|
| - * skipped. Moreover, if the corresponding key is GrGLEffect::NoEffectKey then it is skipped.
|
| - * inOutFSColor specifies the input color to the first stage and is updated to be the
|
| - * output color of the last stage. fsInOutColorKnownValue specifies whether the input color
|
| - * has a known constant value and is updated to refer to the status of the output color.
|
| - * The handles to texture samplers for effectStage[i] are added to effectSamplerHandles[i]. The
|
| - * glEffects array is updated to contain the GrGLEffect generated for each entry in
|
| - * effectStages.
|
| + * Adds code for effects and returns a GrGLProgramEffects* object. The caller is responsible for
|
| + * deleting it when finished. effectStages contains the effects to add. effectKeys[i] is the key
|
| + * generated from effectStages[i]. inOutFSColor specifies the input color to the first stage and
|
| + * is updated to be the output color of the last stage. fsInOutColorKnownValue specifies whether
|
| + * the input color has a known constant value and is updated to refer to the status of the
|
| + * output color. The handles to texture samplers for effectStage[i] are added to
|
| + * effectSamplerHandles[i].
|
| */
|
| - void emitEffects(const GrEffectStage* effectStages[],
|
| - const EffectKey effectKeys[],
|
| - int effectCnt,
|
| - SkString* inOutFSColor,
|
| - GrSLConstantVec* fsInOutColorKnownValue,
|
| - SkTArray<GrGLCoordTransform, false>* effectCoordTransformArrays[],
|
| - SkTArray<GrGLUniformManager::UniformHandle, true>* effectSamplerHandles[],
|
| - GrGLEffect* glEffects[]);
|
| + GrGLProgramEffects* createAndEmitEffects(const GrEffectStage* effectStages[],
|
| + const EffectKey effectKeys[],
|
| + int effectCnt,
|
| + SkString* inOutFSColor,
|
| + GrSLConstantVec* fsInOutColorKnownValue);
|
|
|
| const char* getColorOutputName() const;
|
| const char* enableSecondaryOutput();
|
| @@ -285,7 +207,7 @@ public:
|
| GrGLUniformManager::UniformHandle getColorUniform() const { return fColorUniform; }
|
| GrGLUniformManager::UniformHandle getCoverageUniform() const { return fCoverageUniform; }
|
| GrGLUniformManager::UniformHandle getDstCopySamplerUniform() const {
|
| - return fDstCopySampler.fSamplerUniform;
|
| + return fDstCopySamplerUniform;
|
| }
|
|
|
| /** Helper class used to build the vertex and geometry shaders. This functionality
|
| @@ -484,7 +406,7 @@ private:
|
| SkString fFSCode;
|
|
|
| bool fSetupFragPosition;
|
| - TextureSampler fDstCopySampler;
|
| + GrGLUniformManager::UniformHandle fDstCopySamplerUniform;
|
|
|
| SkString fInputColor;
|
| GrSLConstantVec fKnownColorValue;
|
|
|