make legacy shadercontext optional
Current savings : 96K on intel mac
Breaks -- these subclass don't have a pipeline
- emboss
- perlinnoise
For now, shadercontext is still on -- clients must opt-out with SK_DISABLE_LEGACY_SHADERCONTEXT
Bug: skia:
Change-Id: Idd14cae4013e8de92f16b0707f8b8d43bb6d11dd
Reviewed-on: https://skia-review.googlesource.com/c/162362
Auto-Submit: Mike Reed <reed@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Reed <reed@google.com>
diff --git a/src/shaders/SkColorShader.cpp b/src/shaders/SkColorShader.cpp
index 6858965..903b164 100644
--- a/src/shaders/SkColorShader.cpp
+++ b/src/shaders/SkColorShader.cpp
@@ -31,10 +31,12 @@
return fFlags;
}
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
SkShaderBase::Context* SkColorShader::onMakeContext(const ContextRec& rec,
SkArenaAlloc* alloc) const {
return alloc->make<ColorShaderContext>(*this, rec);
}
+#endif
SkColorShader::ColorShaderContext::ColorShaderContext(const SkColorShader& shader,
const ContextRec& rec)
@@ -146,10 +148,12 @@
return fFlags;
}
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
SkShaderBase::Context* SkColor4Shader::onMakeContext(const ContextRec& rec,
SkArenaAlloc* alloc) const {
return alloc->make<Color4Context>(*this, rec);
}
+#endif
SkColor4Shader::Color4Context::Color4Context(const SkColor4Shader& shader,
const ContextRec& rec)
diff --git a/src/shaders/SkColorShader.h b/src/shaders/SkColorShader.h
index 0e84f50..e8625c0 100644
--- a/src/shaders/SkColorShader.h
+++ b/src/shaders/SkColorShader.h
@@ -55,7 +55,9 @@
protected:
SkColorShader(SkReadBuffer&);
void flatten(SkWriteBuffer&) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc* storage) const override;
+#endif
bool onAsLuminanceColor(SkColor* lum) const override {
*lum = fColor;
@@ -110,7 +112,9 @@
protected:
SkColor4Shader(SkReadBuffer&);
void flatten(SkWriteBuffer&) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
+#endif
bool onAsLuminanceColor(SkColor* lum) const override {
*lum = fCachedByteColor;
return true;
diff --git a/src/shaders/SkEmptyShader.h b/src/shaders/SkEmptyShader.h
index 7956003..673fc27 100644
--- a/src/shaders/SkEmptyShader.h
+++ b/src/shaders/SkEmptyShader.h
@@ -23,9 +23,11 @@
SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkEmptyShader)
protected:
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override {
return nullptr;
}
+#endif
void flatten(SkWriteBuffer& buffer) const override {
// Do nothing.
diff --git a/src/shaders/SkImageShader.cpp b/src/shaders/SkImageShader.cpp
index fa1ca80..e339d93 100644
--- a/src/shaders/SkImageShader.cpp
+++ b/src/shaders/SkImageShader.cpp
@@ -70,6 +70,7 @@
return fImage->isOpaque() && fTileModeX != kDecal_TileMode && fTileModeY != kDecal_TileMode;
}
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
static bool legacy_shader_can_handle(const SkMatrix& inv) {
if (!inv.isScaleTranslate()) {
return false;
@@ -91,7 +92,9 @@
// legacy shader impl should be able to handle these matrices
return true;
}
+#endif
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
SkShaderBase::Context* SkImageShader::onMakeContext(const ContextRec& rec,
SkArenaAlloc* alloc) const {
const auto info = as_IB(fImage)->onImageInfo();
@@ -120,6 +123,7 @@
return SkBitmapProcLegacyShader::MakeContext(*this, fTileModeX, fTileModeY,
SkBitmapProvider(fImage.get()), rec, alloc);
}
+#endif
SkImage* SkImageShader::onIsAImage(SkMatrix* texM, TileMode xy[]) const {
if (texM) {
diff --git a/src/shaders/SkImageShader.h b/src/shaders/SkImageShader.h
index 01ebbc9..c790d63 100644
--- a/src/shaders/SkImageShader.h
+++ b/src/shaders/SkImageShader.h
@@ -37,7 +37,9 @@
bool clampAsIfUnpremul);
void flatten(SkWriteBuffer&) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc* storage) const override;
+#endif
SkImage* onIsAImage(SkMatrix*, SkShader::TileMode*) const override;
bool onAppendStages(const StageRec&) const override;
diff --git a/src/shaders/SkLightingShader.cpp b/src/shaders/SkLightingShader.cpp
index dbc443e..f3019cd 100644
--- a/src/shaders/SkLightingShader.cpp
+++ b/src/shaders/SkLightingShader.cpp
@@ -84,7 +84,9 @@
protected:
void flatten(SkWriteBuffer&) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
+#endif
sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
private:
@@ -450,6 +452,7 @@
}
}
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
SkShaderBase::Context* SkLightingShaderImpl::onMakeContext(
const ContextRec& rec, SkArenaAlloc* alloc) const
{
@@ -468,6 +471,7 @@
return alloc->make<LightingShaderContext>(*this, rec, diffuseContext, normalProvider, nullptr);
}
+#endif
sk_sp<SkShader> SkLightingShaderImpl::onMakeColorSpace(SkColorSpaceXformer* xformer) const {
sk_sp<SkShader> xformedDiffuseShader =
diff --git a/src/shaders/SkLocalMatrixShader.cpp b/src/shaders/SkLocalMatrixShader.cpp
index 28d7775..e0ca930 100644
--- a/src/shaders/SkLocalMatrixShader.cpp
+++ b/src/shaders/SkLocalMatrixShader.cpp
@@ -35,6 +35,7 @@
buffer.writeFlattenable(fProxyShader.get());
}
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
SkShaderBase::Context* SkLocalMatrixShader::onMakeContext(
const ContextRec& rec, SkArenaAlloc* alloc) const
{
@@ -48,6 +49,7 @@
return as_SB(fProxyShader)->makeContext(newRec, alloc);
}
+#endif
SkImage* SkLocalMatrixShader::onIsAImage(SkMatrix* outMatrix, enum TileMode* mode) const {
SkMatrix imageMatrix;
diff --git a/src/shaders/SkLocalMatrixShader.h b/src/shaders/SkLocalMatrixShader.h
index 783f4b6..30efb27 100644
--- a/src/shaders/SkLocalMatrixShader.h
+++ b/src/shaders/SkLocalMatrixShader.h
@@ -43,7 +43,9 @@
protected:
void flatten(SkWriteBuffer&) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
+#endif
SkImage* onIsAImage(SkMatrix* matrix, TileMode* mode) const override;
diff --git a/src/shaders/SkPerlinNoiseShader.cpp b/src/shaders/SkPerlinNoiseShader.cpp
index 23b8103..a5e9381 100644
--- a/src/shaders/SkPerlinNoiseShader.cpp
+++ b/src/shaders/SkPerlinNoiseShader.cpp
@@ -369,7 +369,9 @@
protected:
void flatten(SkWriteBuffer&) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
+#endif
private:
const SkPerlinNoiseShaderImpl::Type fType;
@@ -646,10 +648,12 @@
return SkPreMultiplyARGB(rgba[3], rgba[0], rgba[1], rgba[2]);
}
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
SkShaderBase::Context* SkPerlinNoiseShaderImpl::onMakeContext(const ContextRec& rec,
SkArenaAlloc* alloc) const {
return alloc->make<PerlinNoiseShaderContext>(*this, rec);
}
+#endif
static inline SkMatrix total_matrix(const SkShaderBase::ContextRec& rec,
const SkShaderBase& shader) {
diff --git a/src/shaders/SkPictureShader.cpp b/src/shaders/SkPictureShader.cpp
index 7320f7e..13b551a 100644
--- a/src/shaders/SkPictureShader.cpp
+++ b/src/shaders/SkPictureShader.cpp
@@ -286,6 +286,8 @@
}
/////////////////////////////////////////////////////////////////////////////////////////
+
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
SkShaderBase::Context* SkPictureShader::onMakeContext(const ContextRec& rec, SkArenaAlloc* alloc)
const {
auto lm = this->totalLocalMatrix(rec.fLocalMatrix);
@@ -304,6 +306,7 @@
}
return ctx;
}
+#endif
sk_sp<SkShader> SkPictureShader::onMakeColorSpace(SkColorSpaceXformer* xformer) const {
sk_sp<SkColorSpace> dstCS = xformer->dst();
diff --git a/src/shaders/SkPictureShader.h b/src/shaders/SkPictureShader.h
index 799a10c..514d71f 100644
--- a/src/shaders/SkPictureShader.h
+++ b/src/shaders/SkPictureShader.h
@@ -38,7 +38,9 @@
SkPictureShader(SkReadBuffer&);
void flatten(SkWriteBuffer&) const override;
bool onAppendStages(const StageRec&) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
+#endif
sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
private:
diff --git a/src/shaders/SkShader.cpp b/src/shaders/SkShader.cpp
index 4ebdd63..db75c18 100644
--- a/src/shaders/SkShader.cpp
+++ b/src/shaders/SkShader.cpp
@@ -101,6 +101,7 @@
}
SkShaderBase::Context* SkShaderBase::makeContext(const ContextRec& rec, SkArenaAlloc* alloc) const {
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
// We always fall back to raster pipeline when perspective is present.
if (rec.fMatrix->hasPerspective() ||
fLocalMatrix.hasPerspective() ||
@@ -110,11 +111,14 @@
}
return this->onMakeContext(rec, alloc);
+#else
+ return nullptr;
+#endif
}
SkShaderBase::Context* SkShaderBase::makeBurstPipelineContext(const ContextRec& rec,
SkArenaAlloc* alloc) const {
-
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
// Always use vanilla stages for perspective.
if (rec.fMatrix->hasPerspective() || fLocalMatrix.hasPerspective()) {
return nullptr;
@@ -123,6 +127,9 @@
return this->computeTotalInverse(*rec.fMatrix, rec.fLocalMatrix, nullptr)
? this->onMakeBurstPipelineContext(rec, alloc)
: nullptr;
+#else
+ return nullptr;
+#endif
}
SkShaderBase::Context::Context(const SkShaderBase& shader, const ContextRec& rec)
diff --git a/src/shaders/SkShaderBase.h b/src/shaders/SkShaderBase.h
index e489d77..23e5ff4 100644
--- a/src/shaders/SkShaderBase.h
+++ b/src/shaders/SkShaderBase.h
@@ -205,6 +205,7 @@
void flatten(SkWriteBuffer&) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
/**
* Specialize creating a SkShader context using the supplied allocator.
* @return pointer to context owned by the arena allocator.
@@ -219,6 +220,7 @@
virtual Context* onMakeBurstPipelineContext(const ContextRec&, SkArenaAlloc*) const {
return nullptr;
}
+#endif
virtual bool onAsLuminanceColor(SkColor*) const {
return false;
diff --git a/src/shaders/gradients/SkLinearGradient.cpp b/src/shaders/gradients/SkLinearGradient.cpp
index d41f375..77473ec 100644
--- a/src/shaders/gradients/SkLinearGradient.cpp
+++ b/src/shaders/gradients/SkLinearGradient.cpp
@@ -52,6 +52,7 @@
buffer.writePoint(fEnd);
}
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
SkShaderBase::Context* SkLinearGradient::onMakeContext(
const ContextRec& rec, SkArenaAlloc* alloc) const
{
@@ -71,6 +72,7 @@
return fColorCount > 2 ? CheckedMakeContext<LinearGradient4fContext>(alloc, *this, rec)
: nullptr;
}
+#endif
void SkLinearGradient::appendGradientStages(SkArenaAlloc*, SkRasterPipeline*,
SkRasterPipeline*) const {
diff --git a/src/shaders/gradients/SkLinearGradient.h b/src/shaders/gradients/SkLinearGradient.h
index d100a1c..73af165 100644
--- a/src/shaders/gradients/SkLinearGradient.h
+++ b/src/shaders/gradients/SkLinearGradient.h
@@ -24,8 +24,10 @@
protected:
SkLinearGradient(SkReadBuffer& buffer);
void flatten(SkWriteBuffer& buffer) const override;
+#ifdef SK_ENABLE_LEGACY_SHADERCONTEXT
Context* onMakeContext(const ContextRec&, SkArenaAlloc*) const override;
Context* onMakeBurstPipelineContext(const ContextRec&, SkArenaAlloc*) const override;
+#endif
void appendGradientStages(SkArenaAlloc* alloc, SkRasterPipeline* tPipeline,
SkRasterPipeline* postPipeline) const final;