Added DSL fragmentProcessor and Sample function

Change-Id: I76348d151fbf27454a6f60e4f5f7e1774731e61b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/395216
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/tests/SkSLDSLTest.cpp b/tests/SkSLDSLTest.cpp
index 4fdd82a..e15b0fd 100644
--- a/tests/SkSLDSLTest.cpp
+++ b/tests/SkSLDSLTest.cpp
@@ -27,8 +27,9 @@
  */
 class AutoDSLContext {
 public:
-    AutoDSLContext(GrGpu* gpu, bool markVarsDeclared = true) {
-        Start(gpu->shaderCompiler());
+    AutoDSLContext(GrGpu* gpu, bool markVarsDeclared = true,
+                   SkSL::ProgramKind kind = SkSL::ProgramKind::kFragment) {
+        Start(gpu->shaderCompiler(), kind);
         DSLWriter::Instance().fMangle = false;
         DSLWriter::Instance().fMarkVarsDeclared = markVarsDeclared;
     }
@@ -1394,6 +1395,21 @@
     // Uniforms do not need to be explicitly declared
 }
 
+DEF_GPUTEST_FOR_MOCK_CONTEXT(DSLSample, r, ctxInfo) {
+    AutoDSLContext context(ctxInfo.directContext()->priv().getGpu(), /*markVarsDeclared=*/true,
+                           SkSL::ProgramKind::kFragmentProcessor);
+    DSLVar child(kUniform_Modifier, kFragmentProcessor_Type, "child");
+    EXPECT_EQUAL(Sample(child), "sample(child)");
+    EXPECT_EQUAL(Sample(child, Float2(0, 0)), "sample(child, float2(0.0, 0.0))");
+    EXPECT_EQUAL(Sample(child, Half4(1)), "sample(child, half4(1.0))");
+    EXPECT_EQUAL(Sample(child, Half4(1), Float2(0)), "sample(child, half4(1.0), float2(0.0))");
+
+    {
+        ExpectError error(r, "error: no match for sample(fragmentProcessor, bool)\n");
+        Sample(child, true).release();
+    }
+}
+
 DEF_GPUTEST_FOR_MOCK_CONTEXT(DSLStruct, r, ctxInfo) {
     AutoDSLContext context(ctxInfo.directContext()->priv().getGpu(), /*markVarsDeclared=*/false);