GLSL: implement derivative instructions.

While Desktop GLSL supports the Coarse and Fine flavours, GLSL ES does
not. For now, emit dFdx/dFdy in all cases for ES, but excluding the
Coarse and Fine flavours via validation is also an option.

Bug: tint:1445
Change-Id: Iaac589f72043b5547e9141a6e870c1fd49631f6f
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/82142
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index 3291c76..9b6bdf6 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -1591,17 +1591,29 @@
     case sem::BuiltinType::kCountOneBits:
       return "countbits";
     case sem::BuiltinType::kDpdx:
-      return "ddx";
+      return "dFdx";
     case sem::BuiltinType::kDpdxCoarse:
-      return "ddx_coarse";
+      if (version_.IsES()) {
+        return "dFdx";
+      }
+      return "dFdxCoarse";
     case sem::BuiltinType::kDpdxFine:
-      return "ddx_fine";
+      if (version_.IsES()) {
+        return "dFdx";
+      }
+      return "dFdxFine";
     case sem::BuiltinType::kDpdy:
-      return "ddy";
+      return "dFdy";
     case sem::BuiltinType::kDpdyCoarse:
-      return "ddy_coarse";
+      if (version_.IsES()) {
+        return "dFdy";
+      }
+      return "dFdyCoarse";
     case sem::BuiltinType::kDpdyFine:
-      return "ddy_fine";
+      if (version_.IsES()) {
+        return "dFdy";
+      }
+      return "dFdyFine";
     case sem::BuiltinType::kFaceForward:
       return "faceforward";
     case sem::BuiltinType::kFract:
diff --git a/src/tint/writer/glsl/generator_impl_builtin_test.cc b/src/tint/writer/glsl/generator_impl_builtin_test.cc
index d7bd64a..1d69e15 100644
--- a/src/tint/writer/glsl/generator_impl_builtin_test.cc
+++ b/src/tint/writer/glsl/generator_impl_builtin_test.cc
@@ -203,12 +203,12 @@
         BuiltinData{BuiltinType::kDeterminant, ParamType::kF32, "determinant"},
         BuiltinData{BuiltinType::kDistance, ParamType::kF32, "distance"},
         BuiltinData{BuiltinType::kDot, ParamType::kF32, "dot"},
-        BuiltinData{BuiltinType::kDpdx, ParamType::kF32, "ddx"},
-        BuiltinData{BuiltinType::kDpdxCoarse, ParamType::kF32, "ddx_coarse"},
-        BuiltinData{BuiltinType::kDpdxFine, ParamType::kF32, "ddx_fine"},
-        BuiltinData{BuiltinType::kDpdy, ParamType::kF32, "ddy"},
-        BuiltinData{BuiltinType::kDpdyCoarse, ParamType::kF32, "ddy_coarse"},
-        BuiltinData{BuiltinType::kDpdyFine, ParamType::kF32, "ddy_fine"},
+        BuiltinData{BuiltinType::kDpdx, ParamType::kF32, "dFdx"},
+        BuiltinData{BuiltinType::kDpdxCoarse, ParamType::kF32, "dFdx"},
+        BuiltinData{BuiltinType::kDpdxFine, ParamType::kF32, "dFdx"},
+        BuiltinData{BuiltinType::kDpdy, ParamType::kF32, "dFdy"},
+        BuiltinData{BuiltinType::kDpdyCoarse, ParamType::kF32, "dFdy"},
+        BuiltinData{BuiltinType::kDpdyFine, ParamType::kF32, "dFdy"},
         BuiltinData{BuiltinType::kExp, ParamType::kF32, "exp"},
         BuiltinData{BuiltinType::kExp2, ParamType::kF32, "exp2"},
         BuiltinData{BuiltinType::kFaceForward, ParamType::kF32, "faceforward"},
diff --git a/test/tint/bug/tint/949.wgsl.expected.glsl b/test/tint/bug/tint/949.wgsl.expected.glsl
index f1f268f..212b48a 100644
--- a/test/tint/bug/tint/949.wgsl.expected.glsl
+++ b/test/tint/bug/tint/949.wgsl.expected.glsl
@@ -76,13 +76,13 @@
   vec3 bitangent = vec3(0.0f, 0.0f, 0.0f);
   float invmax = 0.0f;
   vec3 x_133 = p;
