From 053559d0515422eeb19b4192f1c6732ecf366818 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Fri, 23 Jul 2021 16:43:01 +0000 Subject: [PATCH] intrinsics: Add new struct form of modf(), frexp() Implement these for all the writers. SPIR-V reader not implemented (the old overloads weren't implemented either). Deprecate the old overloads. Fixed: tint:54 Change-Id: If66d26dbac3389ff604734f31b426abe47868b91 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/59302 Kokoro: Kokoro Reviewed-by: James Price --- src/intrinsic_table.cc | 86 + src/intrinsic_table.inl | 4190 +++++++++-------- src/intrinsic_table.inl.tmpl | 4 +- src/intrinsics.def | 17 +- src/resolver/inferred_type_test.cc | 10 +- src/resolver/intrinsic_test.cc | 164 +- src/resolver/resolver.cc | 9 +- src/sem/sem_struct_test.cc | 15 +- src/sem/struct.cc | 8 +- src/sem/struct.h | 12 + src/transform/transform_test.cc | 5 +- src/writer/hlsl/generator_impl.cc | 216 +- src/writer/hlsl/generator_impl.h | 14 +- src/writer/hlsl/generator_impl_type_test.cc | 15 +- src/writer/msl/generator_impl.cc | 330 +- src/writer/msl/generator_impl.h | 52 +- src/writer/msl/generator_impl_type_test.cc | 30 +- src/writer/spirv/builder.cc | 40 +- src/writer/spirv/builder.h | 2 +- src/writer/text_generator.cc | 11 + src/writer/text_generator.h | 72 +- test/intrinsics/frexp.wgsl | 5 +- test/intrinsics/frexp.wgsl.expected.hlsl | 19 +- test/intrinsics/frexp.wgsl.expected.msl | 16 +- test/intrinsics/frexp.wgsl.expected.spvasm | 20 +- test/intrinsics/frexp.wgsl.expected.wgsl | 5 +- .../gen/frexp/013caa.wgsl.expected.hlsl | 4 + .../gen/frexp/013caa.wgsl.expected.msl | 14 +- .../gen/frexp/013caa.wgsl.expected.spvasm | 4 + .../gen/frexp/013caa.wgsl.expected.wgsl | 4 + .../gen/frexp/0da285.wgsl.expected.hlsl | 4 + .../gen/frexp/0da285.wgsl.expected.msl | 55 +- .../gen/frexp/0da285.wgsl.expected.spvasm | 4 + .../gen/frexp/0da285.wgsl.expected.wgsl | 4 + test/intrinsics/gen/frexp/12f1da.wgsl | 45 + .../gen/frexp/12f1da.wgsl.expected.hlsl | 35 + .../gen/frexp/12f1da.wgsl.expected.msl | 38 + .../gen/frexp/12f1da.wgsl.expected.spvasm | 75 + .../gen/frexp/12f1da.wgsl.expected.wgsl | 19 + .../gen/frexp/15edf3.wgsl.expected.hlsl | 4 + .../gen/frexp/15edf3.wgsl.expected.msl | 14 +- .../gen/frexp/15edf3.wgsl.expected.spvasm | 4 + .../gen/frexp/15edf3.wgsl.expected.wgsl | 4 + .../gen/frexp/19ab15.wgsl.expected.hlsl | 4 + .../gen/frexp/19ab15.wgsl.expected.msl | 14 +- .../gen/frexp/19ab15.wgsl.expected.spvasm | 4 + .../gen/frexp/19ab15.wgsl.expected.wgsl | 4 + .../gen/frexp/2052e9.wgsl.expected.hlsl | 4 + .../gen/frexp/2052e9.wgsl.expected.msl | 14 +- .../gen/frexp/2052e9.wgsl.expected.spvasm | 4 + .../gen/frexp/2052e9.wgsl.expected.wgsl | 4 + .../gen/frexp/40fc9b.wgsl.expected.hlsl | 4 + .../gen/frexp/40fc9b.wgsl.expected.msl | 55 +- .../gen/frexp/40fc9b.wgsl.expected.spvasm | 4 + .../gen/frexp/40fc9b.wgsl.expected.wgsl | 4 + .../gen/frexp/41e931.wgsl.expected.hlsl | 4 + .../gen/frexp/41e931.wgsl.expected.msl | 14 +- .../gen/frexp/41e931.wgsl.expected.spvasm | 4 + .../gen/frexp/41e931.wgsl.expected.wgsl | 4 + .../gen/frexp/481e59.wgsl.expected.hlsl | 4 + .../gen/frexp/481e59.wgsl.expected.msl | 14 +- .../gen/frexp/481e59.wgsl.expected.spvasm | 4 + .../gen/frexp/481e59.wgsl.expected.wgsl | 4 + .../gen/frexp/5a141e.wgsl.expected.hlsl | 4 + .../gen/frexp/5a141e.wgsl.expected.msl | 14 +- .../gen/frexp/5a141e.wgsl.expected.spvasm | 4 + .../gen/frexp/5a141e.wgsl.expected.wgsl | 4 + .../gen/frexp/6d0058.wgsl.expected.hlsl | 4 + .../gen/frexp/6d0058.wgsl.expected.msl | 14 +- .../gen/frexp/6d0058.wgsl.expected.spvasm | 4 + .../gen/frexp/6d0058.wgsl.expected.wgsl | 4 + .../gen/frexp/6efa09.wgsl.expected.hlsl | 4 + .../gen/frexp/6efa09.wgsl.expected.msl | 14 +- .../gen/frexp/6efa09.wgsl.expected.spvasm | 4 + .../gen/frexp/6efa09.wgsl.expected.wgsl | 4 + test/intrinsics/gen/frexp/a0eb3b.wgsl | 45 + .../gen/frexp/a0eb3b.wgsl.expected.hlsl | 35 + .../gen/frexp/a0eb3b.wgsl.expected.msl | 38 + .../gen/frexp/a0eb3b.wgsl.expected.spvasm | 78 + .../gen/frexp/a0eb3b.wgsl.expected.wgsl | 19 + .../gen/frexp/a2a617.wgsl.expected.hlsl | 4 + .../gen/frexp/a2a617.wgsl.expected.msl | 14 +- .../gen/frexp/a2a617.wgsl.expected.spvasm | 4 + .../gen/frexp/a2a617.wgsl.expected.wgsl | 4 + .../gen/frexp/a3f940.wgsl.expected.hlsl | 4 + .../gen/frexp/a3f940.wgsl.expected.msl | 55 +- .../gen/frexp/a3f940.wgsl.expected.spvasm | 4 + .../gen/frexp/a3f940.wgsl.expected.wgsl | 4 + .../gen/frexp/a951b5.wgsl.expected.hlsl | 4 + .../gen/frexp/a951b5.wgsl.expected.msl | 14 +- .../gen/frexp/a951b5.wgsl.expected.spvasm | 4 + .../gen/frexp/a951b5.wgsl.expected.wgsl | 4 + .../gen/frexp/b45525.wgsl.expected.hlsl | 4 + .../gen/frexp/b45525.wgsl.expected.msl | 14 +- .../gen/frexp/b45525.wgsl.expected.spvasm | 4 + .../gen/frexp/b45525.wgsl.expected.wgsl | 4 + .../gen/frexp/b87f4e.wgsl.expected.hlsl | 4 + .../gen/frexp/b87f4e.wgsl.expected.msl | 55 +- .../gen/frexp/b87f4e.wgsl.expected.spvasm | 4 + .../gen/frexp/b87f4e.wgsl.expected.wgsl | 4 + .../gen/frexp/b9e4de.wgsl.expected.hlsl | 4 + .../gen/frexp/b9e4de.wgsl.expected.msl | 14 +- .../gen/frexp/b9e4de.wgsl.expected.spvasm | 4 + .../gen/frexp/b9e4de.wgsl.expected.wgsl | 4 + .../gen/frexp/c084e3.wgsl.expected.hlsl | 4 + .../gen/frexp/c084e3.wgsl.expected.msl | 14 +- .../gen/frexp/c084e3.wgsl.expected.spvasm | 4 + .../gen/frexp/c084e3.wgsl.expected.wgsl | 4 + .../gen/frexp/d06c2c.wgsl.expected.hlsl | 4 + .../gen/frexp/d06c2c.wgsl.expected.msl | 14 +- .../gen/frexp/d06c2c.wgsl.expected.spvasm | 4 + .../gen/frexp/d06c2c.wgsl.expected.wgsl | 4 + test/intrinsics/gen/frexp/d80367.wgsl | 45 + .../gen/frexp/d80367.wgsl.expected.hlsl | 35 + .../gen/frexp/d80367.wgsl.expected.msl | 38 + .../gen/frexp/d80367.wgsl.expected.spvasm | 76 + .../gen/frexp/d80367.wgsl.expected.wgsl | 19 + test/intrinsics/gen/frexp/db0637.wgsl | 45 + .../gen/frexp/db0637.wgsl.expected.hlsl | 35 + .../gen/frexp/db0637.wgsl.expected.msl | 38 + .../gen/frexp/db0637.wgsl.expected.spvasm | 78 + .../gen/frexp/db0637.wgsl.expected.wgsl | 19 + .../gen/frexp/e061dd.wgsl.expected.hlsl | 4 + .../gen/frexp/e061dd.wgsl.expected.msl | 14 +- .../gen/frexp/e061dd.wgsl.expected.spvasm | 4 + .../gen/frexp/e061dd.wgsl.expected.wgsl | 4 + .../gen/modf/1d59e5.wgsl.expected.hlsl | 4 + .../gen/modf/1d59e5.wgsl.expected.msl | 55 +- .../gen/modf/1d59e5.wgsl.expected.spvasm | 4 + .../gen/modf/1d59e5.wgsl.expected.wgsl | 4 + test/intrinsics/gen/modf/2199f1.wgsl | 45 + .../gen/modf/2199f1.wgsl.expected.hlsl | 35 + .../gen/modf/2199f1.wgsl.expected.msl | 38 + .../gen/modf/2199f1.wgsl.expected.spvasm | 76 + .../gen/modf/2199f1.wgsl.expected.wgsl | 19 + .../gen/modf/353f7d.wgsl.expected.hlsl | 4 + .../gen/modf/353f7d.wgsl.expected.msl | 14 +- .../gen/modf/353f7d.wgsl.expected.spvasm | 4 + .../gen/modf/353f7d.wgsl.expected.wgsl | 4 + .../gen/modf/3b79d5.wgsl.expected.hlsl | 4 + .../gen/modf/3b79d5.wgsl.expected.msl | 14 +- .../gen/modf/3b79d5.wgsl.expected.spvasm | 4 + .../gen/modf/3b79d5.wgsl.expected.wgsl | 4 + .../gen/modf/3d00e2.wgsl.expected.hlsl | 4 + .../gen/modf/3d00e2.wgsl.expected.msl | 14 +- .../gen/modf/3d00e2.wgsl.expected.spvasm | 4 + .../gen/modf/3d00e2.wgsl.expected.wgsl | 4 + .../gen/modf/4bb324.wgsl.expected.hlsl | 4 + .../gen/modf/4bb324.wgsl.expected.msl | 14 +- .../gen/modf/4bb324.wgsl.expected.spvasm | 4 + .../gen/modf/4bb324.wgsl.expected.wgsl | 4 + .../gen/modf/4fe3d9.wgsl.expected.hlsl | 4 + .../gen/modf/4fe3d9.wgsl.expected.msl | 14 +- .../gen/modf/4fe3d9.wgsl.expected.spvasm | 4 + .../gen/modf/4fe3d9.wgsl.expected.wgsl | 4 + .../gen/modf/51e4c6.wgsl.expected.hlsl | 4 + .../gen/modf/51e4c6.wgsl.expected.msl | 14 +- .../gen/modf/51e4c6.wgsl.expected.spvasm | 4 + .../gen/modf/51e4c6.wgsl.expected.wgsl | 4 + .../gen/modf/546e09.wgsl.expected.hlsl | 4 + .../gen/modf/546e09.wgsl.expected.msl | 14 +- .../gen/modf/546e09.wgsl.expected.spvasm | 4 + .../gen/modf/546e09.wgsl.expected.wgsl | 4 + .../gen/modf/5e8476.wgsl.expected.hlsl | 4 + .../gen/modf/5e8476.wgsl.expected.msl | 14 +- .../gen/modf/5e8476.wgsl.expected.spvasm | 4 + .../gen/modf/5e8476.wgsl.expected.wgsl | 4 + test/intrinsics/gen/modf/684d46.wgsl | 45 + .../gen/modf/684d46.wgsl.expected.hlsl | 35 + .../gen/modf/684d46.wgsl.expected.msl | 38 + .../gen/modf/684d46.wgsl.expected.spvasm | 74 + .../gen/modf/684d46.wgsl.expected.wgsl | 19 + .../gen/modf/86441c.wgsl.expected.hlsl | 4 + .../gen/modf/86441c.wgsl.expected.msl | 14 +- .../gen/modf/86441c.wgsl.expected.spvasm | 4 + .../gen/modf/86441c.wgsl.expected.wgsl | 4 + .../gen/modf/955651.wgsl.expected.hlsl | 4 + .../gen/modf/955651.wgsl.expected.msl | 14 +- .../gen/modf/955651.wgsl.expected.spvasm | 4 + .../gen/modf/955651.wgsl.expected.wgsl | 4 + test/intrinsics/gen/modf/9b44a9.wgsl | 45 + .../gen/modf/9b44a9.wgsl.expected.hlsl | 35 + .../gen/modf/9b44a9.wgsl.expected.msl | 38 + .../gen/modf/9b44a9.wgsl.expected.spvasm | 74 + .../gen/modf/9b44a9.wgsl.expected.wgsl | 19 + .../gen/modf/9c6a91.wgsl.expected.hlsl | 4 + .../gen/modf/9c6a91.wgsl.expected.msl | 14 +- .../gen/modf/9c6a91.wgsl.expected.spvasm | 4 + .../gen/modf/9c6a91.wgsl.expected.wgsl | 4 + .../gen/modf/9cecfc.wgsl.expected.hlsl | 4 + .../gen/modf/9cecfc.wgsl.expected.msl | 14 +- .../gen/modf/9cecfc.wgsl.expected.spvasm | 4 + .../gen/modf/9cecfc.wgsl.expected.wgsl | 4 + .../gen/modf/a128ab.wgsl.expected.hlsl | 4 + .../gen/modf/a128ab.wgsl.expected.msl | 55 +- .../gen/modf/a128ab.wgsl.expected.spvasm | 4 + .../gen/modf/a128ab.wgsl.expected.wgsl | 4 + .../gen/modf/a54eca.wgsl.expected.hlsl | 4 + .../gen/modf/a54eca.wgsl.expected.msl | 14 +- .../gen/modf/a54eca.wgsl.expected.spvasm | 4 + .../gen/modf/a54eca.wgsl.expected.wgsl | 4 + .../gen/modf/bb9088.wgsl.expected.hlsl | 4 + .../gen/modf/bb9088.wgsl.expected.msl | 55 +- .../gen/modf/bb9088.wgsl.expected.spvasm | 4 + .../gen/modf/bb9088.wgsl.expected.wgsl | 4 + test/intrinsics/gen/modf/c87851.wgsl | 45 + .../gen/modf/c87851.wgsl.expected.hlsl | 35 + .../gen/modf/c87851.wgsl.expected.msl | 38 + .../gen/modf/c87851.wgsl.expected.spvasm | 76 + .../gen/modf/c87851.wgsl.expected.wgsl | 19 + .../gen/modf/d1d6f6.wgsl.expected.hlsl | 4 + .../gen/modf/d1d6f6.wgsl.expected.msl | 14 +- .../gen/modf/d1d6f6.wgsl.expected.spvasm | 4 + .../gen/modf/d1d6f6.wgsl.expected.wgsl | 4 + .../gen/modf/e38ae6.wgsl.expected.hlsl | 4 + .../gen/modf/e38ae6.wgsl.expected.msl | 55 +- .../gen/modf/e38ae6.wgsl.expected.spvasm | 4 + .../gen/modf/e38ae6.wgsl.expected.wgsl | 4 + .../gen/modf/e83560.wgsl.expected.hlsl | 4 + .../gen/modf/e83560.wgsl.expected.msl | 14 +- .../gen/modf/e83560.wgsl.expected.spvasm | 4 + .../gen/modf/e83560.wgsl.expected.wgsl | 4 + .../gen/modf/f90945.wgsl.expected.hlsl | 4 + .../gen/modf/f90945.wgsl.expected.msl | 14 +- .../gen/modf/f90945.wgsl.expected.spvasm | 4 + .../gen/modf/f90945.wgsl.expected.wgsl | 4 + test/intrinsics/intrinsics.wgsl.tmpl | 2 +- test/intrinsics/modf.wgsl | 5 +- test/intrinsics/modf.wgsl.expected.hlsl | 16 +- test/intrinsics/modf.wgsl.expected.msl | 16 +- test/intrinsics/modf.wgsl.expected.spvasm | 18 +- test/intrinsics/modf.wgsl.expected.wgsl | 5 +- tools/src/cmd/intrinsic-gen/gen/generate.go | 10 + tools/src/cmd/intrinsic-gen/gen/permutate.go | 4 + tools/src/cmd/intrinsic-gen/lexer/lexer.go | 2 +- .../src/cmd/intrinsic-gen/lexer/lexer_test.go | 3 + 236 files changed, 5861 insertions(+), 2658 deletions(-) create mode 100644 test/intrinsics/gen/frexp/12f1da.wgsl create mode 100644 test/intrinsics/gen/frexp/12f1da.wgsl.expected.hlsl create mode 100644 test/intrinsics/gen/frexp/12f1da.wgsl.expected.msl create mode 100644 test/intrinsics/gen/frexp/12f1da.wgsl.expected.spvasm create mode 100644 test/intrinsics/gen/frexp/12f1da.wgsl.expected.wgsl create mode 100644 test/intrinsics/gen/frexp/a0eb3b.wgsl create mode 100644 test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.hlsl create mode 100644 test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.msl create mode 100644 test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.spvasm create mode 100644 test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.wgsl create mode 100644 test/intrinsics/gen/frexp/d80367.wgsl create mode 100644 test/intrinsics/gen/frexp/d80367.wgsl.expected.hlsl create mode 100644 test/intrinsics/gen/frexp/d80367.wgsl.expected.msl create mode 100644 test/intrinsics/gen/frexp/d80367.wgsl.expected.spvasm create mode 100644 test/intrinsics/gen/frexp/d80367.wgsl.expected.wgsl create mode 100644 test/intrinsics/gen/frexp/db0637.wgsl create mode 100644 test/intrinsics/gen/frexp/db0637.wgsl.expected.hlsl create mode 100644 test/intrinsics/gen/frexp/db0637.wgsl.expected.msl create mode 100644 test/intrinsics/gen/frexp/db0637.wgsl.expected.spvasm create mode 100644 test/intrinsics/gen/frexp/db0637.wgsl.expected.wgsl create mode 100644 test/intrinsics/gen/modf/2199f1.wgsl create mode 100644 test/intrinsics/gen/modf/2199f1.wgsl.expected.hlsl create mode 100644 test/intrinsics/gen/modf/2199f1.wgsl.expected.msl create mode 100644 test/intrinsics/gen/modf/2199f1.wgsl.expected.spvasm create mode 100644 test/intrinsics/gen/modf/2199f1.wgsl.expected.wgsl create mode 100644 test/intrinsics/gen/modf/684d46.wgsl create mode 100644 test/intrinsics/gen/modf/684d46.wgsl.expected.hlsl create mode 100644 test/intrinsics/gen/modf/684d46.wgsl.expected.msl create mode 100644 test/intrinsics/gen/modf/684d46.wgsl.expected.spvasm create mode 100644 test/intrinsics/gen/modf/684d46.wgsl.expected.wgsl create mode 100644 test/intrinsics/gen/modf/9b44a9.wgsl create mode 100644 test/intrinsics/gen/modf/9b44a9.wgsl.expected.hlsl create mode 100644 test/intrinsics/gen/modf/9b44a9.wgsl.expected.msl create mode 100644 test/intrinsics/gen/modf/9b44a9.wgsl.expected.spvasm create mode 100644 test/intrinsics/gen/modf/9b44a9.wgsl.expected.wgsl create mode 100644 test/intrinsics/gen/modf/c87851.wgsl create mode 100644 test/intrinsics/gen/modf/c87851.wgsl.expected.hlsl create mode 100644 test/intrinsics/gen/modf/c87851.wgsl.expected.msl create mode 100644 test/intrinsics/gen/modf/c87851.wgsl.expected.spvasm create mode 100644 test/intrinsics/gen/modf/c87851.wgsl.expected.wgsl diff --git a/src/intrinsic_table.cc b/src/intrinsic_table.cc index 82c1debc2c..4f02b6d9f0 100644 --- a/src/intrinsic_table.cc +++ b/src/intrinsic_table.cc @@ -29,6 +29,7 @@ #include "src/sem/storage_texture_type.h" #include "src/utils/get_or_create.h" #include "src/utils/hash.h" +#include "src/utils/math.h" #include "src/utils/scoped_assignment.h" namespace tint { @@ -637,6 +638,91 @@ const sem::ExternalTexture* build_texture_external(MatchState& state) { return state.builder.create(); } +// Builtin types starting with a _ prefix cannot be declared in WGSL, so they +// can only be used as return types. Because of this, they must only match Any, +// which is used as the return type matcher. +bool match_modf_result(const sem::Type* ty) { + return ty->Is(); +} +bool match_modf_result_vec(const sem::Type* ty, Number& N) { + if (!ty->Is()) { + return false; + } + N = Number::any; + return true; +} +bool match_frexp_result(const sem::Type* ty) { + return ty->Is(); +} +bool match_frexp_result_vec(const sem::Type* ty, Number& N) { + if (!ty->Is()) { + return false; + } + N = Number::any; + return true; +} + +struct NameAndType { + std::string name; + sem::Type* type; +}; +const sem::Struct* build_struct( + MatchState& state, + std::string name, + std::initializer_list member_names_and_types) { + uint32_t offset = 0; + uint32_t max_align = 0; + sem::StructMemberList members; + for (auto& m : member_names_and_types) { + uint32_t align = m.type->Align(); + uint32_t size = m.type->Size(); + offset = utils::RoundUp(align, offset); + max_align = std::max(max_align, align); + members.emplace_back(state.builder.create( + /* declaration */ nullptr, + /* name */ state.builder.Sym(m.name), + /* type */ m.type, + /* index */ static_cast(members.size()), + /* offset */ offset, + /* align */ align, + /* size */ size)); + offset += size; + } + uint32_t size_without_padding = offset; + uint32_t size_with_padding = utils::RoundUp(max_align, offset); + return state.builder.create( + /* declaration */ nullptr, + /* name */ state.builder.Sym(name), + /* members */ members, + /* align */ max_align, + /* size */ size_with_padding, + /* size_no_padding */ size_without_padding); +} + +const sem::Struct* build_modf_result(MatchState& state) { + auto* f32 = state.builder.create(); + return build_struct(state, "_modf_result", {{"fract", f32}, {"whole", f32}}); +} +const sem::Struct* build_modf_result_vec(MatchState& state, Number& n) { + auto* vec_f32 = state.builder.create( + state.builder.create(), n.Value()); + return build_struct(state, "_modf_result_vec" + std::to_string(n.Value()), + {{"fract", vec_f32}, {"whole", vec_f32}}); +} +const sem::Struct* build_frexp_result(MatchState& state) { + auto* f32 = state.builder.create(); + auto* i32 = state.builder.create(); + return build_struct(state, "_frexp_result", {{"sig", f32}, {"exp", i32}}); +} +const sem::Struct* build_frexp_result_vec(MatchState& state, Number& n) { + auto* vec_f32 = state.builder.create( + state.builder.create(), n.Value()); + auto* vec_i32 = state.builder.create( + state.builder.create(), n.Value()); + return build_struct(state, "_frexp_result_vec" + std::to_string(n.Value()), + {{"sig", vec_f32}, {"exp", vec_i32}}); +} + /// ParameterInfo describes a parameter struct ParameterInfo { /// The parameter usage (parameter name in definition file) diff --git a/src/intrinsic_table.inl b/src/intrinsic_table.inl index d0bd47649f..343e156ba3 100644 --- a/src/intrinsic_table.inl +++ b/src/intrinsic_table.inl @@ -1006,8 +1006,132 @@ std::string TextureExternal::String(MatchState&) const { return "texture_external"; } +/// TypeMatcher for 'type _modf_result' +/// @see src/intrinsics.def:99:6 +class ModfResult : public TypeMatcher { + public: + /// Checks whether the given type matches the matcher rules. + /// Match may close open types and numbers in state. + /// @param state the MatchState + /// @param type the type to match + /// @returns the canonicalized type on match, otherwise nullptr + const sem::Type* Match(MatchState& state, + const sem::Type* type) const override; + /// @param state the MatchState + /// @return a string representation of the matcher. + std::string String(MatchState& state) const override; +}; + +const sem::Type* ModfResult::Match(MatchState& state, const sem::Type* ty) const { + if (!match_modf_result(ty)) { + return nullptr; + } + return build_modf_result(state); +} + +std::string ModfResult::String(MatchState&) const { + return "_modf_result"; +} + +/// TypeMatcher for 'type _modf_result_vec' +/// @see src/intrinsics.def:100:41 +class ModfResultVec : public TypeMatcher { + public: + /// Checks whether the given type matches the matcher rules. + /// Match may close open types and numbers in state. + /// @param state the MatchState + /// @param type the type to match + /// @returns the canonicalized type on match, otherwise nullptr + const sem::Type* Match(MatchState& state, + const sem::Type* type) const override; + /// @param state the MatchState + /// @return a string representation of the matcher. + std::string String(MatchState& state) const override; +}; + +const sem::Type* ModfResultVec::Match(MatchState& state, const sem::Type* ty) const { + Number N = Number::invalid; + if (!match_modf_result_vec(ty, N)) { + return nullptr; + } + N = state.Num(N); + if (!N.IsValid()) { + return nullptr; + } + return build_modf_result_vec(state, N); +} + +std::string ModfResultVec::String(MatchState& state) const { + const std::string N = state.NumName(); + std::stringstream ss; + ss << "_modf_result_vec" << N; + return ss.str(); +} + +/// TypeMatcher for 'type _frexp_result' +/// @see src/intrinsics.def:101:6 +class FrexpResult : public TypeMatcher { + public: + /// Checks whether the given type matches the matcher rules. + /// Match may close open types and numbers in state. + /// @param state the MatchState + /// @param type the type to match + /// @returns the canonicalized type on match, otherwise nullptr + const sem::Type* Match(MatchState& state, + const sem::Type* type) const override; + /// @param state the MatchState + /// @return a string representation of the matcher. + std::string String(MatchState& state) const override; +}; + +const sem::Type* FrexpResult::Match(MatchState& state, const sem::Type* ty) const { + if (!match_frexp_result(ty)) { + return nullptr; + } + return build_frexp_result(state); +} + +std::string FrexpResult::String(MatchState&) const { + return "_frexp_result"; +} + +/// TypeMatcher for 'type _frexp_result_vec' +/// @see src/intrinsics.def:102:42 +class FrexpResultVec : public TypeMatcher { + public: + /// Checks whether the given type matches the matcher rules. + /// Match may close open types and numbers in state. + /// @param state the MatchState + /// @param type the type to match + /// @returns the canonicalized type on match, otherwise nullptr + const sem::Type* Match(MatchState& state, + const sem::Type* type) const override; + /// @param state the MatchState + /// @return a string representation of the matcher. + std::string String(MatchState& state) const override; +}; + +const sem::Type* FrexpResultVec::Match(MatchState& state, const sem::Type* ty) const { + Number N = Number::invalid; + if (!match_frexp_result_vec(ty, N)) { + return nullptr; + } + N = state.Num(N); + if (!N.IsValid()) { + return nullptr; + } + return build_frexp_result_vec(state, N); +} + +std::string FrexpResultVec::String(MatchState& state) const { + const std::string N = state.NumName(); + std::stringstream ss; + ss << "_frexp_result_vec" << N; + return ss.str(); +} + /// TypeMatcher for 'match fiu32' -/// @see src/intrinsics.def:105:7 +/// @see src/intrinsics.def:110:7 class Fiu32 : public TypeMatcher { public: /// Checks whether the given type matches the matcher rules, and returns the @@ -1041,7 +1165,7 @@ std::string Fiu32::String(MatchState&) const { } /// TypeMatcher for 'match iu32' -/// @see src/intrinsics.def:106:7 +/// @see src/intrinsics.def:111:7 class Iu32 : public TypeMatcher { public: /// Checks whether the given type matches the matcher rules, and returns the @@ -1072,7 +1196,7 @@ std::string Iu32::String(MatchState&) const { } /// TypeMatcher for 'match scalar' -/// @see src/intrinsics.def:107:7 +/// @see src/intrinsics.def:112:7 class Scalar : public TypeMatcher { public: /// Checks whether the given type matches the matcher rules, and returns the @@ -1109,7 +1233,7 @@ std::string Scalar::String(MatchState&) const { } /// EnumMatcher for 'match f32_texel_format' -/// @see src/intrinsics.def:118:7 +/// @see src/intrinsics.def:123:7 class F32TexelFormat : public NumberMatcher { public: /// Checks whether the given number matches the enum matcher rules. @@ -1142,7 +1266,7 @@ std::string F32TexelFormat::String(MatchState&) const { } /// EnumMatcher for 'match i32_texel_format' -/// @see src/intrinsics.def:120:7 +/// @see src/intrinsics.def:125:7 class I32TexelFormat : public NumberMatcher { public: /// Checks whether the given number matches the enum matcher rules. @@ -1174,7 +1298,7 @@ std::string I32TexelFormat::String(MatchState&) const { } /// EnumMatcher for 'match u32_texel_format' -/// @see src/intrinsics.def:122:7 +/// @see src/intrinsics.def:127:7 class U32TexelFormat : public NumberMatcher { public: /// Checks whether the given number matches the enum matcher rules. @@ -1206,7 +1330,7 @@ std::string U32TexelFormat::String(MatchState&) const { } /// EnumMatcher for 'match read_or_write' -/// @see src/intrinsics.def:125:7 +/// @see src/intrinsics.def:130:7 class ReadOrWrite : public NumberMatcher { public: /// Checks whether the given number matches the enum matcher rules. @@ -1235,7 +1359,7 @@ std::string ReadOrWrite::String(MatchState&) const { } /// EnumMatcher for 'match function_private_workgroup' -/// @see src/intrinsics.def:127:7 +/// @see src/intrinsics.def:132:7 class FunctionPrivateWorkgroup : public NumberMatcher { public: /// Checks whether the given number matches the enum matcher rules. @@ -1265,7 +1389,7 @@ std::string FunctionPrivateWorkgroup::String(MatchState&) const { } /// EnumMatcher for 'match workgroup_or_storage' -/// @see src/intrinsics.def:128:7 +/// @see src/intrinsics.def:133:7 class WorkgroupOrStorage : public NumberMatcher { public: /// Checks whether the given number matches the enum matcher rules. @@ -1430,6 +1554,10 @@ class Matchers { TextureStorage2DArray TextureStorage2DArray_; TextureStorage3D TextureStorage3D_; TextureExternal TextureExternal_; + ModfResult ModfResult_; + ModfResultVec ModfResultVec_; + FrexpResult FrexpResult_; + FrexpResultVec FrexpResultVec_; Fiu32 Fiu32_; Iu32 Iu32_; Scalar Scalar_; @@ -1451,7 +1579,7 @@ class Matchers { ~Matchers(); /// The open-types, types, and type matchers - TypeMatcher const* const type[34] = { + TypeMatcher const* const type[38] = { /* [0] */ &open_type_0_, /* [1] */ &Bool_, /* [2] */ &F32_, @@ -1483,9 +1611,13 @@ class Matchers { /* [28] */ &TextureStorage2DArray_, /* [29] */ &TextureStorage3D_, /* [30] */ &TextureExternal_, - /* [31] */ &Fiu32_, - /* [32] */ &Iu32_, - /* [33] */ &Scalar_, + /* [31] */ &ModfResult_, + /* [32] */ &ModfResultVec_, + /* [33] */ &FrexpResult_, + /* [34] */ &FrexpResultVec_, + /* [35] */ &Fiu32_, + /* [36] */ &Iu32_, + /* [37] */ &Scalar_, }; /// The open-numbers, and number matchers @@ -1510,19 +1642,19 @@ Matchers::Matchers() = default; Matchers::~Matchers() = default; constexpr MatcherIndex kMatcherIndices[] = { - /* [0] */ 29, - /* [1] */ 5, + /* [0] */ 27, + /* [1] */ 3, /* [2] */ 10, /* [3] */ 1, /* [4] */ 8, /* [5] */ 0, - /* [6] */ 3, + /* [6] */ 2, /* [7] */ 2, /* [8] */ 10, /* [9] */ 1, /* [10] */ 8, /* [11] */ 0, - /* [12] */ 2, + /* [12] */ 3, /* [13] */ 2, /* [14] */ 10, /* [15] */ 0, @@ -1536,54 +1668,54 @@ constexpr MatcherIndex kMatcherIndices[] = { /* [23] */ 0, /* [24] */ 9, /* [25] */ 0, - /* [26] */ 1, + /* [26] */ 0, /* [27] */ 2, - /* [28] */ 9, + /* [28] */ 10, /* [29] */ 0, - /* [30] */ 0, - /* [31] */ 2, + /* [30] */ 3, + /* [31] */ 1, /* [32] */ 10, /* [33] */ 0, - /* [34] */ 3, + /* [34] */ 2, /* [35] */ 1, - /* [36] */ 10, + /* [36] */ 9, /* [37] */ 0, - /* [38] */ 2, - /* [39] */ 1, + /* [38] */ 1, + /* [39] */ 2, /* [40] */ 9, /* [41] */ 1, /* [42] */ 0, /* [43] */ 2, - /* [44] */ 8, + /* [44] */ 28, /* [45] */ 0, - /* [46] */ 0, - /* [47] */ 28, + /* [46] */ 1, + /* [47] */ 29, /* [48] */ 0, /* [49] */ 1, - /* [50] */ 29, + /* [50] */ 27, /* [51] */ 0, /* [52] */ 1, - /* [53] */ 27, - /* [54] */ 0, - /* [55] */ 1, - /* [56] */ 29, - /* [57] */ 5, - /* [58] */ 11, - /* [59] */ 26, - /* [60] */ 0, - /* [61] */ 1, - /* [62] */ 28, - /* [63] */ 5, - /* [64] */ 11, - /* [65] */ 8, - /* [66] */ 0, - /* [67] */ 1, - /* [68] */ 27, + /* [53] */ 29, + /* [54] */ 5, + /* [55] */ 11, + /* [56] */ 26, + /* [57] */ 0, + /* [58] */ 1, + /* [59] */ 28, + /* [60] */ 5, + /* [61] */ 11, + /* [62] */ 8, + /* [63] */ 0, + /* [64] */ 0, + /* [65] */ 27, + /* [66] */ 5, + /* [67] */ 11, + /* [68] */ 26, /* [69] */ 5, /* [70] */ 11, - /* [71] */ 26, - /* [72] */ 5, - /* [73] */ 11, + /* [71] */ 8, + /* [72] */ 0, + /* [73] */ 1, /* [74] */ 29, /* [75] */ 4, /* [76] */ 11, @@ -1608,90 +1740,96 @@ constexpr MatcherIndex kMatcherIndices[] = { /* [95] */ 26, /* [96] */ 3, /* [97] */ 11, - /* [98] */ 28, - /* [99] */ 5, + /* [98] */ 29, + /* [99] */ 3, /* [100] */ 10, - /* [101] */ 27, + /* [101] */ 29, /* [102] */ 5, /* [103] */ 10, - /* [104] */ 26, + /* [104] */ 28, /* [105] */ 5, /* [106] */ 10, - /* [107] */ 29, - /* [108] */ 4, + /* [107] */ 27, + /* [108] */ 5, /* [109] */ 10, - /* [110] */ 28, - /* [111] */ 4, + /* [110] */ 26, + /* [111] */ 5, /* [112] */ 10, - /* [113] */ 27, + /* [113] */ 29, /* [114] */ 4, /* [115] */ 10, - /* [116] */ 26, + /* [116] */ 28, /* [117] */ 4, /* [118] */ 10, - /* [119] */ 29, - /* [120] */ 3, + /* [119] */ 27, + /* [120] */ 4, /* [121] */ 10, /* [122] */ 26, - /* [123] */ 3, + /* [123] */ 4, /* [124] */ 10, - /* [125] */ 27, + /* [125] */ 26, /* [126] */ 3, /* [127] */ 10, /* [128] */ 28, /* [129] */ 3, /* [130] */ 10, - /* [131] */ 16, - /* [132] */ 2, + /* [131] */ 5, + /* [132] */ 3, /* [133] */ 7, /* [134] */ 2, /* [135] */ 5, - /* [136] */ 3, + /* [136] */ 2, /* [137] */ 6, /* [138] */ 3, /* [139] */ 7, /* [140] */ 3, - /* [141] */ 5, + /* [141] */ 6, /* [142] */ 2, - /* [143] */ 7, - /* [144] */ 4, - /* [145] */ 6, - /* [146] */ 2, - /* [147] */ 15, - /* [148] */ 0, - /* [149] */ 7, + /* [143] */ 32, + /* [144] */ 0, + /* [145] */ 7, + /* [146] */ 4, + /* [147] */ 20, + /* [148] */ 2, + /* [149] */ 15, /* [150] */ 0, - /* [151] */ 16, + /* [151] */ 7, /* [152] */ 0, - /* [153] */ 20, - /* [154] */ 2, - /* [155] */ 17, + /* [153] */ 34, + /* [154] */ 0, + /* [155] */ 16, /* [156] */ 0, - /* [157] */ 19, - /* [158] */ 2, + /* [157] */ 17, + /* [158] */ 0, /* [159] */ 18, - /* [160] */ 0, + /* [160] */ 2, /* [161] */ 18, - /* [162] */ 2, + /* [162] */ 0, /* [163] */ 21, /* [164] */ 0, /* [165] */ 17, /* [166] */ 2, - /* [167] */ 19, - /* [168] */ 0, - /* [169] */ 20, - /* [170] */ 0, - /* [171] */ 15, - /* [172] */ 2, - /* [173] */ 5, + /* [167] */ 16, + /* [168] */ 2, + /* [169] */ 19, + /* [170] */ 2, + /* [171] */ 19, + /* [172] */ 0, + /* [173] */ 20, /* [174] */ 0, - /* [175] */ 13, - /* [176] */ 25, - /* [177] */ 24, - /* [178] */ 23, - /* [179] */ 22, - /* [180] */ 14, - /* [181] */ 30, + /* [175] */ 15, + /* [176] */ 2, + /* [177] */ 5, + /* [178] */ 0, + /* [179] */ 13, + /* [180] */ 25, + /* [181] */ 24, + /* [182] */ 23, + /* [183] */ 22, + /* [184] */ 14, + /* [185] */ 30, + /* [186] */ 31, + /* [187] */ 33, }; // Assert that the MatcherIndex is big enough to index all the matchers, plus @@ -1709,42 +1847,42 @@ constexpr ParameterInfo kParameters[] = { { /* [1] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [2] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [3] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [4] */ /* usage */ ParameterUsage::kDdx, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [5] */ /* usage */ ParameterUsage::kDdy, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [6] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [7] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[165], + /* matcher indices */ &kMatcherIndices[159], }, { /* [8] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [9] */ @@ -1753,78 +1891,78 @@ constexpr ParameterInfo kParameters[] = { }, { /* [10] */ - /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kDdx, + /* matcher indices */ &kMatcherIndices[141], }, { /* [11] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kDdy, + /* matcher indices */ &kMatcherIndices[141], }, { /* [12] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[137], }, { /* [13] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[182], }, { /* [14] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[184], }, { /* [15] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [16] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [17] */ /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [18] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [19] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[161], + /* matcher indices */ &kMatcherIndices[182], }, { /* [20] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[184], }, { /* [21] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[135], }, { /* [22] */ - /* usage */ ParameterUsage::kDdx, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [23] */ - /* usage */ ParameterUsage::kDdy, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kDepthRef, + /* matcher indices */ &kMatcherIndices[6], }, { /* [24] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[137], + /* matcher indices */ &kMatcherIndices[131], }, { /* [25] */ @@ -1834,37 +1972,37 @@ constexpr ParameterInfo kParameters[] = { { /* [26] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [27] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [28] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [29] */ /* usage */ ParameterUsage::kBias, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [30] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [31] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[147], }, { /* [32] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[179], }, { /* [33] */ @@ -1874,77 +2012,77 @@ constexpr ParameterInfo kParameters[] = { { /* [34] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [35] */ - /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kDdx, + /* matcher indices */ &kMatcherIndices[141], }, { /* [36] */ - /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* usage */ ParameterUsage::kDdy, + /* matcher indices */ &kMatcherIndices[141], }, { /* [37] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[182], }, { /* [38] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [39] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [40] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [41] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [42] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [43] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[153], + /* matcher indices */ &kMatcherIndices[165], }, { /* [44] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [45] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[135], }, { /* [46] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [47] */ /* usage */ ParameterUsage::kDdx, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[135], }, { /* [48] */ /* usage */ ParameterUsage::kDdy, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[135], }, { /* [49] */ @@ -1954,67 +2092,67 @@ constexpr ParameterInfo kParameters[] = { { /* [50] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [51] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [52] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [53] */ - /* usage */ ParameterUsage::kDdx, - /* matcher indices */ &kMatcherIndices[141], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[6], }, { /* [54] */ - /* usage */ ParameterUsage::kDdy, - /* matcher indices */ &kMatcherIndices[141], + /* usage */ ParameterUsage::kOffset, + /* matcher indices */ &kMatcherIndices[131], }, { /* [55] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[131], + /* matcher indices */ &kMatcherIndices[167], }, { /* [56] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [57] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [58] */ /* usage */ ParameterUsage::kDdx, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [59] */ /* usage */ ParameterUsage::kDdy, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [60] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [61] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[159], }, { /* [62] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[179], }, { /* [63] */ @@ -2023,63 +2161,63 @@ constexpr ParameterInfo kParameters[] = { }, { /* [64] */ - /* usage */ ParameterUsage::kArrayIndex, + /* usage */ ParameterUsage::kLevel, /* matcher indices */ &kMatcherIndices[6], }, { /* [65] */ - /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kOffset, + /* matcher indices */ &kMatcherIndices[137], }, { /* [66] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[131], + /* matcher indices */ &kMatcherIndices[167], }, { /* [67] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [68] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [69] */ /* usage */ ParameterUsage::kBias, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [70] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [71] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[182], }, { /* [72] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [73] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [74] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [75] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [76] */ @@ -2089,42 +2227,42 @@ constexpr ParameterInfo kParameters[] = { { /* [77] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [78] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [79] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [80] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [81] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[161], + /* matcher indices */ &kMatcherIndices[159], }, { /* [82] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [83] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [84] */ /* usage */ ParameterUsage::kBias, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [85] */ @@ -2134,162 +2272,162 @@ constexpr ParameterInfo kParameters[] = { { /* [86] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[153], + /* matcher indices */ &kMatcherIndices[147], }, { /* [87] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [88] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [89] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [90] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [91] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[153], + /* matcher indices */ &kMatcherIndices[147], }, { /* [92] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [93] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [94] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [95] */ /* usage */ ParameterUsage::kBias, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [96] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[157], + /* matcher indices */ &kMatcherIndices[183], }, { /* [97] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [98] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[135], }, { /* [99] */ - /* usage */ ParameterUsage::kDdx, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [100] */ - /* usage */ ParameterUsage::kDdy, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kOffset, + /* matcher indices */ &kMatcherIndices[131], }, { /* [101] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[183], }, { /* [102] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[184], }, { /* [103] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [104] */ /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [105] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [106] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[161], + /* matcher indices */ &kMatcherIndices[182], }, { /* [107] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[184], }, { /* [108] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[135], }, { /* [109] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [110] */ - /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[137], + /* usage */ ParameterUsage::kDepthRef, + /* matcher indices */ &kMatcherIndices[6], }, { /* [111] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[165], }, { /* [112] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [113] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [114] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [115] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [116] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[131], + /* matcher indices */ &kMatcherIndices[180], }, { /* [117] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[184], }, { /* [118] */ @@ -2298,48 +2436,48 @@ constexpr ParameterInfo kParameters[] = { }, { /* [119] */ - /* usage */ ParameterUsage::kDdx, - /* matcher indices */ &kMatcherIndices[141], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [120] */ - /* usage */ ParameterUsage::kDdy, - /* matcher indices */ &kMatcherIndices[141], + /* usage */ ParameterUsage::kDepthRef, + /* matcher indices */ &kMatcherIndices[6], }, { /* [121] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[176], + /* matcher indices */ &kMatcherIndices[180], }, { /* [122] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[184], }, { /* [123] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [124] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [125] */ /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [126] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[165], + /* matcher indices */ &kMatcherIndices[169], }, { /* [127] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [128] */ @@ -2348,283 +2486,283 @@ constexpr ParameterInfo kParameters[] = { }, { /* [129] */ - /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kDdx, + /* matcher indices */ &kMatcherIndices[141], }, { /* [130] */ - /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* usage */ ParameterUsage::kDdy, + /* matcher indices */ &kMatcherIndices[141], }, { /* [131] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[183], }, { /* [132] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[184], }, { /* [133] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [134] */ /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [135] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [136] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[182], }, { /* [137] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [138] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [139] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [140] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [141] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[176], + /* matcher indices */ &kMatcherIndices[180], }, { /* [142] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[179], }, { /* [143] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [144] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [145] */ - /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [146] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[161], + /* matcher indices */ &kMatcherIndices[165], }, { /* [147] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [148] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[135], }, { /* [149] */ - /* usage */ ParameterUsage::kDdx, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [150] */ - /* usage */ ParameterUsage::kDdy, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kBias, + /* matcher indices */ &kMatcherIndices[6], }, { /* [151] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[176], + /* matcher indices */ &kMatcherIndices[159], }, { /* [152] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [153] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [154] */ - /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kDdx, + /* matcher indices */ &kMatcherIndices[141], }, { /* [155] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kDdy, + /* matcher indices */ &kMatcherIndices[141], }, { /* [156] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[167], }, { /* [157] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[179], }, { /* [158] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [159] */ - /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kDdx, + /* matcher indices */ &kMatcherIndices[135], }, { /* [160] */ - /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kDdy, + /* matcher indices */ &kMatcherIndices[135], }, { /* [161] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[165], + /* matcher indices */ &kMatcherIndices[182], }, { /* [162] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[184], }, { /* [163] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [164] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [165] */ - /* usage */ ParameterUsage::kBias, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kDepthRef, + /* matcher indices */ &kMatcherIndices[6], }, { /* [166] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[131], + /* matcher indices */ &kMatcherIndices[167], }, { /* [167] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [168] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [169] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [170] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [171] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[161], + /* matcher indices */ &kMatcherIndices[157], }, { /* [172] */ - /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], }, { /* [173] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [174] */ - /* usage */ ParameterUsage::kBias, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [175] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[177], + /* matcher indices */ &kMatcherIndices[181], }, { /* [176] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[179], }, { /* [177] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [178] */ - /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [179] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[177], + /* matcher indices */ &kMatcherIndices[182], }, { /* [180] */ - /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], }, { /* [181] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [182] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [183] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[181], }, { /* [184] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[184], }, { /* [185] */ @@ -2634,102 +2772,102 @@ constexpr ParameterInfo kParameters[] = { { /* [186] */ /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [187] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[98], + /* matcher indices */ &kMatcherIndices[104], }, { /* [188] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [189] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [190] */ /* usage */ ParameterUsage::kValue, - /* matcher indices */ &kMatcherIndices[143], + /* matcher indices */ &kMatcherIndices[145], }, { /* [191] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[183], }, { /* [192] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[184], }, { /* [193] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [194] */ /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [195] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[177], + /* matcher indices */ &kMatcherIndices[183], }, { /* [196] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[180], + /* matcher indices */ &kMatcherIndices[184], }, { /* [197] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[135], }, { /* [198] */ /* usage */ ParameterUsage::kDepthRef, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [199] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[157], + /* matcher indices */ &kMatcherIndices[169], }, { /* [200] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [201] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [202] */ /* usage */ ParameterUsage::kBias, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [203] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[110], + /* matcher indices */ &kMatcherIndices[116], }, { /* [204] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [205] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [206] */ @@ -2739,82 +2877,82 @@ constexpr ParameterInfo kParameters[] = { { /* [207] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[131], + /* matcher indices */ &kMatcherIndices[167], }, { /* [208] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [209] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [210] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [211] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[157], + /* matcher indices */ &kMatcherIndices[169], }, { /* [212] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [213] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [214] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [215] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[155], + /* matcher indices */ &kMatcherIndices[159], }, { /* [216] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* usage */ ParameterUsage::kSampler, + /* matcher indices */ &kMatcherIndices[179], }, { /* [217] */ - /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[141], }, { /* [218] */ - /* usage */ ParameterUsage::kLevel, + /* usage */ ParameterUsage::kBias, /* matcher indices */ &kMatcherIndices[6], }, { /* [219] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[183], }, { /* [220] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [221] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [222] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [223] */ @@ -2824,12 +2962,12 @@ constexpr ParameterInfo kParameters[] = { { /* [224] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [225] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [226] */ @@ -2839,122 +2977,122 @@ constexpr ParameterInfo kParameters[] = { { /* [227] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[161], + /* matcher indices */ &kMatcherIndices[159], }, { /* [228] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [229] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [230] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [231] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[131], + /* matcher indices */ &kMatcherIndices[167], }, { /* [232] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [233] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [234] */ /* usage */ ParameterUsage::kBias, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [235] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[176], + /* matcher indices */ &kMatcherIndices[180], }, { /* [236] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [237] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [238] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [239] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[182], }, { /* [240] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [241] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [242] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [243] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[183], }, { /* [244] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [245] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [246] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [247] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[153], + /* matcher indices */ &kMatcherIndices[147], }, { /* [248] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [249] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [250] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [251] */ @@ -2964,72 +3102,72 @@ constexpr ParameterInfo kParameters[] = { { /* [252] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [253] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [254] */ /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [255] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[131], + /* matcher indices */ &kMatcherIndices[167], }, { /* [256] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [257] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [258] */ /* usage */ ParameterUsage::kOffset, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [259] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[181], }, { /* [260] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* usage */ ParameterUsage::kSampler, + /* matcher indices */ &kMatcherIndices[184], }, { /* [261] */ - /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[141], }, { /* [262] */ - /* usage */ ParameterUsage::kLevel, + /* usage */ ParameterUsage::kDepthRef, /* matcher indices */ &kMatcherIndices[6], }, { /* [263] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[161], + /* matcher indices */ &kMatcherIndices[159], }, { /* [264] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [265] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [266] */ @@ -3038,58 +3176,58 @@ constexpr ParameterInfo kParameters[] = { }, { /* [267] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[183], }, { /* [268] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], }, { /* [269] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [270] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[171], + /* matcher indices */ &kMatcherIndices[113], }, { /* [271] */ - /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[137], }, { /* [272] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kValue, + /* matcher indices */ &kMatcherIndices[139], }, { /* [273] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[181], + /* matcher indices */ &kMatcherIndices[185], }, { /* [274] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [275] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [276] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[122], + /* matcher indices */ &kMatcherIndices[125], }, { /* [277] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [278] */ @@ -3099,42 +3237,42 @@ constexpr ParameterInfo kParameters[] = { { /* [279] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [280] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [281] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [282] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [283] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [284] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [285] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[125], + /* matcher indices */ &kMatcherIndices[0], }, { /* [286] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [287] */ @@ -3144,22 +3282,22 @@ constexpr ParameterInfo kParameters[] = { { /* [288] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [289] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [290] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [291] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[119], + /* matcher indices */ &kMatcherIndices[98], }, { /* [292] */ @@ -3174,12 +3312,12 @@ constexpr ParameterInfo kParameters[] = { { /* [294] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[116], + /* matcher indices */ &kMatcherIndices[122], }, { /* [295] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [296] */ @@ -3189,12 +3327,12 @@ constexpr ParameterInfo kParameters[] = { { /* [297] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[113], + /* matcher indices */ &kMatcherIndices[119], }, { /* [298] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [299] */ @@ -3204,37 +3342,37 @@ constexpr ParameterInfo kParameters[] = { { /* [300] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[107], + /* matcher indices */ &kMatcherIndices[110], }, { /* [301] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[137], + /* matcher indices */ &kMatcherIndices[1], }, { /* [302] */ /* usage */ ParameterUsage::kValue, - /* matcher indices */ &kMatcherIndices[139], + /* matcher indices */ &kMatcherIndices[145], }, { /* [303] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[101], + /* matcher indices */ &kMatcherIndices[107], }, { /* [304] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [305] */ /* usage */ ParameterUsage::kValue, - /* matcher indices */ &kMatcherIndices[143], + /* matcher indices */ &kMatcherIndices[145], }, { /* [306] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[0], + /* matcher indices */ &kMatcherIndices[101], }, { /* [307] */ @@ -3244,252 +3382,252 @@ constexpr ParameterInfo kParameters[] = { { /* [308] */ /* usage */ ParameterUsage::kValue, - /* matcher indices */ &kMatcherIndices[143], + /* matcher indices */ &kMatcherIndices[145], }, { /* [309] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[104], + /* matcher indices */ &kMatcherIndices[149], }, { /* [310] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [311] */ - /* usage */ ParameterUsage::kValue, - /* matcher indices */ &kMatcherIndices[143], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [312] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[131], + /* matcher indices */ &kMatcherIndices[155], }, { /* [313] */ - /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], }, { /* [314] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [315] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[151], + /* matcher indices */ &kMatcherIndices[175], }, { /* [316] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* usage */ ParameterUsage::kSampler, + /* matcher indices */ &kMatcherIndices[179], }, { /* [317] */ - /* usage */ ParameterUsage::kLevel, + /* usage */ ParameterUsage::kCoords, /* matcher indices */ &kMatcherIndices[6], }, { /* [318] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[159], + /* matcher indices */ &kMatcherIndices[167], }, { /* [319] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[137], + /* usage */ ParameterUsage::kSampler, + /* matcher indices */ &kMatcherIndices[179], }, { /* [320] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[135], }, { /* [321] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[163], + /* matcher indices */ &kMatcherIndices[161], }, { /* [322] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[137], }, { /* [323] */ - /* usage */ ParameterUsage::kSampleIndex, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [324] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[163], }, { /* [325] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [326] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kSampleIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [327] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[147], + /* matcher indices */ &kMatcherIndices[159], }, { /* [328] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kSampler, + /* matcher indices */ &kMatcherIndices[179], }, { /* [329] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[141], }, { /* [330] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[161], + /* matcher indices */ &kMatcherIndices[169], }, { /* [331] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [332] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [333] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[157], + /* matcher indices */ &kMatcherIndices[181], }, { /* [334] */ /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* matcher indices */ &kMatcherIndices[179], }, { /* [335] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [336] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[177], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], }, { /* [337] */ - /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], }, { /* [338] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[145], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], }, { /* [339] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[62], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[6], }, { /* [340] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[6], }, { /* [341] */ - /* usage */ ParameterUsage::kArrayIndex, + /* usage */ ParameterUsage::kNone, /* matcher indices */ &kMatcherIndices[6], }, { /* [342] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[59], }, { /* [343] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], }, { /* [344] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [345] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[62], }, { /* [346] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[62], }, { /* [347] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[71], }, { /* [348] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[62], }, { /* [349] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[62], }, { /* [350] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[3], }, { /* [351] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[6], }, { /* [352] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[6], }, { /* [353] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[6], }, { /* [354] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[4], }, { /* [355] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[4], }, { /* [356] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[4], }, { /* [357] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[14], + /* matcher indices */ &kMatcherIndices[5], }, { /* [358] */ @@ -3499,172 +3637,172 @@ constexpr ParameterInfo kParameters[] = { { /* [359] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[3], }, { /* [360] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[77], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[5], }, { /* [361] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[5], }, { /* [362] */ - /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[5], }, { /* [363] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[14], }, { /* [364] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[5], }, { /* [365] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[65], + /* matcher indices */ &kMatcherIndices[5], }, { /* [366] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[4], }, { /* [367] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[4], }, { /* [368] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [369] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[62], }, { /* [370] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[62], }, { /* [371] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[3], + /* matcher indices */ &kMatcherIndices[62], }, { /* [372] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[77], }, { /* [373] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], }, { /* [374] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[3], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [375] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[89], }, { /* [376] */ - /* usage */ ParameterUsage::kSampler, - /* matcher indices */ &kMatcherIndices[175], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], }, { /* [377] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[141], + /* usage */ ParameterUsage::kArrayIndex, + /* matcher indices */ &kMatcherIndices[1], }, { /* [378] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[89], + /* matcher indices */ &kMatcherIndices[183], }, { /* [379] */ + /* usage */ ParameterUsage::kSampler, + /* matcher indices */ &kMatcherIndices[179], + }, + { + /* [380] */ /* usage */ ParameterUsage::kCoords, /* matcher indices */ &kMatcherIndices[135], }, - { - /* [380] */ - /* usage */ ParameterUsage::kArrayIndex, - /* matcher indices */ &kMatcherIndices[6], - }, { /* [381] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[95], - }, - { - /* [382] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[6], - }, - { - /* [383] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], - }, - { - /* [384] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], - }, - { - /* [385] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], - }, - { - /* [386] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], - }, - { - /* [387] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[86], - }, - { - /* [388] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[137], - }, - { - /* [389] */ - /* usage */ ParameterUsage::kTexture, /* matcher indices */ &kMatcherIndices[83], }, { - /* [390] */ + /* [382] */ /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[1], + }, + { + /* [383] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[80], + }, + { + /* [384] */ + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], + }, + { + /* [385] */ + /* usage */ ParameterUsage::kNone, /* matcher indices */ &kMatcherIndices[6], }, { - /* [391] */ + /* [386] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], + }, + { + /* [387] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], + }, + { + /* [388] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], + }, + { + /* [389] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], + }, + { + /* [390] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], + }, + { + /* [391] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[86], }, { /* [392] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[137], }, { /* [393] */ @@ -3674,207 +3812,207 @@ constexpr ParameterInfo kParameters[] = { { /* [394] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [395] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [396] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[145], + /* matcher indices */ &kMatcherIndices[141], }, { /* [397] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [398] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[2], }, { /* [399] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], - }, - { - /* [400] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], - }, - { - /* [401] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], - }, - { - /* [402] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[8], - }, - { - /* [403] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], - }, - { - /* [404] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[36], - }, - { - /* [405] */ /* usage */ ParameterUsage::kTexture, /* matcher indices */ &kMatcherIndices[74], }, { - /* [406] */ + /* [400] */ /* usage */ ParameterUsage::kCoords, /* matcher indices */ &kMatcherIndices[137], }, + { + /* [401] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[6], + }, + { + /* [402] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[32], + }, + { + /* [403] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[62], + }, + { + /* [404] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[62], + }, + { + /* [405] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[5], + }, + { + /* [406] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[5], + }, { /* [407] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[71], + /* matcher indices */ &kMatcherIndices[68], }, { /* [408] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [409] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[171], }, { /* [410] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [411] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[80], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], }, { /* [412] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], }, { /* [413] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[6], }, { /* [414] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[6], }, { /* [415] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[65], }, { /* [416] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[131], }, { /* [417] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[62], }, { /* [418] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[62], }, { /* [419] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[5], }, { /* [420] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[5], }, { /* [421] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[6], }, { /* [422] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[6], }, { /* [423] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[14], + /* matcher indices */ &kMatcherIndices[4], }, { /* [424] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[4], }, { /* [425] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[68], + /* matcher indices */ &kMatcherIndices[53], }, { /* [426] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[137], }, { /* [427] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[6], }, { /* [428] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[6], }, { /* [429] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[4], }, { /* [430] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[4], }, { /* [431] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[56], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[14], }, { /* [432] */ - /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[137], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[5], }, { /* [433] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[181], + /* matcher indices */ &kMatcherIndices[185], }, { /* [434] */ /* usage */ ParameterUsage::kCoords, - /* matcher indices */ &kMatcherIndices[135], + /* matcher indices */ &kMatcherIndices[131], }, { /* [435] */ @@ -3888,13 +4026,13 @@ constexpr ParameterInfo kParameters[] = { }, { /* [437] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[151], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[14], }, { /* [438] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[5], }, { /* [439] */ @@ -3909,12 +4047,12 @@ constexpr ParameterInfo kParameters[] = { { /* [441] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[4], }, { /* [442] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[4], }, { /* [443] */ @@ -3929,12 +4067,12 @@ constexpr ParameterInfo kParameters[] = { { /* [445] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [446] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[8], }, { /* [447] */ @@ -3968,18 +4106,18 @@ constexpr ParameterInfo kParameters[] = { }, { /* [453] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[147], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], }, { /* [454] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[62], }, { /* [455] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[14], + /* matcher indices */ &kMatcherIndices[6], }, { /* [456] */ @@ -3988,273 +4126,273 @@ constexpr ParameterInfo kParameters[] = { }, { /* [457] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[173], }, { /* [458] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { /* [459] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* matcher indices */ &kMatcherIndices[180], }, { /* [460] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [461] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[155], + /* matcher indices */ &kMatcherIndices[149], }, { /* [462] */ /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], + /* matcher indices */ &kMatcherIndices[1], }, { /* [463] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], - }, - { - /* [464] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], - }, - { - /* [465] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[159], - }, - { - /* [466] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], - }, - { - /* [467] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], - }, - { - /* [468] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[32], - }, - { - /* [469] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[167], - }, - { - /* [470] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], - }, - { - /* [471] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[176], - }, - { - /* [472] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], - }, - { - /* [473] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[169], - }, - { - /* [474] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], - }, - { - /* [475] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[177], - }, - { - /* [476] */ - /* usage */ ParameterUsage::kLevel, - /* matcher indices */ &kMatcherIndices[6], - }, - { - /* [477] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], - }, - { - /* [478] */ - /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[2], - }, - { - /* [479] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[159], - }, - { - /* [480] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], - }, - { - /* [481] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], - }, - { - /* [482] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[177], - }, - { - /* [483] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[163], - }, - { - /* [484] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[176], - }, - { - /* [485] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[169], - }, - { - /* [486] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[59], - }, - { - /* [487] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[53], - }, - { - /* [488] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[47], - }, - { - /* [489] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[50], - }, - { - /* [490] */ /* usage */ ParameterUsage::kTexture, /* matcher indices */ &kMatcherIndices[181], }, { - /* [491] */ + /* [464] */ + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], + }, + { + /* [465] */ /* usage */ ParameterUsage::kTexture, /* matcher indices */ &kMatcherIndices[155], }, { - /* [492] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[169], + /* [466] */ + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { - /* [493] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* [467] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[6], }, { - /* [494] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[176], + /* [468] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[28], }, { - /* [495] */ + /* [469] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[47], + /* matcher indices */ &kMatcherIndices[157], }, { - /* [496] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[147], + /* [470] */ + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { - /* [497] */ + /* [471] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[151], + /* matcher indices */ &kMatcherIndices[182], }, { - /* [498] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[155], + /* [472] */ + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { - /* [499] */ + /* [473] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[159], + /* matcher indices */ &kMatcherIndices[161], }, { - /* [500] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[167], + /* [474] */ + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { - /* [501] */ + /* [475] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[169], + /* matcher indices */ &kMatcherIndices[183], }, { - /* [502] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[179], + /* [476] */ + /* usage */ ParameterUsage::kLevel, + /* matcher indices */ &kMatcherIndices[1], }, { - /* [503] */ + /* [477] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[178], + /* matcher indices */ &kMatcherIndices[95], }, { - /* [504] */ - /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[177], + /* [478] */ + /* usage */ ParameterUsage::kCoords, + /* matcher indices */ &kMatcherIndices[1], }, { - /* [505] */ + /* [479] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[176], + /* matcher indices */ &kMatcherIndices[157], }, { - /* [506] */ + /* [480] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[173], + }, + { + /* [481] */ /* usage */ ParameterUsage::kTexture, /* matcher indices */ &kMatcherIndices[163], }, { - /* [507] */ + /* [482] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[167], + /* matcher indices */ &kMatcherIndices[183], }, { - /* [508] */ + /* [483] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[171], + }, + { + /* [484] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[182], + }, + { + /* [485] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[161], + }, + { + /* [486] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[181], + }, + { + /* [487] */ /* usage */ ParameterUsage::kTexture, /* matcher indices */ &kMatcherIndices[155], }, + { + /* [488] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[180], + }, + { + /* [489] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[149], + }, + { + /* [490] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[56], + }, + { + /* [491] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[50], + }, + { + /* [492] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[44], + }, + { + /* [493] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[47], + }, + { + /* [494] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[185], + }, + { + /* [495] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[157], + }, + { + /* [496] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[173], + }, + { + /* [497] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[182], + }, + { + /* [498] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[180], + }, + { + /* [499] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[44], + }, + { + /* [500] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[149], + }, + { + /* [501] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[155], + }, + { + /* [502] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[157], + }, + { + /* [503] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[161], + }, + { + /* [504] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[171], + }, + { + /* [505] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[173], + }, + { + /* [506] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[183], + }, + { + /* [507] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[182], + }, + { + /* [508] */ + /* usage */ ParameterUsage::kTexture, + /* matcher indices */ &kMatcherIndices[181], + }, { /* [509] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[151], + /* matcher indices */ &kMatcherIndices[180], }, { /* [510] */ /* usage */ ParameterUsage::kTexture, - /* matcher indices */ &kMatcherIndices[147], + /* matcher indices */ &kMatcherIndices[163], }, { /* [511] */ @@ -4284,92 +4422,92 @@ constexpr ParameterInfo kParameters[] = { { /* [516] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [517] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [518] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[24], + /* matcher indices */ &kMatcherIndices[36], }, { /* [519] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [520] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [521] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [522] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [523] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [524] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [525] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [526] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [527] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [528] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [529] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [530] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [531] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [532] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [533] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[62], }, { /* [534] */ @@ -4389,341 +4527,361 @@ constexpr ParameterInfo kParameters[] = { { /* [537] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [538] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [539] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[141], + /* matcher indices */ &kMatcherIndices[135], }, { /* [540] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [541] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [542] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [543] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [544] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [545] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [546] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [547] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [548] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [549] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [550] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [551] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [552] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [553] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [554] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [555] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [556] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [557] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[4], }, { /* [558] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[6], }, { /* [559] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[5], }, { /* [560] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [561] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [562] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [563] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [564] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [565] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [566] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [567] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [568] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [569] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [570] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [571] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [572] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [573] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [574] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [575] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [576] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [577] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [578] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [579] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [580] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [581] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [582] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [583] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [584] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[28], + /* matcher indices */ &kMatcherIndices[4], }, { /* [585] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[6], }, { /* [586] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[5], + /* matcher indices */ &kMatcherIndices[4], }, { /* [587] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[6], }, { /* [588] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[24], }, { /* [589] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[62], }, { /* [590] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[5], }, { /* [591] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [592] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [593] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [594] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [595] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[4], }, { /* [596] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[6], }, { /* [597] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[14], + /* matcher indices */ &kMatcherIndices[4], }, { /* [598] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[19], + /* matcher indices */ &kMatcherIndices[6], }, { /* [599] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[65], + /* matcher indices */ &kMatcherIndices[4], }, { /* [600] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[65], + /* matcher indices */ &kMatcherIndices[6], }, { /* [601] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[10], + /* matcher indices */ &kMatcherIndices[14], }, { /* [602] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[7], + /* matcher indices */ &kMatcherIndices[19], }, { /* [603] */ /* usage */ ParameterUsage::kNone, - /* matcher indices */ &kMatcherIndices[44], + /* matcher indices */ &kMatcherIndices[71], }, { /* [604] */ /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[71], + }, + { + /* [605] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[4], + }, + { + /* [606] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[6], + }, + { + /* [607] */ + /* usage */ ParameterUsage::kNone, + /* matcher indices */ &kMatcherIndices[62], + }, + { + /* [608] */ + /* usage */ ParameterUsage::kNone, /* matcher indices */ &kMatcherIndices[5], }, }; @@ -4737,17 +4895,17 @@ constexpr OpenTypeInfo kOpenTypes[] = { { /* [1] */ /* name */ "T", - /* matcher index */ 31, + /* matcher index */ 35, }, { /* [2] */ /* name */ "T", - /* matcher index */ 32, + /* matcher index */ 36, }, { /* [3] */ /* name */ "T", - /* matcher index */ 33, + /* matcher index */ 37, }, }; @@ -4797,8 +4955,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[510], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[489], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4809,8 +4967,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[453], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[461], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4821,8 +4979,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[509], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[487], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4833,8 +4991,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[437], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[465], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4845,8 +5003,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[508], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[479], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4857,8 +5015,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[461], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[469], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4869,7 +5027,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[479], + /* parameters */ &kParameters[485], /* return matcher indices */ &kMatcherIndices[137], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -4881,7 +5039,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[465], + /* parameters */ &kParameters[473], /* return matcher indices */ &kMatcherIndices[137], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -4893,8 +5051,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[507], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[483], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4905,8 +5063,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[469], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[409], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4917,8 +5075,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[485], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[480], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4929,8 +5087,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[473], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[457], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4941,8 +5099,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[483], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[481], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4953,8 +5111,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[481], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[482], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4965,8 +5123,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[459], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[475], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4977,8 +5135,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[480], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[484], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -4989,8 +5147,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[409], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[471], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5001,8 +5159,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[482], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[486], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5013,8 +5171,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[475], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[463], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5025,8 +5183,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[484], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[488], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5037,8 +5195,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[471], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[459], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5049,8 +5207,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 2, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[4], - /* parameters */ &kParameters[486], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[490], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5061,8 +5219,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 2, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[4], - /* parameters */ &kParameters[487], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[491], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5073,8 +5231,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 2, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[4], - /* parameters */ &kParameters[488], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[492], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5085,7 +5243,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 2, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[4], - /* parameters */ &kParameters[489], + /* parameters */ &kParameters[493], /* return matcher indices */ &kMatcherIndices[137], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5097,8 +5255,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[490], - /* return matcher indices */ &kMatcherIndices[135], + /* parameters */ &kParameters[494], + /* return matcher indices */ &kMatcherIndices[131], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5109,8 +5267,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[327], - /* return matcher indices */ &kMatcherIndices[149], + /* parameters */ &kParameters[309], + /* return matcher indices */ &kMatcherIndices[151], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5121,8 +5279,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[315], - /* return matcher indices */ &kMatcherIndices[149], + /* parameters */ &kParameters[312], + /* return matcher indices */ &kMatcherIndices[151], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5133,8 +5291,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[215], - /* return matcher indices */ &kMatcherIndices[149], + /* parameters */ &kParameters[171], + /* return matcher indices */ &kMatcherIndices[151], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5145,8 +5303,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[318], - /* return matcher indices */ &kMatcherIndices[149], + /* parameters */ &kParameters[321], + /* return matcher indices */ &kMatcherIndices[151], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5157,8 +5315,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[321], - /* return matcher indices */ &kMatcherIndices[149], + /* parameters */ &kParameters[324], + /* return matcher indices */ &kMatcherIndices[151], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5169,8 +5327,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[324], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[267], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5181,8 +5339,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[259], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[179], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5193,7 +5351,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[381], + /* parameters */ &kParameters[477], /* return matcher indices */ &kMatcherIndices[133], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5217,7 +5375,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[378], + /* parameters */ &kParameters[375], /* return matcher indices */ &kMatcherIndices[133], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5229,7 +5387,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[387], + /* parameters */ &kParameters[391], /* return matcher indices */ &kMatcherIndices[133], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5241,7 +5399,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[389], + /* parameters */ &kParameters[381], /* return matcher indices */ &kMatcherIndices[139], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5253,7 +5411,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[411], + /* parameters */ &kParameters[383], /* return matcher indices */ &kMatcherIndices[139], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5265,7 +5423,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[360], + /* parameters */ &kParameters[372], /* return matcher indices */ &kMatcherIndices[139], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5277,7 +5435,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[405], + /* parameters */ &kParameters[399], /* return matcher indices */ &kMatcherIndices[139], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5290,7 +5448,7 @@ constexpr OverloadInfo kOverloads[] = { /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[407], - /* return matcher indices */ &kMatcherIndices[143], + /* return matcher indices */ &kMatcherIndices[145], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5301,8 +5459,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[425], - /* return matcher indices */ &kMatcherIndices[143], + /* parameters */ &kParameters[415], + /* return matcher indices */ &kMatcherIndices[145], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5313,8 +5471,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[339], - /* return matcher indices */ &kMatcherIndices[143], + /* parameters */ &kParameters[342], + /* return matcher indices */ &kMatcherIndices[145], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5325,8 +5483,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[431], - /* return matcher indices */ &kMatcherIndices[143], + /* parameters */ &kParameters[425], + /* return matcher indices */ &kMatcherIndices[145], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5344,186 +5502,6 @@ constexpr OverloadInfo kOverloads[] = { }, { /* [46] */ - /* num parameters */ 3, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[270], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [47] */ - /* num parameters */ 3, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[312], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [48] */ - /* num parameters */ 4, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[255], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [49] */ - /* num parameters */ 4, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[251], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [50] */ - /* num parameters */ 5, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[126], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [51] */ - /* num parameters */ 3, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[330], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [52] */ - /* num parameters */ 4, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[263], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [53] */ - /* num parameters */ 3, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[333], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [54] */ - /* num parameters */ 4, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[247], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [55] */ - /* num parameters */ 3, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[375], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [56] */ - /* num parameters */ 4, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[219], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [57] */ - /* num parameters */ 4, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[239], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [58] */ - /* num parameters */ 5, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[71], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [59] */ - /* num parameters */ 3, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[336], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [60] */ - /* num parameters */ 4, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[235], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), - /* is_deprecated */ false, - }, - { - /* [61] */ /* num parameters */ 4, /* num open types */ 0, /* num open numbers */ 0, @@ -5535,7 +5513,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [62] */ + /* [47] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, @@ -5547,7 +5525,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [63] */ + /* [48] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, @@ -5559,19 +5537,19 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [64] */ + /* [49] */ /* num parameters */ 6, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[7], + /* parameters */ &kParameters[49], /* return matcher indices */ &kMatcherIndices[133], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [65] */ + /* [50] */ /* num parameters */ 4, /* num open types */ 0, /* num open numbers */ 0, @@ -5583,19 +5561,19 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [66] */ + /* [51] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[106], + /* parameters */ &kParameters[61], /* return matcher indices */ &kMatcherIndices[133], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [67] */ + /* [52] */ /* num parameters */ 4, /* num open types */ 0, /* num open numbers */ 0, @@ -5607,7 +5585,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [68] */ + /* [53] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, @@ -5619,79 +5597,79 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [69] */ + /* [54] */ /* num parameters */ 4, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[243], - /* return matcher indices */ &kMatcherIndices[7], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [70] */ + /* [55] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[111], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[96], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [71] */ + /* [56] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[136], - /* return matcher indices */ &kMatcherIndices[7], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [72] */ + /* [57] */ /* num parameters */ 6, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[37], - /* return matcher indices */ &kMatcherIndices[7], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [73] */ + /* [58] */ /* num parameters */ 4, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[179], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[175], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [74] */ + /* [59] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[151], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[141], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [75] */ + /* [60] */ /* num parameters */ 3, /* num open types */ 0, /* num open numbers */ 0, @@ -5702,6 +5680,186 @@ constexpr OverloadInfo kOverloads[] = { /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, + { + /* [61] */ + /* num parameters */ 3, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[315], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [62] */ + /* num parameters */ 3, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[318], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [63] */ + /* num parameters */ 4, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[255], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [64] */ + /* num parameters */ 4, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[251], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [65] */ + /* num parameters */ 5, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[111], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [66] */ + /* num parameters */ 3, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[327], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [67] */ + /* num parameters */ 4, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[263], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [68] */ + /* num parameters */ 3, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[330], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [69] */ + /* num parameters */ 4, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[247], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [70] */ + /* num parameters */ 3, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[378], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [71] */ + /* num parameters */ 4, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[219], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [72] */ + /* num parameters */ 4, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[239], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [73] */ + /* num parameters */ 5, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[71], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [74] */ + /* num parameters */ 3, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[333], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, + { + /* [75] */ + /* num parameters */ 4, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[235], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* is_deprecated */ false, + }, { /* [76] */ /* num parameters */ 3, @@ -5793,7 +5951,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[300], + /* parameters */ &kParameters[270], /* return matcher indices */ nullptr, /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5805,7 +5963,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[309], + /* parameters */ &kParameters[300], /* return matcher indices */ nullptr, /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -5853,8 +6011,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[496], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[500], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5865,8 +6023,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[497], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[501], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5877,8 +6035,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[498], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[502], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5889,8 +6047,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[499], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[503], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5901,8 +6059,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[500], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[504], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5913,8 +6071,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[501], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[505], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5925,8 +6083,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[502], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[506], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5937,8 +6095,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[503], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[507], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5949,8 +6107,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[504], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[508], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -5961,109 +6119,13 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[505], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[509], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [98] */ - /* num parameters */ 5, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[116], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [99] */ - /* num parameters */ 6, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[55], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [100] */ - /* num parameters */ 6, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[49], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [101] */ - /* num parameters */ 7, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[0], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [102] */ - /* num parameters */ 5, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[146], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [103] */ - /* num parameters */ 6, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[19], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [104] */ - /* num parameters */ 5, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[96], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [105] */ - /* num parameters */ 6, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[43], - /* return matcher indices */ &kMatcherIndices[133], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [106] */ /* num parameters */ 4, /* num open types */ 0, /* num open numbers */ 0, @@ -6075,7 +6137,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [107] */ + /* [99] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, @@ -6087,19 +6149,19 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [108] */ + /* [100] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[161], + /* parameters */ &kParameters[146], /* return matcher indices */ &kMatcherIndices[133], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { - /* [109] */ + /* [101] */ /* num parameters */ 6, /* num open types */ 0, /* num open numbers */ 0, @@ -6111,19 +6173,19 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [110] */ + /* [102] */ /* num parameters */ 4, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[171], + /* parameters */ &kParameters[215], /* return matcher indices */ &kMatcherIndices[133], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { - /* [111] */ + /* [103] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, @@ -6135,7 +6197,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [112] */ + /* [104] */ /* num parameters */ 4, /* num open types */ 0, /* num open numbers */ 0, @@ -6147,7 +6209,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [113] */ + /* [105] */ /* num parameters */ 5, /* num open types */ 0, /* num open numbers */ 0, @@ -6158,6 +6220,102 @@ constexpr OverloadInfo kOverloads[] = { /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, + { + /* [106] */ + /* num parameters */ 5, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[156], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [107] */ + /* num parameters */ 6, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[55], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [108] */ + /* num parameters */ 6, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[43], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [109] */ + /* num parameters */ 7, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[0], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [110] */ + /* num parameters */ 5, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[151], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [111] */ + /* num parameters */ 6, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[7], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [112] */ + /* num parameters */ 5, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[126], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [113] */ + /* num parameters */ 6, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[31], + /* return matcher indices */ &kMatcherIndices[133], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, { /* [114] */ /* num parameters */ 4, @@ -6165,8 +6323,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[183], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[191], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6178,7 +6336,7 @@ constexpr OverloadInfo kOverloads[] = { /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[131], - /* return matcher indices */ &kMatcherIndices[7], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6189,8 +6347,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[156], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[161], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6202,7 +6360,7 @@ constexpr OverloadInfo kOverloads[] = { /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[13], - /* return matcher indices */ &kMatcherIndices[7], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6213,8 +6371,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[195], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[183], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6225,8 +6383,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[141], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[116], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6237,8 +6395,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[191], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[195], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6250,7 +6408,7 @@ constexpr OverloadInfo kOverloads[] = { /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[101], - /* return matcher indices */ &kMatcherIndices[7], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6261,8 +6419,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[61], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[106], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6273,8 +6431,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[31], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[19], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6285,8 +6443,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[175], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[259], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6298,7 +6456,7 @@ constexpr OverloadInfo kOverloads[] = { /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[121], - /* return matcher indices */ &kMatcherIndices[7], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6309,8 +6467,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[491], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[495], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6321,8 +6479,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[492], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[496], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6333,8 +6491,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[493], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[497], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6345,8 +6503,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[494], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[498], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6357,56 +6515,56 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 2, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[4], - /* parameters */ &kParameters[495], - /* return matcher indices */ &kMatcherIndices[6], + /* parameters */ &kParameters[499], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [131] */ - /* num parameters */ 3, - /* num open types */ 1, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[3], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[372], - /* return matcher indices */ &kMatcherIndices[5], + /* num parameters */ 2, + /* num open types */ 0, + /* num open numbers */ 2, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[2], + /* parameters */ &kParameters[401], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, + /* is_deprecated */ true, }, { /* [132] */ - /* num parameters */ 3, - /* num open types */ 1, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[3], + /* num parameters */ 2, + /* num open types */ 0, + /* num open numbers */ 3, + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[369], - /* return matcher indices */ &kMatcherIndices[44], + /* parameters */ &kParameters[397], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, + /* is_deprecated */ true, }, { /* [133] */ - /* num parameters */ 3, - /* num open types */ 1, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[3], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[363], - /* return matcher indices */ &kMatcherIndices[44], + /* num parameters */ 1, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[542], + /* return matcher indices */ &kMatcherIndices[186], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [134] */ - /* num parameters */ 2, + /* num parameters */ 1, /* num open types */ 0, - /* num open numbers */ 0, + /* num open numbers */ 1, /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[417], - /* return matcher indices */ &kMatcherIndices[7], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[541], + /* return matcher indices */ &kMatcherIndices[143], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6414,156 +6572,156 @@ constexpr OverloadInfo kOverloads[] = { /* [135] */ /* num parameters */ 2, /* num open types */ 0, - /* num open numbers */ 1, + /* num open numbers */ 2, /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[415], - /* return matcher indices */ &kMatcherIndices[10], + /* open numbers */ &kOpenNumbers[2], + /* parameters */ &kParameters[467], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, + /* is_deprecated */ true, }, { /* [136] */ - /* num parameters */ 1, - /* num open types */ 1, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[2], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[586], - /* return matcher indices */ &kMatcherIndices[5], + /* num parameters */ 2, + /* num open types */ 0, + /* num open numbers */ 3, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[445], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, + /* is_deprecated */ true, }, { /* [137] */ /* num parameters */ 1, - /* num open types */ 1, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[2], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[585], - /* return matcher indices */ &kMatcherIndices[44], + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[567], + /* return matcher indices */ &kMatcherIndices[187], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [138] */ - /* num parameters */ 3, + /* num parameters */ 1, /* num open types */ 0, - /* num open numbers */ 0, + /* num open numbers */ 1, /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[366], - /* return matcher indices */ &kMatcherIndices[7], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[566], + /* return matcher indices */ &kMatcherIndices[153], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [139] */ /* num parameters */ 3, - /* num open types */ 0, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[342], - /* return matcher indices */ &kMatcherIndices[10], + /* num open types */ 1, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[3], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[357], + /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [140] */ - /* num parameters */ 2, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[399], - /* return matcher indices */ &kMatcherIndices[7], + /* num parameters */ 3, + /* num open types */ 1, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[3], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[348], + /* return matcher indices */ &kMatcherIndices[62], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [141] */ - /* num parameters */ 2, - /* num open types */ 0, + /* num parameters */ 3, + /* num open types */ 1, /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[3], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[445], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[345], + /* return matcher indices */ &kMatcherIndices[62], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [142] */ - /* num parameters */ 1, + /* num parameters */ 2, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[588], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[413], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [143] */ - /* num parameters */ 1, + /* num parameters */ 2, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[587], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[411], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [144] */ - /* num parameters */ 1, + /* num parameters */ 2, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[583], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* parameters */ &kParameters[421], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [145] */ - /* num parameters */ 1, + /* num parameters */ 2, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[582], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* parameters */ &kParameters[423], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [146] */ - /* num parameters */ 1, + /* num parameters */ 3, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[581], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* parameters */ &kParameters[339], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [147] */ - /* num parameters */ 1, + /* num parameters */ 3, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[580], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* parameters */ &kParameters[336], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { @@ -6573,8 +6731,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[579], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[587], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6585,8 +6743,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[578], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[586], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6597,8 +6755,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[577], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[585], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6609,8 +6767,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[576], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[584], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6621,8 +6779,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[575], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[583], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6633,8 +6791,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[574], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[582], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6645,8 +6803,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[573], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[581], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6657,8 +6815,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[572], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[580], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6669,9 +6827,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[571], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* parameters */ &kParameters[579], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { @@ -6681,9 +6839,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[570], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* parameters */ &kParameters[578], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { @@ -6693,9 +6851,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[569], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* parameters */ &kParameters[577], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { @@ -6705,9 +6863,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[568], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* parameters */ &kParameters[576], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { @@ -6717,8 +6875,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[590], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[575], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6729,8 +6887,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[589], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[574], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6741,8 +6899,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[567], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[573], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6753,32 +6911,32 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[566], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[572], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [164] */ - /* num parameters */ 3, - /* num open types */ 0, + /* num parameters */ 1, + /* num open types */ 1, /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[282], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[590], + /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [165] */ - /* num parameters */ 3, - /* num open types */ 0, + /* num parameters */ 1, + /* num open types */ 1, /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[279], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[589], + /* return matcher indices */ &kMatcherIndices[62], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6789,8 +6947,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[565], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[571], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6801,32 +6959,32 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[564], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[570], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [168] */ - /* num parameters */ 2, + /* num parameters */ 3, /* num open types */ 0, - /* num open numbers */ 2, + /* num open numbers */ 0, /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[2], - /* parameters */ &kParameters[467], - /* return matcher indices */ &kMatcherIndices[7], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[282], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [169] */ - /* num parameters */ 2, + /* num parameters */ 3, /* num open types */ 0, - /* num open numbers */ 3, + /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[477], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[279], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6837,9 +6995,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[563], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* parameters */ &kParameters[569], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { @@ -6849,9 +7007,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[562], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* parameters */ &kParameters[568], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { @@ -6861,9 +7019,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[561], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* parameters */ &kParameters[592], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { @@ -6873,9 +7031,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[560], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), + /* parameters */ &kParameters[591], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { @@ -6885,8 +7043,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[559], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[565], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, @@ -6897,33 +7055,33 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[558], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[564], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { /* [176] */ - /* num parameters */ 3, - /* num open types */ 1, + /* num parameters */ 1, + /* num open types */ 0, /* num open numbers */ 0, - /* open types */ &kOpenTypes[1], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[351], - /* return matcher indices */ &kMatcherIndices[5], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* parameters */ &kParameters[563], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { /* [177] */ - /* num parameters */ 3, - /* num open types */ 1, + /* num parameters */ 1, + /* num open types */ 0, /* num open numbers */ 1, - /* open types */ &kOpenTypes[1], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[354], - /* return matcher indices */ &kMatcherIndices[44], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* parameters */ &kParameters[562], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { @@ -6933,9 +7091,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[556], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* parameters */ &kParameters[561], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { @@ -6945,9 +7103,9 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[555], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* parameters */ &kParameters[560], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment), /* is_deprecated */ false, }, { @@ -6957,8 +7115,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[554], - /* return matcher indices */ &kMatcherIndices[3], + /* parameters */ &kParameters[594], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6969,8 +7127,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[553], - /* return matcher indices */ &kMatcherIndices[65], + /* parameters */ &kParameters[593], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6981,8 +7139,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[552], - /* return matcher indices */ &kMatcherIndices[3], + /* parameters */ &kParameters[558], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -6993,8 +7151,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[551], - /* return matcher indices */ &kMatcherIndices[65], + /* parameters */ &kParameters[557], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7005,7 +7163,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[550], + /* parameters */ &kParameters[556], /* return matcher indices */ &kMatcherIndices[3], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -7017,8 +7175,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[549], - /* return matcher indices */ &kMatcherIndices[65], + /* parameters */ &kParameters[555], + /* return matcher indices */ &kMatcherIndices[71], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7029,7 +7187,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[548], + /* parameters */ &kParameters[554], /* return matcher indices */ &kMatcherIndices[3], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -7041,32 +7199,32 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[547], - /* return matcher indices */ &kMatcherIndices[65], + /* parameters */ &kParameters[553], + /* return matcher indices */ &kMatcherIndices[71], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [188] */ - /* num parameters */ 2, - /* num open types */ 1, + /* num parameters */ 1, + /* num open types */ 0, /* num open numbers */ 0, - /* open types */ &kOpenTypes[2], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[463], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[552], + /* return matcher indices */ &kMatcherIndices[3], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [189] */ - /* num parameters */ 2, - /* num open types */ 1, + /* num parameters */ 1, + /* num open types */ 0, /* num open numbers */ 1, - /* open types */ &kOpenTypes[2], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[397], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[551], + /* return matcher indices */ &kMatcherIndices[71], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7077,8 +7235,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[546], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[550], + /* return matcher indices */ &kMatcherIndices[3], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7089,32 +7247,32 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[545], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[549], + /* return matcher indices */ &kMatcherIndices[71], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [192] */ - /* num parameters */ 1, - /* num open types */ 0, + /* num parameters */ 2, + /* num open types */ 1, /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[544], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[455], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [193] */ - /* num parameters */ 1, - /* num open types */ 0, + /* num parameters */ 2, + /* num open types */ 1, /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[543], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[453], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7125,8 +7283,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[542], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[548], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7137,152 +7295,152 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[541], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[547], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [196] */ - /* num parameters */ 2, - /* num open types */ 1, + /* num parameters */ 1, + /* num open types */ 0, /* num open numbers */ 0, - /* open types */ &kOpenTypes[1], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[441], - /* return matcher indices */ &kMatcherIndices[5], + /* parameters */ &kParameters[546], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [197] */ - /* num parameters */ 2, - /* num open types */ 1, + /* num parameters */ 1, + /* num open types */ 0, /* num open numbers */ 1, - /* open types */ &kOpenTypes[1], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[429], - /* return matcher indices */ &kMatcherIndices[44], + /* parameters */ &kParameters[545], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [198] */ - /* num parameters */ 2, - /* num open types */ 1, + /* num parameters */ 1, + /* num open types */ 0, /* num open numbers */ 0, - /* open types */ &kOpenTypes[1], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[427], - /* return matcher indices */ &kMatcherIndices[5], + /* parameters */ &kParameters[544], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [199] */ - /* num parameters */ 2, - /* num open types */ 1, + /* num parameters */ 1, + /* num open types */ 0, /* num open numbers */ 1, - /* open types */ &kOpenTypes[1], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[413], - /* return matcher indices */ &kMatcherIndices[44], + /* parameters */ &kParameters[543], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [200] */ - /* num parameters */ 3, - /* num open types */ 0, + /* num parameters */ 2, + /* num open types */ 1, /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[345], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[419], + /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [201] */ - /* num parameters */ 3, - /* num open types */ 0, + /* num parameters */ 2, + /* num open types */ 1, /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[348], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[417], + /* return matcher indices */ &kMatcherIndices[62], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [202] */ /* num parameters */ 2, - /* num open types */ 0, - /* num open numbers */ 2, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[2], - /* parameters */ &kParameters[403], - /* return matcher indices */ &kMatcherIndices[7], + /* num open types */ 1, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[1], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[405], + /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [203] */ /* num parameters */ 2, - /* num open types */ 0, - /* num open numbers */ 3, - /* open types */ &kOpenTypes[4], + /* num open types */ 1, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[401], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[403], + /* return matcher indices */ &kMatcherIndices[62], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [204] */ - /* num parameters */ 1, + /* num parameters */ 3, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[524], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[351], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [205] */ - /* num parameters */ 1, + /* num parameters */ 3, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[523], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[354], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [206] */ - /* num parameters */ 1, - /* num open types */ 0, + /* num parameters */ 3, + /* num open types */ 1, /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[592], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[360], + /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [207] */ - /* num parameters */ 1, - /* num open types */ 0, + /* num parameters */ 3, + /* num open types */ 1, /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[1], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[591], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[369], + /* return matcher indices */ &kMatcherIndices[62], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7293,8 +7451,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[526], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[524], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7305,8 +7463,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[525], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[523], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7317,8 +7475,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[594], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[596], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7329,8 +7487,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[593], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[595], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7341,8 +7499,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[517], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[526], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7353,8 +7511,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[516], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[525], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7365,8 +7523,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[520], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[598], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7377,32 +7535,32 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[519], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[597], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [216] */ - /* num parameters */ 2, + /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[391], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[517], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [217] */ - /* num parameters */ 2, + /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[385], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[516], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7413,8 +7571,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[596], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[520], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7425,8 +7583,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[595], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[519], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7437,8 +7595,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[419], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[385], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7449,14 +7607,62 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[421], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[387], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [222] */ /* num parameters */ 1, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[600], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [223] */ + /* num parameters */ 1, + /* num open types */ 0, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[599], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [224] */ + /* num parameters */ 2, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[427], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [225] */ + /* num parameters */ 2, + /* num open types */ 0, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[429], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [226] */ + /* num parameters */ 1, /* num open types */ 1, /* num open numbers */ 0, /* open types */ &kOpenTypes[2], @@ -7467,62 +7673,14 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [223] */ + /* [227] */ /* num parameters */ 1, /* num open types */ 1, /* num open numbers */ 1, /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[1], /* parameters */ &kParameters[533], - /* return matcher indices */ &kMatcherIndices[44], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [224] */ - /* num parameters */ 1, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[532], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [225] */ - /* num parameters */ 1, - /* num open types */ 0, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[531], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [226] */ - /* num parameters */ 1, - /* num open types */ 0, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[602], - /* return matcher indices */ &kMatcherIndices[7], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [227] */ - /* num parameters */ 1, - /* num open types */ 0, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[601], - /* return matcher indices */ &kMatcherIndices[10], + /* return matcher indices */ &kMatcherIndices[62], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7533,8 +7691,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[530], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[532], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7545,8 +7703,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[529], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[531], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7557,8 +7715,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[528], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[606], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7569,8 +7727,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[527], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[605], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7581,8 +7739,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[522], - /* return matcher indices */ &kMatcherIndices[7], + /* parameters */ &kParameters[530], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7593,32 +7751,32 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[521], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[529], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [234] */ /* num parameters */ 1, - /* num open types */ 1, + /* num open types */ 0, /* num open numbers */ 0, - /* open types */ &kOpenTypes[1], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[604], - /* return matcher indices */ &kMatcherIndices[5], + /* parameters */ &kParameters[528], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [235] */ /* num parameters */ 1, - /* num open types */ 1, + /* num open types */ 0, /* num open numbers */ 1, - /* open types */ &kOpenTypes[1], + /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[603], - /* return matcher indices */ &kMatcherIndices[44], + /* parameters */ &kParameters[527], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7629,49 +7787,97 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[522], + /* return matcher indices */ &kMatcherIndices[6], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [237] */ + /* num parameters */ 1, + /* num open types */ 0, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[521], + /* return matcher indices */ &kMatcherIndices[4], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [238] */ + /* num parameters */ 1, + /* num open types */ 1, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[1], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[608], + /* return matcher indices */ &kMatcherIndices[5], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [239] */ + /* num parameters */ 1, + /* num open types */ 1, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[1], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[607], + /* return matcher indices */ &kMatcherIndices[62], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [240] */ + /* num parameters */ 1, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[538], /* return matcher indices */ &kMatcherIndices[75], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [237] */ + /* [241] */ /* num parameters */ 3, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[267], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[366], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [238] */ + /* [242] */ /* num parameters */ 0, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[605], + /* parameters */ &kParameters[609], /* return matcher indices */ nullptr, /* supported_stages */ PipelineStageSet(PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [239] */ + /* [243] */ /* num parameters */ 2, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[383], - /* return matcher indices */ &kMatcherIndices[10], + /* parameters */ &kParameters[389], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [240] */ + /* [244] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, @@ -7683,7 +7889,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [241] */ + /* [245] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 2, @@ -7695,7 +7901,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [242] */ + /* [246] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, @@ -7707,43 +7913,43 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [243] */ + /* [247] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[515], - /* return matcher indices */ &kMatcherIndices[141], + /* return matcher indices */ &kMatcherIndices[135], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [244] */ + /* [248] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[514], - /* return matcher indices */ &kMatcherIndices[141], + /* return matcher indices */ &kMatcherIndices[135], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [245] */ + /* [249] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], /* parameters */ &kParameters[513], - /* return matcher indices */ &kMatcherIndices[141], + /* return matcher indices */ &kMatcherIndices[135], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [246] */ + /* [250] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, @@ -7755,7 +7961,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [247] */ + /* [251] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, @@ -7767,19 +7973,19 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [248] */ + /* [252] */ /* num parameters */ 0, /* num open types */ 0, /* num open numbers */ 0, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[605], + /* parameters */ &kParameters[609], /* return matcher indices */ nullptr, /* supported_stages */ PipelineStageSet(PipelineStage::kCompute), /* is_deprecated */ false, }, { - /* [249] */ + /* [253] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, @@ -7791,7 +7997,7 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [250] */ + /* [254] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 0, @@ -7803,110 +8009,62 @@ constexpr OverloadInfo kOverloads[] = { /* is_deprecated */ false, }, { - /* [251] */ + /* [255] */ /* num parameters */ 1, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], /* parameters */ &kParameters[540], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [252] */ - /* num parameters */ 1, - /* num open types */ 1, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[1], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[506], - /* return matcher indices */ &kMatcherIndices[6], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [253] */ - /* num parameters */ 1, - /* num open types */ 1, - /* num open numbers */ 0, - /* open types */ &kOpenTypes[0], - /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[557], - /* return matcher indices */ nullptr, - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [254] */ - /* num parameters */ 3, - /* num open types */ 0, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[288], - /* return matcher indices */ &kMatcherIndices[10], - /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [255] */ - /* num parameters */ 2, - /* num open types */ 0, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[457], - /* return matcher indices */ &kMatcherIndices[7], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [256] */ /* num parameters */ 1, - /* num open types */ 0, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[4], - /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[584], - /* return matcher indices */ &kMatcherIndices[7], + /* num open types */ 1, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[1], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[510], + /* return matcher indices */ &kMatcherIndices[1], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [257] */ - /* num parameters */ 2, - /* num open types */ 0, + /* num parameters */ 1, + /* num open types */ 1, /* num open numbers */ 0, - /* open types */ &kOpenTypes[4], + /* open types */ &kOpenTypes[0], /* open numbers */ &kOpenNumbers[7], - /* parameters */ &kParameters[395], - /* return matcher indices */ &kMatcherIndices[145], + /* parameters */ &kParameters[559], + /* return matcher indices */ nullptr, /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [258] */ - /* num parameters */ 1, - /* num open types */ 1, + /* num parameters */ 3, + /* num open types */ 0, /* num open numbers */ 1, - /* open types */ &kOpenTypes[0], - /* open numbers */ &kOpenNumbers[3], - /* parameters */ &kParameters[598], - /* return matcher indices */ &kMatcherIndices[75], + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[288], + /* return matcher indices */ &kMatcherIndices[4], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [259] */ - /* num parameters */ 1, + /* num parameters */ 2, /* num open types */ 0, /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[599], - /* return matcher indices */ &kMatcherIndices[3], + /* parameters */ &kParameters[441], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -7917,67 +8075,67 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[4], /* open numbers */ &kOpenNumbers[1], - /* parameters */ &kParameters[600], - /* return matcher indices */ &kMatcherIndices[3], + /* parameters */ &kParameters[588], + /* return matcher indices */ &kMatcherIndices[6], /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [261] */ + /* num parameters */ 2, + /* num open types */ 0, + /* num open numbers */ 0, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[7], + /* parameters */ &kParameters[395], + /* return matcher indices */ &kMatcherIndices[141], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [262] */ + /* num parameters */ 1, + /* num open types */ 1, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[0], + /* open numbers */ &kOpenNumbers[3], + /* parameters */ &kParameters[602], + /* return matcher indices */ &kMatcherIndices[75], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [263] */ + /* num parameters */ 1, + /* num open types */ 0, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[603], + /* return matcher indices */ &kMatcherIndices[3], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [264] */ + /* num parameters */ 1, + /* num open types */ 0, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[4], + /* open numbers */ &kOpenNumbers[1], + /* parameters */ &kParameters[604], + /* return matcher indices */ &kMatcherIndices[3], + /* supported_stages */ PipelineStageSet(PipelineStage::kVertex, PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [265] */ /* num parameters */ 1, /* num open types */ 1, /* num open numbers */ 1, /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[597], - /* return matcher indices */ &kMatcherIndices[5], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [262] */ - /* num parameters */ 2, - /* num open types */ 1, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[2], - /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[435], - /* return matcher indices */ nullptr, - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [263] */ - /* num parameters */ 2, - /* num open types */ 1, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[2], - /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[439], - /* return matcher indices */ &kMatcherIndices[5], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [264] */ - /* num parameters */ 2, - /* num open types */ 1, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[2], - /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[443], - /* return matcher indices */ &kMatcherIndices[5], - /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), - /* is_deprecated */ false, - }, - { - /* [265] */ - /* num parameters */ 2, - /* num open types */ 1, - /* num open numbers */ 1, - /* open types */ &kOpenTypes[2], - /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[447], + /* parameters */ &kParameters[601], /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -7989,8 +8147,8 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[451], - /* return matcher indices */ &kMatcherIndices[5], + /* parameters */ &kParameters[435], + /* return matcher indices */ nullptr, /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -8001,7 +8159,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[455], + /* parameters */ &kParameters[439], /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -8013,7 +8171,7 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[449], + /* parameters */ &kParameters[443], /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, @@ -8025,20 +8183,68 @@ constexpr OverloadInfo kOverloads[] = { /* num open numbers */ 1, /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[423], + /* parameters */ &kParameters[447], /* return matcher indices */ &kMatcherIndices[5], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, { /* [270] */ + /* num parameters */ 2, + /* num open types */ 1, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[2], + /* open numbers */ &kOpenNumbers[6], + /* parameters */ &kParameters[449], + /* return matcher indices */ &kMatcherIndices[5], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [271] */ + /* num parameters */ 2, + /* num open types */ 1, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[2], + /* open numbers */ &kOpenNumbers[6], + /* parameters */ &kParameters[451], + /* return matcher indices */ &kMatcherIndices[5], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [272] */ + /* num parameters */ 2, + /* num open types */ 1, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[2], + /* open numbers */ &kOpenNumbers[6], + /* parameters */ &kParameters[437], + /* return matcher indices */ &kMatcherIndices[5], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [273] */ + /* num parameters */ 2, + /* num open types */ 1, + /* num open numbers */ 1, + /* open types */ &kOpenTypes[2], + /* open numbers */ &kOpenNumbers[6], + /* parameters */ &kParameters[431], + /* return matcher indices */ &kMatcherIndices[5], + /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), + /* is_deprecated */ false, + }, + { + /* [274] */ /* num parameters */ 3, /* num open types */ 1, /* num open numbers */ 1, /* open types */ &kOpenTypes[2], /* open numbers */ &kOpenNumbers[6], - /* parameters */ &kParameters[357], - /* return matcher indices */ &kMatcherIndices[173], + /* parameters */ &kParameters[363], + /* return matcher indices */ &kMatcherIndices[177], /* supported_stages */ PipelineStageSet(PipelineStage::kFragment, PipelineStage::kCompute), /* is_deprecated */ false, }, @@ -8050,390 +8256,394 @@ constexpr IntrinsicInfo kIntrinsics[] = { /* fn abs(T) -> T */ /* fn abs(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[234], + /* overloads */ &kOverloads[238], }, { /* [1] */ /* fn acos(f32) -> f32 */ /* fn acos(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[226], + /* overloads */ &kOverloads[230], }, { /* [2] */ /* fn all(vec) -> bool */ /* num overloads */ 1, - /* overloads */ &kOverloads[260], + /* overloads */ &kOverloads[264], }, { /* [3] */ /* fn any(vec) -> bool */ /* num overloads */ 1, - /* overloads */ &kOverloads[259], + /* overloads */ &kOverloads[263], }, { /* [4] */ /* fn arrayLength(ptr, A>) -> u32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[258], + /* overloads */ &kOverloads[262], }, { /* [5] */ /* fn asin(f32) -> f32 */ /* fn asin(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[218], + /* overloads */ &kOverloads[222], }, { /* [6] */ /* fn atan(f32) -> f32 */ /* fn atan(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[210], + /* overloads */ &kOverloads[214], }, { /* [7] */ /* fn atan2(f32, f32) -> f32 */ /* fn atan2(vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[134], + /* overloads */ &kOverloads[142], }, { /* [8] */ /* fn ceil(f32) -> f32 */ /* fn ceil(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[206], + /* overloads */ &kOverloads[210], }, { /* [9] */ /* fn clamp(T, T, T) -> T */ /* fn clamp(vec, vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[176], + /* overloads */ &kOverloads[206], }, { /* [10] */ /* fn cos(f32) -> f32 */ /* fn cos(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[160], + /* overloads */ &kOverloads[180], }, { /* [11] */ /* fn cosh(f32) -> f32 */ /* fn cosh(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[142], + /* overloads */ &kOverloads[172], }, { /* [12] */ /* fn countOneBits(T) -> T */ /* fn countOneBits(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[136], + /* overloads */ &kOverloads[164], }, { /* [13] */ /* fn cross(vec3, vec3) -> vec3 */ /* num overloads */ 1, - /* overloads */ &kOverloads[257], + /* overloads */ &kOverloads[261], }, { /* [14] */ /* fn determinant(mat) -> f32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[256], + /* overloads */ &kOverloads[260], }, { /* [15] */ /* fn distance(f32, f32) -> f32 */ /* fn distance(vec, vec) -> f32 */ /* num overloads */ 2, - /* overloads */ &kOverloads[140], + /* overloads */ &kOverloads[144], }, { /* [16] */ /* fn dot(vec, vec) -> f32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[255], + /* overloads */ &kOverloads[259], }, { /* [17] */ /* fn dpdx(f32) -> f32 */ /* fn dpdx(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[144], + /* overloads */ &kOverloads[148], }, { /* [18] */ /* fn dpdxCoarse(f32) -> f32 */ /* fn dpdxCoarse(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[146], + /* overloads */ &kOverloads[150], }, { /* [19] */ /* fn dpdxFine(f32) -> f32 */ /* fn dpdxFine(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[148], + /* overloads */ &kOverloads[152], }, { /* [20] */ /* fn dpdy(f32) -> f32 */ /* fn dpdy(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[150], + /* overloads */ &kOverloads[154], }, { /* [21] */ /* fn dpdyCoarse(f32) -> f32 */ /* fn dpdyCoarse(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[152], + /* overloads */ &kOverloads[156], }, { /* [22] */ /* fn dpdyFine(f32) -> f32 */ /* fn dpdyFine(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[154], + /* overloads */ &kOverloads[158], }, { /* [23] */ /* fn exp(f32) -> f32 */ /* fn exp(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[156], + /* overloads */ &kOverloads[160], }, { /* [24] */ /* fn exp2(f32) -> f32 */ /* fn exp2(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[158], + /* overloads */ &kOverloads[162], }, { /* [25] */ /* fn faceForward(vec, vec, vec) -> vec */ /* num overloads */ 1, - /* overloads */ &kOverloads[254], + /* overloads */ &kOverloads[258], }, { /* [26] */ /* fn floor(f32) -> f32 */ /* fn floor(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[162], + /* overloads */ &kOverloads[166], }, { /* [27] */ /* fn fma(f32, f32, f32) -> f32 */ /* fn fma(vec, vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[164], + /* overloads */ &kOverloads[168], }, { /* [28] */ /* fn fract(f32) -> f32 */ /* fn fract(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[166], + /* overloads */ &kOverloads[170], }, { /* [29] */ /* fn frexp(f32, ptr) -> f32 */ /* fn frexp(vec, ptr, A>) -> vec */ - /* num overloads */ 2, - /* overloads */ &kOverloads[168], + /* fn frexp(f32) -> _frexp_result */ + /* fn frexp(vec) -> _frexp_result_vec */ + /* num overloads */ 4, + /* overloads */ &kOverloads[135], }, { /* [30] */ /* fn fwidth(f32) -> f32 */ /* fn fwidth(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[170], + /* overloads */ &kOverloads[174], }, { /* [31] */ /* fn fwidthCoarse(f32) -> f32 */ /* fn fwidthCoarse(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[172], + /* overloads */ &kOverloads[176], }, { /* [32] */ /* fn fwidthFine(f32) -> f32 */ /* fn fwidthFine(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[174], + /* overloads */ &kOverloads[178], }, { /* [33] */ /* fn ignore(T) */ /* num overloads */ 1, - /* overloads */ &kOverloads[253], + /* overloads */ &kOverloads[257], }, { /* [34] */ /* fn inverseSqrt(f32) -> f32 */ /* fn inverseSqrt(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[178], + /* overloads */ &kOverloads[182], }, { /* [35] */ /* fn isFinite(f32) -> bool */ /* fn isFinite(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[180], + /* overloads */ &kOverloads[184], }, { /* [36] */ /* fn isInf(f32) -> bool */ /* fn isInf(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[182], + /* overloads */ &kOverloads[186], }, { /* [37] */ /* fn isNan(f32) -> bool */ /* fn isNan(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[184], + /* overloads */ &kOverloads[188], }, { /* [38] */ /* fn isNormal(f32) -> bool */ /* fn isNormal(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[186], + /* overloads */ &kOverloads[190], }, { /* [39] */ /* fn ldexp(f32, T) -> f32 */ /* fn ldexp(vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[188], + /* overloads */ &kOverloads[192], }, { /* [40] */ /* fn length(f32) -> f32 */ /* fn length(vec) -> f32 */ /* num overloads */ 2, - /* overloads */ &kOverloads[190], + /* overloads */ &kOverloads[194], }, { /* [41] */ /* fn log(f32) -> f32 */ /* fn log(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[192], + /* overloads */ &kOverloads[196], }, { /* [42] */ /* fn log2(f32) -> f32 */ /* fn log2(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[194], + /* overloads */ &kOverloads[198], }, { /* [43] */ /* fn max(T, T) -> T */ /* fn max(vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[196], + /* overloads */ &kOverloads[200], }, { /* [44] */ /* fn min(T, T) -> T */ /* fn min(vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[198], + /* overloads */ &kOverloads[202], }, { /* [45] */ /* fn mix(f32, f32, f32) -> f32 */ /* fn mix(vec, vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[200], + /* overloads */ &kOverloads[204], }, { /* [46] */ /* fn modf(f32, ptr) -> f32 */ /* fn modf(vec, ptr, A>) -> vec */ - /* num overloads */ 2, - /* overloads */ &kOverloads[202], + /* fn modf(f32) -> _modf_result */ + /* fn modf(vec) -> _modf_result_vec */ + /* num overloads */ 4, + /* overloads */ &kOverloads[131], }, { /* [47] */ /* fn normalize(vec) -> vec */ /* num overloads */ 1, - /* overloads */ &kOverloads[251], + /* overloads */ &kOverloads[255], }, { /* [48] */ /* fn pack2x16float(vec2) -> u32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[250], + /* overloads */ &kOverloads[254], }, { /* [49] */ /* fn pack2x16snorm(vec2) -> u32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[236], + /* overloads */ &kOverloads[240], }, { /* [50] */ /* fn pack2x16unorm(vec2) -> u32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[249], + /* overloads */ &kOverloads[253], }, { /* [51] */ /* fn pack4x8snorm(vec4) -> u32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[242], + /* overloads */ &kOverloads[246], }, { /* [52] */ /* fn pack4x8unorm(vec4) -> u32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[240], + /* overloads */ &kOverloads[244], }, { /* [53] */ /* fn pow(f32, f32) -> f32 */ /* fn pow(vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[216], + /* overloads */ &kOverloads[220], }, { /* [54] */ /* fn reflect(vec, vec) -> vec */ /* num overloads */ 1, - /* overloads */ &kOverloads[239], + /* overloads */ &kOverloads[243], }, { /* [55] */ /* fn refract(vec, vec, f32) -> vec */ /* num overloads */ 1, - /* overloads */ &kOverloads[237], + /* overloads */ &kOverloads[241], }, { /* [56] */ /* fn reverseBits(T) -> T */ /* fn reverseBits(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[222], + /* overloads */ &kOverloads[226], }, { /* [57] */ /* fn round(f32) -> f32 */ /* fn round(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[224], + /* overloads */ &kOverloads[228], }, { /* [58] */ @@ -8441,118 +8651,118 @@ constexpr IntrinsicInfo kIntrinsics[] = { /* fn select(vec, vec, bool) -> vec */ /* fn select(vec, vec, vec) -> vec */ /* num overloads */ 3, - /* overloads */ &kOverloads[131], + /* overloads */ &kOverloads[139], }, { /* [59] */ /* fn sign(f32) -> f32 */ /* fn sign(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[228], + /* overloads */ &kOverloads[232], }, { /* [60] */ /* fn sin(f32) -> f32 */ /* fn sin(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[230], + /* overloads */ &kOverloads[234], }, { /* [61] */ /* fn sinh(f32) -> f32 */ /* fn sinh(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[208], + /* overloads */ &kOverloads[212], }, { /* [62] */ /* fn smoothStep(f32, f32, f32) -> f32 */ /* fn smoothStep(vec, vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[138], + /* overloads */ &kOverloads[146], }, { /* [63] */ /* fn sqrt(f32) -> f32 */ /* fn sqrt(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[204], + /* overloads */ &kOverloads[208], }, { /* [64] */ /* fn step(f32, f32) -> f32 */ /* fn step(vec, vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[220], + /* overloads */ &kOverloads[224], }, { /* [65] */ /* fn storageBarrier() */ /* num overloads */ 1, - /* overloads */ &kOverloads[238], + /* overloads */ &kOverloads[242], }, { /* [66] */ /* fn tan(f32) -> f32 */ /* fn tan(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[232], + /* overloads */ &kOverloads[236], }, { /* [67] */ /* fn tanh(f32) -> f32 */ /* fn tanh(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[214], + /* overloads */ &kOverloads[218], }, { /* [68] */ /* fn transpose(mat) -> mat */ /* num overloads */ 1, - /* overloads */ &kOverloads[241], + /* overloads */ &kOverloads[245], }, { /* [69] */ /* fn trunc(f32) -> f32 */ /* fn trunc(vec) -> vec */ /* num overloads */ 2, - /* overloads */ &kOverloads[212], + /* overloads */ &kOverloads[216], }, { /* [70] */ /* fn unpack2x16float(u32) -> vec2 */ /* num overloads */ 1, - /* overloads */ &kOverloads[243], + /* overloads */ &kOverloads[247], }, { /* [71] */ /* fn unpack2x16snorm(u32) -> vec2 */ /* num overloads */ 1, - /* overloads */ &kOverloads[244], + /* overloads */ &kOverloads[248], }, { /* [72] */ /* fn unpack2x16unorm(u32) -> vec2 */ /* num overloads */ 1, - /* overloads */ &kOverloads[245], + /* overloads */ &kOverloads[249], }, { /* [73] */ /* fn unpack4x8snorm(u32) -> vec4 */ /* num overloads */ 1, - /* overloads */ &kOverloads[246], + /* overloads */ &kOverloads[250], }, { /* [74] */ /* fn unpack4x8unorm(u32) -> vec4 */ /* num overloads */ 1, - /* overloads */ &kOverloads[247], + /* overloads */ &kOverloads[251], }, { /* [75] */ /* fn workgroupBarrier() */ /* num overloads */ 1, - /* overloads */ &kOverloads[248], + /* overloads */ &kOverloads[252], }, { /* [76] */ @@ -8614,7 +8824,7 @@ constexpr IntrinsicInfo kIntrinsics[] = { /* [79] */ /* fn textureNumSamples(texture: texture_multisampled_2d) -> i32 */ /* num overloads */ 1, - /* overloads */ &kOverloads[252], + /* overloads */ &kOverloads[256], }, { /* [80] */ @@ -8634,7 +8844,7 @@ constexpr IntrinsicInfo kIntrinsics[] = { /* fn textureSample(texture: texture_depth_cube, sampler: sampler, coords: vec3) -> f32 */ /* fn textureSample(texture: texture_depth_cube_array, sampler: sampler, coords: vec3, array_index: i32) -> f32 */ /* num overloads */ 15, - /* overloads */ &kOverloads[46], + /* overloads */ &kOverloads[61], }, { /* [81] */ @@ -8647,7 +8857,7 @@ constexpr IntrinsicInfo kIntrinsics[] = { /* fn textureSampleBias(texture: texture_cube, sampler: sampler, coords: vec3, bias: f32) -> vec4 */ /* fn textureSampleBias(texture: texture_cube_array, sampler: sampler, coords: vec3, array_index: i32, bias: f32) -> vec4 */ /* num overloads */ 8, - /* overloads */ &kOverloads[106], + /* overloads */ &kOverloads[98], }, { /* [82] */ @@ -8682,7 +8892,7 @@ constexpr IntrinsicInfo kIntrinsics[] = { /* fn textureSampleGrad(texture: texture_cube, sampler: sampler, coords: vec3, ddx: vec3, ddy: vec3) -> vec4 */ /* fn textureSampleGrad(texture: texture_cube_array, sampler: sampler, coords: vec3, array_index: i32, ddx: vec3, ddy: vec3) -> vec4 */ /* num overloads */ 8, - /* overloads */ &kOverloads[98], + /* overloads */ &kOverloads[106], }, { /* [85] */ @@ -8702,7 +8912,7 @@ constexpr IntrinsicInfo kIntrinsics[] = { /* fn textureSampleLevel(texture: texture_depth_cube_array, sampler: sampler, coords: vec3, array_index: i32, level: i32) -> f32 */ /* fn textureSampleLevel(texture: texture_external, sampler: sampler, coords: vec2) -> vec4 */ /* num overloads */ 15, - /* overloads */ &kOverloads[61], + /* overloads */ &kOverloads[46], }, { /* [86] */ @@ -8750,61 +8960,61 @@ constexpr IntrinsicInfo kIntrinsics[] = { /* [88] */ /* fn atomicLoad(ptr, read_write>) -> T */ /* num overloads */ 1, - /* overloads */ &kOverloads[261], + /* overloads */ &kOverloads[265], }, { /* [89] */ /* fn atomicStore(ptr, read_write>, T) */ /* num overloads */ 1, - /* overloads */ &kOverloads[262], + /* overloads */ &kOverloads[266], }, { /* [90] */ /* fn atomicAdd(ptr, read_write>, T) -> T */ /* num overloads */ 1, - /* overloads */ &kOverloads[263], + /* overloads */ &kOverloads[267], }, { /* [91] */ /* fn atomicMax(ptr, read_write>, T) -> T */ /* num overloads */ 1, - /* overloads */ &kOverloads[264], + /* overloads */ &kOverloads[268], }, { /* [92] */ /* fn atomicMin(ptr, read_write>, T) -> T */ /* num overloads */ 1, - /* overloads */ &kOverloads[265], + /* overloads */ &kOverloads[269], }, { /* [93] */ /* fn atomicAnd(ptr, read_write>, T) -> T */ /* num overloads */ 1, - /* overloads */ &kOverloads[266], + /* overloads */ &kOverloads[270], }, { /* [94] */ /* fn atomicOr(ptr, read_write>, T) -> T */ /* num overloads */ 1, - /* overloads */ &kOverloads[267], + /* overloads */ &kOverloads[271], }, { /* [95] */ /* fn atomicXor(ptr, read_write>, T) -> T */ /* num overloads */ 1, - /* overloads */ &kOverloads[268], + /* overloads */ &kOverloads[272], }, { /* [96] */ /* fn atomicExchange(ptr, read_write>, T) -> T */ /* num overloads */ 1, - /* overloads */ &kOverloads[269], + /* overloads */ &kOverloads[273], }, { /* [97] */ /* fn atomicCompareExchangeWeak(ptr, read_write>, T, T) -> vec2 */ /* num overloads */ 1, - /* overloads */ &kOverloads[270], + /* overloads */ &kOverloads[274], }, }; diff --git a/src/intrinsic_table.inl.tmpl b/src/intrinsic_table.inl.tmpl index f45de8da15..c64bf7d2c8 100644 --- a/src/intrinsic_table.inl.tmpl +++ b/src/intrinsic_table.inl.tmpl @@ -148,7 +148,7 @@ const sem::Type* {{$class}}::Match(MatchState& state, const sem::Type* ty) const {{- range .TemplateParams }} {{- template "DeclareLocalTemplateParam" . }} {{- end }} - if (!match_{{.Name}}(ty{{range .TemplateParams}}, {{.GetName}}{{end}})) { + if (!match_{{TrimPrefix .Name "_"}}(ty{{range .TemplateParams}}, {{.GetName}}{{end}})) { return nullptr; } {{- range .TemplateParams }} @@ -157,7 +157,7 @@ const sem::Type* {{$class}}::Match(MatchState& state, const sem::Type* ty) const return nullptr; } {{- end }} - return build_{{.Name}}(state{{range .TemplateParams}}, {{.GetName}}{{end}}); + return build_{{TrimPrefix .Name "_"}}(state{{range .TemplateParams}}, {{.GetName}}{{end}}); } std::string {{$class}}::String(MatchState&{{if .TemplateParams}} state{{end}}) const { diff --git a/src/intrinsics.def b/src/intrinsics.def index 8d9a1d4e5e..ef8d332e2d 100644 --- a/src/intrinsics.def +++ b/src/intrinsics.def @@ -96,6 +96,11 @@ type texture_storage_2d_array type texture_storage_3d type texture_external +type _modf_result +[[display("_modf_result_vec{N}")]] type _modf_result_vec +type _frexp_result +[[display("_frexp_result_vec{N}")]] type _frexp_result_vec + //////////////////////////////////////////////////////////////////////////////// // Type matchers // // // @@ -308,8 +313,10 @@ fn fma(f32, f32, f32) -> f32 fn fma(vec, vec, vec) -> vec fn fract(f32) -> f32 fn fract(vec) -> vec -fn frexp(f32, ptr) -> f32 -fn frexp(vec, ptr, A>) -> vec +[[deprecated]] fn frexp(f32, ptr) -> f32 +[[deprecated]] fn frexp(vec, ptr, A>) -> vec +fn frexp(f32) -> _frexp_result +fn frexp(vec) -> _frexp_result_vec [[stage("fragment")]] fn fwidth(f32) -> f32 [[stage("fragment")]] fn fwidth(vec) -> vec [[stage("fragment")]] fn fwidthCoarse(f32) -> f32 @@ -341,8 +348,10 @@ fn min(T, T) -> T fn min(vec, vec) -> vec fn mix(f32, f32, f32) -> f32 fn mix(vec, vec, vec) -> vec -fn modf(f32, ptr) -> f32 -fn modf(vec, ptr, A>) -> vec +[[deprecated]] fn modf(f32, ptr) -> f32 +[[deprecated]] fn modf(vec, ptr, A>) -> vec +fn modf(f32) -> _modf_result +fn modf(vec) -> _modf_result_vec fn normalize(vec) -> vec fn pack2x16float(vec2) -> u32 fn pack2x16snorm(vec2) -> u32 diff --git a/src/resolver/inferred_type_test.cc b/src/resolver/inferred_type_test.cc index 5bd957bc22..c625b64bc1 100644 --- a/src/resolver/inferred_type_test.cc +++ b/src/resolver/inferred_type_test.cc @@ -156,11 +156,11 @@ TEST_F(ResolverInferredTypeTest, InferStruct_Pass) { auto* member = Member("x", ty.i32()); auto* str = Structure("S", {member}, {create()}); - auto* expected_type = - create(str, - sem::StructMemberList{create( - member, create(), 0, 0, 0, 4)}, - 0, 4, 4); + auto* expected_type = create( + str, str->name(), + sem::StructMemberList{create( + member, member->symbol(), create(), 0, 0, 0, 4)}, + 0, 4, 4); auto* ctor_expr = Construct(ty.Of(str)); diff --git a/src/resolver/intrinsic_test.cc b/src/resolver/intrinsic_test.cc index 95c0813dc7..00fedfca89 100644 --- a/src/resolver/intrinsic_test.cc +++ b/src/resolver/intrinsic_test.cc @@ -828,7 +828,7 @@ TEST_F(ResolverIntrinsicDataTest, Normalize_Error_NoParams) { )"); } -TEST_F(ResolverIntrinsicDataTest, FrexpScalar) { +TEST_F(ResolverIntrinsicDataTest, DEPRECATED_FrexpScalar) { Global("exp", ty.i32(), ast::StorageClass::kWorkgroup); auto* call = Call("frexp", 1.0f, AddressOf("exp")); WrapInFunction(call); @@ -839,7 +839,7 @@ TEST_F(ResolverIntrinsicDataTest, FrexpScalar) { EXPECT_TRUE(TypeOf(call)->Is()); } -TEST_F(ResolverIntrinsicDataTest, FrexpVector) { +TEST_F(ResolverIntrinsicDataTest, DEPRECATED_FrexpVector) { Global("exp", ty.vec3(), ast::StorageClass::kWorkgroup); auto* call = Call("frexp", vec3(1.0f, 2.0f, 3.0f), AddressOf("exp")); WrapInFunction(call); @@ -851,6 +851,68 @@ TEST_F(ResolverIntrinsicDataTest, FrexpVector) { EXPECT_TRUE(TypeOf(call)->As()->type()->Is()); } +TEST_F(ResolverIntrinsicDataTest, FrexpScalar) { + auto* call = Call("frexp", 1.0f); + WrapInFunction(call); + + EXPECT_TRUE(r()->Resolve()) << r()->error(); + + ASSERT_NE(TypeOf(call), nullptr); + auto* ty = TypeOf(call)->As(); + ASSERT_NE(ty, nullptr); + ASSERT_EQ(ty->Members().size(), 2u); + + auto* sig = ty->Members()[0]; + EXPECT_TRUE(sig->Type()->Is()); + EXPECT_EQ(sig->Offset(), 0u); + EXPECT_EQ(sig->Size(), 4u); + EXPECT_EQ(sig->Align(), 4u); + EXPECT_EQ(sig->Name(), Sym("sig")); + + auto* exp = ty->Members()[1]; + EXPECT_TRUE(exp->Type()->Is()); + EXPECT_EQ(exp->Offset(), 4u); + EXPECT_EQ(exp->Size(), 4u); + EXPECT_EQ(exp->Align(), 4u); + EXPECT_EQ(exp->Name(), Sym("exp")); + + EXPECT_EQ(ty->Size(), 8u); + EXPECT_EQ(ty->SizeNoPadding(), 8u); +} + +TEST_F(ResolverIntrinsicDataTest, FrexpVector) { + auto* call = Call("frexp", vec3()); + WrapInFunction(call); + + EXPECT_TRUE(r()->Resolve()) << r()->error(); + + ASSERT_NE(TypeOf(call), nullptr); + auto* ty = TypeOf(call)->As(); + ASSERT_NE(ty, nullptr); + ASSERT_EQ(ty->Members().size(), 2u); + + auto* sig = ty->Members()[0]; + ASSERT_TRUE(sig->Type()->Is()); + EXPECT_EQ(sig->Type()->As()->Width(), 3u); + EXPECT_TRUE(sig->Type()->As()->type()->Is()); + EXPECT_EQ(sig->Offset(), 0u); + EXPECT_EQ(sig->Size(), 12u); + EXPECT_EQ(sig->Align(), 16u); + EXPECT_EQ(sig->Name(), Sym("sig")); + + auto* exp = ty->Members()[1]; + ASSERT_TRUE(exp->Type()->Is()); + EXPECT_EQ(exp->Type()->As()->Width(), 3u); + EXPECT_TRUE(exp->Type()->As()->type()->Is()); + EXPECT_EQ(exp->Offset(), 16u); + EXPECT_EQ(exp->Size(), 12u); + EXPECT_EQ(exp->Align(), 16u); + EXPECT_EQ(exp->Name(), Sym("exp")); + + EXPECT_EQ(ty->Size(), 32u); + EXPECT_EQ(ty->SizeNoPadding(), 28u); +} + TEST_F(ResolverIntrinsicDataTest, Frexp_Error_FirstParamInt) { Global("exp", ty.i32(), ast::StorageClass::kWorkgroup); auto* call = Call("frexp", 1, AddressOf("exp")); @@ -862,9 +924,11 @@ TEST_F(ResolverIntrinsicDataTest, Frexp_Error_FirstParamInt) { r()->error(), R"(error: no matching call to frexp(i32, ptr) -2 candidate functions: +4 candidate functions: frexp(f32, ptr) -> f32 where: S is function, private or workgroup frexp(vecN, ptr, A>) -> vecN where: S is function, private or workgroup + frexp(f32) -> _frexp_result + frexp(vecN) -> _frexp_result_vecN )"); } @@ -879,9 +943,11 @@ TEST_F(ResolverIntrinsicDataTest, Frexp_Error_SecondParamFloatPtr) { r()->error(), R"(error: no matching call to frexp(f32, ptr) -2 candidate functions: +4 candidate functions: frexp(f32, ptr) -> f32 where: S is function, private or workgroup + frexp(f32) -> _frexp_result frexp(vecN, ptr, A>) -> vecN where: S is function, private or workgroup + frexp(vecN) -> _frexp_result_vecN )"); } @@ -893,9 +959,11 @@ TEST_F(ResolverIntrinsicDataTest, Frexp_Error_SecondParamNotAPointer) { EXPECT_EQ(r()->error(), R"(error: no matching call to frexp(f32, i32) -2 candidate functions: +4 candidate functions: frexp(f32, ptr) -> f32 where: S is function, private or workgroup + frexp(f32) -> _frexp_result frexp(vecN, ptr, A>) -> vecN where: S is function, private or workgroup + frexp(vecN) -> _frexp_result_vecN )"); } @@ -910,13 +978,15 @@ TEST_F(ResolverIntrinsicDataTest, Frexp_Error_VectorSizesDontMatch) { r()->error(), R"(error: no matching call to frexp(vec2, ptr, read_write>) -2 candidate functions: +4 candidate functions: frexp(vecN, ptr, A>) -> vecN where: S is function, private or workgroup + frexp(vecN) -> _frexp_result_vecN frexp(f32, ptr) -> f32 where: S is function, private or workgroup + frexp(f32) -> _frexp_result )"); } -TEST_F(ResolverIntrinsicDataTest, ModfScalar) { +TEST_F(ResolverIntrinsicDataTest, DEPRECATED_ModfScalar) { Global("whole", ty.f32(), ast::StorageClass::kWorkgroup); auto* call = Call("modf", 1.0f, AddressOf("whole")); WrapInFunction(call); @@ -927,7 +997,7 @@ TEST_F(ResolverIntrinsicDataTest, ModfScalar) { EXPECT_TRUE(TypeOf(call)->Is()); } -TEST_F(ResolverIntrinsicDataTest, ModfVector) { +TEST_F(ResolverIntrinsicDataTest, DEPRECATED_ModfVector) { Global("whole", ty.vec3(), ast::StorageClass::kWorkgroup); auto* call = Call("modf", vec3(1.0f, 2.0f, 3.0f), AddressOf("whole")); WrapInFunction(call); @@ -939,6 +1009,68 @@ TEST_F(ResolverIntrinsicDataTest, ModfVector) { EXPECT_TRUE(TypeOf(call)->As()->type()->Is()); } +TEST_F(ResolverIntrinsicDataTest, ModfScalar) { + auto* call = Call("modf", 1.0f); + WrapInFunction(call); + + EXPECT_TRUE(r()->Resolve()) << r()->error(); + + ASSERT_NE(TypeOf(call), nullptr); + auto* ty = TypeOf(call)->As(); + ASSERT_NE(ty, nullptr); + ASSERT_EQ(ty->Members().size(), 2u); + + auto* fract = ty->Members()[0]; + EXPECT_TRUE(fract->Type()->Is()); + EXPECT_EQ(fract->Offset(), 0u); + EXPECT_EQ(fract->Size(), 4u); + EXPECT_EQ(fract->Align(), 4u); + EXPECT_EQ(fract->Name(), Sym("fract")); + + auto* whole = ty->Members()[1]; + EXPECT_TRUE(whole->Type()->Is()); + EXPECT_EQ(whole->Offset(), 4u); + EXPECT_EQ(whole->Size(), 4u); + EXPECT_EQ(whole->Align(), 4u); + EXPECT_EQ(whole->Name(), Sym("whole")); + + EXPECT_EQ(ty->Size(), 8u); + EXPECT_EQ(ty->SizeNoPadding(), 8u); +} + +TEST_F(ResolverIntrinsicDataTest, ModfVector) { + auto* call = Call("modf", vec3()); + WrapInFunction(call); + + EXPECT_TRUE(r()->Resolve()) << r()->error(); + + ASSERT_NE(TypeOf(call), nullptr); + auto* ty = TypeOf(call)->As(); + ASSERT_NE(ty, nullptr); + ASSERT_EQ(ty->Members().size(), 2u); + + auto* fract = ty->Members()[0]; + ASSERT_TRUE(fract->Type()->Is()); + EXPECT_EQ(fract->Type()->As()->Width(), 3u); + EXPECT_TRUE(fract->Type()->As()->type()->Is()); + EXPECT_EQ(fract->Offset(), 0u); + EXPECT_EQ(fract->Size(), 12u); + EXPECT_EQ(fract->Align(), 16u); + EXPECT_EQ(fract->Name(), Sym("fract")); + + auto* whole = ty->Members()[1]; + ASSERT_TRUE(whole->Type()->Is()); + EXPECT_EQ(whole->Type()->As()->Width(), 3u); + EXPECT_TRUE(whole->Type()->As()->type()->Is()); + EXPECT_EQ(whole->Offset(), 16u); + EXPECT_EQ(whole->Size(), 12u); + EXPECT_EQ(whole->Align(), 16u); + EXPECT_EQ(whole->Name(), Sym("whole")); + + EXPECT_EQ(ty->Size(), 32u); + EXPECT_EQ(ty->SizeNoPadding(), 28u); +} + TEST_F(ResolverIntrinsicDataTest, Modf_Error_FirstParamInt) { Global("whole", ty.f32(), ast::StorageClass::kWorkgroup); auto* call = Call("modf", 1, AddressOf("whole")); @@ -950,9 +1082,11 @@ TEST_F(ResolverIntrinsicDataTest, Modf_Error_FirstParamInt) { r()->error(), R"(error: no matching call to modf(i32, ptr) -2 candidate functions: +4 candidate functions: modf(f32, ptr) -> f32 where: S is function, private or workgroup modf(vecN, ptr, A>) -> vecN where: S is function, private or workgroup + modf(f32) -> _modf_result + modf(vecN) -> _modf_result_vecN )"); } @@ -967,9 +1101,11 @@ TEST_F(ResolverIntrinsicDataTest, Modf_Error_SecondParamIntPtr) { r()->error(), R"(error: no matching call to modf(f32, ptr) -2 candidate functions: +4 candidate functions: modf(f32, ptr) -> f32 where: S is function, private or workgroup + modf(f32) -> _modf_result modf(vecN, ptr, A>) -> vecN where: S is function, private or workgroup + modf(vecN) -> _modf_result_vecN )"); } @@ -981,9 +1117,11 @@ TEST_F(ResolverIntrinsicDataTest, Modf_Error_SecondParamNotAPointer) { EXPECT_EQ(r()->error(), R"(error: no matching call to modf(f32, f32) -2 candidate functions: +4 candidate functions: modf(f32, ptr) -> f32 where: S is function, private or workgroup + modf(f32) -> _modf_result modf(vecN, ptr, A>) -> vecN where: S is function, private or workgroup + modf(vecN) -> _modf_result_vecN )"); } @@ -998,9 +1136,11 @@ TEST_F(ResolverIntrinsicDataTest, Modf_Error_VectorSizesDontMatch) { r()->error(), R"(error: no matching call to modf(vec2, ptr, read_write>) -2 candidate functions: +4 candidate functions: modf(vecN, ptr, A>) -> vecN where: S is function, private or workgroup + modf(vecN) -> _modf_result_vecN modf(f32, ptr) -> f32 where: S is function, private or workgroup + modf(f32) -> _modf_result )"); } diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc index 26565685f6..a180646d23 100644 --- a/src/resolver/resolver.cc +++ b/src/resolver/resolver.cc @@ -2998,7 +2998,7 @@ bool Resolver::MemberAccessor(ast::MemberAccessorExpression* expr) { const sem::StructMember* member = nullptr; for (auto* m : str->Members()) { - if (m->Declaration()->symbol() == symbol) { + if (m->Name() == symbol) { ret = m->Type(); member = m; break; @@ -4088,7 +4088,7 @@ sem::Struct* Resolver::Structure(const ast::Struct* str) { offset = utils::RoundUp(align, offset); auto* sem_member = builder_->create( - member, const_cast(type), + member, member->symbol(), const_cast(type), static_cast(sem_members.size()), offset, align, size); builder_->Sem().Add(member, sem_member); sem_members.emplace_back(sem_member); @@ -4100,8 +4100,9 @@ sem::Struct* Resolver::Structure(const ast::Struct* str) { auto size_no_padding = struct_size; struct_size = utils::RoundUp(struct_align, struct_size); - auto* out = builder_->create(str, sem_members, struct_align, - struct_size, size_no_padding); + auto* out = + builder_->create(str, str->name(), sem_members, struct_align, + struct_size, size_no_padding); // Keep track of atomic members for validation after all usages have been // determined. diff --git a/src/sem/sem_struct_test.cc b/src/sem/sem_struct_test.cc index b974ee765e..ed0eba3163 100644 --- a/src/sem/sem_struct_test.cc +++ b/src/sem/sem_struct_test.cc @@ -27,8 +27,9 @@ TEST_F(StructTest, Creation) { auto* impl = create(name, ast::StructMemberList{}, ast::DecorationList{}); auto* ptr = impl; - auto* s = create(impl, StructMemberList{}, 4 /* align */, - 8 /* size */, 16 /* size_no_padding */); + auto* s = + create(impl, impl->name(), StructMemberList{}, 4 /* align */, + 8 /* size */, 16 /* size_no_padding */); EXPECT_EQ(s->Declaration(), ptr); EXPECT_EQ(s->Align(), 4u); EXPECT_EQ(s->Size(), 8u); @@ -39,8 +40,9 @@ TEST_F(StructTest, TypeName) { auto name = Sym("my_struct"); auto* impl = create(name, ast::StructMemberList{}, ast::DecorationList{}); - auto* s = create(impl, StructMemberList{}, 4 /* align */, - 4 /* size */, 4 /* size_no_padding */); + auto* s = + create(impl, impl->name(), StructMemberList{}, 4 /* align */, + 4 /* size */, 4 /* size_no_padding */); EXPECT_EQ(s->type_name(), "__struct_$1"); } @@ -48,8 +50,9 @@ TEST_F(StructTest, FriendlyName) { auto name = Sym("my_struct"); auto* impl = create(name, ast::StructMemberList{}, ast::DecorationList{}); - auto* s = create(impl, StructMemberList{}, 4 /* align */, - 4 /* size */, 4 /* size_no_padding */); + auto* s = + create(impl, impl->name(), StructMemberList{}, 4 /* align */, + 4 /* size */, 4 /* size_no_padding */); EXPECT_EQ(s->FriendlyName(Symbols()), "my_struct"); } diff --git a/src/sem/struct.cc b/src/sem/struct.cc index 210a70e48f..dea2fd112d 100644 --- a/src/sem/struct.cc +++ b/src/sem/struct.cc @@ -27,11 +27,13 @@ namespace tint { namespace sem { Struct::Struct(const ast::Struct* declaration, + Symbol name, StructMemberList members, uint32_t align, uint32_t size, uint32_t size_no_padding) : declaration_(declaration), + name_(name), members_(std::move(members)), align_(align), size_(size), @@ -57,7 +59,7 @@ const StructMember* Struct::FindMember(Symbol name) const { } std::string Struct::type_name() const { - return declaration_->type_name(); + return "__struct_" + name_.to_str(); } uint32_t Struct::Align() const { @@ -69,7 +71,7 @@ uint32_t Struct::Size() const { } std::string Struct::FriendlyName(const SymbolTable& symbols) const { - return symbols.NameFor(declaration_->name()); + return symbols.NameFor(name_); } bool Struct::IsConstructible() const { @@ -77,12 +79,14 @@ bool Struct::IsConstructible() const { } StructMember::StructMember(ast::StructMember* declaration, + Symbol name, sem::Type* type, uint32_t index, uint32_t offset, uint32_t align, uint32_t size) : declaration_(declaration), + name_(name), type_(type), index_(index), offset_(offset), diff --git a/src/sem/struct.h b/src/sem/struct.h index b5357cb96f..f6014aa276 100644 --- a/src/sem/struct.h +++ b/src/sem/struct.h @@ -58,12 +58,14 @@ class Struct : public Castable { public: /// Constructor /// @param declaration the AST structure declaration + /// @param name the name of the structure /// @param members the structure members /// @param align the byte alignment of the structure /// @param size the byte size of the structure /// @param size_no_padding size of the members without the end of structure /// alignment padding Struct(const ast::Struct* declaration, + Symbol name, StructMemberList members, uint32_t align, uint32_t size, @@ -75,6 +77,9 @@ class Struct : public Castable { /// @returns the struct const ast::Struct* Declaration() const { return declaration_; } + /// @returns the name of the structure + Symbol Name() const { return name_; } + /// @returns the members of the structure const StructMemberList& Members() const { return members_; } @@ -156,6 +161,7 @@ class Struct : public Castable { uint64_t LargestMemberBaseAlignment(MemoryLayout mem_layout) const; ast::Struct const* const declaration_; + Symbol const name_; StructMemberList const members_; uint32_t const align_; uint32_t const size_; @@ -170,12 +176,14 @@ class StructMember : public Castable { public: /// Constructor /// @param declaration the AST declaration node + /// @param name the name of the structure /// @param type the type of the member /// @param index the index of the member in the structure /// @param offset the byte offset from the base of the structure /// @param align the byte alignment of the member /// @param size the byte size of the member StructMember(ast::StructMember* declaration, + Symbol name, sem::Type* type, uint32_t index, uint32_t offset, @@ -188,6 +196,9 @@ class StructMember : public Castable { /// @returns the AST declaration node ast::StructMember* Declaration() const { return declaration_; } + /// @returns the name of the structure + Symbol Name() const { return name_; } + /// @returns the type of the member sem::Type* Type() const { return type_; } @@ -205,6 +216,7 @@ class StructMember : public Castable { private: ast::StructMember* const declaration_; + Symbol const name_; sem::Type* const type_; uint32_t const index_; uint32_t const offset_; diff --git a/src/transform/transform_test.cc b/src/transform/transform_test.cc index 887c4106e2..87b6ab261e 100644 --- a/src/transform/transform_test.cc +++ b/src/transform/transform_test.cc @@ -106,8 +106,9 @@ TEST_F(CreateASTTypeForTest, ArrayNonImplicitStride) { TEST_F(CreateASTTypeForTest, Struct) { auto* str = create([](ProgramBuilder& b) { auto* decl = b.Structure("S", {}, {}); - return b.create(decl, sem::StructMemberList{}, 4 /* align */, - 4 /* size */, 4 /* size_no_padding */); + return b.create(decl, decl->name(), sem::StructMemberList{}, + 4 /* align */, 4 /* size */, + 4 /* size_no_padding */); }); ASSERT_TRUE(str->Is()); EXPECT_EQ( diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc index e3ed808ef1..5ba656adc7 100644 --- a/src/writer/hlsl/generator_impl.cc +++ b/src/writer/hlsl/generator_impl.cc @@ -147,7 +147,7 @@ bool GeneratorImpl::Generate() { return false; } } else if (auto* str = decl->As()) { - if (!EmitStructType(builder_.Sem().Get(str))) { + if (!EmitStructType(current_buffer_, builder_.Sem().Get(str))) { return false; } } else if (auto* func = decl->As()) { @@ -521,6 +521,8 @@ bool GeneratorImpl::EmitCall(std::ostream& out, ast::CallExpression* expr) { return EmitTextureCall(out, expr, intrinsic); } else if (intrinsic->Type() == sem::IntrinsicType::kSelect) { return EmitSelectCall(out, expr); + } else if (intrinsic->Type() == sem::IntrinsicType::kModf) { + return EmitModfCall(out, expr, intrinsic); } else if (intrinsic->Type() == sem::IntrinsicType::kFrexp) { return EmitFrexpCall(out, expr, intrinsic); } else if (intrinsic->Type() == sem::IntrinsicType::kIsNormal) { @@ -1270,9 +1272,93 @@ bool GeneratorImpl::EmitSelectCall(std::ostream& out, return true; } +bool GeneratorImpl::EmitModfCall(std::ostream& out, + ast::CallExpression* expr, + const sem::Intrinsic* intrinsic) { + if (expr->params().size() == 1) { + return CallIntrinsicHelper( + out, expr, intrinsic, + [&](TextBuffer* b, const std::vector& params) { + auto* ty = intrinsic->Parameters()[0]->Type(); + auto in = params[0]; + + std::string width; + if (auto* vec = ty->As()) { + width = std::to_string(vec->Width()); + } + + // Emit the builtin return type unique to this overload. This does not + // exist in the AST, so it will not be generated in Generate(). + if (!EmitStructType(&helpers_, + intrinsic->ReturnType()->As())) { + return false; + } + + line(b) << "float" << width << " whole;"; + line(b) << "float" << width << " fract = modf(" << in << ", whole);"; + { + auto l = line(b); + if (!EmitType(l, intrinsic->ReturnType(), ast::StorageClass::kNone, + ast::Access::kUndefined, "")) { + return false; + } + l << " result = {fract, whole};"; + } + line(b) << "return result;"; + return true; + }); + } + + // DEPRECATED + out << "modf"; + ScopedParen sp(out); + if (!EmitExpression(out, expr->params()[0])) { + return false; + } + out << ", "; + if (!EmitExpression(out, expr->params()[1])) { + return false; + } + return true; +} + bool GeneratorImpl::EmitFrexpCall(std::ostream& out, ast::CallExpression* expr, const sem::Intrinsic* intrinsic) { + if (expr->params().size() == 1) { + return CallIntrinsicHelper( + out, expr, intrinsic, + [&](TextBuffer* b, const std::vector& params) { + auto* ty = intrinsic->Parameters()[0]->Type(); + auto in = params[0]; + + std::string width; + if (auto* vec = ty->As()) { + width = std::to_string(vec->Width()); + } + + // Emit the builtin return type unique to this overload. This does not + // exist in the AST, so it will not be generated in Generate(). + if (!EmitStructType(&helpers_, + intrinsic->ReturnType()->As())) { + return false; + } + + line(b) << "float" << width << " exp;"; + line(b) << "float" << width << " sig = frexp(" << in << ", exp);"; + { + auto l = line(b); + if (!EmitType(l, intrinsic->ReturnType(), ast::StorageClass::kNone, + ast::Access::kUndefined, "")) { + return false; + } + l << " result = {sig, int" << width << "(exp)};"; + } + line(b) << "return result;"; + return true; + }); + } + // DEPRECATED // Exponent is an integer in WGSL, but HLSL wants a float. // We need to make the call with a temporary float, and then cast. return CallIntrinsicHelper( @@ -2906,7 +2992,7 @@ bool GeneratorImpl::EmitType(std::ostream& out, } out << "State"; } else if (auto* str = type->As()) { - out << builder_.Symbols().NameFor(str->Declaration()->name()); + out << StructName(str); } else if (auto* tex = type->As()) { auto* storage = tex->As(); auto* multism = tex->As(); @@ -3015,7 +3101,7 @@ bool GeneratorImpl::EmitTypeAndName(std::ostream& out, return true; } -bool GeneratorImpl::EmitStructType(const sem::Struct* str) { +bool GeneratorImpl::EmitStructType(TextBuffer* b, const sem::Struct* str) { auto storage_class_uses = str->StorageClassUsage(); if (storage_class_uses.size() == (storage_class_uses.count(ast::StorageClass::kStorage) + @@ -3029,71 +3115,74 @@ bool GeneratorImpl::EmitStructType(const sem::Struct* str) { return true; } - auto struct_name = builder_.Symbols().NameFor(str->Declaration()->name()); - line() << "struct " << struct_name << " {"; + line(b) << "struct " << StructName(str) << " {"; { - ScopedIndent si(this); + ScopedIndent si(b); for (auto* mem : str->Members()) { - auto name = builder_.Symbols().NameFor(mem->Declaration()->symbol()); + auto name = builder_.Symbols().NameFor(mem->Name()); auto* ty = mem->Type(); - auto out = line(); + auto out = line(b); std::string pre, post; - for (auto* deco : mem->Declaration()->decorations()) { - if (auto* location = deco->As()) { - auto& pipeline_stage_uses = str->PipelineStageUses(); - if (pipeline_stage_uses.size() != 1) { - TINT_ICE(Writer, diagnostics_) - << "invalid entry point IO struct uses"; - } + if (auto* decl = mem->Declaration()) { + for (auto* deco : decl->decorations()) { + if (auto* location = deco->As()) { + auto& pipeline_stage_uses = str->PipelineStageUses(); + if (pipeline_stage_uses.size() != 1) { + TINT_ICE(Writer, diagnostics_) + << "invalid entry point IO struct uses"; + } - if (pipeline_stage_uses.count( - sem::PipelineStageUsage::kVertexInput)) { - post += " : TEXCOORD" + std::to_string(location->value()); - } else if (pipeline_stage_uses.count( - sem::PipelineStageUsage::kVertexOutput)) { - post += " : TEXCOORD" + std::to_string(location->value()); - } else if (pipeline_stage_uses.count( - sem::PipelineStageUsage::kFragmentInput)) { - post += " : TEXCOORD" + std::to_string(location->value()); - } else if (pipeline_stage_uses.count( - sem::PipelineStageUsage::kFragmentOutput)) { - post += " : SV_Target" + std::to_string(location->value()); - } else { + if (pipeline_stage_uses.count( + sem::PipelineStageUsage::kVertexInput)) { + post += " : TEXCOORD" + std::to_string(location->value()); + } else if (pipeline_stage_uses.count( + sem::PipelineStageUsage::kVertexOutput)) { + post += " : TEXCOORD" + std::to_string(location->value()); + } else if (pipeline_stage_uses.count( + sem::PipelineStageUsage::kFragmentInput)) { + post += " : TEXCOORD" + std::to_string(location->value()); + } else if (pipeline_stage_uses.count( + sem::PipelineStageUsage::kFragmentOutput)) { + post += " : SV_Target" + std::to_string(location->value()); + } else { + TINT_ICE(Writer, diagnostics_) + << "invalid use of location decoration"; + } + } else if (auto* builtin = deco->As()) { + auto attr = builtin_to_attribute(builtin->value()); + if (attr.empty()) { + diagnostics_.add_error(diag::System::Writer, + "unsupported builtin"); + return false; + } + post += " : " + attr; + } else if (auto* interpolate = + deco->As()) { + auto mod = interpolation_to_modifiers(interpolate->type(), + interpolate->sampling()); + if (mod.empty()) { + diagnostics_.add_error(diag::System::Writer, + "unsupported interpolation"); + return false; + } + pre += mod; + + } else if (deco->Is()) { + // Note: `precise` is not exactly the same as `invariant`, but is + // stricter and therefore provides the necessary guarantees. + // See discussion here: https://github.com/gpuweb/gpuweb/issues/893 + pre += "precise "; + } else if (!deco->IsAnyOf()) { TINT_ICE(Writer, diagnostics_) - << "invalid use of location decoration"; - } - } else if (auto* builtin = deco->As()) { - auto attr = builtin_to_attribute(builtin->value()); - if (attr.empty()) { - diagnostics_.add_error(diag::System::Writer, "unsupported builtin"); + << "unhandled struct member attribute: " << deco->name(); return false; } - post += " : " + attr; - } else if (auto* interpolate = deco->As()) { - auto mod = interpolation_to_modifiers(interpolate->type(), - interpolate->sampling()); - if (mod.empty()) { - diagnostics_.add_error(diag::System::Writer, - "unsupported interpolation"); - return false; - } - pre += mod; - - } else if (deco->Is()) { - // Note: `precise` is not exactly the same as `invariant`, but is - // stricter and therefore provides the necessary guarantees. - // See discussion here: https://github.com/gpuweb/gpuweb/issues/893 - pre += "precise "; - } else if (!deco->IsAnyOf()) { - TINT_ICE(Writer, diagnostics_) - << "unhandled struct member attribute: " << deco->name(); - return false; } } @@ -3106,7 +3195,7 @@ bool GeneratorImpl::EmitStructType(const sem::Struct* str) { } } - line() << "};"; + line(b) << "};"; return true; } @@ -3239,11 +3328,14 @@ bool GeneratorImpl::CallIntrinsicHelper(std::ostream& out, F&& build) { // Generate the helper function if it hasn't been created already auto fn = utils::GetOrCreate(intrinsics_, intrinsic, [&]() -> std::string { + TextBuffer b; + TINT_DEFER(helpers_.Append(b)); + auto fn_name = UniqueIdentifier(std::string("tint_") + sem::str(intrinsic->Type())); std::vector parameter_names; { - auto decl = line(&helpers_); + auto decl = line(&b); if (!EmitTypeAndName(decl, intrinsic->ReturnType(), ast::StorageClass::kNone, ast::Access::kUndefined, fn_name)) { @@ -3271,13 +3363,13 @@ bool GeneratorImpl::CallIntrinsicHelper(std::ostream& out, decl << " {"; } { - ScopedIndent si(&helpers_); - if (!build(&helpers_, parameter_names)) { + ScopedIndent si(&b); + if (!build(&b, parameter_names)) { return ""; } } - line(&helpers_) << "}"; - line(&helpers_); + line(&b) << "}"; + line(&b); return fn_name; }); diff --git a/src/writer/hlsl/generator_impl.h b/src/writer/hlsl/generator_impl.h index 1fdd404456..8874b2d65e 100644 --- a/src/writer/hlsl/generator_impl.h +++ b/src/writer/hlsl/generator_impl.h @@ -155,6 +155,14 @@ class GeneratorImpl : public TextGenerator { /// @param expr the call expression /// @returns true if the call expression is emitted bool EmitSelectCall(std::ostream& out, ast::CallExpression* expr); + /// Handles generating a call to the `modf()` intrinsic + /// @param out the output of the expression stream + /// @param expr the call expression + /// @param intrinsic the semantic information for the intrinsic + /// @returns true if the call expression is emitted + bool EmitModfCall(std::ostream& out, + ast::CallExpression* expr, + const sem::Intrinsic* intrinsic); /// Handles generating a call to the `frexp()` intrinsic /// @param out the output of the expression stream /// @param expr the call expression @@ -320,7 +328,7 @@ class GeneratorImpl : public TextGenerator { /// @param type the type to generate /// @param storage_class the storage class of the variable /// @param access the access control type of the variable - /// @param name the name of the variable, used for array emission. + /// @param name the name to emit /// @returns true if the type is emitted bool EmitTypeAndName(std::ostream& out, const sem::Type* type, @@ -328,9 +336,10 @@ class GeneratorImpl : public TextGenerator { ast::Access access, const std::string& name); /// Handles generating a structure declaration + /// @param buffer the text buffer that the type declaration will be written to /// @param ty the struct to generate /// @returns true if the struct is emitted - bool EmitStructType(const sem::Struct* ty); + bool EmitStructType(TextBuffer* buffer, const sem::Struct* ty); /// Handles a unary op expression /// @param out the output of the expression stream /// @param expr the expression to emit @@ -413,7 +422,6 @@ class GeneratorImpl : public TextGenerator { /// `buffer` is the body of the generated function /// `params` is the name of all the generated function parameters /// @returns true if the call expression is emitted - template bool CallIntrinsicHelper(std::ostream& out, ast::CallExpression* call, diff --git a/src/writer/hlsl/generator_impl_type_test.cc b/src/writer/hlsl/generator_impl_type_test.cc index 3417ec1d2e..56baf78368 100644 --- a/src/writer/hlsl/generator_impl_type_test.cc +++ b/src/writer/hlsl/generator_impl_type_test.cc @@ -173,9 +173,10 @@ TEST_F(HlslGeneratorImplTest_Type, EmitType_StructDecl) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); - EXPECT_EQ(gen.result(), R"(struct S { + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); + EXPECT_EQ(buf.String(), R"(struct S { int a; float b; }; @@ -197,9 +198,10 @@ TEST_F(HlslGeneratorImplTest_Type, EmitType_StructDecl_OmittedIfStorageBuffer) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); - EXPECT_EQ(gen.result(), ""); + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); + EXPECT_EQ(buf.String(), ""); } TEST_F(HlslGeneratorImplTest_Type, EmitType_Struct) { @@ -247,9 +249,10 @@ TEST_F(HlslGeneratorImplTest_Type, EmitType_Struct_WithOffsetAttributes) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); - EXPECT_EQ(gen.result(), R"(struct S { + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); + EXPECT_EQ(buf.String(), R"(struct S { int a; float b; }; diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc index eee283bf93..f4efca46d7 100644 --- a/src/writer/msl/generator_impl.cc +++ b/src/writer/msl/generator_impl.cc @@ -150,7 +150,7 @@ bool GeneratorImpl::Generate() { bool GeneratorImpl::EmitTypeDecl(const sem::Type* ty) { if (auto* str = ty->As()) { - if (!EmitStructType(str)) { + if (!EmitStructType(current_buffer_, str)) { return false; } } else { @@ -392,6 +392,11 @@ bool GeneratorImpl::EmitIntrinsicCall(std::ostream& out, auto name = generate_builtin_name(intrinsic); switch (intrinsic->Type()) { + case sem::IntrinsicType::kModf: + return EmitModfCall(out, expr, intrinsic); + case sem::IntrinsicType::kFrexp: + return EmitFrexpCall(out, expr, intrinsic); + case sem::IntrinsicType::kPack2x16float: case sem::IntrinsicType::kUnpack2x16float: { if (intrinsic->Type() == sem::IntrinsicType::kPack2x16float) { @@ -423,28 +428,6 @@ bool GeneratorImpl::EmitIntrinsicCall(std::ostream& out, return true; } - case sem::IntrinsicType::kFrexp: - case sem::IntrinsicType::kModf: { - // TODO(bclayton): These intrinsics are likely to change signature. - // See: crbug.com/tint/54 and https://github.com/gpuweb/gpuweb/issues/1480 - out << name; - ScopedParen sp(out); - if (!EmitExpression(out, expr->params()[0])) { - return false; - } - out << ", "; - { - // MSL has a reference for the second parameter, but WGSL has a pointer. - // Dereference the argument. - out << "*"; - ScopedParen sp2(out); - if (!EmitExpression(out, expr->params()[1])) { - return false; - } - } - return true; - } - case sem::IntrinsicType::kLength: { auto* sem = builder_.Sem().Get(expr->params()[0]); if (sem->Type()->UnwrapRef()->is_scalar()) { @@ -869,6 +852,105 @@ bool GeneratorImpl::EmitTextureCall(std::ostream& out, return true; } +bool GeneratorImpl::EmitModfCall(std::ostream& out, + ast::CallExpression* expr, + const sem::Intrinsic* intrinsic) { + if (expr->params().size() == 1) { + return CallIntrinsicHelper( + out, expr, intrinsic, + [&](TextBuffer* b, const std::vector& params) { + auto* ty = intrinsic->Parameters()[0]->Type(); + auto in = params[0]; + + std::string width; + if (auto* vec = ty->As()) { + width = std::to_string(vec->Width()); + } + + // Emit the builtin return type unique to this overload. This does not + // exist in the AST, so it will not be generated in Generate(). + if (!EmitStructType(&helpers_, + intrinsic->ReturnType()->As())) { + return false; + } + + line(b) << "float" << width << " whole;"; + line(b) << "float" << width << " fract = modf(" << in << ", whole);"; + line(b) << "return {fract, whole};"; + return true; + }); + } + // DEPRECATED + return CallIntrinsicHelper( + out, expr, intrinsic, + [&](TextBuffer* b, const std::vector& params) { + auto* ty = intrinsic->Parameters()[0]->Type(); + auto in = params[0]; + auto out_whole = params[1]; + + std::string width; + if (auto* vec = ty->As()) { + width = std::to_string(vec->Width()); + } + + line(b) << "float" << width << " whole;"; + line(b) << "float" << width << " fract = modf(" << in << ", whole);"; + line(b) << "*" << out_whole << " = whole;"; + line(b) << "return fract;"; + return true; + }); +} + +bool GeneratorImpl::EmitFrexpCall(std::ostream& out, + ast::CallExpression* expr, + const sem::Intrinsic* intrinsic) { + if (expr->params().size() == 1) { + return CallIntrinsicHelper( + out, expr, intrinsic, + [&](TextBuffer* b, const std::vector& params) { + auto* ty = intrinsic->Parameters()[0]->Type(); + auto in = params[0]; + + std::string width; + if (auto* vec = ty->As()) { + width = std::to_string(vec->Width()); + } + + // Emit the builtin return type unique to this overload. This does not + // exist in the AST, so it will not be generated in Generate(). + if (!EmitStructType(&helpers_, + intrinsic->ReturnType()->As())) { + return false; + } + + line(b) << "int" << width << " exp;"; + line(b) << "float" << width << " sig = frexp(" << in << ", exp);"; + line(b) << "return {sig, exp};"; + return true; + }); + } + + // DEPRECATED + return CallIntrinsicHelper( + out, expr, intrinsic, + [&](TextBuffer* b, const std::vector& params) { + auto* ty = intrinsic->Parameters()[0]->Type(); + auto in = params[0]; + auto out_exp = params[1]; + + std::string width; + if (auto* vec = ty->As()) { + width = std::to_string(vec->Width()); + } + + line(b) << "int" << width << " exp;"; + line(b) << "float" << width << " sig = frexp(" << in << ", exp);"; + line(b) << "*" << out_exp << " = exp;"; + line(b) << "return sig;"; + return true; + }); +} + std::string GeneratorImpl::generate_builtin_name( const sem::Intrinsic* intrinsic) { std::string out = ""; @@ -1846,7 +1928,8 @@ bool GeneratorImpl::EmitSwitch(ast::SwitchStatement* stmt) { bool GeneratorImpl::EmitType(std::ostream& out, const sem::Type* type, - const std::string& name) { + const std::string& name, + bool* name_printed /* = nullptr */) { if (auto* atomic = type->As()) { if (atomic->Type()->Is()) { out << "atomic_int"; @@ -1877,6 +1960,9 @@ bool GeneratorImpl::EmitType(std::ostream& out, } if (!name.empty()) { out << " " << name; + if (name_printed) { + *name_printed = true; + } } for (uint32_t size : sizes) { out << "[" << size << "]"; @@ -1914,6 +2000,9 @@ bool GeneratorImpl::EmitType(std::ostream& out, out << " "; if (ptr->StoreType()->Is()) { std::string inner = "(*" + name + ")"; + if (name_printed) { + *name_printed = true; + } if (!EmitType(out, ptr->StoreType(), inner)) { return false; } @@ -1922,6 +2011,9 @@ bool GeneratorImpl::EmitType(std::ostream& out, return false; } out << "* " << name; + if (name_printed) { + *name_printed = true; + } } return true; } @@ -1934,7 +2026,7 @@ bool GeneratorImpl::EmitType(std::ostream& out, if (auto* str = type->As()) { // The struct type emits as just the name. The declaration would be emitted // as part of emitting the declared types. - out << program_->Symbols().NameFor(str->Declaration()->name()); + out << StructName(str); return true; } @@ -2031,6 +2123,19 @@ bool GeneratorImpl::EmitType(std::ostream& out, return false; } +bool GeneratorImpl::EmitTypeAndName(std::ostream& out, + const sem::Type* type, + const std::string& name) { + bool name_printed = false; + if (!EmitType(out, type, name, &name_printed)) { + return false; + } + if (!name_printed) { + out << " " << name; + } + return true; +} + bool GeneratorImpl::EmitStorageClass(std::ostream& out, ast::StorageClass sc) { switch (sc) { case ast::StorageClass::kFunction: @@ -2069,9 +2174,8 @@ bool GeneratorImpl::EmitPackedType(std::ostream& out, return EmitType(out, type, name); } -bool GeneratorImpl::EmitStructType(const sem::Struct* str) { - line() << "struct " << program_->Symbols().NameFor(str->Declaration()->name()) - << " {"; +bool GeneratorImpl::EmitStructType(TextBuffer* b, const sem::Struct* str) { + line(b) << "struct " << StructName(str) << " {"; bool is_host_shareable = str->IsHostShareable(); @@ -2089,16 +2193,17 @@ bool GeneratorImpl::EmitStructType(const sem::Struct* str) { name = UniqueIdentifier("tint_pad"); } while (str->FindMember(program_->Symbols().Get(name))); - auto out = line(); + auto out = line(b); add_byte_offset_comment(out, msl_offset); out << "int8_t " << name << "[" << size << "];"; }; - increment_indent(); + b->IncrementIndent(); + uint32_t msl_offset = 0; for (auto* mem : str->Members()) { - auto out = line(); - auto name = program_->Symbols().NameFor(mem->Declaration()->symbol()); + auto out = line(b); + auto name = program_->Symbols().NameFor(mem->Name()); auto wgsl_offset = mem->Offset(); if (is_host_shareable) { @@ -2135,53 +2240,56 @@ bool GeneratorImpl::EmitStructType(const sem::Struct* str) { } // Emit decorations - for (auto* deco : mem->Declaration()->decorations()) { - if (auto* builtin = deco->As()) { - auto attr = builtin_to_attribute(builtin->value()); - if (attr.empty()) { - diagnostics_.add_error(diag::System::Writer, "unknown builtin"); - return false; - } - out << " [[" << attr << "]]"; - } else if (auto* loc = deco->As()) { - auto& pipeline_stage_uses = str->PipelineStageUses(); - if (pipeline_stage_uses.size() != 1) { - TINT_ICE(Writer, diagnostics_) - << "invalid entry point IO struct uses"; - } + if (auto* decl = mem->Declaration()) { + for (auto* deco : decl->decorations()) { + if (auto* builtin = deco->As()) { + auto attr = builtin_to_attribute(builtin->value()); + if (attr.empty()) { + diagnostics_.add_error(diag::System::Writer, "unknown builtin"); + return false; + } + out << " [[" << attr << "]]"; + } else if (auto* loc = deco->As()) { + auto& pipeline_stage_uses = str->PipelineStageUses(); + if (pipeline_stage_uses.size() != 1) { + TINT_ICE(Writer, diagnostics_) + << "invalid entry point IO struct uses"; + } - if (pipeline_stage_uses.count(sem::PipelineStageUsage::kVertexInput)) { - out << " [[attribute(" + std::to_string(loc->value()) + ")]]"; - } else if (pipeline_stage_uses.count( - sem::PipelineStageUsage::kVertexOutput)) { - out << " [[user(locn" + std::to_string(loc->value()) + ")]]"; - } else if (pipeline_stage_uses.count( - sem::PipelineStageUsage::kFragmentInput)) { - out << " [[user(locn" + std::to_string(loc->value()) + ")]]"; - } else if (pipeline_stage_uses.count( - sem::PipelineStageUsage::kFragmentOutput)) { - out << " [[color(" + std::to_string(loc->value()) + ")]]"; - } else { + if (pipeline_stage_uses.count( + sem::PipelineStageUsage::kVertexInput)) { + out << " [[attribute(" + std::to_string(loc->value()) + ")]]"; + } else if (pipeline_stage_uses.count( + sem::PipelineStageUsage::kVertexOutput)) { + out << " [[user(locn" + std::to_string(loc->value()) + ")]]"; + } else if (pipeline_stage_uses.count( + sem::PipelineStageUsage::kFragmentInput)) { + out << " [[user(locn" + std::to_string(loc->value()) + ")]]"; + } else if (pipeline_stage_uses.count( + sem::PipelineStageUsage::kFragmentOutput)) { + out << " [[color(" + std::to_string(loc->value()) + ")]]"; + } else { + TINT_ICE(Writer, diagnostics_) + << "invalid use of location decoration"; + } + } else if (auto* interpolate = deco->As()) { + auto attr = interpolation_to_attribute(interpolate->type(), + interpolate->sampling()); + if (attr.empty()) { + diagnostics_.add_error(diag::System::Writer, + "unknown interpolation attribute"); + return false; + } + out << " [[" << attr << "]]"; + } else if (deco->Is()) { + out << " [[invariant]]"; + has_invariant_ = true; + } else if (!deco->IsAnyOf()) { TINT_ICE(Writer, diagnostics_) - << "invalid use of location decoration"; + << "unhandled struct member attribute: " << deco->name(); } - } else if (auto* interpolate = deco->As()) { - auto attr = interpolation_to_attribute(interpolate->type(), - interpolate->sampling()); - if (attr.empty()) { - diagnostics_.add_error(diag::System::Writer, - "unknown interpolation attribute"); - return false; - } - out << " [[" << attr << "]]"; - } else if (deco->Is()) { - out << " [[invariant]]"; - has_invariant_ = true; - } else if (!deco->IsAnyOf()) { - TINT_ICE(Writer, diagnostics_) - << "unhandled struct member attribute: " << deco->name(); } } @@ -2204,9 +2312,9 @@ bool GeneratorImpl::EmitStructType(const sem::Struct* str) { add_padding(str->Size() - msl_offset, msl_offset); } - decrement_indent(); + b->DecrementIndent(); - line() << "};"; + line(b) << "};"; return true; } @@ -2406,6 +2514,72 @@ GeneratorImpl::SizeAndAlign GeneratorImpl::MslPackedTypeSizeAndAlign( return {}; } +template +bool GeneratorImpl::CallIntrinsicHelper(std::ostream& out, + ast::CallExpression* call, + const sem::Intrinsic* intrinsic, + F&& build) { + // Generate the helper function if it hasn't been created already + auto fn = utils::GetOrCreate(intrinsics_, intrinsic, [&]() -> std::string { + TextBuffer b; + TINT_DEFER(helpers_.Append(b)); + + auto fn_name = + UniqueIdentifier(std::string("tint_") + sem::str(intrinsic->Type())); + std::vector parameter_names; + { + auto decl = line(&b); + if (!EmitTypeAndName(decl, intrinsic->ReturnType(), fn_name)) { + return ""; + } + { + ScopedParen sp(decl); + for (auto* param : intrinsic->Parameters()) { + if (!parameter_names.empty()) { + decl << ", "; + } + auto param_name = "param_" + std::to_string(parameter_names.size()); + if (!EmitTypeAndName(decl, param->Type(), param_name)) { + return ""; + } + parameter_names.emplace_back(std::move(param_name)); + } + } + decl << " {"; + } + { + ScopedIndent si(&b); + if (!build(&b, parameter_names)) { + return ""; + } + } + line(&b) << "}"; + line(&b); + return fn_name; + }); + + if (fn.empty()) { + return false; + } + + // Call the helper + out << fn; + { + ScopedParen sp(out); + bool first = true; + for (auto* arg : call->params()) { + if (!first) { + out << ", "; + } + first = false; + if (!EmitExpression(out, arg)) { + return false; + } + } + } + return true; +} + } // namespace msl } // namespace writer } // namespace tint diff --git a/src/writer/msl/generator_impl.h b/src/writer/msl/generator_impl.h index fde3c9a51a..899025b6d3 100644 --- a/src/writer/msl/generator_impl.h +++ b/src/writer/msl/generator_impl.h @@ -126,6 +126,22 @@ class GeneratorImpl : public TextGenerator { bool EmitTextureCall(std::ostream& out, ast::CallExpression* expr, const sem::Intrinsic* intrinsic); + /// Handles generating a call to the `modf()` intrinsic + /// @param out the output of the expression stream + /// @param expr the call expression + /// @param intrinsic the semantic information for the intrinsic + /// @returns true if the call expression is emitted + bool EmitModfCall(std::ostream& out, + ast::CallExpression* expr, + const sem::Intrinsic* intrinsic); + /// Handles generating a call to the `frexp()` intrinsic + /// @param out the output of the expression stream + /// @param expr the call expression + /// @param intrinsic the semantic information for the intrinsic + /// @returns true if the call expression is emitted + bool EmitFrexpCall(std::ostream& out, + ast::CallExpression* expr, + const sem::Intrinsic* intrinsic); /// Handles a case statement /// @param stmt the statement /// @returns true if the statement was emitted successfully @@ -218,10 +234,20 @@ class GeneratorImpl : public TextGenerator { /// @param out the output of the type stream /// @param type the type to generate /// @param name the name of the variable, only used for array emission + /// @param name_printed (optional) if not nullptr and an array was printed /// @returns true if the type is emitted bool EmitType(std::ostream& out, const sem::Type* type, - const std::string& name); + const std::string& name, + bool* name_printed = nullptr); + /// Handles generating type and name + /// @param out the output stream + /// @param type the type to generate + /// @param name the name to emit + /// @returns true if the type is emitted + bool EmitTypeAndName(std::ostream& out, + const sem::Type* type, + const std::string& name); /// Handles generating a storage class /// @param out the output of the type stream /// @param sc the storage class to generate @@ -238,9 +264,10 @@ class GeneratorImpl : public TextGenerator { const sem::Type* type, const std::string& name); /// Handles generating a struct declaration + /// @param buffer the text buffer that the type declaration will be written to /// @param str the struct to generate /// @returns true if the struct is emitted - bool EmitStructType(const sem::Struct* str); + bool EmitStructType(TextBuffer* buffer, const sem::Struct* str); /// Handles emitting a type constructor /// @param out the output of the expression stream /// @param expr the type constructor expression @@ -291,6 +318,25 @@ class GeneratorImpl : public TextGenerator { uint32_t align; }; + /// CallIntrinsicHelper will call the intrinsic helper function, creating it + /// if it hasn't been built already. If the intrinsic needs to be built then + /// CallIntrinsicHelper will generate the function signature and will call + /// `build` to emit the body of the function. + /// @param out the output of the expression stream + /// @param call the call expression + /// @param intrinsic the semantic information for the intrinsic + /// @param build a function with the signature: + /// `bool(TextBuffer* buffer, const std::vector& params)` + /// Where: + /// `buffer` is the body of the generated function + /// `params` is the name of all the generated function parameters + /// @returns true if the call expression is emitted + template + bool CallIntrinsicHelper(std::ostream& out, + ast::CallExpression* call, + const sem::Intrinsic* intrinsic, + F&& build); + TextBuffer helpers_; // Helper functions emitted at the top of the output /// @returns the MSL packed type size and alignment in bytes for the given @@ -308,6 +354,8 @@ class GeneratorImpl : public TextGenerator { /// True if an invariant attribute has been generated. bool has_invariant_ = false; + + std::unordered_map intrinsics_; }; } // namespace msl diff --git a/src/writer/msl/generator_impl_type_test.cc b/src/writer/msl/generator_impl_type_test.cc index 646ae7a349..09e3bc848c 100644 --- a/src/writer/msl/generator_impl_type_test.cc +++ b/src/writer/msl/generator_impl_type_test.cc @@ -219,9 +219,10 @@ TEST_F(MslGeneratorImplTest, EmitType_StructDecl) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); - EXPECT_EQ(gen.result(), R"(struct S { + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); + EXPECT_EQ(buf.String(), R"(struct S { int a; float b; }; @@ -269,8 +270,9 @@ TEST_F(MslGeneratorImplTest, EmitType_Struct_Layout_NonComposites) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); // ALL_FIELDS() calls the macro FIELD(ADDR, TYPE, NAME, SUFFIX) // for each field of the structure s. @@ -320,7 +322,7 @@ TEST_F(MslGeneratorImplTest, EmitType_Struct_Layout_NonComposites) { " /* " #ADDR " */ " #TYPE " " #NAME #SUFFIX ";\n" auto* expect = "struct S {\n" ALL_FIELDS() "};\n"; #undef FIELD - EXPECT_EQ(gen.result(), expect); + EXPECT_EQ(buf.String(), expect); // 1.4 Metal and C++14 // The Metal programming language is a C++14-based Specification with @@ -378,8 +380,9 @@ TEST_F(MslGeneratorImplTest, EmitType_Struct_Layout_Structures) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); // ALL_FIELDS() calls the macro FIELD(ADDR, TYPE, NAME, SUFFIX) // for each field of the structure s. @@ -397,7 +400,7 @@ TEST_F(MslGeneratorImplTest, EmitType_Struct_Layout_Structures) { " /* " #ADDR " */ " #TYPE " " #NAME #SUFFIX ";\n" auto* expect = "struct S {\n" ALL_FIELDS() "};\n"; #undef FIELD - EXPECT_EQ(gen.result(), expect); + EXPECT_EQ(buf.String(), expect); // 1.4 Metal and C++14 // The Metal programming language is a C++14-based Specification with @@ -472,8 +475,9 @@ TEST_F(MslGeneratorImplTest, EmitType_Struct_Layout_ArrayDefaultStride) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); // ALL_FIELDS() calls the macro FIELD(ADDR, TYPE, NAME, SUFFIX) // for each field of the structure s. @@ -492,7 +496,7 @@ TEST_F(MslGeneratorImplTest, EmitType_Struct_Layout_ArrayDefaultStride) { " /* " #ADDR " */ " #TYPE " " #NAME #SUFFIX ";\n" auto* expect = "struct S {\n" ALL_FIELDS() "};\n"; #undef FIELD - EXPECT_EQ(gen.result(), expect); + EXPECT_EQ(buf.String(), expect); // 1.4 Metal and C++14 // The Metal programming language is a C++14-based Specification with @@ -557,8 +561,9 @@ TEST_F(MslGeneratorImplTest, EmitType_Struct_Layout_ArrayVec3DefaultStride) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); // ALL_FIELDS() calls the macro FIELD(ADDR, TYPE, NAME, SUFFIX) // for each field of the structure s. @@ -574,7 +579,7 @@ TEST_F(MslGeneratorImplTest, EmitType_Struct_Layout_ArrayVec3DefaultStride) { " /* " #ADDR " */ " #TYPE " " #NAME #SUFFIX ";\n" auto* expect = "struct S {\n" ALL_FIELDS() "};\n"; #undef FIELD - EXPECT_EQ(gen.result(), expect); + EXPECT_EQ(buf.String(), expect); } TEST_F(MslGeneratorImplTest, AttemptTintPadSymbolCollision) { @@ -619,9 +624,10 @@ TEST_F(MslGeneratorImplTest, AttemptTintPadSymbolCollision) { GeneratorImpl& gen = Build(); + TextGenerator::TextBuffer buf; auto* sem_s = program->TypeOf(s)->As(); - ASSERT_TRUE(gen.EmitStructType(sem_s)) << gen.error(); - EXPECT_EQ(gen.result(), R"(struct S { + ASSERT_TRUE(gen.EmitStructType(&buf, sem_s)) << gen.error(); + EXPECT_EQ(buf.String(), R"(struct S { /* 0x0000 */ int tint_pad_2; /* 0x0004 */ int8_t tint_pad_10[124]; /* 0x0080 */ float tint_pad_20; diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc index d228564883..0791c0a364 100644 --- a/src/writer/spirv/builder.cc +++ b/src/writer/spirv/builder.cc @@ -162,7 +162,8 @@ uint32_t intrinsic_to_glsl_method(const sem::Intrinsic* intrinsic) { case IntrinsicType::kFract: return GLSLstd450Fract; case IntrinsicType::kFrexp: - return GLSLstd450Frexp; + return (intrinsic->Parameters().size() == 1) ? GLSLstd450FrexpStruct + : GLSLstd450Frexp; case IntrinsicType::kInverseSqrt: return GLSLstd450InverseSqrt; case IntrinsicType::kLdexp: @@ -192,7 +193,8 @@ uint32_t intrinsic_to_glsl_method(const sem::Intrinsic* intrinsic) { case IntrinsicType::kMix: return GLSLstd450FMix; case IntrinsicType::kModf: - return GLSLstd450Modf; + return (intrinsic->Parameters().size() == 1) ? GLSLstd450ModfStruct + : GLSLstd450Modf; case IntrinsicType::kNormalize: return GLSLstd450Normalize; case IntrinsicType::kPack4x8snorm: @@ -3932,25 +3934,25 @@ bool Builder::GenerateReferenceType(const sem::Reference* ref, bool Builder::GenerateStructType(const sem::Struct* struct_type, const Operand& result) { auto struct_id = result.to_i(); - auto* impl = struct_type->Declaration(); - if (impl->name().IsValid()) { - push_debug(spv::Op::OpName, - {Operand::Int(struct_id), - Operand::String(builder_.Symbols().NameFor(impl->name()))}); + if (struct_type->Name().IsValid()) { + push_debug( + spv::Op::OpName, + {Operand::Int(struct_id), + Operand::String(builder_.Symbols().NameFor(struct_type->Name()))}); } OperandList ops; ops.push_back(result); - if (impl->IsBlockDecorated()) { + auto* decl = struct_type->Declaration(); + if (decl && decl->IsBlockDecorated()) { push_annot(spv::Op::OpDecorate, {Operand::Int(struct_id), Operand::Int(SpvDecorationBlock)}); } - auto& members = impl->members(); - for (uint32_t i = 0; i < members.size(); ++i) { - auto mem_id = GenerateStructMember(struct_id, i, members[i]); + for (uint32_t i = 0; i < struct_type->Members().size(); ++i) { + auto mem_id = GenerateStructMember(struct_id, i, struct_type->Members()[i]); if (mem_id == 0) { return false; } @@ -3964,10 +3966,10 @@ bool Builder::GenerateStructType(const sem::Struct* struct_type, uint32_t Builder::GenerateStructMember(uint32_t struct_id, uint32_t idx, - ast::StructMember* member) { + const sem::StructMember* member) { push_debug(spv::Op::OpMemberName, {Operand::Int(struct_id), Operand::Int(idx), - Operand::String(builder_.Symbols().NameFor(member->symbol()))}); + Operand::String(builder_.Symbols().NameFor(member->Name()))}); // Note: This will generate layout annotations for *all* structs, whether or // not they are used in host-shareable variables. This is officially ok in @@ -3975,19 +3977,13 @@ uint32_t Builder::GenerateStructMember(uint32_t struct_id, // to only generate the layout info for structs used for certain storage // classes. - auto* sem_member = builder_.Sem().Get(member); - if (!sem_member) { - error_ = "Struct member has no semantic information"; - return 0; - } - push_annot( spv::Op::OpMemberDecorate, {Operand::Int(struct_id), Operand::Int(idx), - Operand::Int(SpvDecorationOffset), Operand::Int(sem_member->Offset())}); + Operand::Int(SpvDecorationOffset), Operand::Int(member->Offset())}); // Infer and emit matrix layout. - auto* matrix_type = GetNestedMatrixType(sem_member->Type()); + auto* matrix_type = GetNestedMatrixType(member->Type()); if (matrix_type) { push_annot(spv::Op::OpMemberDecorate, {Operand::Int(struct_id), Operand::Int(idx), @@ -4004,7 +4000,7 @@ uint32_t Builder::GenerateStructMember(uint32_t struct_id, Operand::Int(effective_row_count * scalar_elem_size)}); } - return GenerateTypeIfNeeded(sem_member->Type()); + return GenerateTypeIfNeeded(member->Type()); } bool Builder::GenerateVectorType(const sem::Vector* vec, diff --git a/src/writer/spirv/builder.h b/src/writer/spirv/builder.h index c33db7c8b4..aed54be108 100644 --- a/src/writer/spirv/builder.h +++ b/src/writer/spirv/builder.h @@ -486,7 +486,7 @@ class Builder { /// @returns the id of the struct member or 0 on error. uint32_t GenerateStructMember(uint32_t struct_id, uint32_t idx, - ast::StructMember* member); + const sem::StructMember* member); /// Generates a variable declaration statement /// @param stmt the statement to generate /// @returns true on successfull generation diff --git a/src/writer/text_generator.cc b/src/writer/text_generator.cc index 811f0c5c57..d6c4f53e05 100644 --- a/src/writer/text_generator.cc +++ b/src/writer/text_generator.cc @@ -17,6 +17,8 @@ #include #include +#include "src/utils/get_or_create.h" + namespace tint { namespace writer { @@ -29,6 +31,15 @@ std::string TextGenerator::UniqueIdentifier(const std::string& prefix) { return builder_.Symbols().NameFor(builder_.Symbols().New(prefix)); } +std::string TextGenerator::StructName(const sem::Struct* s) { + auto name = builder_.Symbols().NameFor(s->Name()); + if (name.size() > 0 && name[0] == '_') { + name = utils::GetOrCreate(builtin_struct_names_, s, + [&] { return UniqueIdentifier(name.substr(1)); }); + } + return name; +} + std::string TextGenerator::TrimSuffix(std::string str, const std::string& suffix) { if (str.size() >= suffix.size()) { diff --git a/src/writer/text_generator.h b/src/writer/text_generator.h index 876efa6e92..8b8aeafdfe 100644 --- a/src/writer/text_generator.h +++ b/src/writer/text_generator.h @@ -17,6 +17,7 @@ #include #include +#include #include #include @@ -29,37 +30,6 @@ namespace writer { /// Helper methods for generators which are creating text output class TextGenerator { public: - /// Constructor - /// @param program the program used by the generator - explicit TextGenerator(const Program* program); - ~TextGenerator(); - - /// Increment the emitter indent level - void increment_indent() { current_buffer_->IncrementIndent(); } - /// Decrement the emitter indent level - void decrement_indent() { current_buffer_->DecrementIndent(); } - - /// @returns the result data - std::string result() const { return main_buffer_.String(); } - - /// @returns the list of diagnostics raised by the generator. - const diag::List& Diagnostics() const { return diagnostics_; } - - /// @returns the error - std::string error() const { return diagnostics_.str(); } - - /// @return a new, unique identifier with the given prefix. - /// @param prefix optional prefix to apply to the generated identifier. If - /// empty "tint_symbol" will be used. - std::string UniqueIdentifier(const std::string& prefix = ""); - - /// @param str the string - /// @param suffix the suffix to remove - /// @return returns str without the provided trailing suffix string. If str - /// doesn't end with suffix, str is returned unchanged. - std::string TrimSuffix(std::string str, const std::string& suffix); - - protected: /// Line holds a single line of text struct Line { /// The indentation of the line in whitespaces @@ -117,6 +87,44 @@ class TextGenerator { std::vector lines; }; + /// Constructor + /// @param program the program used by the generator + explicit TextGenerator(const Program* program); + ~TextGenerator(); + + /// Increment the emitter indent level + void increment_indent() { current_buffer_->IncrementIndent(); } + /// Decrement the emitter indent level + void decrement_indent() { current_buffer_->DecrementIndent(); } + + /// @returns the result data + std::string result() const { return main_buffer_.String(); } + + /// @returns the list of diagnostics raised by the generator. + const diag::List& Diagnostics() const { return diagnostics_; } + + /// @returns the error + std::string error() const { return diagnostics_.str(); } + + /// @return a new, unique identifier with the given prefix. + /// @param prefix optional prefix to apply to the generated identifier. If + /// empty "tint_symbol" will be used. + std::string UniqueIdentifier(const std::string& prefix = ""); + + /// @param s the semantic structure + /// @returns the name of the structure, taking special care of builtin + /// structures that start with a leading underscore. If the structure is a + /// builtin, then the returned name will be a unique name without the leading + /// underscore. + std::string StructName(const sem::Struct* s); + + /// @param str the string + /// @param suffix the suffix to remove + /// @return returns str without the provided trailing suffix string. If str + /// doesn't end with suffix, str is returned unchanged. + std::string TrimSuffix(std::string str, const std::string& suffix); + + protected: /// LineWriter is a helper that acts as a string buffer, who's content is /// emitted to the TextBuffer as a single line on destruction. struct LineWriter { @@ -224,6 +232,8 @@ class TextGenerator { private: /// The primary text buffer that the generator will emit TextBuffer main_buffer_; + /// Map of builtin structure to unique generated name + std::unordered_map builtin_struct_names_; }; } // namespace writer diff --git a/test/intrinsics/frexp.wgsl b/test/intrinsics/frexp.wgsl index 54217fe690..fed55e561e 100644 --- a/test/intrinsics/frexp.wgsl +++ b/test/intrinsics/frexp.wgsl @@ -1,5 +1,6 @@ [[stage(compute), workgroup_size(1)]] fn main() { - var exponent : i32; - let significand : f32 = frexp(1.23, &exponent); + let res = frexp(1.23); + let exp : i32 = res.exp; + let sig : f32 = res.sig; } diff --git a/test/intrinsics/frexp.wgsl.expected.hlsl b/test/intrinsics/frexp.wgsl.expected.hlsl index e35149a259..44299742b8 100644 --- a/test/intrinsics/frexp.wgsl.expected.hlsl +++ b/test/intrinsics/frexp.wgsl.expected.hlsl @@ -1,13 +1,18 @@ -float tint_frexp(float param_0, inout int param_1) { - float float_exp; - float significand = frexp(param_0, float_exp); - param_1 = int(float_exp); - return significand; +struct frexp_result { + float sig; + int exp; +}; +frexp_result tint_frexp(float param_0) { + float exp; + float sig = frexp(param_0, exp); + frexp_result result = {sig, int(exp)}; + return result; } [numthreads(1, 1, 1)] void main() { - int exponent = 0; - const float significand = tint_frexp(1.230000019f, exponent); + const frexp_result res = tint_frexp(1.230000019f); + const int exp = res.exp; + const float sig = res.sig; return; } diff --git a/test/intrinsics/frexp.wgsl.expected.msl b/test/intrinsics/frexp.wgsl.expected.msl index cda2b1b1e3..d850760b4c 100644 --- a/test/intrinsics/frexp.wgsl.expected.msl +++ b/test/intrinsics/frexp.wgsl.expected.msl @@ -1,9 +1,21 @@ #include using namespace metal; + +struct frexp_result { + float sig; + int exp; +}; +frexp_result tint_frexp(float param_0) { + int exp; + float sig = frexp(param_0, exp); + return {sig, exp}; +} + kernel void tint_symbol() { - int exponent = 0; - float const significand = frexp(1.230000019f, *(&(exponent))); + frexp_result const res = tint_frexp(1.230000019f); + int const exp = res.exp; + float const sig = res.sig; return; } diff --git a/test/intrinsics/frexp.wgsl.expected.spvasm b/test/intrinsics/frexp.wgsl.expected.spvasm index 7d6543e218..f2821950cf 100644 --- a/test/intrinsics/frexp.wgsl.expected.spvasm +++ b/test/intrinsics/frexp.wgsl.expected.spvasm @@ -1,25 +1,29 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 14 +; Bound: 13 ; Schema: 0 OpCapability Shader - %11 = OpExtInstImport "GLSL.std.450" + %9 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" OpExecutionMode %main LocalSize 1 1 1 OpName %main "main" - OpName %exponent "exponent" + OpName %_frexp_result "_frexp_result" + OpMemberName %_frexp_result 0 "sig" + OpMemberName %_frexp_result 1 "exp" + OpMemberDecorate %_frexp_result 0 Offset 0 + OpMemberDecorate %_frexp_result 1 Offset 4 %void = OpTypeVoid %1 = OpTypeFunction %void - %int = OpTypeInt 32 1 -%_ptr_Function_int = OpTypePointer Function %int - %8 = OpConstantNull %int %float = OpTypeFloat 32 + %int = OpTypeInt 32 1 +%_frexp_result = OpTypeStruct %float %int %float_1_23000002 = OpConstant %float 1.23000002 %main = OpFunction %void None %1 %4 = OpLabel - %exponent = OpVariable %_ptr_Function_int Function %8 - %9 = OpExtInst %float %11 Frexp %float_1_23000002 %exponent + %5 = OpExtInst %_frexp_result %9 FrexpStruct %float_1_23000002 + %11 = OpCompositeExtract %int %5 1 + %12 = OpCompositeExtract %float %5 0 OpReturn OpFunctionEnd diff --git a/test/intrinsics/frexp.wgsl.expected.wgsl b/test/intrinsics/frexp.wgsl.expected.wgsl index d80f8f5245..519ffb6b35 100644 --- a/test/intrinsics/frexp.wgsl.expected.wgsl +++ b/test/intrinsics/frexp.wgsl.expected.wgsl @@ -1,5 +1,6 @@ [[stage(compute), workgroup_size(1)]] fn main() { - var exponent : i32; - let significand : f32 = frexp(1.230000019, &(exponent)); + let res = frexp(1.230000019); + let exp : i32 = res.exp; + let sig : f32 = res.sig; } diff --git a/test/intrinsics/gen/frexp/013caa.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/013caa.wgsl.expected.hlsl index 9e077f50b5..8a964eda0c 100644 --- a/test/intrinsics/gen/frexp/013caa.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/013caa.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/013caa.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + float4 tint_frexp(float4 param_0, inout int4 param_1) { float4 float_exp; float4 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/013caa.wgsl.expected.msl b/test/intrinsics/gen/frexp/013caa.wgsl.expected.msl index 1b4ab95127..bd2fdbd4d0 100644 --- a/test/intrinsics/gen/frexp/013caa.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/013caa.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/013caa.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + #include using namespace metal; + +float4 tint_frexp(float4 param_0, thread int4* param_1) { + int4 exp; + float4 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_013caa() { int4 arg_1 = 0; - float4 res = frexp(float4(), *(&(arg_1))); + float4 res = tint_frexp(float4(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/013caa.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/013caa.wgsl.expected.spvasm index 9f2dda95c7..d1e2268d8f 100644 --- a/test/intrinsics/gen/frexp/013caa.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/013caa.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/013caa.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/013caa.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/013caa.wgsl.expected.wgsl index 990ed6e707..0fccee69ef 100644 --- a/test/intrinsics/gen/frexp/013caa.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/013caa.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/013caa.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + fn frexp_013caa() { var arg_1 : vec4; var res : vec4 = frexp(vec4(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/0da285.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/0da285.wgsl.expected.hlsl index 06c20aa947..276869fccb 100644 --- a/test/intrinsics/gen/frexp/0da285.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/0da285.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/0da285.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + float tint_frexp(float param_0, inout int param_1) { float float_exp; float significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/0da285.wgsl.expected.msl b/test/intrinsics/gen/frexp/0da285.wgsl.expected.msl index 7763244062..b1cbd7ba3e 100644 --- a/test/intrinsics/gen/frexp/0da285.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/0da285.wgsl.expected.msl @@ -1,10 +1,20 @@ -SKIP: FAILED +intrinsics/gen/frexp/0da285.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ #include using namespace metal; + +float tint_frexp(float param_0, threadgroup int* param_1) { + int exp; + float sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + void frexp_0da285(threadgroup int* const tint_symbol_1) { - float res = frexp(1.0f, *(&(*(tint_symbol_1)))); + float res = tint_frexp(1.0f, &(*(tint_symbol_1))); } kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) { @@ -17,44 +27,3 @@ kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgro return; } -Compilation failed: - -program_source:5:15: error: no matching function for call to 'frexp' - float res = frexp(1.0f, *(&(*(tint_symbol_1)))); - ^~~~~ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4560:18: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup int'), parameter type must be 'int &' -METAL_FUNC float frexp(float x, thread int &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3092:17: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup int'), parameter type must be 'int &' -METAL_FUNC half frexp(half x, thread int &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3336:18: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int2 &' (aka 'int2 &') for 2nd argument -METAL_FUNC half2 frexp(half2 x, thread int2 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3580:18: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int3 &' (aka 'int3 &') for 2nd argument -METAL_FUNC half3 frexp(half3 x, thread int3 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3824:18: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int4 &' (aka 'int4 &') for 2nd argument -METAL_FUNC half4 frexp(half4 x, thread int4 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4804:19: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int2 &' (aka 'int2 &') for 2nd argument -METAL_FUNC float2 frexp(float2 x, thread int2 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5048:19: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int3 &' (aka 'int3 &') for 2nd argument -METAL_FUNC float3 frexp(float3 x, thread int3 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5292:19: note: candidate function not viable: no known conversion from 'threadgroup int' to 'metal::int4 &' (aka 'int4 &') for 2nd argument -METAL_FUNC float4 frexp(float4 x, thread int4 &exp) - ^ -program_source:10:31: warning: equality comparison with extraneous parentheses - if ((local_invocation_index == 0u)) { - ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ -program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning - if ((local_invocation_index == 0u)) { - ~ ^ ~ -program_source:10:31: note: use '=' to turn this equality comparison into an assignment - if ((local_invocation_index == 0u)) { - ^~ - = - - diff --git a/test/intrinsics/gen/frexp/0da285.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/0da285.wgsl.expected.spvasm index 3ea3539422..e6de8e1f94 100644 --- a/test/intrinsics/gen/frexp/0da285.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/0da285.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/0da285.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/0da285.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/0da285.wgsl.expected.wgsl index a3bf648446..d66ac569e9 100644 --- a/test/intrinsics/gen/frexp/0da285.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/0da285.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/0da285.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + var arg_1 : i32; fn frexp_0da285() { diff --git a/test/intrinsics/gen/frexp/12f1da.wgsl b/test/intrinsics/gen/frexp/12f1da.wgsl new file mode 100644 index 0000000000..4db8bd97b1 --- /dev/null +++ b/test/intrinsics/gen/frexp/12f1da.wgsl @@ -0,0 +1,45 @@ +// Copyright 2021 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/intrinsic-gen +// using the template: +// test/intrinsics/intrinsics.wgsl.tmpl +// and the intrinsic defintion file: +// src/intrinsics.def +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn frexp(f32) -> _frexp_result +fn frexp_12f1da() { + var res = frexp(1.0); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + frexp_12f1da(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + frexp_12f1da(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + frexp_12f1da(); +} diff --git a/test/intrinsics/gen/frexp/12f1da.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.hlsl new file mode 100644 index 0000000000..caf7961c78 --- /dev/null +++ b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.hlsl @@ -0,0 +1,35 @@ +struct frexp_result { + float sig; + int exp; +}; +frexp_result tint_frexp(float param_0) { + float exp; + float sig = frexp(param_0, exp); + frexp_result result = {sig, int(exp)}; + return result; +} + +void frexp_12f1da() { + frexp_result res = tint_frexp(1.0f); +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +tint_symbol vertex_main() { + frexp_12f1da(); + const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)}; + return tint_symbol_1; +} + +void fragment_main() { + frexp_12f1da(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + frexp_12f1da(); + return; +} diff --git a/test/intrinsics/gen/frexp/12f1da.wgsl.expected.msl b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.msl new file mode 100644 index 0000000000..cf7b0cb6be --- /dev/null +++ b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.msl @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct frexp_result { + float sig; + int exp; +}; +frexp_result tint_frexp(float param_0) { + int exp; + float sig = frexp(param_0, exp); + return {sig, exp}; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +void frexp_12f1da() { + frexp_result res = tint_frexp(1.0f); +} + +vertex tint_symbol vertex_main() { + frexp_12f1da(); + tint_symbol const tint_symbol_1 = {.value=float4()}; + return tint_symbol_1; +} + +fragment void fragment_main() { + frexp_12f1da(); + return; +} + +kernel void compute_main() { + frexp_12f1da(); + return; +} + diff --git a/test/intrinsics/gen/frexp/12f1da.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.spvasm new file mode 100644 index 0000000000..1887cc1585 --- /dev/null +++ b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.spvasm @@ -0,0 +1,75 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 35 +; Schema: 0 + OpCapability Shader + %16 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1 + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %tint_pointsize "tint_pointsize" + OpName %tint_symbol_1 "tint_symbol_1" + OpName %frexp_12f1da "frexp_12f1da" + OpName %_frexp_result "_frexp_result" + OpMemberName %_frexp_result 0 "sig" + OpMemberName %_frexp_result 1 "exp" + OpName %res "res" + OpName %tint_symbol_2 "tint_symbol_2" + OpName %tint_symbol "tint_symbol" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %tint_pointsize BuiltIn PointSize + OpDecorate %tint_symbol_1 BuiltIn Position + OpMemberDecorate %_frexp_result 0 Offset 0 + OpMemberDecorate %_frexp_result 1 Offset 4 + %float = OpTypeFloat 32 +%_ptr_Output_float = OpTypePointer Output %float + %4 = OpConstantNull %float +%tint_pointsize = OpVariable %_ptr_Output_float Output %4 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %8 = OpConstantNull %v4float +%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void + %int = OpTypeInt 32 1 +%_frexp_result = OpTypeStruct %float %int + %float_1 = OpConstant %float 1 +%_ptr_Function__frexp_result = OpTypePointer Function %_frexp_result + %20 = OpConstantNull %_frexp_result + %21 = OpTypeFunction %void %v4float +%frexp_12f1da = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function__frexp_result Function %20 + %13 = OpExtInst %_frexp_result %16 FrexpStruct %float_1 + OpStore %res %13 + OpReturn + OpFunctionEnd +%tint_symbol_2 = OpFunction %void None %21 +%tint_symbol = OpFunctionParameter %v4float + %24 = OpLabel + OpStore %tint_symbol_1 %tint_symbol + OpReturn + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %26 = OpLabel + OpStore %tint_pointsize %float_1 + %27 = OpFunctionCall %void %frexp_12f1da + %28 = OpFunctionCall %void %tint_symbol_2 %8 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %30 = OpLabel + %31 = OpFunctionCall %void %frexp_12f1da + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %33 = OpLabel + %34 = OpFunctionCall %void %frexp_12f1da + OpReturn + OpFunctionEnd diff --git a/test/intrinsics/gen/frexp/12f1da.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.wgsl new file mode 100644 index 0000000000..76b85c3616 --- /dev/null +++ b/test/intrinsics/gen/frexp/12f1da.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn frexp_12f1da() { + var res = frexp(1.0); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + frexp_12f1da(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + frexp_12f1da(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + frexp_12f1da(); +} diff --git a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.hlsl index cd65967182..446b4b9ea6 100644 --- a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/15edf3.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + float2 tint_frexp(float2 param_0, inout int2 param_1) { float2 float_exp; float2 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.msl b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.msl index 35452ee6a9..0a3ab3e745 100644 --- a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/15edf3.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + #include using namespace metal; + +float2 tint_frexp(float2 param_0, thread int2* param_1) { + int2 exp; + float2 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_15edf3() { int2 arg_1 = 0; - float2 res = frexp(float2(), *(&(arg_1))); + float2 res = tint_frexp(float2(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.spvasm index e624b769a2..702a52c5c3 100644 --- a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/15edf3.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.wgsl index 7424945476..66dc841800 100644 --- a/test/intrinsics/gen/frexp/15edf3.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/15edf3.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/15edf3.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + fn frexp_15edf3() { var arg_1 : vec2; var res : vec2 = frexp(vec2(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.hlsl index e35f419dd6..40eef60aef 100644 --- a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/19ab15.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + float4 tint_frexp(float4 param_0, inout int4 param_1) { float4 float_exp; float4 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.msl b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.msl index 2759c91007..b2c38fe0ac 100644 --- a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/19ab15.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + #include using namespace metal; + +float4 tint_frexp(float4 param_0, thread int4* param_1) { + int4 exp; + float4 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_19ab15() { int4 arg_1 = 0; - float4 res = frexp(float4(), *(&(arg_1))); + float4 res = tint_frexp(float4(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.spvasm index e11b4a24bd..ed54aad953 100644 --- a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/19ab15.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.wgsl index 4bc63353cb..16cfe3781f 100644 --- a/test/intrinsics/gen/frexp/19ab15.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/19ab15.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/19ab15.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + fn frexp_19ab15() { var arg_1 : vec4; var res : vec4 = frexp(vec4(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.hlsl index bddd0e212a..32b755064a 100644 --- a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/2052e9.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + float4 tint_frexp(float4 param_0, inout int4 param_1) { float4 float_exp; float4 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.msl b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.msl index 5568b87f29..c3c1293db8 100644 --- a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/2052e9.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + #include using namespace metal; + +float4 tint_frexp(float4 param_0, thread int4* param_1) { + int4 exp; + float4 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_2052e9() { int4 arg_1 = 0; - float4 res = frexp(float4(), *(&(arg_1))); + float4 res = tint_frexp(float4(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.spvasm index 9a2809d99b..6646081ffd 100644 --- a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/2052e9.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.wgsl index 07203f9958..48eb9c00b4 100644 --- a/test/intrinsics/gen/frexp/2052e9.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/2052e9.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/2052e9.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + fn frexp_2052e9() { var arg_1 : vec4; var res : vec4 = frexp(vec4(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.hlsl index c7452b4886..90c074abee 100644 --- a/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/40fc9b.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + float3 tint_frexp(float3 param_0, inout int3 param_1) { float3 float_exp; float3 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.msl b/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.msl index cd1d5ea6b0..fbab4cbc9a 100644 --- a/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.msl @@ -1,10 +1,20 @@ -SKIP: FAILED +intrinsics/gen/frexp/40fc9b.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ #include using namespace metal; + +float3 tint_frexp(float3 param_0, threadgroup int3* param_1) { + int3 exp; + float3 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + void frexp_40fc9b(threadgroup int3* const tint_symbol_1) { - float3 res = frexp(float3(), *(&(*(tint_symbol_1)))); + float3 res = tint_frexp(float3(), &(*(tint_symbol_1))); } kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) { @@ -17,44 +27,3 @@ kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgro return; } -Compilation failed: - -program_source:5:16: error: no matching function for call to 'frexp' - float3 res = frexp(float3(), *(&(*(tint_symbol_1)))); - ^~~~~ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5048:19: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup int3' (vector of 3 'int' values)), parameter type must be 'metal::int3 &' (aka 'int3 &') -METAL_FUNC float3 frexp(float3 x, thread int3 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3092:17: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'half' for 1st argument -METAL_FUNC half frexp(half x, thread int &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3336:18: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::half2' (aka 'half2') for 1st argument -METAL_FUNC half2 frexp(half2 x, thread int2 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3580:18: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::half3' (aka 'half3') for 1st argument -METAL_FUNC half3 frexp(half3 x, thread int3 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3824:18: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::half4' (aka 'half4') for 1st argument -METAL_FUNC half4 frexp(half4 x, thread int4 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4560:18: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'float' for 1st argument -METAL_FUNC float frexp(float x, thread int &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4804:19: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::float2' (aka 'float2') for 1st argument -METAL_FUNC float2 frexp(float2 x, thread int2 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5292:19: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::float4' (aka 'float4') for 1st argument -METAL_FUNC float4 frexp(float4 x, thread int4 &exp) - ^ -program_source:10:31: warning: equality comparison with extraneous parentheses - if ((local_invocation_index == 0u)) { - ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ -program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning - if ((local_invocation_index == 0u)) { - ~ ^ ~ -program_source:10:31: note: use '=' to turn this equality comparison into an assignment - if ((local_invocation_index == 0u)) { - ^~ - = - - diff --git a/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.spvasm index 2facf1be33..379017c80d 100644 --- a/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/40fc9b.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.wgsl index 7452296cd6..05b42fd445 100644 --- a/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/40fc9b.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/40fc9b.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + var arg_1 : vec3; fn frexp_40fc9b() { diff --git a/test/intrinsics/gen/frexp/41e931.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/41e931.wgsl.expected.hlsl index 080b770239..da408a3a71 100644 --- a/test/intrinsics/gen/frexp/41e931.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/41e931.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/41e931.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + float tint_frexp(float param_0, inout int param_1) { float float_exp; float significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/41e931.wgsl.expected.msl b/test/intrinsics/gen/frexp/41e931.wgsl.expected.msl index a562b55f3d..9e60f17946 100644 --- a/test/intrinsics/gen/frexp/41e931.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/41e931.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/41e931.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + #include using namespace metal; + +float tint_frexp(float param_0, thread int* param_1) { + int exp; + float sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_41e931() { int arg_1 = 0; - float res = frexp(1.0f, *(&(arg_1))); + float res = tint_frexp(1.0f, &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/41e931.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/41e931.wgsl.expected.spvasm index fb8b59be42..b9cce4691f 100644 --- a/test/intrinsics/gen/frexp/41e931.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/41e931.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/41e931.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/41e931.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/41e931.wgsl.expected.wgsl index 0c6e160253..afe0e12188 100644 --- a/test/intrinsics/gen/frexp/41e931.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/41e931.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/41e931.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + fn frexp_41e931() { var arg_1 : i32; var res : f32 = frexp(1.0, &(arg_1)); diff --git a/test/intrinsics/gen/frexp/481e59.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/481e59.wgsl.expected.hlsl index 668bc6ea18..ef6c94e73c 100644 --- a/test/intrinsics/gen/frexp/481e59.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/481e59.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/481e59.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + float tint_frexp(float param_0, inout int param_1) { float float_exp; float significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/481e59.wgsl.expected.msl b/test/intrinsics/gen/frexp/481e59.wgsl.expected.msl index 23f14ce741..cb21d9b580 100644 --- a/test/intrinsics/gen/frexp/481e59.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/481e59.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/481e59.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + #include using namespace metal; + +float tint_frexp(float param_0, thread int* param_1) { + int exp; + float sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_481e59() { int arg_1 = 0; - float res = frexp(1.0f, *(&(arg_1))); + float res = tint_frexp(1.0f, &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/481e59.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/481e59.wgsl.expected.spvasm index 9b2cd5ab4c..703c948a9d 100644 --- a/test/intrinsics/gen/frexp/481e59.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/481e59.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/481e59.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/481e59.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/481e59.wgsl.expected.wgsl index ec1d927145..e305a6d7cb 100644 --- a/test/intrinsics/gen/frexp/481e59.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/481e59.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/481e59.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + fn frexp_481e59() { var arg_1 : i32; var res : f32 = frexp(1.0, &(arg_1)); diff --git a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.hlsl index 53500da362..84a57f9af0 100644 --- a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/5a141e.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + float3 tint_frexp(float3 param_0, inout int3 param_1) { float3 float_exp; float3 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.msl b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.msl index 0f1bc32307..fc06cdb13d 100644 --- a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/5a141e.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + #include using namespace metal; + +float3 tint_frexp(float3 param_0, thread int3* param_1) { + int3 exp; + float3 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_5a141e() { int3 arg_1 = 0; - float3 res = frexp(float3(), *(&(arg_1))); + float3 res = tint_frexp(float3(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.spvasm index 25145e1cb6..46ccae0de1 100644 --- a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/5a141e.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.wgsl index 6ee87a8cd5..697ee963e5 100644 --- a/test/intrinsics/gen/frexp/5a141e.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/5a141e.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/5a141e.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + fn frexp_5a141e() { var arg_1 : vec3; var res : vec3 = frexp(vec3(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.hlsl index 10803d1ff6..eddcbc5cb0 100644 --- a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/6d0058.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + float3 tint_frexp(float3 param_0, inout int3 param_1) { float3 float_exp; float3 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.msl b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.msl index 4bb1c13bef..0c303483a4 100644 --- a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/6d0058.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + #include using namespace metal; + +float3 tint_frexp(float3 param_0, thread int3* param_1) { + int3 exp; + float3 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_6d0058() { int3 arg_1 = 0; - float3 res = frexp(float3(), *(&(arg_1))); + float3 res = tint_frexp(float3(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.spvasm index 51638f6e6d..cbeae7b602 100644 --- a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/6d0058.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.wgsl index 172066b842..336437e9af 100644 --- a/test/intrinsics/gen/frexp/6d0058.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/6d0058.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/6d0058.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + fn frexp_6d0058() { var arg_1 : vec3; var res : vec3 = frexp(vec3(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/6efa09.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/6efa09.wgsl.expected.hlsl index 7960528c6d..d967d1cadc 100644 --- a/test/intrinsics/gen/frexp/6efa09.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/6efa09.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/6efa09.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + float3 tint_frexp(float3 param_0, inout int3 param_1) { float3 float_exp; float3 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/6efa09.wgsl.expected.msl b/test/intrinsics/gen/frexp/6efa09.wgsl.expected.msl index 58fc2c7951..3911450c5d 100644 --- a/test/intrinsics/gen/frexp/6efa09.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/6efa09.wgsl.expected.msl @@ -1,12 +1,24 @@ +intrinsics/gen/frexp/6efa09.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + #include using namespace metal; + +float3 tint_frexp(float3 param_0, thread int3* param_1) { + int3 exp; + float3 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_6efa09(thread int3* const tint_symbol_2) { - float3 res = frexp(float3(), *(&(*(tint_symbol_2)))); + float3 res = tint_frexp(float3(), &(*(tint_symbol_2))); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/6efa09.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/6efa09.wgsl.expected.spvasm index 09918590a3..869f6339ae 100644 --- a/test/intrinsics/gen/frexp/6efa09.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/6efa09.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/6efa09.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/6efa09.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/6efa09.wgsl.expected.wgsl index 8d5c13366c..6605ee79bb 100644 --- a/test/intrinsics/gen/frexp/6efa09.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/6efa09.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/6efa09.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + var arg_1 : vec3; fn frexp_6efa09() { diff --git a/test/intrinsics/gen/frexp/a0eb3b.wgsl b/test/intrinsics/gen/frexp/a0eb3b.wgsl new file mode 100644 index 0000000000..beca50ca0b --- /dev/null +++ b/test/intrinsics/gen/frexp/a0eb3b.wgsl @@ -0,0 +1,45 @@ +// Copyright 2021 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/intrinsic-gen +// using the template: +// test/intrinsics/intrinsics.wgsl.tmpl +// and the intrinsic defintion file: +// src/intrinsics.def +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn frexp(vec<3, f32>) -> _frexp_result_vec<3> +fn frexp_a0eb3b() { + var res = frexp(vec3()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + frexp_a0eb3b(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + frexp_a0eb3b(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + frexp_a0eb3b(); +} diff --git a/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.hlsl new file mode 100644 index 0000000000..2ca0a682dc --- /dev/null +++ b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.hlsl @@ -0,0 +1,35 @@ +struct frexp_result_vec3 { + float3 sig; + int3 exp; +}; +frexp_result_vec3 tint_frexp(float3 param_0) { + float3 exp; + float3 sig = frexp(param_0, exp); + frexp_result_vec3 result = {sig, int3(exp)}; + return result; +} + +void frexp_a0eb3b() { + frexp_result_vec3 res = tint_frexp(float3(0.0f, 0.0f, 0.0f)); +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +tint_symbol vertex_main() { + frexp_a0eb3b(); + const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)}; + return tint_symbol_1; +} + +void fragment_main() { + frexp_a0eb3b(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + frexp_a0eb3b(); + return; +} diff --git a/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.msl b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.msl new file mode 100644 index 0000000000..6ca1b90c21 --- /dev/null +++ b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.msl @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct frexp_result_vec3 { + float3 sig; + int3 exp; +}; +frexp_result_vec3 tint_frexp(float3 param_0) { + int3 exp; + float3 sig = frexp(param_0, exp); + return {sig, exp}; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +void frexp_a0eb3b() { + frexp_result_vec3 res = tint_frexp(float3()); +} + +vertex tint_symbol vertex_main() { + frexp_a0eb3b(); + tint_symbol const tint_symbol_1 = {.value=float4()}; + return tint_symbol_1; +} + +fragment void fragment_main() { + frexp_a0eb3b(); + return; +} + +kernel void compute_main() { + frexp_a0eb3b(); + return; +} + diff --git a/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.spvasm new file mode 100644 index 0000000000..3049fc17ce --- /dev/null +++ b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.spvasm @@ -0,0 +1,78 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 38 +; Schema: 0 + OpCapability Shader + %18 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1 + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %tint_pointsize "tint_pointsize" + OpName %tint_symbol_1 "tint_symbol_1" + OpName %frexp_a0eb3b "frexp_a0eb3b" + OpName %_frexp_result_vec3 "_frexp_result_vec3" + OpMemberName %_frexp_result_vec3 0 "sig" + OpMemberName %_frexp_result_vec3 1 "exp" + OpName %res "res" + OpName %tint_symbol_2 "tint_symbol_2" + OpName %tint_symbol "tint_symbol" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %tint_pointsize BuiltIn PointSize + OpDecorate %tint_symbol_1 BuiltIn Position + OpMemberDecorate %_frexp_result_vec3 0 Offset 0 + OpMemberDecorate %_frexp_result_vec3 1 Offset 16 + %float = OpTypeFloat 32 +%_ptr_Output_float = OpTypePointer Output %float + %4 = OpConstantNull %float +%tint_pointsize = OpVariable %_ptr_Output_float Output %4 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %8 = OpConstantNull %v4float +%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void + %v3float = OpTypeVector %float 3 + %int = OpTypeInt 32 1 + %v3int = OpTypeVector %int 3 +%_frexp_result_vec3 = OpTypeStruct %v3float %v3int + %19 = OpConstantNull %v3float +%_ptr_Function__frexp_result_vec3 = OpTypePointer Function %_frexp_result_vec3 + %22 = OpConstantNull %_frexp_result_vec3 + %23 = OpTypeFunction %void %v4float + %float_1 = OpConstant %float 1 +%frexp_a0eb3b = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function__frexp_result_vec3 Function %22 + %13 = OpExtInst %_frexp_result_vec3 %18 FrexpStruct %19 + OpStore %res %13 + OpReturn + OpFunctionEnd +%tint_symbol_2 = OpFunction %void None %23 +%tint_symbol = OpFunctionParameter %v4float + %26 = OpLabel + OpStore %tint_symbol_1 %tint_symbol + OpReturn + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %28 = OpLabel + OpStore %tint_pointsize %float_1 + %30 = OpFunctionCall %void %frexp_a0eb3b + %31 = OpFunctionCall %void %tint_symbol_2 %8 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %33 = OpLabel + %34 = OpFunctionCall %void %frexp_a0eb3b + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %36 = OpLabel + %37 = OpFunctionCall %void %frexp_a0eb3b + OpReturn + OpFunctionEnd diff --git a/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.wgsl new file mode 100644 index 0000000000..fba88d36fa --- /dev/null +++ b/test/intrinsics/gen/frexp/a0eb3b.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn frexp_a0eb3b() { + var res = frexp(vec3()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + frexp_a0eb3b(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + frexp_a0eb3b(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + frexp_a0eb3b(); +} diff --git a/test/intrinsics/gen/frexp/a2a617.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/a2a617.wgsl.expected.hlsl index 68180a7d66..df13399b75 100644 --- a/test/intrinsics/gen/frexp/a2a617.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/a2a617.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a2a617.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + float tint_frexp(float param_0, inout int param_1) { float float_exp; float significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/a2a617.wgsl.expected.msl b/test/intrinsics/gen/frexp/a2a617.wgsl.expected.msl index 802e9f0d3e..5ab05d4e3c 100644 --- a/test/intrinsics/gen/frexp/a2a617.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/a2a617.wgsl.expected.msl @@ -1,12 +1,24 @@ +intrinsics/gen/frexp/a2a617.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + #include using namespace metal; + +float tint_frexp(float param_0, thread int* param_1) { + int exp; + float sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_a2a617(thread int* const tint_symbol_2) { - float res = frexp(1.0f, *(&(*(tint_symbol_2)))); + float res = tint_frexp(1.0f, &(*(tint_symbol_2))); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/a2a617.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/a2a617.wgsl.expected.spvasm index 182842efe7..955c165e6d 100644 --- a/test/intrinsics/gen/frexp/a2a617.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/a2a617.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a2a617.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/a2a617.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/a2a617.wgsl.expected.wgsl index a563123791..e5fdacd120 100644 --- a/test/intrinsics/gen/frexp/a2a617.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/a2a617.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a2a617.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + var arg_1 : i32; fn frexp_a2a617() { diff --git a/test/intrinsics/gen/frexp/a3f940.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/a3f940.wgsl.expected.hlsl index f540a08a88..0c05d53f65 100644 --- a/test/intrinsics/gen/frexp/a3f940.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/a3f940.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a3f940.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + float2 tint_frexp(float2 param_0, inout int2 param_1) { float2 float_exp; float2 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/a3f940.wgsl.expected.msl b/test/intrinsics/gen/frexp/a3f940.wgsl.expected.msl index 7f841e0c0c..b259049458 100644 --- a/test/intrinsics/gen/frexp/a3f940.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/a3f940.wgsl.expected.msl @@ -1,10 +1,20 @@ -SKIP: FAILED +intrinsics/gen/frexp/a3f940.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ #include using namespace metal; + +float2 tint_frexp(float2 param_0, threadgroup int2* param_1) { + int2 exp; + float2 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + void frexp_a3f940(threadgroup int2* const tint_symbol_1) { - float2 res = frexp(float2(), *(&(*(tint_symbol_1)))); + float2 res = tint_frexp(float2(), &(*(tint_symbol_1))); } kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) { @@ -17,44 +27,3 @@ kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgro return; } -Compilation failed: - -program_source:5:16: error: no matching function for call to 'frexp' - float2 res = frexp(float2(), *(&(*(tint_symbol_1)))); - ^~~~~ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4804:19: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup int2' (vector of 2 'int' values)), parameter type must be 'metal::int2 &' (aka 'int2 &') -METAL_FUNC float2 frexp(float2 x, thread int2 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3092:17: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'half' for 1st argument -METAL_FUNC half frexp(half x, thread int &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3336:18: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::half2' (aka 'half2') for 1st argument -METAL_FUNC half2 frexp(half2 x, thread int2 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3580:18: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::half3' (aka 'half3') for 1st argument -METAL_FUNC half3 frexp(half3 x, thread int3 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3824:18: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::half4' (aka 'half4') for 1st argument -METAL_FUNC half4 frexp(half4 x, thread int4 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4560:18: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'float' for 1st argument -METAL_FUNC float frexp(float x, thread int &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5048:19: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::float3' (aka 'float3') for 1st argument -METAL_FUNC float3 frexp(float3 x, thread int3 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5292:19: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::float4' (aka 'float4') for 1st argument -METAL_FUNC float4 frexp(float4 x, thread int4 &exp) - ^ -program_source:10:31: warning: equality comparison with extraneous parentheses - if ((local_invocation_index == 0u)) { - ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ -program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning - if ((local_invocation_index == 0u)) { - ~ ^ ~ -program_source:10:31: note: use '=' to turn this equality comparison into an assignment - if ((local_invocation_index == 0u)) { - ^~ - = - - diff --git a/test/intrinsics/gen/frexp/a3f940.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/a3f940.wgsl.expected.spvasm index 11801b6871..e0c3785ca9 100644 --- a/test/intrinsics/gen/frexp/a3f940.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/a3f940.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a3f940.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/a3f940.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/a3f940.wgsl.expected.wgsl index 745f7d5b6c..b40075f347 100644 --- a/test/intrinsics/gen/frexp/a3f940.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/a3f940.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a3f940.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + var arg_1 : vec2; fn frexp_a3f940() { diff --git a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.hlsl index f88516c01e..88c956530a 100644 --- a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a951b5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + float2 tint_frexp(float2 param_0, inout int2 param_1) { float2 float_exp; float2 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.msl b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.msl index 7f3a315961..56dd076470 100644 --- a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/a951b5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + #include using namespace metal; + +float2 tint_frexp(float2 param_0, thread int2* param_1) { + int2 exp; + float2 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_a951b5() { int2 arg_1 = 0; - float2 res = frexp(float2(), *(&(arg_1))); + float2 res = tint_frexp(float2(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.spvasm index 8f5353e8cd..49ad2920c1 100644 --- a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a951b5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.wgsl index 44449ddc23..431a4a7a8c 100644 --- a/test/intrinsics/gen/frexp/a951b5.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/a951b5.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/a951b5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + fn frexp_a951b5() { var arg_1 : vec2; var res : vec2 = frexp(vec2(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/b45525.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/b45525.wgsl.expected.hlsl index f9e83b8961..28ee0ea6b6 100644 --- a/test/intrinsics/gen/frexp/b45525.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/b45525.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b45525.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + float4 tint_frexp(float4 param_0, inout int4 param_1) { float4 float_exp; float4 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/b45525.wgsl.expected.msl b/test/intrinsics/gen/frexp/b45525.wgsl.expected.msl index d77f3a216f..537576ad77 100644 --- a/test/intrinsics/gen/frexp/b45525.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/b45525.wgsl.expected.msl @@ -1,12 +1,24 @@ +intrinsics/gen/frexp/b45525.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + #include using namespace metal; + +float4 tint_frexp(float4 param_0, thread int4* param_1) { + int4 exp; + float4 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_b45525(thread int4* const tint_symbol_2) { - float4 res = frexp(float4(), *(&(*(tint_symbol_2)))); + float4 res = tint_frexp(float4(), &(*(tint_symbol_2))); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/b45525.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/b45525.wgsl.expected.spvasm index 8280479f1d..f3c321a340 100644 --- a/test/intrinsics/gen/frexp/b45525.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/b45525.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b45525.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/b45525.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/b45525.wgsl.expected.wgsl index d9cff0a898..b31806c173 100644 --- a/test/intrinsics/gen/frexp/b45525.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/b45525.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b45525.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + var arg_1 : vec4; fn frexp_b45525() { diff --git a/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.hlsl index ddb2f5f8b3..a39bf1e6dd 100644 --- a/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b87f4e.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + float4 tint_frexp(float4 param_0, inout int4 param_1) { float4 float_exp; float4 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.msl b/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.msl index dbbfcb58b8..d3107ae58b 100644 --- a/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.msl @@ -1,10 +1,20 @@ -SKIP: FAILED +intrinsics/gen/frexp/b87f4e.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ #include using namespace metal; + +float4 tint_frexp(float4 param_0, threadgroup int4* param_1) { + int4 exp; + float4 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + void frexp_b87f4e(threadgroup int4* const tint_symbol_1) { - float4 res = frexp(float4(), *(&(*(tint_symbol_1)))); + float4 res = tint_frexp(float4(), &(*(tint_symbol_1))); } kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) { @@ -17,44 +27,3 @@ kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgro return; } -Compilation failed: - -program_source:5:16: error: no matching function for call to 'frexp' - float4 res = frexp(float4(), *(&(*(tint_symbol_1)))); - ^~~~~ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5292:19: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup int4' (vector of 4 'int' values)), parameter type must be 'metal::int4 &' (aka 'int4 &') -METAL_FUNC float4 frexp(float4 x, thread int4 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3092:17: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'half' for 1st argument -METAL_FUNC half frexp(half x, thread int &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3336:18: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::half2' (aka 'half2') for 1st argument -METAL_FUNC half2 frexp(half2 x, thread int2 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3580:18: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::half3' (aka 'half3') for 1st argument -METAL_FUNC half3 frexp(half3 x, thread int3 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3824:18: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::half4' (aka 'half4') for 1st argument -METAL_FUNC half4 frexp(half4 x, thread int4 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4560:18: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'float' for 1st argument -METAL_FUNC float frexp(float x, thread int &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4804:19: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::float2' (aka 'float2') for 1st argument -METAL_FUNC float2 frexp(float2 x, thread int2 &exp) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5048:19: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::float3' (aka 'float3') for 1st argument -METAL_FUNC float3 frexp(float3 x, thread int3 &exp) - ^ -program_source:10:31: warning: equality comparison with extraneous parentheses - if ((local_invocation_index == 0u)) { - ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ -program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning - if ((local_invocation_index == 0u)) { - ~ ^ ~ -program_source:10:31: note: use '=' to turn this equality comparison into an assignment - if ((local_invocation_index == 0u)) { - ^~ - = - - diff --git a/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.spvasm index f8c3322dec..1d9d9af8ac 100644 --- a/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b87f4e.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.wgsl index b9ed9da4cb..2d23758831 100644 --- a/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/b87f4e.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b87f4e.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = frexp(vec4(), &arg_1); + ^^^^^ + var arg_1 : vec4; fn frexp_b87f4e() { diff --git a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.hlsl index 1b06a32337..527404bab6 100644 --- a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b9e4de.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + float3 tint_frexp(float3 param_0, inout int3 param_1) { float3 float_exp; float3 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.msl b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.msl index 55c997b532..937b87f09d 100644 --- a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/b9e4de.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + #include using namespace metal; + +float3 tint_frexp(float3 param_0, thread int3* param_1) { + int3 exp; + float3 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_b9e4de() { int3 arg_1 = 0; - float3 res = frexp(float3(), *(&(arg_1))); + float3 res = tint_frexp(float3(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.spvasm index 1d6285c46b..0687916f22 100644 --- a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b9e4de.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.wgsl index 38c009168d..7c137caadd 100644 --- a/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/b9e4de.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/b9e4de.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = frexp(vec3(), &arg_1); + ^^^^^ + fn frexp_b9e4de() { var arg_1 : vec3; var res : vec3 = frexp(vec3(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/c084e3.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/c084e3.wgsl.expected.hlsl index 7db21c8b86..b264ed9d31 100644 --- a/test/intrinsics/gen/frexp/c084e3.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/c084e3.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/c084e3.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + float2 tint_frexp(float2 param_0, inout int2 param_1) { float2 float_exp; float2 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/c084e3.wgsl.expected.msl b/test/intrinsics/gen/frexp/c084e3.wgsl.expected.msl index b2c46487de..3bd387e671 100644 --- a/test/intrinsics/gen/frexp/c084e3.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/c084e3.wgsl.expected.msl @@ -1,12 +1,24 @@ +intrinsics/gen/frexp/c084e3.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + #include using namespace metal; + +float2 tint_frexp(float2 param_0, thread int2* param_1) { + int2 exp; + float2 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_c084e3(thread int2* const tint_symbol_2) { - float2 res = frexp(float2(), *(&(*(tint_symbol_2)))); + float2 res = tint_frexp(float2(), &(*(tint_symbol_2))); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/c084e3.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/c084e3.wgsl.expected.spvasm index 5e2d7a9f1b..ac5c4a0398 100644 --- a/test/intrinsics/gen/frexp/c084e3.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/c084e3.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/c084e3.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/c084e3.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/c084e3.wgsl.expected.wgsl index 7a2d8c6061..f924d318fe 100644 --- a/test/intrinsics/gen/frexp/c084e3.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/c084e3.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/c084e3.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + var arg_1 : vec2; fn frexp_c084e3() { diff --git a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.hlsl index b80607200d..1efdb62603 100644 --- a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/d06c2c.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + float2 tint_frexp(float2 param_0, inout int2 param_1) { float2 float_exp; float2 significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.msl b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.msl index 4b10b99acb..8f580e1506 100644 --- a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/d06c2c.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + #include using namespace metal; + +float2 tint_frexp(float2 param_0, thread int2* param_1) { + int2 exp; + float2 sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_d06c2c() { int2 arg_1 = 0; - float2 res = frexp(float2(), *(&(arg_1))); + float2 res = tint_frexp(float2(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.spvasm index 45cf3ccb86..2b15722063 100644 --- a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/d06c2c.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.wgsl index 1dcaaf6fe6..1680cd9200 100644 --- a/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/d06c2c.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/d06c2c.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = frexp(vec2(), &arg_1); + ^^^^^ + fn frexp_d06c2c() { var arg_1 : vec2; var res : vec2 = frexp(vec2(), &(arg_1)); diff --git a/test/intrinsics/gen/frexp/d80367.wgsl b/test/intrinsics/gen/frexp/d80367.wgsl new file mode 100644 index 0000000000..bd8112b2f5 --- /dev/null +++ b/test/intrinsics/gen/frexp/d80367.wgsl @@ -0,0 +1,45 @@ +// Copyright 2021 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/intrinsic-gen +// using the template: +// test/intrinsics/intrinsics.wgsl.tmpl +// and the intrinsic defintion file: +// src/intrinsics.def +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn frexp(vec<4, f32>) -> _frexp_result_vec<4> +fn frexp_d80367() { + var res = frexp(vec4()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + frexp_d80367(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + frexp_d80367(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + frexp_d80367(); +} diff --git a/test/intrinsics/gen/frexp/d80367.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/d80367.wgsl.expected.hlsl new file mode 100644 index 0000000000..18b14d42d0 --- /dev/null +++ b/test/intrinsics/gen/frexp/d80367.wgsl.expected.hlsl @@ -0,0 +1,35 @@ +struct frexp_result_vec4 { + float4 sig; + int4 exp; +}; +frexp_result_vec4 tint_frexp(float4 param_0) { + float4 exp; + float4 sig = frexp(param_0, exp); + frexp_result_vec4 result = {sig, int4(exp)}; + return result; +} + +void frexp_d80367() { + frexp_result_vec4 res = tint_frexp(float4(0.0f, 0.0f, 0.0f, 0.0f)); +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +tint_symbol vertex_main() { + frexp_d80367(); + const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)}; + return tint_symbol_1; +} + +void fragment_main() { + frexp_d80367(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + frexp_d80367(); + return; +} diff --git a/test/intrinsics/gen/frexp/d80367.wgsl.expected.msl b/test/intrinsics/gen/frexp/d80367.wgsl.expected.msl new file mode 100644 index 0000000000..036089b214 --- /dev/null +++ b/test/intrinsics/gen/frexp/d80367.wgsl.expected.msl @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct frexp_result_vec4 { + float4 sig; + int4 exp; +}; +frexp_result_vec4 tint_frexp(float4 param_0) { + int4 exp; + float4 sig = frexp(param_0, exp); + return {sig, exp}; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +void frexp_d80367() { + frexp_result_vec4 res = tint_frexp(float4()); +} + +vertex tint_symbol vertex_main() { + frexp_d80367(); + tint_symbol const tint_symbol_1 = {.value=float4()}; + return tint_symbol_1; +} + +fragment void fragment_main() { + frexp_d80367(); + return; +} + +kernel void compute_main() { + frexp_d80367(); + return; +} + diff --git a/test/intrinsics/gen/frexp/d80367.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/d80367.wgsl.expected.spvasm new file mode 100644 index 0000000000..03f674eef9 --- /dev/null +++ b/test/intrinsics/gen/frexp/d80367.wgsl.expected.spvasm @@ -0,0 +1,76 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 36 +; Schema: 0 + OpCapability Shader + %17 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1 + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %tint_pointsize "tint_pointsize" + OpName %tint_symbol_1 "tint_symbol_1" + OpName %frexp_d80367 "frexp_d80367" + OpName %_frexp_result_vec4 "_frexp_result_vec4" + OpMemberName %_frexp_result_vec4 0 "sig" + OpMemberName %_frexp_result_vec4 1 "exp" + OpName %res "res" + OpName %tint_symbol_2 "tint_symbol_2" + OpName %tint_symbol "tint_symbol" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %tint_pointsize BuiltIn PointSize + OpDecorate %tint_symbol_1 BuiltIn Position + OpMemberDecorate %_frexp_result_vec4 0 Offset 0 + OpMemberDecorate %_frexp_result_vec4 1 Offset 16 + %float = OpTypeFloat 32 +%_ptr_Output_float = OpTypePointer Output %float + %4 = OpConstantNull %float +%tint_pointsize = OpVariable %_ptr_Output_float Output %4 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %8 = OpConstantNull %v4float +%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void + %int = OpTypeInt 32 1 + %v4int = OpTypeVector %int 4 +%_frexp_result_vec4 = OpTypeStruct %v4float %v4int +%_ptr_Function__frexp_result_vec4 = OpTypePointer Function %_frexp_result_vec4 + %20 = OpConstantNull %_frexp_result_vec4 + %21 = OpTypeFunction %void %v4float + %float_1 = OpConstant %float 1 +%frexp_d80367 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function__frexp_result_vec4 Function %20 + %13 = OpExtInst %_frexp_result_vec4 %17 FrexpStruct %8 + OpStore %res %13 + OpReturn + OpFunctionEnd +%tint_symbol_2 = OpFunction %void None %21 +%tint_symbol = OpFunctionParameter %v4float + %24 = OpLabel + OpStore %tint_symbol_1 %tint_symbol + OpReturn + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %26 = OpLabel + OpStore %tint_pointsize %float_1 + %28 = OpFunctionCall %void %frexp_d80367 + %29 = OpFunctionCall %void %tint_symbol_2 %8 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %31 = OpLabel + %32 = OpFunctionCall %void %frexp_d80367 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %34 = OpLabel + %35 = OpFunctionCall %void %frexp_d80367 + OpReturn + OpFunctionEnd diff --git a/test/intrinsics/gen/frexp/d80367.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/d80367.wgsl.expected.wgsl new file mode 100644 index 0000000000..0c60003d04 --- /dev/null +++ b/test/intrinsics/gen/frexp/d80367.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn frexp_d80367() { + var res = frexp(vec4()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + frexp_d80367(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + frexp_d80367(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + frexp_d80367(); +} diff --git a/test/intrinsics/gen/frexp/db0637.wgsl b/test/intrinsics/gen/frexp/db0637.wgsl new file mode 100644 index 0000000000..9afab3acfd --- /dev/null +++ b/test/intrinsics/gen/frexp/db0637.wgsl @@ -0,0 +1,45 @@ +// Copyright 2021 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/intrinsic-gen +// using the template: +// test/intrinsics/intrinsics.wgsl.tmpl +// and the intrinsic defintion file: +// src/intrinsics.def +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn frexp(vec<2, f32>) -> _frexp_result_vec<2> +fn frexp_db0637() { + var res = frexp(vec2()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + frexp_db0637(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + frexp_db0637(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + frexp_db0637(); +} diff --git a/test/intrinsics/gen/frexp/db0637.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/db0637.wgsl.expected.hlsl new file mode 100644 index 0000000000..8ae0b21cc8 --- /dev/null +++ b/test/intrinsics/gen/frexp/db0637.wgsl.expected.hlsl @@ -0,0 +1,35 @@ +struct frexp_result_vec2 { + float2 sig; + int2 exp; +}; +frexp_result_vec2 tint_frexp(float2 param_0) { + float2 exp; + float2 sig = frexp(param_0, exp); + frexp_result_vec2 result = {sig, int2(exp)}; + return result; +} + +void frexp_db0637() { + frexp_result_vec2 res = tint_frexp(float2(0.0f, 0.0f)); +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +tint_symbol vertex_main() { + frexp_db0637(); + const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)}; + return tint_symbol_1; +} + +void fragment_main() { + frexp_db0637(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + frexp_db0637(); + return; +} diff --git a/test/intrinsics/gen/frexp/db0637.wgsl.expected.msl b/test/intrinsics/gen/frexp/db0637.wgsl.expected.msl new file mode 100644 index 0000000000..26b3332038 --- /dev/null +++ b/test/intrinsics/gen/frexp/db0637.wgsl.expected.msl @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct frexp_result_vec2 { + float2 sig; + int2 exp; +}; +frexp_result_vec2 tint_frexp(float2 param_0) { + int2 exp; + float2 sig = frexp(param_0, exp); + return {sig, exp}; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +void frexp_db0637() { + frexp_result_vec2 res = tint_frexp(float2()); +} + +vertex tint_symbol vertex_main() { + frexp_db0637(); + tint_symbol const tint_symbol_1 = {.value=float4()}; + return tint_symbol_1; +} + +fragment void fragment_main() { + frexp_db0637(); + return; +} + +kernel void compute_main() { + frexp_db0637(); + return; +} + diff --git a/test/intrinsics/gen/frexp/db0637.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/db0637.wgsl.expected.spvasm new file mode 100644 index 0000000000..df2183373e --- /dev/null +++ b/test/intrinsics/gen/frexp/db0637.wgsl.expected.spvasm @@ -0,0 +1,78 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 38 +; Schema: 0 + OpCapability Shader + %18 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1 + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %tint_pointsize "tint_pointsize" + OpName %tint_symbol_1 "tint_symbol_1" + OpName %frexp_db0637 "frexp_db0637" + OpName %_frexp_result_vec2 "_frexp_result_vec2" + OpMemberName %_frexp_result_vec2 0 "sig" + OpMemberName %_frexp_result_vec2 1 "exp" + OpName %res "res" + OpName %tint_symbol_2 "tint_symbol_2" + OpName %tint_symbol "tint_symbol" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %tint_pointsize BuiltIn PointSize + OpDecorate %tint_symbol_1 BuiltIn Position + OpMemberDecorate %_frexp_result_vec2 0 Offset 0 + OpMemberDecorate %_frexp_result_vec2 1 Offset 8 + %float = OpTypeFloat 32 +%_ptr_Output_float = OpTypePointer Output %float + %4 = OpConstantNull %float +%tint_pointsize = OpVariable %_ptr_Output_float Output %4 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %8 = OpConstantNull %v4float +%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void + %v2float = OpTypeVector %float 2 + %int = OpTypeInt 32 1 + %v2int = OpTypeVector %int 2 +%_frexp_result_vec2 = OpTypeStruct %v2float %v2int + %19 = OpConstantNull %v2float +%_ptr_Function__frexp_result_vec2 = OpTypePointer Function %_frexp_result_vec2 + %22 = OpConstantNull %_frexp_result_vec2 + %23 = OpTypeFunction %void %v4float + %float_1 = OpConstant %float 1 +%frexp_db0637 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function__frexp_result_vec2 Function %22 + %13 = OpExtInst %_frexp_result_vec2 %18 FrexpStruct %19 + OpStore %res %13 + OpReturn + OpFunctionEnd +%tint_symbol_2 = OpFunction %void None %23 +%tint_symbol = OpFunctionParameter %v4float + %26 = OpLabel + OpStore %tint_symbol_1 %tint_symbol + OpReturn + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %28 = OpLabel + OpStore %tint_pointsize %float_1 + %30 = OpFunctionCall %void %frexp_db0637 + %31 = OpFunctionCall %void %tint_symbol_2 %8 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %33 = OpLabel + %34 = OpFunctionCall %void %frexp_db0637 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %36 = OpLabel + %37 = OpFunctionCall %void %frexp_db0637 + OpReturn + OpFunctionEnd diff --git a/test/intrinsics/gen/frexp/db0637.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/db0637.wgsl.expected.wgsl new file mode 100644 index 0000000000..c56e615811 --- /dev/null +++ b/test/intrinsics/gen/frexp/db0637.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn frexp_db0637() { + var res = frexp(vec2()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + frexp_db0637(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + frexp_db0637(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + frexp_db0637(); +} diff --git a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.hlsl b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.hlsl index 8aa4d20100..3fd7e82c22 100644 --- a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.hlsl +++ b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/e061dd.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + float tint_frexp(float param_0, inout int param_1) { float float_exp; float significand = frexp(param_0, float_exp); diff --git a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.msl b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.msl index 5b7adae3ae..a77330610c 100644 --- a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.msl +++ b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/frexp/e061dd.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + #include using namespace metal; + +float tint_frexp(float param_0, thread int* param_1) { + int exp; + float sig = frexp(param_0, exp); + *param_1 = exp; + return sig; +} + struct tint_symbol { float4 value [[position]]; }; void frexp_e061dd() { int arg_1 = 0; - float res = frexp(1.0f, *(&(arg_1))); + float res = tint_frexp(1.0f, &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.spvasm b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.spvasm index b580d605e6..1504a09053 100644 --- a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.spvasm +++ b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/e061dd.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.wgsl b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.wgsl index a69a43c654..feb5bad594 100644 --- a/test/intrinsics/gen/frexp/e061dd.wgsl.expected.wgsl +++ b/test/intrinsics/gen/frexp/e061dd.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/frexp/e061dd.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = frexp(1.0, &arg_1); + ^^^^^ + fn frexp_e061dd() { var arg_1 : i32; var res : f32 = frexp(1.0, &(arg_1)); diff --git a/test/intrinsics/gen/modf/1d59e5.wgsl.expected.hlsl b/test/intrinsics/gen/modf/1d59e5.wgsl.expected.hlsl index 5f0f807832..2207d2e4a4 100644 --- a/test/intrinsics/gen/modf/1d59e5.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/1d59e5.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/1d59e5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + groupshared float4 arg_1; void modf_1d59e5() { diff --git a/test/intrinsics/gen/modf/1d59e5.wgsl.expected.msl b/test/intrinsics/gen/modf/1d59e5.wgsl.expected.msl index ae1675b74d..a07881792f 100644 --- a/test/intrinsics/gen/modf/1d59e5.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/1d59e5.wgsl.expected.msl @@ -1,10 +1,20 @@ -SKIP: FAILED +intrinsics/gen/modf/1d59e5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ #include using namespace metal; + +float4 tint_modf(float4 param_0, threadgroup float4* param_1) { + float4 whole; + float4 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + void modf_1d59e5(threadgroup float4* const tint_symbol_1) { - float4 res = modf(float4(), *(&(*(tint_symbol_1)))); + float4 res = tint_modf(float4(), &(*(tint_symbol_1))); } kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) { @@ -17,44 +27,3 @@ kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgro return; } -Compilation failed: - -program_source:5:16: error: no matching function for call to 'modf' - float4 res = modf(float4(), *(&(*(tint_symbol_1)))); - ^~~~ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5342:19: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup float4' (vector of 4 'float' values)), parameter type must be 'metal::float4 &' (aka 'float4 &') -METAL_FUNC float4 modf(float4 x, thread float4 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3142:17: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'half' for 1st argument -METAL_FUNC half modf(half x, thread half &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3386:18: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::half2' (aka 'half2') for 1st argument -METAL_FUNC half2 modf(half2 x, thread half2 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3630:18: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::half3' (aka 'half3') for 1st argument -METAL_FUNC half3 modf(half3 x, thread half3 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3874:18: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::half4' (aka 'half4') for 1st argument -METAL_FUNC half4 modf(half4 x, thread half4 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4610:18: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'float' for 1st argument -METAL_FUNC float modf(float x, thread float &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4854:19: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::float2' (aka 'float2') for 1st argument -METAL_FUNC float2 modf(float2 x, thread float2 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5098:19: note: candidate function not viable: no known conversion from 'float4' (vector of 4 'float' values) to 'metal::float3' (aka 'float3') for 1st argument -METAL_FUNC float3 modf(float3 x, thread float3 &intval) - ^ -program_source:10:31: warning: equality comparison with extraneous parentheses - if ((local_invocation_index == 0u)) { - ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ -program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning - if ((local_invocation_index == 0u)) { - ~ ^ ~ -program_source:10:31: note: use '=' to turn this equality comparison into an assignment - if ((local_invocation_index == 0u)) { - ^~ - = - - diff --git a/test/intrinsics/gen/modf/1d59e5.wgsl.expected.spvasm b/test/intrinsics/gen/modf/1d59e5.wgsl.expected.spvasm index b9996649b1..717b2e2e50 100644 --- a/test/intrinsics/gen/modf/1d59e5.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/1d59e5.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/1d59e5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/1d59e5.wgsl.expected.wgsl b/test/intrinsics/gen/modf/1d59e5.wgsl.expected.wgsl index d94d6b1d2a..3a82932577 100644 --- a/test/intrinsics/gen/modf/1d59e5.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/1d59e5.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/1d59e5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + var arg_1 : vec4; fn modf_1d59e5() { diff --git a/test/intrinsics/gen/modf/2199f1.wgsl b/test/intrinsics/gen/modf/2199f1.wgsl new file mode 100644 index 0000000000..c9cecd6403 --- /dev/null +++ b/test/intrinsics/gen/modf/2199f1.wgsl @@ -0,0 +1,45 @@ +// Copyright 2021 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/intrinsic-gen +// using the template: +// test/intrinsics/intrinsics.wgsl.tmpl +// and the intrinsic defintion file: +// src/intrinsics.def +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn modf(vec<3, f32>) -> _modf_result_vec<3> +fn modf_2199f1() { + var res = modf(vec3()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + modf_2199f1(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + modf_2199f1(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + modf_2199f1(); +} diff --git a/test/intrinsics/gen/modf/2199f1.wgsl.expected.hlsl b/test/intrinsics/gen/modf/2199f1.wgsl.expected.hlsl new file mode 100644 index 0000000000..9b4570e848 --- /dev/null +++ b/test/intrinsics/gen/modf/2199f1.wgsl.expected.hlsl @@ -0,0 +1,35 @@ +struct modf_result_vec3 { + float3 fract; + float3 whole; +}; +modf_result_vec3 tint_modf(float3 param_0) { + float3 whole; + float3 fract = modf(param_0, whole); + modf_result_vec3 result = {fract, whole}; + return result; +} + +void modf_2199f1() { + modf_result_vec3 res = tint_modf(float3(0.0f, 0.0f, 0.0f)); +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +tint_symbol vertex_main() { + modf_2199f1(); + const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)}; + return tint_symbol_1; +} + +void fragment_main() { + modf_2199f1(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + modf_2199f1(); + return; +} diff --git a/test/intrinsics/gen/modf/2199f1.wgsl.expected.msl b/test/intrinsics/gen/modf/2199f1.wgsl.expected.msl new file mode 100644 index 0000000000..233b91cbd9 --- /dev/null +++ b/test/intrinsics/gen/modf/2199f1.wgsl.expected.msl @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct modf_result_vec3 { + float3 fract; + float3 whole; +}; +modf_result_vec3 tint_modf(float3 param_0) { + float3 whole; + float3 fract = modf(param_0, whole); + return {fract, whole}; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +void modf_2199f1() { + modf_result_vec3 res = tint_modf(float3()); +} + +vertex tint_symbol vertex_main() { + modf_2199f1(); + tint_symbol const tint_symbol_1 = {.value=float4()}; + return tint_symbol_1; +} + +fragment void fragment_main() { + modf_2199f1(); + return; +} + +kernel void compute_main() { + modf_2199f1(); + return; +} + diff --git a/test/intrinsics/gen/modf/2199f1.wgsl.expected.spvasm b/test/intrinsics/gen/modf/2199f1.wgsl.expected.spvasm new file mode 100644 index 0000000000..998b149b05 --- /dev/null +++ b/test/intrinsics/gen/modf/2199f1.wgsl.expected.spvasm @@ -0,0 +1,76 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 36 +; Schema: 0 + OpCapability Shader + %16 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1 + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %tint_pointsize "tint_pointsize" + OpName %tint_symbol_1 "tint_symbol_1" + OpName %modf_2199f1 "modf_2199f1" + OpName %_modf_result_vec3 "_modf_result_vec3" + OpMemberName %_modf_result_vec3 0 "fract" + OpMemberName %_modf_result_vec3 1 "whole" + OpName %res "res" + OpName %tint_symbol_2 "tint_symbol_2" + OpName %tint_symbol "tint_symbol" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %tint_pointsize BuiltIn PointSize + OpDecorate %tint_symbol_1 BuiltIn Position + OpMemberDecorate %_modf_result_vec3 0 Offset 0 + OpMemberDecorate %_modf_result_vec3 1 Offset 16 + %float = OpTypeFloat 32 +%_ptr_Output_float = OpTypePointer Output %float + %4 = OpConstantNull %float +%tint_pointsize = OpVariable %_ptr_Output_float Output %4 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %8 = OpConstantNull %v4float +%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void + %v3float = OpTypeVector %float 3 +%_modf_result_vec3 = OpTypeStruct %v3float %v3float + %17 = OpConstantNull %v3float +%_ptr_Function__modf_result_vec3 = OpTypePointer Function %_modf_result_vec3 + %20 = OpConstantNull %_modf_result_vec3 + %21 = OpTypeFunction %void %v4float + %float_1 = OpConstant %float 1 +%modf_2199f1 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function__modf_result_vec3 Function %20 + %13 = OpExtInst %_modf_result_vec3 %16 ModfStruct %17 + OpStore %res %13 + OpReturn + OpFunctionEnd +%tint_symbol_2 = OpFunction %void None %21 +%tint_symbol = OpFunctionParameter %v4float + %24 = OpLabel + OpStore %tint_symbol_1 %tint_symbol + OpReturn + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %26 = OpLabel + OpStore %tint_pointsize %float_1 + %28 = OpFunctionCall %void %modf_2199f1 + %29 = OpFunctionCall %void %tint_symbol_2 %8 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %31 = OpLabel + %32 = OpFunctionCall %void %modf_2199f1 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %34 = OpLabel + %35 = OpFunctionCall %void %modf_2199f1 + OpReturn + OpFunctionEnd diff --git a/test/intrinsics/gen/modf/2199f1.wgsl.expected.wgsl b/test/intrinsics/gen/modf/2199f1.wgsl.expected.wgsl new file mode 100644 index 0000000000..8a55a22675 --- /dev/null +++ b/test/intrinsics/gen/modf/2199f1.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn modf_2199f1() { + var res = modf(vec3()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + modf_2199f1(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + modf_2199f1(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + modf_2199f1(); +} diff --git a/test/intrinsics/gen/modf/353f7d.wgsl.expected.hlsl b/test/intrinsics/gen/modf/353f7d.wgsl.expected.hlsl index b677940ebc..7661a49f40 100644 --- a/test/intrinsics/gen/modf/353f7d.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/353f7d.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/353f7d.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + void modf_353f7d() { float arg_1 = 0.0f; float res = modf(1.0f, arg_1); diff --git a/test/intrinsics/gen/modf/353f7d.wgsl.expected.msl b/test/intrinsics/gen/modf/353f7d.wgsl.expected.msl index 256dd45f85..67dafcfdf4 100644 --- a/test/intrinsics/gen/modf/353f7d.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/353f7d.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/353f7d.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + #include using namespace metal; + +float tint_modf(float param_0, thread float* param_1) { + float whole; + float fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_353f7d() { float arg_1 = 0.0f; - float res = modf(1.0f, *(&(arg_1))); + float res = tint_modf(1.0f, &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/353f7d.wgsl.expected.spvasm b/test/intrinsics/gen/modf/353f7d.wgsl.expected.spvasm index 82522213fb..83763b8013 100644 --- a/test/intrinsics/gen/modf/353f7d.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/353f7d.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/353f7d.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/353f7d.wgsl.expected.wgsl b/test/intrinsics/gen/modf/353f7d.wgsl.expected.wgsl index 247d8c195b..f57dfff2f7 100644 --- a/test/intrinsics/gen/modf/353f7d.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/353f7d.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/353f7d.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + fn modf_353f7d() { var arg_1 : f32; var res : f32 = modf(1.0, &(arg_1)); diff --git a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.hlsl b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.hlsl index 4f4e6fdf26..7d4c70807a 100644 --- a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/3b79d5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + void modf_3b79d5() { float3 arg_1 = float3(0.0f, 0.0f, 0.0f); float3 res = modf(float3(0.0f, 0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.msl b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.msl index 31af906776..2881b41cbe 100644 --- a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/3b79d5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + #include using namespace metal; + +float3 tint_modf(float3 param_0, thread float3* param_1) { + float3 whole; + float3 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_3b79d5() { float3 arg_1 = 0.0f; - float3 res = modf(float3(), *(&(arg_1))); + float3 res = tint_modf(float3(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.spvasm b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.spvasm index 545e00f7be..9a2e5205ed 100644 --- a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/3b79d5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.wgsl b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.wgsl index 78f76463c1..616c2b8495 100644 --- a/test/intrinsics/gen/modf/3b79d5.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/3b79d5.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/3b79d5.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + fn modf_3b79d5() { var arg_1 : vec3; var res : vec3 = modf(vec3(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/3d00e2.wgsl.expected.hlsl b/test/intrinsics/gen/modf/3d00e2.wgsl.expected.hlsl index 202046108a..5f97ee428c 100644 --- a/test/intrinsics/gen/modf/3d00e2.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/3d00e2.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/3d00e2.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + static float4 arg_1 = float4(0.0f, 0.0f, 0.0f, 0.0f); void modf_3d00e2() { diff --git a/test/intrinsics/gen/modf/3d00e2.wgsl.expected.msl b/test/intrinsics/gen/modf/3d00e2.wgsl.expected.msl index d7ce378493..10b1b38af3 100644 --- a/test/intrinsics/gen/modf/3d00e2.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/3d00e2.wgsl.expected.msl @@ -1,12 +1,24 @@ +intrinsics/gen/modf/3d00e2.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + #include using namespace metal; + +float4 tint_modf(float4 param_0, thread float4* param_1) { + float4 whole; + float4 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_3d00e2(thread float4* const tint_symbol_2) { - float4 res = modf(float4(), *(&(*(tint_symbol_2)))); + float4 res = tint_modf(float4(), &(*(tint_symbol_2))); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/3d00e2.wgsl.expected.spvasm b/test/intrinsics/gen/modf/3d00e2.wgsl.expected.spvasm index 2bc383bd50..35ccc6a684 100644 --- a/test/intrinsics/gen/modf/3d00e2.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/3d00e2.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/3d00e2.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/3d00e2.wgsl.expected.wgsl b/test/intrinsics/gen/modf/3d00e2.wgsl.expected.wgsl index 6175df8fec..8f08f94ba1 100644 --- a/test/intrinsics/gen/modf/3d00e2.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/3d00e2.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/3d00e2.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + var arg_1 : vec4; fn modf_3d00e2() { diff --git a/test/intrinsics/gen/modf/4bb324.wgsl.expected.hlsl b/test/intrinsics/gen/modf/4bb324.wgsl.expected.hlsl index 340137425c..caf030cad1 100644 --- a/test/intrinsics/gen/modf/4bb324.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/4bb324.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/4bb324.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + void modf_4bb324() { float4 arg_1 = float4(0.0f, 0.0f, 0.0f, 0.0f); float4 res = modf(float4(0.0f, 0.0f, 0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/4bb324.wgsl.expected.msl b/test/intrinsics/gen/modf/4bb324.wgsl.expected.msl index 50d7c15e88..e87e26c644 100644 --- a/test/intrinsics/gen/modf/4bb324.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/4bb324.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/4bb324.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + #include using namespace metal; + +float4 tint_modf(float4 param_0, thread float4* param_1) { + float4 whole; + float4 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_4bb324() { float4 arg_1 = 0.0f; - float4 res = modf(float4(), *(&(arg_1))); + float4 res = tint_modf(float4(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/4bb324.wgsl.expected.spvasm b/test/intrinsics/gen/modf/4bb324.wgsl.expected.spvasm index 6c2baae370..e654ee6acc 100644 --- a/test/intrinsics/gen/modf/4bb324.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/4bb324.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/4bb324.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/4bb324.wgsl.expected.wgsl b/test/intrinsics/gen/modf/4bb324.wgsl.expected.wgsl index 4cc1f484b6..61a8ca87a4 100644 --- a/test/intrinsics/gen/modf/4bb324.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/4bb324.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/4bb324.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + fn modf_4bb324() { var arg_1 : vec4; var res : vec4 = modf(vec4(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.hlsl b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.hlsl index dec22accc9..2731d810b5 100644 --- a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/4fe3d9.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + void modf_4fe3d9() { float3 arg_1 = float3(0.0f, 0.0f, 0.0f); float3 res = modf(float3(0.0f, 0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.msl b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.msl index 49e45d3e8f..66c8950135 100644 --- a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/4fe3d9.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + #include using namespace metal; + +float3 tint_modf(float3 param_0, thread float3* param_1) { + float3 whole; + float3 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_4fe3d9() { float3 arg_1 = 0.0f; - float3 res = modf(float3(), *(&(arg_1))); + float3 res = tint_modf(float3(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.spvasm b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.spvasm index 9bd45584aa..a5dbaa0c15 100644 --- a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/4fe3d9.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.wgsl b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.wgsl index 0f8e2a3469..c145208213 100644 --- a/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/4fe3d9.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/4fe3d9.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + fn modf_4fe3d9() { var arg_1 : vec3; var res : vec3 = modf(vec3(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.hlsl b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.hlsl index 8b28ed7d01..0d22edf303 100644 --- a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/51e4c6.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + void modf_51e4c6() { float2 arg_1 = float2(0.0f, 0.0f); float2 res = modf(float2(0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.msl b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.msl index 7cdaac42e2..ad760d538a 100644 --- a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/51e4c6.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + #include using namespace metal; + +float2 tint_modf(float2 param_0, thread float2* param_1) { + float2 whole; + float2 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_51e4c6() { float2 arg_1 = 0.0f; - float2 res = modf(float2(), *(&(arg_1))); + float2 res = tint_modf(float2(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.spvasm b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.spvasm index 8952ffa774..515cd31bf3 100644 --- a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/51e4c6.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.wgsl b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.wgsl index 209a9fb60f..700ffe5347 100644 --- a/test/intrinsics/gen/modf/51e4c6.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/51e4c6.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/51e4c6.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + fn modf_51e4c6() { var arg_1 : vec2; var res : vec2 = modf(vec2(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/546e09.wgsl.expected.hlsl b/test/intrinsics/gen/modf/546e09.wgsl.expected.hlsl index 2df7bdf319..1fcd41cf8a 100644 --- a/test/intrinsics/gen/modf/546e09.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/546e09.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/546e09.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + void modf_546e09() { float arg_1 = 0.0f; float res = modf(1.0f, arg_1); diff --git a/test/intrinsics/gen/modf/546e09.wgsl.expected.msl b/test/intrinsics/gen/modf/546e09.wgsl.expected.msl index 64e347532c..a00cf02d74 100644 --- a/test/intrinsics/gen/modf/546e09.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/546e09.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/546e09.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + #include using namespace metal; + +float tint_modf(float param_0, thread float* param_1) { + float whole; + float fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_546e09() { float arg_1 = 0.0f; - float res = modf(1.0f, *(&(arg_1))); + float res = tint_modf(1.0f, &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/546e09.wgsl.expected.spvasm b/test/intrinsics/gen/modf/546e09.wgsl.expected.spvasm index 5a56fcfada..8c70ec3862 100644 --- a/test/intrinsics/gen/modf/546e09.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/546e09.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/546e09.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/546e09.wgsl.expected.wgsl b/test/intrinsics/gen/modf/546e09.wgsl.expected.wgsl index 331c087b50..ab9908df07 100644 --- a/test/intrinsics/gen/modf/546e09.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/546e09.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/546e09.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + fn modf_546e09() { var arg_1 : f32; var res : f32 = modf(1.0, &(arg_1)); diff --git a/test/intrinsics/gen/modf/5e8476.wgsl.expected.hlsl b/test/intrinsics/gen/modf/5e8476.wgsl.expected.hlsl index 8fabfe20df..dbe27e643b 100644 --- a/test/intrinsics/gen/modf/5e8476.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/5e8476.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/5e8476.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + static float arg_1 = 0.0f; void modf_5e8476() { diff --git a/test/intrinsics/gen/modf/5e8476.wgsl.expected.msl b/test/intrinsics/gen/modf/5e8476.wgsl.expected.msl index 7b9a4e65bd..531930ffb1 100644 --- a/test/intrinsics/gen/modf/5e8476.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/5e8476.wgsl.expected.msl @@ -1,12 +1,24 @@ +intrinsics/gen/modf/5e8476.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + #include using namespace metal; + +float tint_modf(float param_0, thread float* param_1) { + float whole; + float fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_5e8476(thread float* const tint_symbol_2) { - float res = modf(1.0f, *(&(*(tint_symbol_2)))); + float res = tint_modf(1.0f, &(*(tint_symbol_2))); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/5e8476.wgsl.expected.spvasm b/test/intrinsics/gen/modf/5e8476.wgsl.expected.spvasm index f3a8bdb454..f9c55e2bd9 100644 --- a/test/intrinsics/gen/modf/5e8476.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/5e8476.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/5e8476.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/5e8476.wgsl.expected.wgsl b/test/intrinsics/gen/modf/5e8476.wgsl.expected.wgsl index 6d262357f1..5888c21e55 100644 --- a/test/intrinsics/gen/modf/5e8476.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/5e8476.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/5e8476.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + var arg_1 : f32; fn modf_5e8476() { diff --git a/test/intrinsics/gen/modf/684d46.wgsl b/test/intrinsics/gen/modf/684d46.wgsl new file mode 100644 index 0000000000..d983b72c4b --- /dev/null +++ b/test/intrinsics/gen/modf/684d46.wgsl @@ -0,0 +1,45 @@ +// Copyright 2021 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/intrinsic-gen +// using the template: +// test/intrinsics/intrinsics.wgsl.tmpl +// and the intrinsic defintion file: +// src/intrinsics.def +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn modf(f32) -> _modf_result +fn modf_684d46() { + var res = modf(1.0); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + modf_684d46(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + modf_684d46(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + modf_684d46(); +} diff --git a/test/intrinsics/gen/modf/684d46.wgsl.expected.hlsl b/test/intrinsics/gen/modf/684d46.wgsl.expected.hlsl new file mode 100644 index 0000000000..77b05b7af2 --- /dev/null +++ b/test/intrinsics/gen/modf/684d46.wgsl.expected.hlsl @@ -0,0 +1,35 @@ +struct modf_result { + float fract; + float whole; +}; +modf_result tint_modf(float param_0) { + float whole; + float fract = modf(param_0, whole); + modf_result result = {fract, whole}; + return result; +} + +void modf_684d46() { + modf_result res = tint_modf(1.0f); +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +tint_symbol vertex_main() { + modf_684d46(); + const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)}; + return tint_symbol_1; +} + +void fragment_main() { + modf_684d46(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + modf_684d46(); + return; +} diff --git a/test/intrinsics/gen/modf/684d46.wgsl.expected.msl b/test/intrinsics/gen/modf/684d46.wgsl.expected.msl new file mode 100644 index 0000000000..9944617c8a --- /dev/null +++ b/test/intrinsics/gen/modf/684d46.wgsl.expected.msl @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct modf_result { + float fract; + float whole; +}; +modf_result tint_modf(float param_0) { + float whole; + float fract = modf(param_0, whole); + return {fract, whole}; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +void modf_684d46() { + modf_result res = tint_modf(1.0f); +} + +vertex tint_symbol vertex_main() { + modf_684d46(); + tint_symbol const tint_symbol_1 = {.value=float4()}; + return tint_symbol_1; +} + +fragment void fragment_main() { + modf_684d46(); + return; +} + +kernel void compute_main() { + modf_684d46(); + return; +} + diff --git a/test/intrinsics/gen/modf/684d46.wgsl.expected.spvasm b/test/intrinsics/gen/modf/684d46.wgsl.expected.spvasm new file mode 100644 index 0000000000..9a37b68bd8 --- /dev/null +++ b/test/intrinsics/gen/modf/684d46.wgsl.expected.spvasm @@ -0,0 +1,74 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 34 +; Schema: 0 + OpCapability Shader + %15 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1 + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %tint_pointsize "tint_pointsize" + OpName %tint_symbol_1 "tint_symbol_1" + OpName %modf_684d46 "modf_684d46" + OpName %_modf_result "_modf_result" + OpMemberName %_modf_result 0 "fract" + OpMemberName %_modf_result 1 "whole" + OpName %res "res" + OpName %tint_symbol_2 "tint_symbol_2" + OpName %tint_symbol "tint_symbol" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %tint_pointsize BuiltIn PointSize + OpDecorate %tint_symbol_1 BuiltIn Position + OpMemberDecorate %_modf_result 0 Offset 0 + OpMemberDecorate %_modf_result 1 Offset 4 + %float = OpTypeFloat 32 +%_ptr_Output_float = OpTypePointer Output %float + %4 = OpConstantNull %float +%tint_pointsize = OpVariable %_ptr_Output_float Output %4 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %8 = OpConstantNull %v4float +%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_modf_result = OpTypeStruct %float %float + %float_1 = OpConstant %float 1 +%_ptr_Function__modf_result = OpTypePointer Function %_modf_result + %19 = OpConstantNull %_modf_result + %20 = OpTypeFunction %void %v4float +%modf_684d46 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function__modf_result Function %19 + %13 = OpExtInst %_modf_result %15 ModfStruct %float_1 + OpStore %res %13 + OpReturn + OpFunctionEnd +%tint_symbol_2 = OpFunction %void None %20 +%tint_symbol = OpFunctionParameter %v4float + %23 = OpLabel + OpStore %tint_symbol_1 %tint_symbol + OpReturn + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %25 = OpLabel + OpStore %tint_pointsize %float_1 + %26 = OpFunctionCall %void %modf_684d46 + %27 = OpFunctionCall %void %tint_symbol_2 %8 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %29 = OpLabel + %30 = OpFunctionCall %void %modf_684d46 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %32 = OpLabel + %33 = OpFunctionCall %void %modf_684d46 + OpReturn + OpFunctionEnd diff --git a/test/intrinsics/gen/modf/684d46.wgsl.expected.wgsl b/test/intrinsics/gen/modf/684d46.wgsl.expected.wgsl new file mode 100644 index 0000000000..3686ead710 --- /dev/null +++ b/test/intrinsics/gen/modf/684d46.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn modf_684d46() { + var res = modf(1.0); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + modf_684d46(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + modf_684d46(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + modf_684d46(); +} diff --git a/test/intrinsics/gen/modf/86441c.wgsl.expected.hlsl b/test/intrinsics/gen/modf/86441c.wgsl.expected.hlsl index 21ca45c6b6..81063726b5 100644 --- a/test/intrinsics/gen/modf/86441c.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/86441c.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/86441c.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + void modf_86441c() { float2 arg_1 = float2(0.0f, 0.0f); float2 res = modf(float2(0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/86441c.wgsl.expected.msl b/test/intrinsics/gen/modf/86441c.wgsl.expected.msl index 900085d6df..bd5a59559f 100644 --- a/test/intrinsics/gen/modf/86441c.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/86441c.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/86441c.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + #include using namespace metal; + +float2 tint_modf(float2 param_0, thread float2* param_1) { + float2 whole; + float2 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_86441c() { float2 arg_1 = 0.0f; - float2 res = modf(float2(), *(&(arg_1))); + float2 res = tint_modf(float2(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/86441c.wgsl.expected.spvasm b/test/intrinsics/gen/modf/86441c.wgsl.expected.spvasm index 7a41b14cf5..3567057f4b 100644 --- a/test/intrinsics/gen/modf/86441c.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/86441c.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/86441c.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/86441c.wgsl.expected.wgsl b/test/intrinsics/gen/modf/86441c.wgsl.expected.wgsl index a9c1e38cc5..f2940fe56d 100644 --- a/test/intrinsics/gen/modf/86441c.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/86441c.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/86441c.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + fn modf_86441c() { var arg_1 : vec2; var res : vec2 = modf(vec2(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/955651.wgsl.expected.hlsl b/test/intrinsics/gen/modf/955651.wgsl.expected.hlsl index 02cf941db2..de9a0a0a3b 100644 --- a/test/intrinsics/gen/modf/955651.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/955651.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/955651.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + void modf_955651() { float3 arg_1 = float3(0.0f, 0.0f, 0.0f); float3 res = modf(float3(0.0f, 0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/955651.wgsl.expected.msl b/test/intrinsics/gen/modf/955651.wgsl.expected.msl index 25b521c237..937fbe1773 100644 --- a/test/intrinsics/gen/modf/955651.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/955651.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/955651.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + #include using namespace metal; + +float3 tint_modf(float3 param_0, thread float3* param_1) { + float3 whole; + float3 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_955651() { float3 arg_1 = 0.0f; - float3 res = modf(float3(), *(&(arg_1))); + float3 res = tint_modf(float3(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/955651.wgsl.expected.spvasm b/test/intrinsics/gen/modf/955651.wgsl.expected.spvasm index 192d324e1c..01fe4be42f 100644 --- a/test/intrinsics/gen/modf/955651.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/955651.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/955651.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/955651.wgsl.expected.wgsl b/test/intrinsics/gen/modf/955651.wgsl.expected.wgsl index bf94c38d95..aab1a1e841 100644 --- a/test/intrinsics/gen/modf/955651.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/955651.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/955651.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + fn modf_955651() { var arg_1 : vec3; var res : vec3 = modf(vec3(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/9b44a9.wgsl b/test/intrinsics/gen/modf/9b44a9.wgsl new file mode 100644 index 0000000000..2556b018fd --- /dev/null +++ b/test/intrinsics/gen/modf/9b44a9.wgsl @@ -0,0 +1,45 @@ +// Copyright 2021 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/intrinsic-gen +// using the template: +// test/intrinsics/intrinsics.wgsl.tmpl +// and the intrinsic defintion file: +// src/intrinsics.def +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn modf(vec<4, f32>) -> _modf_result_vec<4> +fn modf_9b44a9() { + var res = modf(vec4()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + modf_9b44a9(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + modf_9b44a9(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + modf_9b44a9(); +} diff --git a/test/intrinsics/gen/modf/9b44a9.wgsl.expected.hlsl b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.hlsl new file mode 100644 index 0000000000..56faa2040c --- /dev/null +++ b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.hlsl @@ -0,0 +1,35 @@ +struct modf_result_vec4 { + float4 fract; + float4 whole; +}; +modf_result_vec4 tint_modf(float4 param_0) { + float4 whole; + float4 fract = modf(param_0, whole); + modf_result_vec4 result = {fract, whole}; + return result; +} + +void modf_9b44a9() { + modf_result_vec4 res = tint_modf(float4(0.0f, 0.0f, 0.0f, 0.0f)); +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +tint_symbol vertex_main() { + modf_9b44a9(); + const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)}; + return tint_symbol_1; +} + +void fragment_main() { + modf_9b44a9(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + modf_9b44a9(); + return; +} diff --git a/test/intrinsics/gen/modf/9b44a9.wgsl.expected.msl b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.msl new file mode 100644 index 0000000000..86541b3713 --- /dev/null +++ b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.msl @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct modf_result_vec4 { + float4 fract; + float4 whole; +}; +modf_result_vec4 tint_modf(float4 param_0) { + float4 whole; + float4 fract = modf(param_0, whole); + return {fract, whole}; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +void modf_9b44a9() { + modf_result_vec4 res = tint_modf(float4()); +} + +vertex tint_symbol vertex_main() { + modf_9b44a9(); + tint_symbol const tint_symbol_1 = {.value=float4()}; + return tint_symbol_1; +} + +fragment void fragment_main() { + modf_9b44a9(); + return; +} + +kernel void compute_main() { + modf_9b44a9(); + return; +} + diff --git a/test/intrinsics/gen/modf/9b44a9.wgsl.expected.spvasm b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.spvasm new file mode 100644 index 0000000000..c15a37c50a --- /dev/null +++ b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.spvasm @@ -0,0 +1,74 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 34 +; Schema: 0 + OpCapability Shader + %15 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1 + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %tint_pointsize "tint_pointsize" + OpName %tint_symbol_1 "tint_symbol_1" + OpName %modf_9b44a9 "modf_9b44a9" + OpName %_modf_result_vec4 "_modf_result_vec4" + OpMemberName %_modf_result_vec4 0 "fract" + OpMemberName %_modf_result_vec4 1 "whole" + OpName %res "res" + OpName %tint_symbol_2 "tint_symbol_2" + OpName %tint_symbol "tint_symbol" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %tint_pointsize BuiltIn PointSize + OpDecorate %tint_symbol_1 BuiltIn Position + OpMemberDecorate %_modf_result_vec4 0 Offset 0 + OpMemberDecorate %_modf_result_vec4 1 Offset 16 + %float = OpTypeFloat 32 +%_ptr_Output_float = OpTypePointer Output %float + %4 = OpConstantNull %float +%tint_pointsize = OpVariable %_ptr_Output_float Output %4 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %8 = OpConstantNull %v4float +%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void +%_modf_result_vec4 = OpTypeStruct %v4float %v4float +%_ptr_Function__modf_result_vec4 = OpTypePointer Function %_modf_result_vec4 + %18 = OpConstantNull %_modf_result_vec4 + %19 = OpTypeFunction %void %v4float + %float_1 = OpConstant %float 1 +%modf_9b44a9 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function__modf_result_vec4 Function %18 + %13 = OpExtInst %_modf_result_vec4 %15 ModfStruct %8 + OpStore %res %13 + OpReturn + OpFunctionEnd +%tint_symbol_2 = OpFunction %void None %19 +%tint_symbol = OpFunctionParameter %v4float + %22 = OpLabel + OpStore %tint_symbol_1 %tint_symbol + OpReturn + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %24 = OpLabel + OpStore %tint_pointsize %float_1 + %26 = OpFunctionCall %void %modf_9b44a9 + %27 = OpFunctionCall %void %tint_symbol_2 %8 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %29 = OpLabel + %30 = OpFunctionCall %void %modf_9b44a9 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %32 = OpLabel + %33 = OpFunctionCall %void %modf_9b44a9 + OpReturn + OpFunctionEnd diff --git a/test/intrinsics/gen/modf/9b44a9.wgsl.expected.wgsl b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.wgsl new file mode 100644 index 0000000000..2009bff519 --- /dev/null +++ b/test/intrinsics/gen/modf/9b44a9.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn modf_9b44a9() { + var res = modf(vec4()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + modf_9b44a9(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + modf_9b44a9(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + modf_9b44a9(); +} diff --git a/test/intrinsics/gen/modf/9c6a91.wgsl.expected.hlsl b/test/intrinsics/gen/modf/9c6a91.wgsl.expected.hlsl index 26b8eaf60e..112167d05e 100644 --- a/test/intrinsics/gen/modf/9c6a91.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/9c6a91.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/9c6a91.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + static float2 arg_1 = float2(0.0f, 0.0f); void modf_9c6a91() { diff --git a/test/intrinsics/gen/modf/9c6a91.wgsl.expected.msl b/test/intrinsics/gen/modf/9c6a91.wgsl.expected.msl index 475c8e097e..b702b5c53c 100644 --- a/test/intrinsics/gen/modf/9c6a91.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/9c6a91.wgsl.expected.msl @@ -1,12 +1,24 @@ +intrinsics/gen/modf/9c6a91.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + #include using namespace metal; + +float2 tint_modf(float2 param_0, thread float2* param_1) { + float2 whole; + float2 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_9c6a91(thread float2* const tint_symbol_2) { - float2 res = modf(float2(), *(&(*(tint_symbol_2)))); + float2 res = tint_modf(float2(), &(*(tint_symbol_2))); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/9c6a91.wgsl.expected.spvasm b/test/intrinsics/gen/modf/9c6a91.wgsl.expected.spvasm index 73bad5d5aa..5ebe38b469 100644 --- a/test/intrinsics/gen/modf/9c6a91.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/9c6a91.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/9c6a91.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/9c6a91.wgsl.expected.wgsl b/test/intrinsics/gen/modf/9c6a91.wgsl.expected.wgsl index 87aae4f801..dff14759c9 100644 --- a/test/intrinsics/gen/modf/9c6a91.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/9c6a91.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/9c6a91.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + var arg_1 : vec2; fn modf_9c6a91() { diff --git a/test/intrinsics/gen/modf/9cecfc.wgsl.expected.hlsl b/test/intrinsics/gen/modf/9cecfc.wgsl.expected.hlsl index 72befc31e2..11978856b8 100644 --- a/test/intrinsics/gen/modf/9cecfc.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/9cecfc.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/9cecfc.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + static float3 arg_1 = float3(0.0f, 0.0f, 0.0f); void modf_9cecfc() { diff --git a/test/intrinsics/gen/modf/9cecfc.wgsl.expected.msl b/test/intrinsics/gen/modf/9cecfc.wgsl.expected.msl index 617d3c718d..2a8186eac6 100644 --- a/test/intrinsics/gen/modf/9cecfc.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/9cecfc.wgsl.expected.msl @@ -1,12 +1,24 @@ +intrinsics/gen/modf/9cecfc.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + #include using namespace metal; + +float3 tint_modf(float3 param_0, thread float3* param_1) { + float3 whole; + float3 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_9cecfc(thread float3* const tint_symbol_2) { - float3 res = modf(float3(), *(&(*(tint_symbol_2)))); + float3 res = tint_modf(float3(), &(*(tint_symbol_2))); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/9cecfc.wgsl.expected.spvasm b/test/intrinsics/gen/modf/9cecfc.wgsl.expected.spvasm index 07004515ce..70dd5dbf3c 100644 --- a/test/intrinsics/gen/modf/9cecfc.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/9cecfc.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/9cecfc.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/9cecfc.wgsl.expected.wgsl b/test/intrinsics/gen/modf/9cecfc.wgsl.expected.wgsl index 48ea3c8550..7ad6c49c86 100644 --- a/test/intrinsics/gen/modf/9cecfc.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/9cecfc.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/9cecfc.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + var arg_1 : vec3; fn modf_9cecfc() { diff --git a/test/intrinsics/gen/modf/a128ab.wgsl.expected.hlsl b/test/intrinsics/gen/modf/a128ab.wgsl.expected.hlsl index b900c7bfad..8bb5fd8712 100644 --- a/test/intrinsics/gen/modf/a128ab.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/a128ab.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/a128ab.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + groupshared float2 arg_1; void modf_a128ab() { diff --git a/test/intrinsics/gen/modf/a128ab.wgsl.expected.msl b/test/intrinsics/gen/modf/a128ab.wgsl.expected.msl index bc45ed1804..175efd8752 100644 --- a/test/intrinsics/gen/modf/a128ab.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/a128ab.wgsl.expected.msl @@ -1,10 +1,20 @@ -SKIP: FAILED +intrinsics/gen/modf/a128ab.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ #include using namespace metal; + +float2 tint_modf(float2 param_0, threadgroup float2* param_1) { + float2 whole; + float2 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + void modf_a128ab(threadgroup float2* const tint_symbol_1) { - float2 res = modf(float2(), *(&(*(tint_symbol_1)))); + float2 res = tint_modf(float2(), &(*(tint_symbol_1))); } kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) { @@ -17,44 +27,3 @@ kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgro return; } -Compilation failed: - -program_source:5:16: error: no matching function for call to 'modf' - float2 res = modf(float2(), *(&(*(tint_symbol_1)))); - ^~~~ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4854:19: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup float2' (vector of 2 'float' values)), parameter type must be 'metal::float2 &' (aka 'float2 &') -METAL_FUNC float2 modf(float2 x, thread float2 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3142:17: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'half' for 1st argument -METAL_FUNC half modf(half x, thread half &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3386:18: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::half2' (aka 'half2') for 1st argument -METAL_FUNC half2 modf(half2 x, thread half2 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3630:18: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::half3' (aka 'half3') for 1st argument -METAL_FUNC half3 modf(half3 x, thread half3 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3874:18: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::half4' (aka 'half4') for 1st argument -METAL_FUNC half4 modf(half4 x, thread half4 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4610:18: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'float' for 1st argument -METAL_FUNC float modf(float x, thread float &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5098:19: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::float3' (aka 'float3') for 1st argument -METAL_FUNC float3 modf(float3 x, thread float3 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5342:19: note: candidate function not viable: no known conversion from 'float2' (vector of 2 'float' values) to 'metal::float4' (aka 'float4') for 1st argument -METAL_FUNC float4 modf(float4 x, thread float4 &intval) - ^ -program_source:10:31: warning: equality comparison with extraneous parentheses - if ((local_invocation_index == 0u)) { - ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ -program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning - if ((local_invocation_index == 0u)) { - ~ ^ ~ -program_source:10:31: note: use '=' to turn this equality comparison into an assignment - if ((local_invocation_index == 0u)) { - ^~ - = - - diff --git a/test/intrinsics/gen/modf/a128ab.wgsl.expected.spvasm b/test/intrinsics/gen/modf/a128ab.wgsl.expected.spvasm index ef64e6d8aa..bb3dca7612 100644 --- a/test/intrinsics/gen/modf/a128ab.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/a128ab.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/a128ab.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/a128ab.wgsl.expected.wgsl b/test/intrinsics/gen/modf/a128ab.wgsl.expected.wgsl index fffc39b032..89a4a2882e 100644 --- a/test/intrinsics/gen/modf/a128ab.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/a128ab.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/a128ab.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + var arg_1 : vec2; fn modf_a128ab() { diff --git a/test/intrinsics/gen/modf/a54eca.wgsl.expected.hlsl b/test/intrinsics/gen/modf/a54eca.wgsl.expected.hlsl index 59e0e3c444..d3ed29adb6 100644 --- a/test/intrinsics/gen/modf/a54eca.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/a54eca.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/a54eca.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + void modf_a54eca() { float2 arg_1 = float2(0.0f, 0.0f); float2 res = modf(float2(0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/a54eca.wgsl.expected.msl b/test/intrinsics/gen/modf/a54eca.wgsl.expected.msl index 6c583ed2ab..94ea876078 100644 --- a/test/intrinsics/gen/modf/a54eca.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/a54eca.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/a54eca.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + #include using namespace metal; + +float2 tint_modf(float2 param_0, thread float2* param_1) { + float2 whole; + float2 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_a54eca() { float2 arg_1 = 0.0f; - float2 res = modf(float2(), *(&(arg_1))); + float2 res = tint_modf(float2(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/a54eca.wgsl.expected.spvasm b/test/intrinsics/gen/modf/a54eca.wgsl.expected.spvasm index c8d52c53ac..99928e1d72 100644 --- a/test/intrinsics/gen/modf/a54eca.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/a54eca.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/a54eca.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/a54eca.wgsl.expected.wgsl b/test/intrinsics/gen/modf/a54eca.wgsl.expected.wgsl index 39c4a77766..4e886cda38 100644 --- a/test/intrinsics/gen/modf/a54eca.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/a54eca.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/a54eca.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec2 = modf(vec2(), &arg_1); + ^^^^ + fn modf_a54eca() { var arg_1 : vec2; var res : vec2 = modf(vec2(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/bb9088.wgsl.expected.hlsl b/test/intrinsics/gen/modf/bb9088.wgsl.expected.hlsl index 22f570df06..7a373679be 100644 --- a/test/intrinsics/gen/modf/bb9088.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/bb9088.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/bb9088.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + groupshared float3 arg_1; void modf_bb9088() { diff --git a/test/intrinsics/gen/modf/bb9088.wgsl.expected.msl b/test/intrinsics/gen/modf/bb9088.wgsl.expected.msl index 44671b25f2..45dc355329 100644 --- a/test/intrinsics/gen/modf/bb9088.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/bb9088.wgsl.expected.msl @@ -1,10 +1,20 @@ -SKIP: FAILED +intrinsics/gen/modf/bb9088.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ #include using namespace metal; + +float3 tint_modf(float3 param_0, threadgroup float3* param_1) { + float3 whole; + float3 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + void modf_bb9088(threadgroup float3* const tint_symbol_1) { - float3 res = modf(float3(), *(&(*(tint_symbol_1)))); + float3 res = tint_modf(float3(), &(*(tint_symbol_1))); } kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) { @@ -17,44 +27,3 @@ kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgro return; } -Compilation failed: - -program_source:5:16: error: no matching function for call to 'modf' - float3 res = modf(float3(), *(&(*(tint_symbol_1)))); - ^~~~ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5098:19: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup float3' (vector of 3 'float' values)), parameter type must be 'metal::float3 &' (aka 'float3 &') -METAL_FUNC float3 modf(float3 x, thread float3 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3142:17: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'half' for 1st argument -METAL_FUNC half modf(half x, thread half &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3386:18: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::half2' (aka 'half2') for 1st argument -METAL_FUNC half2 modf(half2 x, thread half2 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3630:18: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::half3' (aka 'half3') for 1st argument -METAL_FUNC half3 modf(half3 x, thread half3 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3874:18: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::half4' (aka 'half4') for 1st argument -METAL_FUNC half4 modf(half4 x, thread half4 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4610:18: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'float' for 1st argument -METAL_FUNC float modf(float x, thread float &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4854:19: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::float2' (aka 'float2') for 1st argument -METAL_FUNC float2 modf(float2 x, thread float2 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5342:19: note: candidate function not viable: no known conversion from 'float3' (vector of 3 'float' values) to 'metal::float4' (aka 'float4') for 1st argument -METAL_FUNC float4 modf(float4 x, thread float4 &intval) - ^ -program_source:10:31: warning: equality comparison with extraneous parentheses - if ((local_invocation_index == 0u)) { - ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ -program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning - if ((local_invocation_index == 0u)) { - ~ ^ ~ -program_source:10:31: note: use '=' to turn this equality comparison into an assignment - if ((local_invocation_index == 0u)) { - ^~ - = - - diff --git a/test/intrinsics/gen/modf/bb9088.wgsl.expected.spvasm b/test/intrinsics/gen/modf/bb9088.wgsl.expected.spvasm index df3e8e6434..51b164716e 100644 --- a/test/intrinsics/gen/modf/bb9088.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/bb9088.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/bb9088.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/bb9088.wgsl.expected.wgsl b/test/intrinsics/gen/modf/bb9088.wgsl.expected.wgsl index bd9e14ce80..50f629e5ba 100644 --- a/test/intrinsics/gen/modf/bb9088.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/bb9088.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/bb9088.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec3 = modf(vec3(), &arg_1); + ^^^^ + var arg_1 : vec3; fn modf_bb9088() { diff --git a/test/intrinsics/gen/modf/c87851.wgsl b/test/intrinsics/gen/modf/c87851.wgsl new file mode 100644 index 0000000000..55f7ea8809 --- /dev/null +++ b/test/intrinsics/gen/modf/c87851.wgsl @@ -0,0 +1,45 @@ +// Copyright 2021 The Tint Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//////////////////////////////////////////////////////////////////////////////// +// File generated by tools/intrinsic-gen +// using the template: +// test/intrinsics/intrinsics.wgsl.tmpl +// and the intrinsic defintion file: +// src/intrinsics.def +// +// Do not modify this file directly +//////////////////////////////////////////////////////////////////////////////// + + +// fn modf(vec<2, f32>) -> _modf_result_vec<2> +fn modf_c87851() { + var res = modf(vec2()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + modf_c87851(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + modf_c87851(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + modf_c87851(); +} diff --git a/test/intrinsics/gen/modf/c87851.wgsl.expected.hlsl b/test/intrinsics/gen/modf/c87851.wgsl.expected.hlsl new file mode 100644 index 0000000000..bffd646688 --- /dev/null +++ b/test/intrinsics/gen/modf/c87851.wgsl.expected.hlsl @@ -0,0 +1,35 @@ +struct modf_result_vec2 { + float2 fract; + float2 whole; +}; +modf_result_vec2 tint_modf(float2 param_0) { + float2 whole; + float2 fract = modf(param_0, whole); + modf_result_vec2 result = {fract, whole}; + return result; +} + +void modf_c87851() { + modf_result_vec2 res = tint_modf(float2(0.0f, 0.0f)); +} + +struct tint_symbol { + float4 value : SV_Position; +}; + +tint_symbol vertex_main() { + modf_c87851(); + const tint_symbol tint_symbol_1 = {float4(0.0f, 0.0f, 0.0f, 0.0f)}; + return tint_symbol_1; +} + +void fragment_main() { + modf_c87851(); + return; +} + +[numthreads(1, 1, 1)] +void compute_main() { + modf_c87851(); + return; +} diff --git a/test/intrinsics/gen/modf/c87851.wgsl.expected.msl b/test/intrinsics/gen/modf/c87851.wgsl.expected.msl new file mode 100644 index 0000000000..4bcc46048a --- /dev/null +++ b/test/intrinsics/gen/modf/c87851.wgsl.expected.msl @@ -0,0 +1,38 @@ +#include + +using namespace metal; + +struct modf_result_vec2 { + float2 fract; + float2 whole; +}; +modf_result_vec2 tint_modf(float2 param_0) { + float2 whole; + float2 fract = modf(param_0, whole); + return {fract, whole}; +} + +struct tint_symbol { + float4 value [[position]]; +}; + +void modf_c87851() { + modf_result_vec2 res = tint_modf(float2()); +} + +vertex tint_symbol vertex_main() { + modf_c87851(); + tint_symbol const tint_symbol_1 = {.value=float4()}; + return tint_symbol_1; +} + +fragment void fragment_main() { + modf_c87851(); + return; +} + +kernel void compute_main() { + modf_c87851(); + return; +} + diff --git a/test/intrinsics/gen/modf/c87851.wgsl.expected.spvasm b/test/intrinsics/gen/modf/c87851.wgsl.expected.spvasm new file mode 100644 index 0000000000..d8cbd3df10 --- /dev/null +++ b/test/intrinsics/gen/modf/c87851.wgsl.expected.spvasm @@ -0,0 +1,76 @@ +; SPIR-V +; Version: 1.3 +; Generator: Google Tint Compiler; 0 +; Bound: 36 +; Schema: 0 + OpCapability Shader + %16 = OpExtInstImport "GLSL.std.450" + OpMemoryModel Logical GLSL450 + OpEntryPoint Vertex %vertex_main "vertex_main" %tint_pointsize %tint_symbol_1 + OpEntryPoint Fragment %fragment_main "fragment_main" + OpEntryPoint GLCompute %compute_main "compute_main" + OpExecutionMode %fragment_main OriginUpperLeft + OpExecutionMode %compute_main LocalSize 1 1 1 + OpName %tint_pointsize "tint_pointsize" + OpName %tint_symbol_1 "tint_symbol_1" + OpName %modf_c87851 "modf_c87851" + OpName %_modf_result_vec2 "_modf_result_vec2" + OpMemberName %_modf_result_vec2 0 "fract" + OpMemberName %_modf_result_vec2 1 "whole" + OpName %res "res" + OpName %tint_symbol_2 "tint_symbol_2" + OpName %tint_symbol "tint_symbol" + OpName %vertex_main "vertex_main" + OpName %fragment_main "fragment_main" + OpName %compute_main "compute_main" + OpDecorate %tint_pointsize BuiltIn PointSize + OpDecorate %tint_symbol_1 BuiltIn Position + OpMemberDecorate %_modf_result_vec2 0 Offset 0 + OpMemberDecorate %_modf_result_vec2 1 Offset 8 + %float = OpTypeFloat 32 +%_ptr_Output_float = OpTypePointer Output %float + %4 = OpConstantNull %float +%tint_pointsize = OpVariable %_ptr_Output_float Output %4 + %v4float = OpTypeVector %float 4 +%_ptr_Output_v4float = OpTypePointer Output %v4float + %8 = OpConstantNull %v4float +%tint_symbol_1 = OpVariable %_ptr_Output_v4float Output %8 + %void = OpTypeVoid + %9 = OpTypeFunction %void + %v2float = OpTypeVector %float 2 +%_modf_result_vec2 = OpTypeStruct %v2float %v2float + %17 = OpConstantNull %v2float +%_ptr_Function__modf_result_vec2 = OpTypePointer Function %_modf_result_vec2 + %20 = OpConstantNull %_modf_result_vec2 + %21 = OpTypeFunction %void %v4float + %float_1 = OpConstant %float 1 +%modf_c87851 = OpFunction %void None %9 + %12 = OpLabel + %res = OpVariable %_ptr_Function__modf_result_vec2 Function %20 + %13 = OpExtInst %_modf_result_vec2 %16 ModfStruct %17 + OpStore %res %13 + OpReturn + OpFunctionEnd +%tint_symbol_2 = OpFunction %void None %21 +%tint_symbol = OpFunctionParameter %v4float + %24 = OpLabel + OpStore %tint_symbol_1 %tint_symbol + OpReturn + OpFunctionEnd +%vertex_main = OpFunction %void None %9 + %26 = OpLabel + OpStore %tint_pointsize %float_1 + %28 = OpFunctionCall %void %modf_c87851 + %29 = OpFunctionCall %void %tint_symbol_2 %8 + OpReturn + OpFunctionEnd +%fragment_main = OpFunction %void None %9 + %31 = OpLabel + %32 = OpFunctionCall %void %modf_c87851 + OpReturn + OpFunctionEnd +%compute_main = OpFunction %void None %9 + %34 = OpLabel + %35 = OpFunctionCall %void %modf_c87851 + OpReturn + OpFunctionEnd diff --git a/test/intrinsics/gen/modf/c87851.wgsl.expected.wgsl b/test/intrinsics/gen/modf/c87851.wgsl.expected.wgsl new file mode 100644 index 0000000000..9edd1bf27c --- /dev/null +++ b/test/intrinsics/gen/modf/c87851.wgsl.expected.wgsl @@ -0,0 +1,19 @@ +fn modf_c87851() { + var res = modf(vec2()); +} + +[[stage(vertex)]] +fn vertex_main() -> [[builtin(position)]] vec4 { + modf_c87851(); + return vec4(); +} + +[[stage(fragment)]] +fn fragment_main() { + modf_c87851(); +} + +[[stage(compute), workgroup_size(1)]] +fn compute_main() { + modf_c87851(); +} diff --git a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.hlsl b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.hlsl index afd659dd58..f017b20bb8 100644 --- a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/d1d6f6.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + void modf_d1d6f6() { float4 arg_1 = float4(0.0f, 0.0f, 0.0f, 0.0f); float4 res = modf(float4(0.0f, 0.0f, 0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.msl b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.msl index c2dd7d241c..549d90ed7a 100644 --- a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/d1d6f6.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + #include using namespace metal; + +float4 tint_modf(float4 param_0, thread float4* param_1) { + float4 whole; + float4 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_d1d6f6() { float4 arg_1 = 0.0f; - float4 res = modf(float4(), *(&(arg_1))); + float4 res = tint_modf(float4(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.spvasm b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.spvasm index 1d40f64738..aa8a3b827e 100644 --- a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/d1d6f6.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.wgsl b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.wgsl index dd455172fb..113e0c1039 100644 --- a/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/d1d6f6.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/d1d6f6.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + fn modf_d1d6f6() { var arg_1 : vec4; var res : vec4 = modf(vec4(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/e38ae6.wgsl.expected.hlsl b/test/intrinsics/gen/modf/e38ae6.wgsl.expected.hlsl index 726d9b51d0..7c29406d16 100644 --- a/test/intrinsics/gen/modf/e38ae6.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/e38ae6.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/e38ae6.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + groupshared float arg_1; void modf_e38ae6() { diff --git a/test/intrinsics/gen/modf/e38ae6.wgsl.expected.msl b/test/intrinsics/gen/modf/e38ae6.wgsl.expected.msl index 51877e8225..5ce4bb3a5c 100644 --- a/test/intrinsics/gen/modf/e38ae6.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/e38ae6.wgsl.expected.msl @@ -1,10 +1,20 @@ -SKIP: FAILED +intrinsics/gen/modf/e38ae6.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ #include using namespace metal; + +float tint_modf(float param_0, threadgroup float* param_1) { + float whole; + float fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + void modf_e38ae6(threadgroup float* const tint_symbol_1) { - float res = modf(1.0f, *(&(*(tint_symbol_1)))); + float res = tint_modf(1.0f, &(*(tint_symbol_1))); } kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgroup]]) { @@ -17,44 +27,3 @@ kernel void compute_main(uint local_invocation_index [[thread_index_in_threadgro return; } -Compilation failed: - -program_source:5:15: error: no matching function for call to 'modf' - float res = modf(1.0f, *(&(*(tint_symbol_1)))); - ^~~~ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4610:18: note: candidate function not viable: address space mismatch in 2nd argument ('threadgroup float'), parameter type must be 'float &' -METAL_FUNC float modf(float x, thread float &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3142:17: note: candidate function not viable: no known conversion from 'threadgroup float' to 'half &' for 2nd argument -METAL_FUNC half modf(half x, thread half &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3386:18: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::half2 &' (aka 'half2 &') for 2nd argument -METAL_FUNC half2 modf(half2 x, thread half2 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3630:18: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::half3 &' (aka 'half3 &') for 2nd argument -METAL_FUNC half3 modf(half3 x, thread half3 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:3874:18: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::half4 &' (aka 'half4 &') for 2nd argument -METAL_FUNC half4 modf(half4 x, thread half4 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:4854:19: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::float2 &' (aka 'float2 &') for 2nd argument -METAL_FUNC float2 modf(float2 x, thread float2 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5098:19: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::float3 &' (aka 'float3 &') for 2nd argument -METAL_FUNC float3 modf(float3 x, thread float3 &intval) - ^ -/System/Library/PrivateFrameworks/GPUCompiler.framework/Versions/31001/Libraries/lib/clang/31001.189/include/metal/metal_math:5342:19: note: candidate function not viable: no known conversion from 'threadgroup float' to 'metal::float4 &' (aka 'float4 &') for 2nd argument -METAL_FUNC float4 modf(float4 x, thread float4 &intval) - ^ -program_source:10:31: warning: equality comparison with extraneous parentheses - if ((local_invocation_index == 0u)) { - ~~~~~~~~~~~~~~~~~~~~~~~^~~~~ -program_source:10:31: note: remove extraneous parentheses around the comparison to silence this warning - if ((local_invocation_index == 0u)) { - ~ ^ ~ -program_source:10:31: note: use '=' to turn this equality comparison into an assignment - if ((local_invocation_index == 0u)) { - ^~ - = - - diff --git a/test/intrinsics/gen/modf/e38ae6.wgsl.expected.spvasm b/test/intrinsics/gen/modf/e38ae6.wgsl.expected.spvasm index 3dfafee29b..b5fd9e9540 100644 --- a/test/intrinsics/gen/modf/e38ae6.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/e38ae6.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/e38ae6.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/e38ae6.wgsl.expected.wgsl b/test/intrinsics/gen/modf/e38ae6.wgsl.expected.wgsl index 6f45f8fe4c..af186d12a5 100644 --- a/test/intrinsics/gen/modf/e38ae6.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/e38ae6.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/e38ae6.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + var arg_1 : f32; fn modf_e38ae6() { diff --git a/test/intrinsics/gen/modf/e83560.wgsl.expected.hlsl b/test/intrinsics/gen/modf/e83560.wgsl.expected.hlsl index fbd15df4a5..dbc6c6e9ba 100644 --- a/test/intrinsics/gen/modf/e83560.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/e83560.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/e83560.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + void modf_e83560() { float4 arg_1 = float4(0.0f, 0.0f, 0.0f, 0.0f); float4 res = modf(float4(0.0f, 0.0f, 0.0f, 0.0f), arg_1); diff --git a/test/intrinsics/gen/modf/e83560.wgsl.expected.msl b/test/intrinsics/gen/modf/e83560.wgsl.expected.msl index 922a9726a6..28bee9f9fc 100644 --- a/test/intrinsics/gen/modf/e83560.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/e83560.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/e83560.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + #include using namespace metal; + +float4 tint_modf(float4 param_0, thread float4* param_1) { + float4 whole; + float4 fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_e83560() { float4 arg_1 = 0.0f; - float4 res = modf(float4(), *(&(arg_1))); + float4 res = tint_modf(float4(), &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/e83560.wgsl.expected.spvasm b/test/intrinsics/gen/modf/e83560.wgsl.expected.spvasm index 8e5622c886..99f906d078 100644 --- a/test/intrinsics/gen/modf/e83560.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/e83560.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/e83560.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/e83560.wgsl.expected.wgsl b/test/intrinsics/gen/modf/e83560.wgsl.expected.wgsl index 55a52e2e5c..719781cf55 100644 --- a/test/intrinsics/gen/modf/e83560.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/e83560.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/e83560.wgsl:29:24 warning: use of deprecated intrinsic + var res: vec4 = modf(vec4(), &arg_1); + ^^^^ + fn modf_e83560() { var arg_1 : vec4; var res : vec4 = modf(vec4(), &(arg_1)); diff --git a/test/intrinsics/gen/modf/f90945.wgsl.expected.hlsl b/test/intrinsics/gen/modf/f90945.wgsl.expected.hlsl index 5e79aa3c7a..7255685c1d 100644 --- a/test/intrinsics/gen/modf/f90945.wgsl.expected.hlsl +++ b/test/intrinsics/gen/modf/f90945.wgsl.expected.hlsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/f90945.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + void modf_f90945() { float arg_1 = 0.0f; float res = modf(1.0f, arg_1); diff --git a/test/intrinsics/gen/modf/f90945.wgsl.expected.msl b/test/intrinsics/gen/modf/f90945.wgsl.expected.msl index eed1548909..795e7efb86 100644 --- a/test/intrinsics/gen/modf/f90945.wgsl.expected.msl +++ b/test/intrinsics/gen/modf/f90945.wgsl.expected.msl @@ -1,13 +1,25 @@ +intrinsics/gen/modf/f90945.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + #include using namespace metal; + +float tint_modf(float param_0, thread float* param_1) { + float whole; + float fract = modf(param_0, whole); + *param_1 = whole; + return fract; +} + struct tint_symbol { float4 value [[position]]; }; void modf_f90945() { float arg_1 = 0.0f; - float res = modf(1.0f, *(&(arg_1))); + float res = tint_modf(1.0f, &(arg_1)); } vertex tint_symbol vertex_main() { diff --git a/test/intrinsics/gen/modf/f90945.wgsl.expected.spvasm b/test/intrinsics/gen/modf/f90945.wgsl.expected.spvasm index 0872a2f38d..29b694833f 100644 --- a/test/intrinsics/gen/modf/f90945.wgsl.expected.spvasm +++ b/test/intrinsics/gen/modf/f90945.wgsl.expected.spvasm @@ -1,3 +1,7 @@ +intrinsics/gen/modf/f90945.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 diff --git a/test/intrinsics/gen/modf/f90945.wgsl.expected.wgsl b/test/intrinsics/gen/modf/f90945.wgsl.expected.wgsl index 6665ed21b1..fb28341870 100644 --- a/test/intrinsics/gen/modf/f90945.wgsl.expected.wgsl +++ b/test/intrinsics/gen/modf/f90945.wgsl.expected.wgsl @@ -1,3 +1,7 @@ +intrinsics/gen/modf/f90945.wgsl:29:18 warning: use of deprecated intrinsic + var res: f32 = modf(1.0, &arg_1); + ^^^^ + fn modf_f90945() { var arg_1 : f32; var res : f32 = modf(1.0, &(arg_1)); diff --git a/test/intrinsics/intrinsics.wgsl.tmpl b/test/intrinsics/intrinsics.wgsl.tmpl index 1751b6d57a..9ed3c4266a 100644 --- a/test/intrinsics/intrinsics.wgsl.tmpl +++ b/test/intrinsics/intrinsics.wgsl.tmpl @@ -123,7 +123,7 @@ fn {{$permutation}}() { {{- /* Make the call to the intrinsic */ -}} {{- /*indent*/}} {{/*indent*/ -}} {{- if .ReturnType -}} - var res: {{template "Type" .ReturnType}} = {{/* preserve space after = */ -}} + var res{{if IsDeclarable .ReturnType}}: {{template "Type" .ReturnType}}{{end}} = {{/* preserve space after = */ -}} {{- end -}} {{$function}}( {{- range $i, $p := .Parameters -}} diff --git a/test/intrinsics/modf.wgsl b/test/intrinsics/modf.wgsl index dae344727b..f8b1cf3d38 100644 --- a/test/intrinsics/modf.wgsl +++ b/test/intrinsics/modf.wgsl @@ -1,5 +1,6 @@ [[stage(compute), workgroup_size(1)]] fn main() { - var whole : f32; - let frac : f32 = modf(1.23, &whole); + let res = modf(1.23); + let fract : f32 = res.fract; + let whole : f32 = res.whole; } diff --git a/test/intrinsics/modf.wgsl.expected.hlsl b/test/intrinsics/modf.wgsl.expected.hlsl index 200d084975..d2bdca4499 100644 --- a/test/intrinsics/modf.wgsl.expected.hlsl +++ b/test/intrinsics/modf.wgsl.expected.hlsl @@ -1,6 +1,18 @@ +struct modf_result { + float fract; + float whole; +}; +modf_result tint_modf(float param_0) { + float whole; + float fract = modf(param_0, whole); + modf_result result = {fract, whole}; + return result; +} + [numthreads(1, 1, 1)] void main() { - float whole = 0.0f; - const float tint_symbol = modf(1.230000019f, whole); + const modf_result res = tint_modf(1.230000019f); + const float fract = res.fract; + const float whole = res.whole; return; } diff --git a/test/intrinsics/modf.wgsl.expected.msl b/test/intrinsics/modf.wgsl.expected.msl index 3f2627a754..6f6cf69501 100644 --- a/test/intrinsics/modf.wgsl.expected.msl +++ b/test/intrinsics/modf.wgsl.expected.msl @@ -1,9 +1,21 @@ #include using namespace metal; + +struct modf_result { + float fract; + float whole; +}; +modf_result tint_modf(float param_0) { + float whole; + float fract = modf(param_0, whole); + return {fract, whole}; +} + kernel void tint_symbol() { - float whole = 0.0f; - float const frac = modf(1.230000019f, *(&(whole))); + modf_result const res = tint_modf(1.230000019f); + float const fract = res.fract; + float const whole = res.whole; return; } diff --git a/test/intrinsics/modf.wgsl.expected.spvasm b/test/intrinsics/modf.wgsl.expected.spvasm index 090d8b8946..312234711a 100644 --- a/test/intrinsics/modf.wgsl.expected.spvasm +++ b/test/intrinsics/modf.wgsl.expected.spvasm @@ -1,24 +1,28 @@ ; SPIR-V ; Version: 1.3 ; Generator: Google Tint Compiler; 0 -; Bound: 13 +; Bound: 12 ; Schema: 0 OpCapability Shader - %10 = OpExtInstImport "GLSL.std.450" + %8 = OpExtInstImport "GLSL.std.450" OpMemoryModel Logical GLSL450 OpEntryPoint GLCompute %main "main" OpExecutionMode %main LocalSize 1 1 1 OpName %main "main" - OpName %whole "whole" + OpName %_modf_result "_modf_result" + OpMemberName %_modf_result 0 "fract" + OpMemberName %_modf_result 1 "whole" + OpMemberDecorate %_modf_result 0 Offset 0 + OpMemberDecorate %_modf_result 1 Offset 4 %void = OpTypeVoid %1 = OpTypeFunction %void %float = OpTypeFloat 32 -%_ptr_Function_float = OpTypePointer Function %float - %8 = OpConstantNull %float +%_modf_result = OpTypeStruct %float %float %float_1_23000002 = OpConstant %float 1.23000002 %main = OpFunction %void None %1 %4 = OpLabel - %whole = OpVariable %_ptr_Function_float Function %8 - %9 = OpExtInst %float %10 Modf %float_1_23000002 %whole + %5 = OpExtInst %_modf_result %8 ModfStruct %float_1_23000002 + %10 = OpCompositeExtract %float %5 0 + %11 = OpCompositeExtract %float %5 1 OpReturn OpFunctionEnd diff --git a/test/intrinsics/modf.wgsl.expected.wgsl b/test/intrinsics/modf.wgsl.expected.wgsl index eea85627a4..ba6a7c68df 100644 --- a/test/intrinsics/modf.wgsl.expected.wgsl +++ b/test/intrinsics/modf.wgsl.expected.wgsl @@ -1,5 +1,6 @@ [[stage(compute), workgroup_size(1)]] fn main() { - var whole : f32; - let frac : f32 = modf(1.230000019, &(whole)); + let res = modf(1.230000019); + let fract : f32 = res.fract; + let whole : f32 = res.whole; } diff --git a/tools/src/cmd/intrinsic-gen/gen/generate.go b/tools/src/cmd/intrinsic-gen/gen/generate.go index ff256fb139..6972841a93 100644 --- a/tools/src/cmd/intrinsic-gen/gen/generate.go +++ b/tools/src/cmd/intrinsic-gen/gen/generate.go @@ -58,6 +58,8 @@ func (g *generator) generate(tmpl string, w io.Writer, writeFile WriteFile) erro "SplitDisplayName": splitDisplayName, "HasPrefix": strings.HasPrefix, "HasSuffix": strings.HasSuffix, + "TrimPrefix": strings.TrimPrefix, + "TrimSuffix": strings.TrimSuffix, "IsEnumEntry": is(sem.EnumEntry{}), "IsEnumMatcher": is(sem.EnumMatcher{}), "IsFQN": is(sem.FullyQualifiedName{}), @@ -66,6 +68,7 @@ func (g *generator) generate(tmpl string, w io.Writer, writeFile WriteFile) erro "IsTemplateNumberParam": is(sem.TemplateNumberParam{}), "IsTemplateTypeParam": is(sem.TemplateTypeParam{}), "IsType": is(sem.Type{}), + "IsDeclarable": isDeclarable, "IsFirstIn": isFirstIn, "IsLastIn": isLastIn, "IntrinsicTable": g.intrinsicTable, @@ -200,6 +203,13 @@ func iterate(n int) []int { return out } +// isDeclarable returns false if the FullyQualifiedName starts with a +// leading underscore. These are undeclarable as WGSL does not allow identifers +// to have a leading underscore. +func isDeclarable(fqn sem.FullyQualifiedName) bool { + return !strings.HasPrefix(fqn.Target.GetName(), "_") +} + // pascalCase returns the snake-case string s transformed into 'PascalCase', // Rules: // * The first letter of the string is capitalized diff --git a/tools/src/cmd/intrinsic-gen/gen/permutate.go b/tools/src/cmd/intrinsic-gen/gen/permutate.go index aa8f77e075..61fda1a47c 100644 --- a/tools/src/cmd/intrinsic-gen/gen/permutate.go +++ b/tools/src/cmd/intrinsic-gen/gen/permutate.go @@ -364,6 +364,10 @@ func validate(fqn sem.FullyQualifiedName, uses *sem.StageUses) bool { } } + if !isDeclarable(fqn) { + return false + } + for _, arg := range fqn.TemplateArguments { if argFQN, ok := arg.(sem.FullyQualifiedName); ok { if !validate(argFQN, uses) { diff --git a/tools/src/cmd/intrinsic-gen/lexer/lexer.go b/tools/src/cmd/intrinsic-gen/lexer/lexer.go index 424dabb238..1f25aea4e0 100644 --- a/tools/src/cmd/intrinsic-gen/lexer/lexer.go +++ b/tools/src/cmd/intrinsic-gen/lexer/lexer.go @@ -91,7 +91,7 @@ func (l *lexer) lex() error { case l.match("enum", tok.Enum): case l.match("type", tok.Type): case l.match("match", tok.Match): - case unicode.IsLetter(l.peek(0)): + case unicode.IsLetter(l.peek(0)) || l.peek(0) == '_': l.tok(l.count(alphaNumericOrUnderscore), tok.Identifier) case unicode.IsNumber(l.peek(0)): l.tok(l.count(unicode.IsNumber), tok.Integer) diff --git a/tools/src/cmd/intrinsic-gen/lexer/lexer_test.go b/tools/src/cmd/intrinsic-gen/lexer/lexer_test.go index da354c45db..d0ec922e2d 100644 --- a/tools/src/cmd/intrinsic-gen/lexer/lexer_test.go +++ b/tools/src/cmd/intrinsic-gen/lexer/lexer_test.go @@ -40,6 +40,9 @@ func TestLexTokens(t *testing.T) { {"ident_123", tok.Token{Kind: tok.Identifier, Runes: []rune("ident_123"), Source: tok.Source{ S: loc(1, 1, 0), E: loc(1, 10, 9), }}}, + {"_ident_", tok.Token{Kind: tok.Identifier, Runes: []rune("_ident_"), Source: tok.Source{ + S: loc(1, 1, 0), E: loc(1, 8, 7), + }}}, {"123456789", tok.Token{Kind: tok.Integer, Runes: []rune("123456789"), Source: tok.Source{ S: loc(1, 1, 0), E: loc(1, 10, 9), }}},