[glsl][ir] Add `arrayLength` support
This CL adds a GLSL `length` member functions to arrays in order to
support `arrayLength`.
Bug: 42251044
Change-Id: I3a34a300fef6666e129994b77f0d69da211c2d91
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/207755
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/glsl/builtin_fn.cc b/src/tint/lang/glsl/builtin_fn.cc
index 04d8d66..0702b91 100644
--- a/src/tint/lang/glsl/builtin_fn.cc
+++ b/src/tint/lang/glsl/builtin_fn.cc
@@ -42,6 +42,8 @@
switch (i) {
case BuiltinFn::kNone:
return "<none>";
+ case BuiltinFn::kLength:
+ return "length";
case BuiltinFn::kBarrier:
return "barrier";
case BuiltinFn::kMemoryBarrierBuffer:
diff --git a/src/tint/lang/glsl/builtin_fn.h b/src/tint/lang/glsl/builtin_fn.h
index 23f88c1..c39a686 100644
--- a/src/tint/lang/glsl/builtin_fn.h
+++ b/src/tint/lang/glsl/builtin_fn.h
@@ -47,6 +47,7 @@
/// Enumerator of all builtin functions
enum class BuiltinFn : uint8_t {
+ kLength,
kBarrier,
kMemoryBarrierBuffer,
kMemoryBarrierImage,
diff --git a/src/tint/lang/glsl/glsl.def b/src/tint/lang/glsl/glsl.def
index 4787147..7af7322 100644
--- a/src/tint/lang/glsl/glsl.def
+++ b/src/tint/lang/glsl/glsl.def
@@ -55,6 +55,8 @@
type vec4<T>
@display("vec{N}<{T}>") type vec<N: num, T>
+type array<T>
+
type texture_1d<T>
type texture_2d<T>
type texture_2d_array<T>
@@ -91,6 +93,9 @@
address_space.storage |
address_space.workgroup
+match storage
+ : address_space.storage
+
match f32_texel_format
: texel_format.r8unorm
| texel_format.bgra8unorm
@@ -119,6 +124,8 @@
// Builtin Functions //
////////////////////////////////////////////////////////////////////////////////
+@member_function @must_use implicit(T, A: access) fn length(ptr<storage, array<T>, A>) -> i32
+
@stage("compute") fn barrier()
@stage("compute") fn memoryBarrierBuffer()
@stage("compute") fn memoryBarrierImage()
diff --git a/src/tint/lang/glsl/intrinsic/data.cc b/src/tint/lang/glsl/intrinsic/data.cc
index 22e7303..71d0988 100644
--- a/src/tint/lang/glsl/intrinsic/data.cc
+++ b/src/tint/lang/glsl/intrinsic/data.cc
@@ -268,6 +268,26 @@
};
+/// TypeMatcher for 'type array'
+constexpr TypeMatcher kArrayMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchArray(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildArray(state, ty, T);
+ },
+/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
+ state->PrintType(T);
+ out << style::Type("array", "<", T, ">");
+ }
+};
+
+
/// TypeMatcher for 'type texture_1d'
constexpr TypeMatcher kTexture1DMatcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
@@ -680,6 +700,19 @@
}
};
+/// EnumMatcher for 'match storage'
+constexpr NumberMatcher kStorageMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::AddressSpace::kStorage)) {
+ return Number(static_cast<uint32_t>(core::AddressSpace::kStorage));
+ }
+ return Number::invalid;
+ },
+/* print */ [](MatchState*, StyledText& out) {
+ out<< style::Enum("storage");
+ }
+};
+
/// EnumMatcher for 'match f32_texel_format'
constexpr NumberMatcher kF32TexelFormatMatcher {
/* match */ [](MatchState&, Number number) -> Number {
@@ -756,24 +789,25 @@
/* [9] */ kVec3Matcher,
/* [10] */ kVec4Matcher,
/* [11] */ kVecMatcher,
- /* [12] */ kTexture1DMatcher,
- /* [13] */ kTexture2DMatcher,
- /* [14] */ kTexture2DArrayMatcher,
- /* [15] */ kTexture3DMatcher,
- /* [16] */ kTextureCubeMatcher,
- /* [17] */ kTextureCubeArrayMatcher,
- /* [18] */ kTextureMultisampled2DMatcher,
- /* [19] */ kTextureDepth2DMatcher,
- /* [20] */ kTextureDepth2DArrayMatcher,
- /* [21] */ kTextureDepthCubeMatcher,
- /* [22] */ kTextureDepthCubeArrayMatcher,
- /* [23] */ kTextureDepthMultisampled2DMatcher,
- /* [24] */ kTextureStorage1DMatcher,
- /* [25] */ kTextureStorage2DMatcher,
- /* [26] */ kTextureStorage2DArrayMatcher,
- /* [27] */ kTextureStorage3DMatcher,
- /* [28] */ kIu32Matcher,
- /* [29] */ kFiu32Matcher,
+ /* [12] */ kArrayMatcher,
+ /* [13] */ kTexture1DMatcher,
+ /* [14] */ kTexture2DMatcher,
+ /* [15] */ kTexture2DArrayMatcher,
+ /* [16] */ kTexture3DMatcher,
+ /* [17] */ kTextureCubeMatcher,
+ /* [18] */ kTextureCubeArrayMatcher,
+ /* [19] */ kTextureMultisampled2DMatcher,
+ /* [20] */ kTextureDepth2DMatcher,
+ /* [21] */ kTextureDepth2DArrayMatcher,
+ /* [22] */ kTextureDepthCubeMatcher,
+ /* [23] */ kTextureDepthCubeArrayMatcher,
+ /* [24] */ kTextureDepthMultisampled2DMatcher,
+ /* [25] */ kTextureStorage1DMatcher,
+ /* [26] */ kTextureStorage2DMatcher,
+ /* [27] */ kTextureStorage2DArrayMatcher,
+ /* [28] */ kTextureStorage3DMatcher,
+ /* [29] */ kIu32Matcher,
+ /* [30] */ kFiu32Matcher,
};
/// The template numbers, and number matchers
@@ -784,122 +818,126 @@
/* [3] */ kReadableMatcher,
/* [4] */ kWritableMatcher,
/* [5] */ kWorkgroupOrStorageMatcher,
- /* [6] */ kF32TexelFormatMatcher,
- /* [7] */ kU32TexelFormatMatcher,
- /* [8] */ kI32TexelFormatMatcher,
+ /* [6] */ kStorageMatcher,
+ /* [7] */ kF32TexelFormatMatcher,
+ /* [8] */ kU32TexelFormatMatcher,
+ /* [9] */ kI32TexelFormatMatcher,
};
constexpr MatcherIndex kMatcherIndices[] = {
/* [0] */ MatcherIndex(7),
- /* [1] */ MatcherIndex(5),
- /* [2] */ MatcherIndex(6),
+ /* [1] */ MatcherIndex(6),
+ /* [2] */ MatcherIndex(12),
/* [3] */ MatcherIndex(0),
- /* [4] */ MatcherIndex(2),
+ /* [4] */ MatcherIndex(1),
/* [5] */ MatcherIndex(7),
- /* [6] */ MatcherIndex(1),
+ /* [6] */ MatcherIndex(5),
/* [7] */ MatcherIndex(6),
/* [8] */ MatcherIndex(0),
/* [9] */ MatcherIndex(2),
- /* [10] */ MatcherIndex(11),
- /* [11] */ MatcherIndex(0),
- /* [12] */ MatcherIndex(4),
- /* [13] */ MatcherIndex(11),
- /* [14] */ MatcherIndex(0),
- /* [15] */ MatcherIndex(3),
- /* [16] */ MatcherIndex(11),
- /* [17] */ MatcherIndex(0),
- /* [18] */ MatcherIndex(5),
- /* [19] */ MatcherIndex(11),
- /* [20] */ MatcherIndex(1),
- /* [21] */ MatcherIndex(4),
- /* [22] */ MatcherIndex(11),
- /* [23] */ MatcherIndex(1),
- /* [24] */ MatcherIndex(0),
- /* [25] */ MatcherIndex(24),
- /* [26] */ MatcherIndex(0),
- /* [27] */ MatcherIndex(1),
- /* [28] */ MatcherIndex(25),
+ /* [10] */ MatcherIndex(7),
+ /* [11] */ MatcherIndex(1),
+ /* [12] */ MatcherIndex(6),
+ /* [13] */ MatcherIndex(0),
+ /* [14] */ MatcherIndex(2),
+ /* [15] */ MatcherIndex(11),
+ /* [16] */ MatcherIndex(0),
+ /* [17] */ MatcherIndex(4),
+ /* [18] */ MatcherIndex(11),
+ /* [19] */ MatcherIndex(0),
+ /* [20] */ MatcherIndex(3),
+ /* [21] */ MatcherIndex(11),
+ /* [22] */ MatcherIndex(0),
+ /* [23] */ MatcherIndex(5),
+ /* [24] */ MatcherIndex(11),
+ /* [25] */ MatcherIndex(1),
+ /* [26] */ MatcherIndex(4),
+ /* [27] */ MatcherIndex(11),
+ /* [28] */ MatcherIndex(1),
/* [29] */ MatcherIndex(0),
- /* [30] */ MatcherIndex(1),
- /* [31] */ MatcherIndex(26),
- /* [32] */ MatcherIndex(0),
- /* [33] */ MatcherIndex(1),
- /* [34] */ MatcherIndex(27),
- /* [35] */ MatcherIndex(0),
- /* [36] */ MatcherIndex(1),
- /* [37] */ MatcherIndex(24),
- /* [38] */ MatcherIndex(6),
- /* [39] */ MatcherIndex(4),
- /* [40] */ MatcherIndex(24),
- /* [41] */ MatcherIndex(8),
- /* [42] */ MatcherIndex(4),
- /* [43] */ MatcherIndex(24),
- /* [44] */ MatcherIndex(7),
- /* [45] */ MatcherIndex(4),
- /* [46] */ MatcherIndex(25),
- /* [47] */ MatcherIndex(6),
- /* [48] */ MatcherIndex(4),
- /* [49] */ MatcherIndex(25),
- /* [50] */ MatcherIndex(8),
- /* [51] */ MatcherIndex(4),
- /* [52] */ MatcherIndex(25),
- /* [53] */ MatcherIndex(7),
- /* [54] */ MatcherIndex(4),
- /* [55] */ MatcherIndex(27),
- /* [56] */ MatcherIndex(6),
- /* [57] */ MatcherIndex(4),
- /* [58] */ MatcherIndex(27),
- /* [59] */ MatcherIndex(8),
- /* [60] */ MatcherIndex(4),
- /* [61] */ MatcherIndex(27),
- /* [62] */ MatcherIndex(7),
- /* [63] */ MatcherIndex(4),
- /* [64] */ MatcherIndex(26),
- /* [65] */ MatcherIndex(6),
- /* [66] */ MatcherIndex(4),
- /* [67] */ MatcherIndex(26),
- /* [68] */ MatcherIndex(8),
- /* [69] */ MatcherIndex(4),
- /* [70] */ MatcherIndex(26),
- /* [71] */ MatcherIndex(7),
- /* [72] */ MatcherIndex(4),
- /* [73] */ MatcherIndex(8),
- /* [74] */ MatcherIndex(2),
- /* [75] */ MatcherIndex(12),
- /* [76] */ MatcherIndex(0),
- /* [77] */ MatcherIndex(13),
- /* [78] */ MatcherIndex(0),
- /* [79] */ MatcherIndex(9),
- /* [80] */ MatcherIndex(4),
- /* [81] */ MatcherIndex(14),
- /* [82] */ MatcherIndex(0),
- /* [83] */ MatcherIndex(15),
- /* [84] */ MatcherIndex(0),
- /* [85] */ MatcherIndex(16),
- /* [86] */ MatcherIndex(0),
- /* [87] */ MatcherIndex(17),
- /* [88] */ MatcherIndex(0),
- /* [89] */ MatcherIndex(18),
- /* [90] */ MatcherIndex(0),
- /* [91] */ MatcherIndex(10),
- /* [92] */ MatcherIndex(0),
- /* [93] */ MatcherIndex(10),
- /* [94] */ MatcherIndex(3),
- /* [95] */ MatcherIndex(10),
- /* [96] */ MatcherIndex(4),
- /* [97] */ MatcherIndex(10),
- /* [98] */ MatcherIndex(5),
- /* [99] */ MatcherIndex(8),
- /* [100] */ MatcherIndex(0),
- /* [101] */ MatcherIndex(9),
- /* [102] */ MatcherIndex(0),
- /* [103] */ MatcherIndex(28),
- /* [104] */ MatcherIndex(29),
- /* [105] */ MatcherIndex(19),
- /* [106] */ MatcherIndex(20),
- /* [107] */ MatcherIndex(21),
- /* [108] */ MatcherIndex(22),
- /* [109] */ MatcherIndex(23),
+ /* [30] */ MatcherIndex(25),
+ /* [31] */ MatcherIndex(0),
+ /* [32] */ MatcherIndex(1),
+ /* [33] */ MatcherIndex(26),
+ /* [34] */ MatcherIndex(0),
+ /* [35] */ MatcherIndex(1),
+ /* [36] */ MatcherIndex(27),
+ /* [37] */ MatcherIndex(0),
+ /* [38] */ MatcherIndex(1),
+ /* [39] */ MatcherIndex(28),
+ /* [40] */ MatcherIndex(0),
+ /* [41] */ MatcherIndex(1),
+ /* [42] */ MatcherIndex(25),
+ /* [43] */ MatcherIndex(7),
+ /* [44] */ MatcherIndex(4),
+ /* [45] */ MatcherIndex(25),
+ /* [46] */ MatcherIndex(9),
+ /* [47] */ MatcherIndex(4),
+ /* [48] */ MatcherIndex(25),
+ /* [49] */ MatcherIndex(8),
+ /* [50] */ MatcherIndex(4),
+ /* [51] */ MatcherIndex(26),
+ /* [52] */ MatcherIndex(7),
+ /* [53] */ MatcherIndex(4),
+ /* [54] */ MatcherIndex(26),
+ /* [55] */ MatcherIndex(9),
+ /* [56] */ MatcherIndex(4),
+ /* [57] */ MatcherIndex(26),
+ /* [58] */ MatcherIndex(8),
+ /* [59] */ MatcherIndex(4),
+ /* [60] */ MatcherIndex(28),
+ /* [61] */ MatcherIndex(7),
+ /* [62] */ MatcherIndex(4),
+ /* [63] */ MatcherIndex(28),
+ /* [64] */ MatcherIndex(9),
+ /* [65] */ MatcherIndex(4),
+ /* [66] */ MatcherIndex(28),
+ /* [67] */ MatcherIndex(8),
+ /* [68] */ MatcherIndex(4),
+ /* [69] */ MatcherIndex(27),
+ /* [70] */ MatcherIndex(7),
+ /* [71] */ MatcherIndex(4),
+ /* [72] */ MatcherIndex(27),
+ /* [73] */ MatcherIndex(9),
+ /* [74] */ MatcherIndex(4),
+ /* [75] */ MatcherIndex(27),
+ /* [76] */ MatcherIndex(8),
+ /* [77] */ MatcherIndex(4),
+ /* [78] */ MatcherIndex(8),
+ /* [79] */ MatcherIndex(2),
+ /* [80] */ MatcherIndex(13),
+ /* [81] */ MatcherIndex(0),
+ /* [82] */ MatcherIndex(14),
+ /* [83] */ MatcherIndex(0),
+ /* [84] */ MatcherIndex(15),
+ /* [85] */ MatcherIndex(0),
+ /* [86] */ MatcherIndex(16),
+ /* [87] */ MatcherIndex(0),
+ /* [88] */ MatcherIndex(17),
+ /* [89] */ MatcherIndex(0),
+ /* [90] */ MatcherIndex(18),
+ /* [91] */ MatcherIndex(0),
+ /* [92] */ MatcherIndex(19),
+ /* [93] */ MatcherIndex(0),
+ /* [94] */ MatcherIndex(10),
+ /* [95] */ MatcherIndex(0),
+ /* [96] */ MatcherIndex(10),
+ /* [97] */ MatcherIndex(3),
+ /* [98] */ MatcherIndex(10),
+ /* [99] */ MatcherIndex(4),
+ /* [100] */ MatcherIndex(10),
+ /* [101] */ MatcherIndex(5),
+ /* [102] */ MatcherIndex(8),
+ /* [103] */ MatcherIndex(0),
+ /* [104] */ MatcherIndex(9),
+ /* [105] */ MatcherIndex(0),
+ /* [106] */ MatcherIndex(29),
+ /* [107] */ MatcherIndex(30),
+ /* [108] */ MatcherIndex(20),
+ /* [109] */ MatcherIndex(21),
+ /* [110] */ MatcherIndex(22),
+ /* [111] */ MatcherIndex(23),
+ /* [112] */ MatcherIndex(24),
};
static_assert(MatcherIndicesIndex::CanIndex(kMatcherIndices),
@@ -919,37 +957,37 @@
{
/* [2] */
/* usage */ core::ParameterUsage::kOffset,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [3] */
/* usage */ core::ParameterUsage::kBits,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [4] */
/* usage */ core::ParameterUsage::kBase,
- /* matcher_indices */ MatcherIndicesIndex(22),
+ /* matcher_indices */ MatcherIndicesIndex(27),
},
{
/* [5] */
/* usage */ core::ParameterUsage::kInsert,
- /* matcher_indices */ MatcherIndicesIndex(22),
+ /* matcher_indices */ MatcherIndicesIndex(27),
},
{
/* [6] */
/* usage */ core::ParameterUsage::kOffset,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [7] */
/* usage */ core::ParameterUsage::kBits,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [8] */
/* usage */ core::ParameterUsage::kNone,
- /* matcher_indices */ MatcherIndicesIndex(0),
+ /* matcher_indices */ MatcherIndicesIndex(5),
},
{
/* [9] */
@@ -964,107 +1002,107 @@
{
/* [11] */
/* usage */ core::ParameterUsage::kOffset,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [12] */
/* usage */ core::ParameterUsage::kBits,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [13] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(22),
+ /* matcher_indices */ MatcherIndicesIndex(27),
},
{
/* [14] */
/* usage */ core::ParameterUsage::kOffset,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [15] */
/* usage */ core::ParameterUsage::kBits,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [16] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(75),
+ /* matcher_indices */ MatcherIndicesIndex(80),
},
{
/* [17] */
/* usage */ core::ParameterUsage::kLocation,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [18] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [19] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(77),
+ /* matcher_indices */ MatcherIndicesIndex(82),
},
{
/* [20] */
/* usage */ core::ParameterUsage::kLocation,
- /* matcher_indices */ MatcherIndicesIndex(41),
+ /* matcher_indices */ MatcherIndicesIndex(49),
},
{
/* [21] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [22] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(81),
+ /* matcher_indices */ MatcherIndicesIndex(84),
},
{
/* [23] */
/* usage */ core::ParameterUsage::kLocation,
- /* matcher_indices */ MatcherIndicesIndex(79),
+ /* matcher_indices */ MatcherIndicesIndex(46),
},
{
/* [24] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [25] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(89),
+ /* matcher_indices */ MatcherIndicesIndex(92),
},
{
/* [26] */
/* usage */ core::ParameterUsage::kLocation,
- /* matcher_indices */ MatcherIndicesIndex(41),
+ /* matcher_indices */ MatcherIndicesIndex(49),
},
{
/* [27] */
/* usage */ core::ParameterUsage::kSampleIndex,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [28] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(83),
+ /* matcher_indices */ MatcherIndicesIndex(86),
},
{
/* [29] */
/* usage */ core::ParameterUsage::kLocation,
- /* matcher_indices */ MatcherIndicesIndex(79),
+ /* matcher_indices */ MatcherIndicesIndex(46),
},
{
/* [30] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [31] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(37),
+ /* matcher_indices */ MatcherIndicesIndex(42),
},
{
/* [32] */
@@ -1074,12 +1112,12 @@
{
/* [33] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(93),
+ /* matcher_indices */ MatcherIndicesIndex(96),
},
{
/* [34] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(40),
+ /* matcher_indices */ MatcherIndicesIndex(45),
},
{
/* [35] */
@@ -1089,12 +1127,12 @@
{
/* [36] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(95),
+ /* matcher_indices */ MatcherIndicesIndex(98),
},
{
/* [37] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(43),
+ /* matcher_indices */ MatcherIndicesIndex(48),
},
{
/* [38] */
@@ -1104,147 +1142,147 @@
{
/* [39] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(97),
+ /* matcher_indices */ MatcherIndicesIndex(100),
},
{
/* [40] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(46),
+ /* matcher_indices */ MatcherIndicesIndex(51),
},
{
/* [41] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(99),
+ /* matcher_indices */ MatcherIndicesIndex(102),
},
{
/* [42] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(93),
+ /* matcher_indices */ MatcherIndicesIndex(96),
},
{
/* [43] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(49),
+ /* matcher_indices */ MatcherIndicesIndex(54),
},
{
/* [44] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(99),
+ /* matcher_indices */ MatcherIndicesIndex(102),
},
{
/* [45] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(95),
+ /* matcher_indices */ MatcherIndicesIndex(98),
},
{
/* [46] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(52),
+ /* matcher_indices */ MatcherIndicesIndex(57),
},
{
/* [47] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(99),
+ /* matcher_indices */ MatcherIndicesIndex(102),
},
{
/* [48] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(97),
+ /* matcher_indices */ MatcherIndicesIndex(100),
},
{
/* [49] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(55),
+ /* matcher_indices */ MatcherIndicesIndex(60),
},
{
/* [50] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(101),
+ /* matcher_indices */ MatcherIndicesIndex(104),
},
{
/* [51] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(93),
+ /* matcher_indices */ MatcherIndicesIndex(96),
},
{
/* [52] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(58),
+ /* matcher_indices */ MatcherIndicesIndex(63),
},
{
/* [53] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(101),
+ /* matcher_indices */ MatcherIndicesIndex(104),
},
{
/* [54] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(95),
+ /* matcher_indices */ MatcherIndicesIndex(98),
},
{
/* [55] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(61),
+ /* matcher_indices */ MatcherIndicesIndex(66),
},
{
/* [56] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(101),
+ /* matcher_indices */ MatcherIndicesIndex(104),
},
{
/* [57] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(97),
+ /* matcher_indices */ MatcherIndicesIndex(100),
},
{
/* [58] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(64),
+ /* matcher_indices */ MatcherIndicesIndex(69),
},
{
/* [59] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(101),
+ /* matcher_indices */ MatcherIndicesIndex(104),
},
{
/* [60] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(93),
+ /* matcher_indices */ MatcherIndicesIndex(96),
},
{
/* [61] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(67),
+ /* matcher_indices */ MatcherIndicesIndex(72),
},
{
/* [62] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(101),
+ /* matcher_indices */ MatcherIndicesIndex(104),
},
{
/* [63] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(95),
+ /* matcher_indices */ MatcherIndicesIndex(98),
},
{
/* [64] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(70),
+ /* matcher_indices */ MatcherIndicesIndex(75),
},
{
/* [65] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(101),
+ /* matcher_indices */ MatcherIndicesIndex(104),
},
{
/* [66] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(97),
+ /* matcher_indices */ MatcherIndicesIndex(100),
},
{
/* [67] */
/* usage */ core::ParameterUsage::kNone,
- /* matcher_indices */ MatcherIndicesIndex(5),
+ /* matcher_indices */ MatcherIndicesIndex(10),
},
{
/* [68] */
@@ -1254,182 +1292,187 @@
{
/* [69] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(75),
+ /* matcher_indices */ MatcherIndicesIndex(80),
},
{
/* [70] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [71] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(77),
+ /* matcher_indices */ MatcherIndicesIndex(82),
},
{
/* [72] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [73] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(81),
+ /* matcher_indices */ MatcherIndicesIndex(84),
},
{
/* [74] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [75] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(83),
+ /* matcher_indices */ MatcherIndicesIndex(86),
},
{
/* [76] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [77] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(85),
+ /* matcher_indices */ MatcherIndicesIndex(88),
},
{
/* [78] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [79] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(87),
+ /* matcher_indices */ MatcherIndicesIndex(90),
},
{
/* [80] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [81] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(105),
+ /* matcher_indices */ MatcherIndicesIndex(108),
},
{
/* [82] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [83] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(106),
+ /* matcher_indices */ MatcherIndicesIndex(109),
},
{
/* [84] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [85] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(107),
+ /* matcher_indices */ MatcherIndicesIndex(110),
},
{
/* [86] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [87] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(108),
+ /* matcher_indices */ MatcherIndicesIndex(111),
},
{
/* [88] */
/* usage */ core::ParameterUsage::kLevel,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [89] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(25),
+ /* matcher_indices */ MatcherIndicesIndex(30),
},
{
/* [90] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [91] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(28),
+ /* matcher_indices */ MatcherIndicesIndex(33),
},
{
/* [92] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(41),
+ /* matcher_indices */ MatcherIndicesIndex(49),
},
{
/* [93] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(31),
+ /* matcher_indices */ MatcherIndicesIndex(36),
},
{
/* [94] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(79),
+ /* matcher_indices */ MatcherIndicesIndex(46),
},
{
/* [95] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(34),
+ /* matcher_indices */ MatcherIndicesIndex(39),
},
{
/* [96] */
/* usage */ core::ParameterUsage::kCoords,
- /* matcher_indices */ MatcherIndicesIndex(79),
+ /* matcher_indices */ MatcherIndicesIndex(46),
},
{
/* [97] */
- /* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(15),
+ /* usage */ core::ParameterUsage::kNone,
+ /* matcher_indices */ MatcherIndicesIndex(0),
},
{
/* [98] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(13),
+ /* matcher_indices */ MatcherIndicesIndex(20),
},
{
/* [99] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(12),
+ /* matcher_indices */ MatcherIndicesIndex(18),
},
{
/* [100] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(10),
+ /* matcher_indices */ MatcherIndicesIndex(17),
},
{
/* [101] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(1),
+ /* matcher_indices */ MatcherIndicesIndex(15),
},
{
/* [102] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(16),
+ /* matcher_indices */ MatcherIndicesIndex(6),
},
{
/* [103] */
/* usage */ core::ParameterUsage::kValue,
- /* matcher_indices */ MatcherIndicesIndex(73),
+ /* matcher_indices */ MatcherIndicesIndex(21),
},
{
/* [104] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* matcher_indices */ MatcherIndicesIndex(78),
+ },
+ {
+ /* [105] */
/* usage */ core::ParameterUsage::kTexture,
- /* matcher_indices */ MatcherIndicesIndex(109),
+ /* matcher_indices */ MatcherIndicesIndex(112),
},
};
@@ -1440,85 +1483,97 @@
{
/* [0] */
/* name */ "T",
- /* matcher_indices */ MatcherIndicesIndex(103),
+ /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* kind */ TemplateInfo::Kind::kType,
},
{
/* [1] */
- /* name */ "S",
- /* matcher_indices */ MatcherIndicesIndex(1),
+ /* name */ "A",
+ /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [2] */
/* name */ "T",
- /* matcher_indices */ MatcherIndicesIndex(103),
+ /* matcher_indices */ MatcherIndicesIndex(106),
/* kind */ TemplateInfo::Kind::kType,
},
{
/* [3] */
- /* name */ "N",
- /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
+ /* name */ "S",
+ /* matcher_indices */ MatcherIndicesIndex(6),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [4] */
- /* name */ "F",
- /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
- /* kind */ TemplateInfo::Kind::kNumber,
+ /* name */ "T",
+ /* matcher_indices */ MatcherIndicesIndex(106),
+ /* kind */ TemplateInfo::Kind::kType,
},
{
/* [5] */
- /* name */ "A",
+ /* name */ "N",
/* matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [6] */
/* name */ "F",
- /* matcher_indices */ MatcherIndicesIndex(2),
+ /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [7] */
/* name */ "A",
- /* matcher_indices */ MatcherIndicesIndex(15),
+ /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [8] */
/* name */ "F",
- /* matcher_indices */ MatcherIndicesIndex(41),
+ /* matcher_indices */ MatcherIndicesIndex(0),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [9] */
/* name */ "A",
- /* matcher_indices */ MatcherIndicesIndex(15),
+ /* matcher_indices */ MatcherIndicesIndex(20),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [10] */
/* name */ "F",
- /* matcher_indices */ MatcherIndicesIndex(0),
+ /* matcher_indices */ MatcherIndicesIndex(46),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [11] */
/* name */ "A",
- /* matcher_indices */ MatcherIndicesIndex(15),
+ /* matcher_indices */ MatcherIndicesIndex(20),
/* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [12] */
- /* name */ "T",
- /* matcher_indices */ MatcherIndicesIndex(104),
- /* kind */ TemplateInfo::Kind::kType,
+ /* name */ "F",
+ /* matcher_indices */ MatcherIndicesIndex(49),
+ /* kind */ TemplateInfo::Kind::kNumber,
},
{
/* [13] */
+ /* name */ "A",
+ /* matcher_indices */ MatcherIndicesIndex(20),
+ /* kind */ TemplateInfo::Kind::kNumber,
+ },
+ {
+ /* [14] */
+ /* name */ "T",
+ /* matcher_indices */ MatcherIndicesIndex(107),
+ /* kind */ TemplateInfo::Kind::kType,
+ },
+ {
+ /* [15] */
/* name */ "C",
- /* matcher_indices */ MatcherIndicesIndex(103),
+ /* matcher_indices */ MatcherIndicesIndex(106),
/* kind */ TemplateInfo::Kind::kType,
},
};
@@ -1533,9 +1588,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(69),
- /* return_matcher_indices */ MatcherIndicesIndex(12),
+ /* return_matcher_indices */ MatcherIndicesIndex(17),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1544,9 +1599,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(71),
- /* return_matcher_indices */ MatcherIndicesIndex(41),
+ /* return_matcher_indices */ MatcherIndicesIndex(49),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1555,9 +1610,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(73),
- /* return_matcher_indices */ MatcherIndicesIndex(79),
+ /* return_matcher_indices */ MatcherIndicesIndex(46),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1566,9 +1621,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(75),
- /* return_matcher_indices */ MatcherIndicesIndex(79),
+ /* return_matcher_indices */ MatcherIndicesIndex(46),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1577,9 +1632,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(77),
- /* return_matcher_indices */ MatcherIndicesIndex(41),
+ /* return_matcher_indices */ MatcherIndicesIndex(49),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1588,9 +1643,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(79),
- /* return_matcher_indices */ MatcherIndicesIndex(79),
+ /* return_matcher_indices */ MatcherIndicesIndex(46),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1601,7 +1656,7 @@
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
/* parameters */ ParameterIndex(81),
- /* return_matcher_indices */ MatcherIndicesIndex(41),
+ /* return_matcher_indices */ MatcherIndicesIndex(49),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1612,7 +1667,7 @@
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
/* parameters */ ParameterIndex(83),
- /* return_matcher_indices */ MatcherIndicesIndex(79),
+ /* return_matcher_indices */ MatcherIndicesIndex(46),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1623,7 +1678,7 @@
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
/* parameters */ ParameterIndex(85),
- /* return_matcher_indices */ MatcherIndicesIndex(41),
+ /* return_matcher_indices */ MatcherIndicesIndex(49),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1634,7 +1689,7 @@
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
/* parameters */ ParameterIndex(87),
- /* return_matcher_indices */ MatcherIndicesIndex(79),
+ /* return_matcher_indices */ MatcherIndicesIndex(46),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1643,9 +1698,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(25),
- /* return_matcher_indices */ MatcherIndicesIndex(41),
+ /* return_matcher_indices */ MatcherIndicesIndex(49),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1655,8 +1710,8 @@
/* num_explicit_templates */ 0,
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
- /* parameters */ ParameterIndex(104),
- /* return_matcher_indices */ MatcherIndicesIndex(41),
+ /* parameters */ ParameterIndex(105),
+ /* return_matcher_indices */ MatcherIndicesIndex(49),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1665,9 +1720,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(6),
+ /* templates */ TemplateIndex(8),
/* parameters */ ParameterIndex(89),
- /* return_matcher_indices */ MatcherIndicesIndex(93),
+ /* return_matcher_indices */ MatcherIndicesIndex(96),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1676,9 +1731,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(6),
+ /* templates */ TemplateIndex(8),
/* parameters */ ParameterIndex(91),
- /* return_matcher_indices */ MatcherIndicesIndex(93),
+ /* return_matcher_indices */ MatcherIndicesIndex(96),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1687,9 +1742,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(6),
+ /* templates */ TemplateIndex(8),
/* parameters */ ParameterIndex(93),
- /* return_matcher_indices */ MatcherIndicesIndex(93),
+ /* return_matcher_indices */ MatcherIndicesIndex(96),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1698,9 +1753,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(6),
+ /* templates */ TemplateIndex(8),
/* parameters */ ParameterIndex(95),
- /* return_matcher_indices */ MatcherIndicesIndex(93),
+ /* return_matcher_indices */ MatcherIndicesIndex(96),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1709,9 +1764,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(8),
+ /* templates */ TemplateIndex(10),
/* parameters */ ParameterIndex(89),
- /* return_matcher_indices */ MatcherIndicesIndex(95),
+ /* return_matcher_indices */ MatcherIndicesIndex(98),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1720,9 +1775,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(8),
+ /* templates */ TemplateIndex(10),
/* parameters */ ParameterIndex(91),
- /* return_matcher_indices */ MatcherIndicesIndex(95),
+ /* return_matcher_indices */ MatcherIndicesIndex(98),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1731,9 +1786,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(8),
+ /* templates */ TemplateIndex(10),
/* parameters */ ParameterIndex(93),
- /* return_matcher_indices */ MatcherIndicesIndex(95),
+ /* return_matcher_indices */ MatcherIndicesIndex(98),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1742,9 +1797,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(8),
+ /* templates */ TemplateIndex(10),
/* parameters */ ParameterIndex(95),
- /* return_matcher_indices */ MatcherIndicesIndex(95),
+ /* return_matcher_indices */ MatcherIndicesIndex(98),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1753,9 +1808,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(10),
+ /* templates */ TemplateIndex(12),
/* parameters */ ParameterIndex(89),
- /* return_matcher_indices */ MatcherIndicesIndex(97),
+ /* return_matcher_indices */ MatcherIndicesIndex(100),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1764,9 +1819,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(10),
+ /* templates */ TemplateIndex(12),
/* parameters */ ParameterIndex(91),
- /* return_matcher_indices */ MatcherIndicesIndex(97),
+ /* return_matcher_indices */ MatcherIndicesIndex(100),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1775,9 +1830,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(10),
+ /* templates */ TemplateIndex(12),
/* parameters */ ParameterIndex(93),
- /* return_matcher_indices */ MatcherIndicesIndex(97),
+ /* return_matcher_indices */ MatcherIndicesIndex(100),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1786,9 +1841,9 @@
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(10),
+ /* templates */ TemplateIndex(12),
/* parameters */ ParameterIndex(95),
- /* return_matcher_indices */ MatcherIndicesIndex(97),
+ /* return_matcher_indices */ MatcherIndicesIndex(100),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1797,7 +1852,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(31),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1808,7 +1863,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(34),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1819,7 +1874,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(37),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1830,7 +1885,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(40),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1841,7 +1896,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(43),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1852,7 +1907,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(46),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1863,7 +1918,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(49),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1874,7 +1929,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(52),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1885,7 +1940,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(55),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1896,7 +1951,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(58),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1907,7 +1962,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(61),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1918,7 +1973,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(13),
+ /* templates */ TemplateIndex(15),
/* parameters */ ParameterIndex(64),
/* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -1929,9 +1984,9 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(16),
- /* return_matcher_indices */ MatcherIndicesIndex(91),
+ /* return_matcher_indices */ MatcherIndicesIndex(94),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1940,9 +1995,9 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(19),
- /* return_matcher_indices */ MatcherIndicesIndex(91),
+ /* return_matcher_indices */ MatcherIndicesIndex(94),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1951,9 +2006,9 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(22),
- /* return_matcher_indices */ MatcherIndicesIndex(91),
+ /* return_matcher_indices */ MatcherIndicesIndex(94),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1962,9 +2017,9 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(25),
- /* return_matcher_indices */ MatcherIndicesIndex(91),
+ /* return_matcher_indices */ MatcherIndicesIndex(94),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1973,9 +2028,9 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(12),
+ /* templates */ TemplateIndex(14),
/* parameters */ ParameterIndex(28),
- /* return_matcher_indices */ MatcherIndicesIndex(91),
+ /* return_matcher_indices */ MatcherIndicesIndex(94),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1984,9 +2039,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(4),
+ /* templates */ TemplateIndex(6),
/* parameters */ ParameterIndex(89),
- /* return_matcher_indices */ MatcherIndicesIndex(12),
+ /* return_matcher_indices */ MatcherIndicesIndex(17),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -1995,9 +2050,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(4),
+ /* templates */ TemplateIndex(6),
/* parameters */ ParameterIndex(91),
- /* return_matcher_indices */ MatcherIndicesIndex(41),
+ /* return_matcher_indices */ MatcherIndicesIndex(49),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2006,9 +2061,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(4),
+ /* templates */ TemplateIndex(6),
/* parameters */ ParameterIndex(93),
- /* return_matcher_indices */ MatcherIndicesIndex(79),
+ /* return_matcher_indices */ MatcherIndicesIndex(46),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2017,9 +2072,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(4),
+ /* templates */ TemplateIndex(6),
/* parameters */ ParameterIndex(95),
- /* return_matcher_indices */ MatcherIndicesIndex(79),
+ /* return_matcher_indices */ MatcherIndicesIndex(46),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2029,8 +2084,8 @@
/* num_explicit_templates */ 0,
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
- /* parameters */ ParameterIndex(97),
- /* return_matcher_indices */ MatcherIndicesIndex(12),
+ /* parameters */ ParameterIndex(98),
+ /* return_matcher_indices */ MatcherIndicesIndex(17),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2039,9 +2094,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(3),
- /* parameters */ ParameterIndex(98),
- /* return_matcher_indices */ MatcherIndicesIndex(10),
+ /* templates */ TemplateIndex(5),
+ /* parameters */ ParameterIndex(99),
+ /* return_matcher_indices */ MatcherIndicesIndex(15),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2051,8 +2106,8 @@
/* num_explicit_templates */ 0,
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
- /* parameters */ ParameterIndex(97),
- /* return_matcher_indices */ MatcherIndicesIndex(1),
+ /* parameters */ ParameterIndex(98),
+ /* return_matcher_indices */ MatcherIndicesIndex(6),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2061,9 +2116,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(3),
- /* parameters */ ParameterIndex(98),
- /* return_matcher_indices */ MatcherIndicesIndex(16),
+ /* templates */ TemplateIndex(5),
+ /* parameters */ ParameterIndex(99),
+ /* return_matcher_indices */ MatcherIndicesIndex(21),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2073,8 +2128,8 @@
/* num_explicit_templates */ 0,
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
- /* parameters */ ParameterIndex(99),
- /* return_matcher_indices */ MatcherIndicesIndex(15),
+ /* parameters */ ParameterIndex(100),
+ /* return_matcher_indices */ MatcherIndicesIndex(20),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2083,9 +2138,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(3),
- /* parameters */ ParameterIndex(100),
- /* return_matcher_indices */ MatcherIndicesIndex(13),
+ /* templates */ TemplateIndex(5),
+ /* parameters */ ParameterIndex(101),
+ /* return_matcher_indices */ MatcherIndicesIndex(18),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2095,8 +2150,8 @@
/* num_explicit_templates */ 0,
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
- /* parameters */ ParameterIndex(101),
- /* return_matcher_indices */ MatcherIndicesIndex(15),
+ /* parameters */ ParameterIndex(102),
+ /* return_matcher_indices */ MatcherIndicesIndex(20),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2105,9 +2160,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(3),
- /* parameters */ ParameterIndex(102),
- /* return_matcher_indices */ MatcherIndicesIndex(13),
+ /* templates */ TemplateIndex(5),
+ /* parameters */ ParameterIndex(103),
+ /* return_matcher_indices */ MatcherIndicesIndex(18),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2116,9 +2171,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(0),
+ /* templates */ TemplateIndex(2),
/* parameters */ ParameterIndex(10),
- /* return_matcher_indices */ MatcherIndicesIndex(12),
+ /* return_matcher_indices */ MatcherIndicesIndex(17),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2127,9 +2182,9 @@
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(2),
+ /* templates */ TemplateIndex(4),
/* parameters */ ParameterIndex(13),
- /* return_matcher_indices */ MatcherIndicesIndex(19),
+ /* return_matcher_indices */ MatcherIndicesIndex(24),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2138,7 +2193,7 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(0),
+ /* templates */ TemplateIndex(2),
/* parameters */ ParameterIndex(10),
/* return_matcher_indices */ MatcherIndicesIndex(3),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -2149,9 +2204,9 @@
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(2),
+ /* templates */ TemplateIndex(4),
/* parameters */ ParameterIndex(13),
- /* return_matcher_indices */ MatcherIndicesIndex(22),
+ /* return_matcher_indices */ MatcherIndicesIndex(27),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
@@ -2160,7 +2215,7 @@
/* num_parameters */ 4,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(0),
+ /* templates */ TemplateIndex(2),
/* parameters */ ParameterIndex(0),
/* return_matcher_indices */ MatcherIndicesIndex(3),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
@@ -2171,13 +2226,24 @@
/* num_parameters */ 4,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(2),
+ /* templates */ TemplateIndex(4),
/* parameters */ ParameterIndex(4),
- /* return_matcher_indices */ MatcherIndicesIndex(22),
+ /* return_matcher_indices */ MatcherIndicesIndex(27),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
/* [59] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse, OverloadFlag::kMemberFunction),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 2,
+ /* templates */ TemplateIndex(0),
+ /* parameters */ ParameterIndex(97),
+ /* return_matcher_indices */ MatcherIndicesIndex(17),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [60] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 0,
/* num_explicit_templates */ 0,
@@ -2188,47 +2254,47 @@
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [60] */
+ /* [61] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 3,
/* num_explicit_templates */ 0,
/* num_templates */ 1,
- /* templates */ TemplateIndex(0),
+ /* templates */ TemplateIndex(2),
/* parameters */ ParameterIndex(8),
/* return_matcher_indices */ MatcherIndicesIndex(3),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [61] */
+ /* [62] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 2,
/* num_explicit_templates */ 0,
/* num_templates */ 2,
- /* templates */ TemplateIndex(0),
+ /* templates */ TemplateIndex(2),
/* parameters */ ParameterIndex(67),
/* return_matcher_indices */ MatcherIndicesIndex(3),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
{
- /* [62] */
- /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* num_parameters */ 1,
- /* num_explicit_templates */ 0,
- /* num_templates */ 0,
- /* templates */ TemplateIndex(/* invalid */),
- /* parameters */ ParameterIndex(103),
- /* return_matcher_indices */ MatcherIndicesIndex(1),
- /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
- },
- {
/* [63] */
/* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
/* num_parameters */ 1,
/* num_explicit_templates */ 0,
/* num_templates */ 0,
/* templates */ TemplateIndex(/* invalid */),
- /* parameters */ ParameterIndex(101),
- /* return_matcher_indices */ MatcherIndicesIndex(73),
+ /* parameters */ ParameterIndex(104),
+ /* return_matcher_indices */ MatcherIndicesIndex(6),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [64] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 1,
+ /* num_explicit_templates */ 0,
+ /* num_templates */ 0,
+ /* templates */ TemplateIndex(/* invalid */),
+ /* parameters */ ParameterIndex(102),
+ /* return_matcher_indices */ MatcherIndicesIndex(78),
/* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
},
};
@@ -2239,97 +2305,103 @@
constexpr IntrinsicInfo kBuiltins[] = {
{
/* [0] */
- /* fn barrier() */
+ /* fn length[T, A : access](ptr<storage, array<T>, A>) -> i32 */
/* num overloads */ 1,
/* overloads */ OverloadIndex(59),
},
{
/* [1] */
- /* fn memoryBarrierBuffer() */
+ /* fn barrier() */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(59),
+ /* overloads */ OverloadIndex(60),
},
{
/* [2] */
- /* fn memoryBarrierImage() */
+ /* fn memoryBarrierBuffer() */
/* num overloads */ 1,
- /* overloads */ OverloadIndex(59),
+ /* overloads */ OverloadIndex(60),
},
{
/* [3] */
- /* fn atomicCompSwap[T : iu32](ptr<workgroup_or_storage, atomic<T>, read_write>, compare_value: T, value: T) -> T */
+ /* fn memoryBarrierImage() */
/* num overloads */ 1,
/* overloads */ OverloadIndex(60),
},
{
/* [4] */
- /* fn atomicSub[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
+ /* fn atomicCompSwap[T : iu32](ptr<workgroup_or_storage, atomic<T>, read_write>, compare_value: T, value: T) -> T */
/* num overloads */ 1,
/* overloads */ OverloadIndex(61),
},
{
/* [5] */
+ /* fn atomicSub[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(62),
+ },
+ {
+ /* [6] */
/* fn floatBitsToInt(value: f32) -> i32 */
/* fn floatBitsToInt[N : num](value: vec<N, f32>) -> vec<N, i32> */
/* num overloads */ 2,
/* overloads */ OverloadIndex(45),
},
{
- /* [6] */
+ /* [7] */
/* fn floatBitsToUint(value: f32) -> u32 */
/* fn floatBitsToUint[N : num](value: vec<N, f32>) -> vec<N, u32> */
/* num overloads */ 2,
/* overloads */ OverloadIndex(47),
},
{
- /* [7] */
+ /* [8] */
/* fn intBitsToFloat(value: i32) -> f32 */
/* fn intBitsToFloat[N : num](value: vec<N, i32>) -> vec<N, f32> */
/* num overloads */ 2,
/* overloads */ OverloadIndex(49),
},
{
- /* [8] */
+ /* [9] */
/* fn uintBitsToFloat(value: u32) -> f32 */
/* fn uintBitsToFloat[N : num](value: vec<N, u32>) -> vec<N, f32> */
/* num overloads */ 2,
/* overloads */ OverloadIndex(51),
},
{
- /* [9] */
+ /* [10] */
/* fn bitCount[T : iu32](value: T) -> i32 */
/* fn bitCount[T : iu32, N : num](value: vec<N, T>) -> vec<N, i32> */
/* num overloads */ 2,
/* overloads */ OverloadIndex(53),
},
{
- /* [10] */
+ /* [11] */
/* fn bitfieldExtract[T : iu32](value: T, offset: i32, bits: i32) -> T */
/* fn bitfieldExtract[T : iu32, N : num](value: vec<N, T>, offset: i32, bits: i32) -> vec<N, T> */
/* num overloads */ 2,
/* overloads */ OverloadIndex(55),
},
{
- /* [11] */
+ /* [12] */
/* fn bitfieldInsert[T : iu32](base: T, insert: T, offset: i32, bits: i32) -> T */
/* fn bitfieldInsert[T : iu32, N : num](base: vec<N, T>, insert: vec<N, T>, offset: i32, bits: i32) -> vec<N, T> */
/* num overloads */ 2,
/* overloads */ OverloadIndex(57),
},
{
- /* [12] */
- /* fn packFloat2x16(value: vec2<f16>) -> u32 */
- /* num overloads */ 1,
- /* overloads */ OverloadIndex(62),
- },
- {
/* [13] */
- /* fn unpackFloat2x16(value: u32) -> vec2<f16> */
+ /* fn packFloat2x16(value: vec2<f16>) -> u32 */
/* num overloads */ 1,
/* overloads */ OverloadIndex(63),
},
{
/* [14] */
+ /* fn unpackFloat2x16(value: u32) -> vec2<f16> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(64),
+ },
+ {
+ /* [15] */
/* fn textureSize[T : fiu32](texture: texture_1d<T>, level: i32) -> i32 */
/* fn textureSize[T : fiu32](texture: texture_2d<T>, level: i32) -> vec2<i32> */
/* fn textureSize[T : fiu32](texture: texture_2d_array<T>, level: i32) -> vec3<i32> */
@@ -2346,7 +2418,7 @@
/* overloads */ OverloadIndex(0),
},
{
- /* [15] */
+ /* [16] */
/* fn imageSize[F : texel_format, A : access](texture: texture_storage_1d<F, A>) -> i32 */
/* fn imageSize[F : texel_format, A : access](texture: texture_storage_2d<F, A>) -> vec2<i32> */
/* fn imageSize[F : texel_format, A : access](texture: texture_storage_2d_array<F, A>) -> vec3<i32> */
@@ -2355,7 +2427,7 @@
/* overloads */ OverloadIndex(41),
},
{
- /* [16] */
+ /* [17] */
/* fn texelFetch[T : fiu32](texture: texture_1d<T>, location: i32, level: i32) -> vec4<T> */
/* fn texelFetch[T : fiu32](texture: texture_2d<T>, location: vec2<i32>, level: i32) -> vec4<T> */
/* fn texelFetch[T : fiu32](texture: texture_2d_array<T>, location: vec3<i32>, level: i32) -> vec4<T> */
@@ -2365,7 +2437,7 @@
/* overloads */ OverloadIndex(36),
},
{
- /* [17] */
+ /* [18] */
/* fn imageLoad[F : f32_texel_format, A : readable](texture: texture_storage_1d<F, A>, coords: i32) -> vec4<f32> */
/* fn imageLoad[F : f32_texel_format, A : readable](texture: texture_storage_2d<F, A>, coords: vec2<i32>) -> vec4<f32> */
/* fn imageLoad[F : f32_texel_format, A : readable](texture: texture_storage_2d_array<F, A>, coords: vec3<i32>) -> vec4<f32> */
@@ -2382,7 +2454,7 @@
/* overloads */ OverloadIndex(12),
},
{
- /* [18] */
+ /* [19] */
/* fn imageStore[C : iu32](texture: texture_storage_1d<f32_texel_format, writable>, coords: C, value: vec4<f32>) */
/* fn imageStore[C : iu32](texture: texture_storage_1d<i32_texel_format, writable>, coords: C, value: vec4<i32>) */
/* fn imageStore[C : iu32](texture: texture_storage_1d<u32_texel_format, writable>, coords: C, value: vec4<u32>) */
diff --git a/src/tint/lang/glsl/ir/BUILD.bazel b/src/tint/lang/glsl/ir/BUILD.bazel
index 4f04c35..22db5c1 100644
--- a/src/tint/lang/glsl/ir/BUILD.bazel
+++ b/src/tint/lang/glsl/ir/BUILD.bazel
@@ -40,10 +40,12 @@
name = "ir",
srcs = [
"builtin_call.cc",
+ "member_builtin_call.cc",
"ternary.cc",
],
hdrs = [
"builtin_call.h",
+ "member_builtin_call.h",
"ternary.h",
],
deps = [
@@ -78,6 +80,7 @@
alwayslink = True,
srcs = [
"builtin_call_test.cc",
+ "member_builtin_call_test.cc",
"ternary_test.cc",
],
deps = [
diff --git a/src/tint/lang/glsl/ir/BUILD.cmake b/src/tint/lang/glsl/ir/BUILD.cmake
index acaa18f..7a70465 100644
--- a/src/tint/lang/glsl/ir/BUILD.cmake
+++ b/src/tint/lang/glsl/ir/BUILD.cmake
@@ -41,6 +41,8 @@
tint_add_target(tint_lang_glsl_ir lib
lang/glsl/ir/builtin_call.cc
lang/glsl/ir/builtin_call.h
+ lang/glsl/ir/member_builtin_call.cc
+ lang/glsl/ir/member_builtin_call.h
lang/glsl/ir/ternary.cc
lang/glsl/ir/ternary.h
)
@@ -79,6 +81,7 @@
################################################################################
tint_add_target(tint_lang_glsl_ir_test test
lang/glsl/ir/builtin_call_test.cc
+ lang/glsl/ir/member_builtin_call_test.cc
lang/glsl/ir/ternary_test.cc
)
diff --git a/src/tint/lang/glsl/ir/BUILD.gn b/src/tint/lang/glsl/ir/BUILD.gn
index 54868e1..b8e7399 100644
--- a/src/tint/lang/glsl/ir/BUILD.gn
+++ b/src/tint/lang/glsl/ir/BUILD.gn
@@ -47,6 +47,8 @@
sources = [
"builtin_call.cc",
"builtin_call.h",
+ "member_builtin_call.cc",
+ "member_builtin_call.h",
"ternary.cc",
"ternary.h",
]
@@ -79,6 +81,7 @@
tint_unittests_source_set("unittests") {
sources = [
"builtin_call_test.cc",
+ "member_builtin_call_test.cc",
"ternary_test.cc",
]
deps = [
diff --git a/src/tint/lang/glsl/ir/member_builtin_call.cc b/src/tint/lang/glsl/ir/member_builtin_call.cc
new file mode 100644
index 0000000..129ada0
--- /dev/null
+++ b/src/tint/lang/glsl/ir/member_builtin_call.cc
@@ -0,0 +1,64 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "src/tint/lang/glsl/ir/member_builtin_call.h"
+
+#include <utility>
+
+#include "src/tint/lang/core/ir/clone_context.h"
+#include "src/tint/lang/core/ir/instruction_result.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/lang/core/ir/value.h"
+#include "src/tint/lang/glsl/builtin_fn.h"
+#include "src/tint/utils/containers/vector.h"
+#include "src/tint/utils/ice/ice.h"
+#include "src/tint/utils/rtti/castable.h"
+
+TINT_INSTANTIATE_TYPEINFO(tint::glsl::ir::MemberBuiltinCall);
+
+namespace tint::glsl::ir {
+
+MemberBuiltinCall::MemberBuiltinCall(Id id,
+ core::ir::InstructionResult* result,
+ BuiltinFn func,
+ core::ir::Value* object,
+ VectorRef<core::ir::Value*> arguments)
+ : Base(id, result, object, arguments), func_(func) {
+ TINT_ASSERT(func != BuiltinFn::kNone);
+}
+
+MemberBuiltinCall::~MemberBuiltinCall() = default;
+
+MemberBuiltinCall* MemberBuiltinCall::Clone(core::ir::CloneContext& ctx) {
+ auto* new_result = ctx.Clone(Result(0));
+ auto* new_object = ctx.Clone(Object());
+ auto new_args = ctx.Clone<MemberBuiltinCall::kDefaultNumOperands>(Args());
+ return ctx.ir.CreateInstruction<MemberBuiltinCall>(new_result, func_, new_object,
+ std::move(new_args));
+}
+
+} // namespace tint::glsl::ir
diff --git a/src/tint/lang/glsl/ir/member_builtin_call.h b/src/tint/lang/glsl/ir/member_builtin_call.h
new file mode 100644
index 0000000..2de89ab
--- /dev/null
+++ b/src/tint/lang/glsl/ir/member_builtin_call.h
@@ -0,0 +1,81 @@
+// Copyright 2024 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#ifndef SRC_TINT_LANG_GLSL_IR_MEMBER_BUILTIN_CALL_H_
+#define SRC_TINT_LANG_GLSL_IR_MEMBER_BUILTIN_CALL_H_
+
+#include <string>
+
+#include "src/tint/lang/core/intrinsic/table_data.h"
+#include "src/tint/lang/core/ir/member_builtin_call.h"
+#include "src/tint/lang/glsl/builtin_fn.h"
+#include "src/tint/lang/glsl/intrinsic/dialect.h"
+#include "src/tint/utils/rtti/castable.h"
+
+namespace tint::glsl::ir {
+
+/// An GLSL member builtin call instruction in the IR.
+class MemberBuiltinCall final : public Castable<MemberBuiltinCall, core::ir::MemberBuiltinCall> {
+ public:
+ /// Constructor
+ /// @param id the instruction id
+ /// @param result the result value
+ /// @param func the builtin function
+ /// @param object the object
+ /// @param args the call arguments
+ MemberBuiltinCall(Id id,
+ core::ir::InstructionResult* result,
+ BuiltinFn func,
+ core::ir::Value* object,
+ VectorRef<core::ir::Value*> args = tint::Empty);
+
+ ~MemberBuiltinCall() override;
+
+ /// @copydoc core::ir::Instruction::Clone()
+ MemberBuiltinCall* Clone(core::ir::CloneContext& ctx) override;
+
+ /// @returns the builtin function
+ BuiltinFn Func() const { return func_; }
+
+ /// @returns the identifier for the function
+ size_t FuncId() const override { return static_cast<size_t>(func_); }
+
+ /// @returns the friendly name for the instruction
+ std::string FriendlyName() const override { return str(func_); }
+
+ /// @returns the table data to validate this builtin
+ const core::intrinsic::TableData& TableData() const override {
+ return glsl::intrinsic::Dialect::kData;
+ }
+
+ private:
+ BuiltinFn func_;
+};
+
+} // namespace tint::glsl::ir
+
+#endif // SRC_TINT_LANG_GLSL_IR_MEMBER_BUILTIN_CALL_H_
diff --git a/src/tint/lang/glsl/ir/member_builtin_call_test.cc b/src/tint/lang/glsl/ir/member_builtin_call_test.cc
new file mode 100644
index 0000000..84329e1
--- /dev/null
+++ b/src/tint/lang/glsl/ir/member_builtin_call_test.cc
@@ -0,0 +1,122 @@
+// Copyright 2023 The Dawn & Tint Authors
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this
+// list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "src/tint/lang/glsl/ir/member_builtin_call.h"
+
+#include "gtest/gtest.h"
+
+#include "src/tint/lang/core/fluent_types.h"
+#include "src/tint/lang/core/ir/ir_helper_test.h"
+#include "src/tint/lang/core/ir/validator.h"
+#include "src/tint/lang/glsl/builtin_fn.h"
+#include "src/tint/utils/result/result.h"
+
+using namespace tint::core::fluent_types; // NOLINT
+using namespace tint::core::number_suffixes; // NOLINT
+
+namespace tint::glsl::ir {
+namespace {
+
+using IR_GlslMemberBuiltinCallTest = core::ir::IRTestHelper;
+
+TEST_F(IR_GlslMemberBuiltinCallTest, Clone) {
+ auto* sb = ty.Struct(mod.symbols.New("SB"), {
+ {mod.symbols.New("a"), ty.array<u32>()},
+ });
+ auto* var = b.Var("v", storage, sb, core::Access::kReadWrite);
+ var->SetBindingPoint(0, 0);
+ b.ir.root_block->Append(var);
+
+ auto* access = b.Access(ty.ptr<storage, array<u32>, read_write>(), var, 0_u);
+ auto* builtin = b.MemberCall<MemberBuiltinCall>(mod.Types().i32(), BuiltinFn::kLength, access);
+
+ auto* new_b = clone_ctx.Clone(builtin);
+
+ EXPECT_NE(builtin, new_b);
+ EXPECT_NE(builtin->Result(0), new_b->Result(0));
+ EXPECT_EQ(mod.Types().i32(), new_b->Result(0)->Type());
+
+ EXPECT_EQ(BuiltinFn::kLength, new_b->Func());
+ EXPECT_TRUE(new_b->Object()->Type()->UnwrapPtr()->Is<core::type::Array>());
+
+ auto args = new_b->Args();
+ ASSERT_EQ(0u, args.Length());
+}
+
+TEST_F(IR_GlslMemberBuiltinCallTest, DoesNotMatchIncorrectType) {
+ auto* sb = ty.Struct(mod.symbols.New("SB"), {
+ {mod.symbols.New("a"), ty.u32()},
+ });
+ auto* var = b.Var("v", storage, sb, core::Access::kReadWrite);
+ var->SetBindingPoint(0, 0);
+ b.ir.root_block->Append(var);
+
+ auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+ b.Append(func->Block(), [&] {
+ auto* access = b.Access(ty.ptr<storage, u32, read_write>(), var, 0_u);
+ b.Let("x", b.MemberCall<MemberBuiltinCall>(mod.Types().i32(), BuiltinFn::kLength, access));
+
+ b.Return(func);
+ });
+
+ auto res = core::ir::Validate(mod);
+ ASSERT_NE(res, Success);
+ EXPECT_EQ(res.Failure().reason.Str(),
+ R"(:12:17 error: length: no matching call to 'length(ptr<storage, u32, read_write>)'
+
+1 candidate function:
+ • 'length(ptr<storage, array<T>, A> ✗ ) -> i32'
+
+ %4:i32 = %3.length
+ ^^^^^^
+
+:10:3 note: in block
+ $B2: {
+ ^^^
+
+note: # Disassembly
+SB = struct @align(4) {
+ a:u32 @offset(0)
+}
+
+$B1: { # root
+ %v:ptr<storage, SB, read_write> = var @binding_point(0, 0)
+}
+
+%foo = @fragment func():void {
+ $B2: {
+ %3:ptr<storage, u32, read_write> = access %v, 0u
+ %4:i32 = %3.length
+ %x:i32 = let %4
+ ret
+ }
+}
+)");
+}
+
+} // namespace
+} // namespace tint::glsl::ir
diff --git a/src/tint/lang/glsl/writer/builtin_test.cc b/src/tint/lang/glsl/writer/builtin_test.cc
index 45c90f3..c637844 100644
--- a/src/tint/lang/glsl/writer/builtin_test.cc
+++ b/src/tint/lang/glsl/writer/builtin_test.cc
@@ -1422,5 +1422,35 @@
)");
}
+TEST_F(GlslWriterTest, BuiltinArrayLength) {
+ auto* sb = ty.Struct(mod.symbols.New("SB"), {
+ {mod.symbols.New("b"), ty.array<u32>()},
+ });
+
+ auto* var = b.Var("v", storage, sb, core::Access::kReadWrite);
+ var->SetBindingPoint(0, 0);
+ b.ir.root_block->Append(var);
+
+ auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+ b.Append(func->Block(), [&] {
+ auto* ary = b.Access(ty.ptr<storage, array<u32>, read_write>(), var, 0_u);
+ b.Let("x", b.Call(ty.u32(), core::BuiltinFn::kArrayLength, ary));
+ b.Return(func);
+ });
+
+ ASSERT_TRUE(Generate()) << err_ << output_.glsl;
+ EXPECT_EQ(output_.glsl, GlslHeader() + R"(precision highp float;
+precision highp int;
+
+layout(binding = 0, std430)
+buffer SB_1_ssbo {
+ uint b[];
+} v;
+void main() {
+ uint x = uint(v.b.length());
+}
+)");
+}
+
} // namespace
} // namespace tint::glsl::writer
diff --git a/src/tint/lang/glsl/writer/printer/printer.cc b/src/tint/lang/glsl/writer/printer/printer.cc
index deb1f61..582fc35 100644
--- a/src/tint/lang/glsl/writer/printer/printer.cc
+++ b/src/tint/lang/glsl/writer/printer/printer.cc
@@ -81,6 +81,7 @@
#include "src/tint/lang/core/type/vector.h"
#include "src/tint/lang/core/type/void.h"
#include "src/tint/lang/glsl/ir/builtin_call.h"
+#include "src/tint/lang/glsl/ir/member_builtin_call.h"
#include "src/tint/lang/glsl/ir/ternary.h"
#include "src/tint/lang/glsl/writer/common/printer_support.h"
#include "src/tint/lang/glsl/writer/common/version.h"
@@ -1103,7 +1104,10 @@
[&](const core::ir::Var* var) { out << NameOf(var->Result(0)); },
[&](const glsl::ir::BuiltinCall* c) { EmitGlslBuiltinCall(out, c); }, //
- [&](const glsl::ir::Ternary* t) { EmitTernary(out, t); }, //
+ [&](const glsl::ir::MemberBuiltinCall* mbc) {
+ EmitGlslMemberBuiltinCall(out, mbc);
+ },
+ [&](const glsl::ir::Ternary* t) { EmitTernary(out, t); }, //
TINT_ICE_ON_NO_MATCH);
},
@@ -1112,6 +1116,21 @@
TINT_ICE_ON_NO_MATCH);
}
+ void EmitGlslMemberBuiltinCall(StringStream& out, const glsl::ir::MemberBuiltinCall* c) {
+ EmitValue(out, c->Object());
+ out << "." << c->Func() << "(";
+
+ bool needs_comma = false;
+ for (const auto* arg : c->Args()) {
+ if (needs_comma) {
+ out << ", ";
+ }
+ EmitValue(out, arg);
+ needs_comma = true;
+ }
+ out << ")";
+ }
+
void EmitGlslBuiltinCall(StringStream& out, const glsl::ir::BuiltinCall* c) {
// The atomic subtract is an add in GLSL. If the value is a u32, it just negates the u32 and
// GLSL handles it. We don't have u32 negation in the IR, so fake it in the printer.
diff --git a/src/tint/lang/glsl/writer/raise/builtin_polyfill.cc b/src/tint/lang/glsl/writer/raise/builtin_polyfill.cc
index 4859832..841168e 100644
--- a/src/tint/lang/glsl/writer/raise/builtin_polyfill.cc
+++ b/src/tint/lang/glsl/writer/raise/builtin_polyfill.cc
@@ -42,6 +42,7 @@
#include "src/tint/lang/core/type/storage_texture.h"
#include "src/tint/lang/glsl/builtin_fn.h"
#include "src/tint/lang/glsl/ir/builtin_call.h"
+#include "src/tint/lang/glsl/ir/member_builtin_call.h"
#include "src/tint/lang/glsl/ir/ternary.h"
namespace tint::glsl::writer::raise {
@@ -67,6 +68,7 @@
for (auto* inst : ir.Instructions()) {
if (auto* call = inst->As<core::ir::CoreBuiltinCall>()) {
switch (call->Func()) {
+ case core::BuiltinFn::kArrayLength:
case core::BuiltinFn::kAtomicCompareExchangeWeak:
case core::BuiltinFn::kAtomicSub:
case core::BuiltinFn::kAtomicLoad:
@@ -94,6 +96,9 @@
// Replace the builtin calls that we found
for (auto* call : call_worklist) {
switch (call->Func()) {
+ case core::BuiltinFn::kArrayLength:
+ ArrayLength(call);
+ break;
case core::BuiltinFn::kAtomicCompareExchangeWeak:
AtomicCompareExchangeWeak(call);
break;
@@ -141,6 +146,15 @@
}
}
+ void ArrayLength(core::ir::Call* call) {
+ b.InsertBefore(call, [&] {
+ auto* len = b.MemberCall<glsl::ir::MemberBuiltinCall>(ty.i32(), BuiltinFn::kLength,
+ call->Args()[0]);
+ b.ConvertWithResult(call->DetachResult(), len->Result(0));
+ });
+ call->Destroy();
+ }
+
void ExtractBits(core::ir::Call* call) {
b.InsertBefore(call, [&] {
auto args = call->Args();
diff --git a/src/tint/lang/glsl/writer/raise/builtin_polyfill_test.cc b/src/tint/lang/glsl/writer/raise/builtin_polyfill_test.cc
index d785a78..b91402c 100644
--- a/src/tint/lang/glsl/writer/raise/builtin_polyfill_test.cc
+++ b/src/tint/lang/glsl/writer/raise/builtin_polyfill_test.cc
@@ -1394,5 +1394,65 @@
EXPECT_EQ(expect, str());
}
+TEST_F(GlslWriter_BuiltinPolyfillTest, ArrayLength) {
+ auto* sb = ty.Struct(mod.symbols.New("SB"), {
+ {mod.symbols.New("b"), ty.array<u32>()},
+ });
+
+ auto* var = b.Var("v", storage, sb, core::Access::kReadWrite);
+ var->SetBindingPoint(0, 0);
+ b.ir.root_block->Append(var);
+
+ auto* func = b.Function("foo", ty.void_(), core::ir::Function::PipelineStage::kFragment);
+ b.Append(func->Block(), [&] {
+ auto* ary = b.Access(ty.ptr<storage, array<u32>, read_write>(), var, 0_u);
+ b.Let("x", b.Call(ty.u32(), core::BuiltinFn::kArrayLength, ary));
+ b.Return(func);
+ });
+
+ auto* src = R"(
+SB = struct @align(4) {
+ b:array<u32> @offset(0)
+}
+
+$B1: { # root
+ %v:ptr<storage, SB, read_write> = var @binding_point(0, 0)
+}
+
+%foo = @fragment func():void {
+ $B2: {
+ %3:ptr<storage, array<u32>, read_write> = access %v, 0u
+ %4:u32 = arrayLength %3
+ %x:u32 = let %4
+ ret
+ }
+}
+)";
+ ASSERT_EQ(src, str());
+
+ auto* expect = R"(
+SB = struct @align(4) {
+ b:array<u32> @offset(0)
+}
+
+$B1: { # root
+ %v:ptr<storage, SB, read_write> = var @binding_point(0, 0)
+}
+
+%foo = @fragment func():void {
+ $B2: {
+ %3:ptr<storage, array<u32>, read_write> = access %v, 0u
+ %4:i32 = %3.length
+ %5:u32 = convert %4
+ %x:u32 = let %5
+ ret
+ }
+}
+)";
+
+ Run(BuiltinPolyfill);
+ EXPECT_EQ(expect, str());
+}
+
} // namespace
} // namespace tint::glsl::writer::raise
diff --git a/test/tint/bug/chromium/1290107.wgsl.expected.ir.glsl b/test/tint/bug/chromium/1290107.wgsl.expected.ir.glsl
index ffd961c..e938743 100644
--- a/test/tint/bug/chromium/1290107.wgsl.expected.ir.glsl
+++ b/test/tint/bug/chromium/1290107.wgsl.expected.ir.glsl
@@ -1,11 +1,15 @@
-SKIP: FAILED
+#version 310 es
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
-tint executable returned error: signal: trace/BPT trap
+struct S {
+ float f;
+};
+
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+ S tint_symbol_1[];
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ uint len = uint(v.tint_symbol_1.length());
+}
diff --git a/test/tint/bug/tint/1725.wgsl.expected.ir.glsl b/test/tint/bug/tint/1725.wgsl.expected.ir.glsl
index ffd961c..dfabfdf 100644
--- a/test/tint/bug/tint/1725.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/1725.wgsl.expected.ir.glsl
@@ -1,11 +1,16 @@
-SKIP: FAILED
+#version 310 es
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_8_1_ssbo {
+ uint tint_symbol_7[];
+} v;
+void tint_symbol_1_inner(uint tint_symbol_2) {
+ int tint_symbol_3 = 0;
+ int tint_symbol_4 = 0;
+ int tint_symbol_5 = 0;
+ uint tint_symbol_6 = v.tint_symbol_7[min(tint_symbol_2, (uint(v.tint_symbol_7.length()) - 1u))];
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ tint_symbol_1_inner(gl_LocalInvocationIndex);
+}
diff --git a/test/tint/bug/tint/2177.wgsl.expected.ir.glsl b/test/tint/bug/tint/2177.wgsl.expected.ir.glsl
index ffd961c..0d8a144 100644
--- a/test/tint/bug/tint/2177.wgsl.expected.ir.glsl
+++ b/test/tint/bug/tint/2177.wgsl.expected.ir.glsl
@@ -1,11 +1,19 @@
-SKIP: FAILED
+#version 310 es
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+ uint tint_symbol_1[];
+} v;
+uint f2() {
+ return uint(v.tint_symbol_1.length());
+}
+uint f1() {
+ return f2();
+}
+uint f0() {
+ return f1();
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol_1[0] = f0();
+}
diff --git a/test/tint/builtins/arrayLength/simple.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/simple.wgsl.expected.ir.glsl
index ffd961c..7d70253 100644
--- a/test/tint/builtins/arrayLength/simple.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/simple.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer S_1_ssbo {
+ int a[];
+} G;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ uint l1 = uint(G.a.length());
+}
diff --git a/test/tint/builtins/arrayLength/simple_no_struct.wgsl.expected.ir.glsl b/test/tint/builtins/arrayLength/simple_no_struct.wgsl.expected.ir.glsl
index ffd961c..598d6eb 100644
--- a/test/tint/builtins/arrayLength/simple_no_struct.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/arrayLength/simple_no_struct.wgsl.expected.ir.glsl
@@ -1,11 +1,10 @@
-SKIP: FAILED
+#version 310 es
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_2_1_ssbo {
+ int tint_symbol_1[];
+} v;
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ uint l1 = uint(v.tint_symbol_1.length());
+}
diff --git a/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.glsl
index ffd961c..6271dc7 100644
--- a/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/arrayLength/1588cd.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ int arg_0[];
+} sb_ro;
+uint arrayLength_1588cd() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_1588cd();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ int arg_0[];
+} sb_ro;
+uint arrayLength_1588cd() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_1588cd();
+}
+#version 310 es
+
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ int arg_0[];
+} sb_ro;
+layout(location = 0) flat out uint vertex_main_loc0_Output;
+uint arrayLength_1588cd() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = arrayLength_1588cd();
+ return tint_symbol;
+}
+void main() {
+ VertexOutput v = vertex_main_inner();
+ gl_Position = v.pos;
+ gl_Position[1u] = -(gl_Position.y);
+ gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
+ vertex_main_loc0_Output = v.prevent_dce;
+ gl_PointSize = 1.0f;
+}
diff --git a/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.glsl
index ffd961c..9684fc2 100644
--- a/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/arrayLength/61b1c7.wgsl.expected.ir.glsl
@@ -1,11 +1,37 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ int arg_0[];
+} sb_rw;
+uint arrayLength_61b1c7() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_61b1c7();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ int arg_0[];
+} sb_rw;
+uint arrayLength_61b1c7() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_61b1c7();
+}
diff --git a/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.glsl
index ffd961c..5bc9079 100644
--- a/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/arrayLength/8421b9.wgsl.expected.ir.glsl
@@ -1,11 +1,71 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float16_t arg_0[];
+} sb_ro;
+uint arrayLength_8421b9() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_8421b9();
+}
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float16_t arg_0[];
+} sb_ro;
+uint arrayLength_8421b9() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_8421b9();
+}
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
+
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float16_t arg_0[];
+} sb_ro;
+layout(location = 0) flat out uint vertex_main_loc0_Output;
+uint arrayLength_8421b9() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = arrayLength_8421b9();
+ return tint_symbol;
+}
+void main() {
+ VertexOutput v = vertex_main_inner();
+ gl_Position = v.pos;
+ gl_Position[1u] = -(gl_Position.y);
+ gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
+ vertex_main_loc0_Output = v.prevent_dce;
+ gl_PointSize = 1.0f;
+}
diff --git a/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.glsl
index ffd961c..dd82fe4 100644
--- a/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/arrayLength/a0f5ca.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float arg_0[];
+} sb_ro;
+uint arrayLength_a0f5ca() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_a0f5ca();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float arg_0[];
+} sb_ro;
+uint arrayLength_a0f5ca() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_a0f5ca();
+}
+#version 310 es
+
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float arg_0[];
+} sb_ro;
+layout(location = 0) flat out uint vertex_main_loc0_Output;
+uint arrayLength_a0f5ca() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = arrayLength_a0f5ca();
+ return tint_symbol;
+}
+void main() {
+ VertexOutput v = vertex_main_inner();
+ gl_Position = v.pos;
+ gl_Position[1u] = -(gl_Position.y);
+ gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
+ vertex_main_loc0_Output = v.prevent_dce;
+ gl_PointSize = 1.0f;
+}
diff --git a/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.glsl
index ffd961c..004333c 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/arrayLength/cbd6b5.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ float16_t arg_0[];
+} sb_rw;
+uint arrayLength_cbd6b5() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_cbd6b5();
+}
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ float16_t arg_0[];
+} sb_rw;
+uint arrayLength_cbd6b5() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_cbd6b5();
+}
diff --git a/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.glsl
index ffd961c..ebff2a4 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/arrayLength/cdd123.wgsl.expected.ir.glsl
@@ -1,11 +1,37 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ float arg_0[];
+} sb_rw;
+uint arrayLength_cdd123() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_cdd123();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ float arg_0[];
+} sb_rw;
+uint arrayLength_cdd123() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_cdd123();
+}
diff --git a/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.glsl
index ffd961c..aa2b0b8 100644
--- a/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/arrayLength/cfca0a.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ uint arg_0[];
+} sb_ro;
+uint arrayLength_cfca0a() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_cfca0a();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ uint arg_0[];
+} sb_ro;
+uint arrayLength_cfca0a() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_cfca0a();
+}
+#version 310 es
+
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ uint arg_0[];
+} sb_ro;
+layout(location = 0) flat out uint vertex_main_loc0_Output;
+uint arrayLength_cfca0a() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = arrayLength_cfca0a();
+ return tint_symbol;
+}
+void main() {
+ VertexOutput v = vertex_main_inner();
+ gl_Position = v.pos;
+ gl_Position[1u] = -(gl_Position.y);
+ gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
+ vertex_main_loc0_Output = v.prevent_dce;
+ gl_PointSize = 1.0f;
+}
diff --git a/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.glsl b/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.glsl
index ffd961c..fcf2a58 100644
--- a/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/literal/arrayLength/eb510f.wgsl.expected.ir.glsl
@@ -1,11 +1,37 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ uint arg_0[];
+} sb_rw;
+uint arrayLength_eb510f() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_eb510f();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ uint arg_0[];
+} sb_rw;
+uint arrayLength_eb510f() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_eb510f();
+}
diff --git a/test/tint/builtins/gen/var/arrayLength/1588cd.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/arrayLength/1588cd.wgsl.expected.ir.glsl
index ffd961c..6271dc7 100644
--- a/test/tint/builtins/gen/var/arrayLength/1588cd.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/arrayLength/1588cd.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ int arg_0[];
+} sb_ro;
+uint arrayLength_1588cd() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_1588cd();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ int arg_0[];
+} sb_ro;
+uint arrayLength_1588cd() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_1588cd();
+}
+#version 310 es
+
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ int arg_0[];
+} sb_ro;
+layout(location = 0) flat out uint vertex_main_loc0_Output;
+uint arrayLength_1588cd() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = arrayLength_1588cd();
+ return tint_symbol;
+}
+void main() {
+ VertexOutput v = vertex_main_inner();
+ gl_Position = v.pos;
+ gl_Position[1u] = -(gl_Position.y);
+ gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
+ vertex_main_loc0_Output = v.prevent_dce;
+ gl_PointSize = 1.0f;
+}
diff --git a/test/tint/builtins/gen/var/arrayLength/61b1c7.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/arrayLength/61b1c7.wgsl.expected.ir.glsl
index ffd961c..9684fc2 100644
--- a/test/tint/builtins/gen/var/arrayLength/61b1c7.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/arrayLength/61b1c7.wgsl.expected.ir.glsl
@@ -1,11 +1,37 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ int arg_0[];
+} sb_rw;
+uint arrayLength_61b1c7() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_61b1c7();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ int arg_0[];
+} sb_rw;
+uint arrayLength_61b1c7() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_61b1c7();
+}
diff --git a/test/tint/builtins/gen/var/arrayLength/8421b9.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/arrayLength/8421b9.wgsl.expected.ir.glsl
index ffd961c..5bc9079 100644
--- a/test/tint/builtins/gen/var/arrayLength/8421b9.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/arrayLength/8421b9.wgsl.expected.ir.glsl
@@ -1,11 +1,71 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float16_t arg_0[];
+} sb_ro;
+uint arrayLength_8421b9() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_8421b9();
+}
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float16_t arg_0[];
+} sb_ro;
+uint arrayLength_8421b9() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_8421b9();
+}
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
+
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float16_t arg_0[];
+} sb_ro;
+layout(location = 0) flat out uint vertex_main_loc0_Output;
+uint arrayLength_8421b9() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = arrayLength_8421b9();
+ return tint_symbol;
+}
+void main() {
+ VertexOutput v = vertex_main_inner();
+ gl_Position = v.pos;
+ gl_Position[1u] = -(gl_Position.y);
+ gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
+ vertex_main_loc0_Output = v.prevent_dce;
+ gl_PointSize = 1.0f;
+}
diff --git a/test/tint/builtins/gen/var/arrayLength/a0f5ca.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/arrayLength/a0f5ca.wgsl.expected.ir.glsl
index ffd961c..dd82fe4 100644
--- a/test/tint/builtins/gen/var/arrayLength/a0f5ca.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/arrayLength/a0f5ca.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float arg_0[];
+} sb_ro;
+uint arrayLength_a0f5ca() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_a0f5ca();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float arg_0[];
+} sb_ro;
+uint arrayLength_a0f5ca() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_a0f5ca();
+}
+#version 310 es
+
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ float arg_0[];
+} sb_ro;
+layout(location = 0) flat out uint vertex_main_loc0_Output;
+uint arrayLength_a0f5ca() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = arrayLength_a0f5ca();
+ return tint_symbol;
+}
+void main() {
+ VertexOutput v = vertex_main_inner();
+ gl_Position = v.pos;
+ gl_Position[1u] = -(gl_Position.y);
+ gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
+ vertex_main_loc0_Output = v.prevent_dce;
+ gl_PointSize = 1.0f;
+}
diff --git a/test/tint/builtins/gen/var/arrayLength/cbd6b5.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/arrayLength/cbd6b5.wgsl.expected.ir.glsl
index ffd961c..004333c 100644
--- a/test/tint/builtins/gen/var/arrayLength/cbd6b5.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/arrayLength/cbd6b5.wgsl.expected.ir.glsl
@@ -1,11 +1,39 @@
-SKIP: FAILED
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ float16_t arg_0[];
+} sb_rw;
+uint arrayLength_cbd6b5() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_cbd6b5();
+}
+#version 310 es
+#extension GL_AMD_gpu_shader_half_float: require
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ float16_t arg_0[];
+} sb_rw;
+uint arrayLength_cbd6b5() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_cbd6b5();
+}
diff --git a/test/tint/builtins/gen/var/arrayLength/cdd123.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/arrayLength/cdd123.wgsl.expected.ir.glsl
index ffd961c..ebff2a4 100644
--- a/test/tint/builtins/gen/var/arrayLength/cdd123.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/arrayLength/cdd123.wgsl.expected.ir.glsl
@@ -1,11 +1,37 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ float arg_0[];
+} sb_rw;
+uint arrayLength_cdd123() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_cdd123();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ float arg_0[];
+} sb_rw;
+uint arrayLength_cdd123() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_cdd123();
+}
diff --git a/test/tint/builtins/gen/var/arrayLength/cfca0a.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/arrayLength/cfca0a.wgsl.expected.ir.glsl
index ffd961c..aa2b0b8 100644
--- a/test/tint/builtins/gen/var/arrayLength/cfca0a.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/arrayLength/cfca0a.wgsl.expected.ir.glsl
@@ -1,11 +1,68 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ uint arg_0[];
+} sb_ro;
+uint arrayLength_cfca0a() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_cfca0a();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ uint arg_0[];
+} sb_ro;
+uint arrayLength_cfca0a() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_cfca0a();
+}
+#version 310 es
+
+
+struct VertexOutput {
+ vec4 pos;
+ uint prevent_dce;
+};
+
+layout(binding = 1, std430)
+buffer SB_RO_1_ssbo {
+ uint arg_0[];
+} sb_ro;
+layout(location = 0) flat out uint vertex_main_loc0_Output;
+uint arrayLength_cfca0a() {
+ uint res = uint(sb_ro.arg_0.length());
+ return res;
+}
+VertexOutput vertex_main_inner() {
+ VertexOutput tint_symbol = VertexOutput(vec4(0.0f), 0u);
+ tint_symbol.pos = vec4(0.0f);
+ tint_symbol.prevent_dce = arrayLength_cfca0a();
+ return tint_symbol;
+}
+void main() {
+ VertexOutput v = vertex_main_inner();
+ gl_Position = v.pos;
+ gl_Position[1u] = -(gl_Position.y);
+ gl_Position[2u] = ((2.0f * gl_Position.z) - gl_Position.w);
+ vertex_main_loc0_Output = v.prevent_dce;
+ gl_PointSize = 1.0f;
+}
diff --git a/test/tint/builtins/gen/var/arrayLength/eb510f.wgsl.expected.ir.glsl b/test/tint/builtins/gen/var/arrayLength/eb510f.wgsl.expected.ir.glsl
index ffd961c..fcf2a58 100644
--- a/test/tint/builtins/gen/var/arrayLength/eb510f.wgsl.expected.ir.glsl
+++ b/test/tint/builtins/gen/var/arrayLength/eb510f.wgsl.expected.ir.glsl
@@ -1,11 +1,37 @@
-SKIP: FAILED
+#version 310 es
+precision highp float;
+precision highp int;
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ uint arg_0[];
+} sb_rw;
+uint arrayLength_eb510f() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+void main() {
+ v.tint_symbol = arrayLength_eb510f();
+}
+#version 310 es
-tint executable returned error: signal: trace/BPT trap
+layout(binding = 0, std430)
+buffer tint_symbol_1_1_ssbo {
+ uint tint_symbol;
+} v;
+layout(binding = 1, std430)
+buffer SB_RW_1_ssbo {
+ uint arg_0[];
+} sb_rw;
+uint arrayLength_eb510f() {
+ uint res = uint(sb_rw.arg_0.length());
+ return res;
+}
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+ v.tint_symbol = arrayLength_eb510f();
+}
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.ir.glsl
deleted file mode 100644
index ffd961c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromAccessChain.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap
diff --git a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.ir.glsl b/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.ir.glsl
deleted file mode 100644
index ffd961c..0000000
--- a/test/tint/unittest/reader/spirv/SpvParserMemoryTest_ArrayLength_FromVar.spvasm.expected.ir.glsl
+++ /dev/null
@@ -1,11 +0,0 @@
-SKIP: FAILED
-
-<dawn>/src/tint/lang/glsl/writer/printer/printer.cc:1451 internal compiler error: TINT_UNREACHABLE unhandled core builtin: arrayLength
-********************************************************************
-* The tint shader compiler has encountered an unexpected error. *
-* *
-* Please help us fix this issue by submitting a bug report at *
-* crbug.com/tint with the source program that triggered the bug. *
-********************************************************************
-
-tint executable returned error: signal: trace/BPT trap