GLSL: implement builtin kNumWorkgroups.

Bug: tint:1400
Change-Id: I5f2523d41f73abe55e57b8931833124c2ebaf00d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/78260
Reviewed-by: Ben Clayton <bclayton@google.com>
Kokoro: Kokoro <noreply+kokoro@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
diff --git a/src/writer/glsl/generator_impl.cc b/src/writer/glsl/generator_impl.cc
index fa5e06b..7a128d2 100644
--- a/src/writer/glsl/generator_impl.cc
+++ b/src/writer/glsl/generator_impl.cc
@@ -1787,6 +1787,7 @@
     }
     case ast::Builtin::kLocalInvocationId:
     case ast::Builtin::kGlobalInvocationId:
+    case ast::Builtin::kNumWorkgroups:
     case ast::Builtin::kWorkgroupId: {
       auto* u32 = builder_.create<sem::U32>();
       return builder_.create<sem::Vector>(u32, 3);
@@ -1828,6 +1829,8 @@
       return "gl_LocalInvocationIndex";
     case ast::Builtin::kGlobalInvocationId:
       return "gl_GlobalInvocationID";
+    case ast::Builtin::kNumWorkgroups:
+      return "gl_NumWorkGroups";
     case ast::Builtin::kWorkgroupId:
       return "gl_WorkGroupID";
     case ast::Builtin::kSampleIndex:
diff --git a/test/shader_io/compute_input_builtins.wgsl.expected.glsl b/test/shader_io/compute_input_builtins.wgsl.expected.glsl
index 992a1ba..d69da6d 100644
--- a/test/shader_io/compute_input_builtins.wgsl.expected.glsl
+++ b/test/shader_io/compute_input_builtins.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -26,16 +24,8 @@
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   inputs.global_invocation_id = gl_GlobalInvocationID;
   inputs.workgroup_id = gl_WorkGroupID;
-  inputs.num_workgroups = uvec3();
+  inputs.num_workgroups = gl_NumWorkGroups;
   tint_symbol(inputs);
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:27: 'constructor' : not enough data provided for construction 
-ERROR: 0:27: 'assign' :  cannot convert from ' const float' to ' global highp 3-component vector of uint'
-ERROR: 0:27: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-
diff --git a/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl b/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl
index 4952e91..51de3da 100644
--- a/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl
+++ b/test/shader_io/compute_input_builtins_struct.wgsl.expected.glsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 #version 310 es
 precision mediump float;
 
@@ -34,16 +32,8 @@
   inputs.local_invocation_index = uint(gl_LocalInvocationIndex);
   inputs.global_invocation_id = gl_GlobalInvocationID;
   inputs.workgroup_id = gl_WorkGroupID;
-  inputs.num_workgroups = uvec3();
+  inputs.num_workgroups = gl_NumWorkGroups;
   tint_symbol(inputs);
 }
 
 
-Error parsing GLSL shader:
-ERROR: 0:35: 'constructor' : not enough data provided for construction 
-ERROR: 0:35: 'assign' :  cannot convert from ' const float' to ' global highp 3-component vector of uint'
-ERROR: 0:35: '' : compilation terminated 
-ERROR: 3 compilation errors.  No code generated.
-
-
-