More threading of GrShaderDataManager
TBR=bsalomon@google.com
BUG=skia:
Review URL: https://codereview.chromium.org/1213613016
diff --git a/include/core/SkColorFilter.h b/include/core/SkColorFilter.h
index 5ba1a8f..c4109dc 100644
--- a/include/core/SkColorFilter.h
+++ b/include/core/SkColorFilter.h
@@ -16,6 +16,7 @@
class SkBitmap;
class GrProcessor;
class GrContext;
+class GrShaderDataManager;
/**
* ColorFilters are optional objects in the drawing pipeline. When present in
@@ -134,7 +135,8 @@
*
* If the subclass returns false, then it should not modify the array at all.
*/
- virtual bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const {
+ virtual bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+ SkTDArray<GrFragmentProcessor*>*) const {
return false;
}
diff --git a/include/effects/SkColorCubeFilter.h b/include/effects/SkColorCubeFilter.h
index 4999bc5..1fc355e 100644
--- a/include/effects/SkColorCubeFilter.h
+++ b/include/effects/SkColorCubeFilter.h
@@ -25,7 +25,8 @@
uint32_t getFlags() const override;
#if SK_SUPPORT_GPU
- bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+ bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+ SkTDArray<GrFragmentProcessor*>*) const override;
#endif
SK_TO_STRING_OVERRIDE()
diff --git a/include/effects/SkColorMatrixFilter.h b/include/effects/SkColorMatrixFilter.h
index 4709273..2dc6b49 100644
--- a/include/effects/SkColorMatrixFilter.h
+++ b/include/effects/SkColorMatrixFilter.h
@@ -26,7 +26,8 @@
SkColorFilter* newComposed(const SkColorFilter*) const override;
#if SK_SUPPORT_GPU
- bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+ bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+ SkTDArray<GrFragmentProcessor*>*) const override;
#endif
struct State {
diff --git a/include/effects/SkLumaColorFilter.h b/include/effects/SkLumaColorFilter.h
index 4e8ac79..4cca2d4 100644
--- a/include/effects/SkLumaColorFilter.h
+++ b/include/effects/SkLumaColorFilter.h
@@ -28,7 +28,8 @@
void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const override;
#if SK_SUPPORT_GPU
- bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+ bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+ SkTDArray<GrFragmentProcessor*>*) const override;
#endif
SK_TO_STRING_OVERRIDE()
diff --git a/include/effects/SkModeColorFilter.h b/include/effects/SkModeColorFilter.h
index a2cb841..17f135a 100644
--- a/include/effects/SkModeColorFilter.h
+++ b/include/effects/SkModeColorFilter.h
@@ -39,7 +39,8 @@
#endif
#if SK_SUPPORT_GPU
- bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+ bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+ SkTDArray<GrFragmentProcessor*>*) const override;
#endif
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkModeColorFilter)
diff --git a/src/core/SkColorFilter.cpp b/src/core/SkColorFilter.cpp
index 8007271..a707232 100644
--- a/src/core/SkColorFilter.cpp
+++ b/src/core/SkColorFilter.cpp
@@ -62,10 +62,10 @@
#endif
#if SK_SUPPORT_GPU
- bool asFragmentProcessors(GrContext* context,
+ bool asFragmentProcessors(GrContext* context, GrShaderDataManager* shaderDataManager,
SkTDArray<GrFragmentProcessor*>* array) const override {
- bool hasFrags = fInner->asFragmentProcessors(context, array);
- hasFrags |= fOuter->asFragmentProcessors(context, array);
+ bool hasFrags = fInner->asFragmentProcessors(context, shaderDataManager, array);
+ hasFrags |= fOuter->asFragmentProcessors(context, shaderDataManager, array);
return hasFrags;
}
#endif
diff --git a/src/effects/SkColorCubeFilter.cpp b/src/effects/SkColorCubeFilter.cpp
index 8347a9e..32bbd2e 100644
--- a/src/effects/SkColorCubeFilter.cpp
+++ b/src/effects/SkColorCubeFilter.cpp
@@ -337,7 +337,7 @@
const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
}
-bool SkColorCubeFilter::asFragmentProcessors(GrContext* context,
+bool SkColorCubeFilter::asFragmentProcessors(GrContext* context, GrShaderDataManager*,
SkTDArray<GrFragmentProcessor*>* array) const {
static const GrUniqueKey::Domain kDomain = GrUniqueKey::GenerateDomain();
GrUniqueKey key;
diff --git a/src/effects/SkColorFilters.cpp b/src/effects/SkColorFilters.cpp
index 1bb9f8f..ac3bee0 100644
--- a/src/effects/SkColorFilters.cpp
+++ b/src/effects/SkColorFilters.cpp
@@ -362,7 +362,7 @@
return ModeColorFilterEffect::Create(color, mode);
}
-bool SkModeColorFilter::asFragmentProcessors(GrContext*,
+bool SkModeColorFilter::asFragmentProcessors(GrContext*, GrShaderDataManager*,
SkTDArray<GrFragmentProcessor*>* array) const {
if (SkXfermode::kDst_Mode != fMode) {
GrFragmentProcessor* frag = ModeColorFilterEffect::Create(SkColor2GrColor(fColor), fMode);
diff --git a/src/effects/SkColorMatrixFilter.cpp b/src/effects/SkColorMatrixFilter.cpp
index 78d4797..6401aaa 100644
--- a/src/effects/SkColorMatrixFilter.cpp
+++ b/src/effects/SkColorMatrixFilter.cpp
@@ -542,7 +542,7 @@
return ColorMatrixEffect::Create(colorMatrix);
}
-bool SkColorMatrixFilter::asFragmentProcessors(GrContext*,
+bool SkColorMatrixFilter::asFragmentProcessors(GrContext*, GrShaderDataManager*,
SkTDArray<GrFragmentProcessor*>* array) const {
GrFragmentProcessor* frag = ColorMatrixEffect::Create(fMatrix);
if (frag) {
diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp
index 13bb6cb..021c3c1 100644
--- a/src/effects/SkLumaColorFilter.cpp
+++ b/src/effects/SkLumaColorFilter.cpp
@@ -119,7 +119,7 @@
}
};
-bool SkLumaColorFilter::asFragmentProcessors(GrContext*,
+bool SkLumaColorFilter::asFragmentProcessors(GrContext*, GrShaderDataManager*,
SkTDArray<GrFragmentProcessor*>* array) const {
GrFragmentProcessor* frag = LumaColorFilterEffect::Create();
diff --git a/src/effects/SkTableColorFilter.cpp b/src/effects/SkTableColorFilter.cpp
index 839b014..e4bc778 100644
--- a/src/effects/SkTableColorFilter.cpp
+++ b/src/effects/SkTableColorFilter.cpp
@@ -50,7 +50,8 @@
SkColorFilter* newComposed(const SkColorFilter* inner) const override;
#if SK_SUPPORT_GPU
- bool asFragmentProcessors(GrContext*, SkTDArray<GrFragmentProcessor*>*) const override;
+ bool asFragmentProcessors(GrContext*, GrShaderDataManager*,
+ SkTDArray<GrFragmentProcessor*>*) const override;
#endif
void filterSpan(const SkPMColor src[], int count, SkPMColor dst[]) const override;
@@ -576,7 +577,8 @@
));
SkTDArray<GrFragmentProcessor*> array;
- if (filter->asFragmentProcessors(context, &array)) {
+ GrPaint grPaint;
+ if (filter->asFragmentProcessors(context, grPaint.getShaderDataManager(), &array)) {
SkASSERT(1 == array.count()); // TableColorFilter only returns 1
return array[0];
}
@@ -584,6 +586,7 @@
}
bool SkTable_ColorFilter::asFragmentProcessors(GrContext* context,
+ GrShaderDataManager*,
SkTDArray<GrFragmentProcessor*>* array) const {
SkBitmap bitmap;
this->asComponentTable(&bitmap);
diff --git a/src/gpu/SkGr.cpp b/src/gpu/SkGr.cpp
index 4c71093..b7568c3 100644
--- a/src/gpu/SkGr.cpp
+++ b/src/gpu/SkGr.cpp
@@ -720,7 +720,8 @@
} else {
SkTDArray<GrFragmentProcessor*> array;
// return false if failed?
- if (colorFilter->asFragmentProcessors(context, &array)) {
+ if (colorFilter->asFragmentProcessors(context, grPaint->getShaderDataManager(),
+ &array)) {
for (int i = 0; i < array.count(); ++i) {
grPaint->addColorProcessor(array[i]);
array[i]->unref();
diff --git a/tests/GpuColorFilterTest.cpp b/tests/GpuColorFilterTest.cpp
index 037734e..3d7f89e 100644
--- a/tests/GpuColorFilterTest.cpp
+++ b/tests/GpuColorFilterTest.cpp
@@ -6,15 +6,16 @@
* found in the LICENSE file.
*/
+#include "SkColorFilter.h"
+#include "Test.h"
+
#if SK_SUPPORT_GPU
#include "GrContext.h"
#include "GrContextFactory.h"
#include "GrFragmentProcessor.h"
#include "GrInvariantOutput.h"
-#include "SkColorFilter.h"
#include "SkGr.h"
-#include "Test.h"
static GrColor filterColor(const GrColor& color, uint32_t flags) {
uint32_t mask = 0;
@@ -96,11 +97,12 @@
{ kR|kA , gr_whiteTrans, SkColorSetARGB(128, 200, 200, 200), SkXfermode::kModulate_Mode, kR|kA, GrColorPackRGBA(50, 0, 0, 64) }
};
+ GrPaint paint;
for (size_t i = 0; i < SK_ARRAY_COUNT(filterTests); ++i) {
const GetConstantComponentTestCase& test = filterTests[i];
SkAutoTUnref<SkColorFilter> cf(SkColorFilter::CreateModeFilter(test.filterColor, test.filterMode));
SkTDArray<GrFragmentProcessor*> array;
- bool hasFrag = cf->asFragmentProcessors(grContext, &array);
+ bool hasFrag = cf->asFragmentProcessors(grContext, paint.getShaderDataManager(), &array);
REPORTER_ASSERT(reporter, hasFrag);
REPORTER_ASSERT(reporter, 1 == array.count());
GrInvariantOutput inout(test.inputColor,