GLSL: swizzle out the dimension on cube arrays.

Note: ES doesn't support cube arrays, so this fixes the tests but does
not cause them to pass.

Bug: tint:1461
Change-Id: Ia2b1ffacab83dae58ac1b50eb04457da270d73e2
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/82363
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
Kokoro: Kokoro <noreply+kokoro@google.com>
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index f0ffc53..0daf65e 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -1303,9 +1303,10 @@
         }
       }
       out << ")";
-      // textureSize() on sampler2dArray returns the array size in the
+      // textureSize() on array samplers returns the array size in the
       // final component, so strip it out.
-      if (texture_type->dim() == ast::TextureDimension::k2dArray) {
+      if (texture_type->dim() == ast::TextureDimension::k2dArray ||
+          texture_type->dim() == ast::TextureDimension::kCubeArray) {
         out << ".xy";
       }
       return true;
diff --git a/test/tint/builtins/gen/textureDimensions/221f22.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/221f22.wgsl.expected.glsl
index e94b6af..d98cab1 100644
--- a/test/tint/builtins/gen/textureDimensions/221f22.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/221f22.wgsl.expected.glsl
@@ -4,7 +4,7 @@
 
 uniform highp isamplerCubeArray arg_0_1;
 void textureDimensions_221f22() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 
 uniform highp isamplerCubeArray arg_0_1;
 void textureDimensions_221f22() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 uniform highp isamplerCubeArray arg_0_1;
 void textureDimensions_221f22() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/textureDimensions/4152a6.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/4152a6.wgsl.expected.glsl
index 04f0869..25170ca 100644
--- a/test/tint/builtins/gen/textureDimensions/4152a6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/4152a6.wgsl.expected.glsl
@@ -4,7 +4,7 @@
 
 uniform highp usamplerCubeArray arg_0_1;
 void textureDimensions_4152a6() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 
 uniform highp usamplerCubeArray arg_0_1;
 void textureDimensions_4152a6() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 uniform highp usamplerCubeArray arg_0_1;
 void textureDimensions_4152a6() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/textureDimensions/50a9ee.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/50a9ee.wgsl.expected.glsl
index 61d47e0..02b83e4 100644
--- a/test/tint/builtins/gen/textureDimensions/50a9ee.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/50a9ee.wgsl.expected.glsl
@@ -4,7 +4,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_50a9ee() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_50a9ee() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_50a9ee() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/textureDimensions/8f20bf.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/8f20bf.wgsl.expected.glsl
index 192b65f..9276c34 100644
--- a/test/tint/builtins/gen/textureDimensions/8f20bf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/8f20bf.wgsl.expected.glsl
@@ -4,7 +4,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_8f20bf() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_8f20bf() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_8f20bf() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/textureDimensions/90340b.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/90340b.wgsl.expected.glsl
index c524db9..e8a38c8 100644
--- a/test/tint/builtins/gen/textureDimensions/90340b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/90340b.wgsl.expected.glsl
@@ -4,7 +4,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_90340b() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_90340b() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_90340b() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/textureDimensions/a01845.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/a01845.wgsl.expected.glsl
index 1be537d..5449a07 100644
--- a/test/tint/builtins/gen/textureDimensions/a01845.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/a01845.wgsl.expected.glsl
@@ -4,7 +4,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_a01845() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_a01845() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 uniform highp samplerCubeArray arg_0_1;
 void textureDimensions_a01845() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
index 0e70b6c..3da3b8e 100644
--- a/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/ba1481.wgsl.expected.glsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/writer/glsl/generator_impl.cc:2571 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2572 internal compiler error: Multiplanar external texture transform was not run.
 
 
 ********************************************************************
diff --git a/test/tint/builtins/gen/textureDimensions/d83c45.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/d83c45.wgsl.expected.glsl
index 74f97fd..faa5564 100644
--- a/test/tint/builtins/gen/textureDimensions/d83c45.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/d83c45.wgsl.expected.glsl
@@ -4,7 +4,7 @@
 
 uniform highp usamplerCubeArray arg_0_1;
 void textureDimensions_d83c45() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 
 uniform highp usamplerCubeArray arg_0_1;
 void textureDimensions_d83c45() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 uniform highp usamplerCubeArray arg_0_1;
 void textureDimensions_d83c45() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/textureDimensions/e927be.wgsl.expected.glsl b/test/tint/builtins/gen/textureDimensions/e927be.wgsl.expected.glsl
index f579795..ac71e97 100644
--- a/test/tint/builtins/gen/textureDimensions/e927be.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureDimensions/e927be.wgsl.expected.glsl
@@ -4,7 +4,7 @@
 
 uniform highp isamplerCubeArray arg_0_1;
 void textureDimensions_e927be() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 vec4 vertex_main() {
@@ -31,7 +31,7 @@
 
 uniform highp isamplerCubeArray arg_0_1;
 void textureDimensions_e927be() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void fragment_main() {
@@ -53,7 +53,7 @@
 
 uniform highp isamplerCubeArray arg_0_1;
 void textureDimensions_e927be() {
-  ivec2 res = textureSize(arg_0_1, 0);
+  ivec2 res = textureSize(arg_0_1, 0).xy;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
index 0e70b6c..3da3b8e 100644
--- a/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureLoad/8acf41.wgsl.expected.glsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/writer/glsl/generator_impl.cc:2571 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2572 internal compiler error: Multiplanar external texture transform was not run.
 
 
 ********************************************************************
diff --git a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
index 0e70b6c..3da3b8e 100644
--- a/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/textureSampleLevel/979816.wgsl.expected.glsl
@@ -1,6 +1,6 @@
 SKIP: FAILED
 
-../../src/tint/writer/glsl/generator_impl.cc:2571 internal compiler error: Multiplanar external texture transform was not run.
+../../src/tint/writer/glsl/generator_impl.cc:2572 internal compiler error: Multiplanar external texture transform was not run.
 
 
 ********************************************************************
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
index 8c3d294..c124d09 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_1.spvasm.expected.glsl
@@ -22,7 +22,7 @@
   vec2 coords12 = vf12;
   vec3 coords123 = vf123;
   vec4 coords1234 = vf1234;
-  ivec3 x_99 = ivec3(textureSize(x_20_1, i1).xy, textureSize(x_20_1, 0).z);
+  ivec3 x_99 = ivec3(textureSize(x_20_1, i1).xy.xy, textureSize(x_20_1, 0).z);
   return;
 }
 
diff --git a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
index 8c3d294..c124d09 100644
--- a/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
+++ b/test/tint/unittest/reader/spirv/ImageQuerySizeLod_Arrayed_SignedResult_SignedLevel_SpvParserHandleTest_SampledImageAccessTest_Variable_3.spvasm.expected.glsl
@@ -22,7 +22,7 @@
   vec2 coords12 = vf12;
   vec3 coords123 = vf123;
   vec4 coords1234 = vf1234;
-  ivec3 x_99 = ivec3(textureSize(x_20_1, i1).xy, textureSize(x_20_1, 0).z);
+  ivec3 x_99 = ivec3(textureSize(x_20_1, i1).xy.xy, textureSize(x_20_1, 0).z);
   return;
 }