aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Ethan Nicholas <ethannicholas@google.com>2017-11-07 09:23:38 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-11-07 14:55:18 +0000
commit14efcbf3497e6a280cc141e6dec179b4ad4565af (patch)
tree7814950d3484348a7d2f8ff23ed1c1d604c5e79a
parent82a62d2d4ef55e53730a4f194a82d4e5da0c4a64 (diff)
converted LumaColorFilterEffect to sksl
Bug: skia: Change-Id: I208984ec9ad357249ee1b2fe28477f1450b4b69d Reviewed-on: https://skia-review.googlesource.com/67848 Commit-Queue: Ethan Nicholas <ethannicholas@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
-rw-r--r--gn/gpu.gni2
-rw-r--r--gn/sksl.gni1
-rw-r--r--src/effects/SkLumaColorFilter.cpp63
-rw-r--r--src/gpu/GrProcessor.h1
-rw-r--r--src/gpu/effects/GrLumaColorFilterEffect.cpp50
-rw-r--r--src/gpu/effects/GrLumaColorFilterEffect.fp16
-rw-r--r--src/gpu/effects/GrLumaColorFilterEffect.h44
-rw-r--r--src/sksl/SkSLGLSLCodeGenerator.cpp4
-rw-r--r--src/sksl/sksl_fp.include1
9 files changed, 120 insertions, 62 deletions
diff --git a/gn/gpu.gni b/gn/gpu.gni
index e67b2acb85..185d6d899e 100644
--- a/gn/gpu.gni
+++ b/gn/gpu.gni
@@ -347,6 +347,8 @@ skia_gpu_sources = [
"$_src/gpu/effects/GrGaussianConvolutionFragmentProcessor.h",
"$_src/gpu/effects/GrMatrixConvolutionEffect.cpp",
"$_src/gpu/effects/GrMatrixConvolutionEffect.h",
+ "$_src/gpu/effects/GrLumaColorFilterEffect.cpp",
+ "$_src/gpu/effects/GrLumaColorFilterEffect.h",
"$_src/gpu/effects/GrNonlinearColorSpaceXformEffect.cpp",
"$_src/gpu/effects/GrNonlinearColorSpaceXformEffect.h",
"$_src/gpu/effects/GrOverdrawFragmentProcessor.cpp",
diff --git a/gn/sksl.gni b/gn/sksl.gni
index 5eef5b1cb8..ca6abcff09 100644
--- a/gn/sksl.gni
+++ b/gn/sksl.gni
@@ -34,6 +34,7 @@ skia_gpu_processor_sources = [
"$_src/gpu/effects/GrConfigConversionEffect.fp",
"$_src/gpu/effects/GrDitherEffect.fp",
"$_src/gpu/effects/GrEllipseEffect.fp",
+ "$_src/gpu/effects/GrLumaColorFilterEffect.fp",
"$_src/gpu/effects/GrRectBlurEffect.fp",
"$_src/gpu/effects/GrOverdrawFragmentProcessor.fp",
"$_src/gpu/effects/GrSimpleTextureEffect.fp",
diff --git a/src/effects/SkLumaColorFilter.cpp b/src/effects/SkLumaColorFilter.cpp
index 22c0285a1e..6b7564b51a 100644
--- a/src/effects/SkLumaColorFilter.cpp
+++ b/src/effects/SkLumaColorFilter.cpp
@@ -13,6 +13,7 @@
#if SK_SUPPORT_GPU
#include "GrContext.h"
+#include "effects/GrLumaColorFilterEffect.h"
#include "glsl/GrGLSLFragmentProcessor.h"
#include "glsl/GrGLSLFragmentShaderBuilder.h"
#endif
@@ -43,68 +44,8 @@ void SkLumaColorFilter::toString(SkString* str) const {
#endif
#if SK_SUPPORT_GPU
-class LumaColorFilterEffect : public GrFragmentProcessor {
-public:
- static std::unique_ptr<GrFragmentProcessor> Make() {
- return std::unique_ptr<GrFragmentProcessor>(new LumaColorFilterEffect);
- }
-
- const char* name() const override { return "Luminance-to-Alpha"; }
-
- std::unique_ptr<GrFragmentProcessor> clone() const override { return Make(); }
-
-private:
- class GLSLProcessor : public GrGLSLFragmentProcessor {
- public:
- static void GenKey(const GrProcessor&, const GrShaderCaps&, GrProcessorKeyBuilder*) {}
-
- void emitCode(EmitArgs& args) override {
- if (nullptr == args.fInputColor) {
- args.fInputColor = "half4(1)";
- }
-
- GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
- fragBuilder->codeAppendf("\thalf luma = dot(half3(%f, %f, %f), %s.rgb);\n",
- SK_ITU_BT709_LUM_COEFF_R,
- SK_ITU_BT709_LUM_COEFF_G,
- SK_ITU_BT709_LUM_COEFF_B,
- args.fInputColor);
- fragBuilder->codeAppendf("\t%s = half4(0, 0, 0, luma);\n",
- args.fOutputColor);
-
- }
-
- private:
- typedef GrGLSLFragmentProcessor INHERITED;
- };
-
- LumaColorFilterEffect()
- : INHERITED(kLumaColorFilterEffect_ClassID, kConstantOutputForConstantInput_OptimizationFlag) {
- }
-
- GrGLSLFragmentProcessor* onCreateGLSLInstance() const override {
- return new GLSLProcessor;
- }
-
- virtual void onGetGLSLProcessorKey(const GrShaderCaps& caps,
- GrProcessorKeyBuilder* b) const override {
- GLSLProcessor::GenKey(*this, caps, b);
- }
-
- bool onIsEqual(const GrFragmentProcessor&) const override { return true; }
-
- GrColor4f constantOutputForConstantInput(GrColor4f input) const override {
- float luma = SK_ITU_BT709_LUM_COEFF_R * input.fRGBA[0] +
- SK_ITU_BT709_LUM_COEFF_G * input.fRGBA[1] +
- SK_ITU_BT709_LUM_COEFF_B * input.fRGBA[2];
- return GrColor4f(0, 0, 0, luma);
- }
-
- typedef GrFragmentProcessor INHERITED;
-};
-
std::unique_ptr<GrFragmentProcessor> SkLumaColorFilter::asFragmentProcessor(
GrContext*, const GrColorSpaceInfo&) const {
- return LumaColorFilterEffect::Make();
+ return GrLumaColorFilterEffect::Make();
}
#endif
diff --git a/src/gpu/GrProcessor.h b/src/gpu/GrProcessor.h
index d8e4f2d94c..cd11ac4ac2 100644
--- a/src/gpu/GrProcessor.h
+++ b/src/gpu/GrProcessor.h
@@ -116,6 +116,7 @@ public:
kGrImprovedPerlinNoiseEffect_ClassID,
kGrLightingEffect_ClassID,
kGrLinearGradient_ClassID,
+ kGrLumaColorFilterEffect_ClassID,
kGrMagnifierEffect_ClassID,
kGrMatrixConvolutionEffect_ClassID,
kGrMeshTestProcessor_ClassID,
diff --git a/src/gpu/effects/GrLumaColorFilterEffect.cpp b/src/gpu/effects/GrLumaColorFilterEffect.cpp
new file mode 100644
index 0000000000..e09751d9b6
--- /dev/null
+++ b/src/gpu/effects/GrLumaColorFilterEffect.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/*
+ * This file was autogenerated from GrLumaColorFilterEffect.fp; do not modify.
+ */
+#include "GrLumaColorFilterEffect.h"
+#if SK_SUPPORT_GPU
+#include "glsl/GrGLSLFragmentProcessor.h"
+#include "glsl/GrGLSLFragmentShaderBuilder.h"
+#include "glsl/GrGLSLProgramBuilder.h"
+#include "SkSLCPP.h"
+#include "SkSLUtil.h"
+class GrGLSLLumaColorFilterEffect : public GrGLSLFragmentProcessor {
+public:
+ GrGLSLLumaColorFilterEffect() {}
+ void emitCode(EmitArgs& args) override {
+ GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
+ const GrLumaColorFilterEffect& _outer = args.fFp.cast<GrLumaColorFilterEffect>();
+ (void)_outer;
+ fragBuilder->codeAppendf(
+ "\nhalf luma = dot(half3(0.21260000000000001, 0.71519999999999995, 0.0722), "
+ "%s.xyz);\n%s = half4(0.0, 0.0, 0.0, luma);\n",
+ args.fInputColor ? args.fInputColor : "half4(1)", args.fOutputColor);
+ }
+
+private:
+ void onSetData(const GrGLSLProgramDataManager& pdman,
+ const GrFragmentProcessor& _proc) override {}
+};
+GrGLSLFragmentProcessor* GrLumaColorFilterEffect::onCreateGLSLInstance() const {
+ return new GrGLSLLumaColorFilterEffect();
+}
+void GrLumaColorFilterEffect::onGetGLSLProcessorKey(const GrShaderCaps& caps,
+ GrProcessorKeyBuilder* b) const {}
+bool GrLumaColorFilterEffect::onIsEqual(const GrFragmentProcessor& other) const {
+ const GrLumaColorFilterEffect& that = other.cast<GrLumaColorFilterEffect>();
+ (void)that;
+ return true;
+}
+GrLumaColorFilterEffect::GrLumaColorFilterEffect(const GrLumaColorFilterEffect& src)
+ : INHERITED(kGrLumaColorFilterEffect_ClassID, src.optimizationFlags()) {}
+std::unique_ptr<GrFragmentProcessor> GrLumaColorFilterEffect::clone() const {
+ return std::unique_ptr<GrFragmentProcessor>(new GrLumaColorFilterEffect(*this));
+}
+#endif
diff --git a/src/gpu/effects/GrLumaColorFilterEffect.fp b/src/gpu/effects/GrLumaColorFilterEffect.fp
new file mode 100644
index 0000000000..b8b9fe047f
--- /dev/null
+++ b/src/gpu/effects/GrLumaColorFilterEffect.fp
@@ -0,0 +1,16 @@
+@class {
+ #include "SkColorData.h"
+
+ GrColor4f constantOutputForConstantInput(GrColor4f input) const override {
+ float luma = SK_ITU_BT709_LUM_COEFF_R * input.fRGBA[0] +
+ SK_ITU_BT709_LUM_COEFF_G * input.fRGBA[1] +
+ SK_ITU_BT709_LUM_COEFF_B * input.fRGBA[2];
+ return GrColor4f(0, 0, 0, luma);
+ }
+}
+
+void main() {
+ const half3 SK_ITU_BT709_LUM_COEFF = half3(0.2126, 0.7152, 0.0722);
+ half luma = dot(SK_ITU_BT709_LUM_COEFF, sk_InColor.rgb);
+ sk_OutColor = half4(0, 0, 0, luma);
+} \ No newline at end of file
diff --git a/src/gpu/effects/GrLumaColorFilterEffect.h b/src/gpu/effects/GrLumaColorFilterEffect.h
new file mode 100644
index 0000000000..e77aeed532
--- /dev/null
+++ b/src/gpu/effects/GrLumaColorFilterEffect.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2017 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/*
+ * This file was autogenerated from GrLumaColorFilterEffect.fp; do not modify.
+ */
+#ifndef GrLumaColorFilterEffect_DEFINED
+#define GrLumaColorFilterEffect_DEFINED
+#include "SkTypes.h"
+#if SK_SUPPORT_GPU
+#include "GrFragmentProcessor.h"
+#include "GrCoordTransform.h"
+class GrLumaColorFilterEffect : public GrFragmentProcessor {
+public:
+#include "SkColorData.h"
+
+ GrColor4f constantOutputForConstantInput(GrColor4f input) const override {
+ float luma = SK_ITU_BT709_LUM_COEFF_R * input.fRGBA[0] +
+ SK_ITU_BT709_LUM_COEFF_G * input.fRGBA[1] +
+ SK_ITU_BT709_LUM_COEFF_B * input.fRGBA[2];
+ return GrColor4f(0, 0, 0, luma);
+ }
+ static std::unique_ptr<GrFragmentProcessor> Make() {
+ return std::unique_ptr<GrFragmentProcessor>(new GrLumaColorFilterEffect());
+ }
+ GrLumaColorFilterEffect(const GrLumaColorFilterEffect& src);
+ std::unique_ptr<GrFragmentProcessor> clone() const override;
+ const char* name() const override { return "LumaColorFilterEffect"; }
+
+private:
+ GrLumaColorFilterEffect()
+ : INHERITED(kGrLumaColorFilterEffect_ClassID, kNone_OptimizationFlags) {}
+ GrGLSLFragmentProcessor* onCreateGLSLInstance() const override;
+ void onGetGLSLProcessorKey(const GrShaderCaps&, GrProcessorKeyBuilder*) const override;
+ bool onIsEqual(const GrFragmentProcessor&) const override;
+ GR_DECLARE_FRAGMENT_PROCESSOR_TEST
+ typedef GrFragmentProcessor INHERITED;
+};
+#endif
+#endif
diff --git a/src/sksl/SkSLGLSLCodeGenerator.cpp b/src/sksl/SkSLGLSLCodeGenerator.cpp
index 22331cdc80..2cbc023212 100644
--- a/src/sksl/SkSLGLSLCodeGenerator.cpp
+++ b/src/sksl/SkSLGLSLCodeGenerator.cpp
@@ -787,7 +787,9 @@ void GLSLCodeGenerator::writeTypePrecision(const Type& type) {
}
void GLSLCodeGenerator::writeVarDeclarations(const VarDeclarations& decl, bool global) {
- ASSERT(decl.fVars.size() > 0);
+ if (!decl.fVars.size()) {
+ return;
+ }
bool wroteType = false;
for (const auto& stmt : decl.fVars) {
VarDeclaration& var = (VarDeclaration&) *stmt;
diff --git a/src/sksl/sksl_fp.include b/src/sksl/sksl_fp.include
index d407fd08f6..5f8c7ea9a7 100644
--- a/src/sksl/sksl_fp.include
+++ b/src/sksl/sksl_fp.include
@@ -22,4 +22,5 @@ layout(builtin=10005) float2[] sk_TransformedCoords2D;
layout(builtin=10006) sampler2D[] sk_TextureSamplers;
half4 process(fragmentProcessor fp);
+
)