Convert some SkRuntimeEffect::Make to use stage-specific factories
The old factory is deprecated. The new ones do stricter checking on the
signature of main and calls to sample, and include checks at effect
creation-time that the SkSL is valid for the requested stage.
Bug: skia:11813
Change-Id: Ibd15a6f90e74bdc9c2352d3dc61b6682f626f413
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/397477
Reviewed-by: Florin Malita <fmalita@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/gm/lumafilter.cpp b/gm/lumafilter.cpp
index 1b3166b..779dd89 100644
--- a/gm/lumafilter.cpp
+++ b/gm/lumafilter.cpp
@@ -185,7 +185,7 @@
canvas->translate(128,0);
// Splatting the Y channel of XYZ on the right should result in (near) greyscale.
- auto [effect, err] = SkRuntimeEffect::Make(SkString{
+ auto [effect, err] = SkRuntimeEffect::MakeForColorFilter(SkString{
"half4 main(half4 inColor) { return inColor.yyya; }"});
SkASSERT(effect && err.isEmpty());
diff --git a/gm/runtimecolorfilter.cpp b/gm/runtimecolorfilter.cpp
index d544c02..d55319d 100644
--- a/gm/runtimecolorfilter.cpp
+++ b/gm/runtimecolorfilter.cpp
@@ -32,12 +32,6 @@
}
)";
-const char* gLumaSrcWithCoords = R"(
- half4 main(float2 p, half4 color) {
- return dot(color.rgb, half3(0.3, 0.6, 0.1)).000r;
- }
-)";
-
// Build up the same effect with increasingly complex control flow syntax.
// All of these are semantically equivalent and can be reduced in principle to one basic block.
@@ -92,7 +86,7 @@
sk_sp<SkImage> img = GetResourceAsImage("images/mandrill_256.png");
auto draw_filter = [&](const char* src) {
- auto [effect, err] = SkRuntimeEffect::Make(SkString(src));
+ auto [effect, err] = SkRuntimeEffect::MakeForColorFilter(SkString(src));
if (!effect) {
SkDebugf("%s\n%s\n", src, err.c_str());
}
@@ -103,10 +97,10 @@
canvas->translate(256, 0);
};
- for (const char* src : { gNoop, gLumaSrc, gLumaSrcWithCoords}) {
+ for (const char* src : { gNoop, gLumaSrc }) {
draw_filter(src);
}
- canvas->translate(-256*3, 256);
+ canvas->translate(-256*2, 256);
for (const char* src : { gTernary, gIfs, gEarlyReturn}) {
draw_filter(src);
}
diff --git a/gm/runtimeeffectimage.cpp b/gm/runtimeeffectimage.cpp
index b9cb610..c24f77a 100644
--- a/gm/runtimeeffectimage.cpp
+++ b/gm/runtimeeffectimage.cpp
@@ -42,7 +42,7 @@
return result;
}
)");
- auto [effect, error] = SkRuntimeEffect::Make(sksl);
+ auto [effect, error] = SkRuntimeEffect::MakeForShader(sksl);
if (!effect) {
SkDebugf("RuntimeShader error: %s\n", error.c_str());
}
diff --git a/gm/runtimefunctions.cpp b/gm/runtimefunctions.cpp
index d472602..8158864 100644
--- a/gm/runtimefunctions.cpp
+++ b/gm/runtimefunctions.cpp
@@ -40,7 +40,7 @@
void onDraw(SkCanvas* canvas) override {
sk_sp<SkRuntimeEffect> gEffect =
- SkRuntimeEffect::Make(SkString(RUNTIME_FUNCTIONS_SRC)).effect;
+ SkRuntimeEffect::MakeForShader(SkString(RUNTIME_FUNCTIONS_SRC)).effect;
SkASSERT(gEffect);
SkMatrix localM;
diff --git a/gm/runtimeintrinsics.cpp b/gm/runtimeintrinsics.cpp
index a6729c9..5a51c61 100644
--- a/gm/runtimeintrinsics.cpp
+++ b/gm/runtimeintrinsics.cpp
@@ -114,7 +114,7 @@
draw_label(canvas, label ? label : fn);
- auto [effect, error] = SkRuntimeEffect::Make(make_unary_sksl_1d(fn));
+ auto [effect, error] = SkRuntimeEffect::MakeForShader(make_unary_sksl_1d(fn));
if (!effect) {
SkDebugf("Error: %s\n", error.c_str());
return;
@@ -339,7 +339,7 @@
draw_label(canvas, label);
- auto [effect, error] = SkRuntimeEffect::Make(make_matrix_comp_mult_sksl(N));
+ auto [effect, error] = SkRuntimeEffect::MakeForShader(make_matrix_comp_mult_sksl(N));
if (!effect) {
SkDebugf("Error: %s\n", error.c_str());
return;
@@ -376,7 +376,7 @@
draw_label(canvas, label);
- auto [effect, error] = SkRuntimeEffect::Make(make_matrix_inverse_sksl(N));
+ auto [effect, error] = SkRuntimeEffect::MakeForShader(make_matrix_inverse_sksl(N));
if (!effect) {
SkDebugf("Error: %s\n", error.c_str());
return;
@@ -465,7 +465,7 @@
draw_label(canvas, label);
const char* type = std::is_integral<T>::value ? "int" : "float";
- auto [effect, error] = SkRuntimeEffect::Make(make_bvec_sksl(type, fn));
+ auto [effect, error] = SkRuntimeEffect::MakeForShader(make_bvec_sksl(type, fn));
if (!effect) {
SkDebugf("Error: %s\n", error.c_str());
return;
diff --git a/gm/runtimeshader.cpp b/gm/runtimeshader.cpp
index 578f28a..663c349 100644
--- a/gm/runtimeshader.cpp
+++ b/gm/runtimeshader.cpp
@@ -30,7 +30,7 @@
: fName(name), fSize(size), fFlags(flags), fSkSL(sksl) {}
void onOnceBeforeDraw() override {
- auto [effect, error] = SkRuntimeEffect::Make(fSkSL);
+ auto [effect, error] = SkRuntimeEffect::MakeForShader(fSkSL);
if (!effect) {
SkDebugf("RuntimeShader error: %s\n", error.c_str());
}
@@ -300,12 +300,10 @@
class DefaultColorRT : public RuntimeShaderGM {
public:
- // This test also *explicitly* doesn't include coords in main's parameter list, to test that
- // runtime shaders work without them being declared (when they're not used).
DefaultColorRT() : RuntimeShaderGM("default_color_rt", {512, 256}, R"(
uniform shader input;
- half4 main() {
- return sample(input);
+ half4 main(float2 xy) {
+ return sample(input, xy);
}
)") {}
@@ -513,7 +511,7 @@
surf->getCanvas()->drawLine(0, 0, 100, 100, p);
auto shader = surf->makeImageSnapshot()->makeShader(SkSamplingOptions(SkFilterMode::kLinear));
- SkRuntimeShaderBuilder builder(SkRuntimeEffect::Make(SkString(scale)).effect);
+ SkRuntimeShaderBuilder builder(SkRuntimeEffect::MakeForShader(SkString(scale)).effect);
builder.child("child") = shader;
p.setShader(builder.makeShader(nullptr, false));