From a624bf3d1cb454c1959c5bbbf23a3afdfa3481f3 Mon Sep 17 00:00:00 2001 From: bsalomon Date: Tue, 20 Sep 2016 09:12:47 -0700 Subject: Stop flattening GrCoordTransforms in parent GrFragmentProcessors. This changes moves to a model that iterates over GrCTs in a GrFP hierarchy when inserting transformations by GrGLSLPrimitiveProcessors. GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2339203002 Committed: https://skia.googlesource.com/skia/+/d91237ee051523f439238042674ade99207fe4a6 Review-Url: https://codereview.chromium.org/2339203002 --- src/gpu/effects/GrDistanceFieldGeoProc.cpp | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) (limited to 'src/gpu/effects/GrDistanceFieldGeoProc.cpp') diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp index c74c5cec80..5404b0c805 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp +++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp @@ -73,8 +73,7 @@ public: uniformHandler, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); // add varyings GrGLSLVertToFrag recipScale(kFloat_GrSLType); @@ -179,7 +178,8 @@ public: fragBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, + FPCoordTransformIter&& transformIter) override { #ifdef SK_GAMMA_APPLY_TO_A8 const GrDistanceFieldA8TextGeoProc& dfTexEffect = proc.cast(); float distanceAdjust = dfTexEffect.getDistanceAdjust(); @@ -196,6 +196,7 @@ public: GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } + this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); } static inline void GenKey(const GrGeometryProcessor& gp, @@ -345,8 +346,7 @@ public: uniformHandler, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); const char* textureSizeUniName = nullptr; fTextureSizeUni = uniformHandler->addUniform(kFragment_GrShaderFlag, @@ -433,7 +433,8 @@ public: fragBuilder->codeAppendf("%s = vec4(val);", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& proc, + FPCoordTransformIter&& transformIter) override { SkASSERT(fTextureSizeUni.isValid()); GrTexture* texture = proc.texture(0); @@ -453,6 +454,7 @@ public: GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } + this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); } static inline void GenKey(const GrGeometryProcessor& gp, @@ -582,8 +584,7 @@ public: uniformHandler, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, - args.fTransformsIn, - args.fTransformsOut); + args.fFPCoordTransformHandler); // set up varyings bool isUniformScale = (dfTexEffect.getFlags() & kUniformScale_DistanceFieldEffectMask) == @@ -732,8 +733,8 @@ public: fragBuilder->codeAppendf("%s = val;", args.fOutputCoverage); } - void setData(const GrGLSLProgramDataManager& pdman, - const GrPrimitiveProcessor& processor) override { + void setData(const GrGLSLProgramDataManager& pdman, const GrPrimitiveProcessor& processor, + FPCoordTransformIter&& transformIter) override { SkASSERT(fDistanceAdjustUni.isValid()); const GrDistanceFieldLCDTextGeoProc& dflcd = processor.cast(); @@ -752,6 +753,7 @@ public: GrGLSLGetMatrix<3>(viewMatrix, fViewMatrix); pdman.setMatrix3f(fViewMatrixUniform, viewMatrix); } + this->setTransformDataHelper(SkMatrix::I(), pdman, &transformIter); } static inline void GenKey(const GrGeometryProcessor& gp, -- cgit v1.2.3