Move 'shader' usage tests to an SkSL golden file

Also adds tests of non-uniform shader declarations. These are currently
allowed, but will be detected as an error in the next CL.

Bug: skia:11374
Change-Id: I3fee0a0c97ae590f7bc6952cb367f7e94436b891
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/393080
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
diff --git a/gn/sksl_tests.gni b/gn/sksl_tests.gni
index 16a8096..327c051 100644
--- a/gn/sksl_tests.gni
+++ b/gn/sksl_tests.gni
@@ -572,6 +572,7 @@
   "/sksl/runtime_errors/IllegalArrayOps.rte",
   "/sksl/runtime_errors/IllegalIndexing.rte",
   "/sksl/runtime_errors/IllegalOperators.rte",
+  "/sksl/runtime_errors/IllegalShaderUse.rte",
   "/sksl/runtime_errors/IllegalStatements.rte",
   "/sksl/runtime_errors/LoopConditionErrors.rte",
   "/sksl/runtime_errors/LoopExpressionErrors.rte",
diff --git a/resources/sksl/runtime_errors/IllegalShaderUse.rte b/resources/sksl/runtime_errors/IllegalShaderUse.rte
new file mode 100644
index 0000000..67f06b8
--- /dev/null
+++ b/resources/sksl/runtime_errors/IllegalShaderUse.rte
@@ -0,0 +1,17 @@
+// Expect 5 errors
+
+// Correct declaration (used in some test functions)
+uniform shader s1;
+uniform shader s2;
+
+// Incorrect shader declarations (they must be uniform)
+// TODO(skbug.com/11374): These are not detected as errors yet
+shader s3;
+in shader s4;
+
+// Various places that shaders should not be allowed:
+half4  local()             { shader s; return sample(s); }
+half4  parameter(shader s) { return sample(s); }
+shader returned()          { return s1; }
+half4  constructed()       { return sample(shader(s1)); }
+half4  expression(bool b)  { return sample(b ? s1 : s2); }
diff --git a/tests/SkRuntimeEffectTest.cpp b/tests/SkRuntimeEffectTest.cpp
index 9019a64..fca5ce7 100644
--- a/tests/SkRuntimeEffectTest.cpp
+++ b/tests/SkRuntimeEffectTest.cpp
@@ -72,24 +72,6 @@
     test_invalid_effect(r, "", "main");
 }
 
-DEF_TEST(SkRuntimeEffectInvalid_ShaderLimitations, r) {
-    // Various places that shaders (fragmentProcessors) should not be allowed
-    test_invalid_effect(r, "half4 main() { shader child; return sample(child); }",
-                        "must be global");
-    test_invalid_effect(r, "uniform shader child; half4 helper(shader fp) { return sample(fp); }"
-                           "half4 main() { return helper(child); }",
-                           "parameter");
-    test_invalid_effect(r, "uniform shader child; shader get_child() { return child; }"
-                           "half4 main() { return sample(get_child()); }",
-                           "return");
-    test_invalid_effect(r, "uniform shader child;"
-                           "half4 main() { return sample(shader(child)); }",
-                           "construct");
-    test_invalid_effect(r, "uniform shader child1; uniform shader child2;"
-                           "half4 main(float2 p) { return sample(p.x > 10 ? child1 : child2); }",
-                           "expression");
-}
-
 DEF_TEST(SkRuntimeEffectInvalid_SkCapsDisallowed, r) {
     // sk_Caps is an internal system. It should not be visible to runtime effects
     test_invalid_effect(r, "half4 main() { return sk_Caps.integerSupport ? half4(1) : half4(0); }",
diff --git a/tests/sksl/runtime_errors/IllegalShaderUse.skvm b/tests/sksl/runtime_errors/IllegalShaderUse.skvm
new file mode 100644
index 0000000..840154b
--- /dev/null
+++ b/tests/sksl/runtime_errors/IllegalShaderUse.skvm
@@ -0,0 +1,8 @@
+### Compilation failed:
+
+error: 13: variables of type 'shader' must be global
+error: 14: parameters of type 'shader' not allowed
+error: 15: functions may not return opaque type 'shader'
+error: 16: cannot construct 'shader'
+error: 17: ternary expression of opaque type 'shader' not allowed
+5 errors