diff --git a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp index 130e11678b..3acb74ddc5 100644 --- a/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp +++ b/experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp @@ -683,25 +683,25 @@ private: : fType(type) , fNumOctaves(numOctaves) , fStitchTiles(stitchTiles) - , fPermutationsAccess(permutationsTexture) - , fNoiseAccess(noiseTexture) + , fPermutationsSampler(permutationsTexture) + , fNoiseSampler(noiseTexture) , fPaintingData(paintingData) { this->initClassID(); - this->addTextureAccess(&fPermutationsAccess); - this->addTextureAccess(&fNoiseAccess); + this->addTextureSampler(&fPermutationsSampler); + this->addTextureSampler(&fNoiseSampler); fCoordTransform.reset(matrix); this->addCoordTransform(&fCoordTransform); } GR_DECLARE_FRAGMENT_PROCESSOR_TEST; - SkPerlinNoiseShader2::Type fType; - GrCoordTransform fCoordTransform; - int fNumOctaves; - bool fStitchTiles; - GrTextureAccess fPermutationsAccess; - GrTextureAccess fNoiseAccess; - SkPerlinNoiseShader2::PaintingData *fPaintingData; + SkPerlinNoiseShader2::Type fType; + GrCoordTransform fCoordTransform; + int fNumOctaves; + bool fStitchTiles; + TextureSampler fPermutationsSampler; + TextureSampler fNoiseSampler; + SkPerlinNoiseShader2::PaintingData* fPaintingData; private: typedef GrFragmentProcessor INHERITED; @@ -1093,24 +1093,24 @@ private: const SkMatrix& matrix) : fOctaves(octaves) , fZ(z) - , fPermutationsAccess(permutationsTexture) - , fGradientAccess(gradientTexture) + , fPermutationsSampler(permutationsTexture) + , fGradientSampler(gradientTexture) , fPaintingData(paintingData) { this->initClassID(); - this->addTextureAccess(&fPermutationsAccess); - this->addTextureAccess(&fGradientAccess); + this->addTextureSampler(&fPermutationsSampler); + this->addTextureSampler(&fGradientSampler); fCoordTransform.reset(matrix); this->addCoordTransform(&fCoordTransform); } GR_DECLARE_FRAGMENT_PROCESSOR_TEST; - GrCoordTransform fCoordTransform; - int fOctaves; - SkScalar fZ; - GrTextureAccess fPermutationsAccess; - GrTextureAccess fGradientAccess; - SkPerlinNoiseShader2::PaintingData *fPaintingData; + GrCoordTransform fCoordTransform; + int fOctaves; + SkScalar fZ; + TextureSampler fPermutationsSampler; + TextureSampler fGradientSampler; + SkPerlinNoiseShader2::PaintingData* fPaintingData; private: typedef GrFragmentProcessor INHERITED; diff --git a/gn/gpu.gni b/gn/gpu.gni index cc72f4bc17..6a523847e1 100644 --- a/gn/gpu.gni +++ b/gn/gpu.gni @@ -35,7 +35,6 @@ skia_gpu_sources = [ "$_include/gpu/GrTexture.h", "$_include/gpu/GrTextureParams.h", "$_include/gpu/GrTextureProvider.h", - "$_include/gpu/GrTextureAccess.h", "$_include/gpu/GrTestUtils.h", "$_include/gpu/GrTypes.h", "$_include/gpu/GrTypesPriv.h", @@ -204,7 +203,6 @@ skia_gpu_sources = [ "$_src/gpu/GrTextureRenderTargetProxy.cpp", "$_src/gpu/GrTextureToYUVPlanes.cpp", "$_src/gpu/GrTextureToYUVPlanes.h", - "$_src/gpu/GrTextureAccess.cpp", "$_src/gpu/GrTRecorder.h", "$_src/gpu/GrUserStencilSettings.h", "$_src/gpu/GrWindowRectangles.h", diff --git a/include/gpu/GrFragmentProcessor.h b/include/gpu/GrFragmentProcessor.h index 28b9e0bd4d..30e92f6e8d 100644 --- a/include/gpu/GrFragmentProcessor.h +++ b/include/gpu/GrFragmentProcessor.h @@ -183,10 +183,10 @@ public: &GrFragmentProcessor::numCoordTransforms, &GrFragmentProcessor::coordTransform>; - using TextureAccessIter = FPItemIter; + &GrProcessor::numTextureSamplers, + &GrProcessor::textureSampler>; protected: /** diff --git a/include/gpu/GrProcessor.h b/include/gpu/GrProcessor.h index 7c9662e585..3d56bd14e4 100644 --- a/include/gpu/GrProcessor.h +++ b/include/gpu/GrProcessor.h @@ -11,7 +11,6 @@ #include "GrColor.h" #include "GrProcessorUnitTest.h" #include "GrProgramElement.h" -#include "GrTextureAccess.h" #include "GrBufferAccess.h" #include "SkMath.h" #include "SkString.h" @@ -59,6 +58,8 @@ private: */ class GrProcessor : public GrProgramElement { public: + class TextureSampler; + virtual ~GrProcessor(); /** Human-meaningful string to identify this prcoessor; may be embedded @@ -72,14 +73,11 @@ public: return str; } - int numTextures() const { return fTextureAccesses.count(); } + int numTextureSamplers() const { return fTextureSamplers.count(); } /** Returns the access pattern for the texture at index. index must be valid according to - numTextures(). */ - const GrTextureAccess& textureAccess(int index) const { return *fTextureAccesses[index]; } - - /** Shortcut for textureAccess(index).texture(); */ - GrTexture* texture(int index) const { return this->textureAccess(index).getTexture(); } + numTextureSamplers(). */ + const TextureSampler& textureSampler(int index) const { return *fTextureSamplers[index]; } int numBuffers() const { return fBufferAccesses.count(); } @@ -125,11 +123,11 @@ protected: /** * Subclasses call these from their constructor to register sampler sources. The processor * subclass manages the lifetime of the objects (these functions only store pointers). The - * GrTextureAccess and/or GrBufferAccess instances are typically member fields of the + * TextureSampler and/or GrBufferAccess instances are typically member fields of the * GrProcessor subclass. These must only be called from the constructor because GrProcessors * are immutable. */ - void addTextureAccess(const GrTextureAccess* textureAccess); + void addTextureSampler(const TextureSampler*); void addBufferAccess(const GrBufferAccess* bufferAccess); bool hasSameSamplers(const GrProcessor&) const; @@ -171,12 +169,66 @@ private: static int32_t gCurrProcessorClassID; RequiredFeatures fRequiredFeatures; - SkSTArray<4, const GrTextureAccess*, true> fTextureAccesses; - SkSTArray<2, const GrBufferAccess*, true> fBufferAccesses; + SkSTArray<4, const TextureSampler*, true> fTextureSamplers; + SkSTArray<2, const GrBufferAccess*, true> fBufferAccesses; typedef GrProgramElement INHERITED; }; GR_MAKE_BITFIELD_OPS(GrProcessor::RequiredFeatures); +/** + * Used to represent a texture that is required by a GrProcessor. It holds a GrTexture along with + * an associated GrTextureParams + */ +class GrProcessor::TextureSampler : public SkNoncopyable { +public: + /** + * Must be initialized before adding to a GrProcessor's texture access list. + */ + TextureSampler(); + + TextureSampler(GrTexture*, const GrTextureParams&); + + explicit TextureSampler(GrTexture*, + GrTextureParams::FilterMode = GrTextureParams::kNone_FilterMode, + SkShader::TileMode tileXAndY = SkShader::kClamp_TileMode, + GrShaderFlags visibility = kFragment_GrShaderFlag); + + void reset(GrTexture*, const GrTextureParams&, + GrShaderFlags visibility = kFragment_GrShaderFlag); + void reset(GrTexture*, + GrTextureParams::FilterMode = GrTextureParams::kNone_FilterMode, + SkShader::TileMode tileXAndY = SkShader::kClamp_TileMode, + GrShaderFlags visibility = kFragment_GrShaderFlag); + + bool operator==(const TextureSampler& that) const { + return this->getTexture() == that.getTexture() && + fParams == that.fParams && + fVisibility == that.fVisibility; + } + + bool operator!=(const TextureSampler& other) const { return !(*this == other); } + + GrTexture* getTexture() const { return fTexture.get(); } + GrShaderFlags getVisibility() const { return fVisibility; } + + /** + * For internal use by GrProcessor. + */ + const GrGpuResourceRef* getProgramTexture() const { return &fTexture; } + + const GrTextureParams& getParams() const { return fParams; } + +private: + + typedef GrTGpuResourceRef ProgramTexture; + + ProgramTexture fTexture; + GrTextureParams fParams; + GrShaderFlags fVisibility; + + typedef SkNoncopyable INHERITED; +}; + #endif diff --git a/include/gpu/GrProcessorUnitTest.h b/include/gpu/GrProcessorUnitTest.h index 3e9fe5e44b..d398aae9e4 100644 --- a/include/gpu/GrProcessorUnitTest.h +++ b/include/gpu/GrProcessorUnitTest.h @@ -36,7 +36,7 @@ sk_sp MakeChildFP(GrProcessorTestData*); /* * GrProcessorTestData is an argument struct to TestCreate functions * fTextures are valid textures that can optionally be used to construct - * GrTextureAccesses. The first texture has config kSkia8888_GrPixelConfig and the second has + * TextureSampler. The first texture has config kSkia8888_GrPixelConfig and the second has * kAlpha_8_GrPixelConfig. TestCreate functions are also free to create additional textures using * the GrContext. */ diff --git a/include/gpu/GrTextureAccess.h b/include/gpu/GrTextureAccess.h deleted file mode 100644 index 1b5de0ce99..0000000000 --- a/include/gpu/GrTextureAccess.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#ifndef GrTextureAccess_DEFINED -#define GrTextureAccess_DEFINED - -#include "GrGpuResourceRef.h" -#include "GrTexture.h" -#include "GrTextureParams.h" -#include "SkRefCnt.h" -#include "SkShader.h" - -/** - * Used to represent a texture that is required by a GrProcessor. It holds a GrTexture along with - * an associated GrTextureParams - */ -class GrTextureAccess : public SkNoncopyable { -public: - /** - * Must be initialized before adding to a GrProcessor's texture access list. - */ - GrTextureAccess(); - - GrTextureAccess(GrTexture*, const GrTextureParams&); - - explicit GrTextureAccess(GrTexture*, - GrTextureParams::FilterMode = GrTextureParams::kNone_FilterMode, - SkShader::TileMode tileXAndY = SkShader::kClamp_TileMode, - GrShaderFlags visibility = kFragment_GrShaderFlag); - - void reset(GrTexture*, const GrTextureParams&, - GrShaderFlags visibility = kFragment_GrShaderFlag); - void reset(GrTexture*, - GrTextureParams::FilterMode = GrTextureParams::kNone_FilterMode, - SkShader::TileMode tileXAndY = SkShader::kClamp_TileMode, - GrShaderFlags visibility = kFragment_GrShaderFlag); - - bool operator==(const GrTextureAccess& that) const { - return this->getTexture() == that.getTexture() && - fParams == that.fParams && - fVisibility == that.fVisibility; - } - - bool operator!=(const GrTextureAccess& other) const { return !(*this == other); } - - GrTexture* getTexture() const { return fTexture.get(); } - GrShaderFlags getVisibility() const { return fVisibility; } - - /** - * For internal use by GrProcessor. - */ - const GrGpuResourceRef* getProgramTexture() const { return &fTexture; } - - const GrTextureParams& getParams() const { return fParams; } - -private: - - typedef GrTGpuResourceRef ProgramTexture; - - ProgramTexture fTexture; - GrTextureParams fParams; - GrShaderFlags fVisibility; - - typedef SkNoncopyable INHERITED; -}; - -#endif diff --git a/include/gpu/GrXferProcessor.h b/include/gpu/GrXferProcessor.h index 5317c187e2..3bc9eddb55 100644 --- a/include/gpu/GrXferProcessor.h +++ b/include/gpu/GrXferProcessor.h @@ -277,7 +277,7 @@ private: bool fWillReadDstColor; bool fDstReadUsesMixedSamples; SkIPoint fDstTextureOffset; - GrTextureAccess fDstTexture; + TextureSampler fDstTexture; typedef GrFragmentProcessor INHERITED; }; diff --git a/include/gpu/SkGr.h b/include/gpu/SkGr.h index fae0c76c6d..ffad5cf442 100644 --- a/include/gpu/SkGr.h +++ b/include/gpu/SkGr.h @@ -9,7 +9,7 @@ #define SkGr_DEFINED #include "GrColor.h" -#include "GrTextureAccess.h" +#include "GrTextureParams.h" #include "SkColor.h" #include "SkColorPriv.h" #include "SkFilterQuality.h" @@ -19,7 +19,6 @@ class GrCaps; class GrColorSpaceXform; class GrContext; class GrTexture; -class GrTextureParams; class SkBitmap; //////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/SkLightingShader.cpp b/src/core/SkLightingShader.cpp index 16b0ddd90d..51549f59a0 100644 --- a/src/core/SkLightingShader.cpp +++ b/src/core/SkLightingShader.cpp @@ -105,7 +105,6 @@ private: #include "GrCoordTransform.h" #include "GrFragmentProcessor.h" #include "GrInvariantOutput.h" -#include "GrTextureAccess.h" #include "glsl/GrGLSLFragmentProcessor.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" #include "glsl/GrGLSLProgramDataManager.h" diff --git a/src/core/SkShadowShader.cpp b/src/core/SkShadowShader.cpp index 8737b32cac..9757298e94 100644 --- a/src/core/SkShadowShader.cpp +++ b/src/core/SkShadowShader.cpp @@ -140,8 +140,8 @@ public: fTexture[fNumNonAmbLights] = sk_sp(shadowMap->asTextureRef(context, GrTextureParams::ClampNoFilter(), SkDestinationSurfaceColorMode::kLegacy)); - fDepthMapAccess[fNumNonAmbLights].reset(fTexture[fNumNonAmbLights].get()); - this->addTextureAccess(&fDepthMapAccess[fNumNonAmbLights]); + fDepthMapSampler[fNumNonAmbLights].reset(fTexture[fNumNonAmbLights].get()); + this->addTextureSampler(&fDepthMapSampler[fNumNonAmbLights]); fDepthMapHeight[fNumNonAmbLights] = shadowMap->height(); fDepthMapWidth[fNumNonAmbLights] = shadowMap->width(); @@ -628,7 +628,7 @@ private: bool fIsRadialLight[SkShadowShader::kMaxNonAmbientLights]; SkVector3 fLightDirOrPos[SkShadowShader::kMaxNonAmbientLights]; SkColor3f fLightColor[SkShadowShader::kMaxNonAmbientLights]; - GrTextureAccess fDepthMapAccess[SkShadowShader::kMaxNonAmbientLights]; + TextureSampler fDepthMapSampler[SkShadowShader::kMaxNonAmbientLights]; sk_sp fTexture[SkShadowShader::kMaxNonAmbientLights]; int fDepthMapWidth[SkShadowShader::kMaxNonAmbientLights]; diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.cpp b/src/effects/GrAlphaThresholdFragmentProcessor.cpp index 442acd0129..9a131f8d47 100644 --- a/src/effects/GrAlphaThresholdFragmentProcessor.cpp +++ b/src/effects/GrAlphaThresholdFragmentProcessor.cpp @@ -10,7 +10,6 @@ #if SK_SUPPORT_GPU #include "GrInvariantOutput.h" -#include "GrTextureAccess.h" #include "SkRefCnt.h" #include "glsl/GrGLSLColorSpaceXformHelper.h" @@ -49,17 +48,17 @@ GrAlphaThresholdFragmentProcessor::GrAlphaThresholdFragmentProcessor( , fOuterThreshold(outerThreshold) , fImageCoordTransform(GrCoordTransform::MakeDivByTextureWHMatrix(texture), texture, GrTextureParams::kNone_FilterMode) - , fImageTextureAccess(texture) + , fImageTextureSampler(texture) , fColorSpaceXform(std::move(colorSpaceXform)) , fMaskCoordTransform(make_div_and_translate_matrix(maskTexture, -bounds.x(), -bounds.y()), maskTexture, GrTextureParams::kNone_FilterMode) - , fMaskTextureAccess(maskTexture) { + , fMaskTextureSampler(maskTexture) { this->initClassID(); this->addCoordTransform(&fImageCoordTransform); - this->addTextureAccess(&fImageTextureAccess); + this->addTextureSampler(&fImageTextureSampler); this->addCoordTransform(&fMaskCoordTransform); - this->addTextureAccess(&fMaskTextureAccess); + this->addTextureSampler(&fMaskTextureSampler); } bool GrAlphaThresholdFragmentProcessor::onIsEqual(const GrFragmentProcessor& sBase) const { @@ -69,9 +68,10 @@ bool GrAlphaThresholdFragmentProcessor::onIsEqual(const GrFragmentProcessor& sBa } void GrAlphaThresholdFragmentProcessor::onComputeInvariantOutput(GrInvariantOutput* inout) const { - if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) { + GrPixelConfig config = this->textureSampler(0).getTexture()->config(); + if (GrPixelConfigIsAlphaOnly(config)) { inout->mulByUnknownSingleComponent(); - } else if (GrPixelConfigIsOpaque(this->texture(0)->config()) && fOuterThreshold >= 1.f) { + } else if (GrPixelConfigIsOpaque(config) && fOuterThreshold >= 1.f) { inout->mulByUnknownOpaqueFourComponents(); } else { inout->mulByUnknownFourComponents(); diff --git a/src/effects/GrAlphaThresholdFragmentProcessor.h b/src/effects/GrAlphaThresholdFragmentProcessor.h index c5b8d4ede2..9805a22128 100644 --- a/src/effects/GrAlphaThresholdFragmentProcessor.h +++ b/src/effects/GrAlphaThresholdFragmentProcessor.h @@ -55,11 +55,11 @@ private: float fInnerThreshold; float fOuterThreshold; GrCoordTransform fImageCoordTransform; - GrTextureAccess fImageTextureAccess; + TextureSampler fImageTextureSampler; // Color space transform is for the image (not the mask) sk_sp fColorSpaceXform; GrCoordTransform fMaskCoordTransform; - GrTextureAccess fMaskTextureAccess; + TextureSampler fMaskTextureSampler; typedef GrFragmentProcessor INHERITED; }; diff --git a/src/effects/GrCircleBlurFragmentProcessor.cpp b/src/effects/GrCircleBlurFragmentProcessor.cpp index d5ed6b712a..b8b266045d 100644 --- a/src/effects/GrCircleBlurFragmentProcessor.cpp +++ b/src/effects/GrCircleBlurFragmentProcessor.cpp @@ -92,9 +92,9 @@ GrCircleBlurFragmentProcessor::GrCircleBlurFragmentProcessor(const SkRect& circl : fCircle(circle) , fSolidRadius(solidRadius) , fTextureRadius(textureRadius) - , fBlurProfileAccess(blurProfile, GrTextureParams::kBilerp_FilterMode) { + , fBlurProfileSampler(blurProfile, GrTextureParams::kBilerp_FilterMode) { this->initClassID(); - this->addTextureAccess(&fBlurProfileAccess); + this->addTextureSampler(&fBlurProfileSampler); this->setWillReadFragmentPosition(); } diff --git a/src/effects/GrCircleBlurFragmentProcessor.h b/src/effects/GrCircleBlurFragmentProcessor.h index 66072887da..73e5d04b05 100644 --- a/src/effects/GrCircleBlurFragmentProcessor.h +++ b/src/effects/GrCircleBlurFragmentProcessor.h @@ -64,7 +64,7 @@ private: SkRect fCircle; SkScalar fSolidRadius; float fTextureRadius; - GrTextureAccess fBlurProfileAccess; + TextureSampler fBlurProfileSampler; GR_DECLARE_FRAGMENT_PROCESSOR_TEST; diff --git a/src/effects/SkArithmeticMode_gpu.h b/src/effects/SkArithmeticMode_gpu.h index 4704399d24..28351fc5b5 100644 --- a/src/effects/SkArithmeticMode_gpu.h +++ b/src/effects/SkArithmeticMode_gpu.h @@ -15,7 +15,6 @@ #include "GrCaps.h" #include "GrCoordTransform.h" #include "GrFragmentProcessor.h" -#include "GrTextureAccess.h" #include "GrTypes.h" #include "GrXferProcessor.h" diff --git a/src/effects/SkBlurMaskFilter.cpp b/src/effects/SkBlurMaskFilter.cpp index 0a98fa8c3a..84cb201906 100644 --- a/src/effects/SkBlurMaskFilter.cpp +++ b/src/effects/SkBlurMaskFilter.cpp @@ -825,7 +825,7 @@ private: SkRect fRect; float fSigma; - GrTextureAccess fBlurProfileAccess; + TextureSampler fBlurProfileSampler; GrSLPrecision fPrecision; GR_DECLARE_FRAGMENT_PROCESSOR_TEST; @@ -975,10 +975,10 @@ GrRectBlurEffect::GrRectBlurEffect(const SkRect& rect, float sigma, GrTexture *b GrSLPrecision precision) : fRect(rect) , fSigma(sigma) - , fBlurProfileAccess(blurProfile) + , fBlurProfileSampler(blurProfile) , fPrecision(precision) { this->initClassID(); - this->addTextureAccess(&fBlurProfileAccess); + this->addTextureSampler(&fBlurProfileSampler); this->setWillReadFragmentPosition(); } @@ -1093,7 +1093,7 @@ private: SkRRect fRRect; float fSigma; - GrTextureAccess fNinePatchAccess; + TextureSampler fNinePatchSampler; GR_DECLARE_FRAGMENT_PROCESSOR_TEST; @@ -1205,9 +1205,9 @@ void GrRRectBlurEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const GrRRectBlurEffect::GrRRectBlurEffect(float sigma, const SkRRect& rrect, GrTexture *ninePatchTexture) : fRRect(rrect), fSigma(sigma), - fNinePatchAccess(ninePatchTexture) { + fNinePatchSampler(ninePatchTexture) { this->initClassID(); - this->addTextureAccess(&fNinePatchAccess); + this->addTextureSampler(&fNinePatchSampler); this->setWillReadFragmentPosition(); } diff --git a/src/effects/SkColorCubeFilter.cpp b/src/effects/SkColorCubeFilter.cpp index 2c8ab6f225..24991552eb 100644 --- a/src/effects/SkColorCubeFilter.cpp +++ b/src/effects/SkColorCubeFilter.cpp @@ -170,7 +170,7 @@ public: const char* name() const override { return "ColorCube"; } - int colorCubeSize() const { return fColorCubeAccess.getTexture()->width(); } + int colorCubeSize() const { return fColorCubeSampler.getTexture()->width(); } void onComputeInvariantOutput(GrInvariantOutput*) const override; @@ -201,7 +201,7 @@ private: GrColorCubeEffect(GrTexture* colorCube); - GrTextureAccess fColorCubeAccess; + TextureSampler fColorCubeSampler; typedef GrFragmentProcessor INHERITED; }; @@ -209,9 +209,9 @@ private: /////////////////////////////////////////////////////////////////////////////// GrColorCubeEffect::GrColorCubeEffect(GrTexture* colorCube) - : fColorCubeAccess(colorCube, GrTextureParams::kBilerp_FilterMode) { + : fColorCubeSampler(colorCube, GrTextureParams::kBilerp_FilterMode) { this->initClassID(); - this->addTextureAccess(&fColorCubeAccess); + this->addTextureSampler(&fColorCubeSampler); } GrColorCubeEffect::~GrColorCubeEffect() { diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp index 8cb610e3b1..b1f46cd914 100644 --- a/src/effects/SkDisplacementMapEffect.cpp +++ b/src/effects/SkDisplacementMapEffect.cpp @@ -259,10 +259,10 @@ private: GR_DECLARE_FRAGMENT_PROCESSOR_TEST; GrCoordTransform fDisplacementTransform; - GrTextureAccess fDisplacementAccess; + TextureSampler fDisplacementSampler; GrCoordTransform fColorTransform; GrTextureDomain fDomain; - GrTextureAccess fColorAccess; + TextureSampler fColorSampler; SkDisplacementMapEffect::ChannelSelectorType fXChannelSelector; SkDisplacementMapEffect::ChannelSelectorType fYChannelSelector; SkVector fScale; @@ -486,19 +486,19 @@ GrDisplacementMapEffect::GrDisplacementMapEffect( GrTexture* color, const SkISize& colorDimensions) : fDisplacementTransform(offsetMatrix, displacement, GrTextureParams::kNone_FilterMode) - , fDisplacementAccess(displacement) + , fDisplacementSampler(displacement) , fColorTransform(color, GrTextureParams::kNone_FilterMode) , fDomain(GrTextureDomain::MakeTexelDomain(color, SkIRect::MakeSize(colorDimensions)), GrTextureDomain::kDecal_Mode) - , fColorAccess(color) + , fColorSampler(color) , fXChannelSelector(xChannelSelector) , fYChannelSelector(yChannelSelector) , fScale(scale) { this->initClassID(); this->addCoordTransform(&fDisplacementTransform); - this->addTextureAccess(&fDisplacementAccess); + this->addTextureSampler(&fDisplacementSampler); this->addCoordTransform(&fColorTransform); - this->addTextureAccess(&fColorAccess); + this->addTextureSampler(&fColorSampler); } GrDisplacementMapEffect::~GrDisplacementMapEffect() { @@ -625,7 +625,7 @@ void GrGLDisplacementMapEffect::emitCode(EmitArgs& args) { void GrGLDisplacementMapEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor& proc) { const GrDisplacementMapEffect& displacementMap = proc.cast(); - GrTexture* colorTex = displacementMap.texture(1); + GrTexture* colorTex = displacementMap.textureSampler(1).getTexture(); SkScalar scaleX = displacementMap.scale().fX / colorTex->width(); SkScalar scaleY = displacementMap.scale().fY / colorTex->height(); pdman.set2f(fScaleUni, SkScalarToFloat(scaleX), diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp index da6210c7d1..154ebc67de 100644 --- a/src/effects/SkLightingImageFilter.cpp +++ b/src/effects/SkLightingImageFilter.cpp @@ -1900,7 +1900,7 @@ void GrGLLightingEffect::onSetData(const GrGLSLProgramDataManager& pdman, fLight = lighting.light()->createGLLight(); } - GrTexture* texture = lighting.texture(0); + GrTexture* texture = lighting.textureSampler(0).getTexture(); float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f; pdman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->height()); pdman.set1f(fSurfaceScaleUni, lighting.surfaceScale()); diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp index cd35d655c4..6e581ccea4 100644 --- a/src/effects/SkMorphologyImageFilter.cpp +++ b/src/effects/SkMorphologyImageFilter.cpp @@ -294,7 +294,7 @@ void GrGLMorphologyEffect::GenKey(const GrProcessor& proc, void GrGLMorphologyEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor& proc) { const GrMorphologyEffect& m = proc.cast(); - GrTexture& texture = *m.texture(0); + GrTexture& texture = *m.textureSampler(0).getTexture(); float pixelSize = 0.0f; switch (m.direction()) { diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp index 0b34d161b1..dc28e447ef 100644 --- a/src/effects/SkPerlinNoiseShader.cpp +++ b/src/effects/SkPerlinNoiseShader.cpp @@ -548,12 +548,12 @@ private: : fType(type) , fNumOctaves(numOctaves) , fStitchTiles(stitchTiles) - , fPermutationsAccess(permutationsTexture) - , fNoiseAccess(noiseTexture) + , fPermutationsSampler(permutationsTexture) + , fNoiseSampler(noiseTexture) , fPaintingData(paintingData) { this->initClassID(); - this->addTextureAccess(&fPermutationsAccess); - this->addTextureAccess(&fNoiseAccess); + this->addTextureSampler(&fPermutationsSampler); + this->addTextureSampler(&fNoiseSampler); fCoordTransform.reset(matrix); this->addCoordTransform(&fCoordTransform); } @@ -564,8 +564,8 @@ private: GrCoordTransform fCoordTransform; int fNumOctaves; bool fStitchTiles; - GrTextureAccess fPermutationsAccess; - GrTextureAccess fNoiseAccess; + TextureSampler fPermutationsSampler; + TextureSampler fNoiseSampler; SkPerlinNoiseShader::PaintingData *fPaintingData; private: diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp index cd786dfee6..90a785611b 100644 --- a/src/effects/SkTableColorFilter.cpp +++ b/src/effects/SkTableColorFilter.cpp @@ -365,7 +365,7 @@ private: GR_DECLARE_FRAGMENT_PROCESSOR_TEST; - GrTextureAccess fTextureAccess; + TextureSampler fTextureSampler; // currently not used in shader code, just to assist onComputeInvariantOutput(). unsigned fFlags; @@ -485,12 +485,12 @@ sk_sp ColorTableEffect::Make(GrContext* context, SkBitmap b ColorTableEffect::ColorTableEffect(GrTexture* texture, GrTextureStripAtlas* atlas, int row, unsigned flags) - : fTextureAccess(texture) + : fTextureSampler(texture) , fFlags(flags) , fAtlas(atlas) , fRow(row) { this->initClassID(); - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); } ColorTableEffect::~ColorTableEffect() { diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp index 3bf569c888..fcd0bd3ba9 100644 --- a/src/effects/gradients/SkGradientShader.cpp +++ b/src/effects/gradients/SkGradientShader.cpp @@ -1659,7 +1659,7 @@ GrGradientEffect::GrGradientEffect(const CreateArgs& args) { if (-1 != fRow) { fYCoord = fAtlas->getYOffset(fRow)+SK_ScalarHalf*fAtlas->getNormalizedTexelHeight(); fCoordTransform.reset(*args.fMatrix, fAtlas->getTexture(), params.filterMode()); - fTextureAccess.reset(fAtlas->getTexture(), params); + fTextureSampler.reset(fAtlas->getTexture(), params); } else { sk_sp texture(GrRefCachedBitmapTexture( args.fContext, bitmap, params, @@ -1668,11 +1668,11 @@ GrGradientEffect::GrGradientEffect(const CreateArgs& args) { return; } fCoordTransform.reset(*args.fMatrix, texture.get(), params.filterMode()); - fTextureAccess.reset(texture.get(), params); + fTextureSampler.reset(texture.get(), params); fYCoord = SK_ScalarHalf; } - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); break; } diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h index 2e447ca1d7..120832f33c 100644 --- a/src/effects/gradients/SkGradientShaderPriv.h +++ b/src/effects/gradients/SkGradientShaderPriv.h @@ -439,7 +439,7 @@ private: SkShader::TileMode fTileMode; GrCoordTransform fCoordTransform; - GrTextureAccess fTextureAccess; + TextureSampler fTextureSampler; SkScalar fYCoord; GrTextureStripAtlas* fAtlas; int fRow; diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp index 875c50e88c..872a7f544e 100644 --- a/src/gpu/GrPipeline.cpp +++ b/src/gpu/GrPipeline.cpp @@ -176,9 +176,9 @@ GrPipeline* GrPipeline::CreateAt(void* memory, const CreateArgs& args, static void add_dependencies_for_processor(const GrFragmentProcessor* proc, GrRenderTarget* rt) { GrFragmentProcessor::TextureAccessIter iter(proc); - while (const GrTextureAccess* access = iter.next()) { + while (const GrProcessor::TextureSampler* sampler = iter.next()) { SkASSERT(rt->getLastOpList()); - rt->getLastOpList()->addDependency(access->getTexture()); + rt->getLastOpList()->addDependency(sampler->getTexture()); } } @@ -189,8 +189,8 @@ void GrPipeline::addDependenciesTo(GrRenderTarget* rt) const { const GrXferProcessor& xfer = this->getXferProcessor(); - for (int i = 0; i < xfer.numTextures(); ++i) { - GrTexture* texture = xfer.textureAccess(i).getTexture(); + for (int i = 0; i < xfer.numTextureSamplers(); ++i) { + GrTexture* texture = xfer.textureSampler(i).getTexture(); SkASSERT(rt->getLastOpList()); rt->getLastOpList()->addDependency(texture); } diff --git a/src/gpu/GrProcessor.cpp b/src/gpu/GrProcessor.cpp index 7d7ce9b461..f2b49988a7 100644 --- a/src/gpu/GrProcessor.cpp +++ b/src/gpu/GrProcessor.cpp @@ -10,6 +10,8 @@ #include "GrGeometryProcessor.h" #include "GrInvariantOutput.h" #include "GrMemoryPool.h" +#include "GrTextureParams.h" +#include "GrTexturePriv.h" #include "GrXferProcessor.h" #include "SkSpinlock.h" @@ -113,8 +115,8 @@ int32_t GrProcessor::gCurrProcessorClassID = GrProcessor::kIllegalProcessorClass GrProcessor::~GrProcessor() {} -void GrProcessor::addTextureAccess(const GrTextureAccess* access) { - fTextureAccesses.push_back(access); +void GrProcessor::addTextureSampler(const TextureSampler* access) { + fTextureSamplers.push_back(access); this->addGpuResource(access->getProgramTexture()); } @@ -132,11 +134,12 @@ void GrProcessor::operator delete(void* target) { } bool GrProcessor::hasSameSamplers(const GrProcessor& that) const { - if (this->numTextures() != that.numTextures() || this->numBuffers() != that.numBuffers()) { + if (this->numTextureSamplers() != that.numTextureSamplers() || + this->numBuffers() != that.numBuffers()) { return false; } - for (int i = 0; i < this->numTextures(); ++i) { - if (this->textureAccess(i) != that.textureAccess(i)) { + for (int i = 0; i < this->numTextureSamplers(); ++i) { + if (this->textureSampler(i) != that.textureSampler(i)) { return false; } } @@ -150,6 +153,42 @@ bool GrProcessor::hasSameSamplers(const GrProcessor& that) const { /////////////////////////////////////////////////////////////////////////////////////////////////// +GrProcessor::TextureSampler::TextureSampler() {} + +GrProcessor::TextureSampler::TextureSampler(GrTexture* texture, const GrTextureParams& params) { + this->reset(texture, params); +} + +GrProcessor::TextureSampler::TextureSampler(GrTexture* texture, + GrTextureParams::FilterMode filterMode, + SkShader::TileMode tileXAndY, + GrShaderFlags visibility) { + this->reset(texture, filterMode, tileXAndY, visibility); +} + +void GrProcessor::TextureSampler::reset(GrTexture* texture, + const GrTextureParams& params, + GrShaderFlags visibility) { + SkASSERT(texture); + fTexture.set(SkRef(texture), kRead_GrIOType); + fParams = params; + fParams.setFilterMode(SkTMin(params.filterMode(), texture->texturePriv().highestFilterMode())); + fVisibility = visibility; +} + +void GrProcessor::TextureSampler::reset(GrTexture* texture, + GrTextureParams::FilterMode filterMode, + SkShader::TileMode tileXAndY, + GrShaderFlags visibility) { + SkASSERT(texture); + fTexture.set(SkRef(texture), kRead_GrIOType); + filterMode = SkTMin(filterMode, texture->texturePriv().highestFilterMode()); + fParams.reset(tileXAndY, filterMode); + fVisibility = visibility; +} + +/////////////////////////////////////////////////////////////////////////////////////////////////// + // Initial static variable from GrXPFactory int32_t GrXPFactory::gCurrXPFClassID = GrXPFactory::kIllegalXPFClassID; diff --git a/src/gpu/GrProgramDesc.cpp b/src/gpu/GrProgramDesc.cpp index ea2a528319..d9afbac85b 100644 --- a/src/gpu/GrProgramDesc.cpp +++ b/src/gpu/GrProgramDesc.cpp @@ -34,8 +34,8 @@ static uint16_t sampler_key(GrSLType samplerType, GrPixelConfig config, GrShader static void add_sampler_keys(GrProcessorKeyBuilder* b, const GrProcessor& proc, const GrGLSLCaps& caps) { - int numTextures = proc.numTextures(); - int numSamplers = numTextures + proc.numBuffers(); + int numTextureSamplers = proc.numTextureSamplers(); + int numSamplers = numTextureSamplers + proc.numBuffers(); // Need two bytes per key (swizzle, sampler type, and precision). int word32Count = (numSamplers + 1) / 2; if (0 == word32Count) { @@ -43,14 +43,14 @@ static void add_sampler_keys(GrProcessorKeyBuilder* b, const GrProcessor& proc, } uint16_t* k16 = SkTCast(b->add32n(word32Count)); int i = 0; - for (; i < numTextures; ++i) { - const GrTextureAccess& access = proc.textureAccess(i); - const GrTexture* tex = access.getTexture(); + for (; i < numTextureSamplers; ++i) { + const GrProcessor::TextureSampler& textureSampler = proc.textureSampler(i); + const GrTexture* tex = textureSampler.getTexture(); k16[i] = sampler_key(tex->texturePriv().samplerType(), tex->config(), - access.getVisibility(), caps); + textureSampler.getVisibility(), caps); } for (; i < numSamplers; ++i) { - const GrBufferAccess& access = proc.bufferAccess(i - numTextures); + const GrBufferAccess& access = proc.bufferAccess(i - numTextureSamplers); k16[i] = sampler_key(kBufferSampler_GrSLType, access.texelConfig(), access.visibility(), caps); } diff --git a/src/gpu/GrTextureAccess.cpp b/src/gpu/GrTextureAccess.cpp deleted file mode 100644 index bddbd5a2d7..0000000000 --- a/src/gpu/GrTextureAccess.cpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2012 Google Inc. - * - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -#include "GrTextureAccess.h" -#include "GrColor.h" -#include "GrTexture.h" -#include "GrTexturePriv.h" - -GrTextureAccess::GrTextureAccess() {} - -GrTextureAccess::GrTextureAccess(GrTexture* texture, const GrTextureParams& params) { - this->reset(texture, params); -} - -GrTextureAccess::GrTextureAccess(GrTexture* texture, - GrTextureParams::FilterMode filterMode, - SkShader::TileMode tileXAndY, - GrShaderFlags visibility) { - this->reset(texture, filterMode, tileXAndY, visibility); -} - -void GrTextureAccess::reset(GrTexture* texture, - const GrTextureParams& params, - GrShaderFlags visibility) { - SkASSERT(texture); - fTexture.set(SkRef(texture), kRead_GrIOType); - fParams = params; - fParams.setFilterMode(SkTMin(params.filterMode(), texture->texturePriv().highestFilterMode())); - fVisibility = visibility; -} - -void GrTextureAccess::reset(GrTexture* texture, - GrTextureParams::FilterMode filterMode, - SkShader::TileMode tileXAndY, - GrShaderFlags visibility) { - SkASSERT(texture); - fTexture.set(SkRef(texture), kRead_GrIOType); - filterMode = SkTMin(filterMode, texture->texturePriv().highestFilterMode()); - fParams.reset(tileXAndY, filterMode); - fVisibility = visibility; -} diff --git a/src/gpu/GrTexturePriv.h b/src/gpu/GrTexturePriv.h index e8721bc62c..8d6057ec3d 100644 --- a/src/gpu/GrTexturePriv.h +++ b/src/gpu/GrTexturePriv.h @@ -51,7 +51,7 @@ public: GrSLType samplerType() const { return fTexture->fSamplerType; } - /** The filter used is clamped to this value in GrTextureAccess. */ + /** The filter used is clamped to this value in GrProcessor::TextureSampler. */ GrTextureParams::FilterMode highestFilterMode() const { return fTexture->fHighestFilterMode; } void setMipColorMode(SkDestinationSurfaceColorMode colorMode) const { diff --git a/src/gpu/GrXferProcessor.cpp b/src/gpu/GrXferProcessor.cpp index 76e0ba0fc4..2769c1810e 100644 --- a/src/gpu/GrXferProcessor.cpp +++ b/src/gpu/GrXferProcessor.cpp @@ -26,7 +26,7 @@ GrXferProcessor::GrXferProcessor(const DstTexture* dstTexture, SkASSERT(willReadDstColor); fDstTexture.reset(dstTexture->texture()); fDstTextureOffset = dstTexture->offset(); - this->addTextureAccess(&fDstTexture); + this->addTextureSampler(&fDstTexture); this->setWillReadFragmentPosition(); } } diff --git a/src/gpu/effects/GrBicubicEffect.cpp b/src/gpu/effects/GrBicubicEffect.cpp index 737625ffed..17a492fa09 100644 --- a/src/gpu/effects/GrBicubicEffect.cpp +++ b/src/gpu/effects/GrBicubicEffect.cpp @@ -126,13 +126,13 @@ void GrGLBicubicEffect::emitCode(EmitArgs& args) { void GrGLBicubicEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor& processor) { const GrBicubicEffect& bicubicEffect = processor.cast(); - const GrTexture& texture = *processor.texture(0); + GrTexture* texture = processor.textureSampler(0).getTexture(); float imageIncrement[2]; - imageIncrement[0] = 1.0f / texture.width(); - imageIncrement[1] = 1.0f / texture.height(); + imageIncrement[0] = 1.0f / texture->width(); + imageIncrement[1] = 1.0f / texture->height(); pdman.set2fv(fImageIncrementUni, 1, imageIncrement); pdman.setMatrix4f(fCoefficientsUni, bicubicEffect.coefficients()); - fDomain.setData(pdman, bicubicEffect.domain(), texture.origin()); + fDomain.setData(pdman, bicubicEffect.domain(), texture->origin()); if (SkToBool(bicubicEffect.colorSpaceXform())) { pdman.setSkMatrix44(fColorSpaceXformUni, bicubicEffect.colorSpaceXform()->srcToDst()); } diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp index 197ac730b2..889a085d82 100644 --- a/src/gpu/effects/GrBitmapTextGeoProc.cpp +++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp @@ -30,8 +30,8 @@ public: varyingHandler->emitAttributes(cte); // compute numbers to be hardcoded to convert texture coordinates from int to float - SkASSERT(cte.numTextures() == 1); - SkDEBUGCODE(GrTexture* atlas = cte.textureAccess(0).getTexture()); + SkASSERT(cte.numTextureSamplers() == 1); + SkDEBUGCODE(GrTexture* atlas = cte.textureSampler(0).getTexture()); SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())); GrGLSLVertToFrag v(kVec2f_GrSLType); @@ -108,8 +108,8 @@ public: b->add32(key); // Currently we hardcode numbers to convert atlas coordinates to normalized floating point - SkASSERT(gp.numTextures() == 1); - GrTexture* atlas = gp.textureAccess(0).getTexture(); + SkASSERT(gp.numTextureSamplers() == 1); + GrTexture* atlas = gp.textureSampler(0).getTexture(); SkASSERT(atlas); b->add32(atlas->width()); b->add32(atlas->height()); @@ -130,7 +130,7 @@ GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture, : fColor(color) , fLocalMatrix(localMatrix) , fUsesLocalCoords(usesLocalCoords) - , fTextureAccess(texture, params) + , fTextureSampler(texture, params) , fInColor(nullptr) , fMaskFormat(format) { this->initClassID(); @@ -143,7 +143,7 @@ GrBitmapTextGeoProc::GrBitmapTextGeoProc(GrColor color, GrTexture* texture, } fInTextureCoords = &this->addVertexAttrib("inTextureCoords", kVec2us_GrVertexAttribType, kHigh_GrSLPrecision); - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); } void GrBitmapTextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps, diff --git a/src/gpu/effects/GrBitmapTextGeoProc.h b/src/gpu/effects/GrBitmapTextGeoProc.h index 226ae770e7..7e2df0a6e7 100644 --- a/src/gpu/effects/GrBitmapTextGeoProc.h +++ b/src/gpu/effects/GrBitmapTextGeoProc.h @@ -53,7 +53,7 @@ private: GrColor fColor; SkMatrix fLocalMatrix; bool fUsesLocalCoords; - GrTextureAccess fTextureAccess; + TextureSampler fTextureSampler; const Attribute* fInPosition; const Attribute* fInColor; const Attribute* fInTextureCoords; diff --git a/src/gpu/effects/GrConvolutionEffect.cpp b/src/gpu/effects/GrConvolutionEffect.cpp index 59f7ab19e3..d8a79d0f17 100644 --- a/src/gpu/effects/GrConvolutionEffect.cpp +++ b/src/gpu/effects/GrConvolutionEffect.cpp @@ -98,7 +98,7 @@ void GrGLConvolutionEffect::emitCode(EmitArgs& args) { void GrGLConvolutionEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor& processor) { const GrConvolutionEffect& conv = processor.cast(); - GrTexture& texture = *conv.texture(0); + GrTexture& texture = *conv.textureSampler(0).getTexture(); float imageIncrement[2] = { 0 }; float ySign = texture.origin() != kTopLeft_GrSurfaceOrigin ? 1.0f : -1.0f; diff --git a/src/gpu/effects/GrCustomXfermode.cpp b/src/gpu/effects/GrCustomXfermode.cpp index 8a54d4457a..8d5c5008d2 100644 --- a/src/gpu/effects/GrCustomXfermode.cpp +++ b/src/gpu/effects/GrCustomXfermode.cpp @@ -14,7 +14,6 @@ #include "GrPipeline.h" #include "GrProcessor.h" #include "GrTexture.h" -#include "GrTextureAccess.h" #include "SkXfermode.h" #include "glsl/GrGLSLBlend.h" #include "glsl/GrGLSLCaps.h" diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp index 7f9fd85e6b..a99e2af018 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp +++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp @@ -85,8 +85,8 @@ public: vertBuilder->codeAppendf("%s = %s;", uv.vsOut(), dfTexEffect.inTextureCoords()->fName); // compute numbers to be hardcoded to convert texture coordinates from float to int - SkASSERT(dfTexEffect.numTextures() == 1); - GrTexture* atlas = dfTexEffect.textureAccess(0).getTexture(); + SkASSERT(dfTexEffect.numTextureSamplers() == 1); + GrTexture* atlas = dfTexEffect.textureSampler(0).getTexture(); SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())); GrGLSLVertToFrag st(kVec2f_GrSLType); @@ -207,8 +207,8 @@ public: b->add32(key); // Currently we hardcode numbers to convert atlas coordinates to normalized floating point - SkASSERT(gp.numTextures() == 1); - GrTexture* atlas = gp.textureAccess(0).getTexture(); + SkASSERT(gp.numTextureSamplers() == 1); + GrTexture* atlas = gp.textureSampler(0).getTexture(); SkASSERT(atlas); b->add32(atlas->width()); b->add32(atlas->height()); @@ -238,7 +238,7 @@ GrDistanceFieldA8TextGeoProc::GrDistanceFieldA8TextGeoProc(GrColor color, bool usesLocalCoords) : fColor(color) , fViewMatrix(viewMatrix) - , fTextureAccess(texture, params) + , fTextureSampler(texture, params) #ifdef SK_GAMMA_APPLY_TO_A8 , fDistanceAdjust(distanceAdjust) #endif @@ -252,7 +252,7 @@ GrDistanceFieldA8TextGeoProc::GrDistanceFieldA8TextGeoProc(GrColor color, fInColor = &this->addVertexAttrib("inColor", kVec4ub_GrVertexAttribType); fInTextureCoords = &this->addVertexAttrib("inTextureCoords", kVec2us_GrVertexAttribType, kHigh_GrSLPrecision); - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); } void GrDistanceFieldA8TextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps, @@ -433,7 +433,7 @@ public: FPCoordTransformIter&& transformIter) override { SkASSERT(fTextureSizeUni.isValid()); - GrTexture* texture = proc.texture(0); + GrTexture* texture = proc.textureSampler(0).getTexture(); if (texture->width() != fTextureSize.width() || texture->height() != fTextureSize.height()) { fTextureSize = SkISize::Make(texture->width(), texture->height()); @@ -484,7 +484,7 @@ GrDistanceFieldPathGeoProc::GrDistanceFieldPathGeoProc( bool usesLocalCoords) : fColor(color) , fViewMatrix(viewMatrix) - , fTextureAccess(texture, params) + , fTextureSampler(texture, params) , fFlags(flags & kNonLCD_DistanceFieldEffectMask) , fInColor(nullptr) , fUsesLocalCoords(usesLocalCoords) { @@ -494,7 +494,7 @@ GrDistanceFieldPathGeoProc::GrDistanceFieldPathGeoProc( kHigh_GrSLPrecision); fInColor = &this->addVertexAttrib("inColor", kVec4ub_GrVertexAttribType); fInTextureCoords = &this->addVertexAttrib("inTextureCoords", kVec2f_GrVertexAttribType); - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); } void GrDistanceFieldPathGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps, @@ -594,8 +594,8 @@ public: vertBuilder->codeAppendf("%s = %s;", uv.vsOut(), dfTexEffect.inTextureCoords()->fName); // compute numbers to be hardcoded to convert texture coordinates from float to int - SkASSERT(dfTexEffect.numTextures() == 1); - GrTexture* atlas = dfTexEffect.textureAccess(0).getTexture(); + SkASSERT(dfTexEffect.numTextureSamplers() == 1); + GrTexture* atlas = dfTexEffect.textureSampler(0).getTexture(); SkASSERT(atlas && SkIsPow2(atlas->width()) && SkIsPow2(atlas->height())); GrGLSLVertToFrag st(kVec2f_GrSLType); @@ -760,8 +760,8 @@ public: b->add32(key); // Currently we hardcode numbers to convert atlas coordinates to normalized floating point - SkASSERT(gp.numTextures() == 1); - GrTexture* atlas = gp.textureAccess(0).getTexture(); + SkASSERT(gp.numTextureSamplers() == 1); + GrTexture* atlas = gp.textureSampler(0).getTexture(); SkASSERT(atlas); b->add32(atlas->width()); b->add32(atlas->height()); @@ -786,7 +786,7 @@ GrDistanceFieldLCDTextGeoProc::GrDistanceFieldLCDTextGeoProc( uint32_t flags, bool usesLocalCoords) : fColor(color) , fViewMatrix(viewMatrix) - , fTextureAccess(texture, params) + , fTextureSampler(texture, params) , fDistanceAdjust(distanceAdjust) , fFlags(flags & kLCD_DistanceFieldEffectMask) , fUsesLocalCoords(usesLocalCoords) { @@ -797,7 +797,7 @@ GrDistanceFieldLCDTextGeoProc::GrDistanceFieldLCDTextGeoProc( fInColor = &this->addVertexAttrib("inColor", kVec4ub_GrVertexAttribType); fInTextureCoords = &this->addVertexAttrib("inTextureCoords", kVec2us_GrVertexAttribType, kHigh_GrSLPrecision); - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); } void GrDistanceFieldLCDTextGeoProc::getGLSLProcessorKey(const GrGLSLCaps& caps, diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.h b/src/gpu/effects/GrDistanceFieldGeoProc.h index 339c063b30..68e0a24911 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.h +++ b/src/gpu/effects/GrDistanceFieldGeoProc.h @@ -96,7 +96,7 @@ private: GrColor fColor; SkMatrix fViewMatrix; - GrTextureAccess fTextureAccess; + TextureSampler fTextureSampler; #ifdef SK_GAMMA_APPLY_TO_A8 float fDistanceAdjust; #endif @@ -151,7 +151,7 @@ private: GrColor fColor; SkMatrix fViewMatrix; - GrTextureAccess fTextureAccess; + TextureSampler fTextureSampler; uint32_t fFlags; const Attribute* fInPosition; const Attribute* fInColor; @@ -221,7 +221,7 @@ private: GrColor fColor; SkMatrix fViewMatrix; - GrTextureAccess fTextureAccess; + TextureSampler fTextureSampler; DistanceAdjust fDistanceAdjust; uint32_t fFlags; const Attribute* fInPosition; diff --git a/src/gpu/effects/GrMatrixConvolutionEffect.cpp b/src/gpu/effects/GrMatrixConvolutionEffect.cpp index 56174973e1..8c67882a1a 100644 --- a/src/gpu/effects/GrMatrixConvolutionEffect.cpp +++ b/src/gpu/effects/GrMatrixConvolutionEffect.cpp @@ -129,12 +129,12 @@ void GrGLMatrixConvolutionEffect::GenKey(const GrProcessor& processor, void GrGLMatrixConvolutionEffect::onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor& processor) { const GrMatrixConvolutionEffect& conv = processor.cast(); - GrTexture& texture = *conv.texture(0); + GrTexture* texture = conv.textureSampler(0).getTexture(); float imageIncrement[2]; - float ySign = texture.origin() == kTopLeft_GrSurfaceOrigin ? 1.0f : -1.0f; - imageIncrement[0] = 1.0f / texture.width(); - imageIncrement[1] = ySign / texture.height(); + float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? 1.0f : -1.0f; + imageIncrement[0] = 1.0f / texture->width(); + imageIncrement[1] = ySign / texture->height(); pdman.set2fv(fImageIncrementUni, 1, imageIncrement); pdman.set2fv(fKernelOffsetUni, 1, conv.kernelOffset()); int kernelCount = conv.kernelSize().width() * conv.kernelSize().height(); @@ -143,7 +143,7 @@ void GrGLMatrixConvolutionEffect::onSetData(const GrGLSLProgramDataManager& pdma pdman.set4fv(fKernelUni, arrayCount, conv.kernel()); pdman.set1f(fGainUni, conv.gain()); pdman.set1f(fBiasUni, conv.bias()); - fDomain.setData(pdman, conv.domain(), texture.origin()); + fDomain.setData(pdman, conv.domain(), texture->origin()); } GrMatrixConvolutionEffect::GrMatrixConvolutionEffect(GrTexture* texture, diff --git a/src/gpu/effects/GrSingleTextureEffect.cpp b/src/gpu/effects/GrSingleTextureEffect.cpp index 2683789431..929275e3ad 100644 --- a/src/gpu/effects/GrSingleTextureEffect.cpp +++ b/src/gpu/effects/GrSingleTextureEffect.cpp @@ -11,10 +11,10 @@ GrSingleTextureEffect::GrSingleTextureEffect(GrTexture* texture, sk_sp colorSpaceXform, const SkMatrix& m) : fCoordTransform(m, texture, GrTextureParams::kNone_FilterMode) - , fTextureAccess(texture) + , fTextureSampler(texture) , fColorSpaceXform(std::move(colorSpaceXform)) { this->addCoordTransform(&fCoordTransform); - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); } GrSingleTextureEffect::GrSingleTextureEffect(GrTexture* texture, @@ -22,10 +22,10 @@ GrSingleTextureEffect::GrSingleTextureEffect(GrTexture* texture, const SkMatrix& m, GrTextureParams::FilterMode filterMode) : fCoordTransform(m, texture, filterMode) - , fTextureAccess(texture, filterMode) + , fTextureSampler(texture, filterMode) , fColorSpaceXform(std::move(colorSpaceXform)) { this->addCoordTransform(&fCoordTransform); - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); } GrSingleTextureEffect::GrSingleTextureEffect(GrTexture* texture, @@ -33,10 +33,10 @@ GrSingleTextureEffect::GrSingleTextureEffect(GrTexture* texture, const SkMatrix& m, const GrTextureParams& params) : fCoordTransform(m, texture, params.filterMode()) - , fTextureAccess(texture, params) + , fTextureSampler(texture, params) , fColorSpaceXform(std::move(colorSpaceXform)) { this->addCoordTransform(&fCoordTransform); - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); } GrSingleTextureEffect::~GrSingleTextureEffect() { diff --git a/src/gpu/effects/GrSingleTextureEffect.h b/src/gpu/effects/GrSingleTextureEffect.h index 12b3a8f791..1d34944c90 100644 --- a/src/gpu/effects/GrSingleTextureEffect.h +++ b/src/gpu/effects/GrSingleTextureEffect.h @@ -26,7 +26,7 @@ public: SkString dumpInfo() const override { SkString str; - str.appendf("Texture: %d", fTextureAccess.getTexture()->uniqueID().asUInt()); + str.appendf("Texture: %d", fTextureSampler.getTexture()->uniqueID().asUInt()); return str; } @@ -49,9 +49,10 @@ protected: * texture. */ void updateInvariantOutputForModulation(GrInvariantOutput* inout) const { - if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) { + GrPixelConfig config = this->textureSampler(0).getTexture()->config(); + if (GrPixelConfigIsAlphaOnly(config)) { inout->mulByUnknownSingleComponent(); - } else if (GrPixelConfigIsOpaque(this->texture(0)->config())) { + } else if (GrPixelConfigIsOpaque(config)) { inout->mulByUnknownOpaqueFourComponents(); } else { inout->mulByUnknownFourComponents(); @@ -60,7 +61,7 @@ protected: private: GrCoordTransform fCoordTransform; - GrTextureAccess fTextureAccess; + TextureSampler fTextureSampler; sk_sp fColorSpaceXform; typedef GrFragmentProcessor INHERITED; diff --git a/src/gpu/effects/GrTextureDomain.cpp b/src/gpu/effects/GrTextureDomain.cpp index 55d69bf5cc..4418730961 100644 --- a/src/gpu/effects/GrTextureDomain.cpp +++ b/src/gpu/effects/GrTextureDomain.cpp @@ -229,7 +229,7 @@ GrGLSLFragmentProcessor* GrTextureDomainEffect::onCreateGLSLInstance() const { void onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor& fp) override { const GrTextureDomainEffect& tde = fp.cast(); const GrTextureDomain& domain = tde.fTextureDomain; - fGLDomain.setData(pdman, domain, tde.texture(0)->origin()); + fGLDomain.setData(pdman, domain, tde.textureSampler(0).getTexture()->origin()); } private: @@ -242,14 +242,13 @@ GrGLSLFragmentProcessor* GrTextureDomainEffect::onCreateGLSLInstance() const { bool GrTextureDomainEffect::onIsEqual(const GrFragmentProcessor& sBase) const { const GrTextureDomainEffect& s = sBase.cast(); - return this->fTextureDomain == s.fTextureDomain && s.texture(0) == this->texture(0) && - s.textureAccess(0).getParams().filterMode() == - this->textureAccess(0).getParams().filterMode(); + return this->fTextureDomain == s.fTextureDomain && + s.textureSampler(0) == this->textureSampler(0); } void GrTextureDomainEffect::onComputeInvariantOutput(GrInvariantOutput* inout) const { if (GrTextureDomain::kDecal_Mode == fTextureDomain.mode()) { - if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) { + if (GrPixelConfigIsAlphaOnly(this->textureSampler(0).getTexture()->config())) { inout->mulByUnknownSingleComponent(); } else { inout->mulByUnknownFourComponents(); @@ -295,10 +294,10 @@ sk_sp GrDeviceSpaceTextureDecalFragmentProcessor::Make(GrTe GrDeviceSpaceTextureDecalFragmentProcessor::GrDeviceSpaceTextureDecalFragmentProcessor( GrTexture* texture, const SkIRect& subset, const SkIPoint& deviceSpaceOffset) - : fTextureAccess(texture, GrTextureParams::ClampNoFilter()) + : fTextureSampler(texture, GrTextureParams::ClampNoFilter()) , fTextureDomain(GrTextureDomain::MakeTexelDomain(texture, subset), GrTextureDomain::kDecal_Mode) { - this->addTextureAccess(&fTextureAccess); + this->addTextureSampler(&fTextureSampler); fDeviceSpaceOffset.fX = deviceSpaceOffset.fX - subset.fLeft; fDeviceSpaceOffset.fY = deviceSpaceOffset.fY - subset.fTop; this->initClassID(); @@ -334,14 +333,15 @@ GrGLSLFragmentProcessor* GrDeviceSpaceTextureDecalFragmentProcessor::onCreateGLS void onSetData(const GrGLSLProgramDataManager& pdman, const GrProcessor& fp) override { const GrDeviceSpaceTextureDecalFragmentProcessor& dstdfp = fp.cast(); - fGLDomain.setData(pdman, dstdfp.fTextureDomain, dstdfp.texture(0)->origin()); - float iw = 1.f / dstdfp.texture(0)->width(); - float ih = 1.f / dstdfp.texture(0)->height(); + GrTexture* texture = dstdfp.textureSampler(0).getTexture(); + fGLDomain.setData(pdman, dstdfp.fTextureDomain, texture->origin()); + float iw = 1.f / texture->width(); + float ih = 1.f / texture->height(); float scaleAndTransData[4] = { iw, ih, -dstdfp.fDeviceSpaceOffset.fX * iw, -dstdfp.fDeviceSpaceOffset.fY * ih }; - if (dstdfp.texture(0)->origin() == kBottomLeft_GrSurfaceOrigin) { + if (texture->origin() == kBottomLeft_GrSurfaceOrigin) { scaleAndTransData[1] = -scaleAndTransData[1]; scaleAndTransData[3] = 1 - scaleAndTransData[3]; } @@ -359,14 +359,14 @@ GrGLSLFragmentProcessor* GrDeviceSpaceTextureDecalFragmentProcessor::onCreateGLS bool GrDeviceSpaceTextureDecalFragmentProcessor::onIsEqual(const GrFragmentProcessor& fp) const { const GrDeviceSpaceTextureDecalFragmentProcessor& dstdfp = fp.cast(); - return dstdfp.fTextureAccess.getTexture() == fTextureAccess.getTexture() && + return dstdfp.fTextureSampler.getTexture() == fTextureSampler.getTexture() && dstdfp.fDeviceSpaceOffset == fDeviceSpaceOffset && dstdfp.fTextureDomain == fTextureDomain; } void GrDeviceSpaceTextureDecalFragmentProcessor::onComputeInvariantOutput( GrInvariantOutput* inout) const { - if (GrPixelConfigIsAlphaOnly(this->texture(0)->config())) { + if (GrPixelConfigIsAlphaOnly(this->textureSampler(0).getTexture()->config())) { inout->mulByUnknownSingleComponent(); } else { inout->mulByUnknownFourComponents(); diff --git a/src/gpu/effects/GrTextureDomain.h b/src/gpu/effects/GrTextureDomain.h index 82ff73c066..d557d178f9 100644 --- a/src/gpu/effects/GrTextureDomain.h +++ b/src/gpu/effects/GrTextureDomain.h @@ -225,7 +225,7 @@ public: } private: - GrTextureAccess fTextureAccess; + TextureSampler fTextureSampler; GrTextureDomain fTextureDomain; SkIPoint fDeviceSpaceOffset; diff --git a/src/gpu/effects/GrYUVEffect.cpp b/src/gpu/effects/GrYUVEffect.cpp index cbe25e82f8..2fd35138fe 100644 --- a/src/gpu/effects/GrYUVEffect.cpp +++ b/src/gpu/effects/GrYUVEffect.cpp @@ -155,21 +155,21 @@ private: const SkMatrix yuvMatrix[3], GrTextureParams::FilterMode uvFilterMode, SkYUVColorSpace colorSpace, bool nv12) : fYTransform(yuvMatrix[0], yTexture, GrTextureParams::kNone_FilterMode) - , fYAccess(yTexture) + , fYSampler(yTexture) , fUTransform(yuvMatrix[1], uTexture, uvFilterMode) - , fUAccess(uTexture, uvFilterMode) - , fVAccess(vTexture, uvFilterMode) + , fUSampler(uTexture, uvFilterMode) + , fVSampler(vTexture, uvFilterMode) , fColorSpace(colorSpace) , fNV12(nv12) { this->initClassID(); this->addCoordTransform(&fYTransform); - this->addTextureAccess(&fYAccess); + this->addTextureSampler(&fYSampler); this->addCoordTransform(&fUTransform); - this->addTextureAccess(&fUAccess); + this->addTextureSampler(&fUSampler); if (!fNV12) { fVTransform = GrCoordTransform(yuvMatrix[2], vTexture, uvFilterMode); this->addCoordTransform(&fVTransform); - this->addTextureAccess(&fVAccess); + this->addTextureSampler(&fVSampler); } } @@ -193,11 +193,11 @@ private: } GrCoordTransform fYTransform; - GrTextureAccess fYAccess; + TextureSampler fYSampler; GrCoordTransform fUTransform; - GrTextureAccess fUAccess; + TextureSampler fUSampler; GrCoordTransform fVTransform; - GrTextureAccess fVAccess; + TextureSampler fVSampler; SkYUVColorSpace fColorSpace; bool fNV12; @@ -353,7 +353,7 @@ private: } GrCoordTransform fTransform; - GrTextureAccess fAccess; + TextureSampler fTextureSampler; SkYUVColorSpace fColorSpace; OutputChannels fOutputChannels; diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp index 86b237266b..006077bb29 100644 --- a/src/gpu/gl/GrGLProgram.cpp +++ b/src/gpu/gl/GrGLProgram.cpp @@ -152,10 +152,10 @@ void GrGLProgram::setRenderTargetState(const GrPrimitiveProcessor& primProc, void GrGLProgram::bindTextures(const GrProcessor& processor, bool allowSRGBInputs, int* nextSamplerIdx) { - for (int i = 0; i < processor.numTextures(); ++i) { - const GrTextureAccess& access = processor.textureAccess(i); - fGpu->bindTexture((*nextSamplerIdx)++, access.getParams(), - allowSRGBInputs, static_cast(access.getTexture())); + for (int i = 0; i < processor.numTextureSamplers(); ++i) { + const GrProcessor::TextureSampler& sampler = processor.textureSampler(i); + fGpu->bindTexture((*nextSamplerIdx)++, sampler.getParams(), + allowSRGBInputs, static_cast(sampler.getTexture())); } for (int i = 0; i < processor.numBuffers(); ++i) { const GrBufferAccess& access = processor.bufferAccess(i); @@ -166,9 +166,9 @@ void GrGLProgram::bindTextures(const GrProcessor& processor, void GrGLProgram::generateMipmaps(const GrProcessor& processor, bool allowSRGBInputs) { - for (int i = 0; i < processor.numTextures(); ++i) { - const GrTextureAccess& access = processor.textureAccess(i); - fGpu->generateMipmaps(access.getParams(), allowSRGBInputs, - static_cast(access.getTexture())); + for (int i = 0; i < processor.numTextureSamplers(); ++i) { + const GrProcessor::TextureSampler& sampler = processor.textureSampler(i); + fGpu->generateMipmaps(sampler.getParams(), allowSRGBInputs, + static_cast(sampler.getTexture())); } } diff --git a/src/gpu/glsl/GrGLSLFragmentProcessor.h b/src/gpu/glsl/GrGLSLFragmentProcessor.h index d2f00f8b33..7add1ebdbe 100644 --- a/src/gpu/glsl/GrGLSLFragmentProcessor.h +++ b/src/gpu/glsl/GrGLSLFragmentProcessor.h @@ -72,7 +72,7 @@ public: using TransformedCoordVars = BuilderInputProvider; using TextureSamplers = BuilderInputProvider; + &GrProcessor::numTextureSamplers>; using BufferSamplers = BuilderInputProvider; @@ -94,7 +94,7 @@ public: info about its output. @param transformedCoords Fragment shader variables containing the coords computed using each of the GrFragmentProcessor's GrCoordTransforms. - @param texSamplers Contains one entry for each GrTextureAccess of the GrProcessor. + @param texSamplers Contains one entry for each TextureSampler of the GrProcessor. These can be passed to the builder to emit texture reads in the generated code. @param bufferSamplers Contains one entry for each GrBufferAccess of the GrProcessor. diff --git a/src/gpu/glsl/GrGLSLProgramBuilder.cpp b/src/gpu/glsl/GrGLSLProgramBuilder.cpp index 0862bc4ffa..fc50fa0c4e 100644 --- a/src/gpu/glsl/GrGLSLProgramBuilder.cpp +++ b/src/gpu/glsl/GrGLSLProgramBuilder.cpp @@ -96,7 +96,7 @@ void GrGLSLProgramBuilder::emitAndInstallPrimProc(const GrPrimitiveProcessor& pr SkASSERT(!fGeometryProcessor); fGeometryProcessor = proc.createGLSLInstance(*this->glslCaps()); - SkSTArray<4, SamplerHandle> texSamplers(proc.numTextures()); + SkSTArray<4, SamplerHandle> texSamplers(proc.numTextureSamplers()); SkSTArray<2, SamplerHandle> bufferSamplers(proc.numBuffers()); this->emitSamplers(proc, &texSamplers, &bufferSamplers); @@ -159,7 +159,7 @@ void GrGLSLProgramBuilder::emitAndInstallFragProc(const GrFragmentProcessor& fp, GrGLSLFragmentProcessor* fragProc = fp.createGLSLInstance(); - SkSTArray<4, SamplerHandle> textureSamplerArray(fp.numTextures()); + SkSTArray<4, SamplerHandle> textureSamplerArray(fp.numTextureSamplers()); SkSTArray<2, SamplerHandle> bufferSamplerArray(fp.numBuffers()); GrFragmentProcessor::Iter iter(&fp); while (const GrFragmentProcessor* subFP = iter.next()) { @@ -215,7 +215,7 @@ void GrGLSLProgramBuilder::emitAndInstallXferProc(const GrXferProcessor& xp, openBrace.printf("{ // Xfer Processor: %s\n", xp.name()); fFS.codeAppend(openBrace.c_str()); - SkSTArray<4, SamplerHandle> texSamplers(xp.numTextures()); + SkSTArray<4, SamplerHandle> texSamplers(xp.numTextureSamplers()); SkSTArray<2, SamplerHandle> bufferSamplers(xp.numBuffers()); this->emitSamplers(xp, &texSamplers, &bufferSamplers); @@ -242,21 +242,21 @@ void GrGLSLProgramBuilder::emitSamplers(const GrProcessor& processor, SkTArray* outTexSamplers, SkTArray* outBufferSamplers) { SkString name; - int numTextures = processor.numTextures(); - for (int t = 0; t < numTextures; ++t) { - const GrTextureAccess& access = processor.textureAccess(t); - GrSLType samplerType = access.getTexture()->texturePriv().samplerType(); + int numTextureSamplers = processor.numTextureSamplers(); + for (int t = 0; t < numTextureSamplers; ++t) { + const GrProcessor::TextureSampler& sampler = processor.textureSampler(t); + GrSLType samplerType = sampler.getTexture()->texturePriv().samplerType(); if (kTextureExternalSampler_GrSLType == samplerType) { const char* externalFeatureString = this->glslCaps()->externalTextureExtensionString(); // We shouldn't ever create a GrGLTexture that requires external sampler type SkASSERT(externalFeatureString); - this->addFeature(access.getVisibility(), + this->addFeature(sampler.getVisibility(), 1 << GrGLSLShaderBuilder::kExternalTexture_GLSLPrivateFeature, externalFeatureString); } name.printf("TextureSampler_%d", outTexSamplers->count()); - this->emitSampler(samplerType, access.getTexture()->config(), - name.c_str(), access.getVisibility(), outTexSamplers); + this->emitSampler(samplerType, sampler.getTexture()->config(), + name.c_str(), sampler.getVisibility(), outTexSamplers); } if (int numBuffers = processor.numBuffers()) { diff --git a/src/gpu/glsl/GrGLSLShaderBuilder.h b/src/gpu/glsl/GrGLSLShaderBuilder.h index f59edb4553..378f523de9 100644 --- a/src/gpu/glsl/GrGLSLShaderBuilder.h +++ b/src/gpu/glsl/GrGLSLShaderBuilder.h @@ -29,7 +29,8 @@ public: /** Appends a 2D texture sample with projection if necessary. coordType must either be Vec2f or Vec3f. The latter is interpreted as projective texture coords. The vec length and swizzle - order of the result depends on the GrTextureAccess associated with the GrGLSLSampler. + order of the result depends on the GrProcessor::TextureSampelr associated with the + GrGLSLSampler. */ void appendTextureLookup(SkString* out, SamplerHandle, diff --git a/src/gpu/vk/GrVkGpuCommandBuffer.cpp b/src/gpu/vk/GrVkGpuCommandBuffer.cpp index 4cbefa659d..3f0bd39d48 100644 --- a/src/gpu/vk/GrVkGpuCommandBuffer.cpp +++ b/src/gpu/vk/GrVkGpuCommandBuffer.cpp @@ -12,7 +12,6 @@ #include "GrMesh.h" #include "GrPipeline.h" #include "GrRenderTargetPriv.h" -#include "GrTextureAccess.h" #include "GrTexturePriv.h" #include "GrVkCommandBuffer.h" #include "GrVkGpu.h" @@ -427,9 +426,9 @@ sk_sp GrVkGpuCommandBuffer::prepareDrawState( } static void prepare_sampled_images(const GrProcessor& processor, GrVkGpu* gpu) { - for (int i = 0; i < processor.numTextures(); ++i) { - const GrTextureAccess& texAccess = processor.textureAccess(i); - GrVkTexture* vkTexture = static_cast(processor.texture(i)); + for (int i = 0; i < processor.numTextureSamplers(); ++i) { + const GrProcessor::TextureSampler& sampler = processor.textureSampler(i); + GrVkTexture* vkTexture = static_cast(sampler.getTexture()); SkASSERT(vkTexture); // We may need to resolve the texture first if it is also a render target @@ -438,7 +437,7 @@ static void prepare_sampled_images(const GrProcessor& processor, GrVkGpu* gpu) { gpu->onResolveRenderTarget(texRT); } - const GrTextureParams& params = texAccess.getParams(); + const GrTextureParams& params = sampler.getParams(); // Check if we need to regenerate any mip maps if (GrTextureParams::kMipMap_FilterMode == params.filterMode()) { if (vkTexture->texturePriv().mipMapsAreDirty()) { diff --git a/src/gpu/vk/GrVkPipelineState.cpp b/src/gpu/vk/GrVkPipelineState.cpp index ba4f95f3e3..2ca1aafdd4 100644 --- a/src/gpu/vk/GrVkPipelineState.cpp +++ b/src/gpu/vk/GrVkPipelineState.cpp @@ -173,13 +173,14 @@ void GrVkPipelineState::abandonGPUResources() { } static void append_texture_bindings(const GrProcessor& processor, - SkTArray* textureBindings) { - if (int numTextures = processor.numTextures()) { - const GrTextureAccess** bindings = textureBindings->push_back_n(numTextures); + SkTArray* textureBindings) { + if (int numTextureSamplers = processor.numTextureSamplers()) { + const GrProcessor::TextureSampler** bindings = + textureBindings->push_back_n(numTextureSamplers); int i = 0; do { - bindings[i] = &processor.textureAccess(i); - } while (++i < numTextures); + bindings[i] = &processor.textureSampler(i); + } while (++i < numTextureSamplers); } } @@ -192,7 +193,7 @@ void GrVkPipelineState::setData(GrVkGpu* gpu, this->setRenderTargetState(pipeline); - SkSTArray<8, const GrTextureAccess*> textureBindings; + SkSTArray<8, const GrProcessor::TextureSampler*> textureBindings; fGeometryProcessor->setData(fDataManager, primProc, GrFragmentProcessor::CoordTransformIter(pipeline)); @@ -302,9 +303,10 @@ void GrVkPipelineState::writeUniformBuffers(const GrVkGpu* gpu) { } } -void GrVkPipelineState::writeSamplers(GrVkGpu* gpu, - const SkTArray& textureBindings, - bool allowSRGBInputs) { +void GrVkPipelineState::writeSamplers( + GrVkGpu* gpu, + const SkTArray& textureBindings, + bool allowSRGBInputs) { SkASSERT(fNumSamplers == textureBindings.count()); for (int i = 0; i < textureBindings.count(); ++i) { diff --git a/src/gpu/vk/GrVkPipelineState.h b/src/gpu/vk/GrVkPipelineState.h index 63277c084f..3b0a6afddd 100644 --- a/src/gpu/vk/GrVkPipelineState.h +++ b/src/gpu/vk/GrVkPipelineState.h @@ -141,7 +141,8 @@ private: void writeUniformBuffers(const GrVkGpu* gpu); - void writeSamplers(GrVkGpu* gpu, const SkTArray& textureBindings, + void writeSamplers(GrVkGpu* gpu, + const SkTArray& textureBindings, bool allowSRGBInputs); /** diff --git a/src/gpu/vk/GrVkSampler.cpp b/src/gpu/vk/GrVkSampler.cpp index 1d4e7066a6..799adc9b33 100644 --- a/src/gpu/vk/GrVkSampler.cpp +++ b/src/gpu/vk/GrVkSampler.cpp @@ -7,7 +7,6 @@ #include "GrVkSampler.h" -#include "GrTextureAccess.h" #include "GrVkGpu.h" static inline VkSamplerAddressMode tile_to_vk_sampler_address(SkShader::TileMode tm) { diff --git a/src/gpu/vk/GrVkSampler.h b/src/gpu/vk/GrVkSampler.h index c0f60e4217..369b1627b3 100644 --- a/src/gpu/vk/GrVkSampler.h +++ b/src/gpu/vk/GrVkSampler.h @@ -12,7 +12,6 @@ #include "vk/GrVkDefines.h" -class GrTextureAccess; class GrTextureParams; class GrVkGpu; diff --git a/src/image/SkImageShader.cpp b/src/image/SkImageShader.cpp index eed817554e..8f8f6a32ba 100644 --- a/src/image/SkImageShader.cpp +++ b/src/image/SkImageShader.cpp @@ -175,7 +175,6 @@ void SkImageShader::toString(SkString* str) const { #if SK_SUPPORT_GPU -#include "GrTextureAccess.h" #include "SkGr.h" #include "SkGrPriv.h" #include "effects/GrSimpleTextureEffect.h"