diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/SkBitmapProcShader.cpp | 4 | ||||
-rw-r--r-- | src/core/SkBitmapProcShader.h | 2 | ||||
-rw-r--r-- | src/core/SkColorShader.h | 2 | ||||
-rw-r--r-- | src/core/SkLocalMatrixShader.h | 8 | ||||
-rw-r--r-- | src/core/SkPictureShader.cpp | 6 | ||||
-rw-r--r-- | src/core/SkPictureShader.h | 2 | ||||
-rw-r--r-- | src/core/SkShader.cpp | 6 | ||||
-rw-r--r-- | src/effects/SkPerlinNoiseShader.cpp | 9 | ||||
-rw-r--r-- | src/effects/gradients/SkLinearGradient.cpp | 8 | ||||
-rw-r--r-- | src/effects/gradients/SkLinearGradient.h | 3 | ||||
-rw-r--r-- | src/effects/gradients/SkRadialGradient.cpp | 7 | ||||
-rw-r--r-- | src/effects/gradients/SkRadialGradient.h | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkSweepGradient.cpp | 6 | ||||
-rw-r--r-- | src/effects/gradients/SkSweepGradient.h | 2 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient.cpp | 4 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient.h | 3 | ||||
-rw-r--r-- | src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp | 27 | ||||
-rw-r--r-- | src/gpu/GrShaderDataManager.cpp | 8 | ||||
-rw-r--r-- | src/gpu/SkGr.cpp | 3 |
19 files changed, 71 insertions, 41 deletions
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp index e17e60b00e..258a1f8ac3 100644 --- a/src/core/SkBitmapProcShader.cpp +++ b/src/core/SkBitmapProcShader.cpp @@ -365,7 +365,7 @@ void SkBitmapProcShader::toString(SkString* str) const { bool SkBitmapProcShader::asFragmentProcessor(GrContext* context, const SkPaint& paint, const SkMatrix& viewM, const SkMatrix* localMatrix, GrColor* paintColor, - GrFragmentProcessor** fp) const { + GrShaderDataManager*, GrFragmentProcessor** fp) const { SkMatrix matrix; matrix.setIDiv(fRawBitmap.width(), fRawBitmap.height()); @@ -451,7 +451,7 @@ bool SkBitmapProcShader::asFragmentProcessor(GrContext* context, const SkPaint& #else bool SkBitmapProcShader::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const { SkDEBUGFAIL("Should not call in GPU-less build"); return false; diff --git a/src/core/SkBitmapProcShader.h b/src/core/SkBitmapProcShader.h index bdb2d4de15..6cdde1500b 100644 --- a/src/core/SkBitmapProcShader.h +++ b/src/core/SkBitmapProcShader.h @@ -32,7 +32,7 @@ public: bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM, const SkMatrix*, - GrColor*, GrFragmentProcessor**) const override; + GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const override; class BitmapProcShaderContext : public SkShader::Context { public: diff --git a/src/core/SkColorShader.h b/src/core/SkColorShader.h index 24e3e8d5dc..de3916d877 100644 --- a/src/core/SkColorShader.h +++ b/src/core/SkColorShader.h @@ -55,7 +55,7 @@ public: GradientType asAGradient(GradientInfo* info) const override; bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const override; SK_TO_STRING_OVERRIDE() diff --git a/src/core/SkLocalMatrixShader.h b/src/core/SkLocalMatrixShader.h index 1a469948c6..ddb5de8310 100644 --- a/src/core/SkLocalMatrixShader.h +++ b/src/core/SkLocalMatrixShader.h @@ -36,18 +36,20 @@ public: virtual bool asFragmentProcessor(GrContext* context, const SkPaint& paint, const SkMatrix& viewM, const SkMatrix* localMatrix, - GrColor* grColor, GrFragmentProcessor** fp) const override { + GrColor* grColor, GrShaderDataManager* shaderDataManager, + GrFragmentProcessor** fp) const override { SkMatrix tmp = this->getLocalMatrix(); if (localMatrix) { tmp.preConcat(*localMatrix); } - return fProxyShader->asFragmentProcessor(context, paint, viewM, &tmp, grColor, fp); + return fProxyShader->asFragmentProcessor(context, paint, viewM, &tmp, grColor, + shaderDataManager, fp); } #else virtual bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const override { SkDEBUGFAIL("Should not call in GPU-less build"); return false; diff --git a/src/core/SkPictureShader.cpp b/src/core/SkPictureShader.cpp index 4b0adeb814..4cf35c7da5 100644 --- a/src/core/SkPictureShader.cpp +++ b/src/core/SkPictureShader.cpp @@ -336,6 +336,7 @@ void SkPictureShader::toString(SkString* str) const { bool SkPictureShader::asFragmentProcessor(GrContext* context, const SkPaint& paint, const SkMatrix& viewM, const SkMatrix* localMatrix, GrColor* paintColor, + GrShaderDataManager* shaderDataManager, GrFragmentProcessor** fp) const { int maxTextureSize = 0; if (context) { @@ -345,11 +346,12 @@ bool SkPictureShader::asFragmentProcessor(GrContext* context, const SkPaint& pai if (!bitmapShader) { return false; } - return bitmapShader->asFragmentProcessor(context, paint, viewM, NULL, paintColor, fp); + return bitmapShader->asFragmentProcessor(context, paint, viewM, NULL, paintColor, + shaderDataManager, fp); } #else bool SkPictureShader::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const { SkDEBUGFAIL("Should not call in GPU-less build"); return false; diff --git a/src/core/SkPictureShader.h b/src/core/SkPictureShader.h index 98b6d5f77d..4576446cec 100644 --- a/src/core/SkPictureShader.h +++ b/src/core/SkPictureShader.h @@ -31,7 +31,7 @@ public: SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkPictureShader) bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM, const SkMatrix*, - GrColor*, GrFragmentProcessor**) const override; + GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const override; protected: SkPictureShader(SkReadBuffer&); diff --git a/src/core/SkShader.cpp b/src/core/SkShader.cpp index 32984960ab..d1f6611727 100644 --- a/src/core/SkShader.cpp +++ b/src/core/SkShader.cpp @@ -215,7 +215,7 @@ SkShader::GradientType SkShader::asAGradient(GradientInfo* info) const { } bool SkShader::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, const SkMatrix*, - GrColor*, GrFragmentProcessor**) const { + GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const { return false; } @@ -346,7 +346,7 @@ SkShader::GradientType SkColorShader::asAGradient(GradientInfo* info) const { #include "SkGr.h" bool SkColorShader::asFragmentProcessor(GrContext*, const SkPaint& paint, const SkMatrix&, - const SkMatrix*, GrColor* paintColor, + const SkMatrix*, GrColor* paintColor, GrShaderDataManager*, GrFragmentProcessor** fp) const { *fp = NULL; SkColor skColor = fColor; @@ -358,7 +358,7 @@ bool SkColorShader::asFragmentProcessor(GrContext*, const SkPaint& paint, const #else bool SkColorShader::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const { SkDEBUGFAIL("Should not call in GPU-less build"); return false; diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp index 7185b4dafe..237af0e066 100644 --- a/src/effects/SkPerlinNoiseShader.cpp +++ b/src/effects/SkPerlinNoiseShader.cpp @@ -622,9 +622,11 @@ GrFragmentProcessor* GrPerlinNoiseEffect::TestCreate(SkRandom* random, SkPaint paint; GrColor paintColor; GrFragmentProcessor* effect; + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &effect)); + &paintColor, grPaint.getShaderDataManager(), + &effect)); SkDELETE(shader); @@ -943,7 +945,8 @@ void GrGLPerlinNoise::setData(const GrGLProgramDataManager& pdman, const GrProce bool SkPerlinNoiseShader::asFragmentProcessor(GrContext* context, const SkPaint& paint, const SkMatrix& viewM, const SkMatrix* externalLocalMatrix, - GrColor* paintColor, GrFragmentProcessor** fp) const { + GrColor* paintColor, GrShaderDataManager*, + GrFragmentProcessor** fp) const { SkASSERT(context); *paintColor = SkColor2GrColorJustAlpha(paint.getColor()); @@ -997,7 +1000,7 @@ bool SkPerlinNoiseShader::asFragmentProcessor(GrContext* context, const SkPaint& #else bool SkPerlinNoiseShader::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const { SkDEBUGFAIL("Should not call in GPU-less build"); return false; diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp index 6457630f6c..7b20b2deef 100644 --- a/src/effects/gradients/SkLinearGradient.cpp +++ b/src/effects/gradients/SkLinearGradient.cpp @@ -543,9 +543,10 @@ GrFragmentProcessor* GrLinearGradient::TestCreate(SkRandom* random, SkPaint paint; GrColor paintColor; GrFragmentProcessor* fp; + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &fp)); + &paintColor, grPaint.getShaderDataManager(), &fp)); return fp; } @@ -568,7 +569,8 @@ void GrGLLinearGradient::emitCode(GrGLFPBuilder* builder, bool SkLinearGradient::asFragmentProcessor(GrContext* context, const SkPaint& paint, const SkMatrix& viewm, const SkMatrix* localMatrix, - GrColor* paintColor, GrFragmentProcessor** fp) const { + GrColor* paintColor, GrShaderDataManager*, + GrFragmentProcessor** fp) const { SkASSERT(context); SkMatrix matrix; @@ -593,7 +595,7 @@ bool SkLinearGradient::asFragmentProcessor(GrContext* context, const SkPaint& pa #else bool SkLinearGradient::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const { SkDEBUGFAIL("Should not call in GPU-less build"); return false; diff --git a/src/effects/gradients/SkLinearGradient.h b/src/effects/gradients/SkLinearGradient.h index 63a4315db7..902494e25d 100644 --- a/src/effects/gradients/SkLinearGradient.h +++ b/src/effects/gradients/SkLinearGradient.h @@ -31,7 +31,8 @@ public: BitmapType asABitmap(SkBitmap*, SkMatrix*, TileMode*) const override; GradientType asAGradient(GradientInfo* info) const override; bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM, - const SkMatrix*, GrColor*, GrFragmentProcessor**) const override; + const SkMatrix*, GrColor*, GrShaderDataManager*, + GrFragmentProcessor**) const override; SK_TO_STRING_OVERRIDE() SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkLinearGradient) diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp index b6b31c592f..b2e9a11e64 100644 --- a/src/effects/gradients/SkRadialGradient.cpp +++ b/src/effects/gradients/SkRadialGradient.cpp @@ -517,9 +517,10 @@ GrFragmentProcessor* GrRadialGradient::TestCreate(SkRandom* random, SkPaint paint; GrColor paintColor; GrFragmentProcessor* fp; + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &fp)); + &paintColor, grPaint.getShaderDataManager(), &fp)); return fp; } @@ -544,7 +545,7 @@ void GrGLRadialGradient::emitCode(GrGLFPBuilder* builder, bool SkRadialGradient::asFragmentProcessor(GrContext* context, const SkPaint& paint, const SkMatrix& viewM, const SkMatrix* localMatrix, GrColor* paintColor, - GrFragmentProcessor** fp) const { + GrShaderDataManager*, GrFragmentProcessor** fp) const { SkASSERT(context); SkMatrix matrix; @@ -569,7 +570,7 @@ bool SkRadialGradient::asFragmentProcessor(GrContext* context, const SkPaint& pa #else bool SkRadialGradient::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const { SkDEBUGFAIL("Should not call in GPU-less build"); return false; diff --git a/src/effects/gradients/SkRadialGradient.h b/src/effects/gradients/SkRadialGradient.h index 748f6840e7..59217515cb 100644 --- a/src/effects/gradients/SkRadialGradient.h +++ b/src/effects/gradients/SkRadialGradient.h @@ -31,7 +31,7 @@ public: BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode* xy) const override; GradientType asAGradient(GradientInfo* info) const override; bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const override; SK_TO_STRING_OVERRIDE() diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp index ce4edae9b8..24853ff76f 100644 --- a/src/effects/gradients/SkSweepGradient.cpp +++ b/src/effects/gradients/SkSweepGradient.cpp @@ -260,9 +260,10 @@ GrFragmentProcessor* GrSweepGradient::TestCreate(SkRandom* random, SkPaint paint; GrFragmentProcessor* fp; GrColor paintColor; + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &fp)); + &paintColor, grPaint.getShaderDataManager(), &fp)); return fp; } @@ -297,6 +298,7 @@ void GrGLSweepGradient::emitCode(GrGLFPBuilder* builder, bool SkSweepGradient::asFragmentProcessor(GrContext* context, const SkPaint& paint, const SkMatrix& viewM, const SkMatrix* localMatrix, GrColor* paintColor, + GrShaderDataManager*, GrFragmentProcessor** effect) const { SkMatrix matrix; @@ -321,7 +323,7 @@ bool SkSweepGradient::asFragmentProcessor(GrContext* context, const SkPaint& pai #else bool SkSweepGradient::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const { SkDEBUGFAIL("Should not call in GPU-less build"); return false; diff --git a/src/effects/gradients/SkSweepGradient.h b/src/effects/gradients/SkSweepGradient.h index 1edc9682de..c254c590ef 100644 --- a/src/effects/gradients/SkSweepGradient.h +++ b/src/effects/gradients/SkSweepGradient.h @@ -33,7 +33,7 @@ public: GradientType asAGradient(GradientInfo* info) const override; bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix& viewM, - const SkMatrix*, GrColor*, + const SkMatrix*, GrColor*, GrShaderDataManager*, GrFragmentProcessor**) const override; SK_TO_STRING_OVERRIDE() diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp index 8630d205a8..ee531b271e 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp @@ -394,6 +394,7 @@ bool SkTwoPointConicalGradient::asFragmentProcessor(GrContext* context, const SkMatrix& viewM, const SkMatrix* localMatrix, GrColor* paintColor, + GrShaderDataManager*, GrFragmentProcessor** fp) const { SkASSERT(context); SkASSERT(fPtsToUnit.isIdentity()); @@ -407,7 +408,8 @@ bool SkTwoPointConicalGradient::asFragmentProcessor(GrContext* context, bool SkTwoPointConicalGradient::asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, const SkMatrix*, - GrColor*, GrFragmentProcessor**) const { + GrColor*, GrShaderDataManager*, + GrFragmentProcessor**) const { SkDEBUGFAIL("Should not call in GPU-less build"); return false; } diff --git a/src/effects/gradients/SkTwoPointConicalGradient.h b/src/effects/gradients/SkTwoPointConicalGradient.h index 8ff0048c24..eaa25194c8 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient.h +++ b/src/effects/gradients/SkTwoPointConicalGradient.h @@ -61,7 +61,8 @@ public: BitmapType asABitmap(SkBitmap* bitmap, SkMatrix* matrix, TileMode* xy) const override; SkShader::GradientType asAGradient(GradientInfo* info) const override; bool asFragmentProcessor(GrContext*, const SkPaint&, const SkMatrix&, const SkMatrix*, - GrColor*, GrFragmentProcessor**) const override; + GrColor*, GrShaderDataManager*, + GrFragmentProcessor**) const override; bool isOpaque() const override; SkScalar getCenterX1() const { return SkPoint::Distance(fCenter1, fCenter2); } diff --git a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp index 3f511ed2af..357e39c3ad 100644 --- a/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp +++ b/src/effects/gradients/SkTwoPointConicalGradient_gpu.cpp @@ -11,6 +11,7 @@ #include "SkTwoPointConicalGradient.h" #if SK_SUPPORT_GPU +#include "GrPaint.h" #include "gl/builders/GrGLProgramBuilder.h" // For brevity typedef GrGLProgramDataManager::UniformHandle UniformHandle; @@ -216,9 +217,10 @@ GrFragmentProcessor* Edge2PtConicalEffect::TestCreate(SkRandom* random, SkPaint paint; GrFragmentProcessor* fp; GrColor paintColor; + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &fp)); + &paintColor, grPaint.getShaderDataManager(), &fp)); return fp; } @@ -502,10 +504,11 @@ GrFragmentProcessor* FocalOutside2PtConicalEffect::TestCreate(SkRandom* random, SkPaint paint; GrFragmentProcessor* effect; GrColor paintColor; - + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &effect)); + &paintColor, grPaint.getShaderDataManager(), + &effect)); return effect; } @@ -723,9 +726,10 @@ GrFragmentProcessor* FocalInside2PtConicalEffect::TestCreate(SkRandom* random, SkPaint paint; GrColor paintColor; GrFragmentProcessor* fp; + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &fp)); + &paintColor, grPaint.getShaderDataManager(), &fp)); return fp; } @@ -977,11 +981,12 @@ GrFragmentProcessor* CircleInside2PtConicalEffect::TestCreate(SkRandom* random, tm)); SkPaint paint; GrColor paintColor; - GrFragmentProcessor* processor; + GrFragmentProcessor* fp; + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &processor)); - return processor; + &paintColor, grPaint.getShaderDataManager(), &fp)); + return fp; } GLCircleInside2PtConicalEffect::GLCircleInside2PtConicalEffect(const GrProcessor& processor) @@ -1217,12 +1222,12 @@ GrFragmentProcessor* CircleOutside2PtConicalEffect::TestCreate(SkRandom* random, tm)); SkPaint paint; GrColor paintColor; - GrFragmentProcessor* processor; - + GrFragmentProcessor* fp; + GrPaint grPaint; SkAssertResult(shader->asFragmentProcessor(context, paint, GrTest::TestMatrix(random), NULL, - &paintColor, &processor)); - return processor; + &paintColor, grPaint.getShaderDataManager(), &fp)); + return fp; } GLCircleOutside2PtConicalEffect::GLCircleOutside2PtConicalEffect(const GrProcessor& processor) diff --git a/src/gpu/GrShaderDataManager.cpp b/src/gpu/GrShaderDataManager.cpp new file mode 100644 index 0000000000..8497f31463 --- /dev/null +++ b/src/gpu/GrShaderDataManager.cpp @@ -0,0 +1,8 @@ +/* + * Copyright 2015 Google Inc. + * + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "GrShaderDataManager.h" diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp index 332f084c5b..4c71093e44 100644 --- a/src/gpu/SkGr.cpp +++ b/src/gpu/SkGr.cpp @@ -770,7 +770,8 @@ bool SkPaint2GrPaint(GrContext* context, GrRenderTarget* rt, const SkPaint& skPa // Allow the shader to modify paintColor and also create an effect to be installed as // the first color effect on the GrPaint. GrFragmentProcessor* fp = NULL; - if (!shader->asFragmentProcessor(context, skPaint, viewM, NULL, &paintColor, &fp)) { + if (!shader->asFragmentProcessor(context, skPaint, viewM, NULL, &paintColor, + grPaint->getShaderDataManager(), &fp)) { return false; } if (fp) { |