-  dp1 = ddx(x_133);
+  dp1 = dFdx(x_133);
   vec3 x_136 = p;
-  dp2 = ddy(x_136);
+  dp2 = dFdy(x_136);
   vec2 x_139 = uv;
-  duv1 = ddx(x_139);
+  duv1 = dFdx(x_139);
   vec2 x_142 = uv;
-  duv2 = ddy(x_142);
+  duv2 = dFdy(x_142);
   vec3 x_145 = dp2;
   vec3 x_146 = normal_1;
   dp2perp = cross(x_145, x_146);
@@ -375,10 +375,9 @@
   return;
 }
 Error parsing GLSL shader:
-ERROR: 0:77: 'ddx' : no matching overloaded function found 
-ERROR: 0:77: 'assign' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:77: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
+ERROR: 0:103: 'rsqrt' : no matching overloaded function found 
+ERROR: 0:103: '' : compilation terminated 
+ERROR: 2 compilation errors.  No code generated.
 
 
 
diff --git a/test/tint/builtins/gen/dpdx/0763f7.wgsl.expected.glsl b/test/tint/builtins/gen/dpdx/0763f7.wgsl.expected.glsl
index aa208f6..afd86a6 100644
--- a/test/tint/builtins/gen/dpdx/0763f7.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdx/0763f7.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdx_0763f7() {
-  vec3 res = ddx(vec3(0.0f, 0.0f, 0.0f));
+  vec3 res = dFdx(vec3(0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdx/99edb1.wgsl.expected.glsl b/test/tint/builtins/gen/dpdx/99edb1.wgsl.expected.glsl
index b13abff..9e216a1 100644
--- a/test/tint/builtins/gen/dpdx/99edb1.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdx/99edb1.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdx_99edb1() {
-  vec2 res = ddx(vec2(0.0f, 0.0f));
+  vec2 res = dFdx(vec2(0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdx/c487fa.wgsl.expected.glsl b/test/tint/builtins/gen/dpdx/c487fa.wgsl.expected.glsl
index 26f405a..c165181 100644
--- a/test/tint/builtins/gen/dpdx/c487fa.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdx/c487fa.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdx_c487fa() {
-  vec4 res = ddx(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec4 res = dFdx(vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdx/e263de.wgsl.expected.glsl b/test/tint/builtins/gen/dpdx/e263de.wgsl.expected.glsl
index 7f76d6c..7909a07 100644
--- a/test/tint/builtins/gen/dpdx/e263de.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdx/e263de.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdx_e263de() {
-  float res = ddx(1.0f);
+  float res = dFdx(1.0f);
 }
 
 void fragment_main() {
@@ -15,10 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdxCoarse/029152.wgsl.expected.glsl b/test/tint/builtins/gen/dpdxCoarse/029152.wgsl.expected.glsl
index 2f6680f..1a6f532 100644
--- a/test/tint/builtins/gen/dpdxCoarse/029152.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdxCoarse/029152.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdxCoarse_029152() {
-  float res = ddx_coarse(1.0f);
+  float res = dFdx(1.0f);
 }
 
 void fragment_main() {
@@ -15,10 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdxCoarse/9581cf.wgsl.expected.glsl b/test/tint/builtins/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
index 3b186ca..448520e 100644
--- a/test/tint/builtins/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdxCoarse/9581cf.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdxCoarse_9581cf() {
-  vec2 res = ddx_coarse(vec2(0.0f, 0.0f));
+  vec2 res = dFdx(vec2(0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdxCoarse/c28641.wgsl.expected.glsl b/test/tint/builtins/gen/dpdxCoarse/c28641.wgsl.expected.glsl
index ffd01ad..06c1a26 100644
--- a/test/tint/builtins/gen/dpdxCoarse/c28641.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdxCoarse/c28641.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdxCoarse_c28641() {
-  vec4 res = ddx_coarse(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec4 res = dFdx(vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl b/test/tint/builtins/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
index 4b28cfd..549fd3c 100644
--- a/test/tint/builtins/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdxCoarse/f64d7b.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdxCoarse_f64d7b() {
-  vec3 res = ddx_coarse(vec3(0.0f, 0.0f, 0.0f));
+  vec3 res = dFdx(vec3(0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdxFine/8c5069.wgsl.expected.glsl b/test/tint/builtins/gen/dpdxFine/8c5069.wgsl.expected.glsl
index bc8ba98..22d75e5 100644
--- a/test/tint/builtins/gen/dpdxFine/8c5069.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdxFine/8c5069.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdxFine_8c5069() {
-  vec4 res = ddx_fine(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec4 res = dFdx(vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdxFine/9631de.wgsl.expected.glsl b/test/tint/builtins/gen/dpdxFine/9631de.wgsl.expected.glsl
index dfa83bb..3a4f31f 100644
--- a/test/tint/builtins/gen/dpdxFine/9631de.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdxFine/9631de.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdxFine_9631de() {
-  vec2 res = ddx_fine(vec2(0.0f, 0.0f));
+  vec2 res = dFdx(vec2(0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdxFine/f401a2.wgsl.expected.glsl b/test/tint/builtins/gen/dpdxFine/f401a2.wgsl.expected.glsl
index 6772e22..16b9ab1 100644
--- a/test/tint/builtins/gen/dpdxFine/f401a2.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdxFine/f401a2.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdxFine_f401a2() {
-  float res = ddx_fine(1.0f);
+  float res = dFdx(1.0f);
 }
 
 void fragment_main() {
@@ -15,10 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdxFine/f92fb6.wgsl.expected.glsl b/test/tint/builtins/gen/dpdxFine/f92fb6.wgsl.expected.glsl
index 93a16c6..f538aa8 100644
--- a/test/tint/builtins/gen/dpdxFine/f92fb6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdxFine/f92fb6.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdxFine_f92fb6() {
-  vec3 res = ddx_fine(vec3(0.0f, 0.0f, 0.0f));
+  vec3 res = dFdx(vec3(0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdy/699a05.wgsl.expected.glsl b/test/tint/builtins/gen/dpdy/699a05.wgsl.expected.glsl
index 8c51b31..be1c83c 100644
--- a/test/tint/builtins/gen/dpdy/699a05.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdy/699a05.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdy_699a05() {
-  vec4 res = ddy(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec4 res = dFdy(vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdy/7f8d84.wgsl.expected.glsl b/test/tint/builtins/gen/dpdy/7f8d84.wgsl.expected.glsl
index 3436842..cc8d4b7 100644
--- a/test/tint/builtins/gen/dpdy/7f8d84.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdy/7f8d84.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdy_7f8d84() {
-  float res = ddy(1.0f);
+  float res = dFdy(1.0f);
 }
 
 void fragment_main() {
@@ -15,10 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdy/a8b56e.wgsl.expected.glsl b/test/tint/builtins/gen/dpdy/a8b56e.wgsl.expected.glsl
index e0e1546..157f26d 100644
--- a/test/tint/builtins/gen/dpdy/a8b56e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdy/a8b56e.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdy_a8b56e() {
-  vec2 res = ddy(vec2(0.0f, 0.0f));
+  vec2 res = dFdy(vec2(0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdy/feb40f.wgsl.expected.glsl b/test/tint/builtins/gen/dpdy/feb40f.wgsl.expected.glsl
index 9a3c7a4..a61a45c 100644
--- a/test/tint/builtins/gen/dpdy/feb40f.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdy/feb40f.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdy_feb40f() {
-  vec3 res = ddy(vec3(0.0f, 0.0f, 0.0f));
+  vec3 res = dFdy(vec3(0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl b/test/tint/builtins/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
index 0c6f009..1b228fa 100644
--- a/test/tint/builtins/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdyCoarse/3e1ab4.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdyCoarse_3e1ab4() {
-  vec2 res = ddy_coarse(vec2(0.0f, 0.0f));
+  vec2 res = dFdy(vec2(0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdyCoarse/445d24.wgsl.expected.glsl b/test/tint/builtins/gen/dpdyCoarse/445d24.wgsl.expected.glsl
index 5b059cd..c8ca190 100644
--- a/test/tint/builtins/gen/dpdyCoarse/445d24.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdyCoarse/445d24.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdyCoarse_445d24() {
-  vec4 res = ddy_coarse(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec4 res = dFdy(vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdyCoarse/870a7e.wgsl.expected.glsl b/test/tint/builtins/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
index 95d1c31..4d10ef2 100644
--- a/test/tint/builtins/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdyCoarse/870a7e.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdyCoarse_870a7e() {
-  float res = ddy_coarse(1.0f);
+  float res = dFdy(1.0f);
 }
 
 void fragment_main() {
@@ -15,10 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdyCoarse/ae1873.wgsl.expected.glsl b/test/tint/builtins/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
index b9a2ea4..8f92ba1 100644
--- a/test/tint/builtins/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdyCoarse/ae1873.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdyCoarse_ae1873() {
-  vec3 res = ddy_coarse(vec3(0.0f, 0.0f, 0.0f));
+  vec3 res = dFdy(vec3(0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdyFine/1fb7ab.wgsl.expected.glsl b/test/tint/builtins/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
index b041522..a6411fc 100644
--- a/test/tint/builtins/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdyFine/1fb7ab.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdyFine_1fb7ab() {
-  vec3 res = ddy_fine(vec3(0.0f, 0.0f, 0.0f));
+  vec3 res = dFdy(vec3(0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdyFine/6eb673.wgsl.expected.glsl b/test/tint/builtins/gen/dpdyFine/6eb673.wgsl.expected.glsl
index 9b7fd4c..1f1b7a8 100644
--- a/test/tint/builtins/gen/dpdyFine/6eb673.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdyFine/6eb673.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdyFine_6eb673() {
-  float res = ddy_fine(1.0f);
+  float res = dFdy(1.0f);
 }
 
 void fragment_main() {
@@ -15,10 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdyFine/d0a648.wgsl.expected.glsl b/test/tint/builtins/gen/dpdyFine/d0a648.wgsl.expected.glsl
index 8f51695..149154b 100644
--- a/test/tint/builtins/gen/dpdyFine/d0a648.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdyFine/d0a648.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdyFine_d0a648() {
-  vec4 res = ddy_fine(vec4(0.0f, 0.0f, 0.0f, 0.0f));
+  vec4 res = dFdy(vec4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 4-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/builtins/gen/dpdyFine/df33aa.wgsl.expected.glsl b/test/tint/builtins/gen/dpdyFine/df33aa.wgsl.expected.glsl
index 7f081dd..c4192de 100644
--- a/test/tint/builtins/gen/dpdyFine/df33aa.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/dpdyFine/df33aa.wgsl.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void dpdyFine_df33aa() {
-  vec2 res = ddy_fine(vec2(0.0f, 0.0f));
+  vec2 res = dFdy(vec2(0.0f, 0.0f));
 }
 
 void fragment_main() {
@@ -15,11 +13,3 @@
   fragment_main();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:5: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.glsl
index 019f563..23150fb 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_0.spvasm.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
-  float x_2 = ddx(50.0f);
+  float x_2 = dFdx(50.0f);
   return;
 }
 
@@ -16,10 +14,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.glsl
index 2da4a96..f36e1fe 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_1.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec2 x_1 = vec2(50.0f, 60.0f);
-  vec2 x_2 = ddx(x_1);
+  vec2 x_2 = dFdx(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddx' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.glsl
index 95775f1..f36e1fe 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_10.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec2 x_1 = vec2(50.0f, 60.0f);
-  vec2 x_2 = ddx_fine(x_1);
+  vec2 x_2 = dFdx(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.glsl
index e423873..5fed1d2 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_11.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec3 x_1 = vec3(50.0f, 60.0f, 70.0f);
-  vec3 x_2 = ddx_fine(x_1);
+  vec3 x_2 = dFdx(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.glsl
index 31226b6..8a733fb 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_12.spvasm.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
-  float x_2 = ddy_fine(50.0f);
+  float x_2 = dFdy(50.0f);
   return;
 }
 
@@ -16,10 +14,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.glsl
index 12ea7a6..913d18e 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_13.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec2 x_1 = vec2(50.0f, 60.0f);
-  vec2 x_2 = ddy_fine(x_1);
+  vec2 x_2 = dFdy(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.glsl
index e4cf151..28d8d49 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_14.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec3 x_1 = vec3(50.0f, 60.0f, 70.0f);
-  vec3 x_2 = ddy_fine(x_1);
+  vec3 x_2 = dFdy(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddy_fine' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.glsl
index 2739ce4..23150fb 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_18.spvasm.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
-  float x_2 = ddx_coarse(50.0f);
+  float x_2 = dFdx(50.0f);
   return;
 }
 
@@ -16,10 +14,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.glsl
index a3fe73c..f36e1fe 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_19.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec2 x_1 = vec2(50.0f, 60.0f);
-  vec2 x_2 = ddx_coarse(x_1);
+  vec2 x_2 = dFdx(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.glsl
index 3d2217b..5fed1d2 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_2.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec3 x_1 = vec3(50.0f, 60.0f, 70.0f);
-  vec3 x_2 = ddx(x_1);
+  vec3 x_2 = dFdx(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddx' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.glsl
index a45a0a5..5fed1d2 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_20.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec3 x_1 = vec3(50.0f, 60.0f, 70.0f);
-  vec3 x_2 = ddx_coarse(x_1);
+  vec3 x_2 = dFdx(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddx_coarse' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.glsl
index cf08a02..8a733fb 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_21.spvasm.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
-  float x_2 = ddy_coarse(50.0f);
+  float x_2 = dFdy(50.0f);
   return;
 }
 
@@ -16,10 +14,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.glsl
index 47fd024..913d18e 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_22.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec2 x_1 = vec2(50.0f, 60.0f);
-  vec2 x_2 = ddy_coarse(x_1);
+  vec2 x_2 = dFdy(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.glsl
index 7e97ae4..28d8d49 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_23.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec3 x_1 = vec3(50.0f, 60.0f, 70.0f);
-  vec3 x_2 = ddy_coarse(x_1);
+  vec3 x_2 = dFdy(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddy_coarse' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.glsl
index bc7f163..8a733fb 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_3.spvasm.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
-  float x_2 = ddy(50.0f);
+  float x_2 = dFdy(50.0f);
   return;
 }
 
@@ -16,10 +14,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddy' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.glsl
index ec5fe60..913d18e 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_4.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec2 x_1 = vec2(50.0f, 60.0f);
-  vec2 x_2 = ddy(x_1);
+  vec2 x_2 = dFdy(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddy' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 2-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.glsl
index 48836c6..28d8d49 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_5.spvasm.expected.glsl
@@ -1,11 +1,9 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
   vec3 x_1 = vec3(50.0f, 60.0f, 70.0f);
-  vec3 x_2 = ddy(x_1);
+  vec3 x_2 = dFdy(x_1);
   return;
 }
 
@@ -17,11 +15,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:6: 'ddy' : no matching overloaded function found 
-ERROR: 0:6: '=' :  cannot convert from ' const float' to ' temp mediump 3-component vector of float'
-ERROR: 0:6: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.glsl
index c6c4cc9..23150fb 100644
--- a/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/SpvBinaryDerivativeTest_SpvBinaryDerivativeTest_Derivatives_9.spvasm.expected.glsl
@@ -1,10 +1,8 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
 void main_1() {
-  float x_2 = ddx_fine(50.0f);
+  float x_2 = dFdx(50.0f);
   return;
 }
 
@@ -16,10 +14,3 @@
   tint_symbol();
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:5: 'ddx_fine' : no matching overloaded function found 
-ERROR: 0:5: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.glsl
index 87d316c..9862e0f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -55,7 +53,7 @@
     }
     x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
     vec2 x_57 = x_12.injectionSwitch;
-    f = (f + ddx(x_57).y);
+    f = (f + dFdx(x_57).y);
     {
       r = (r + 1);
     }
@@ -100,10 +98,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:56: 'ddx' : no matching overloaded function found 
-ERROR: 0:56: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.glsl
index aee6a91..26524d1 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 vk-gl-cts/graphicsfuzz/cov-derivative-uniform-vector-global-loop-count/0-opt.wgsl:1:13 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
 type Arr = @stride(16) array<f32, 2>;
             ^^^^^^
@@ -63,7 +61,7 @@
     }
     x_GLF_global_loop_count = (x_GLF_global_loop_count + 1);
     vec2 x_57 = x_12.injectionSwitch;
-    f = (f + ddx(x_57).y);
+    f = (f + dFdx(x_57).y);
     {
       r = (r + 1);
     }
@@ -108,10 +106,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:56: 'ddx' : no matching overloaded function found 
-ERROR: 0:56: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.glsl
index 7b65985..4ab2b80 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -32,7 +30,7 @@
 
 float f1_f1_(inout float a) {
   float x_100 = a;
-  return ddx(x_100);
+  return dFdx(x_100);
 }
 
 void main_1() {
@@ -90,10 +88,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:33: 'ddx' : no matching overloaded function found 
-ERROR: 0:33: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.glsl
index 4680b6a..853313f 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 vk-gl-cts/graphicsfuzz/cov-inst-combine-mul-div-rem-if-undefined-divide-mix/0-opt.wgsl:1:13 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
 type Arr = @stride(16) array<i32, 2>;
             ^^^^^^
@@ -40,7 +38,7 @@
 
 float f1_f1_(inout float a) {
   float x_100 = a;
-  return ddx(x_100);
+  return dFdx(x_100);
 }
 
 void main_1() {
@@ -98,10 +96,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:33: 'ddx' : no matching overloaded function found 
-ERROR: 0:33: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.glsl
index b0e150c..bdc1253 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -54,9 +52,9 @@
     if ((x_51 == x_53)) {
       float x_57 = a;
       float x_60 = x_6.x_GLF_uniform_float_values[1].el;
-      b = (ddx(x_57) + x_60);
+      b = (dFdx(x_57) + x_60);
     }
-    c = ddx(a);
+    c = dFdx(a);
     a = (c / b);
     {
       i = (i + 1);
@@ -93,10 +91,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:55: 'ddx' : no matching overloaded function found 
-ERROR: 0:55: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.glsl
index d34fc48..bc64e81 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 vk-gl-cts/graphicsfuzz/cov-loop-dfdx-constant-divide/0-opt.wgsl:1:13 warning: use of deprecated language feature: the @stride attribute is deprecated; use a larger type if necessary
 type Arr = @stride(16) array<f32, 2>;
             ^^^^^^
@@ -62,9 +60,9 @@
     if ((x_51 == x_53)) {
       float x_57 = a;
       float x_60 = x_6.x_GLF_uniform_float_values[1].el;
-      b = (ddx(x_57) + x_60);
+      b = (dFdx(x_57) + x_60);
     }
-    c = ddx(a);
+    c = dFdx(a);
     a = (c / b);
     {
       i = (i + 1);
@@ -101,10 +99,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:55: 'ddx' : no matching overloaded function found 
-ERROR: 0:55: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.glsl
index c7982a2..e25f7f8 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.spvasm.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -18,7 +16,7 @@
   float a = 0.0f;
   float b = 0.0f;
   float x_33 = tint_symbol.x;
-  a = ddx(cos(x_33));
+  a = dFdx(cos(x_33));
   float x_37 = x_8.two;
   b = mix(2.0f, x_37, a);
   if (bool(uint((b >= 1.899999976f)) & uint((b <= 2.099999905f)))) {
@@ -45,10 +43,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:19: 'ddx' : no matching overloaded function found 
-ERROR: 0:19: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-
diff --git a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.glsl b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.glsl
index a252376..e2827df 100644
--- a/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.glsl
+++ b/test/tint/vk-gl-cts/graphicsfuzz/cov-target-lowering-dfdx-cos/0-opt.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -18,7 +16,7 @@
   float a = 0.0f;
   float b = 0.0f;
   float x_33 = tint_symbol.x;
-  a = ddx(cos(x_33));
+  a = dFdx(cos(x_33));
   float x_37 = x_8.two;
   b = mix(2.0f, x_37, a);
   bool tint_tmp = (b >= 1.899999976f);
@@ -49,10 +47,3 @@
   x_GLF_color_1_1 = inner_result.x_GLF_color_1;
   return;
 }
-Error parsing GLSL shader:
-ERROR: 0:19: 'ddx' : no matching overloaded function found 
-ERROR: 0:19: '' : compilation terminated 
-ERROR: 2 compilation errors.  No code generated.
-
-
-