writer/hlsl: Emit vector-of-bool as boolN

Much like uintN, intN, floatN - boolN is far more common, and easier to read than vector<bool, N>

Change-Id: I51f9edc003c590266316d3eba286ca2f6882da10
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/53390
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 40f90e1..22963c3 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -2479,6 +2479,8 @@
       out << "int" << size;
     } else if (vec->type()->Is<sem::U32>() && size >= 1 && size <= 4) {
       out << "uint" << size;
+    } else if (vec->type()->Is<sem::Bool>() && size >= 1 && size <= 4) {
+      out << "bool" << size;
     } else {
       out << "vector<";
       if (!EmitType(out, vec->type(), storage_class, access, "")) {
diff --git a/src/writer/hlsl/generator_impl_intrinsic_test.cc b/src/writer/hlsl/generator_impl_intrinsic_test.cc
index 314ead2..1dfdea0 100644
--- a/src/writer/hlsl/generator_impl_intrinsic_test.cc
+++ b/src/writer/hlsl/generator_impl_intrinsic_test.cc
@@ -290,8 +290,7 @@
 
   gen.increment_indent();
   ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error();
-  EXPECT_EQ(result(),
-            "(vector<bool, 2>(true, false) ? int2(1, 2) : int2(3, 4))");
+  EXPECT_EQ(result(), "(bool2(true, false) ? int2(1, 2) : int2(3, 4))");
 }
 
 TEST_F(HlslGeneratorImplTest_Intrinsic, Pack4x8Snorm) {
diff --git a/test/intrinsics/gen/all/986c7b.wgsl.expected.hlsl b/test/intrinsics/gen/all/986c7b.wgsl.expected.hlsl
index ed1d460..5813269 100644
--- a/test/intrinsics/gen/all/986c7b.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/all/986c7b.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void all_986c7b() {
-  bool res = all(vector<bool, 4>(false, false, false, false));
+  bool res = all(bool4(false, false, false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/all/bd2dba.wgsl.expected.hlsl b/test/intrinsics/gen/all/bd2dba.wgsl.expected.hlsl
index 93b3bba..5b6b8ed 100644
--- a/test/intrinsics/gen/all/bd2dba.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/all/bd2dba.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void all_bd2dba() {
-  bool res = all(vector<bool, 3>(false, false, false));
+  bool res = all(bool3(false, false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/all/f46790.wgsl.expected.hlsl b/test/intrinsics/gen/all/f46790.wgsl.expected.hlsl
index d4d0393..8839cf0 100644
--- a/test/intrinsics/gen/all/f46790.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/all/f46790.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void all_f46790() {
-  bool res = all(vector<bool, 2>(false, false));
+  bool res = all(bool2(false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/any/083428.wgsl.expected.hlsl b/test/intrinsics/gen/any/083428.wgsl.expected.hlsl
index e70364e..c3271b0 100644
--- a/test/intrinsics/gen/any/083428.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/any/083428.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void any_083428() {
-  bool res = any(vector<bool, 4>(false, false, false, false));
+  bool res = any(bool4(false, false, false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/any/0e3e58.wgsl.expected.hlsl b/test/intrinsics/gen/any/0e3e58.wgsl.expected.hlsl
index 0b9d54a..2a86e56 100644
--- a/test/intrinsics/gen/any/0e3e58.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/any/0e3e58.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void any_0e3e58() {
-  bool res = any(vector<bool, 2>(false, false));
+  bool res = any(bool2(false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/any/e755c1.wgsl.expected.hlsl b/test/intrinsics/gen/any/e755c1.wgsl.expected.hlsl
index 1130198..3b80182 100644
--- a/test/intrinsics/gen/any/e755c1.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/any/e755c1.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void any_e755c1() {
-  bool res = any(vector<bool, 3>(false, false, false));
+  bool res = any(bool3(false, false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.hlsl b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.hlsl
index fd5747e..138a1e1 100644
--- a/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/isFinite/34d32b.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void isFinite_34d32b() {
-  vector<bool, 2> res = isfinite(float2(0.0f, 0.0f));
+  bool2 res = isfinite(float2(0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.hlsl b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.hlsl
index 010d015..646590d 100644
--- a/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/isFinite/8a23ad.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void isFinite_8a23ad() {
-  vector<bool, 3> res = isfinite(float3(0.0f, 0.0f, 0.0f));
+  bool3 res = isfinite(float3(0.0f, 0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.hlsl b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.hlsl
index ba30f1a..8297351 100644
--- a/test/intrinsics/gen/isFinite/f31987.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/isFinite/f31987.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void isFinite_f31987() {
-  vector<bool, 4> res = isfinite(float4(0.0f, 0.0f, 0.0f, 0.0f));
+  bool4 res = isfinite(float4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.hlsl b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.hlsl
index c18d7bb..0d885e0 100644
--- a/test/intrinsics/gen/isInf/666f2a.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/isInf/666f2a.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void isInf_666f2a() {
-  vector<bool, 3> res = isinf(float3(0.0f, 0.0f, 0.0f));
+  bool3 res = isinf(float3(0.0f, 0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.hlsl b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.hlsl
index c7019e2..b1f7ad6 100644
--- a/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/isInf/7e81b5.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void isInf_7e81b5() {
-  vector<bool, 4> res = isinf(float4(0.0f, 0.0f, 0.0f, 0.0f));
+  bool4 res = isinf(float4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.hlsl b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.hlsl
index 93d5e9e..e87b882 100644
--- a/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/isInf/a46d6f.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void isInf_a46d6f() {
-  vector<bool, 2> res = isinf(float2(0.0f, 0.0f));
+  bool2 res = isinf(float2(0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/00b848.wgsl.expected.hlsl b/test/intrinsics/gen/select/00b848.wgsl.expected.hlsl
index 7c4709c..ec29321 100644
--- a/test/intrinsics/gen/select/00b848.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/00b848.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_00b848() {
-  int2 res = (vector<bool, 2>(false, false) ? int2(0, 0) : int2(0, 0));
+  int2 res = (bool2(false, false) ? int2(0, 0) : int2(0, 0));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/01e2cd.wgsl.expected.hlsl b/test/intrinsics/gen/select/01e2cd.wgsl.expected.hlsl
index f94a217..9aac2c0 100644
--- a/test/intrinsics/gen/select/01e2cd.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/01e2cd.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_01e2cd() {
-  int3 res = (vector<bool, 3>(false, false, false) ? int3(0, 0, 0) : int3(0, 0, 0));
+  int3 res = (bool3(false, false, false) ? int3(0, 0, 0) : int3(0, 0, 0));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/1e960b.wgsl.expected.hlsl b/test/intrinsics/gen/select/1e960b.wgsl.expected.hlsl
index 8a476b8..adb0fe4 100644
--- a/test/intrinsics/gen/select/1e960b.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/1e960b.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_1e960b() {
-  uint2 res = (vector<bool, 2>(false, false) ? uint2(0u, 0u) : uint2(0u, 0u));
+  uint2 res = (bool2(false, false) ? uint2(0u, 0u) : uint2(0u, 0u));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/266aff.wgsl.expected.hlsl b/test/intrinsics/gen/select/266aff.wgsl.expected.hlsl
index 430c689..dbe0b92 100644
--- a/test/intrinsics/gen/select/266aff.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/266aff.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_266aff() {
-  float2 res = (vector<bool, 2>(false, false) ? float2(0.0f, 0.0f) : float2(0.0f, 0.0f));
+  float2 res = (bool2(false, false) ? float2(0.0f, 0.0f) : float2(0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/28a27e.wgsl.expected.hlsl b/test/intrinsics/gen/select/28a27e.wgsl.expected.hlsl
index ad1d992..de68cc1 100644
--- a/test/intrinsics/gen/select/28a27e.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/28a27e.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_28a27e() {
-  uint3 res = (vector<bool, 3>(false, false, false) ? uint3(0u, 0u, 0u) : uint3(0u, 0u, 0u));
+  uint3 res = (bool3(false, false, false) ? uint3(0u, 0u, 0u) : uint3(0u, 0u, 0u));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/80a9a9.wgsl.expected.hlsl b/test/intrinsics/gen/select/80a9a9.wgsl.expected.hlsl
index f0700b1..d98233b 100644
--- a/test/intrinsics/gen/select/80a9a9.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/80a9a9.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_80a9a9() {
-  vector<bool, 3> res = (vector<bool, 3>(false, false, false) ? vector<bool, 3>(false, false, false) : vector<bool, 3>(false, false, false));
+  bool3 res = (bool3(false, false, false) ? bool3(false, false, false) : bool3(false, false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/a2860e.wgsl.expected.hlsl b/test/intrinsics/gen/select/a2860e.wgsl.expected.hlsl
index 6266236..5dd5d64 100644
--- a/test/intrinsics/gen/select/a2860e.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/a2860e.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_a2860e() {
-  int4 res = (vector<bool, 4>(false, false, false, false) ? int4(0, 0, 0, 0) : int4(0, 0, 0, 0));
+  int4 res = (bool4(false, false, false, false) ? int4(0, 0, 0, 0) : int4(0, 0, 0, 0));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/bb8aae.wgsl.expected.hlsl b/test/intrinsics/gen/select/bb8aae.wgsl.expected.hlsl
index 55e26b8..2660cec 100644
--- a/test/intrinsics/gen/select/bb8aae.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/bb8aae.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_bb8aae() {
-  float4 res = (vector<bool, 4>(false, false, false, false) ? float4(0.0f, 0.0f, 0.0f, 0.0f) : float4(0.0f, 0.0f, 0.0f, 0.0f));
+  float4 res = (bool4(false, false, false, false) ? float4(0.0f, 0.0f, 0.0f, 0.0f) : float4(0.0f, 0.0f, 0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.hlsl b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.hlsl
index b5c3056..11845c3 100644
--- a/test/intrinsics/gen/select/c4a4ef.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/c4a4ef.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_c4a4ef() {
-  uint4 res = (vector<bool, 4>(false, false, false, false) ? uint4(0u, 0u, 0u, 0u) : uint4(0u, 0u, 0u, 0u));
+  uint4 res = (bool4(false, false, false, false) ? uint4(0u, 0u, 0u, 0u) : uint4(0u, 0u, 0u, 0u));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/cb9301.wgsl.expected.hlsl b/test/intrinsics/gen/select/cb9301.wgsl.expected.hlsl
index 5041d26..3e35b51 100644
--- a/test/intrinsics/gen/select/cb9301.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/cb9301.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_cb9301() {
-  vector<bool, 2> res = (vector<bool, 2>(false, false) ? vector<bool, 2>(false, false) : vector<bool, 2>(false, false));
+  bool2 res = (bool2(false, false) ? bool2(false, false) : bool2(false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/e3e028.wgsl.expected.hlsl b/test/intrinsics/gen/select/e3e028.wgsl.expected.hlsl
index f65fa64..f9d7c07 100644
--- a/test/intrinsics/gen/select/e3e028.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/e3e028.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_e3e028() {
-  vector<bool, 4> res = (vector<bool, 4>(false, false, false, false) ? vector<bool, 4>(false, false, false, false) : vector<bool, 4>(false, false, false, false));
+  bool4 res = (bool4(false, false, false, false) ? bool4(false, false, false, false) : bool4(false, false, false, false));
 }
 
 tint_symbol vertex_main() {
diff --git a/test/intrinsics/gen/select/ebfea2.wgsl.expected.hlsl b/test/intrinsics/gen/select/ebfea2.wgsl.expected.hlsl
index 7183f0e..76919df 100644
--- a/test/intrinsics/gen/select/ebfea2.wgsl.expected.hlsl
+++ b/test/intrinsics/gen/select/ebfea2.wgsl.expected.hlsl
@@ -3,7 +3,7 @@
 };
 
 void select_ebfea2() {
-  float3 res = (vector<bool, 3>(false, false, false) ? float3(0.0f, 0.0f, 0.0f) : float3(0.0f, 0.0f, 0.0f));
+  float3 res = (bool3(false, false, false) ? float3(0.0f, 0.0f, 0.0f) : float3(0.0f, 0.0f, 0.0f));
 }
 
 tint_symbol vertex_main() {