[tint] Fork core builtin functions from core -> WGSL
This allows the core builtins to deviate from the WGSL builtins.
Add 'lower' and 'raise' stages for converting between WGSL <-> IR.
Move all the lang/wgsl and ast_printers over to wgsl::BuiltinFn.
Change-Id: I097f4ca877ccc888c96c63987f6e86d7cb0436ba
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/152549
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/api/BUILD.bazel b/src/tint/api/BUILD.bazel
index 00f3628..885b21d 100644
--- a/src/tint/api/BUILD.bazel
+++ b/src/tint/api/BUILD.bazel
@@ -36,6 +36,7 @@
"//src/tint/api/options",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/hlsl/writer/common",
"//src/tint/lang/spirv/reader/common",
diff --git a/src/tint/api/BUILD.cmake b/src/tint/api/BUILD.cmake
index 05e09ff..697a9f0 100644
--- a/src/tint/api/BUILD.cmake
+++ b/src/tint/api/BUILD.cmake
@@ -38,6 +38,7 @@
tint_api_options
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_hlsl_writer_common
tint_lang_spirv_reader_common
diff --git a/src/tint/api/BUILD.gn b/src/tint/api/BUILD.gn
index e70d3af..b1e798a 100644
--- a/src/tint/api/BUILD.gn
+++ b/src/tint/api/BUILD.gn
@@ -35,6 +35,7 @@
"${tint_src_dir}/api/options",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/hlsl/writer/common",
"${tint_src_dir}/lang/spirv/reader/common",
diff --git a/src/tint/cmd/bench/BUILD.bazel b/src/tint/cmd/bench/BUILD.bazel
index 7995335..62a4335 100644
--- a/src/tint/cmd/bench/BUILD.bazel
+++ b/src/tint/cmd/bench/BUILD.bazel
@@ -61,9 +61,11 @@
"main_bench.cc",
],
deps = [
+ "//src/tint/api/common",
"//src/tint/cmd/bench",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/core:bench",
"//src/tint/lang/spirv/reader/common",
diff --git a/src/tint/cmd/bench/BUILD.cmake b/src/tint/cmd/bench/BUILD.cmake
index fdde451..a6da553 100644
--- a/src/tint/cmd/bench/BUILD.cmake
+++ b/src/tint/cmd/bench/BUILD.cmake
@@ -61,9 +61,11 @@
)
tint_target_add_dependencies(tint_cmd_bench_bench_cmd bench_cmd
+ tint_api_common
tint_cmd_bench
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_core_bench
tint_lang_spirv_reader_common
diff --git a/src/tint/cmd/common/BUILD.bazel b/src/tint/cmd/common/BUILD.bazel
index 7cf4691..5ff1ba3 100644
--- a/src/tint/cmd/common/BUILD.bazel
+++ b/src/tint/cmd/common/BUILD.bazel
@@ -38,6 +38,7 @@
"//src/tint/api/options",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/spirv/reader/common",
"//src/tint/lang/wgsl",
diff --git a/src/tint/cmd/common/BUILD.cmake b/src/tint/cmd/common/BUILD.cmake
index a10c867..7bd7799 100644
--- a/src/tint/cmd/common/BUILD.cmake
+++ b/src/tint/cmd/common/BUILD.cmake
@@ -37,6 +37,7 @@
tint_api_options
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_spirv_reader_common
tint_lang_wgsl
diff --git a/src/tint/cmd/common/BUILD.gn b/src/tint/cmd/common/BUILD.gn
index b66d0ba..5bca6c4 100644
--- a/src/tint/cmd/common/BUILD.gn
+++ b/src/tint/cmd/common/BUILD.gn
@@ -41,6 +41,7 @@
"${tint_src_dir}/api/options",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/spirv/reader/common",
"${tint_src_dir}/lang/wgsl",
diff --git a/src/tint/cmd/test/BUILD.bazel b/src/tint/cmd/test/BUILD.bazel
index d57721c..60aebb2 100644
--- a/src/tint/cmd/test/BUILD.bazel
+++ b/src/tint/cmd/test/BUILD.bazel
@@ -43,12 +43,14 @@
"//src/tint/lang/wgsl/helpers:test",
"//src/tint/lang/wgsl/inspector:test",
"//src/tint/lang/wgsl/program:test",
+ "//src/tint/lang/wgsl/reader/lower:test",
"//src/tint/lang/wgsl/reader/parser:test",
"//src/tint/lang/wgsl/reader/program_to_ir:test",
"//src/tint/lang/wgsl/resolver:test",
"//src/tint/lang/wgsl/sem:test",
"//src/tint/lang/wgsl/writer/ast_printer:test",
"//src/tint/lang/wgsl/writer/ir_to_program:test",
+ "//src/tint/lang/wgsl/writer/raise:test",
"//src/tint/lang/wgsl:test",
"//src/tint/utils/cli:test",
"//src/tint/utils/command:test",
diff --git a/src/tint/cmd/test/BUILD.cmake b/src/tint/cmd/test/BUILD.cmake
index 006baed..108f7af 100644
--- a/src/tint/cmd/test/BUILD.cmake
+++ b/src/tint/cmd/test/BUILD.cmake
@@ -44,12 +44,14 @@
tint_lang_wgsl_helpers_test
tint_lang_wgsl_inspector_test
tint_lang_wgsl_program_test
+ tint_lang_wgsl_reader_lower_test
tint_lang_wgsl_reader_parser_test
tint_lang_wgsl_reader_program_to_ir_test
tint_lang_wgsl_resolver_test
tint_lang_wgsl_sem_test
tint_lang_wgsl_writer_ast_printer_test
tint_lang_wgsl_writer_ir_to_program_test
+ tint_lang_wgsl_writer_raise_test
tint_lang_wgsl_test
tint_utils_cli_test
tint_utils_command_test
diff --git a/src/tint/cmd/test/BUILD.gn b/src/tint/cmd/test/BUILD.gn
index fd1f9bf..5461cfb 100644
--- a/src/tint/cmd/test/BUILD.gn
+++ b/src/tint/cmd/test/BUILD.gn
@@ -49,12 +49,14 @@
"${tint_src_dir}/lang/wgsl/helpers:unittests",
"${tint_src_dir}/lang/wgsl/inspector:unittests",
"${tint_src_dir}/lang/wgsl/program:unittests",
+ "${tint_src_dir}/lang/wgsl/reader/lower:unittests",
"${tint_src_dir}/lang/wgsl/reader/parser:unittests",
"${tint_src_dir}/lang/wgsl/reader/program_to_ir:unittests",
"${tint_src_dir}/lang/wgsl/resolver:unittests",
"${tint_src_dir}/lang/wgsl/sem:unittests",
"${tint_src_dir}/lang/wgsl/writer/ast_printer:unittests",
"${tint_src_dir}/lang/wgsl/writer/ir_to_program:unittests",
+ "${tint_src_dir}/lang/wgsl/writer/raise:unittests",
"${tint_src_dir}/utils/cli:unittests",
"${tint_src_dir}/utils/command:unittests",
"${tint_src_dir}/utils/containers:unittests",
diff --git a/src/tint/lang/core/builtin_fn.cc.tmpl b/src/tint/lang/core/builtin_fn.cc.tmpl
index 5a0d100..0a4ba6d 100644
--- a/src/tint/lang/core/builtin_fn.cc.tmpl
+++ b/src/tint/lang/core/builtin_fn.cc.tmpl
@@ -1,6 +1,6 @@
{{- /*
--------------------------------------------------------------------------------
-Template file for use with tools/src/cmd/gen to generate builtin_function.cc
+Template file for use with tools/src/cmd/gen to generate builtin_fn.cc
To update the generated file, run:
./tools/run gen
diff --git a/src/tint/lang/core/builtin_fn.h.tmpl b/src/tint/lang/core/builtin_fn.h.tmpl
index 3a10674..d5198fa 100644
--- a/src/tint/lang/core/builtin_fn.h.tmpl
+++ b/src/tint/lang/core/builtin_fn.h.tmpl
@@ -1,6 +1,6 @@
{{- /*
--------------------------------------------------------------------------------
-Template file for use with tools/src/cmd/gen to generate builtin_function.h
+Template file for use with tools/src/cmd/gen to generate builtin_fn.h
To update the generated file, run:
./tools/run gen
diff --git a/src/tint/lang/core/constant/BUILD.bazel b/src/tint/lang/core/constant/BUILD.bazel
index 402a7e3..6b5ca7b 100644
--- a/src/tint/lang/core/constant/BUILD.bazel
+++ b/src/tint/lang/core/constant/BUILD.bazel
@@ -89,6 +89,7 @@
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
"//src/tint/lang/core/intrinsic",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/core/type:test",
"//src/tint/lang/wgsl",
diff --git a/src/tint/lang/core/constant/BUILD.cmake b/src/tint/lang/core/constant/BUILD.cmake
index d3829a2..5e1666d 100644
--- a/src/tint/lang/core/constant/BUILD.cmake
+++ b/src/tint/lang/core/constant/BUILD.cmake
@@ -88,6 +88,7 @@
tint_lang_core
tint_lang_core_constant
tint_lang_core_intrinsic
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_core_type_test
tint_lang_wgsl
diff --git a/src/tint/lang/core/constant/BUILD.gn b/src/tint/lang/core/constant/BUILD.gn
index 39ae73f..4d5ccd8 100644
--- a/src/tint/lang/core/constant/BUILD.gn
+++ b/src/tint/lang/core/constant/BUILD.gn
@@ -91,6 +91,7 @@
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
"${tint_src_dir}/lang/core/intrinsic",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/core/type:unittests",
"${tint_src_dir}/lang/wgsl",
diff --git a/src/tint/lang/core/intrinsic/table.cc b/src/tint/lang/core/intrinsic/table.cc
index 564b5e0..1e057a7f 100644
--- a/src/tint/lang/core/intrinsic/table.cc
+++ b/src/tint/lang/core/intrinsic/table.cc
@@ -584,15 +584,6 @@
} // namespace
Result<Overload> Lookup(Context& context,
- core::BuiltinFn builtin_type,
- VectorRef<const core::type::Type*> args,
- EvaluationStage earliest_eval_stage,
- const Source& source) {
- return Lookup(context, core::str(builtin_type), static_cast<size_t>(builtin_type), args,
- earliest_eval_stage, source);
-}
-
-Result<Overload> Lookup(Context& context,
const char* intrinsic_name,
size_t function_id,
VectorRef<const core::type::Type*> args,
diff --git a/src/tint/lang/core/intrinsic/table.h b/src/tint/lang/core/intrinsic/table.h
index 1f38b3d..6b13e4e 100644
--- a/src/tint/lang/core/intrinsic/table.h
+++ b/src/tint/lang/core/intrinsic/table.h
@@ -17,6 +17,7 @@
#include <memory>
#include <string>
+#include <utility>
#include "src/tint/lang/core/binary_op.h"
#include "src/tint/lang/core/builtin_fn.h"
@@ -25,6 +26,7 @@
#include "src/tint/lang/core/parameter_usage.h"
#include "src/tint/lang/core/unary_op.h"
#include "src/tint/utils/containers/vector.h"
+#include "src/tint/utils/text/string.h"
// Forward declarations
namespace tint::diag {
@@ -99,25 +101,6 @@
/// Lookup looks for the builtin overload with the given signature, raising an error diagnostic
/// if the builtin was not found.
/// @param context the intrinsic context
-/// @param builtin_type the builtin identifier
-/// @param args the argument types passed to the builtin function
-/// @param earliest_eval_stage the the earliest evaluation stage that a call to
-/// the builtin can be made. This can alter the overloads considered.
-/// For example, if the earliest evaluation stage is `EvaluationStage::kRuntime`, then
-/// only overloads with concrete argument types will be considered, as all
-/// abstract-numerics will have been materialized after shader creation time
-/// (EvaluationStage::kConstant).
-/// @param source the source of the builtin call
-/// @return the resolved builtin function overload
-Result<Overload> Lookup(Context& context,
- core::BuiltinFn builtin_type,
- VectorRef<const core::type::Type*> args,
- EvaluationStage earliest_eval_stage,
- const Source& source);
-
-/// Lookup looks for the builtin overload with the given signature, raising an error diagnostic
-/// if the builtin was not found.
-/// @param context the intrinsic context
/// @param intrinsic_name the name of the intrinsi
/// @param function_id the function identifier
/// @param args the argument types passed to the builtin function
@@ -136,6 +119,31 @@
EvaluationStage earliest_eval_stage,
const Source& source);
+/// Lookup looks for the builtin overload with the given signature, raising an error diagnostic
+/// if the builtin was not found.
+/// @param context the intrinsic context
+/// @param builtin_fn the builtin function
+/// @param args the argument types passed to the builtin function
+/// @param earliest_eval_stage the the earliest evaluation stage that a call to
+/// the builtin can be made. This can alter the overloads considered.
+/// For example, if the earliest evaluation stage is `EvaluationStage::kRuntime`, then
+/// only overloads with concrete argument types will be considered, as all
+/// abstract-numerics will have been materialized after shader creation time
+/// (EvaluationStage::kConstant).
+/// @param source the source of the builtin call
+/// @return the resolved builtin function overload
+template <typename BUILTIN_FN>
+Result<Overload> Lookup(Context& context,
+ BUILTIN_FN builtin_fn,
+ VectorRef<const core::type::Type*> args,
+ EvaluationStage earliest_eval_stage,
+ const Source& source) {
+ static_assert(std::is_enum_v<BUILTIN_FN>);
+ std::string name = tint::ToString(builtin_fn); // TODO(bclayton): Avoid this heap allocation
+ size_t id = static_cast<size_t>(builtin_fn);
+ return Lookup(context, name.c_str(), id, std::move(args), earliest_eval_stage, source);
+}
+
/// Lookup looks for the unary op overload with the given signature, raising an error
/// diagnostic if the operator was not found.
/// @param context the intrinsic context
diff --git a/src/tint/lang/glsl/writer/ast_printer/ast_printer.cc b/src/tint/lang/glsl/writer/ast_printer/ast_printer.cc
index 89387ae..23fe5b5 100644
--- a/src/tint/lang/glsl/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/glsl/writer/ast_printer/ast_printer.cc
@@ -856,35 +856,35 @@
auto* expr = call->Declaration();
if (builtin->IsTexture()) {
EmitTextureCall(out, call, builtin);
- } else if (builtin->Fn() == core::BuiltinFn::kCountOneBits) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kCountOneBits) {
EmitCountOneBitsCall(out, expr);
- } else if (builtin->Fn() == core::BuiltinFn::kSelect) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kSelect) {
EmitSelectCall(out, expr, builtin);
- } else if (builtin->Fn() == core::BuiltinFn::kDot) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kDot) {
EmitDotCall(out, expr, builtin);
- } else if (builtin->Fn() == core::BuiltinFn::kModf) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kModf) {
EmitModfCall(out, expr, builtin);
- } else if (builtin->Fn() == core::BuiltinFn::kFrexp) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kFrexp) {
EmitFrexpCall(out, expr, builtin);
- } else if (builtin->Fn() == core::BuiltinFn::kDegrees) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kDegrees) {
EmitDegreesCall(out, expr, builtin);
- } else if (builtin->Fn() == core::BuiltinFn::kRadians) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kRadians) {
EmitRadiansCall(out, expr, builtin);
- } else if (builtin->Fn() == core::BuiltinFn::kQuantizeToF16) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kQuantizeToF16) {
EmitQuantizeToF16Call(out, expr, builtin);
- } else if (builtin->Fn() == core::BuiltinFn::kArrayLength) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kArrayLength) {
EmitArrayLength(out, expr);
- } else if (builtin->Fn() == core::BuiltinFn::kExtractBits) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kExtractBits) {
EmitExtractBits(out, expr);
- } else if (builtin->Fn() == core::BuiltinFn::kInsertBits) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kInsertBits) {
EmitInsertBits(out, expr);
- } else if (builtin->Fn() == core::BuiltinFn::kFma && version_.IsES()) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kFma && version_.IsES()) {
EmitEmulatedFMA(out, expr);
- } else if (builtin->Fn() == core::BuiltinFn::kAbs &&
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kAbs &&
TypeOf(expr->args[0])->UnwrapRef()->is_unsigned_integer_scalar_or_vector()) {
// GLSL does not support abs() on unsigned arguments. However, it's a no-op.
EmitExpression(out, expr->args[0]);
- } else if ((builtin->Fn() == core::BuiltinFn::kAny || builtin->Fn() == core::BuiltinFn::kAll) &&
+ } else if ((builtin->Fn() == wgsl::BuiltinFn::kAny || builtin->Fn() == wgsl::BuiltinFn::kAll) &&
TypeOf(expr->args[0])->UnwrapRef()->Is<core::type::Scalar>()) {
// GLSL does not support any() or all() on scalar arguments. It's a no-op.
EmitExpression(out, expr->args[0]);
@@ -966,7 +966,7 @@
};
switch (builtin->Fn()) {
- case core::BuiltinFn::kAtomicLoad: {
+ case wgsl::BuiltinFn::kAtomicLoad: {
// GLSL does not have an atomicLoad, so we emulate it with
// atomicOr using 0 as the OR value
out << "atomicOr";
@@ -980,7 +980,7 @@
}
return;
}
- case core::BuiltinFn::kAtomicCompareExchangeWeak: {
+ case wgsl::BuiltinFn::kAtomicCompareExchangeWeak: {
EmitStructType(&helpers_, builtin->ReturnType()->As<core::type::Struct>());
auto* dest = expr->args[0];
@@ -1019,33 +1019,33 @@
return;
}
- case core::BuiltinFn::kAtomicAdd:
- case core::BuiltinFn::kAtomicSub:
+ case wgsl::BuiltinFn::kAtomicAdd:
+ case wgsl::BuiltinFn::kAtomicSub:
call("atomicAdd");
return;
- case core::BuiltinFn::kAtomicMax:
+ case wgsl::BuiltinFn::kAtomicMax:
call("atomicMax");
return;
- case core::BuiltinFn::kAtomicMin:
+ case wgsl::BuiltinFn::kAtomicMin:
call("atomicMin");
return;
- case core::BuiltinFn::kAtomicAnd:
+ case wgsl::BuiltinFn::kAtomicAnd:
call("atomicAnd");
return;
- case core::BuiltinFn::kAtomicOr:
+ case wgsl::BuiltinFn::kAtomicOr:
call("atomicOr");
return;
- case core::BuiltinFn::kAtomicXor:
+ case wgsl::BuiltinFn::kAtomicXor:
call("atomicXor");
return;
- case core::BuiltinFn::kAtomicExchange:
- case core::BuiltinFn::kAtomicStore:
+ case wgsl::BuiltinFn::kAtomicExchange:
+ case wgsl::BuiltinFn::kAtomicStore:
// GLSL does not have an atomicStore, so we emulate it with
// atomicExchange.
call("atomicExchange");
@@ -1301,14 +1301,14 @@
void ASTPrinter::EmitBarrierCall(StringStream& out, const sem::BuiltinFn* builtin) {
// TODO(crbug.com/tint/661): Combine sequential barriers to a single
// instruction.
- if (builtin->Fn() == core::BuiltinFn::kWorkgroupBarrier) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kWorkgroupBarrier) {
out << "barrier()";
- } else if (builtin->Fn() == core::BuiltinFn::kStorageBarrier) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kStorageBarrier) {
out << "{ barrier(); memoryBarrierBuffer(); }";
- } else if (builtin->Fn() == core::BuiltinFn::kTextureBarrier) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kTextureBarrier) {
out << "{ barrier(); memoryBarrierImage(); }";
} else {
- TINT_UNREACHABLE() << "unexpected barrier builtin type " << core::str(builtin->Fn());
+ TINT_UNREACHABLE() << "unexpected barrier builtin type " << builtin->Fn();
}
}
@@ -1376,7 +1376,7 @@
};
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureDimensions: {
+ case wgsl::BuiltinFn::kTextureDimensions: {
// textureDimensions() returns an unsigned scalar / vector in WGSL.
// textureSize() / imageSize() returns a signed scalar / vector in GLSL.
// Cast.
@@ -1411,7 +1411,7 @@
}
return;
}
- case core::BuiltinFn::kTextureNumLayers: {
+ case wgsl::BuiltinFn::kTextureNumLayers: {
// textureNumLayers() returns an unsigned scalar in WGSL.
// textureSize() / imageSize() returns a signed scalar / vector in GLSL.
// Cast.
@@ -1442,7 +1442,7 @@
out << ").z";
return;
}
- case core::BuiltinFn::kTextureNumLevels: {
+ case wgsl::BuiltinFn::kTextureNumLevels: {
// textureNumLevels() returns an unsigned scalar in WGSL.
// textureQueryLevels() returns a signed scalar in GLSL.
// Cast.
@@ -1454,7 +1454,7 @@
out << ")";
return;
}
- case core::BuiltinFn::kTextureNumSamples: {
+ case wgsl::BuiltinFn::kTextureNumSamples: {
// textureNumSamples() returns an unsigned scalar in WGSL.
// textureSamples() returns a signed scalar in GLSL.
// Cast.
@@ -1475,40 +1475,40 @@
bool is_depth = texture_type->Is<core::type::DepthTexture>();
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureSample:
- case core::BuiltinFn::kTextureSampleBias:
+ case wgsl::BuiltinFn::kTextureSample:
+ case wgsl::BuiltinFn::kTextureSampleBias:
out << "texture";
if (is_depth) {
glsl_ret_width = 1u;
}
break;
- case core::BuiltinFn::kTextureSampleLevel:
+ case wgsl::BuiltinFn::kTextureSampleLevel:
out << "textureLod";
if (is_depth) {
glsl_ret_width = 1u;
}
break;
- case core::BuiltinFn::kTextureGather:
- case core::BuiltinFn::kTextureGatherCompare:
+ case wgsl::BuiltinFn::kTextureGather:
+ case wgsl::BuiltinFn::kTextureGatherCompare:
out << "textureGather";
append_depth_ref_to_coords = false;
break;
- case core::BuiltinFn::kTextureSampleGrad:
+ case wgsl::BuiltinFn::kTextureSampleGrad:
out << "textureGrad";
break;
- case core::BuiltinFn::kTextureSampleCompare:
- case core::BuiltinFn::kTextureSampleCompareLevel:
+ case wgsl::BuiltinFn::kTextureSampleCompare:
+ case wgsl::BuiltinFn::kTextureSampleCompareLevel:
out << "texture";
glsl_ret_width = 1;
break;
- case core::BuiltinFn::kTextureLoad:
+ case wgsl::BuiltinFn::kTextureLoad:
if (texture_type->Is<core::type::StorageTexture>()) {
out << "imageLoad";
} else {
out << "texelFetch";
}
break;
- case core::BuiltinFn::kTextureStore:
+ case wgsl::BuiltinFn::kTextureStore:
out << "imageStore";
break;
default:
@@ -1579,7 +1579,7 @@
}
// GLSL's textureGather always requires a refZ parameter.
- if (is_depth && builtin->Fn() == core::BuiltinFn::kTextureGather) {
+ if (is_depth && builtin->Fn() == wgsl::BuiltinFn::kTextureGather) {
out << ", 0.0";
}
@@ -1588,7 +1588,7 @@
if (auto* e = arg(Usage::kDepthRef)) {
out << ", ";
EmitExpression(out, e);
- } else if (builtin->Fn() == core::BuiltinFn::kTextureSample) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kTextureSample) {
out << ", 0.0f";
}
}
@@ -1628,114 +1628,114 @@
std::string ASTPrinter::generate_builtin_name(const sem::BuiltinFn* builtin) {
switch (builtin->Fn()) {
- case core::BuiltinFn::kAbs:
- case core::BuiltinFn::kAcos:
- case core::BuiltinFn::kAcosh:
- case core::BuiltinFn::kAll:
- case core::BuiltinFn::kAny:
- case core::BuiltinFn::kAsin:
- case core::BuiltinFn::kAsinh:
- case core::BuiltinFn::kAtan:
- case core::BuiltinFn::kAtanh:
- case core::BuiltinFn::kCeil:
- case core::BuiltinFn::kClamp:
- case core::BuiltinFn::kCos:
- case core::BuiltinFn::kCosh:
- case core::BuiltinFn::kCross:
- case core::BuiltinFn::kDeterminant:
- case core::BuiltinFn::kDistance:
- case core::BuiltinFn::kDot:
- case core::BuiltinFn::kExp:
- case core::BuiltinFn::kExp2:
- case core::BuiltinFn::kFloor:
- case core::BuiltinFn::kFrexp:
- case core::BuiltinFn::kLdexp:
- case core::BuiltinFn::kLength:
- case core::BuiltinFn::kLog:
- case core::BuiltinFn::kLog2:
- case core::BuiltinFn::kMax:
- case core::BuiltinFn::kMin:
- case core::BuiltinFn::kModf:
- case core::BuiltinFn::kNormalize:
- case core::BuiltinFn::kPow:
- case core::BuiltinFn::kReflect:
- case core::BuiltinFn::kRefract:
- case core::BuiltinFn::kRound:
- case core::BuiltinFn::kSign:
- case core::BuiltinFn::kSin:
- case core::BuiltinFn::kSinh:
- case core::BuiltinFn::kSqrt:
- case core::BuiltinFn::kStep:
- case core::BuiltinFn::kTan:
- case core::BuiltinFn::kTanh:
- case core::BuiltinFn::kTranspose:
- case core::BuiltinFn::kTrunc:
+ case wgsl::BuiltinFn::kAbs:
+ case wgsl::BuiltinFn::kAcos:
+ case wgsl::BuiltinFn::kAcosh:
+ case wgsl::BuiltinFn::kAll:
+ case wgsl::BuiltinFn::kAny:
+ case wgsl::BuiltinFn::kAsin:
+ case wgsl::BuiltinFn::kAsinh:
+ case wgsl::BuiltinFn::kAtan:
+ case wgsl::BuiltinFn::kAtanh:
+ case wgsl::BuiltinFn::kCeil:
+ case wgsl::BuiltinFn::kClamp:
+ case wgsl::BuiltinFn::kCos:
+ case wgsl::BuiltinFn::kCosh:
+ case wgsl::BuiltinFn::kCross:
+ case wgsl::BuiltinFn::kDeterminant:
+ case wgsl::BuiltinFn::kDistance:
+ case wgsl::BuiltinFn::kDot:
+ case wgsl::BuiltinFn::kExp:
+ case wgsl::BuiltinFn::kExp2:
+ case wgsl::BuiltinFn::kFloor:
+ case wgsl::BuiltinFn::kFrexp:
+ case wgsl::BuiltinFn::kLdexp:
+ case wgsl::BuiltinFn::kLength:
+ case wgsl::BuiltinFn::kLog:
+ case wgsl::BuiltinFn::kLog2:
+ case wgsl::BuiltinFn::kMax:
+ case wgsl::BuiltinFn::kMin:
+ case wgsl::BuiltinFn::kModf:
+ case wgsl::BuiltinFn::kNormalize:
+ case wgsl::BuiltinFn::kPow:
+ case wgsl::BuiltinFn::kReflect:
+ case wgsl::BuiltinFn::kRefract:
+ case wgsl::BuiltinFn::kRound:
+ case wgsl::BuiltinFn::kSign:
+ case wgsl::BuiltinFn::kSin:
+ case wgsl::BuiltinFn::kSinh:
+ case wgsl::BuiltinFn::kSqrt:
+ case wgsl::BuiltinFn::kStep:
+ case wgsl::BuiltinFn::kTan:
+ case wgsl::BuiltinFn::kTanh:
+ case wgsl::BuiltinFn::kTranspose:
+ case wgsl::BuiltinFn::kTrunc:
return builtin->str();
- case core::BuiltinFn::kAtan2:
+ case wgsl::BuiltinFn::kAtan2:
return "atan";
- case core::BuiltinFn::kCountOneBits:
+ case wgsl::BuiltinFn::kCountOneBits:
return "bitCount";
- case core::BuiltinFn::kDpdx:
+ case wgsl::BuiltinFn::kDpdx:
return "dFdx";
- case core::BuiltinFn::kDpdxCoarse:
+ case wgsl::BuiltinFn::kDpdxCoarse:
if (version_.IsES()) {
return "dFdx";
}
return "dFdxCoarse";
- case core::BuiltinFn::kDpdxFine:
+ case wgsl::BuiltinFn::kDpdxFine:
if (version_.IsES()) {
return "dFdx";
}
return "dFdxFine";
- case core::BuiltinFn::kDpdy:
+ case wgsl::BuiltinFn::kDpdy:
return "dFdy";
- case core::BuiltinFn::kDpdyCoarse:
+ case wgsl::BuiltinFn::kDpdyCoarse:
if (version_.IsES()) {
return "dFdy";
}
return "dFdyCoarse";
- case core::BuiltinFn::kDpdyFine:
+ case wgsl::BuiltinFn::kDpdyFine:
if (version_.IsES()) {
return "dFdy";
}
return "dFdyFine";
- case core::BuiltinFn::kFaceForward:
+ case wgsl::BuiltinFn::kFaceForward:
return "faceforward";
- case core::BuiltinFn::kFract:
+ case wgsl::BuiltinFn::kFract:
return "fract";
- case core::BuiltinFn::kFma:
+ case wgsl::BuiltinFn::kFma:
return "fma";
- case core::BuiltinFn::kFwidth:
- case core::BuiltinFn::kFwidthCoarse:
- case core::BuiltinFn::kFwidthFine:
+ case wgsl::BuiltinFn::kFwidth:
+ case wgsl::BuiltinFn::kFwidthCoarse:
+ case wgsl::BuiltinFn::kFwidthFine:
return "fwidth";
- case core::BuiltinFn::kInverseSqrt:
+ case wgsl::BuiltinFn::kInverseSqrt:
return "inversesqrt";
- case core::BuiltinFn::kMix:
+ case wgsl::BuiltinFn::kMix:
return "mix";
- case core::BuiltinFn::kPack2X16Float:
+ case wgsl::BuiltinFn::kPack2X16Float:
return "packHalf2x16";
- case core::BuiltinFn::kPack2X16Snorm:
+ case wgsl::BuiltinFn::kPack2X16Snorm:
return "packSnorm2x16";
- case core::BuiltinFn::kPack2X16Unorm:
+ case wgsl::BuiltinFn::kPack2X16Unorm:
return "packUnorm2x16";
- case core::BuiltinFn::kPack4X8Snorm:
+ case wgsl::BuiltinFn::kPack4X8Snorm:
return "packSnorm4x8";
- case core::BuiltinFn::kPack4X8Unorm:
+ case wgsl::BuiltinFn::kPack4X8Unorm:
return "packUnorm4x8";
- case core::BuiltinFn::kReverseBits:
+ case wgsl::BuiltinFn::kReverseBits:
return "bitfieldReverse";
- case core::BuiltinFn::kSmoothstep:
+ case wgsl::BuiltinFn::kSmoothstep:
return "smoothstep";
- case core::BuiltinFn::kUnpack2X16Float:
+ case wgsl::BuiltinFn::kUnpack2X16Float:
return "unpackHalf2x16";
- case core::BuiltinFn::kUnpack2X16Snorm:
+ case wgsl::BuiltinFn::kUnpack2X16Snorm:
return "unpackSnorm2x16";
- case core::BuiltinFn::kUnpack2X16Unorm:
+ case wgsl::BuiltinFn::kUnpack2X16Unorm:
return "unpackUnorm2x16";
- case core::BuiltinFn::kUnpack4X8Snorm:
+ case wgsl::BuiltinFn::kUnpack4X8Snorm:
return "unpackSnorm4x8";
- case core::BuiltinFn::kUnpack4X8Unorm:
+ case wgsl::BuiltinFn::kUnpack4X8Unorm:
return "unpackUnorm4x8";
default:
diagnostics_.add_error(diag::System::Writer,
@@ -2964,7 +2964,7 @@
TextBuffer b;
TINT_DEFER(helpers_.Append(b));
- auto fn_name = UniqueIdentifier(std::string("tint_") + core::str(builtin->Fn()));
+ auto fn_name = UniqueIdentifier(std::string("tint_") + wgsl::str(builtin->Fn()));
std::vector<std::string> parameter_names;
{
auto decl = Line(&b);
diff --git a/src/tint/lang/glsl/writer/ast_printer/builtin_test.cc b/src/tint/lang/glsl/writer/ast_printer/builtin_test.cc
index c23b308..843b66d 100644
--- a/src/tint/lang/glsl/writer/ast_printer/builtin_test.cc
+++ b/src/tint/lang/glsl/writer/ast_printer/builtin_test.cc
@@ -36,7 +36,7 @@
};
struct BuiltinData {
- core::BuiltinFn builtin;
+ wgsl::BuiltinFn builtin;
CallParamType type;
const char* glsl_name;
};
@@ -60,86 +60,86 @@
return out;
}
-const ast::CallExpression* GenerateCall(core::BuiltinFn builtin,
+const ast::CallExpression* GenerateCall(wgsl::BuiltinFn builtin,
CallParamType type,
ProgramBuilder* builder) {
std::string name;
StringStream str;
str << name << builtin;
switch (builtin) {
- case core::BuiltinFn::kAcos:
- case core::BuiltinFn::kAsin:
- case core::BuiltinFn::kAtan:
- case core::BuiltinFn::kCeil:
- case core::BuiltinFn::kCos:
- case core::BuiltinFn::kCosh:
- case core::BuiltinFn::kDpdx:
- case core::BuiltinFn::kDpdxCoarse:
- case core::BuiltinFn::kDpdxFine:
- case core::BuiltinFn::kDpdy:
- case core::BuiltinFn::kDpdyCoarse:
- case core::BuiltinFn::kDpdyFine:
- case core::BuiltinFn::kExp:
- case core::BuiltinFn::kExp2:
- case core::BuiltinFn::kFloor:
- case core::BuiltinFn::kFract:
- case core::BuiltinFn::kFwidth:
- case core::BuiltinFn::kFwidthCoarse:
- case core::BuiltinFn::kFwidthFine:
- case core::BuiltinFn::kInverseSqrt:
- case core::BuiltinFn::kLength:
- case core::BuiltinFn::kLog:
- case core::BuiltinFn::kLog2:
- case core::BuiltinFn::kNormalize:
- case core::BuiltinFn::kRound:
- case core::BuiltinFn::kSin:
- case core::BuiltinFn::kSinh:
- case core::BuiltinFn::kSqrt:
- case core::BuiltinFn::kTan:
- case core::BuiltinFn::kTanh:
- case core::BuiltinFn::kTrunc:
- case core::BuiltinFn::kSign:
+ case wgsl::BuiltinFn::kAcos:
+ case wgsl::BuiltinFn::kAsin:
+ case wgsl::BuiltinFn::kAtan:
+ case wgsl::BuiltinFn::kCeil:
+ case wgsl::BuiltinFn::kCos:
+ case wgsl::BuiltinFn::kCosh:
+ case wgsl::BuiltinFn::kDpdx:
+ case wgsl::BuiltinFn::kDpdxCoarse:
+ case wgsl::BuiltinFn::kDpdxFine:
+ case wgsl::BuiltinFn::kDpdy:
+ case wgsl::BuiltinFn::kDpdyCoarse:
+ case wgsl::BuiltinFn::kDpdyFine:
+ case wgsl::BuiltinFn::kExp:
+ case wgsl::BuiltinFn::kExp2:
+ case wgsl::BuiltinFn::kFloor:
+ case wgsl::BuiltinFn::kFract:
+ case wgsl::BuiltinFn::kFwidth:
+ case wgsl::BuiltinFn::kFwidthCoarse:
+ case wgsl::BuiltinFn::kFwidthFine:
+ case wgsl::BuiltinFn::kInverseSqrt:
+ case wgsl::BuiltinFn::kLength:
+ case wgsl::BuiltinFn::kLog:
+ case wgsl::BuiltinFn::kLog2:
+ case wgsl::BuiltinFn::kNormalize:
+ case wgsl::BuiltinFn::kRound:
+ case wgsl::BuiltinFn::kSin:
+ case wgsl::BuiltinFn::kSinh:
+ case wgsl::BuiltinFn::kSqrt:
+ case wgsl::BuiltinFn::kTan:
+ case wgsl::BuiltinFn::kTanh:
+ case wgsl::BuiltinFn::kTrunc:
+ case wgsl::BuiltinFn::kSign:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2");
} else {
return builder->Call(str.str(), "f2");
}
- case core::BuiltinFn::kLdexp:
+ case wgsl::BuiltinFn::kLdexp:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "i2");
} else {
return builder->Call(str.str(), "f2", "i2");
}
- case core::BuiltinFn::kAtan2:
- case core::BuiltinFn::kDot:
- case core::BuiltinFn::kDistance:
- case core::BuiltinFn::kPow:
- case core::BuiltinFn::kReflect:
- case core::BuiltinFn::kStep:
+ case wgsl::BuiltinFn::kAtan2:
+ case wgsl::BuiltinFn::kDot:
+ case wgsl::BuiltinFn::kDistance:
+ case wgsl::BuiltinFn::kPow:
+ case wgsl::BuiltinFn::kReflect:
+ case wgsl::BuiltinFn::kStep:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2");
} else {
return builder->Call(str.str(), "f2", "f2");
}
- case core::BuiltinFn::kCross:
+ case wgsl::BuiltinFn::kCross:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h3", "h3");
} else {
return builder->Call(str.str(), "f3", "f3");
}
- case core::BuiltinFn::kFma:
- case core::BuiltinFn::kMix:
- case core::BuiltinFn::kFaceForward:
- case core::BuiltinFn::kSmoothstep:
+ case wgsl::BuiltinFn::kFma:
+ case wgsl::BuiltinFn::kMix:
+ case wgsl::BuiltinFn::kFaceForward:
+ case wgsl::BuiltinFn::kSmoothstep:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2", "h2");
} else {
return builder->Call(str.str(), "f2", "f2", "f2");
}
- case core::BuiltinFn::kAll:
- case core::BuiltinFn::kAny:
+ case wgsl::BuiltinFn::kAll:
+ case wgsl::BuiltinFn::kAny:
return builder->Call(str.str(), "b2");
- case core::BuiltinFn::kAbs:
+ case wgsl::BuiltinFn::kAbs:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2");
} else if (type == CallParamType::kF16) {
@@ -147,11 +147,11 @@
} else {
return builder->Call(str.str(), "u2");
}
- case core::BuiltinFn::kCountOneBits:
- case core::BuiltinFn::kReverseBits:
+ case wgsl::BuiltinFn::kCountOneBits:
+ case wgsl::BuiltinFn::kReverseBits:
return builder->Call(str.str(), "u2");
- case core::BuiltinFn::kMax:
- case core::BuiltinFn::kMin:
+ case wgsl::BuiltinFn::kMax:
+ case wgsl::BuiltinFn::kMin:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2", "f2");
} else if (type == CallParamType::kF16) {
@@ -159,7 +159,7 @@
} else {
return builder->Call(str.str(), "u2", "u2");
}
- case core::BuiltinFn::kClamp:
+ case wgsl::BuiltinFn::kClamp:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2", "f2", "f2");
} else if (type == CallParamType::kF16) {
@@ -167,19 +167,19 @@
} else {
return builder->Call(str.str(), "u2", "u2", "u2");
}
- case core::BuiltinFn::kSelect:
+ case wgsl::BuiltinFn::kSelect:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2", "b2");
} else {
return builder->Call(str.str(), "f2", "f2", "b2");
}
- case core::BuiltinFn::kDeterminant:
+ case wgsl::BuiltinFn::kDeterminant:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "hm2x2");
} else {
return builder->Call(str.str(), "m2x2");
}
- case core::BuiltinFn::kTranspose:
+ case wgsl::BuiltinFn::kTranspose:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "hm3x2");
} else {
@@ -234,110 +234,110 @@
GlslASTPrinterTest_Builtin,
GlslBuiltinTest,
testing::Values(/* Logical built-in */
- BuiltinData{core::BuiltinFn::kAll, CallParamType::kBool, "all"},
- BuiltinData{core::BuiltinFn::kAny, CallParamType::kBool, "any"},
+ BuiltinData{wgsl::BuiltinFn::kAll, CallParamType::kBool, "all"},
+ BuiltinData{wgsl::BuiltinFn::kAny, CallParamType::kBool, "any"},
/* Float built-in */
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kF32, "abs"},
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kF16, "abs"},
- BuiltinData{core::BuiltinFn::kAcos, CallParamType::kF32, "acos"},
- BuiltinData{core::BuiltinFn::kAcos, CallParamType::kF16, "acos"},
- BuiltinData{core::BuiltinFn::kAsin, CallParamType::kF32, "asin"},
- BuiltinData{core::BuiltinFn::kAsin, CallParamType::kF16, "asin"},
- BuiltinData{core::BuiltinFn::kAtan, CallParamType::kF32, "atan"},
- BuiltinData{core::BuiltinFn::kAtan, CallParamType::kF16, "atan"},
- BuiltinData{core::BuiltinFn::kAtan2, CallParamType::kF32, "atan"},
- BuiltinData{core::BuiltinFn::kAtan2, CallParamType::kF16, "atan"},
- BuiltinData{core::BuiltinFn::kCeil, CallParamType::kF32, "ceil"},
- BuiltinData{core::BuiltinFn::kCeil, CallParamType::kF16, "ceil"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kF32, "clamp"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kF16, "clamp"},
- BuiltinData{core::BuiltinFn::kCos, CallParamType::kF32, "cos"},
- BuiltinData{core::BuiltinFn::kCos, CallParamType::kF16, "cos"},
- BuiltinData{core::BuiltinFn::kCosh, CallParamType::kF32, "cosh"},
- BuiltinData{core::BuiltinFn::kCosh, CallParamType::kF16, "cosh"},
- BuiltinData{core::BuiltinFn::kCross, CallParamType::kF32, "cross"},
- BuiltinData{core::BuiltinFn::kCross, CallParamType::kF16, "cross"},
- BuiltinData{core::BuiltinFn::kDistance, CallParamType::kF32, "distance"},
- BuiltinData{core::BuiltinFn::kDistance, CallParamType::kF16, "distance"},
- BuiltinData{core::BuiltinFn::kExp, CallParamType::kF32, "exp"},
- BuiltinData{core::BuiltinFn::kExp, CallParamType::kF16, "exp"},
- BuiltinData{core::BuiltinFn::kExp2, CallParamType::kF32, "exp2"},
- BuiltinData{core::BuiltinFn::kExp2, CallParamType::kF16, "exp2"},
- BuiltinData{core::BuiltinFn::kFaceForward, CallParamType::kF32, "faceforward"},
- BuiltinData{core::BuiltinFn::kFaceForward, CallParamType::kF16, "faceforward"},
- BuiltinData{core::BuiltinFn::kFloor, CallParamType::kF32, "floor"},
- BuiltinData{core::BuiltinFn::kFloor, CallParamType::kF16, "floor"},
- BuiltinData{core::BuiltinFn::kFma, CallParamType::kF32, "fma"},
- BuiltinData{core::BuiltinFn::kFma, CallParamType::kF16, "fma"},
- BuiltinData{core::BuiltinFn::kFract, CallParamType::kF32, "fract"},
- BuiltinData{core::BuiltinFn::kFract, CallParamType::kF16, "fract"},
- BuiltinData{core::BuiltinFn::kInverseSqrt, CallParamType::kF32, "inversesqrt"},
- BuiltinData{core::BuiltinFn::kInverseSqrt, CallParamType::kF16, "inversesqrt"},
- BuiltinData{core::BuiltinFn::kLdexp, CallParamType::kF32, "ldexp"},
- BuiltinData{core::BuiltinFn::kLdexp, CallParamType::kF16, "ldexp"},
- BuiltinData{core::BuiltinFn::kLength, CallParamType::kF32, "length"},
- BuiltinData{core::BuiltinFn::kLength, CallParamType::kF16, "length"},
- BuiltinData{core::BuiltinFn::kLog, CallParamType::kF32, "log"},
- BuiltinData{core::BuiltinFn::kLog, CallParamType::kF16, "log"},
- BuiltinData{core::BuiltinFn::kLog2, CallParamType::kF32, "log2"},
- BuiltinData{core::BuiltinFn::kLog2, CallParamType::kF16, "log2"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kF32, "max"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kF16, "max"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kF32, "min"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kF16, "min"},
- BuiltinData{core::BuiltinFn::kMix, CallParamType::kF32, "mix"},
- BuiltinData{core::BuiltinFn::kMix, CallParamType::kF16, "mix"},
- BuiltinData{core::BuiltinFn::kNormalize, CallParamType::kF32, "normalize"},
- BuiltinData{core::BuiltinFn::kNormalize, CallParamType::kF16, "normalize"},
- BuiltinData{core::BuiltinFn::kPow, CallParamType::kF32, "pow"},
- BuiltinData{core::BuiltinFn::kPow, CallParamType::kF16, "pow"},
- BuiltinData{core::BuiltinFn::kReflect, CallParamType::kF32, "reflect"},
- BuiltinData{core::BuiltinFn::kReflect, CallParamType::kF16, "reflect"},
- BuiltinData{core::BuiltinFn::kSign, CallParamType::kF32, "sign"},
- BuiltinData{core::BuiltinFn::kSign, CallParamType::kF16, "sign"},
- BuiltinData{core::BuiltinFn::kSin, CallParamType::kF32, "sin"},
- BuiltinData{core::BuiltinFn::kSin, CallParamType::kF16, "sin"},
- BuiltinData{core::BuiltinFn::kSinh, CallParamType::kF32, "sinh"},
- BuiltinData{core::BuiltinFn::kSinh, CallParamType::kF16, "sinh"},
- BuiltinData{core::BuiltinFn::kSmoothstep, CallParamType::kF32, "smoothstep"},
- BuiltinData{core::BuiltinFn::kSmoothstep, CallParamType::kF16, "smoothstep"},
- BuiltinData{core::BuiltinFn::kSqrt, CallParamType::kF32, "sqrt"},
- BuiltinData{core::BuiltinFn::kSqrt, CallParamType::kF16, "sqrt"},
- BuiltinData{core::BuiltinFn::kStep, CallParamType::kF32, "step"},
- BuiltinData{core::BuiltinFn::kStep, CallParamType::kF16, "step"},
- BuiltinData{core::BuiltinFn::kTan, CallParamType::kF32, "tan"},
- BuiltinData{core::BuiltinFn::kTan, CallParamType::kF16, "tan"},
- BuiltinData{core::BuiltinFn::kTanh, CallParamType::kF32, "tanh"},
- BuiltinData{core::BuiltinFn::kTanh, CallParamType::kF16, "tanh"},
- BuiltinData{core::BuiltinFn::kTrunc, CallParamType::kF32, "trunc"},
- BuiltinData{core::BuiltinFn::kTrunc, CallParamType::kF16, "trunc"},
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kF32, "abs"},
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kF16, "abs"},
+ BuiltinData{wgsl::BuiltinFn::kAcos, CallParamType::kF32, "acos"},
+ BuiltinData{wgsl::BuiltinFn::kAcos, CallParamType::kF16, "acos"},
+ BuiltinData{wgsl::BuiltinFn::kAsin, CallParamType::kF32, "asin"},
+ BuiltinData{wgsl::BuiltinFn::kAsin, CallParamType::kF16, "asin"},
+ BuiltinData{wgsl::BuiltinFn::kAtan, CallParamType::kF32, "atan"},
+ BuiltinData{wgsl::BuiltinFn::kAtan, CallParamType::kF16, "atan"},
+ BuiltinData{wgsl::BuiltinFn::kAtan2, CallParamType::kF32, "atan"},
+ BuiltinData{wgsl::BuiltinFn::kAtan2, CallParamType::kF16, "atan"},
+ BuiltinData{wgsl::BuiltinFn::kCeil, CallParamType::kF32, "ceil"},
+ BuiltinData{wgsl::BuiltinFn::kCeil, CallParamType::kF16, "ceil"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kF32, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kF16, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kCos, CallParamType::kF32, "cos"},
+ BuiltinData{wgsl::BuiltinFn::kCos, CallParamType::kF16, "cos"},
+ BuiltinData{wgsl::BuiltinFn::kCosh, CallParamType::kF32, "cosh"},
+ BuiltinData{wgsl::BuiltinFn::kCosh, CallParamType::kF16, "cosh"},
+ BuiltinData{wgsl::BuiltinFn::kCross, CallParamType::kF32, "cross"},
+ BuiltinData{wgsl::BuiltinFn::kCross, CallParamType::kF16, "cross"},
+ BuiltinData{wgsl::BuiltinFn::kDistance, CallParamType::kF32, "distance"},
+ BuiltinData{wgsl::BuiltinFn::kDistance, CallParamType::kF16, "distance"},
+ BuiltinData{wgsl::BuiltinFn::kExp, CallParamType::kF32, "exp"},
+ BuiltinData{wgsl::BuiltinFn::kExp, CallParamType::kF16, "exp"},
+ BuiltinData{wgsl::BuiltinFn::kExp2, CallParamType::kF32, "exp2"},
+ BuiltinData{wgsl::BuiltinFn::kExp2, CallParamType::kF16, "exp2"},
+ BuiltinData{wgsl::BuiltinFn::kFaceForward, CallParamType::kF32, "faceforward"},
+ BuiltinData{wgsl::BuiltinFn::kFaceForward, CallParamType::kF16, "faceforward"},
+ BuiltinData{wgsl::BuiltinFn::kFloor, CallParamType::kF32, "floor"},
+ BuiltinData{wgsl::BuiltinFn::kFloor, CallParamType::kF16, "floor"},
+ BuiltinData{wgsl::BuiltinFn::kFma, CallParamType::kF32, "fma"},
+ BuiltinData{wgsl::BuiltinFn::kFma, CallParamType::kF16, "fma"},
+ BuiltinData{wgsl::BuiltinFn::kFract, CallParamType::kF32, "fract"},
+ BuiltinData{wgsl::BuiltinFn::kFract, CallParamType::kF16, "fract"},
+ BuiltinData{wgsl::BuiltinFn::kInverseSqrt, CallParamType::kF32, "inversesqrt"},
+ BuiltinData{wgsl::BuiltinFn::kInverseSqrt, CallParamType::kF16, "inversesqrt"},
+ BuiltinData{wgsl::BuiltinFn::kLdexp, CallParamType::kF32, "ldexp"},
+ BuiltinData{wgsl::BuiltinFn::kLdexp, CallParamType::kF16, "ldexp"},
+ BuiltinData{wgsl::BuiltinFn::kLength, CallParamType::kF32, "length"},
+ BuiltinData{wgsl::BuiltinFn::kLength, CallParamType::kF16, "length"},
+ BuiltinData{wgsl::BuiltinFn::kLog, CallParamType::kF32, "log"},
+ BuiltinData{wgsl::BuiltinFn::kLog, CallParamType::kF16, "log"},
+ BuiltinData{wgsl::BuiltinFn::kLog2, CallParamType::kF32, "log2"},
+ BuiltinData{wgsl::BuiltinFn::kLog2, CallParamType::kF16, "log2"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kF32, "max"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kF16, "max"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kF32, "min"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kF16, "min"},
+ BuiltinData{wgsl::BuiltinFn::kMix, CallParamType::kF32, "mix"},
+ BuiltinData{wgsl::BuiltinFn::kMix, CallParamType::kF16, "mix"},
+ BuiltinData{wgsl::BuiltinFn::kNormalize, CallParamType::kF32, "normalize"},
+ BuiltinData{wgsl::BuiltinFn::kNormalize, CallParamType::kF16, "normalize"},
+ BuiltinData{wgsl::BuiltinFn::kPow, CallParamType::kF32, "pow"},
+ BuiltinData{wgsl::BuiltinFn::kPow, CallParamType::kF16, "pow"},
+ BuiltinData{wgsl::BuiltinFn::kReflect, CallParamType::kF32, "reflect"},
+ BuiltinData{wgsl::BuiltinFn::kReflect, CallParamType::kF16, "reflect"},
+ BuiltinData{wgsl::BuiltinFn::kSign, CallParamType::kF32, "sign"},
+ BuiltinData{wgsl::BuiltinFn::kSign, CallParamType::kF16, "sign"},
+ BuiltinData{wgsl::BuiltinFn::kSin, CallParamType::kF32, "sin"},
+ BuiltinData{wgsl::BuiltinFn::kSin, CallParamType::kF16, "sin"},
+ BuiltinData{wgsl::BuiltinFn::kSinh, CallParamType::kF32, "sinh"},
+ BuiltinData{wgsl::BuiltinFn::kSinh, CallParamType::kF16, "sinh"},
+ BuiltinData{wgsl::BuiltinFn::kSmoothstep, CallParamType::kF32, "smoothstep"},
+ BuiltinData{wgsl::BuiltinFn::kSmoothstep, CallParamType::kF16, "smoothstep"},
+ BuiltinData{wgsl::BuiltinFn::kSqrt, CallParamType::kF32, "sqrt"},
+ BuiltinData{wgsl::BuiltinFn::kSqrt, CallParamType::kF16, "sqrt"},
+ BuiltinData{wgsl::BuiltinFn::kStep, CallParamType::kF32, "step"},
+ BuiltinData{wgsl::BuiltinFn::kStep, CallParamType::kF16, "step"},
+ BuiltinData{wgsl::BuiltinFn::kTan, CallParamType::kF32, "tan"},
+ BuiltinData{wgsl::BuiltinFn::kTan, CallParamType::kF16, "tan"},
+ BuiltinData{wgsl::BuiltinFn::kTanh, CallParamType::kF32, "tanh"},
+ BuiltinData{wgsl::BuiltinFn::kTanh, CallParamType::kF16, "tanh"},
+ BuiltinData{wgsl::BuiltinFn::kTrunc, CallParamType::kF32, "trunc"},
+ BuiltinData{wgsl::BuiltinFn::kTrunc, CallParamType::kF16, "trunc"},
/* Integer built-in */
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kU32, "abs"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kU32, "clamp"},
- BuiltinData{core::BuiltinFn::kCountOneBits, CallParamType::kU32, "bitCount"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kU32, "max"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kU32, "min"},
- BuiltinData{core::BuiltinFn::kReverseBits, CallParamType::kU32,
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kU32, "abs"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kU32, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kCountOneBits, CallParamType::kU32, "bitCount"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kU32, "max"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kU32, "min"},
+ BuiltinData{wgsl::BuiltinFn::kReverseBits, CallParamType::kU32,
"bitfieldReverse"},
- BuiltinData{core::BuiltinFn::kRound, CallParamType::kU32, "round"},
+ BuiltinData{wgsl::BuiltinFn::kRound, CallParamType::kU32, "round"},
/* Matrix built-in */
- BuiltinData{core::BuiltinFn::kDeterminant, CallParamType::kF32, "determinant"},
- BuiltinData{core::BuiltinFn::kDeterminant, CallParamType::kF16, "determinant"},
- BuiltinData{core::BuiltinFn::kTranspose, CallParamType::kF32, "transpose"},
- BuiltinData{core::BuiltinFn::kTranspose, CallParamType::kF16, "transpose"},
+ BuiltinData{wgsl::BuiltinFn::kDeterminant, CallParamType::kF32, "determinant"},
+ BuiltinData{wgsl::BuiltinFn::kDeterminant, CallParamType::kF16, "determinant"},
+ BuiltinData{wgsl::BuiltinFn::kTranspose, CallParamType::kF32, "transpose"},
+ BuiltinData{wgsl::BuiltinFn::kTranspose, CallParamType::kF16, "transpose"},
/* Vector built-in */
- BuiltinData{core::BuiltinFn::kDot, CallParamType::kF32, "dot"},
- BuiltinData{core::BuiltinFn::kDot, CallParamType::kF16, "dot"},
+ BuiltinData{wgsl::BuiltinFn::kDot, CallParamType::kF32, "dot"},
+ BuiltinData{wgsl::BuiltinFn::kDot, CallParamType::kF16, "dot"},
/* Derivate built-in */
- BuiltinData{core::BuiltinFn::kDpdx, CallParamType::kF32, "dFdx"},
- BuiltinData{core::BuiltinFn::kDpdxCoarse, CallParamType::kF32, "dFdx"},
- BuiltinData{core::BuiltinFn::kDpdxFine, CallParamType::kF32, "dFdx"},
- BuiltinData{core::BuiltinFn::kDpdy, CallParamType::kF32, "dFdy"},
- BuiltinData{core::BuiltinFn::kDpdyCoarse, CallParamType::kF32, "dFdy"},
- BuiltinData{core::BuiltinFn::kDpdyFine, CallParamType::kF32, "dFdy"},
- BuiltinData{core::BuiltinFn::kFwidth, CallParamType::kF32, "fwidth"},
- BuiltinData{core::BuiltinFn::kFwidthCoarse, CallParamType::kF32, "fwidth"},
- BuiltinData{core::BuiltinFn::kFwidthFine, CallParamType::kF32, "fwidth"}));
+ BuiltinData{wgsl::BuiltinFn::kDpdx, CallParamType::kF32, "dFdx"},
+ BuiltinData{wgsl::BuiltinFn::kDpdxCoarse, CallParamType::kF32, "dFdx"},
+ BuiltinData{wgsl::BuiltinFn::kDpdxFine, CallParamType::kF32, "dFdx"},
+ BuiltinData{wgsl::BuiltinFn::kDpdy, CallParamType::kF32, "dFdy"},
+ BuiltinData{wgsl::BuiltinFn::kDpdyCoarse, CallParamType::kF32, "dFdy"},
+ BuiltinData{wgsl::BuiltinFn::kDpdyFine, CallParamType::kF32, "dFdy"},
+ BuiltinData{wgsl::BuiltinFn::kFwidth, CallParamType::kF32, "fwidth"},
+ BuiltinData{wgsl::BuiltinFn::kFwidthCoarse, CallParamType::kF32, "fwidth"},
+ BuiltinData{wgsl::BuiltinFn::kFwidthFine, CallParamType::kF32, "fwidth"}));
TEST_F(GlslASTPrinterTest_Builtin, Builtin_Call) {
auto* call = Call("dot", "param1", "param2");
diff --git a/src/tint/lang/glsl/writer/ast_raise/BUILD.bazel b/src/tint/lang/glsl/writer/ast_raise/BUILD.bazel
index a71fcf7..e0b9f70 100644
--- a/src/tint/lang/glsl/writer/ast_raise/BUILD.bazel
+++ b/src/tint/lang/glsl/writer/ast_raise/BUILD.bazel
@@ -80,6 +80,7 @@
"//src/tint/api/options",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/glsl/writer/ast_raise/BUILD.cmake b/src/tint/lang/glsl/writer/ast_raise/BUILD.cmake
index eeaa334..0666ae3 100644
--- a/src/tint/lang/glsl/writer/ast_raise/BUILD.cmake
+++ b/src/tint/lang/glsl/writer/ast_raise/BUILD.cmake
@@ -84,6 +84,7 @@
tint_api_options
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
diff --git a/src/tint/lang/glsl/writer/ast_raise/BUILD.gn b/src/tint/lang/glsl/writer/ast_raise/BUILD.gn
index 938e417..7b7a0e0 100644
--- a/src/tint/lang/glsl/writer/ast_raise/BUILD.gn
+++ b/src/tint/lang/glsl/writer/ast_raise/BUILD.gn
@@ -84,6 +84,7 @@
"${tint_src_dir}/api/options",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/glsl/writer/ast_raise/combine_samplers.cc b/src/tint/lang/glsl/writer/ast_raise/combine_samplers.cc
index 0908a70..17df831 100644
--- a/src/tint/lang/glsl/writer/ast_raise/combine_samplers.cc
+++ b/src/tint/lang/glsl/writer/ast_raise/combine_samplers.cc
@@ -270,7 +270,7 @@
}
}
const ast::Expression* value = ctx.dst->Call(ctx.Clone(expr->target), args);
- if (builtin->Fn() == core::BuiltinFn::kTextureLoad &&
+ if (builtin->Fn() == wgsl::BuiltinFn::kTextureLoad &&
texture_var->Type()->UnwrapRef()->Is<core::type::DepthTexture>() &&
!call->Stmt()->Declaration()->Is<ast::CallStatement>()) {
value = ctx.dst->MemberAccessor(value, "x");
diff --git a/src/tint/lang/glsl/writer/ast_raise/texture_1d_to_2d.cc b/src/tint/lang/glsl/writer/ast_raise/texture_1d_to_2d.cc
index 3306a9a..1e80e28 100644
--- a/src/tint/lang/glsl/writer/ast_raise/texture_1d_to_2d.cc
+++ b/src/tint/lang/glsl/writer/ast_raise/texture_1d_to_2d.cc
@@ -140,7 +140,7 @@
return nullptr;
}
- if (builtin->Fn() == core::BuiltinFn::kTextureDimensions) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kTextureDimensions) {
// If this textureDimensions() call is in a CallStatement, we can leave it
// unmodified since the return value will be dropped on the floor anyway.
if (call->Stmt()->Declaration()->Is<ast::CallStatement>()) {
diff --git a/src/tint/lang/glsl/writer/ast_raise/texture_builtins_from_uniform.cc b/src/tint/lang/glsl/writer/ast_raise/texture_builtins_from_uniform.cc
index 61851e4..baef3bc 100644
--- a/src/tint/lang/glsl/writer/ast_raise/texture_builtins_from_uniform.cc
+++ b/src/tint/lang/glsl/writer/ast_raise/texture_builtins_from_uniform.cc
@@ -51,10 +51,10 @@
for (auto* builtin : sem_fn->DirectlyCalledBuiltins()) {
// GLSL ES has no native support for the counterpart of
// textureNumLevels (textureQueryLevels) and textureNumSamples (textureSamples)
- if (builtin->Fn() == core::BuiltinFn::kTextureNumLevels) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kTextureNumLevels) {
return true;
}
- if (builtin->Fn() == core::BuiltinFn::kTextureNumSamples) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kTextureNumSamples) {
return true;
}
}
@@ -111,8 +111,8 @@
tint::Switch(
call->Target(),
[&](const sem::BuiltinFn* builtin) {
- if (builtin->Fn() != core::BuiltinFn::kTextureNumLevels &&
- builtin->Fn() != core::BuiltinFn::kTextureNumSamples) {
+ if (builtin->Fn() != wgsl::BuiltinFn::kTextureNumLevels &&
+ builtin->Fn() != wgsl::BuiltinFn::kTextureNumSamples) {
return;
}
if (auto* call_stmt =
@@ -462,11 +462,11 @@
/// @param type of the builtin function
/// @returns corresponding TextureBuiltinsFromUniformOptions::Field for the builtin
static TextureBuiltinsFromUniformOptions::Field GetFieldFromBuiltinFunctionType(
- core::BuiltinFn type) {
+ wgsl::BuiltinFn type) {
switch (type) {
- case core::BuiltinFn::kTextureNumLevels:
+ case wgsl::BuiltinFn::kTextureNumLevels:
return TextureBuiltinsFromUniformOptions::Field::TextureNumLevels;
- case core::BuiltinFn::kTextureNumSamples:
+ case wgsl::BuiltinFn::kTextureNumSamples:
return TextureBuiltinsFromUniformOptions::Field::TextureNumSamples;
default:
TINT_UNREACHABLE() << "unsupported builtin function type " << type;
diff --git a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
index a22ac90..acebcde 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/hlsl/writer/ast_printer/ast_printer.cc
@@ -1173,28 +1173,28 @@
if (builtin->IsTexture()) {
return EmitTextureCall(out, call, builtin);
}
- if (type == core::BuiltinFn::kSelect) {
+ if (type == wgsl::BuiltinFn::kSelect) {
return EmitSelectCall(out, expr);
}
- if (type == core::BuiltinFn::kModf) {
+ if (type == wgsl::BuiltinFn::kModf) {
return EmitModfCall(out, expr, builtin);
}
- if (type == core::BuiltinFn::kFrexp) {
+ if (type == wgsl::BuiltinFn::kFrexp) {
return EmitFrexpCall(out, expr, builtin);
}
- if (type == core::BuiltinFn::kDegrees) {
+ if (type == wgsl::BuiltinFn::kDegrees) {
return EmitDegreesCall(out, expr, builtin);
}
- if (type == core::BuiltinFn::kRadians) {
+ if (type == wgsl::BuiltinFn::kRadians) {
return EmitRadiansCall(out, expr, builtin);
}
- if (type == core::BuiltinFn::kSign) {
+ if (type == wgsl::BuiltinFn::kSign) {
return EmitSignCall(out, call, builtin);
}
- if (type == core::BuiltinFn::kQuantizeToF16) {
+ if (type == wgsl::BuiltinFn::kQuantizeToF16) {
return EmitQuantizeToF16Call(out, expr, builtin);
}
- if (type == core::BuiltinFn::kTrunc) {
+ if (type == wgsl::BuiltinFn::kTrunc) {
return EmitTruncCall(out, expr, builtin);
}
if (builtin->IsDataPacking()) {
@@ -1213,7 +1213,7 @@
return EmitDP4aCall(out, expr, builtin);
}
if (builtin->IsSubgroup()) {
- if (builtin->Fn() == core::BuiltinFn::kSubgroupBroadcast) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kSubgroupBroadcast) {
// Fall through the regular path.
} else {
return EmitSubgroupCall(out, expr, builtin);
@@ -1228,7 +1228,7 @@
// Handle single argument builtins that only accept and return uint (not int overload). We need
// to explicitly cast the return value (we also cast the arg for good measure). See
// crbug.com/tint/1550
- if (type == core::BuiltinFn::kCountOneBits || type == core::BuiltinFn::kReverseBits) {
+ if (type == wgsl::BuiltinFn::kCountOneBits || type == wgsl::BuiltinFn::kReverseBits) {
auto* arg = call->Arguments()[0];
if (arg->Type()->UnwrapRef()->is_signed_integer_scalar_or_vector()) {
out << "asint(" << name << "(asuint(";
@@ -2018,7 +2018,7 @@
if (i > 0) {
pre << ", ";
}
- if (i == 1 && builtin->Fn() == core::BuiltinFn::kAtomicSub) {
+ if (i == 1 && builtin->Fn() == wgsl::BuiltinFn::kAtomicSub) {
// Sub uses InterlockedAdd with the operand negated.
pre << "-";
}
@@ -2037,7 +2037,7 @@
};
switch (builtin->Fn()) {
- case core::BuiltinFn::kAtomicLoad: {
+ case wgsl::BuiltinFn::kAtomicLoad: {
// HLSL does not have an InterlockedLoad, so we emulate it with
// InterlockedOr using 0 as the OR value
auto pre = Line();
@@ -2054,7 +2054,7 @@
out << result;
return true;
}
- case core::BuiltinFn::kAtomicStore: {
+ case wgsl::BuiltinFn::kAtomicStore: {
// HLSL does not have an InterlockedStore, so we emulate it with
// InterlockedExchange and discard the returned value
{ // T result = 0;
@@ -2085,7 +2085,7 @@
}
return true;
}
- case core::BuiltinFn::kAtomicCompareExchangeWeak: {
+ case wgsl::BuiltinFn::kAtomicCompareExchangeWeak: {
if (!EmitStructType(&helpers_, builtin->ReturnType()->As<core::type::Struct>())) {
return false;
}
@@ -2134,26 +2134,26 @@
return true;
}
- case core::BuiltinFn::kAtomicAdd:
- case core::BuiltinFn::kAtomicSub:
+ case wgsl::BuiltinFn::kAtomicAdd:
+ case wgsl::BuiltinFn::kAtomicSub:
return call("InterlockedAdd");
- case core::BuiltinFn::kAtomicMax:
+ case wgsl::BuiltinFn::kAtomicMax:
return call("InterlockedMax");
- case core::BuiltinFn::kAtomicMin:
+ case wgsl::BuiltinFn::kAtomicMin:
return call("InterlockedMin");
- case core::BuiltinFn::kAtomicAnd:
+ case wgsl::BuiltinFn::kAtomicAnd:
return call("InterlockedAnd");
- case core::BuiltinFn::kAtomicOr:
+ case wgsl::BuiltinFn::kAtomicOr:
return call("InterlockedOr");
- case core::BuiltinFn::kAtomicXor:
+ case wgsl::BuiltinFn::kAtomicXor:
return call("InterlockedXor");
- case core::BuiltinFn::kAtomicExchange:
+ case wgsl::BuiltinFn::kAtomicExchange:
return call("InterlockedExchange");
default:
@@ -2339,21 +2339,21 @@
uint32_t dims = 2;
bool is_signed = false;
uint32_t scale = 65535;
- if (builtin->Fn() == core::BuiltinFn::kPack4X8Snorm ||
- builtin->Fn() == core::BuiltinFn::kPack4X8Unorm) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kPack4X8Snorm ||
+ builtin->Fn() == wgsl::BuiltinFn::kPack4X8Unorm) {
dims = 4;
scale = 255;
}
- if (builtin->Fn() == core::BuiltinFn::kPack4X8Snorm ||
- builtin->Fn() == core::BuiltinFn::kPack2X16Snorm) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kPack4X8Snorm ||
+ builtin->Fn() == wgsl::BuiltinFn::kPack2X16Snorm) {
is_signed = true;
scale = (scale - 1) / 2;
}
switch (builtin->Fn()) {
- case core::BuiltinFn::kPack4X8Snorm:
- case core::BuiltinFn::kPack4X8Unorm:
- case core::BuiltinFn::kPack2X16Snorm:
- case core::BuiltinFn::kPack2X16Unorm: {
+ case wgsl::BuiltinFn::kPack4X8Snorm:
+ case wgsl::BuiltinFn::kPack4X8Unorm:
+ case wgsl::BuiltinFn::kPack2X16Snorm:
+ case wgsl::BuiltinFn::kPack2X16Unorm: {
{
auto l = Line(b);
l << (is_signed ? "" : "u") << "int" << dims
@@ -2379,7 +2379,7 @@
}
break;
}
- case core::BuiltinFn::kPack2X16Float: {
+ case wgsl::BuiltinFn::kPack2X16Float: {
Line(b) << "uint2 i = f32tof16(" << params[0] << ");";
Line(b) << "return i.x | (i.y << 16);";
break;
@@ -2402,19 +2402,19 @@
uint32_t dims = 2;
bool is_signed = false;
uint32_t scale = 65535;
- if (builtin->Fn() == core::BuiltinFn::kUnpack4X8Snorm ||
- builtin->Fn() == core::BuiltinFn::kUnpack4X8Unorm) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kUnpack4X8Snorm ||
+ builtin->Fn() == wgsl::BuiltinFn::kUnpack4X8Unorm) {
dims = 4;
scale = 255;
}
- if (builtin->Fn() == core::BuiltinFn::kUnpack4X8Snorm ||
- builtin->Fn() == core::BuiltinFn::kUnpack2X16Snorm) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kUnpack4X8Snorm ||
+ builtin->Fn() == wgsl::BuiltinFn::kUnpack2X16Snorm) {
is_signed = true;
scale = (scale - 1) / 2;
}
switch (builtin->Fn()) {
- case core::BuiltinFn::kUnpack4X8Snorm:
- case core::BuiltinFn::kUnpack2X16Snorm: {
+ case wgsl::BuiltinFn::kUnpack4X8Snorm:
+ case wgsl::BuiltinFn::kUnpack2X16Snorm: {
Line(b) << "int j = int(" << params[0] << ");";
{ // Perform sign extension on the converted values.
auto l = Line(b);
@@ -2430,8 +2430,8 @@
<< (is_signed ? "-1.0" : "0.0") << ", 1.0);";
break;
}
- case core::BuiltinFn::kUnpack4X8Unorm:
- case core::BuiltinFn::kUnpack2X16Unorm: {
+ case wgsl::BuiltinFn::kUnpack4X8Unorm:
+ case wgsl::BuiltinFn::kUnpack2X16Unorm: {
Line(b) << "uint j = " << params[0] << ";";
{
auto l = Line(b);
@@ -2447,7 +2447,7 @@
Line(b) << "return float" << dims << "(i) / " << scale << ".0;";
break;
}
- case core::BuiltinFn::kUnpack2X16Float:
+ case wgsl::BuiltinFn::kUnpack2X16Float:
Line(b) << "uint i = " << params[0] << ";";
Line(b) << "return f16tof32(uint2(i & 0xffff, i >> 16));";
break;
@@ -2469,11 +2469,11 @@
out, expr, builtin, [&](TextBuffer* b, const std::vector<std::string>& params) {
std::string functionName;
switch (builtin->Fn()) {
- case core::BuiltinFn::kDot4I8Packed:
+ case wgsl::BuiltinFn::kDot4I8Packed:
Line(b) << "int accumulator = 0;";
functionName = "dot4add_i8packed";
break;
- case core::BuiltinFn::kDot4U8Packed:
+ case wgsl::BuiltinFn::kDot4U8Packed:
Line(b) << "uint accumulator = 0u;";
functionName = "dot4add_u8packed";
break;
@@ -2492,14 +2492,14 @@
bool ASTPrinter::EmitBarrierCall(StringStream& out, const sem::BuiltinFn* builtin) {
// TODO(crbug.com/tint/661): Combine sequential barriers to a single
// instruction.
- if (builtin->Fn() == core::BuiltinFn::kWorkgroupBarrier) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kWorkgroupBarrier) {
out << "GroupMemoryBarrierWithGroupSync()";
- } else if (builtin->Fn() == core::BuiltinFn::kStorageBarrier) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kStorageBarrier) {
out << "DeviceMemoryBarrierWithGroupSync()";
- } else if (builtin->Fn() == core::BuiltinFn::kTextureBarrier) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kTextureBarrier) {
out << "DeviceMemoryBarrierWithGroupSync()";
} else {
- TINT_UNREACHABLE() << "unexpected barrier builtin type " << core::str(builtin->Fn());
+ TINT_UNREACHABLE() << "unexpected barrier builtin type " << builtin->Fn();
return false;
}
return true;
@@ -2508,11 +2508,11 @@
bool ASTPrinter::EmitSubgroupCall(StringStream& out,
[[maybe_unused]] const ast::CallExpression* expr,
const sem::BuiltinFn* builtin) {
- if (builtin->Fn() == core::BuiltinFn::kSubgroupBallot) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kSubgroupBallot) {
out << "WaveActiveBallot(true)";
} else {
// subgroupBroadcast is already handled in the regular builtin flow.
- TINT_UNREACHABLE() << "unexpected subgroup builtin type " << core::str(builtin->Fn());
+ TINT_UNREACHABLE() << "unexpected subgroup builtin type " << builtin->Fn();
return false;
}
return true;
@@ -2573,10 +2573,10 @@
auto* texture_type = TypeOf(texture)->UnwrapRef()->As<core::type::Texture>();
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureDimensions:
- case core::BuiltinFn::kTextureNumLayers:
- case core::BuiltinFn::kTextureNumLevels:
- case core::BuiltinFn::kTextureNumSamples: {
+ case wgsl::BuiltinFn::kTextureDimensions:
+ case wgsl::BuiltinFn::kTextureNumLayers:
+ case wgsl::BuiltinFn::kTextureNumLevels:
+ case wgsl::BuiltinFn::kTextureNumSamples: {
// All of these builtins use the GetDimensions() method on the texture
bool is_ms = texture_type->IsAnyOf<core::type::MultisampledTexture,
core::type::DepthMultisampledTexture>();
@@ -2584,7 +2584,7 @@
std::string swizzle;
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureDimensions:
+ case wgsl::BuiltinFn::kTextureDimensions:
switch (texture_type->dim()) {
case core::type::TextureDimension::kNone:
TINT_ICE() << "texture dimension is kNone";
@@ -2612,7 +2612,7 @@
break;
}
break;
- case core::BuiltinFn::kTextureNumLayers:
+ case wgsl::BuiltinFn::kTextureNumLayers:
switch (texture_type->dim()) {
default:
TINT_ICE() << "texture dimension is not arrayed";
@@ -2627,7 +2627,7 @@
break;
}
break;
- case core::BuiltinFn::kTextureNumLevels:
+ case wgsl::BuiltinFn::kTextureNumLevels:
switch (texture_type->dim()) {
default:
TINT_ICE() << "texture dimension does not support mips";
@@ -2649,7 +2649,7 @@
break;
}
break;
- case core::BuiltinFn::kTextureNumSamples:
+ case wgsl::BuiltinFn::kTextureNumSamples:
switch (texture_type->dim()) {
default:
TINT_ICE() << "texture dimension does not support multisampling";
@@ -2712,7 +2712,7 @@
return false;
}
pre << ", ";
- } else if (builtin->Fn() == core::BuiltinFn::kTextureNumLevels) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kTextureNumLevels) {
pre << "0, ";
}
@@ -2758,34 +2758,34 @@
uint32_t hlsl_ret_width = 4u;
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureSample:
+ case wgsl::BuiltinFn::kTextureSample:
out << ".Sample(";
break;
- case core::BuiltinFn::kTextureSampleBias:
+ case wgsl::BuiltinFn::kTextureSampleBias:
out << ".SampleBias(";
break;
- case core::BuiltinFn::kTextureSampleLevel:
+ case wgsl::BuiltinFn::kTextureSampleLevel:
out << ".SampleLevel(";
break;
- case core::BuiltinFn::kTextureSampleGrad:
+ case wgsl::BuiltinFn::kTextureSampleGrad:
out << ".SampleGrad(";
break;
- case core::BuiltinFn::kTextureSampleCompare:
+ case wgsl::BuiltinFn::kTextureSampleCompare:
out << ".SampleCmp(";
hlsl_ret_width = 1;
break;
- case core::BuiltinFn::kTextureSampleCompareLevel:
+ case wgsl::BuiltinFn::kTextureSampleCompareLevel:
out << ".SampleCmpLevelZero(";
hlsl_ret_width = 1;
break;
- case core::BuiltinFn::kTextureLoad:
+ case wgsl::BuiltinFn::kTextureLoad:
out << ".Load(";
// Multisampled textures do not support mip-levels.
if (!texture_type->Is<core::type::MultisampledTexture>()) {
pack_level_in_coords = true;
}
break;
- case core::BuiltinFn::kTextureGather:
+ case wgsl::BuiltinFn::kTextureGather:
out << ".Gather";
if (builtin->Parameters()[0]->Usage() == core::ParameterUsage::kComponent) {
switch (call->Arguments()[0]->ConstantValue()->ValueAs<AInt>()) {
@@ -2805,10 +2805,10 @@
}
out << "(";
break;
- case core::BuiltinFn::kTextureGatherCompare:
+ case wgsl::BuiltinFn::kTextureGatherCompare:
out << ".GatherCmp(";
break;
- case core::BuiltinFn::kTextureStore:
+ case wgsl::BuiltinFn::kTextureStore:
out << "[";
break;
default:
@@ -2869,7 +2869,7 @@
if (!emit_vector_appended_with_level(param_coords)) {
return false;
}
- } else if (builtin->Fn() == core::BuiltinFn::kTextureStore) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kTextureStore) {
// param_coords is an index expression, not a function arg
if (!EmitExpression(out, param_coords)) {
return false;
@@ -2891,7 +2891,7 @@
}
}
- if (builtin->Fn() == core::BuiltinFn::kTextureStore) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kTextureStore) {
out << "] = ";
if (!EmitExpression(out, arg(Usage::kValue))) {
return false;
@@ -2925,79 +2925,79 @@
std::string ASTPrinter::generate_builtin_name(const sem::BuiltinFn* builtin) {
switch (builtin->Fn()) {
- case core::BuiltinFn::kAbs:
- case core::BuiltinFn::kAcos:
- case core::BuiltinFn::kAll:
- case core::BuiltinFn::kAny:
- case core::BuiltinFn::kAsin:
- case core::BuiltinFn::kAtan:
- case core::BuiltinFn::kAtan2:
- case core::BuiltinFn::kCeil:
- case core::BuiltinFn::kClamp:
- case core::BuiltinFn::kCos:
- case core::BuiltinFn::kCosh:
- case core::BuiltinFn::kCross:
- case core::BuiltinFn::kDeterminant:
- case core::BuiltinFn::kDistance:
- case core::BuiltinFn::kDot:
- case core::BuiltinFn::kExp:
- case core::BuiltinFn::kExp2:
- case core::BuiltinFn::kFloor:
- case core::BuiltinFn::kFrexp:
- case core::BuiltinFn::kLdexp:
- case core::BuiltinFn::kLength:
- case core::BuiltinFn::kLog:
- case core::BuiltinFn::kLog2:
- case core::BuiltinFn::kMax:
- case core::BuiltinFn::kMin:
- case core::BuiltinFn::kModf:
- case core::BuiltinFn::kNormalize:
- case core::BuiltinFn::kPow:
- case core::BuiltinFn::kReflect:
- case core::BuiltinFn::kRefract:
- case core::BuiltinFn::kRound:
- case core::BuiltinFn::kSaturate:
- case core::BuiltinFn::kSin:
- case core::BuiltinFn::kSinh:
- case core::BuiltinFn::kSqrt:
- case core::BuiltinFn::kStep:
- case core::BuiltinFn::kTan:
- case core::BuiltinFn::kTanh:
- case core::BuiltinFn::kTranspose:
+ case wgsl::BuiltinFn::kAbs:
+ case wgsl::BuiltinFn::kAcos:
+ case wgsl::BuiltinFn::kAll:
+ case wgsl::BuiltinFn::kAny:
+ case wgsl::BuiltinFn::kAsin:
+ case wgsl::BuiltinFn::kAtan:
+ case wgsl::BuiltinFn::kAtan2:
+ case wgsl::BuiltinFn::kCeil:
+ case wgsl::BuiltinFn::kClamp:
+ case wgsl::BuiltinFn::kCos:
+ case wgsl::BuiltinFn::kCosh:
+ case wgsl::BuiltinFn::kCross:
+ case wgsl::BuiltinFn::kDeterminant:
+ case wgsl::BuiltinFn::kDistance:
+ case wgsl::BuiltinFn::kDot:
+ case wgsl::BuiltinFn::kExp:
+ case wgsl::BuiltinFn::kExp2:
+ case wgsl::BuiltinFn::kFloor:
+ case wgsl::BuiltinFn::kFrexp:
+ case wgsl::BuiltinFn::kLdexp:
+ case wgsl::BuiltinFn::kLength:
+ case wgsl::BuiltinFn::kLog:
+ case wgsl::BuiltinFn::kLog2:
+ case wgsl::BuiltinFn::kMax:
+ case wgsl::BuiltinFn::kMin:
+ case wgsl::BuiltinFn::kModf:
+ case wgsl::BuiltinFn::kNormalize:
+ case wgsl::BuiltinFn::kPow:
+ case wgsl::BuiltinFn::kReflect:
+ case wgsl::BuiltinFn::kRefract:
+ case wgsl::BuiltinFn::kRound:
+ case wgsl::BuiltinFn::kSaturate:
+ case wgsl::BuiltinFn::kSin:
+ case wgsl::BuiltinFn::kSinh:
+ case wgsl::BuiltinFn::kSqrt:
+ case wgsl::BuiltinFn::kStep:
+ case wgsl::BuiltinFn::kTan:
+ case wgsl::BuiltinFn::kTanh:
+ case wgsl::BuiltinFn::kTranspose:
return builtin->str();
- case core::BuiltinFn::kCountOneBits: // uint
+ case wgsl::BuiltinFn::kCountOneBits: // uint
return "countbits";
- case core::BuiltinFn::kDpdx:
+ case wgsl::BuiltinFn::kDpdx:
return "ddx";
- case core::BuiltinFn::kDpdxCoarse:
+ case wgsl::BuiltinFn::kDpdxCoarse:
return "ddx_coarse";
- case core::BuiltinFn::kDpdxFine:
+ case wgsl::BuiltinFn::kDpdxFine:
return "ddx_fine";
- case core::BuiltinFn::kDpdy:
+ case wgsl::BuiltinFn::kDpdy:
return "ddy";
- case core::BuiltinFn::kDpdyCoarse:
+ case wgsl::BuiltinFn::kDpdyCoarse:
return "ddy_coarse";
- case core::BuiltinFn::kDpdyFine:
+ case wgsl::BuiltinFn::kDpdyFine:
return "ddy_fine";
- case core::BuiltinFn::kFaceForward:
+ case wgsl::BuiltinFn::kFaceForward:
return "faceforward";
- case core::BuiltinFn::kFract:
+ case wgsl::BuiltinFn::kFract:
return "frac";
- case core::BuiltinFn::kFma:
+ case wgsl::BuiltinFn::kFma:
return "mad";
- case core::BuiltinFn::kFwidth:
- case core::BuiltinFn::kFwidthCoarse:
- case core::BuiltinFn::kFwidthFine:
+ case wgsl::BuiltinFn::kFwidth:
+ case wgsl::BuiltinFn::kFwidthCoarse:
+ case wgsl::BuiltinFn::kFwidthFine:
return "fwidth";
- case core::BuiltinFn::kInverseSqrt:
+ case wgsl::BuiltinFn::kInverseSqrt:
return "rsqrt";
- case core::BuiltinFn::kMix:
+ case wgsl::BuiltinFn::kMix:
return "lerp";
- case core::BuiltinFn::kReverseBits: // uint
+ case wgsl::BuiltinFn::kReverseBits: // uint
return "reversebits";
- case core::BuiltinFn::kSmoothstep:
+ case wgsl::BuiltinFn::kSmoothstep:
return "smoothstep";
- case core::BuiltinFn::kSubgroupBroadcast:
+ case wgsl::BuiltinFn::kSubgroupBroadcast:
return "WaveReadLaneAt";
default:
diagnostics_.add_error(diag::System::Writer,
@@ -4591,7 +4591,7 @@
TextBuffer b;
TINT_DEFER(helpers_.Append(b));
- auto fn_name = UniqueIdentifier(std::string("tint_") + core::str(builtin->Fn()));
+ auto fn_name = UniqueIdentifier(std::string("tint_") + wgsl::str(builtin->Fn()));
std::vector<std::string> parameter_names;
{
auto decl = Line(&b);
diff --git a/src/tint/lang/hlsl/writer/ast_printer/builtin_test.cc b/src/tint/lang/hlsl/writer/ast_printer/builtin_test.cc
index 9445273..d29ce50 100644
--- a/src/tint/lang/hlsl/writer/ast_printer/builtin_test.cc
+++ b/src/tint/lang/hlsl/writer/ast_printer/builtin_test.cc
@@ -36,7 +36,7 @@
};
struct BuiltinData {
- core::BuiltinFn builtin;
+ wgsl::BuiltinFn builtin;
CallParamType type;
const char* hlsl_name;
};
@@ -60,84 +60,84 @@
return out;
}
-const ast::CallExpression* GenerateCall(core::BuiltinFn builtin,
+const ast::CallExpression* GenerateCall(wgsl::BuiltinFn builtin,
CallParamType type,
ProgramBuilder* builder) {
std::string name;
StringStream str;
str << name << builtin;
switch (builtin) {
- case core::BuiltinFn::kAcos:
- case core::BuiltinFn::kAsin:
- case core::BuiltinFn::kAtan:
- case core::BuiltinFn::kCeil:
- case core::BuiltinFn::kCos:
- case core::BuiltinFn::kCosh:
- case core::BuiltinFn::kDpdx:
- case core::BuiltinFn::kDpdxCoarse:
- case core::BuiltinFn::kDpdxFine:
- case core::BuiltinFn::kDpdy:
- case core::BuiltinFn::kDpdyCoarse:
- case core::BuiltinFn::kDpdyFine:
- case core::BuiltinFn::kExp:
- case core::BuiltinFn::kExp2:
- case core::BuiltinFn::kFloor:
- case core::BuiltinFn::kFract:
- case core::BuiltinFn::kFwidth:
- case core::BuiltinFn::kFwidthCoarse:
- case core::BuiltinFn::kFwidthFine:
- case core::BuiltinFn::kInverseSqrt:
- case core::BuiltinFn::kLength:
- case core::BuiltinFn::kLog:
- case core::BuiltinFn::kLog2:
- case core::BuiltinFn::kNormalize:
- case core::BuiltinFn::kRound:
- case core::BuiltinFn::kSin:
- case core::BuiltinFn::kSinh:
- case core::BuiltinFn::kSqrt:
- case core::BuiltinFn::kTan:
- case core::BuiltinFn::kTanh:
+ case wgsl::BuiltinFn::kAcos:
+ case wgsl::BuiltinFn::kAsin:
+ case wgsl::BuiltinFn::kAtan:
+ case wgsl::BuiltinFn::kCeil:
+ case wgsl::BuiltinFn::kCos:
+ case wgsl::BuiltinFn::kCosh:
+ case wgsl::BuiltinFn::kDpdx:
+ case wgsl::BuiltinFn::kDpdxCoarse:
+ case wgsl::BuiltinFn::kDpdxFine:
+ case wgsl::BuiltinFn::kDpdy:
+ case wgsl::BuiltinFn::kDpdyCoarse:
+ case wgsl::BuiltinFn::kDpdyFine:
+ case wgsl::BuiltinFn::kExp:
+ case wgsl::BuiltinFn::kExp2:
+ case wgsl::BuiltinFn::kFloor:
+ case wgsl::BuiltinFn::kFract:
+ case wgsl::BuiltinFn::kFwidth:
+ case wgsl::BuiltinFn::kFwidthCoarse:
+ case wgsl::BuiltinFn::kFwidthFine:
+ case wgsl::BuiltinFn::kInverseSqrt:
+ case wgsl::BuiltinFn::kLength:
+ case wgsl::BuiltinFn::kLog:
+ case wgsl::BuiltinFn::kLog2:
+ case wgsl::BuiltinFn::kNormalize:
+ case wgsl::BuiltinFn::kRound:
+ case wgsl::BuiltinFn::kSin:
+ case wgsl::BuiltinFn::kSinh:
+ case wgsl::BuiltinFn::kSqrt:
+ case wgsl::BuiltinFn::kTan:
+ case wgsl::BuiltinFn::kTanh:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2");
} else {
return builder->Call(str.str(), "f2");
}
- case core::BuiltinFn::kLdexp:
+ case wgsl::BuiltinFn::kLdexp:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "i2");
} else {
return builder->Call(str.str(), "f2", "i2");
}
- case core::BuiltinFn::kAtan2:
- case core::BuiltinFn::kDot:
- case core::BuiltinFn::kDistance:
- case core::BuiltinFn::kPow:
- case core::BuiltinFn::kReflect:
- case core::BuiltinFn::kStep:
+ case wgsl::BuiltinFn::kAtan2:
+ case wgsl::BuiltinFn::kDot:
+ case wgsl::BuiltinFn::kDistance:
+ case wgsl::BuiltinFn::kPow:
+ case wgsl::BuiltinFn::kReflect:
+ case wgsl::BuiltinFn::kStep:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2");
} else {
return builder->Call(str.str(), "f2", "f2");
}
- case core::BuiltinFn::kCross:
+ case wgsl::BuiltinFn::kCross:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h3", "h3");
} else {
return builder->Call(str.str(), "f3", "f3");
}
- case core::BuiltinFn::kFma:
- case core::BuiltinFn::kMix:
- case core::BuiltinFn::kFaceForward:
- case core::BuiltinFn::kSmoothstep:
+ case wgsl::BuiltinFn::kFma:
+ case wgsl::BuiltinFn::kMix:
+ case wgsl::BuiltinFn::kFaceForward:
+ case wgsl::BuiltinFn::kSmoothstep:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2", "h2");
} else {
return builder->Call(str.str(), "f2", "f2", "f2");
}
- case core::BuiltinFn::kAll:
- case core::BuiltinFn::kAny:
+ case wgsl::BuiltinFn::kAll:
+ case wgsl::BuiltinFn::kAny:
return builder->Call(str.str(), "b2");
- case core::BuiltinFn::kAbs:
+ case wgsl::BuiltinFn::kAbs:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2");
} else if (type == CallParamType::kF16) {
@@ -145,11 +145,11 @@
} else {
return builder->Call(str.str(), "u2");
}
- case core::BuiltinFn::kCountOneBits:
- case core::BuiltinFn::kReverseBits:
+ case wgsl::BuiltinFn::kCountOneBits:
+ case wgsl::BuiltinFn::kReverseBits:
return builder->Call(str.str(), "u2");
- case core::BuiltinFn::kMax:
- case core::BuiltinFn::kMin:
+ case wgsl::BuiltinFn::kMax:
+ case wgsl::BuiltinFn::kMin:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2", "f2");
} else if (type == CallParamType::kF16) {
@@ -157,7 +157,7 @@
} else {
return builder->Call(str.str(), "u2", "u2");
}
- case core::BuiltinFn::kClamp:
+ case wgsl::BuiltinFn::kClamp:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2", "f2", "f2");
} else if (type == CallParamType::kF16) {
@@ -165,19 +165,19 @@
} else {
return builder->Call(str.str(), "u2", "u2", "u2");
}
- case core::BuiltinFn::kSelect:
+ case wgsl::BuiltinFn::kSelect:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2", "b2");
} else {
return builder->Call(str.str(), "f2", "f2", "b2");
}
- case core::BuiltinFn::kDeterminant:
+ case wgsl::BuiltinFn::kDeterminant:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "hm2x2");
} else {
return builder->Call(str.str(), "m2x2");
}
- case core::BuiltinFn::kTranspose:
+ case wgsl::BuiltinFn::kTranspose:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "hm3x2");
} else {
@@ -233,105 +233,105 @@
HlslASTPrinterTest_Builtin,
HlslBuiltinTest,
testing::Values(/* Logical built-in */
- BuiltinData{core::BuiltinFn::kAll, CallParamType::kBool, "all"},
- BuiltinData{core::BuiltinFn::kAny, CallParamType::kBool, "any"},
+ BuiltinData{wgsl::BuiltinFn::kAll, CallParamType::kBool, "all"},
+ BuiltinData{wgsl::BuiltinFn::kAny, CallParamType::kBool, "any"},
/* Float built-in */
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kF32, "abs"},
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kF16, "abs"},
- BuiltinData{core::BuiltinFn::kAcos, CallParamType::kF32, "acos"},
- BuiltinData{core::BuiltinFn::kAcos, CallParamType::kF16, "acos"},
- BuiltinData{core::BuiltinFn::kAsin, CallParamType::kF32, "asin"},
- BuiltinData{core::BuiltinFn::kAsin, CallParamType::kF16, "asin"},
- BuiltinData{core::BuiltinFn::kAtan, CallParamType::kF32, "atan"},
- BuiltinData{core::BuiltinFn::kAtan, CallParamType::kF16, "atan"},
- BuiltinData{core::BuiltinFn::kAtan2, CallParamType::kF32, "atan2"},
- BuiltinData{core::BuiltinFn::kAtan2, CallParamType::kF16, "atan2"},
- BuiltinData{core::BuiltinFn::kCeil, CallParamType::kF32, "ceil"},
- BuiltinData{core::BuiltinFn::kCeil, CallParamType::kF16, "ceil"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kF32, "clamp"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kF16, "clamp"},
- BuiltinData{core::BuiltinFn::kCos, CallParamType::kF32, "cos"},
- BuiltinData{core::BuiltinFn::kCos, CallParamType::kF16, "cos"},
- BuiltinData{core::BuiltinFn::kCosh, CallParamType::kF32, "cosh"},
- BuiltinData{core::BuiltinFn::kCosh, CallParamType::kF16, "cosh"},
- BuiltinData{core::BuiltinFn::kCross, CallParamType::kF32, "cross"},
- BuiltinData{core::BuiltinFn::kCross, CallParamType::kF16, "cross"},
- BuiltinData{core::BuiltinFn::kDistance, CallParamType::kF32, "distance"},
- BuiltinData{core::BuiltinFn::kDistance, CallParamType::kF16, "distance"},
- BuiltinData{core::BuiltinFn::kExp, CallParamType::kF32, "exp"},
- BuiltinData{core::BuiltinFn::kExp, CallParamType::kF16, "exp"},
- BuiltinData{core::BuiltinFn::kExp2, CallParamType::kF32, "exp2"},
- BuiltinData{core::BuiltinFn::kExp2, CallParamType::kF16, "exp2"},
- BuiltinData{core::BuiltinFn::kFaceForward, CallParamType::kF32, "faceforward"},
- BuiltinData{core::BuiltinFn::kFaceForward, CallParamType::kF16, "faceforward"},
- BuiltinData{core::BuiltinFn::kFloor, CallParamType::kF32, "floor"},
- BuiltinData{core::BuiltinFn::kFloor, CallParamType::kF16, "floor"},
- BuiltinData{core::BuiltinFn::kFma, CallParamType::kF32, "mad"},
- BuiltinData{core::BuiltinFn::kFma, CallParamType::kF16, "mad"},
- BuiltinData{core::BuiltinFn::kFract, CallParamType::kF32, "frac"},
- BuiltinData{core::BuiltinFn::kFract, CallParamType::kF16, "frac"},
- BuiltinData{core::BuiltinFn::kInverseSqrt, CallParamType::kF32, "rsqrt"},
- BuiltinData{core::BuiltinFn::kInverseSqrt, CallParamType::kF16, "rsqrt"},
- BuiltinData{core::BuiltinFn::kLdexp, CallParamType::kF32, "ldexp"},
- BuiltinData{core::BuiltinFn::kLdexp, CallParamType::kF16, "ldexp"},
- BuiltinData{core::BuiltinFn::kLength, CallParamType::kF32, "length"},
- BuiltinData{core::BuiltinFn::kLength, CallParamType::kF16, "length"},
- BuiltinData{core::BuiltinFn::kLog, CallParamType::kF32, "log"},
- BuiltinData{core::BuiltinFn::kLog, CallParamType::kF16, "log"},
- BuiltinData{core::BuiltinFn::kLog2, CallParamType::kF32, "log2"},
- BuiltinData{core::BuiltinFn::kLog2, CallParamType::kF16, "log2"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kF32, "max"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kF16, "max"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kF32, "min"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kF16, "min"},
- BuiltinData{core::BuiltinFn::kMix, CallParamType::kF32, "lerp"},
- BuiltinData{core::BuiltinFn::kMix, CallParamType::kF16, "lerp"},
- BuiltinData{core::BuiltinFn::kNormalize, CallParamType::kF32, "normalize"},
- BuiltinData{core::BuiltinFn::kNormalize, CallParamType::kF16, "normalize"},
- BuiltinData{core::BuiltinFn::kPow, CallParamType::kF32, "pow"},
- BuiltinData{core::BuiltinFn::kPow, CallParamType::kF16, "pow"},
- BuiltinData{core::BuiltinFn::kReflect, CallParamType::kF32, "reflect"},
- BuiltinData{core::BuiltinFn::kReflect, CallParamType::kF16, "reflect"},
- BuiltinData{core::BuiltinFn::kSin, CallParamType::kF32, "sin"},
- BuiltinData{core::BuiltinFn::kSin, CallParamType::kF16, "sin"},
- BuiltinData{core::BuiltinFn::kSinh, CallParamType::kF32, "sinh"},
- BuiltinData{core::BuiltinFn::kSinh, CallParamType::kF16, "sinh"},
- BuiltinData{core::BuiltinFn::kSmoothstep, CallParamType::kF32, "smoothstep"},
- BuiltinData{core::BuiltinFn::kSmoothstep, CallParamType::kF16, "smoothstep"},
- BuiltinData{core::BuiltinFn::kSqrt, CallParamType::kF32, "sqrt"},
- BuiltinData{core::BuiltinFn::kSqrt, CallParamType::kF16, "sqrt"},
- BuiltinData{core::BuiltinFn::kStep, CallParamType::kF32, "step"},
- BuiltinData{core::BuiltinFn::kStep, CallParamType::kF16, "step"},
- BuiltinData{core::BuiltinFn::kTan, CallParamType::kF32, "tan"},
- BuiltinData{core::BuiltinFn::kTan, CallParamType::kF16, "tan"},
- BuiltinData{core::BuiltinFn::kTanh, CallParamType::kF32, "tanh"},
- BuiltinData{core::BuiltinFn::kTanh, CallParamType::kF16, "tanh"},
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kF32, "abs"},
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kF16, "abs"},
+ BuiltinData{wgsl::BuiltinFn::kAcos, CallParamType::kF32, "acos"},
+ BuiltinData{wgsl::BuiltinFn::kAcos, CallParamType::kF16, "acos"},
+ BuiltinData{wgsl::BuiltinFn::kAsin, CallParamType::kF32, "asin"},
+ BuiltinData{wgsl::BuiltinFn::kAsin, CallParamType::kF16, "asin"},
+ BuiltinData{wgsl::BuiltinFn::kAtan, CallParamType::kF32, "atan"},
+ BuiltinData{wgsl::BuiltinFn::kAtan, CallParamType::kF16, "atan"},
+ BuiltinData{wgsl::BuiltinFn::kAtan2, CallParamType::kF32, "atan2"},
+ BuiltinData{wgsl::BuiltinFn::kAtan2, CallParamType::kF16, "atan2"},
+ BuiltinData{wgsl::BuiltinFn::kCeil, CallParamType::kF32, "ceil"},
+ BuiltinData{wgsl::BuiltinFn::kCeil, CallParamType::kF16, "ceil"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kF32, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kF16, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kCos, CallParamType::kF32, "cos"},
+ BuiltinData{wgsl::BuiltinFn::kCos, CallParamType::kF16, "cos"},
+ BuiltinData{wgsl::BuiltinFn::kCosh, CallParamType::kF32, "cosh"},
+ BuiltinData{wgsl::BuiltinFn::kCosh, CallParamType::kF16, "cosh"},
+ BuiltinData{wgsl::BuiltinFn::kCross, CallParamType::kF32, "cross"},
+ BuiltinData{wgsl::BuiltinFn::kCross, CallParamType::kF16, "cross"},
+ BuiltinData{wgsl::BuiltinFn::kDistance, CallParamType::kF32, "distance"},
+ BuiltinData{wgsl::BuiltinFn::kDistance, CallParamType::kF16, "distance"},
+ BuiltinData{wgsl::BuiltinFn::kExp, CallParamType::kF32, "exp"},
+ BuiltinData{wgsl::BuiltinFn::kExp, CallParamType::kF16, "exp"},
+ BuiltinData{wgsl::BuiltinFn::kExp2, CallParamType::kF32, "exp2"},
+ BuiltinData{wgsl::BuiltinFn::kExp2, CallParamType::kF16, "exp2"},
+ BuiltinData{wgsl::BuiltinFn::kFaceForward, CallParamType::kF32, "faceforward"},
+ BuiltinData{wgsl::BuiltinFn::kFaceForward, CallParamType::kF16, "faceforward"},
+ BuiltinData{wgsl::BuiltinFn::kFloor, CallParamType::kF32, "floor"},
+ BuiltinData{wgsl::BuiltinFn::kFloor, CallParamType::kF16, "floor"},
+ BuiltinData{wgsl::BuiltinFn::kFma, CallParamType::kF32, "mad"},
+ BuiltinData{wgsl::BuiltinFn::kFma, CallParamType::kF16, "mad"},
+ BuiltinData{wgsl::BuiltinFn::kFract, CallParamType::kF32, "frac"},
+ BuiltinData{wgsl::BuiltinFn::kFract, CallParamType::kF16, "frac"},
+ BuiltinData{wgsl::BuiltinFn::kInverseSqrt, CallParamType::kF32, "rsqrt"},
+ BuiltinData{wgsl::BuiltinFn::kInverseSqrt, CallParamType::kF16, "rsqrt"},
+ BuiltinData{wgsl::BuiltinFn::kLdexp, CallParamType::kF32, "ldexp"},
+ BuiltinData{wgsl::BuiltinFn::kLdexp, CallParamType::kF16, "ldexp"},
+ BuiltinData{wgsl::BuiltinFn::kLength, CallParamType::kF32, "length"},
+ BuiltinData{wgsl::BuiltinFn::kLength, CallParamType::kF16, "length"},
+ BuiltinData{wgsl::BuiltinFn::kLog, CallParamType::kF32, "log"},
+ BuiltinData{wgsl::BuiltinFn::kLog, CallParamType::kF16, "log"},
+ BuiltinData{wgsl::BuiltinFn::kLog2, CallParamType::kF32, "log2"},
+ BuiltinData{wgsl::BuiltinFn::kLog2, CallParamType::kF16, "log2"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kF32, "max"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kF16, "max"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kF32, "min"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kF16, "min"},
+ BuiltinData{wgsl::BuiltinFn::kMix, CallParamType::kF32, "lerp"},
+ BuiltinData{wgsl::BuiltinFn::kMix, CallParamType::kF16, "lerp"},
+ BuiltinData{wgsl::BuiltinFn::kNormalize, CallParamType::kF32, "normalize"},
+ BuiltinData{wgsl::BuiltinFn::kNormalize, CallParamType::kF16, "normalize"},
+ BuiltinData{wgsl::BuiltinFn::kPow, CallParamType::kF32, "pow"},
+ BuiltinData{wgsl::BuiltinFn::kPow, CallParamType::kF16, "pow"},
+ BuiltinData{wgsl::BuiltinFn::kReflect, CallParamType::kF32, "reflect"},
+ BuiltinData{wgsl::BuiltinFn::kReflect, CallParamType::kF16, "reflect"},
+ BuiltinData{wgsl::BuiltinFn::kSin, CallParamType::kF32, "sin"},
+ BuiltinData{wgsl::BuiltinFn::kSin, CallParamType::kF16, "sin"},
+ BuiltinData{wgsl::BuiltinFn::kSinh, CallParamType::kF32, "sinh"},
+ BuiltinData{wgsl::BuiltinFn::kSinh, CallParamType::kF16, "sinh"},
+ BuiltinData{wgsl::BuiltinFn::kSmoothstep, CallParamType::kF32, "smoothstep"},
+ BuiltinData{wgsl::BuiltinFn::kSmoothstep, CallParamType::kF16, "smoothstep"},
+ BuiltinData{wgsl::BuiltinFn::kSqrt, CallParamType::kF32, "sqrt"},
+ BuiltinData{wgsl::BuiltinFn::kSqrt, CallParamType::kF16, "sqrt"},
+ BuiltinData{wgsl::BuiltinFn::kStep, CallParamType::kF32, "step"},
+ BuiltinData{wgsl::BuiltinFn::kStep, CallParamType::kF16, "step"},
+ BuiltinData{wgsl::BuiltinFn::kTan, CallParamType::kF32, "tan"},
+ BuiltinData{wgsl::BuiltinFn::kTan, CallParamType::kF16, "tan"},
+ BuiltinData{wgsl::BuiltinFn::kTanh, CallParamType::kF32, "tanh"},
+ BuiltinData{wgsl::BuiltinFn::kTanh, CallParamType::kF16, "tanh"},
/* Integer built-in */
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kU32, "abs"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kU32, "clamp"},
- BuiltinData{core::BuiltinFn::kCountOneBits, CallParamType::kU32, "countbits"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kU32, "max"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kU32, "min"},
- BuiltinData{core::BuiltinFn::kReverseBits, CallParamType::kU32, "reversebits"},
- BuiltinData{core::BuiltinFn::kRound, CallParamType::kU32, "round"},
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kU32, "abs"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kU32, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kCountOneBits, CallParamType::kU32, "countbits"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kU32, "max"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kU32, "min"},
+ BuiltinData{wgsl::BuiltinFn::kReverseBits, CallParamType::kU32, "reversebits"},
+ BuiltinData{wgsl::BuiltinFn::kRound, CallParamType::kU32, "round"},
/* Matrix built-in */
- BuiltinData{core::BuiltinFn::kDeterminant, CallParamType::kF32, "determinant"},
- BuiltinData{core::BuiltinFn::kDeterminant, CallParamType::kF16, "determinant"},
- BuiltinData{core::BuiltinFn::kTranspose, CallParamType::kF32, "transpose"},
- BuiltinData{core::BuiltinFn::kTranspose, CallParamType::kF16, "transpose"},
+ BuiltinData{wgsl::BuiltinFn::kDeterminant, CallParamType::kF32, "determinant"},
+ BuiltinData{wgsl::BuiltinFn::kDeterminant, CallParamType::kF16, "determinant"},
+ BuiltinData{wgsl::BuiltinFn::kTranspose, CallParamType::kF32, "transpose"},
+ BuiltinData{wgsl::BuiltinFn::kTranspose, CallParamType::kF16, "transpose"},
/* Vector built-in */
- BuiltinData{core::BuiltinFn::kDot, CallParamType::kF32, "dot"},
- BuiltinData{core::BuiltinFn::kDot, CallParamType::kF16, "dot"},
+ BuiltinData{wgsl::BuiltinFn::kDot, CallParamType::kF32, "dot"},
+ BuiltinData{wgsl::BuiltinFn::kDot, CallParamType::kF16, "dot"},
/* Derivate built-in */
- BuiltinData{core::BuiltinFn::kDpdx, CallParamType::kF32, "ddx"},
- BuiltinData{core::BuiltinFn::kDpdxCoarse, CallParamType::kF32, "ddx_coarse"},
- BuiltinData{core::BuiltinFn::kDpdxFine, CallParamType::kF32, "ddx_fine"},
- BuiltinData{core::BuiltinFn::kDpdy, CallParamType::kF32, "ddy"},
- BuiltinData{core::BuiltinFn::kDpdyCoarse, CallParamType::kF32, "ddy_coarse"},
- BuiltinData{core::BuiltinFn::kDpdyFine, CallParamType::kF32, "ddy_fine"},
- BuiltinData{core::BuiltinFn::kFwidth, CallParamType::kF32, "fwidth"},
- BuiltinData{core::BuiltinFn::kFwidthCoarse, CallParamType::kF32, "fwidth"},
- BuiltinData{core::BuiltinFn::kFwidthFine, CallParamType::kF32, "fwidth"}));
+ BuiltinData{wgsl::BuiltinFn::kDpdx, CallParamType::kF32, "ddx"},
+ BuiltinData{wgsl::BuiltinFn::kDpdxCoarse, CallParamType::kF32, "ddx_coarse"},
+ BuiltinData{wgsl::BuiltinFn::kDpdxFine, CallParamType::kF32, "ddx_fine"},
+ BuiltinData{wgsl::BuiltinFn::kDpdy, CallParamType::kF32, "ddy"},
+ BuiltinData{wgsl::BuiltinFn::kDpdyCoarse, CallParamType::kF32, "ddy_coarse"},
+ BuiltinData{wgsl::BuiltinFn::kDpdyFine, CallParamType::kF32, "ddy_fine"},
+ BuiltinData{wgsl::BuiltinFn::kFwidth, CallParamType::kF32, "fwidth"},
+ BuiltinData{wgsl::BuiltinFn::kFwidthCoarse, CallParamType::kF32, "fwidth"},
+ BuiltinData{wgsl::BuiltinFn::kFwidthFine, CallParamType::kF32, "fwidth"}));
TEST_F(HlslASTPrinterTest_Builtin, Builtin_Call) {
auto* call = Call("dot", "param1", "param2");
diff --git a/src/tint/lang/hlsl/writer/ast_raise/BUILD.bazel b/src/tint/lang/hlsl/writer/ast_raise/BUILD.bazel
index f6333e6..fd49ad8 100644
--- a/src/tint/lang/hlsl/writer/ast_raise/BUILD.bazel
+++ b/src/tint/lang/hlsl/writer/ast_raise/BUILD.bazel
@@ -84,6 +84,7 @@
"//src/tint/api/common",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/hlsl/writer/ast_raise/BUILD.cmake b/src/tint/lang/hlsl/writer/ast_raise/BUILD.cmake
index d7b7107..97916d3 100644
--- a/src/tint/lang/hlsl/writer/ast_raise/BUILD.cmake
+++ b/src/tint/lang/hlsl/writer/ast_raise/BUILD.cmake
@@ -88,6 +88,7 @@
tint_api_common
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
diff --git a/src/tint/lang/hlsl/writer/ast_raise/BUILD.gn b/src/tint/lang/hlsl/writer/ast_raise/BUILD.gn
index b7e2eef..24b8ca4 100644
--- a/src/tint/lang/hlsl/writer/ast_raise/BUILD.gn
+++ b/src/tint/lang/hlsl/writer/ast_raise/BUILD.gn
@@ -88,6 +88,7 @@
"${tint_src_dir}/api/common",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/hlsl/writer/ast_raise/calculate_array_length.cc b/src/tint/lang/hlsl/writer/ast_raise/calculate_array_length.cc
index 5aa810e..57c338e 100644
--- a/src/tint/lang/hlsl/writer/ast_raise/calculate_array_length.cc
+++ b/src/tint/lang/hlsl/writer/ast_raise/calculate_array_length.cc
@@ -47,7 +47,7 @@
for (auto* fn : program.AST().Functions()) {
if (auto* sem_fn = program.Sem().Get(fn)) {
for (auto* builtin : sem_fn->DirectlyCalledBuiltins()) {
- if (builtin->Fn() == core::BuiltinFn::kArrayLength) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kArrayLength) {
return true;
}
}
@@ -130,7 +130,7 @@
if (auto* call_expr = node->As<ast::CallExpression>()) {
auto* call = sem.Get(call_expr)->UnwrapMaterialize()->As<sem::Call>();
if (auto* builtin = call->Target()->As<sem::BuiltinFn>()) {
- if (builtin->Fn() == core::BuiltinFn::kArrayLength) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kArrayLength) {
// We're dealing with an arrayLength() call
if (auto* call_stmt = call->Stmt()->Declaration()->As<ast::CallStatement>()) {
diff --git a/src/tint/lang/hlsl/writer/ast_raise/decompose_memory_access.cc b/src/tint/lang/hlsl/writer/ast_raise/decompose_memory_access.cc
index ab0bfca..18c9936 100644
--- a/src/tint/lang/hlsl/writer/ast_raise/decompose_memory_access.cc
+++ b/src/tint/lang/hlsl/writer/ast_raise/decompose_memory_access.cc
@@ -129,7 +129,7 @@
/// AtomicKey is the unordered map key to an atomic intrinsic.
struct AtomicKey {
core::type::Type const* el_ty = nullptr; // element type
- core::BuiltinFn const op; // atomic op
+ wgsl::BuiltinFn const op; // atomic op
Symbol const buffer; // buffer name
bool operator==(const AtomicKey& rhs) const {
return el_ty == rhs.el_ty && op == rhs.op && buffer == rhs.buffer;
@@ -254,42 +254,42 @@
/// @returns a DecomposeMemoryAccess::Intrinsic attribute that can be applied to a stub function for
/// the atomic op and the type @p ty.
DecomposeMemoryAccess::Intrinsic* IntrinsicAtomicFor(ast::Builder* builder,
- core::BuiltinFn ity,
+ wgsl::BuiltinFn ity,
const core::type::Type* ty,
const Symbol& buffer) {
auto op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicLoad;
switch (ity) {
- case core::BuiltinFn::kAtomicLoad:
+ case wgsl::BuiltinFn::kAtomicLoad:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicLoad;
break;
- case core::BuiltinFn::kAtomicStore:
+ case wgsl::BuiltinFn::kAtomicStore:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicStore;
break;
- case core::BuiltinFn::kAtomicAdd:
+ case wgsl::BuiltinFn::kAtomicAdd:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicAdd;
break;
- case core::BuiltinFn::kAtomicSub:
+ case wgsl::BuiltinFn::kAtomicSub:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicSub;
break;
- case core::BuiltinFn::kAtomicMax:
+ case wgsl::BuiltinFn::kAtomicMax:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicMax;
break;
- case core::BuiltinFn::kAtomicMin:
+ case wgsl::BuiltinFn::kAtomicMin:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicMin;
break;
- case core::BuiltinFn::kAtomicAnd:
+ case wgsl::BuiltinFn::kAtomicAnd:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicAnd;
break;
- case core::BuiltinFn::kAtomicOr:
+ case wgsl::BuiltinFn::kAtomicOr:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicOr;
break;
- case core::BuiltinFn::kAtomicXor:
+ case wgsl::BuiltinFn::kAtomicXor:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicXor;
break;
- case core::BuiltinFn::kAtomicExchange:
+ case wgsl::BuiltinFn::kAtomicExchange:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicExchange;
break;
- case core::BuiltinFn::kAtomicCompareExchangeWeak:
+ case wgsl::BuiltinFn::kAtomicCompareExchangeWeak:
op = DecomposeMemoryAccess::Intrinsic::Op::kAtomicCompareExchangeWeak;
break;
default:
@@ -922,7 +922,7 @@
if (auto* call_expr = node->As<ast::CallExpression>()) {
auto* call = sem.Get(call_expr)->UnwrapMaterialize()->As<sem::Call>();
if (auto* builtin = call->Target()->As<sem::BuiltinFn>()) {
- if (builtin->Fn() == core::BuiltinFn::kArrayLength) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kArrayLength) {
// arrayLength(X)
// Don't convert X into a load, this builtin actually requires the real pointer.
state.TakeAccess(call_expr->args[0]);
diff --git a/src/tint/lang/msl/writer/ast_printer/ast_printer.cc b/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
index 2db793f..27ae84c 100644
--- a/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
+++ b/src/tint/lang/msl/writer/ast_printer/ast_printer.cc
@@ -680,24 +680,24 @@
auto name = generate_builtin_name(builtin);
switch (builtin->Fn()) {
- case core::BuiltinFn::kDot:
+ case wgsl::BuiltinFn::kDot:
return EmitDotCall(out, expr, builtin);
- case core::BuiltinFn::kModf:
+ case wgsl::BuiltinFn::kModf:
return EmitModfCall(out, expr, builtin);
- case core::BuiltinFn::kFrexp:
+ case wgsl::BuiltinFn::kFrexp:
return EmitFrexpCall(out, expr, builtin);
- case core::BuiltinFn::kDegrees:
+ case wgsl::BuiltinFn::kDegrees:
return EmitDegreesCall(out, expr, builtin);
- case core::BuiltinFn::kRadians:
+ case wgsl::BuiltinFn::kRadians:
return EmitRadiansCall(out, expr, builtin);
- case core::BuiltinFn::kDot4I8Packed:
+ case wgsl::BuiltinFn::kDot4I8Packed:
return EmitDot4I8PackedCall(out, expr, builtin);
- case core::BuiltinFn::kDot4U8Packed:
+ case wgsl::BuiltinFn::kDot4U8Packed:
return EmitDot4U8PackedCall(out, expr, builtin);
- case core::BuiltinFn::kPack2X16Float:
- case core::BuiltinFn::kUnpack2X16Float: {
- if (builtin->Fn() == core::BuiltinFn::kPack2X16Float) {
+ case wgsl::BuiltinFn::kPack2X16Float:
+ case wgsl::BuiltinFn::kUnpack2X16Float: {
+ if (builtin->Fn() == wgsl::BuiltinFn::kPack2X16Float) {
out << "as_type<uint>(half2(";
} else {
out << "float2(as_type<half2>(";
@@ -708,7 +708,7 @@
out << "))";
return true;
}
- case core::BuiltinFn::kQuantizeToF16: {
+ case wgsl::BuiltinFn::kQuantizeToF16: {
std::string width = "";
if (auto* vec = builtin->ReturnType()->As<core::type::Vector>()) {
width = std::to_string(vec->Width());
@@ -722,20 +722,20 @@
}
// TODO(crbug.com/tint/661): Combine sequential barriers to a single
// instruction.
- case core::BuiltinFn::kStorageBarrier: {
+ case wgsl::BuiltinFn::kStorageBarrier: {
out << "threadgroup_barrier(mem_flags::mem_device)";
return true;
}
- case core::BuiltinFn::kWorkgroupBarrier: {
+ case wgsl::BuiltinFn::kWorkgroupBarrier: {
out << "threadgroup_barrier(mem_flags::mem_threadgroup)";
return true;
}
- case core::BuiltinFn::kTextureBarrier: {
+ case wgsl::BuiltinFn::kTextureBarrier: {
out << "threadgroup_barrier(mem_flags::mem_texture)";
return true;
}
- case core::BuiltinFn::kLength: {
+ case wgsl::BuiltinFn::kLength: {
auto* sem = builder_.Sem().GetVal(expr->args[0]);
if (sem->Type()->UnwrapRef()->Is<core::type::Scalar>()) {
// Emulate scalar overload using fabs(x).
@@ -744,7 +744,7 @@
break;
}
- case core::BuiltinFn::kDistance: {
+ case wgsl::BuiltinFn::kDistance: {
auto* sem = builder_.Sem().GetVal(expr->args[0]);
if (sem->Type()->UnwrapRef()->Is<core::type::Scalar>()) {
// Emulate scalar overload using fabs(x - y);
@@ -762,7 +762,7 @@
break;
}
- case core::BuiltinFn::kSubgroupBroadcast: {
+ case wgsl::BuiltinFn::kSubgroupBroadcast: {
// The lane argument is ushort.
out << "simd_broadcast(";
if (!EmitExpression(out, expr->args[0])) {
@@ -898,37 +898,37 @@
};
switch (builtin->Fn()) {
- case core::BuiltinFn::kAtomicLoad:
+ case wgsl::BuiltinFn::kAtomicLoad:
return call("atomic_load_explicit", true);
- case core::BuiltinFn::kAtomicStore:
+ case wgsl::BuiltinFn::kAtomicStore:
return call("atomic_store_explicit", true);
- case core::BuiltinFn::kAtomicAdd:
+ case wgsl::BuiltinFn::kAtomicAdd:
return call("atomic_fetch_add_explicit", true);
- case core::BuiltinFn::kAtomicSub:
+ case wgsl::BuiltinFn::kAtomicSub:
return call("atomic_fetch_sub_explicit", true);
- case core::BuiltinFn::kAtomicMax:
+ case wgsl::BuiltinFn::kAtomicMax:
return call("atomic_fetch_max_explicit", true);
- case core::BuiltinFn::kAtomicMin:
+ case wgsl::BuiltinFn::kAtomicMin:
return call("atomic_fetch_min_explicit", true);
- case core::BuiltinFn::kAtomicAnd:
+ case wgsl::BuiltinFn::kAtomicAnd:
return call("atomic_fetch_and_explicit", true);
- case core::BuiltinFn::kAtomicOr:
+ case wgsl::BuiltinFn::kAtomicOr:
return call("atomic_fetch_or_explicit", true);
- case core::BuiltinFn::kAtomicXor:
+ case wgsl::BuiltinFn::kAtomicXor:
return call("atomic_fetch_xor_explicit", true);
- case core::BuiltinFn::kAtomicExchange:
+ case wgsl::BuiltinFn::kAtomicExchange:
return call("atomic_exchange_explicit", true);
- case core::BuiltinFn::kAtomicCompareExchangeWeak: {
+ case wgsl::BuiltinFn::kAtomicCompareExchangeWeak: {
auto* ptr_ty = TypeOf(expr->args[0])->UnwrapRef()->As<core::type::Pointer>();
auto sc = ptr_ty->AddressSpace();
auto* str = builtin->ReturnType()->As<core::type::Struct>();
@@ -1044,7 +1044,7 @@
bool level_is_constant_zero = texture_type->dim() == core::type::TextureDimension::k1d;
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureDimensions: {
+ case wgsl::BuiltinFn::kTextureDimensions: {
std::vector<const char*> dims;
switch (texture_type->dim()) {
case core::type::TextureDimension::kNone:
@@ -1097,21 +1097,21 @@
}
return true;
}
- case core::BuiltinFn::kTextureNumLayers: {
+ case wgsl::BuiltinFn::kTextureNumLayers: {
if (!texture_expr()) {
return false;
}
out << ".get_array_size()";
return true;
}
- case core::BuiltinFn::kTextureNumLevels: {
+ case wgsl::BuiltinFn::kTextureNumLevels: {
if (!texture_expr()) {
return false;
}
out << ".get_num_mip_levels()";
return true;
}
- case core::BuiltinFn::kTextureNumSamples: {
+ case wgsl::BuiltinFn::kTextureNumSamples: {
if (!texture_expr()) {
return false;
}
@@ -1129,27 +1129,27 @@
bool lod_param_is_named = true;
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureSample:
- case core::BuiltinFn::kTextureSampleBias:
- case core::BuiltinFn::kTextureSampleLevel:
- case core::BuiltinFn::kTextureSampleGrad:
+ case wgsl::BuiltinFn::kTextureSample:
+ case wgsl::BuiltinFn::kTextureSampleBias:
+ case wgsl::BuiltinFn::kTextureSampleLevel:
+ case wgsl::BuiltinFn::kTextureSampleGrad:
out << ".sample(";
break;
- case core::BuiltinFn::kTextureSampleCompare:
- case core::BuiltinFn::kTextureSampleCompareLevel:
+ case wgsl::BuiltinFn::kTextureSampleCompare:
+ case wgsl::BuiltinFn::kTextureSampleCompareLevel:
out << ".sample_compare(";
break;
- case core::BuiltinFn::kTextureGather:
+ case wgsl::BuiltinFn::kTextureGather:
out << ".gather(";
break;
- case core::BuiltinFn::kTextureGatherCompare:
+ case wgsl::BuiltinFn::kTextureGatherCompare:
out << ".gather_compare(";
break;
- case core::BuiltinFn::kTextureLoad:
+ case wgsl::BuiltinFn::kTextureLoad:
out << ".read(";
lod_param_is_named = false;
break;
- case core::BuiltinFn::kTextureStore:
+ case wgsl::BuiltinFn::kTextureStore:
out << ".write(";
break;
default:
@@ -1225,7 +1225,7 @@
out << ")";
}
}
- if (builtin->Fn() == core::BuiltinFn::kTextureSampleCompareLevel) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kTextureSampleCompareLevel) {
maybe_write_comma();
out << "level(0)";
}
@@ -1310,7 +1310,7 @@
// If this is a `textureStore()` for a read-write texture, add a fence to ensure that the
// written values are visible to subsequent reads from the same thread.
if (auto* storage = texture_type->As<core::type::StorageTexture>();
- builtin->Fn() == core::BuiltinFn::kTextureStore &&
+ builtin->Fn() == wgsl::BuiltinFn::kTextureStore &&
storage->access() == core::Access::kReadWrite) {
out << "; ";
texture_expr();
@@ -1468,143 +1468,143 @@
std::string ASTPrinter::generate_builtin_name(const sem::BuiltinFn* builtin) {
std::string out = "";
switch (builtin->Fn()) {
- case core::BuiltinFn::kAcos:
- case core::BuiltinFn::kAcosh:
- case core::BuiltinFn::kAll:
- case core::BuiltinFn::kAny:
- case core::BuiltinFn::kAsin:
- case core::BuiltinFn::kAsinh:
- case core::BuiltinFn::kAtanh:
- case core::BuiltinFn::kAtan:
- case core::BuiltinFn::kAtan2:
- case core::BuiltinFn::kCeil:
- case core::BuiltinFn::kCos:
- case core::BuiltinFn::kCosh:
- case core::BuiltinFn::kCross:
- case core::BuiltinFn::kDeterminant:
- case core::BuiltinFn::kDistance:
- case core::BuiltinFn::kDot:
- case core::BuiltinFn::kExp:
- case core::BuiltinFn::kExp2:
- case core::BuiltinFn::kFloor:
- case core::BuiltinFn::kFma:
- case core::BuiltinFn::kFract:
- case core::BuiltinFn::kFrexp:
- case core::BuiltinFn::kLength:
- case core::BuiltinFn::kLdexp:
- case core::BuiltinFn::kLog:
- case core::BuiltinFn::kLog2:
- case core::BuiltinFn::kMix:
- case core::BuiltinFn::kModf:
- case core::BuiltinFn::kNormalize:
- case core::BuiltinFn::kPow:
- case core::BuiltinFn::kReflect:
- case core::BuiltinFn::kRefract:
- case core::BuiltinFn::kSaturate:
- case core::BuiltinFn::kSelect:
- case core::BuiltinFn::kSin:
- case core::BuiltinFn::kSinh:
- case core::BuiltinFn::kSqrt:
- case core::BuiltinFn::kStep:
- case core::BuiltinFn::kTan:
- case core::BuiltinFn::kTanh:
- case core::BuiltinFn::kTranspose:
- case core::BuiltinFn::kTrunc:
- case core::BuiltinFn::kSign:
- case core::BuiltinFn::kClamp:
+ case wgsl::BuiltinFn::kAcos:
+ case wgsl::BuiltinFn::kAcosh:
+ case wgsl::BuiltinFn::kAll:
+ case wgsl::BuiltinFn::kAny:
+ case wgsl::BuiltinFn::kAsin:
+ case wgsl::BuiltinFn::kAsinh:
+ case wgsl::BuiltinFn::kAtanh:
+ case wgsl::BuiltinFn::kAtan:
+ case wgsl::BuiltinFn::kAtan2:
+ case wgsl::BuiltinFn::kCeil:
+ case wgsl::BuiltinFn::kCos:
+ case wgsl::BuiltinFn::kCosh:
+ case wgsl::BuiltinFn::kCross:
+ case wgsl::BuiltinFn::kDeterminant:
+ case wgsl::BuiltinFn::kDistance:
+ case wgsl::BuiltinFn::kDot:
+ case wgsl::BuiltinFn::kExp:
+ case wgsl::BuiltinFn::kExp2:
+ case wgsl::BuiltinFn::kFloor:
+ case wgsl::BuiltinFn::kFma:
+ case wgsl::BuiltinFn::kFract:
+ case wgsl::BuiltinFn::kFrexp:
+ case wgsl::BuiltinFn::kLength:
+ case wgsl::BuiltinFn::kLdexp:
+ case wgsl::BuiltinFn::kLog:
+ case wgsl::BuiltinFn::kLog2:
+ case wgsl::BuiltinFn::kMix:
+ case wgsl::BuiltinFn::kModf:
+ case wgsl::BuiltinFn::kNormalize:
+ case wgsl::BuiltinFn::kPow:
+ case wgsl::BuiltinFn::kReflect:
+ case wgsl::BuiltinFn::kRefract:
+ case wgsl::BuiltinFn::kSaturate:
+ case wgsl::BuiltinFn::kSelect:
+ case wgsl::BuiltinFn::kSin:
+ case wgsl::BuiltinFn::kSinh:
+ case wgsl::BuiltinFn::kSqrt:
+ case wgsl::BuiltinFn::kStep:
+ case wgsl::BuiltinFn::kTan:
+ case wgsl::BuiltinFn::kTanh:
+ case wgsl::BuiltinFn::kTranspose:
+ case wgsl::BuiltinFn::kTrunc:
+ case wgsl::BuiltinFn::kSign:
+ case wgsl::BuiltinFn::kClamp:
out += builtin->str();
break;
- case core::BuiltinFn::kAbs:
+ case wgsl::BuiltinFn::kAbs:
if (builtin->ReturnType()->is_float_scalar_or_vector()) {
out += "fabs";
} else {
out += "abs";
}
break;
- case core::BuiltinFn::kCountLeadingZeros:
+ case wgsl::BuiltinFn::kCountLeadingZeros:
out += "clz";
break;
- case core::BuiltinFn::kCountOneBits:
+ case wgsl::BuiltinFn::kCountOneBits:
out += "popcount";
break;
- case core::BuiltinFn::kCountTrailingZeros:
+ case wgsl::BuiltinFn::kCountTrailingZeros:
out += "ctz";
break;
- case core::BuiltinFn::kDpdx:
- case core::BuiltinFn::kDpdxCoarse:
- case core::BuiltinFn::kDpdxFine:
+ case wgsl::BuiltinFn::kDpdx:
+ case wgsl::BuiltinFn::kDpdxCoarse:
+ case wgsl::BuiltinFn::kDpdxFine:
out += "dfdx";
break;
- case core::BuiltinFn::kDpdy:
- case core::BuiltinFn::kDpdyCoarse:
- case core::BuiltinFn::kDpdyFine:
+ case wgsl::BuiltinFn::kDpdy:
+ case wgsl::BuiltinFn::kDpdyCoarse:
+ case wgsl::BuiltinFn::kDpdyFine:
out += "dfdy";
break;
- case core::BuiltinFn::kExtractBits:
+ case wgsl::BuiltinFn::kExtractBits:
out += "extract_bits";
break;
- case core::BuiltinFn::kInsertBits:
+ case wgsl::BuiltinFn::kInsertBits:
out += "insert_bits";
break;
- case core::BuiltinFn::kFwidth:
- case core::BuiltinFn::kFwidthCoarse:
- case core::BuiltinFn::kFwidthFine:
+ case wgsl::BuiltinFn::kFwidth:
+ case wgsl::BuiltinFn::kFwidthCoarse:
+ case wgsl::BuiltinFn::kFwidthFine:
out += "fwidth";
break;
- case core::BuiltinFn::kMax:
+ case wgsl::BuiltinFn::kMax:
if (builtin->ReturnType()->is_float_scalar_or_vector()) {
out += "fmax";
} else {
out += "max";
}
break;
- case core::BuiltinFn::kMin:
+ case wgsl::BuiltinFn::kMin:
if (builtin->ReturnType()->is_float_scalar_or_vector()) {
out += "fmin";
} else {
out += "min";
}
break;
- case core::BuiltinFn::kFaceForward:
+ case wgsl::BuiltinFn::kFaceForward:
out += "faceforward";
break;
- case core::BuiltinFn::kPack4X8Snorm:
+ case wgsl::BuiltinFn::kPack4X8Snorm:
out += "pack_float_to_snorm4x8";
break;
- case core::BuiltinFn::kPack4X8Unorm:
+ case wgsl::BuiltinFn::kPack4X8Unorm:
out += "pack_float_to_unorm4x8";
break;
- case core::BuiltinFn::kPack2X16Snorm:
+ case wgsl::BuiltinFn::kPack2X16Snorm:
out += "pack_float_to_snorm2x16";
break;
- case core::BuiltinFn::kPack2X16Unorm:
+ case wgsl::BuiltinFn::kPack2X16Unorm:
out += "pack_float_to_unorm2x16";
break;
- case core::BuiltinFn::kReverseBits:
+ case wgsl::BuiltinFn::kReverseBits:
out += "reverse_bits";
break;
- case core::BuiltinFn::kRound:
+ case wgsl::BuiltinFn::kRound:
out += "rint";
break;
- case core::BuiltinFn::kSmoothstep:
+ case wgsl::BuiltinFn::kSmoothstep:
out += "smoothstep";
break;
- case core::BuiltinFn::kInverseSqrt:
+ case wgsl::BuiltinFn::kInverseSqrt:
out += "rsqrt";
break;
- case core::BuiltinFn::kUnpack4X8Snorm:
+ case wgsl::BuiltinFn::kUnpack4X8Snorm:
out += "unpack_snorm4x8_to_float";
break;
- case core::BuiltinFn::kUnpack4X8Unorm:
+ case wgsl::BuiltinFn::kUnpack4X8Unorm:
out += "unpack_unorm4x8_to_float";
break;
- case core::BuiltinFn::kUnpack2X16Snorm:
+ case wgsl::BuiltinFn::kUnpack2X16Snorm:
out += "unpack_snorm2x16_to_float";
break;
- case core::BuiltinFn::kUnpack2X16Unorm:
+ case wgsl::BuiltinFn::kUnpack2X16Unorm:
out += "unpack_unorm2x16_to_float";
break;
- case core::BuiltinFn::kArrayLength:
+ case wgsl::BuiltinFn::kArrayLength:
diagnostics_.add_error(
diag::System::Writer,
"Unable to translate builtin: " + std::string(builtin->str()) +
@@ -3070,7 +3070,7 @@
TextBuffer b;
TINT_DEFER(helpers_.Append(b));
- auto fn_name = UniqueIdentifier(std::string("tint_") + core::str(builtin->Fn()));
+ auto fn_name = UniqueIdentifier(std::string("tint_") + wgsl::str(builtin->Fn()));
std::vector<std::string> parameter_names;
{
auto decl = Line(&b);
diff --git a/src/tint/lang/msl/writer/ast_printer/builtin_test.cc b/src/tint/lang/msl/writer/ast_printer/builtin_test.cc
index a137075..f2d4f69 100644
--- a/src/tint/lang/msl/writer/ast_printer/builtin_test.cc
+++ b/src/tint/lang/msl/writer/ast_printer/builtin_test.cc
@@ -33,7 +33,7 @@
};
struct BuiltinData {
- core::BuiltinFn builtin;
+ wgsl::BuiltinFn builtin;
CallParamType type;
const char* msl_name;
};
@@ -57,88 +57,88 @@
return out;
}
-const ast::CallExpression* GenerateCall(core::BuiltinFn builtin,
+const ast::CallExpression* GenerateCall(wgsl::BuiltinFn builtin,
CallParamType type,
ProgramBuilder* builder) {
std::string name;
StringStream str;
str << name << builtin;
switch (builtin) {
- case core::BuiltinFn::kAcos:
- case core::BuiltinFn::kAsin:
- case core::BuiltinFn::kAtan:
- case core::BuiltinFn::kCeil:
- case core::BuiltinFn::kCos:
- case core::BuiltinFn::kCosh:
- case core::BuiltinFn::kDpdx:
- case core::BuiltinFn::kDpdxCoarse:
- case core::BuiltinFn::kDpdxFine:
- case core::BuiltinFn::kDpdy:
- case core::BuiltinFn::kDpdyCoarse:
- case core::BuiltinFn::kDpdyFine:
- case core::BuiltinFn::kExp:
- case core::BuiltinFn::kExp2:
- case core::BuiltinFn::kFloor:
- case core::BuiltinFn::kFract:
- case core::BuiltinFn::kFwidth:
- case core::BuiltinFn::kFwidthCoarse:
- case core::BuiltinFn::kFwidthFine:
- case core::BuiltinFn::kInverseSqrt:
- case core::BuiltinFn::kLength:
- case core::BuiltinFn::kLog:
- case core::BuiltinFn::kLog2:
- case core::BuiltinFn::kNormalize:
- case core::BuiltinFn::kRound:
- case core::BuiltinFn::kSin:
- case core::BuiltinFn::kSinh:
- case core::BuiltinFn::kSqrt:
- case core::BuiltinFn::kTan:
- case core::BuiltinFn::kTanh:
- case core::BuiltinFn::kTrunc:
- case core::BuiltinFn::kSign:
+ case wgsl::BuiltinFn::kAcos:
+ case wgsl::BuiltinFn::kAsin:
+ case wgsl::BuiltinFn::kAtan:
+ case wgsl::BuiltinFn::kCeil:
+ case wgsl::BuiltinFn::kCos:
+ case wgsl::BuiltinFn::kCosh:
+ case wgsl::BuiltinFn::kDpdx:
+ case wgsl::BuiltinFn::kDpdxCoarse:
+ case wgsl::BuiltinFn::kDpdxFine:
+ case wgsl::BuiltinFn::kDpdy:
+ case wgsl::BuiltinFn::kDpdyCoarse:
+ case wgsl::BuiltinFn::kDpdyFine:
+ case wgsl::BuiltinFn::kExp:
+ case wgsl::BuiltinFn::kExp2:
+ case wgsl::BuiltinFn::kFloor:
+ case wgsl::BuiltinFn::kFract:
+ case wgsl::BuiltinFn::kFwidth:
+ case wgsl::BuiltinFn::kFwidthCoarse:
+ case wgsl::BuiltinFn::kFwidthFine:
+ case wgsl::BuiltinFn::kInverseSqrt:
+ case wgsl::BuiltinFn::kLength:
+ case wgsl::BuiltinFn::kLog:
+ case wgsl::BuiltinFn::kLog2:
+ case wgsl::BuiltinFn::kNormalize:
+ case wgsl::BuiltinFn::kRound:
+ case wgsl::BuiltinFn::kSin:
+ case wgsl::BuiltinFn::kSinh:
+ case wgsl::BuiltinFn::kSqrt:
+ case wgsl::BuiltinFn::kTan:
+ case wgsl::BuiltinFn::kTanh:
+ case wgsl::BuiltinFn::kTrunc:
+ case wgsl::BuiltinFn::kSign:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2");
} else {
return builder->Call(str.str(), "f2");
}
- case core::BuiltinFn::kLdexp:
+ case wgsl::BuiltinFn::kLdexp:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "i2");
} else {
return builder->Call(str.str(), "f2", "i2");
}
- case core::BuiltinFn::kAtan2:
- case core::BuiltinFn::kDot:
- case core::BuiltinFn::kDistance:
- case core::BuiltinFn::kPow:
- case core::BuiltinFn::kReflect:
- case core::BuiltinFn::kStep:
+ case wgsl::BuiltinFn::kAtan2:
+ case wgsl::BuiltinFn::kDot:
+ case wgsl::BuiltinFn::kDistance:
+ case wgsl::BuiltinFn::kPow:
+ case wgsl::BuiltinFn::kReflect:
+ case wgsl::BuiltinFn::kStep:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2");
} else {
return builder->Call(str.str(), "f2", "f2");
}
- case core::BuiltinFn::kStorageBarrier:
+ case wgsl::BuiltinFn::kStorageBarrier:
return builder->Call(str.str());
- case core::BuiltinFn::kCross:
+ case wgsl::BuiltinFn::kCross:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h3", "h3");
} else {
return builder->Call(str.str(), "f3", "f3");
}
- case core::BuiltinFn::kFma:
- case core::BuiltinFn::kMix:
- case core::BuiltinFn::kFaceForward:
- case core::BuiltinFn::kSmoothstep:
+ case wgsl::BuiltinFn::kFma:
+ case wgsl::BuiltinFn::kMix:
+ case wgsl::BuiltinFn::kFaceForward:
+ case wgsl::BuiltinFn::kSmoothstep:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2", "h2");
} else {
return builder->Call(str.str(), "f2", "f2", "f2");
}
- case core::BuiltinFn::kAll:
- case core::BuiltinFn::kAny:
+ case wgsl::BuiltinFn::kAll:
+ case wgsl::BuiltinFn::kAny:
return builder->Call(str.str(), "b2");
- case core::BuiltinFn::kAbs:
+ case wgsl::BuiltinFn::kAbs:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2");
} else if (type == CallParamType::kF16) {
@@ -146,17 +146,17 @@
} else {
return builder->Call(str.str(), "u2");
}
- case core::BuiltinFn::kCountLeadingZeros:
- case core::BuiltinFn::kCountOneBits:
- case core::BuiltinFn::kCountTrailingZeros:
- case core::BuiltinFn::kReverseBits:
+ case wgsl::BuiltinFn::kCountLeadingZeros:
+ case wgsl::BuiltinFn::kCountOneBits:
+ case wgsl::BuiltinFn::kCountTrailingZeros:
+ case wgsl::BuiltinFn::kReverseBits:
return builder->Call(str.str(), "u2");
- case core::BuiltinFn::kExtractBits:
+ case wgsl::BuiltinFn::kExtractBits:
return builder->Call(str.str(), "u2", "u1", "u1");
- case core::BuiltinFn::kInsertBits:
+ case wgsl::BuiltinFn::kInsertBits:
return builder->Call(str.str(), "u2", "u2", "u1", "u1");
- case core::BuiltinFn::kMax:
- case core::BuiltinFn::kMin:
+ case wgsl::BuiltinFn::kMax:
+ case wgsl::BuiltinFn::kMin:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2", "f2");
} else if (type == CallParamType::kF16) {
@@ -164,7 +164,7 @@
} else {
return builder->Call(str.str(), "u2", "u2");
}
- case core::BuiltinFn::kClamp:
+ case wgsl::BuiltinFn::kClamp:
if (type == CallParamType::kF32) {
return builder->Call(str.str(), "f2", "f2", "f2");
} else if (type == CallParamType::kF16) {
@@ -172,32 +172,32 @@
} else {
return builder->Call(str.str(), "u2", "u2", "u2");
}
- case core::BuiltinFn::kSelect:
+ case wgsl::BuiltinFn::kSelect:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "h2", "h2", "b2");
} else {
return builder->Call(str.str(), "f2", "f2", "b2");
}
- case core::BuiltinFn::kDeterminant:
+ case wgsl::BuiltinFn::kDeterminant:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "hm2x2");
} else {
return builder->Call(str.str(), "m2x2");
}
- case core::BuiltinFn::kPack2X16Snorm:
- case core::BuiltinFn::kPack2X16Unorm:
+ case wgsl::BuiltinFn::kPack2X16Snorm:
+ case wgsl::BuiltinFn::kPack2X16Unorm:
return builder->Call(str.str(), "f2");
- case core::BuiltinFn::kPack4X8Snorm:
- case core::BuiltinFn::kPack4X8Unorm:
+ case wgsl::BuiltinFn::kPack4X8Snorm:
+ case wgsl::BuiltinFn::kPack4X8Unorm:
return builder->Call(str.str(), "f4");
- case core::BuiltinFn::kUnpack4X8Snorm:
- case core::BuiltinFn::kUnpack4X8Unorm:
- case core::BuiltinFn::kUnpack2X16Snorm:
- case core::BuiltinFn::kUnpack2X16Unorm:
+ case wgsl::BuiltinFn::kUnpack4X8Snorm:
+ case wgsl::BuiltinFn::kUnpack4X8Unorm:
+ case wgsl::BuiltinFn::kUnpack2X16Snorm:
+ case wgsl::BuiltinFn::kUnpack2X16Unorm:
return builder->Call(str.str(), "u1");
- case core::BuiltinFn::kWorkgroupBarrier:
+ case wgsl::BuiltinFn::kWorkgroupBarrier:
return builder->Call(str.str());
- case core::BuiltinFn::kTranspose:
+ case wgsl::BuiltinFn::kTranspose:
if (type == CallParamType::kF16) {
return builder->Call(str.str(), "hm3x2");
} else {
@@ -253,124 +253,124 @@
MslBuiltinTest,
testing::Values(
/* Logical built-in */
- BuiltinData{core::BuiltinFn::kAll, CallParamType::kBool, "all"},
- BuiltinData{core::BuiltinFn::kAny, CallParamType::kBool, "any"},
- BuiltinData{core::BuiltinFn::kSelect, CallParamType::kF32, "select"},
+ BuiltinData{wgsl::BuiltinFn::kAll, CallParamType::kBool, "all"},
+ BuiltinData{wgsl::BuiltinFn::kAny, CallParamType::kBool, "any"},
+ BuiltinData{wgsl::BuiltinFn::kSelect, CallParamType::kF32, "select"},
/* Float built-in */
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kF32, "fabs"},
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kF16, "fabs"},
- BuiltinData{core::BuiltinFn::kAcos, CallParamType::kF32, "acos"},
- BuiltinData{core::BuiltinFn::kAcos, CallParamType::kF16, "acos"},
- BuiltinData{core::BuiltinFn::kAsin, CallParamType::kF32, "asin"},
- BuiltinData{core::BuiltinFn::kAsin, CallParamType::kF16, "asin"},
- BuiltinData{core::BuiltinFn::kAtan, CallParamType::kF32, "atan"},
- BuiltinData{core::BuiltinFn::kAtan, CallParamType::kF16, "atan"},
- BuiltinData{core::BuiltinFn::kAtan2, CallParamType::kF32, "atan2"},
- BuiltinData{core::BuiltinFn::kAtan2, CallParamType::kF16, "atan2"},
- BuiltinData{core::BuiltinFn::kCeil, CallParamType::kF32, "ceil"},
- BuiltinData{core::BuiltinFn::kCeil, CallParamType::kF16, "ceil"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kF32, "clamp"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kF16, "clamp"},
- BuiltinData{core::BuiltinFn::kCos, CallParamType::kF32, "cos"},
- BuiltinData{core::BuiltinFn::kCos, CallParamType::kF16, "cos"},
- BuiltinData{core::BuiltinFn::kCosh, CallParamType::kF32, "cosh"},
- BuiltinData{core::BuiltinFn::kCosh, CallParamType::kF16, "cosh"},
- BuiltinData{core::BuiltinFn::kCross, CallParamType::kF32, "cross"},
- BuiltinData{core::BuiltinFn::kCross, CallParamType::kF16, "cross"},
- BuiltinData{core::BuiltinFn::kDistance, CallParamType::kF32, "distance"},
- BuiltinData{core::BuiltinFn::kDistance, CallParamType::kF16, "distance"},
- BuiltinData{core::BuiltinFn::kExp, CallParamType::kF32, "exp"},
- BuiltinData{core::BuiltinFn::kExp, CallParamType::kF16, "exp"},
- BuiltinData{core::BuiltinFn::kExp2, CallParamType::kF32, "exp2"},
- BuiltinData{core::BuiltinFn::kExp2, CallParamType::kF16, "exp2"},
- BuiltinData{core::BuiltinFn::kFaceForward, CallParamType::kF32, "faceforward"},
- BuiltinData{core::BuiltinFn::kFaceForward, CallParamType::kF16, "faceforward"},
- BuiltinData{core::BuiltinFn::kFloor, CallParamType::kF32, "floor"},
- BuiltinData{core::BuiltinFn::kFloor, CallParamType::kF16, "floor"},
- BuiltinData{core::BuiltinFn::kFma, CallParamType::kF32, "fma"},
- BuiltinData{core::BuiltinFn::kFma, CallParamType::kF16, "fma"},
- BuiltinData{core::BuiltinFn::kFract, CallParamType::kF32, "fract"},
- BuiltinData{core::BuiltinFn::kFract, CallParamType::kF16, "fract"},
- BuiltinData{core::BuiltinFn::kInverseSqrt, CallParamType::kF32, "rsqrt"},
- BuiltinData{core::BuiltinFn::kInverseSqrt, CallParamType::kF16, "rsqrt"},
- BuiltinData{core::BuiltinFn::kLdexp, CallParamType::kF32, "ldexp"},
- BuiltinData{core::BuiltinFn::kLdexp, CallParamType::kF16, "ldexp"},
- BuiltinData{core::BuiltinFn::kLength, CallParamType::kF32, "length"},
- BuiltinData{core::BuiltinFn::kLength, CallParamType::kF16, "length"},
- BuiltinData{core::BuiltinFn::kLog, CallParamType::kF32, "log"},
- BuiltinData{core::BuiltinFn::kLog, CallParamType::kF16, "log"},
- BuiltinData{core::BuiltinFn::kLog2, CallParamType::kF32, "log2"},
- BuiltinData{core::BuiltinFn::kLog2, CallParamType::kF16, "log2"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kF32, "fmax"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kF16, "fmax"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kF32, "fmin"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kF16, "fmin"},
- BuiltinData{core::BuiltinFn::kNormalize, CallParamType::kF32, "normalize"},
- BuiltinData{core::BuiltinFn::kNormalize, CallParamType::kF16, "normalize"},
- BuiltinData{core::BuiltinFn::kPow, CallParamType::kF32, "pow"},
- BuiltinData{core::BuiltinFn::kPow, CallParamType::kF16, "pow"},
- BuiltinData{core::BuiltinFn::kReflect, CallParamType::kF32, "reflect"},
- BuiltinData{core::BuiltinFn::kReflect, CallParamType::kF16, "reflect"},
- BuiltinData{core::BuiltinFn::kSign, CallParamType::kF32, "sign"},
- BuiltinData{core::BuiltinFn::kSign, CallParamType::kF16, "sign"},
- BuiltinData{core::BuiltinFn::kSin, CallParamType::kF32, "sin"},
- BuiltinData{core::BuiltinFn::kSin, CallParamType::kF16, "sin"},
- BuiltinData{core::BuiltinFn::kSinh, CallParamType::kF32, "sinh"},
- BuiltinData{core::BuiltinFn::kSinh, CallParamType::kF16, "sinh"},
- BuiltinData{core::BuiltinFn::kSmoothstep, CallParamType::kF32, "smoothstep"},
- BuiltinData{core::BuiltinFn::kSmoothstep, CallParamType::kF16, "smoothstep"},
- BuiltinData{core::BuiltinFn::kSqrt, CallParamType::kF32, "sqrt"},
- BuiltinData{core::BuiltinFn::kSqrt, CallParamType::kF16, "sqrt"},
- BuiltinData{core::BuiltinFn::kStep, CallParamType::kF32, "step"},
- BuiltinData{core::BuiltinFn::kStep, CallParamType::kF16, "step"},
- BuiltinData{core::BuiltinFn::kTan, CallParamType::kF32, "tan"},
- BuiltinData{core::BuiltinFn::kTan, CallParamType::kF16, "tan"},
- BuiltinData{core::BuiltinFn::kTanh, CallParamType::kF32, "tanh"},
- BuiltinData{core::BuiltinFn::kTanh, CallParamType::kF16, "tanh"},
- BuiltinData{core::BuiltinFn::kTrunc, CallParamType::kF32, "trunc"},
- BuiltinData{core::BuiltinFn::kTrunc, CallParamType::kF16, "trunc"},
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kF32, "fabs"},
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kF16, "fabs"},
+ BuiltinData{wgsl::BuiltinFn::kAcos, CallParamType::kF32, "acos"},
+ BuiltinData{wgsl::BuiltinFn::kAcos, CallParamType::kF16, "acos"},
+ BuiltinData{wgsl::BuiltinFn::kAsin, CallParamType::kF32, "asin"},
+ BuiltinData{wgsl::BuiltinFn::kAsin, CallParamType::kF16, "asin"},
+ BuiltinData{wgsl::BuiltinFn::kAtan, CallParamType::kF32, "atan"},
+ BuiltinData{wgsl::BuiltinFn::kAtan, CallParamType::kF16, "atan"},
+ BuiltinData{wgsl::BuiltinFn::kAtan2, CallParamType::kF32, "atan2"},
+ BuiltinData{wgsl::BuiltinFn::kAtan2, CallParamType::kF16, "atan2"},
+ BuiltinData{wgsl::BuiltinFn::kCeil, CallParamType::kF32, "ceil"},
+ BuiltinData{wgsl::BuiltinFn::kCeil, CallParamType::kF16, "ceil"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kF32, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kF16, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kCos, CallParamType::kF32, "cos"},
+ BuiltinData{wgsl::BuiltinFn::kCos, CallParamType::kF16, "cos"},
+ BuiltinData{wgsl::BuiltinFn::kCosh, CallParamType::kF32, "cosh"},
+ BuiltinData{wgsl::BuiltinFn::kCosh, CallParamType::kF16, "cosh"},
+ BuiltinData{wgsl::BuiltinFn::kCross, CallParamType::kF32, "cross"},
+ BuiltinData{wgsl::BuiltinFn::kCross, CallParamType::kF16, "cross"},
+ BuiltinData{wgsl::BuiltinFn::kDistance, CallParamType::kF32, "distance"},
+ BuiltinData{wgsl::BuiltinFn::kDistance, CallParamType::kF16, "distance"},
+ BuiltinData{wgsl::BuiltinFn::kExp, CallParamType::kF32, "exp"},
+ BuiltinData{wgsl::BuiltinFn::kExp, CallParamType::kF16, "exp"},
+ BuiltinData{wgsl::BuiltinFn::kExp2, CallParamType::kF32, "exp2"},
+ BuiltinData{wgsl::BuiltinFn::kExp2, CallParamType::kF16, "exp2"},
+ BuiltinData{wgsl::BuiltinFn::kFaceForward, CallParamType::kF32, "faceforward"},
+ BuiltinData{wgsl::BuiltinFn::kFaceForward, CallParamType::kF16, "faceforward"},
+ BuiltinData{wgsl::BuiltinFn::kFloor, CallParamType::kF32, "floor"},
+ BuiltinData{wgsl::BuiltinFn::kFloor, CallParamType::kF16, "floor"},
+ BuiltinData{wgsl::BuiltinFn::kFma, CallParamType::kF32, "fma"},
+ BuiltinData{wgsl::BuiltinFn::kFma, CallParamType::kF16, "fma"},
+ BuiltinData{wgsl::BuiltinFn::kFract, CallParamType::kF32, "fract"},
+ BuiltinData{wgsl::BuiltinFn::kFract, CallParamType::kF16, "fract"},
+ BuiltinData{wgsl::BuiltinFn::kInverseSqrt, CallParamType::kF32, "rsqrt"},
+ BuiltinData{wgsl::BuiltinFn::kInverseSqrt, CallParamType::kF16, "rsqrt"},
+ BuiltinData{wgsl::BuiltinFn::kLdexp, CallParamType::kF32, "ldexp"},
+ BuiltinData{wgsl::BuiltinFn::kLdexp, CallParamType::kF16, "ldexp"},
+ BuiltinData{wgsl::BuiltinFn::kLength, CallParamType::kF32, "length"},
+ BuiltinData{wgsl::BuiltinFn::kLength, CallParamType::kF16, "length"},
+ BuiltinData{wgsl::BuiltinFn::kLog, CallParamType::kF32, "log"},
+ BuiltinData{wgsl::BuiltinFn::kLog, CallParamType::kF16, "log"},
+ BuiltinData{wgsl::BuiltinFn::kLog2, CallParamType::kF32, "log2"},
+ BuiltinData{wgsl::BuiltinFn::kLog2, CallParamType::kF16, "log2"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kF32, "fmax"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kF16, "fmax"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kF32, "fmin"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kF16, "fmin"},
+ BuiltinData{wgsl::BuiltinFn::kNormalize, CallParamType::kF32, "normalize"},
+ BuiltinData{wgsl::BuiltinFn::kNormalize, CallParamType::kF16, "normalize"},
+ BuiltinData{wgsl::BuiltinFn::kPow, CallParamType::kF32, "pow"},
+ BuiltinData{wgsl::BuiltinFn::kPow, CallParamType::kF16, "pow"},
+ BuiltinData{wgsl::BuiltinFn::kReflect, CallParamType::kF32, "reflect"},
+ BuiltinData{wgsl::BuiltinFn::kReflect, CallParamType::kF16, "reflect"},
+ BuiltinData{wgsl::BuiltinFn::kSign, CallParamType::kF32, "sign"},
+ BuiltinData{wgsl::BuiltinFn::kSign, CallParamType::kF16, "sign"},
+ BuiltinData{wgsl::BuiltinFn::kSin, CallParamType::kF32, "sin"},
+ BuiltinData{wgsl::BuiltinFn::kSin, CallParamType::kF16, "sin"},
+ BuiltinData{wgsl::BuiltinFn::kSinh, CallParamType::kF32, "sinh"},
+ BuiltinData{wgsl::BuiltinFn::kSinh, CallParamType::kF16, "sinh"},
+ BuiltinData{wgsl::BuiltinFn::kSmoothstep, CallParamType::kF32, "smoothstep"},
+ BuiltinData{wgsl::BuiltinFn::kSmoothstep, CallParamType::kF16, "smoothstep"},
+ BuiltinData{wgsl::BuiltinFn::kSqrt, CallParamType::kF32, "sqrt"},
+ BuiltinData{wgsl::BuiltinFn::kSqrt, CallParamType::kF16, "sqrt"},
+ BuiltinData{wgsl::BuiltinFn::kStep, CallParamType::kF32, "step"},
+ BuiltinData{wgsl::BuiltinFn::kStep, CallParamType::kF16, "step"},
+ BuiltinData{wgsl::BuiltinFn::kTan, CallParamType::kF32, "tan"},
+ BuiltinData{wgsl::BuiltinFn::kTan, CallParamType::kF16, "tan"},
+ BuiltinData{wgsl::BuiltinFn::kTanh, CallParamType::kF32, "tanh"},
+ BuiltinData{wgsl::BuiltinFn::kTanh, CallParamType::kF16, "tanh"},
+ BuiltinData{wgsl::BuiltinFn::kTrunc, CallParamType::kF32, "trunc"},
+ BuiltinData{wgsl::BuiltinFn::kTrunc, CallParamType::kF16, "trunc"},
/* Integer built-in */
- BuiltinData{core::BuiltinFn::kAbs, CallParamType::kU32, "abs"},
- BuiltinData{core::BuiltinFn::kClamp, CallParamType::kU32, "clamp"},
- BuiltinData{core::BuiltinFn::kCountLeadingZeros, CallParamType::kU32, "clz"},
- BuiltinData{core::BuiltinFn::kCountOneBits, CallParamType::kU32, "popcount"},
- BuiltinData{core::BuiltinFn::kCountTrailingZeros, CallParamType::kU32, "ctz"},
- BuiltinData{core::BuiltinFn::kExtractBits, CallParamType::kU32, "extract_bits"},
- BuiltinData{core::BuiltinFn::kInsertBits, CallParamType::kU32, "insert_bits"},
- BuiltinData{core::BuiltinFn::kMax, CallParamType::kU32, "max"},
- BuiltinData{core::BuiltinFn::kMin, CallParamType::kU32, "min"},
- BuiltinData{core::BuiltinFn::kReverseBits, CallParamType::kU32, "reverse_bits"},
- BuiltinData{core::BuiltinFn::kRound, CallParamType::kU32, "rint"},
+ BuiltinData{wgsl::BuiltinFn::kAbs, CallParamType::kU32, "abs"},
+ BuiltinData{wgsl::BuiltinFn::kClamp, CallParamType::kU32, "clamp"},
+ BuiltinData{wgsl::BuiltinFn::kCountLeadingZeros, CallParamType::kU32, "clz"},
+ BuiltinData{wgsl::BuiltinFn::kCountOneBits, CallParamType::kU32, "popcount"},
+ BuiltinData{wgsl::BuiltinFn::kCountTrailingZeros, CallParamType::kU32, "ctz"},
+ BuiltinData{wgsl::BuiltinFn::kExtractBits, CallParamType::kU32, "extract_bits"},
+ BuiltinData{wgsl::BuiltinFn::kInsertBits, CallParamType::kU32, "insert_bits"},
+ BuiltinData{wgsl::BuiltinFn::kMax, CallParamType::kU32, "max"},
+ BuiltinData{wgsl::BuiltinFn::kMin, CallParamType::kU32, "min"},
+ BuiltinData{wgsl::BuiltinFn::kReverseBits, CallParamType::kU32, "reverse_bits"},
+ BuiltinData{wgsl::BuiltinFn::kRound, CallParamType::kU32, "rint"},
/* Matrix built-in */
- BuiltinData{core::BuiltinFn::kDeterminant, CallParamType::kF32, "determinant"},
- BuiltinData{core::BuiltinFn::kTranspose, CallParamType::kF32, "transpose"},
+ BuiltinData{wgsl::BuiltinFn::kDeterminant, CallParamType::kF32, "determinant"},
+ BuiltinData{wgsl::BuiltinFn::kTranspose, CallParamType::kF32, "transpose"},
/* Vector built-in */
- BuiltinData{core::BuiltinFn::kDot, CallParamType::kF32, "dot"},
+ BuiltinData{wgsl::BuiltinFn::kDot, CallParamType::kF32, "dot"},
/* Derivate built-in */
- BuiltinData{core::BuiltinFn::kDpdx, CallParamType::kF32, "dfdx"},
- BuiltinData{core::BuiltinFn::kDpdxCoarse, CallParamType::kF32, "dfdx"},
- BuiltinData{core::BuiltinFn::kDpdxFine, CallParamType::kF32, "dfdx"},
- BuiltinData{core::BuiltinFn::kDpdy, CallParamType::kF32, "dfdy"},
- BuiltinData{core::BuiltinFn::kDpdyCoarse, CallParamType::kF32, "dfdy"},
- BuiltinData{core::BuiltinFn::kDpdyFine, CallParamType::kF32, "dfdy"},
- BuiltinData{core::BuiltinFn::kFwidth, CallParamType::kF32, "fwidth"},
- BuiltinData{core::BuiltinFn::kFwidthCoarse, CallParamType::kF32, "fwidth"},
- BuiltinData{core::BuiltinFn::kFwidthFine, CallParamType::kF32, "fwidth"},
+ BuiltinData{wgsl::BuiltinFn::kDpdx, CallParamType::kF32, "dfdx"},
+ BuiltinData{wgsl::BuiltinFn::kDpdxCoarse, CallParamType::kF32, "dfdx"},
+ BuiltinData{wgsl::BuiltinFn::kDpdxFine, CallParamType::kF32, "dfdx"},
+ BuiltinData{wgsl::BuiltinFn::kDpdy, CallParamType::kF32, "dfdy"},
+ BuiltinData{wgsl::BuiltinFn::kDpdyCoarse, CallParamType::kF32, "dfdy"},
+ BuiltinData{wgsl::BuiltinFn::kDpdyFine, CallParamType::kF32, "dfdy"},
+ BuiltinData{wgsl::BuiltinFn::kFwidth, CallParamType::kF32, "fwidth"},
+ BuiltinData{wgsl::BuiltinFn::kFwidthCoarse, CallParamType::kF32, "fwidth"},
+ BuiltinData{wgsl::BuiltinFn::kFwidthFine, CallParamType::kF32, "fwidth"},
/* Data packing builtin */
- BuiltinData{core::BuiltinFn::kPack4X8Snorm, CallParamType::kF32, "pack_float_to_snorm4x8"},
- BuiltinData{core::BuiltinFn::kPack4X8Unorm, CallParamType::kF32, "pack_float_to_unorm4x8"},
- BuiltinData{core::BuiltinFn::kPack2X16Snorm, CallParamType::kF32,
+ BuiltinData{wgsl::BuiltinFn::kPack4X8Snorm, CallParamType::kF32, "pack_float_to_snorm4x8"},
+ BuiltinData{wgsl::BuiltinFn::kPack4X8Unorm, CallParamType::kF32, "pack_float_to_unorm4x8"},
+ BuiltinData{wgsl::BuiltinFn::kPack2X16Snorm, CallParamType::kF32,
"pack_float_to_snorm2x16"},
- BuiltinData{core::BuiltinFn::kPack2X16Unorm, CallParamType::kF32,
+ BuiltinData{wgsl::BuiltinFn::kPack2X16Unorm, CallParamType::kF32,
"pack_float_to_unorm2x16"},
/* Data unpacking builtin */
- BuiltinData{core::BuiltinFn::kUnpack4X8Snorm, CallParamType::kU32,
+ BuiltinData{wgsl::BuiltinFn::kUnpack4X8Snorm, CallParamType::kU32,
"unpack_snorm4x8_to_float"},
- BuiltinData{core::BuiltinFn::kUnpack4X8Unorm, CallParamType::kU32,
+ BuiltinData{wgsl::BuiltinFn::kUnpack4X8Unorm, CallParamType::kU32,
"unpack_unorm4x8_to_float"},
- BuiltinData{core::BuiltinFn::kUnpack2X16Snorm, CallParamType::kU32,
+ BuiltinData{wgsl::BuiltinFn::kUnpack2X16Snorm, CallParamType::kU32,
"unpack_snorm2x16_to_float"},
- BuiltinData{core::BuiltinFn::kUnpack2X16Unorm, CallParamType::kU32,
+ BuiltinData{wgsl::BuiltinFn::kUnpack2X16Unorm, CallParamType::kU32,
"unpack_unorm2x16_to_float"}));
TEST_F(MslASTPrinterTest, Builtin_Call) {
diff --git a/src/tint/lang/msl/writer/ast_raise/BUILD.bazel b/src/tint/lang/msl/writer/ast_raise/BUILD.bazel
index e2b25c8..5a68d70 100644
--- a/src/tint/lang/msl/writer/ast_raise/BUILD.bazel
+++ b/src/tint/lang/msl/writer/ast_raise/BUILD.bazel
@@ -78,6 +78,7 @@
"//src/tint/api/common",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/msl/writer/ast_raise/BUILD.cmake b/src/tint/lang/msl/writer/ast_raise/BUILD.cmake
index 54b8337..386768b 100644
--- a/src/tint/lang/msl/writer/ast_raise/BUILD.cmake
+++ b/src/tint/lang/msl/writer/ast_raise/BUILD.cmake
@@ -82,6 +82,7 @@
tint_api_common
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
diff --git a/src/tint/lang/msl/writer/ast_raise/BUILD.gn b/src/tint/lang/msl/writer/ast_raise/BUILD.gn
index bb16eaa..cf231b6 100644
--- a/src/tint/lang/msl/writer/ast_raise/BUILD.gn
+++ b/src/tint/lang/msl/writer/ast_raise/BUILD.gn
@@ -82,6 +82,7 @@
"${tint_src_dir}/api/common",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/msl/writer/ast_raise/subgroup_ballot.cc b/src/tint/lang/msl/writer/ast_raise/subgroup_ballot.cc
index f977803..32f8b51 100644
--- a/src/tint/lang/msl/writer/ast_raise/subgroup_ballot.cc
+++ b/src/tint/lang/msl/writer/ast_raise/subgroup_ballot.cc
@@ -66,7 +66,7 @@
// If this is a call to a `subgroupBallot()` builtin, replace it with a call to the
// helper function and make a note of the function that we are in.
auto* builtin = call->Target()->As<sem::BuiltinFn>();
- if (builtin && builtin->Fn() == core::BuiltinFn::kSubgroupBallot) {
+ if (builtin && builtin->Fn() == wgsl::BuiltinFn::kSubgroupBallot) {
ctx.Replace(call->Declaration(), b.Call(GetHelper()));
ballot_callers.Add(call->Stmt()->Function());
made_changes = true;
diff --git a/src/tint/lang/spirv/reader/ast_lower/BUILD.bazel b/src/tint/lang/spirv/reader/ast_lower/BUILD.bazel
index 0a5204d1..37651a6 100644
--- a/src/tint/lang/spirv/reader/ast_lower/BUILD.bazel
+++ b/src/tint/lang/spirv/reader/ast_lower/BUILD.bazel
@@ -78,6 +78,7 @@
"//src/tint/api/common",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/spirv/reader/ast_lower/BUILD.cmake b/src/tint/lang/spirv/reader/ast_lower/BUILD.cmake
index 034a369..f7a4893 100644
--- a/src/tint/lang/spirv/reader/ast_lower/BUILD.cmake
+++ b/src/tint/lang/spirv/reader/ast_lower/BUILD.cmake
@@ -82,6 +82,7 @@
tint_api_common
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
diff --git a/src/tint/lang/spirv/reader/ast_lower/BUILD.gn b/src/tint/lang/spirv/reader/ast_lower/BUILD.gn
index fee420d..12924c2 100644
--- a/src/tint/lang/spirv/reader/ast_lower/BUILD.gn
+++ b/src/tint/lang/spirv/reader/ast_lower/BUILD.gn
@@ -82,6 +82,7 @@
"${tint_src_dir}/api/common",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/spirv/reader/ast_lower/atomics.cc b/src/tint/lang/spirv/reader/ast_lower/atomics.cc
index 17ad8a2..efab3d3 100644
--- a/src/tint/lang/spirv/reader/ast_lower/atomics.cc
+++ b/src/tint/lang/spirv/reader/ast_lower/atomics.cc
@@ -87,7 +87,7 @@
out_args[0] = b.AddressOf(out_args[0]);
// Replace all callsites of this stub to a call to the real builtin
- if (stub->builtin == core::BuiltinFn::kAtomicCompareExchangeWeak) {
+ if (stub->builtin == wgsl::BuiltinFn::kAtomicCompareExchangeWeak) {
// atomicCompareExchangeWeak returns a struct, so insert a call to it above
// the current statement, and replace the current call with the struct's
// `old_value` member.
@@ -95,14 +95,14 @@
auto old_value = b.Symbols().New("old_value");
auto old_value_decl = b.Decl(b.Let(
old_value,
- b.MemberAccessor(b.Call(core::str(stub->builtin), std::move(out_args)),
+ b.MemberAccessor(b.Call(wgsl::str(stub->builtin), std::move(out_args)),
"old_value")));
ctx.InsertBefore(block->statements, call->Stmt()->Declaration(),
old_value_decl);
ctx.Replace(call->Declaration(), b.Expr(old_value));
} else {
ctx.Replace(call->Declaration(),
- b.Call(core::str(stub->builtin), std::move(out_args)));
+ b.Call(wgsl::str(stub->builtin), std::move(out_args)));
}
// Keep track of this expression. We'll need to modify the root identifier /
@@ -255,7 +255,7 @@
if (is_ref_to_atomic_var(load->Reference())) {
ctx.Replace(load->Reference()->Declaration(), [=] {
auto* expr = ctx.CloneWithoutTransform(load->Reference()->Declaration());
- return b.Call(core::str(core::BuiltinFn::kAtomicLoad), b.AddressOf(expr));
+ return b.Call(wgsl::BuiltinFn::kAtomicLoad, b.AddressOf(expr));
});
}
} else if (auto* assign = node->As<ast::AssignmentStatement>()) {
@@ -264,8 +264,7 @@
ctx.Replace(assign, [=] {
auto* lhs = ctx.CloneWithoutTransform(assign->lhs);
auto* rhs = ctx.CloneWithoutTransform(assign->rhs);
- auto* call =
- b.Call(core::str(core::BuiltinFn::kAtomicStore), b.AddressOf(lhs), rhs);
+ auto* call = b.Call(wgsl::BuiltinFn::kAtomicStore, b.AddressOf(lhs), rhs);
return b.CallStmt(call);
});
}
@@ -277,11 +276,11 @@
Atomics::Atomics() = default;
Atomics::~Atomics() = default;
-Atomics::Stub::Stub(GenerationID pid, ast::NodeID nid, core::BuiltinFn b)
+Atomics::Stub::Stub(GenerationID pid, ast::NodeID nid, wgsl::BuiltinFn b)
: Base(pid, nid, tint::Empty), builtin(b) {}
Atomics::Stub::~Stub() = default;
std::string Atomics::Stub::InternalName() const {
- return "@internal(spirv-atomic " + std::string(core::str(builtin)) + ")";
+ return "@internal(spirv-atomic " + std::string(wgsl::str(builtin)) + ")";
}
const Atomics::Stub* Atomics::Stub::Clone(ast::CloneContext& ctx) const {
diff --git a/src/tint/lang/spirv/reader/ast_lower/atomics.h b/src/tint/lang/spirv/reader/ast_lower/atomics.h
index c74d16d..efc510b 100644
--- a/src/tint/lang/spirv/reader/ast_lower/atomics.h
+++ b/src/tint/lang/spirv/reader/ast_lower/atomics.h
@@ -17,9 +17,9 @@
#include <string>
-#include "src/tint/lang/core/builtin_fn.h"
#include "src/tint/lang/wgsl/ast/internal_attribute.h"
#include "src/tint/lang/wgsl/ast/transform/transform.h"
+#include "src/tint/lang/wgsl/builtin_fn.h"
namespace tint::spirv::reader {
@@ -41,7 +41,7 @@
/// @param pid the identifier of the program that owns this node
/// @param nid the unique node identifier
/// @param builtin the atomic builtin this stub represents
- Stub(GenerationID pid, ast::NodeID nid, core::BuiltinFn builtin);
+ Stub(GenerationID pid, ast::NodeID nid, wgsl::BuiltinFn builtin);
/// Destructor
~Stub() override;
@@ -55,7 +55,7 @@
const Stub* Clone(ast::CloneContext& ctx) const override;
/// The type of the intrinsic
- const core::BuiltinFn builtin;
+ const wgsl::BuiltinFn builtin;
};
/// @copydoc ast::transform::Transform::Apply
diff --git a/src/tint/lang/spirv/reader/ast_lower/atomics_test.cc b/src/tint/lang/spirv/reader/ast_lower/atomics_test.cc
index 6f67a21..bfe1414 100644
--- a/src/tint/lang/spirv/reader/ast_lower/atomics_test.cc
+++ b/src/tint/lang/spirv/reader/ast_lower/atomics_test.cc
@@ -37,14 +37,14 @@
auto& b = parser.builder();
- core::BuiltinFn two_params[] = {
- core::BuiltinFn::kAtomicExchange, core::BuiltinFn::kAtomicAdd,
- core::BuiltinFn::kAtomicSub, core::BuiltinFn::kAtomicMin,
- core::BuiltinFn::kAtomicMax, core::BuiltinFn::kAtomicAnd,
- core::BuiltinFn::kAtomicOr, core::BuiltinFn::kAtomicXor,
+ wgsl::BuiltinFn two_params[] = {
+ wgsl::BuiltinFn::kAtomicExchange, wgsl::BuiltinFn::kAtomicAdd,
+ wgsl::BuiltinFn::kAtomicSub, wgsl::BuiltinFn::kAtomicMin,
+ wgsl::BuiltinFn::kAtomicMax, wgsl::BuiltinFn::kAtomicAnd,
+ wgsl::BuiltinFn::kAtomicOr, wgsl::BuiltinFn::kAtomicXor,
};
for (auto& a : two_params) {
- b.Func(std::string{"stub_"} + core::str(a) + "_u32",
+ b.Func(std::string{"stub_"} + wgsl::str(a) + "_u32",
tint::Vector{
b.Param("p0", b.ty.u32()),
b.Param("p1", b.ty.u32()),
@@ -56,7 +56,7 @@
tint::Vector{
b.ASTNodes().Create<Atomics::Stub>(b.ID(), b.AllocateNodeID(), a),
});
- b.Func(std::string{"stub_"} + core::str(a) + "_i32",
+ b.Func(std::string{"stub_"} + wgsl::str(a) + "_i32",
tint::Vector{
b.Param("p0", b.ty.i32()),
b.Param("p1", b.ty.i32()),
@@ -80,7 +80,7 @@
},
tint::Vector{
b.ASTNodes().Create<Atomics::Stub>(b.ID(), b.AllocateNodeID(),
- core::BuiltinFn::kAtomicLoad),
+ wgsl::BuiltinFn::kAtomicLoad),
});
b.Func("stub_atomicLoad_i32",
tint::Vector{
@@ -92,7 +92,7 @@
},
tint::Vector{
b.ASTNodes().Create<Atomics::Stub>(b.ID(), b.AllocateNodeID(),
- core::BuiltinFn::kAtomicLoad),
+ wgsl::BuiltinFn::kAtomicLoad),
});
b.Func("stub_atomicStore_u32",
@@ -103,7 +103,7 @@
b.ty.void_(), tint::Empty,
tint::Vector{
b.ASTNodes().Create<Atomics::Stub>(b.ID(), b.AllocateNodeID(),
- core::BuiltinFn::kAtomicStore),
+ wgsl::BuiltinFn::kAtomicStore),
});
b.Func("stub_atomicStore_i32",
tint::Vector{
@@ -113,7 +113,7 @@
b.ty.void_(), tint::Empty,
tint::Vector{
b.ASTNodes().Create<Atomics::Stub>(b.ID(), b.AllocateNodeID(),
- core::BuiltinFn::kAtomicStore),
+ wgsl::BuiltinFn::kAtomicStore),
});
b.Func("stub_atomic_compare_exchange_weak_u32",
@@ -128,7 +128,7 @@
},
tint::Vector{
b.ASTNodes().Create<Atomics::Stub>(b.ID(), b.AllocateNodeID(),
- core::BuiltinFn::kAtomicCompareExchangeWeak),
+ wgsl::BuiltinFn::kAtomicCompareExchangeWeak),
});
b.Func("stub_atomic_compare_exchange_weak_i32",
tint::Vector{b.Param("p0", b.ty.i32()), b.Param("p1", b.ty.i32()),
@@ -139,7 +139,7 @@
},
tint::Vector{
b.ASTNodes().Create<Atomics::Stub>(b.ID(), b.AllocateNodeID(),
- core::BuiltinFn::kAtomicCompareExchangeWeak),
+ wgsl::BuiltinFn::kAtomicCompareExchangeWeak),
});
// Keep this pointer alive after Transform() returns
diff --git a/src/tint/lang/spirv/reader/ast_parser/barrier_test.cc b/src/tint/lang/spirv/reader/ast_parser/barrier_test.cc
index 502d2ba..76d1d61 100644
--- a/src/tint/lang/spirv/reader/ast_parser/barrier_test.cc
+++ b/src/tint/lang/spirv/reader/ast_parser/barrier_test.cc
@@ -73,7 +73,7 @@
ASSERT_NE(sem_call, nullptr);
auto* builtin = sem_call->Target()->As<sem::BuiltinFn>();
ASSERT_NE(builtin, nullptr);
- EXPECT_EQ(builtin->Fn(), core::BuiltinFn::kWorkgroupBarrier);
+ EXPECT_EQ(builtin->Fn(), wgsl::BuiltinFn::kWorkgroupBarrier);
}
TEST_F(SpirvASTParserTest, StorageBarrier) {
@@ -106,7 +106,7 @@
ASSERT_NE(sem_call, nullptr);
auto* builtin = sem_call->Target()->As<sem::BuiltinFn>();
ASSERT_NE(builtin, nullptr);
- EXPECT_EQ(builtin->Fn(), core::BuiltinFn::kStorageBarrier);
+ EXPECT_EQ(builtin->Fn(), wgsl::BuiltinFn::kStorageBarrier);
}
TEST_F(SpirvASTParserTest, TextureBarrier) {
@@ -139,7 +139,7 @@
ASSERT_NE(sem_call, nullptr);
auto* builtin = sem_call->Target()->As<sem::BuiltinFn>();
ASSERT_NE(builtin, nullptr);
- EXPECT_EQ(builtin->Fn(), core::BuiltinFn::kTextureBarrier);
+ EXPECT_EQ(builtin->Fn(), wgsl::BuiltinFn::kTextureBarrier);
}
TEST_F(SpirvASTParserTest, WorkgroupAndTextureAndStorageBarrier) {
@@ -175,7 +175,7 @@
ASSERT_NE(sem_call, nullptr);
auto* builtin = sem_call->Target()->As<sem::BuiltinFn>();
ASSERT_NE(builtin, nullptr);
- EXPECT_EQ(builtin->Fn(), core::BuiltinFn::kWorkgroupBarrier);
+ EXPECT_EQ(builtin->Fn(), wgsl::BuiltinFn::kWorkgroupBarrier);
}
{
auto* call = helper->body->statements[1]->As<ast::CallStatement>();
@@ -185,7 +185,7 @@
ASSERT_NE(sem_call, nullptr);
auto* builtin = sem_call->Target()->As<sem::BuiltinFn>();
ASSERT_NE(builtin, nullptr);
- EXPECT_EQ(builtin->Fn(), core::BuiltinFn::kStorageBarrier);
+ EXPECT_EQ(builtin->Fn(), wgsl::BuiltinFn::kStorageBarrier);
}
{
auto* call = helper->body->statements[2]->As<ast::CallStatement>();
@@ -195,7 +195,7 @@
ASSERT_NE(sem_call, nullptr);
auto* builtin = sem_call->Target()->As<sem::BuiltinFn>();
ASSERT_NE(builtin, nullptr);
- EXPECT_EQ(builtin->Fn(), core::BuiltinFn::kTextureBarrier);
+ EXPECT_EQ(builtin->Fn(), wgsl::BuiltinFn::kTextureBarrier);
}
}
diff --git a/src/tint/lang/spirv/reader/ast_parser/function.cc b/src/tint/lang/spirv/reader/ast_parser/function.cc
index 311f9b24..0c627bc 100644
--- a/src/tint/lang/spirv/reader/ast_parser/function.cc
+++ b/src/tint/lang/spirv/reader/ast_parser/function.cc
@@ -456,42 +456,42 @@
}
// Returns the WGSL standard library function builtin for the
-// given instruction, or core::BuiltinFn::kNone
-core::BuiltinFn GetBuiltin(spv::Op opcode) {
+// given instruction, or wgsl::BuiltinFn::kNone
+wgsl::BuiltinFn GetBuiltin(spv::Op opcode) {
switch (opcode) {
case spv::Op::OpBitCount:
- return core::BuiltinFn::kCountOneBits;
+ return wgsl::BuiltinFn::kCountOneBits;
case spv::Op::OpBitFieldInsert:
- return core::BuiltinFn::kInsertBits;
+ return wgsl::BuiltinFn::kInsertBits;
case spv::Op::OpBitFieldSExtract:
case spv::Op::OpBitFieldUExtract:
- return core::BuiltinFn::kExtractBits;
+ return wgsl::BuiltinFn::kExtractBits;
case spv::Op::OpBitReverse:
- return core::BuiltinFn::kReverseBits;
+ return wgsl::BuiltinFn::kReverseBits;
case spv::Op::OpDot:
- return core::BuiltinFn::kDot;
+ return wgsl::BuiltinFn::kDot;
case spv::Op::OpDPdx:
- return core::BuiltinFn::kDpdx;
+ return wgsl::BuiltinFn::kDpdx;
case spv::Op::OpDPdy:
- return core::BuiltinFn::kDpdy;
+ return wgsl::BuiltinFn::kDpdy;
case spv::Op::OpFwidth:
- return core::BuiltinFn::kFwidth;
+ return wgsl::BuiltinFn::kFwidth;
case spv::Op::OpDPdxFine:
- return core::BuiltinFn::kDpdxFine;
+ return wgsl::BuiltinFn::kDpdxFine;
case spv::Op::OpDPdyFine:
- return core::BuiltinFn::kDpdyFine;
+ return wgsl::BuiltinFn::kDpdyFine;
case spv::Op::OpFwidthFine:
- return core::BuiltinFn::kFwidthFine;
+ return wgsl::BuiltinFn::kFwidthFine;
case spv::Op::OpDPdxCoarse:
- return core::BuiltinFn::kDpdxCoarse;
+ return wgsl::BuiltinFn::kDpdxCoarse;
case spv::Op::OpDPdyCoarse:
- return core::BuiltinFn::kDpdyCoarse;
+ return wgsl::BuiltinFn::kDpdyCoarse;
case spv::Op::OpFwidthCoarse:
- return core::BuiltinFn::kFwidthCoarse;
+ return wgsl::BuiltinFn::kFwidthCoarse;
default:
break;
}
- return core::BuiltinFn::kNone;
+ return wgsl::BuiltinFn::kNone;
}
// @param opcode a SPIR-V opcode
@@ -3819,11 +3819,11 @@
}
const auto builtin = GetBuiltin(op);
- if (builtin != core::BuiltinFn::kNone) {
+ if (builtin != wgsl::BuiltinFn::kNone) {
switch (builtin) {
- case core::BuiltinFn::kExtractBits:
+ case wgsl::BuiltinFn::kExtractBits:
return MakeExtractBitsCall(inst);
- case core::BuiltinFn::kInsertBits:
+ case wgsl::BuiltinFn::kInsertBits:
return MakeInsertBitsCall(inst);
default:
return MakeBuiltinCall(inst);
@@ -5324,7 +5324,7 @@
TypedExpression FunctionEmitter::MakeBuiltinCall(const spvtools::opt::Instruction& inst) {
const auto builtin = GetBuiltin(opcode(inst));
- auto* name = core::str(builtin);
+ auto* name = wgsl::str(builtin);
auto* ident = create<ast::Identifier>(Source{}, builder_.Symbols().Register(name));
ExpressionList params;
@@ -5348,7 +5348,7 @@
TypedExpression FunctionEmitter::MakeExtractBitsCall(const spvtools::opt::Instruction& inst) {
const auto builtin = GetBuiltin(opcode(inst));
- auto* name = core::str(builtin);
+ auto* name = wgsl::str(builtin);
auto* ident = create<ast::Identifier>(Source{}, builder_.Symbols().Register(name));
auto e = MakeOperand(inst, 0);
auto offset = ToU32(MakeOperand(inst, 1));
@@ -5365,7 +5365,7 @@
TypedExpression FunctionEmitter::MakeInsertBitsCall(const spvtools::opt::Instruction& inst) {
const auto builtin = GetBuiltin(opcode(inst));
- auto* name = core::str(builtin);
+ auto* name = wgsl::str(builtin);
auto* ident = create<ast::Identifier>(Source{}, builder_.Symbols().Register(name));
auto e = MakeOperand(inst, 0);
auto newbits = MakeOperand(inst, 1);
@@ -5852,7 +5852,7 @@
}
bool FunctionEmitter::EmitAtomicOp(const spvtools::opt::Instruction& inst) {
- auto emit_atomic = [&](core::BuiltinFn builtin, std::initializer_list<TypedExpression> args) {
+ auto emit_atomic = [&](wgsl::BuiltinFn builtin, std::initializer_list<TypedExpression> args) {
// Split args into params and expressions
ParameterList params;
params.Reserve(args.size());
@@ -5874,7 +5874,7 @@
// Emit stub, will be removed by transform::SpirvAtomic
auto* stub = builder_.Func(
- Source{}, builder_.Symbols().New(std::string("stub_") + core::str(builtin)),
+ Source{}, builder_.Symbols().New(std::string("stub_") + wgsl::str(builtin)),
std::move(params), ret_type,
/* body */ nullptr,
tint::Vector{
@@ -5911,38 +5911,38 @@
switch (opcode(inst)) {
case spv::Op::OpAtomicLoad:
- return emit_atomic(core::BuiltinFn::kAtomicLoad, {oper(/*ptr*/ 0)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicLoad, {oper(/*ptr*/ 0)});
case spv::Op::OpAtomicStore:
- return emit_atomic(core::BuiltinFn::kAtomicStore, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicStore, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicExchange:
- return emit_atomic(core::BuiltinFn::kAtomicExchange,
+ return emit_atomic(wgsl::BuiltinFn::kAtomicExchange,
{oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicCompareExchange:
case spv::Op::OpAtomicCompareExchangeWeak:
- return emit_atomic(core::BuiltinFn::kAtomicCompareExchangeWeak,
+ return emit_atomic(wgsl::BuiltinFn::kAtomicCompareExchangeWeak,
{oper(/*ptr*/ 0), /*value*/ oper(5), /*comparator*/ oper(4)});
case spv::Op::OpAtomicIIncrement:
- return emit_atomic(core::BuiltinFn::kAtomicAdd, {oper(/*ptr*/ 0), lit(1)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicAdd, {oper(/*ptr*/ 0), lit(1)});
case spv::Op::OpAtomicIDecrement:
- return emit_atomic(core::BuiltinFn::kAtomicSub, {oper(/*ptr*/ 0), lit(1)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicSub, {oper(/*ptr*/ 0), lit(1)});
case spv::Op::OpAtomicIAdd:
- return emit_atomic(core::BuiltinFn::kAtomicAdd, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicAdd, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicISub:
- return emit_atomic(core::BuiltinFn::kAtomicSub, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicSub, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicSMin:
- return emit_atomic(core::BuiltinFn::kAtomicMin, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicMin, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicUMin:
- return emit_atomic(core::BuiltinFn::kAtomicMin, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicMin, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicSMax:
- return emit_atomic(core::BuiltinFn::kAtomicMax, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicMax, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicUMax:
- return emit_atomic(core::BuiltinFn::kAtomicMax, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicMax, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicAnd:
- return emit_atomic(core::BuiltinFn::kAtomicAnd, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicAnd, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicOr:
- return emit_atomic(core::BuiltinFn::kAtomicOr, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicOr, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicXor:
- return emit_atomic(core::BuiltinFn::kAtomicXor, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
+ return emit_atomic(wgsl::BuiltinFn::kAtomicXor, {oper(/*ptr*/ 0), oper(/*value*/ 3)});
case spv::Op::OpAtomicFlagTestAndSet:
case spv::Op::OpAtomicFlagClear:
case spv::Op::OpAtomicFMinEXT:
diff --git a/src/tint/lang/spirv/writer/ast_printer/builder.cc b/src/tint/lang/spirv/writer/ast_printer/builder.cc
index 94c6d60..24fca39 100644
--- a/src/tint/lang/spirv/writer/ast_printer/builder.cc
+++ b/src/tint/lang/spirv/writer/ast_printer/builder.cc
@@ -94,23 +94,23 @@
uint32_t builtin_to_glsl_method(const sem::BuiltinFn* builtin) {
switch (builtin->Fn()) {
- case core::BuiltinFn::kAcos:
+ case wgsl::BuiltinFn::kAcos:
return GLSLstd450Acos;
- case core::BuiltinFn::kAcosh:
+ case wgsl::BuiltinFn::kAcosh:
return GLSLstd450Acosh;
- case core::BuiltinFn::kAsin:
+ case wgsl::BuiltinFn::kAsin:
return GLSLstd450Asin;
- case core::BuiltinFn::kAsinh:
+ case wgsl::BuiltinFn::kAsinh:
return GLSLstd450Asinh;
- case core::BuiltinFn::kAtan:
+ case wgsl::BuiltinFn::kAtan:
return GLSLstd450Atan;
- case core::BuiltinFn::kAtan2:
+ case wgsl::BuiltinFn::kAtan2:
return GLSLstd450Atan2;
- case core::BuiltinFn::kAtanh:
+ case wgsl::BuiltinFn::kAtanh:
return GLSLstd450Atanh;
- case core::BuiltinFn::kCeil:
+ case wgsl::BuiltinFn::kCeil:
return GLSLstd450Ceil;
- case core::BuiltinFn::kClamp:
+ case wgsl::BuiltinFn::kClamp:
if (builtin->ReturnType()->is_float_scalar_or_vector()) {
return GLSLstd450NClamp;
} else if (builtin->ReturnType()->is_unsigned_integer_scalar_or_vector()) {
@@ -118,43 +118,43 @@
} else {
return GLSLstd450SClamp;
}
- case core::BuiltinFn::kCos:
+ case wgsl::BuiltinFn::kCos:
return GLSLstd450Cos;
- case core::BuiltinFn::kCosh:
+ case wgsl::BuiltinFn::kCosh:
return GLSLstd450Cosh;
- case core::BuiltinFn::kCross:
+ case wgsl::BuiltinFn::kCross:
return GLSLstd450Cross;
- case core::BuiltinFn::kDegrees:
+ case wgsl::BuiltinFn::kDegrees:
return GLSLstd450Degrees;
- case core::BuiltinFn::kDeterminant:
+ case wgsl::BuiltinFn::kDeterminant:
return GLSLstd450Determinant;
- case core::BuiltinFn::kDistance:
+ case wgsl::BuiltinFn::kDistance:
return GLSLstd450Distance;
- case core::BuiltinFn::kExp:
+ case wgsl::BuiltinFn::kExp:
return GLSLstd450Exp;
- case core::BuiltinFn::kExp2:
+ case wgsl::BuiltinFn::kExp2:
return GLSLstd450Exp2;
- case core::BuiltinFn::kFaceForward:
+ case wgsl::BuiltinFn::kFaceForward:
return GLSLstd450FaceForward;
- case core::BuiltinFn::kFloor:
+ case wgsl::BuiltinFn::kFloor:
return GLSLstd450Floor;
- case core::BuiltinFn::kFma:
+ case wgsl::BuiltinFn::kFma:
return GLSLstd450Fma;
- case core::BuiltinFn::kFract:
+ case wgsl::BuiltinFn::kFract:
return GLSLstd450Fract;
- case core::BuiltinFn::kFrexp:
+ case wgsl::BuiltinFn::kFrexp:
return GLSLstd450FrexpStruct;
- case core::BuiltinFn::kInverseSqrt:
+ case wgsl::BuiltinFn::kInverseSqrt:
return GLSLstd450InverseSqrt;
- case core::BuiltinFn::kLdexp:
+ case wgsl::BuiltinFn::kLdexp:
return GLSLstd450Ldexp;
- case core::BuiltinFn::kLength:
+ case wgsl::BuiltinFn::kLength:
return GLSLstd450Length;
- case core::BuiltinFn::kLog:
+ case wgsl::BuiltinFn::kLog:
return GLSLstd450Log;
- case core::BuiltinFn::kLog2:
+ case wgsl::BuiltinFn::kLog2:
return GLSLstd450Log2;
- case core::BuiltinFn::kMax:
+ case wgsl::BuiltinFn::kMax:
if (builtin->ReturnType()->is_float_scalar_or_vector()) {
return GLSLstd450NMax;
} else if (builtin->ReturnType()->is_unsigned_integer_scalar_or_vector()) {
@@ -162,7 +162,7 @@
} else {
return GLSLstd450SMax;
}
- case core::BuiltinFn::kMin:
+ case wgsl::BuiltinFn::kMin:
if (builtin->ReturnType()->is_float_scalar_or_vector()) {
return GLSLstd450NMin;
} else if (builtin->ReturnType()->is_unsigned_integer_scalar_or_vector()) {
@@ -170,63 +170,63 @@
} else {
return GLSLstd450SMin;
}
- case core::BuiltinFn::kMix:
+ case wgsl::BuiltinFn::kMix:
return GLSLstd450FMix;
- case core::BuiltinFn::kModf:
+ case wgsl::BuiltinFn::kModf:
return GLSLstd450ModfStruct;
- case core::BuiltinFn::kNormalize:
+ case wgsl::BuiltinFn::kNormalize:
return GLSLstd450Normalize;
- case core::BuiltinFn::kPack4X8Snorm:
+ case wgsl::BuiltinFn::kPack4X8Snorm:
return GLSLstd450PackSnorm4x8;
- case core::BuiltinFn::kPack4X8Unorm:
+ case wgsl::BuiltinFn::kPack4X8Unorm:
return GLSLstd450PackUnorm4x8;
- case core::BuiltinFn::kPack2X16Snorm:
+ case wgsl::BuiltinFn::kPack2X16Snorm:
return GLSLstd450PackSnorm2x16;
- case core::BuiltinFn::kPack2X16Unorm:
+ case wgsl::BuiltinFn::kPack2X16Unorm:
return GLSLstd450PackUnorm2x16;
- case core::BuiltinFn::kPack2X16Float:
+ case wgsl::BuiltinFn::kPack2X16Float:
return GLSLstd450PackHalf2x16;
- case core::BuiltinFn::kPow:
+ case wgsl::BuiltinFn::kPow:
return GLSLstd450Pow;
- case core::BuiltinFn::kRadians:
+ case wgsl::BuiltinFn::kRadians:
return GLSLstd450Radians;
- case core::BuiltinFn::kReflect:
+ case wgsl::BuiltinFn::kReflect:
return GLSLstd450Reflect;
- case core::BuiltinFn::kRefract:
+ case wgsl::BuiltinFn::kRefract:
return GLSLstd450Refract;
- case core::BuiltinFn::kRound:
+ case wgsl::BuiltinFn::kRound:
return GLSLstd450RoundEven;
- case core::BuiltinFn::kSign:
+ case wgsl::BuiltinFn::kSign:
if (builtin->ReturnType()->is_signed_integer_scalar_or_vector()) {
return GLSLstd450SSign;
} else {
return GLSLstd450FSign;
}
- case core::BuiltinFn::kSin:
+ case wgsl::BuiltinFn::kSin:
return GLSLstd450Sin;
- case core::BuiltinFn::kSinh:
+ case wgsl::BuiltinFn::kSinh:
return GLSLstd450Sinh;
- case core::BuiltinFn::kSmoothstep:
+ case wgsl::BuiltinFn::kSmoothstep:
return GLSLstd450SmoothStep;
- case core::BuiltinFn::kSqrt:
+ case wgsl::BuiltinFn::kSqrt:
return GLSLstd450Sqrt;
- case core::BuiltinFn::kStep:
+ case wgsl::BuiltinFn::kStep:
return GLSLstd450Step;
- case core::BuiltinFn::kTan:
+ case wgsl::BuiltinFn::kTan:
return GLSLstd450Tan;
- case core::BuiltinFn::kTanh:
+ case wgsl::BuiltinFn::kTanh:
return GLSLstd450Tanh;
- case core::BuiltinFn::kTrunc:
+ case wgsl::BuiltinFn::kTrunc:
return GLSLstd450Trunc;
- case core::BuiltinFn::kUnpack4X8Snorm:
+ case wgsl::BuiltinFn::kUnpack4X8Snorm:
return GLSLstd450UnpackSnorm4x8;
- case core::BuiltinFn::kUnpack4X8Unorm:
+ case wgsl::BuiltinFn::kUnpack4X8Unorm:
return GLSLstd450UnpackUnorm4x8;
- case core::BuiltinFn::kUnpack2X16Snorm:
+ case wgsl::BuiltinFn::kUnpack2X16Snorm:
return GLSLstd450UnpackSnorm2x16;
- case core::BuiltinFn::kUnpack2X16Unorm:
+ case wgsl::BuiltinFn::kUnpack2X16Unorm:
return GLSLstd450UnpackUnorm2x16;
- case core::BuiltinFn::kUnpack2X16Float:
+ case wgsl::BuiltinFn::kUnpack2X16Float:
return GLSLstd450UnpackHalf2x16;
default:
break;
@@ -2329,21 +2329,21 @@
};
switch (builtin->Fn()) {
- case core::BuiltinFn::kAny:
+ case wgsl::BuiltinFn::kAny:
if (builtin->Parameters()[0]->Type()->Is<core::type::Bool>()) {
// any(v: bool) just resolves to v.
return get_arg_as_value_id(0);
}
op = spv::Op::OpAny;
break;
- case core::BuiltinFn::kAll:
+ case wgsl::BuiltinFn::kAll:
if (builtin->Parameters()[0]->Type()->Is<core::type::Bool>()) {
// all(v: bool) just resolves to v.
return get_arg_as_value_id(0);
}
op = spv::Op::OpAll;
break;
- case core::BuiltinFn::kArrayLength: {
+ case wgsl::BuiltinFn::kArrayLength: {
auto* address_of = call->Arguments()[0]->Declaration()->As<ast::UnaryOpExpression>();
if (!address_of || address_of->op != core::UnaryOp::kAddressOf) {
TINT_ICE() << "arrayLength() expected pointer to member access, got " +
@@ -2380,10 +2380,10 @@
}
return result_id;
}
- case core::BuiltinFn::kCountOneBits:
+ case wgsl::BuiltinFn::kCountOneBits:
op = spv::Op::OpBitCount;
break;
- case core::BuiltinFn::kDot: {
+ case wgsl::BuiltinFn::kDot: {
op = spv::Op::OpDot;
auto* vec_ty = builtin->Parameters()[0]->Type()->As<core::type::Vector>();
if (vec_ty->type()->is_integer_scalar()) {
@@ -2424,42 +2424,42 @@
}
break;
}
- case core::BuiltinFn::kDpdx:
+ case wgsl::BuiltinFn::kDpdx:
op = spv::Op::OpDPdx;
break;
- case core::BuiltinFn::kDpdxCoarse:
+ case wgsl::BuiltinFn::kDpdxCoarse:
op = spv::Op::OpDPdxCoarse;
break;
- case core::BuiltinFn::kDpdxFine:
+ case wgsl::BuiltinFn::kDpdxFine:
op = spv::Op::OpDPdxFine;
break;
- case core::BuiltinFn::kDpdy:
+ case wgsl::BuiltinFn::kDpdy:
op = spv::Op::OpDPdy;
break;
- case core::BuiltinFn::kDpdyCoarse:
+ case wgsl::BuiltinFn::kDpdyCoarse:
op = spv::Op::OpDPdyCoarse;
break;
- case core::BuiltinFn::kDpdyFine:
+ case wgsl::BuiltinFn::kDpdyFine:
op = spv::Op::OpDPdyFine;
break;
- case core::BuiltinFn::kExtractBits:
+ case wgsl::BuiltinFn::kExtractBits:
op = builtin->Parameters()[0]->Type()->is_unsigned_integer_scalar_or_vector()
? spv::Op::OpBitFieldUExtract
: spv::Op::OpBitFieldSExtract;
break;
- case core::BuiltinFn::kFwidth:
+ case wgsl::BuiltinFn::kFwidth:
op = spv::Op::OpFwidth;
break;
- case core::BuiltinFn::kFwidthCoarse:
+ case wgsl::BuiltinFn::kFwidthCoarse:
op = spv::Op::OpFwidthCoarse;
break;
- case core::BuiltinFn::kFwidthFine:
+ case wgsl::BuiltinFn::kFwidthFine:
op = spv::Op::OpFwidthFine;
break;
- case core::BuiltinFn::kInsertBits:
+ case wgsl::BuiltinFn::kInsertBits:
op = spv::Op::OpBitFieldInsert;
break;
- case core::BuiltinFn::kMix: {
+ case wgsl::BuiltinFn::kMix: {
auto std450 = Operand(GetGLSLstd450Import());
auto a_id = get_arg_as_value_id(0);
@@ -2486,13 +2486,13 @@
}
return result_id;
}
- case core::BuiltinFn::kQuantizeToF16:
+ case wgsl::BuiltinFn::kQuantizeToF16:
op = spv::Op::OpQuantizeToF16;
break;
- case core::BuiltinFn::kReverseBits:
+ case wgsl::BuiltinFn::kReverseBits:
op = spv::Op::OpBitReverse;
break;
- case core::BuiltinFn::kSelect: {
+ case wgsl::BuiltinFn::kSelect: {
// Note: Argument order is different in WGSL and SPIR-V
auto cond_id = get_arg_as_value_id(2);
auto true_id = get_arg_as_value_id(1);
@@ -2524,10 +2524,10 @@
}
return result_id;
}
- case core::BuiltinFn::kTranspose:
+ case wgsl::BuiltinFn::kTranspose:
op = spv::Op::OpTranspose;
break;
- case core::BuiltinFn::kAbs:
+ case wgsl::BuiltinFn::kAbs:
if (builtin->ReturnType()->is_unsigned_integer_scalar_or_vector()) {
// abs() only operates on *signed* integers.
// This is a no-op for unsigned integers.
@@ -2539,7 +2539,7 @@
glsl_std450(GLSLstd450SAbs);
}
break;
- case core::BuiltinFn::kDot4I8Packed: {
+ case wgsl::BuiltinFn::kDot4I8Packed: {
auto first_param_id = get_arg_as_value_id(0);
auto second_param_id = get_arg_as_value_id(1);
if (!push_function_inst(spv::Op::OpSDotKHR,
@@ -2551,7 +2551,7 @@
}
return result_id;
}
- case core::BuiltinFn::kDot4U8Packed: {
+ case wgsl::BuiltinFn::kDot4U8Packed: {
auto first_param_id = get_arg_as_value_id(0);
auto second_param_id = get_arg_as_value_id(1);
if (!push_function_inst(spv::Op::OpUDotKHR,
@@ -2563,7 +2563,7 @@
}
return result_id;
}
- case core::BuiltinFn::kSubgroupBallot: {
+ case wgsl::BuiltinFn::kSubgroupBallot: {
module_.PushCapability(SpvCapabilityGroupNonUniformBallot);
if (!push_function_inst(
spv::Op::OpGroupNonUniformBallot,
@@ -2574,7 +2574,7 @@
}
return result_id;
}
- case core::BuiltinFn::kSubgroupBroadcast: {
+ case wgsl::BuiltinFn::kSubgroupBroadcast: {
module_.PushCapability(SpvCapabilityGroupNonUniformBallot);
auto first_param_id = get_arg_as_value_id(0);
auto second_param_id = get_arg_as_value_id(1);
@@ -2778,7 +2778,7 @@
};
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureDimensions: {
+ case wgsl::BuiltinFn::kTextureDimensions: {
// Number of returned elements from OpImageQuerySize[Lod] may not match
// those of textureDimensions().
// This might be due to an extra vector scalar describing the number of
@@ -2823,7 +2823,7 @@
}
break;
}
- case core::BuiltinFn::kTextureNumLayers: {
+ case wgsl::BuiltinFn::kTextureNumLayers: {
uint32_t spirv_dims = 0;
switch (texture_type->dim()) {
default:
@@ -2853,19 +2853,19 @@
}
break;
}
- case core::BuiltinFn::kTextureNumLevels: {
+ case wgsl::BuiltinFn::kTextureNumLevels: {
op = spv::Op::OpImageQueryLevels;
append_result_type_and_id_to_spirv_params();
spirv_params.emplace_back(gen_arg(Usage::kTexture));
break;
}
- case core::BuiltinFn::kTextureNumSamples: {
+ case wgsl::BuiltinFn::kTextureNumSamples: {
op = spv::Op::OpImageQuerySamples;
append_result_type_and_id_to_spirv_params();
spirv_params.emplace_back(gen_arg(Usage::kTexture));
break;
}
- case core::BuiltinFn::kTextureLoad: {
+ case wgsl::BuiltinFn::kTextureLoad: {
op = texture_type->Is<core::type::StorageTexture>() ? spv::Op::OpImageRead
: spv::Op::OpImageFetch;
append_result_type_and_id_to_spirv_params_for_read();
@@ -2885,7 +2885,7 @@
break;
}
- case core::BuiltinFn::kTextureStore: {
+ case wgsl::BuiltinFn::kTextureStore: {
op = spv::Op::OpImageWrite;
spirv_params.emplace_back(gen_arg(Usage::kTexture));
if (!append_coords_to_spirv_params()) {
@@ -2894,7 +2894,7 @@
spirv_params.emplace_back(gen_arg(Usage::kValue));
break;
}
- case core::BuiltinFn::kTextureGather: {
+ case wgsl::BuiltinFn::kTextureGather: {
op = spv::Op::OpImageGather;
append_result_type_and_id_to_spirv_params();
if (!append_image_and_coords_to_spirv_params()) {
@@ -2908,7 +2908,7 @@
}
break;
}
- case core::BuiltinFn::kTextureGatherCompare: {
+ case wgsl::BuiltinFn::kTextureGatherCompare: {
op = spv::Op::OpImageDrefGather;
append_result_type_and_id_to_spirv_params();
if (!append_image_and_coords_to_spirv_params()) {
@@ -2917,7 +2917,7 @@
spirv_params.emplace_back(gen_arg(Usage::kDepthRef));
break;
}
- case core::BuiltinFn::kTextureSample: {
+ case wgsl::BuiltinFn::kTextureSample: {
op = spv::Op::OpImageSampleImplicitLod;
append_result_type_and_id_to_spirv_params_for_read();
if (!append_image_and_coords_to_spirv_params()) {
@@ -2925,7 +2925,7 @@
}
break;
}
- case core::BuiltinFn::kTextureSampleBias: {
+ case wgsl::BuiltinFn::kTextureSampleBias: {
op = spv::Op::OpImageSampleImplicitLod;
append_result_type_and_id_to_spirv_params_for_read();
if (!append_image_and_coords_to_spirv_params()) {
@@ -2935,7 +2935,7 @@
ImageOperand{SpvImageOperandsBiasMask, gen_arg(Usage::kBias)});
break;
}
- case core::BuiltinFn::kTextureSampleLevel: {
+ case wgsl::BuiltinFn::kTextureSampleLevel: {
op = spv::Op::OpImageSampleExplicitLod;
append_result_type_and_id_to_spirv_params_for_read();
if (!append_image_and_coords_to_spirv_params()) {
@@ -2963,7 +2963,7 @@
image_operands.emplace_back(ImageOperand{SpvImageOperandsLodMask, level});
break;
}
- case core::BuiltinFn::kTextureSampleGrad: {
+ case wgsl::BuiltinFn::kTextureSampleGrad: {
op = spv::Op::OpImageSampleExplicitLod;
append_result_type_and_id_to_spirv_params_for_read();
if (!append_image_and_coords_to_spirv_params()) {
@@ -2975,7 +2975,7 @@
ImageOperand{SpvImageOperandsGradMask, gen_arg(Usage::kDdy)});
break;
}
- case core::BuiltinFn::kTextureSampleCompare: {
+ case wgsl::BuiltinFn::kTextureSampleCompare: {
op = spv::Op::OpImageSampleDrefImplicitLod;
append_result_type_and_id_to_spirv_params();
if (!append_image_and_coords_to_spirv_params()) {
@@ -2984,7 +2984,7 @@
spirv_params.emplace_back(gen_arg(Usage::kDepthRef));
break;
}
- case core::BuiltinFn::kTextureSampleCompareLevel: {
+ case wgsl::BuiltinFn::kTextureSampleCompareLevel: {
op = spv::Op::OpImageSampleDrefExplicitLod;
append_result_type_and_id_to_spirv_params();
if (!append_image_and_coords_to_spirv_params()) {
@@ -3039,17 +3039,17 @@
// TODO(crbug.com/tint/661): Combine sequential barriers to a single
// instruction.
- if (builtin->Fn() == core::BuiltinFn::kWorkgroupBarrier) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kWorkgroupBarrier) {
execution = static_cast<uint32_t>(spv::Scope::Workgroup);
memory = static_cast<uint32_t>(spv::Scope::Workgroup);
semantics = static_cast<uint32_t>(spv::MemorySemanticsMask::AcquireRelease) |
static_cast<uint32_t>(spv::MemorySemanticsMask::WorkgroupMemory);
- } else if (builtin->Fn() == core::BuiltinFn::kStorageBarrier) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kStorageBarrier) {
execution = static_cast<uint32_t>(spv::Scope::Workgroup);
memory = static_cast<uint32_t>(spv::Scope::Workgroup);
semantics = static_cast<uint32_t>(spv::MemorySemanticsMask::AcquireRelease) |
static_cast<uint32_t>(spv::MemorySemanticsMask::UniformMemory);
- } else if (builtin->Fn() == core::BuiltinFn::kTextureBarrier) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kTextureBarrier) {
execution = static_cast<uint32_t>(spv::Scope::Workgroup);
memory = static_cast<uint32_t>(spv::Scope::Workgroup);
semantics = static_cast<uint32_t>(spv::MemorySemanticsMask::AcquireRelease) |
@@ -3125,7 +3125,7 @@
Operand semantics = Operand(semantics_id);
switch (builtin->Fn()) {
- case core::BuiltinFn::kAtomicLoad:
+ case wgsl::BuiltinFn::kAtomicLoad:
return push_function_inst(spv::Op::OpAtomicLoad, {
result_type,
result_id,
@@ -3133,14 +3133,14 @@
memory,
semantics,
});
- case core::BuiltinFn::kAtomicStore:
+ case wgsl::BuiltinFn::kAtomicStore:
return push_function_inst(spv::Op::OpAtomicStore, {
pointer,
memory,
semantics,
value,
});
- case core::BuiltinFn::kAtomicAdd:
+ case wgsl::BuiltinFn::kAtomicAdd:
return push_function_inst(spv::Op::OpAtomicIAdd, {
result_type,
result_id,
@@ -3149,7 +3149,7 @@
semantics,
value,
});
- case core::BuiltinFn::kAtomicSub:
+ case wgsl::BuiltinFn::kAtomicSub:
return push_function_inst(spv::Op::OpAtomicISub, {
result_type,
result_id,
@@ -3158,7 +3158,7 @@
semantics,
value,
});
- case core::BuiltinFn::kAtomicMax:
+ case wgsl::BuiltinFn::kAtomicMax:
return push_function_inst(
is_value_signed() ? spv::Op::OpAtomicSMax : spv::Op::OpAtomicUMax, {
result_type,
@@ -3168,7 +3168,7 @@
semantics,
value,
});
- case core::BuiltinFn::kAtomicMin:
+ case wgsl::BuiltinFn::kAtomicMin:
return push_function_inst(
is_value_signed() ? spv::Op::OpAtomicSMin : spv::Op::OpAtomicUMin, {
result_type,
@@ -3178,7 +3178,7 @@
semantics,
value,
});
- case core::BuiltinFn::kAtomicAnd:
+ case wgsl::BuiltinFn::kAtomicAnd:
return push_function_inst(spv::Op::OpAtomicAnd, {
result_type,
result_id,
@@ -3187,7 +3187,7 @@
semantics,
value,
});
- case core::BuiltinFn::kAtomicOr:
+ case wgsl::BuiltinFn::kAtomicOr:
return push_function_inst(spv::Op::OpAtomicOr, {
result_type,
result_id,
@@ -3196,7 +3196,7 @@
semantics,
value,
});
- case core::BuiltinFn::kAtomicXor:
+ case wgsl::BuiltinFn::kAtomicXor:
return push_function_inst(spv::Op::OpAtomicXor, {
result_type,
result_id,
@@ -3205,7 +3205,7 @@
semantics,
value,
});
- case core::BuiltinFn::kAtomicExchange:
+ case wgsl::BuiltinFn::kAtomicExchange:
return push_function_inst(spv::Op::OpAtomicExchange, {
result_type,
result_id,
@@ -3214,7 +3214,7 @@
semantics,
value,
});
- case core::BuiltinFn::kAtomicCompareExchangeWeak: {
+ case wgsl::BuiltinFn::kAtomicCompareExchangeWeak: {
auto comparator = GenerateExpression(call->Arguments()[1]);
if (comparator == 0) {
return false;
diff --git a/src/tint/lang/spirv/writer/ast_raise/BUILD.bazel b/src/tint/lang/spirv/writer/ast_raise/BUILD.bazel
index 4712380..b68aec9 100644
--- a/src/tint/lang/spirv/writer/ast_raise/BUILD.bazel
+++ b/src/tint/lang/spirv/writer/ast_raise/BUILD.bazel
@@ -81,8 +81,10 @@
"while_to_loop_test.cc",
],
deps = [
+ "//src/tint/api/common",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/spirv/writer/ast_raise/BUILD.cmake b/src/tint/lang/spirv/writer/ast_raise/BUILD.cmake
index c20fa20..b36edc2 100644
--- a/src/tint/lang/spirv/writer/ast_raise/BUILD.cmake
+++ b/src/tint/lang/spirv/writer/ast_raise/BUILD.cmake
@@ -85,8 +85,10 @@
)
tint_target_add_dependencies(tint_lang_spirv_writer_ast_raise_test test
+ tint_api_common
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
diff --git a/src/tint/lang/spirv/writer/ast_raise/BUILD.gn b/src/tint/lang/spirv/writer/ast_raise/BUILD.gn
index 4c4d9f3..5ab53d5 100644
--- a/src/tint/lang/spirv/writer/ast_raise/BUILD.gn
+++ b/src/tint/lang/spirv/writer/ast_raise/BUILD.gn
@@ -85,8 +85,10 @@
]
deps = [
"${tint_src_dir}:gmock_and_gtest",
+ "${tint_src_dir}/api/common",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/wgsl/BUILD.bazel b/src/tint/lang/wgsl/BUILD.bazel
index d235e5b..83e4df2 100644
--- a/src/tint/lang/wgsl/BUILD.bazel
+++ b/src/tint/lang/wgsl/BUILD.bazel
@@ -26,11 +26,13 @@
cc_library(
name = "wgsl",
srcs = [
+ "builtin_fn.cc",
"diagnostic_rule.cc",
"diagnostic_severity.cc",
"extension.cc",
],
hdrs = [
+ "builtin_fn.h",
"diagnostic_rule.h",
"diagnostic_severity.h",
"extension.h",
@@ -74,6 +76,7 @@
"//src/tint/lang/wgsl/helpers:test",
"//src/tint/lang/wgsl/program",
"//src/tint/lang/wgsl/reader",
+ "//src/tint/lang/wgsl/reader/lower",
"//src/tint/lang/wgsl/reader/program_to_ir",
"//src/tint/lang/wgsl/resolver",
"//src/tint/lang/wgsl/sem",
diff --git a/src/tint/lang/wgsl/BUILD.cmake b/src/tint/lang/wgsl/BUILD.cmake
index c4ee2f3..c72aa5e 100644
--- a/src/tint/lang/wgsl/BUILD.cmake
+++ b/src/tint/lang/wgsl/BUILD.cmake
@@ -24,6 +24,8 @@
include(lang/wgsl/ast/BUILD.cmake)
include(lang/wgsl/helpers/BUILD.cmake)
include(lang/wgsl/inspector/BUILD.cmake)
+include(lang/wgsl/intrinsic/BUILD.cmake)
+include(lang/wgsl/ir/BUILD.cmake)
include(lang/wgsl/program/BUILD.cmake)
include(lang/wgsl/reader/BUILD.cmake)
include(lang/wgsl/resolver/BUILD.cmake)
@@ -35,6 +37,8 @@
# Kind: lib
################################################################################
tint_add_target(tint_lang_wgsl lib
+ lang/wgsl/builtin_fn.cc
+ lang/wgsl/builtin_fn.h
lang/wgsl/diagnostic_rule.cc
lang/wgsl/diagnostic_rule.h
lang/wgsl/diagnostic_severity.cc
@@ -77,6 +81,7 @@
tint_lang_wgsl_helpers_test
tint_lang_wgsl_program
tint_lang_wgsl_reader
+ tint_lang_wgsl_reader_lower
tint_lang_wgsl_reader_program_to_ir
tint_lang_wgsl_resolver
tint_lang_wgsl_sem
diff --git a/src/tint/lang/wgsl/BUILD.gn b/src/tint/lang/wgsl/BUILD.gn
index dafa9c3..4ddc480 100644
--- a/src/tint/lang/wgsl/BUILD.gn
+++ b/src/tint/lang/wgsl/BUILD.gn
@@ -31,6 +31,8 @@
libtint_source_set("wgsl") {
sources = [
+ "builtin_fn.cc",
+ "builtin_fn.h",
"diagnostic_rule.cc",
"diagnostic_rule.h",
"diagnostic_severity.cc",
@@ -71,6 +73,7 @@
"${tint_src_dir}/lang/wgsl/helpers:unittests",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/reader",
+ "${tint_src_dir}/lang/wgsl/reader/lower",
"${tint_src_dir}/lang/wgsl/reader/program_to_ir",
"${tint_src_dir}/lang/wgsl/resolver",
"${tint_src_dir}/lang/wgsl/sem",
diff --git a/src/tint/lang/wgsl/ast/BUILD.bazel b/src/tint/lang/wgsl/ast/BUILD.bazel
index 1674ad6..3bed5ae 100644
--- a/src/tint/lang/wgsl/ast/BUILD.bazel
+++ b/src/tint/lang/wgsl/ast/BUILD.bazel
@@ -280,6 +280,7 @@
"//src/tint/api/common",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/wgsl/ast/BUILD.cmake b/src/tint/lang/wgsl/ast/BUILD.cmake
index 9715482..f9293f9 100644
--- a/src/tint/lang/wgsl/ast/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/BUILD.cmake
@@ -281,6 +281,7 @@
tint_api_common
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
diff --git a/src/tint/lang/wgsl/ast/BUILD.gn b/src/tint/lang/wgsl/ast/BUILD.gn
index 3732774..2cc22fe 100644
--- a/src/tint/lang/wgsl/ast/BUILD.gn
+++ b/src/tint/lang/wgsl/ast/BUILD.gn
@@ -282,6 +282,7 @@
"${tint_src_dir}/api/common",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.bazel b/src/tint/lang/wgsl/ast/transform/BUILD.bazel
index 6b75460..03b8500 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.bazel
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.bazel
@@ -166,6 +166,7 @@
"//src/tint/api/options",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.cmake b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
index a9dd202..1f7ecf6 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.cmake
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.cmake
@@ -165,6 +165,7 @@
tint_api_options
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
diff --git a/src/tint/lang/wgsl/ast/transform/BUILD.gn b/src/tint/lang/wgsl/ast/transform/BUILD.gn
index 22706b8..958683e 100644
--- a/src/tint/lang/wgsl/ast/transform/BUILD.gn
+++ b/src/tint/lang/wgsl/ast/transform/BUILD.gn
@@ -168,6 +168,7 @@
"${tint_src_dir}/api/options",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.cc b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.cc
index c065eea..3b655c3 100644
--- a/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.cc
+++ b/src/tint/lang/wgsl/ast/transform/array_length_from_uniform.cc
@@ -41,7 +41,7 @@
for (auto* fn : program.AST().Functions()) {
if (auto* sem_fn = program.Sem().Get(fn)) {
for (auto* builtin : sem_fn->DirectlyCalledBuiltins()) {
- if (builtin->Fn() == core::BuiltinFn::kArrayLength) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kArrayLength) {
return true;
}
}
@@ -207,7 +207,7 @@
auto* call = sem.Get(call_expr)->UnwrapMaterialize()->As<sem::Call>();
auto* builtin = call->Target()->As<sem::BuiltinFn>();
- if (!builtin || builtin->Fn() != core::BuiltinFn::kArrayLength) {
+ if (!builtin || builtin->Fn() != wgsl::BuiltinFn::kArrayLength) {
continue;
}
diff --git a/src/tint/lang/wgsl/ast/transform/builtin_polyfill.cc b/src/tint/lang/wgsl/ast/transform/builtin_polyfill.cc
index 2c92aa3..ca324f1 100644
--- a/src/tint/lang/wgsl/ast/transform/builtin_polyfill.cc
+++ b/src/tint/lang/wgsl/ast/transform/builtin_polyfill.cc
@@ -858,13 +858,13 @@
const uint32_t width = WidthOf(target);
// select(target(v), low_limit, v < low_condition)
- auto* select_low = b.Call(core::BuiltinFn::kSelect, //
+ auto* select_low = b.Call(wgsl::BuiltinFn::kSelect, //
b.Call(T(target), "v"), //
ScalarOrVector(width, limits.low_limit), //
b.LessThan("v", ScalarOrVector(width, limits.low_condition)));
// select(high_limit, select_low, v < high_condition)
- auto* select_high = b.Call(core::BuiltinFn::kSelect, //
+ auto* select_high = b.Call(wgsl::BuiltinFn::kSelect, //
ScalarOrVector(width, limits.high_limit), //
select_low, //
b.LessThan("v", ScalarOrVector(width, limits.high_condition)));
@@ -1080,28 +1080,28 @@
call->Target(), //
[&](const sem::BuiltinFn* builtin) {
switch (builtin->Fn()) {
- case core::BuiltinFn::kAcosh:
+ case wgsl::BuiltinFn::kAcosh:
if (cfg.builtins.acosh != Level::kNone) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return acosh(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kAsinh:
+ case wgsl::BuiltinFn::kAsinh:
if (cfg.builtins.asinh) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return asinh(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kAtanh:
+ case wgsl::BuiltinFn::kAtanh:
if (cfg.builtins.atanh != Level::kNone) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return atanh(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kClamp:
+ case wgsl::BuiltinFn::kClamp:
if (cfg.builtins.clamp_int) {
auto& sig = builtin->Signature();
if (sig.parameters[0]->Type()->is_integer_scalar_or_vector()) {
@@ -1111,49 +1111,49 @@
}
return Symbol{};
- case core::BuiltinFn::kCountLeadingZeros:
+ case wgsl::BuiltinFn::kCountLeadingZeros:
if (cfg.builtins.count_leading_zeros) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return countLeadingZeros(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kCountTrailingZeros:
+ case wgsl::BuiltinFn::kCountTrailingZeros:
if (cfg.builtins.count_trailing_zeros) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return countTrailingZeros(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kExtractBits:
+ case wgsl::BuiltinFn::kExtractBits:
if (cfg.builtins.extract_bits != Level::kNone) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return extractBits(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kFirstLeadingBit:
+ case wgsl::BuiltinFn::kFirstLeadingBit:
if (cfg.builtins.first_leading_bit) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return firstLeadingBit(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kFirstTrailingBit:
+ case wgsl::BuiltinFn::kFirstTrailingBit:
if (cfg.builtins.first_trailing_bit) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return firstTrailingBit(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kInsertBits:
+ case wgsl::BuiltinFn::kInsertBits:
if (cfg.builtins.insert_bits != Level::kNone) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return insertBits(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kReflect:
+ case wgsl::BuiltinFn::kReflect:
// Only polyfill for vec2<f32>. See https://crbug.com/tint/1798 for
// more details.
if (cfg.builtins.reflect_vec2_f32) {
@@ -1166,14 +1166,14 @@
}
return Symbol{};
- case core::BuiltinFn::kSaturate:
+ case wgsl::BuiltinFn::kSaturate:
if (cfg.builtins.saturate) {
return builtin_polyfills.GetOrCreate(
builtin, [&] { return saturate(builtin->ReturnType()); });
}
return Symbol{};
- case core::BuiltinFn::kSign:
+ case wgsl::BuiltinFn::kSign:
if (cfg.builtins.sign_int) {
auto* ty = builtin->ReturnType();
if (ty->is_signed_integer_scalar_or_vector()) {
@@ -1183,7 +1183,7 @@
}
return Symbol{};
- case core::BuiltinFn::kTextureLoad:
+ case wgsl::BuiltinFn::kTextureLoad:
if (cfg.builtins.bgra8unorm) {
auto& sig = builtin->Signature();
auto* tex = sig.Parameter(core::ParameterUsage::kTexture);
@@ -1199,7 +1199,7 @@
}
return Symbol{};
- case core::BuiltinFn::kTextureSampleBaseClampToEdge:
+ case wgsl::BuiltinFn::kTextureSampleBaseClampToEdge:
if (cfg.builtins.texture_sample_base_clamp_to_edge_2d_f32) {
auto& sig = builtin->Signature();
auto* tex = sig.Parameter(core::ParameterUsage::kTexture);
@@ -1213,7 +1213,7 @@
}
return Symbol{};
- case core::BuiltinFn::kTextureStore:
+ case wgsl::BuiltinFn::kTextureStore:
if (cfg.builtins.bgra8unorm) {
auto& sig = builtin->Signature();
auto* tex = sig.Parameter(core::ParameterUsage::kTexture);
@@ -1231,7 +1231,7 @@
args.Push(arg);
}
return ctx.dst->Call(
- tint::ToString(core::BuiltinFn::kTextureStore),
+ tint::ToString(wgsl::BuiltinFn::kTextureStore),
std::move(args));
});
made_changes = true;
@@ -1240,7 +1240,7 @@
}
return Symbol{};
- case core::BuiltinFn::kQuantizeToF16:
+ case wgsl::BuiltinFn::kQuantizeToF16:
if (cfg.builtins.quantize_to_vec_f16) {
if (auto* vec = builtin->ReturnType()->As<core::type::Vector>()) {
return builtin_polyfills.GetOrCreate(
@@ -1249,7 +1249,7 @@
}
return Symbol{};
- case core::BuiltinFn::kWorkgroupUniformLoad:
+ case wgsl::BuiltinFn::kWorkgroupUniformLoad:
if (cfg.builtins.workgroup_uniform_load) {
return builtin_polyfills.GetOrCreate(builtin, [&] {
return workgroupUniformLoad(builtin->ReturnType());
diff --git a/src/tint/lang/wgsl/ast/transform/demote_to_helper.cc b/src/tint/lang/wgsl/ast/transform/demote_to_helper.cc
index 8c9d3e2..95e1af0 100644
--- a/src/tint/lang/wgsl/ast/transform/demote_to_helper.cc
+++ b/src/tint/lang/wgsl/ast/transform/demote_to_helper.cc
@@ -154,12 +154,12 @@
return;
}
- if (builtin->Fn() == core::BuiltinFn::kTextureStore) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kTextureStore) {
// A call to textureStore() will always be a statement.
// Wrap it inside a conditional block.
auto* masked_call = b.If(b.Not(flag), b.Block(ctx.Clone(stmt->Declaration())));
ctx.Replace(stmt->Declaration(), masked_call);
- } else if (builtin->IsAtomic() && builtin->Fn() != core::BuiltinFn::kAtomicLoad) {
+ } else if (builtin->IsAtomic() && builtin->Fn() != wgsl::BuiltinFn::kAtomicLoad) {
// A call to an atomic builtin can be a statement or an expression.
if (auto* call_stmt = stmt->Declaration()->As<CallStatement>();
call_stmt && call_stmt->expr == call) {
@@ -180,7 +180,7 @@
auto result = b.Sym();
Type result_ty;
const Statement* masked_call = nullptr;
- if (builtin->Fn() == core::BuiltinFn::kAtomicCompareExchangeWeak) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kAtomicCompareExchangeWeak) {
// Special case for atomicCompareExchangeWeak as we cannot name its
// result type. We have to declare an equivalent struct and copy the
// original member values over to it.
diff --git a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.cc b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.cc
index 21e5309..131f670 100644
--- a/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.cc
+++ b/src/tint/lang/wgsl/ast/transform/multiplanar_external_texture.cc
@@ -194,7 +194,7 @@
if (builtin && !builtin->Parameters().IsEmpty() &&
builtin->Parameters()[0]->Type()->Is<core::type::ExternalTexture>() &&
- builtin->Fn() != core::BuiltinFn::kTextureDimensions) {
+ builtin->Fn() != wgsl::BuiltinFn::kTextureDimensions) {
if (auto* var_user =
sem.GetVal(expr->args[0])->UnwrapLoad()->As<sem::VariableUser>()) {
auto it = new_binding_symbols.find(var_user->Variable());
@@ -208,9 +208,9 @@
auto& syms = it->second;
switch (builtin->Fn()) {
- case core::BuiltinFn::kTextureLoad:
+ case wgsl::BuiltinFn::kTextureLoad:
return createTextureLoad(call, syms);
- case core::BuiltinFn::kTextureSampleBaseClampToEdge:
+ case wgsl::BuiltinFn::kTextureSampleBaseClampToEdge:
return createTextureSampleBaseClampToEdge(expr, syms);
default:
break;
@@ -309,13 +309,13 @@
/// builtin function.
/// @param call_type determines which function body to generate
/// @returns a statement list that makes of the body of the chosen function
- auto buildTextureBuiltinBody(core::BuiltinFn call_type) {
+ auto buildTextureBuiltinBody(wgsl::BuiltinFn call_type) {
tint::Vector<const Statement*, 16> stmts;
const CallExpression* single_plane_call = nullptr;
const CallExpression* plane_0_call = nullptr;
const CallExpression* plane_1_call = nullptr;
switch (call_type) {
- case core::BuiltinFn::kTextureSampleBaseClampToEdge:
+ case wgsl::BuiltinFn::kTextureSampleBaseClampToEdge:
stmts.Push(b.Decl(b.Let(
"modifiedCoords", b.Mul(b.MemberAccessor("params", "coordTransformationMatrix"),
b.Call<vec3<f32>>("coord", 1_a)))));
@@ -345,7 +345,7 @@
// textureSampleLevel(plane1, smp, plane1_clamped, 0.0);
plane_1_call = b.Call("textureSampleLevel", "plane1", "smp", "plane1_clamped", 0_a);
break;
- case core::BuiltinFn::kTextureLoad:
+ case wgsl::BuiltinFn::kTextureLoad:
// textureLoad(plane0, coord, 0);
single_plane_call = b.Call("textureLoad", "plane0", "coord", 0_a);
// textureLoad(plane0, coord, 0);
@@ -439,7 +439,7 @@
b.Param("params", b.ty(params_struct_sym)),
},
b.ty.vec4(b.ty.f32()),
- buildTextureBuiltinBody(core::BuiltinFn::kTextureSampleBaseClampToEdge));
+ buildTextureBuiltinBody(wgsl::BuiltinFn::kTextureSampleBaseClampToEdge));
}
return b.Call(texture_sample_external_sym, tint::Vector{
@@ -486,7 +486,7 @@
b.Param("params", b.ty(params_struct_sym)),
},
b.ty.vec4(b.ty.f32()), //
- buildTextureBuiltinBody(core::BuiltinFn::kTextureLoad));
+ buildTextureBuiltinBody(wgsl::BuiltinFn::kTextureLoad));
return name;
});
diff --git a/src/tint/lang/wgsl/ast/transform/robustness.cc b/src/tint/lang/wgsl/ast/transform/robustness.cc
index 09b85fd..b4df27d 100644
--- a/src/tint/lang/wgsl/ast/transform/robustness.cc
+++ b/src/tint/lang/wgsl/ast/transform/robustness.cc
@@ -246,7 +246,7 @@
// Must clamp, even if the index is constant.
auto* arr_ptr = b.AddressOf(ctx.Clone(expr->Object()->Declaration()));
- return b.Sub(b.Call(core::BuiltinFn::kArrayLength, arr_ptr), 1_u);
+ return b.Sub(b.Call(wgsl::BuiltinFn::kArrayLength, arr_ptr), 1_u);
}
if (auto count = arr->ConstantCount()) {
if (expr->Index()->ConstantValue()) {
@@ -352,7 +352,7 @@
auto* expr_sem = expr->Unwrap()->As<sem::IndexAccessorExpression>();
auto idx = CastToU32(expr_sem->Index());
- auto* clamped_idx = b.Call(core::BuiltinFn::kMin, idx, max);
+ auto* clamped_idx = b.Call(wgsl::BuiltinFn::kMin, idx, max);
ctx.Replace(expr->Declaration()->index, clamped_idx);
}
@@ -367,14 +367,14 @@
}
if (predicate) {
- if (builtin->Fn() == core::BuiltinFn::kWorkgroupUniformLoad) {
+ if (builtin->Fn() == wgsl::BuiltinFn::kWorkgroupUniformLoad) {
// https://www.w3.org/TR/WGSL/#workgroupUniformLoad-builtin:
// "Executes a control barrier synchronization function that affects memory and
// atomic operations in the workgroup address space."
// Because the call acts like a control barrier, we need to make sure that we still
// trigger a workgroup barrier if the predicate fails.
PredicateCall(call, predicate,
- b.Block(b.CallStmt(b.Call(core::BuiltinFn::kWorkgroupBarrier))));
+ b.Block(b.CallStmt(b.Call(wgsl::BuiltinFn::kWorkgroupBarrier))));
} else {
PredicateCall(call, predicate);
}
@@ -417,7 +417,7 @@
// let num_levels = textureNumLevels(texture-arg);
num_levels = b.Symbols().New("num_levels");
hoist.InsertBefore(
- stmt, b.Decl(b.Let(num_levels, b.Call(core::BuiltinFn::kTextureNumLevels,
+ stmt, b.Decl(b.Let(num_levels, b.Call(wgsl::BuiltinFn::kTextureNumLevels,
ctx.Clone(texture_arg)))));
// predicate: level_idx < num_levels
@@ -442,12 +442,12 @@
// predicate: all(coords < textureDimensions(texture))
auto* dimensions =
level_idx.IsValid()
- ? b.Call(core::BuiltinFn::kTextureDimensions, ctx.Clone(texture_arg),
- b.Call(core::BuiltinFn::kMin, b.Expr(level_idx),
+ ? b.Call(wgsl::BuiltinFn::kTextureDimensions, ctx.Clone(texture_arg),
+ b.Call(wgsl::BuiltinFn::kMin, b.Expr(level_idx),
b.Sub(num_levels, 1_a)))
- : b.Call(core::BuiltinFn::kTextureDimensions, ctx.Clone(texture_arg));
+ : b.Call(wgsl::BuiltinFn::kTextureDimensions, ctx.Clone(texture_arg));
predicate =
- And(predicate, b.Call(core::BuiltinFn::kAll, b.LessThan(coords, dimensions)));
+ And(predicate, b.Call(wgsl::BuiltinFn::kAll, b.LessThan(coords, dimensions)));
// Replace the level argument with `coord`
ctx.Replace(arg, b.Expr(coords));
@@ -457,7 +457,7 @@
if (array_arg_idx >= 0) {
// let array_idx = u32(array-arg)
auto* arg = expr->args[static_cast<size_t>(array_arg_idx)];
- auto* num_layers = b.Call(core::BuiltinFn::kTextureNumLayers, ctx.Clone(texture_arg));
+ auto* num_layers = b.Call(wgsl::BuiltinFn::kTextureNumLayers, ctx.Clone(texture_arg));
auto array_idx = b.Symbols().New("array_idx");
hoist.InsertBefore(stmt, b.Decl(b.Let(array_idx, CastToUnsigned(ctx.Clone(arg), 1u))));
@@ -502,10 +502,10 @@
const auto* arg = expr->args[static_cast<size_t>(level_arg_idx)];
level_idx = b.Symbols().New("level_idx");
const auto* num_levels =
- b.Call(core::BuiltinFn::kTextureNumLevels, ctx.Clone(texture_arg));
+ b.Call(wgsl::BuiltinFn::kTextureNumLevels, ctx.Clone(texture_arg));
const auto* max = b.Sub(num_levels, 1_a);
hoist.InsertBefore(
- stmt, b.Decl(b.Let(level_idx, b.Call(core::BuiltinFn::kMin,
+ stmt, b.Decl(b.Let(level_idx, b.Call(wgsl::BuiltinFn::kMin,
b.Call<u32>(ctx.Clone(arg)), max))));
ctx.Replace(arg, b.Expr(level_idx));
}
@@ -519,9 +519,9 @@
const auto width = WidthOf(param->Type());
const auto* dimensions =
level_idx.IsValid()
- ? b.Call(core::BuiltinFn::kTextureDimensions, ctx.Clone(texture_arg),
+ ? b.Call(wgsl::BuiltinFn::kTextureDimensions, ctx.Clone(texture_arg),
level_idx)
- : b.Call(core::BuiltinFn::kTextureDimensions, ctx.Clone(texture_arg));
+ : b.Call(wgsl::BuiltinFn::kTextureDimensions, ctx.Clone(texture_arg));
// dimensions is u32 or vecN<u32>
const auto* unsigned_max = b.Sub(dimensions, ScalarOrVec(b.Expr(1_a), width));
@@ -529,9 +529,9 @@
const auto* zero = ScalarOrVec(b.Expr(0_a), width);
const auto* signed_max = CastToSigned(unsigned_max, width);
ctx.Replace(arg,
- b.Call(core::BuiltinFn::kClamp, ctx.Clone(arg), zero, signed_max));
+ b.Call(wgsl::BuiltinFn::kClamp, ctx.Clone(arg), zero, signed_max));
} else {
- ctx.Replace(arg, b.Call(core::BuiltinFn::kMin, ctx.Clone(arg), unsigned_max));
+ ctx.Replace(arg, b.Call(wgsl::BuiltinFn::kMin, ctx.Clone(arg), unsigned_max));
}
}
}
@@ -540,14 +540,14 @@
if (array_arg_idx >= 0) {
auto* param = builtin->Parameters()[static_cast<size_t>(array_arg_idx)];
auto* arg = expr->args[static_cast<size_t>(array_arg_idx)];
- auto* num_layers = b.Call(core::BuiltinFn::kTextureNumLayers, ctx.Clone(texture_arg));
+ auto* num_layers = b.Call(wgsl::BuiltinFn::kTextureNumLayers, ctx.Clone(texture_arg));
const auto* unsigned_max = b.Sub(num_layers, 1_a);
if (param->Type()->is_signed_integer_scalar()) {
const auto* signed_max = CastToSigned(unsigned_max, 1u);
- ctx.Replace(arg, b.Call(core::BuiltinFn::kClamp, ctx.Clone(arg), 0_a, signed_max));
+ ctx.Replace(arg, b.Call(wgsl::BuiltinFn::kClamp, ctx.Clone(arg), 0_a, signed_max));
} else {
- ctx.Replace(arg, b.Call(core::BuiltinFn::kMin, ctx.Clone(arg), unsigned_max));
+ ctx.Replace(arg, b.Call(wgsl::BuiltinFn::kMin, ctx.Clone(arg), unsigned_max));
}
}
}
@@ -555,9 +555,9 @@
/// @param type builtin type
/// @returns true if the given builtin is a texture function that requires predication or
/// clamping of arguments.
- bool TextureBuiltinNeedsRobustness(core::BuiltinFn type) {
- return type == core::BuiltinFn::kTextureLoad || type == core::BuiltinFn::kTextureStore ||
- type == core::BuiltinFn::kTextureDimensions;
+ bool TextureBuiltinNeedsRobustness(wgsl::BuiltinFn type) {
+ return type == wgsl::BuiltinFn::kTextureLoad || type == wgsl::BuiltinFn::kTextureStore ||
+ type == wgsl::BuiltinFn::kTextureDimensions;
}
/// @returns a bitwise and of the two expressions, or the other expression if one is null.
diff --git a/src/tint/lang/wgsl/ast/transform/substitute_override.cc b/src/tint/lang/wgsl/ast/transform/substitute_override.cc
index 9f41800..833aa67 100644
--- a/src/tint/lang/wgsl/ast/transform/substitute_override.cc
+++ b/src/tint/lang/wgsl/ast/transform/substitute_override.cc
@@ -111,7 +111,7 @@
if (auto* access = sem->UnwrapMaterialize()->As<sem::IndexAccessorExpression>()) {
if (access->Object()->UnwrapMaterialize()->Type()->HoldsAbstract() &&
access->Index()->Stage() == core::EvaluationStage::kOverride) {
- auto* obj = b.Call(core::str(core::BuiltinFn::kTintMaterialize),
+ auto* obj = b.Call(wgsl::str(wgsl::BuiltinFn::kTintMaterialize),
ctx.Clone(expr->object));
return b.IndexAccessor(obj, ctx.Clone(expr->index));
}
diff --git a/src/tint/lang/wgsl/builtin_fn.cc b/src/tint/lang/wgsl/builtin_fn.cc
new file mode 100644
index 0000000..5ba2090
--- /dev/null
+++ b/src/tint/lang/wgsl/builtin_fn.cc
@@ -0,0 +1,713 @@
+// Copyright 2023 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/src/cmd/gen' using the template:
+// src/tint/lang/wgsl/builtin_fn.cc.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+#include "src/tint/lang/wgsl/builtin_fn.h"
+
+namespace tint::wgsl {
+
+BuiltinFn ParseBuiltinFn(std::string_view name) {
+ if (name == "abs") {
+ return BuiltinFn::kAbs;
+ }
+ if (name == "acos") {
+ return BuiltinFn::kAcos;
+ }
+ if (name == "acosh") {
+ return BuiltinFn::kAcosh;
+ }
+ if (name == "all") {
+ return BuiltinFn::kAll;
+ }
+ if (name == "any") {
+ return BuiltinFn::kAny;
+ }
+ if (name == "arrayLength") {
+ return BuiltinFn::kArrayLength;
+ }
+ if (name == "asin") {
+ return BuiltinFn::kAsin;
+ }
+ if (name == "asinh") {
+ return BuiltinFn::kAsinh;
+ }
+ if (name == "atan") {
+ return BuiltinFn::kAtan;
+ }
+ if (name == "atan2") {
+ return BuiltinFn::kAtan2;
+ }
+ if (name == "atanh") {
+ return BuiltinFn::kAtanh;
+ }
+ if (name == "ceil") {
+ return BuiltinFn::kCeil;
+ }
+ if (name == "clamp") {
+ return BuiltinFn::kClamp;
+ }
+ if (name == "cos") {
+ return BuiltinFn::kCos;
+ }
+ if (name == "cosh") {
+ return BuiltinFn::kCosh;
+ }
+ if (name == "countLeadingZeros") {
+ return BuiltinFn::kCountLeadingZeros;
+ }
+ if (name == "countOneBits") {
+ return BuiltinFn::kCountOneBits;
+ }
+ if (name == "countTrailingZeros") {
+ return BuiltinFn::kCountTrailingZeros;
+ }
+ if (name == "cross") {
+ return BuiltinFn::kCross;
+ }
+ if (name == "degrees") {
+ return BuiltinFn::kDegrees;
+ }
+ if (name == "determinant") {
+ return BuiltinFn::kDeterminant;
+ }
+ if (name == "distance") {
+ return BuiltinFn::kDistance;
+ }
+ if (name == "dot") {
+ return BuiltinFn::kDot;
+ }
+ if (name == "dot4I8Packed") {
+ return BuiltinFn::kDot4I8Packed;
+ }
+ if (name == "dot4U8Packed") {
+ return BuiltinFn::kDot4U8Packed;
+ }
+ if (name == "dpdx") {
+ return BuiltinFn::kDpdx;
+ }
+ if (name == "dpdxCoarse") {
+ return BuiltinFn::kDpdxCoarse;
+ }
+ if (name == "dpdxFine") {
+ return BuiltinFn::kDpdxFine;
+ }
+ if (name == "dpdy") {
+ return BuiltinFn::kDpdy;
+ }
+ if (name == "dpdyCoarse") {
+ return BuiltinFn::kDpdyCoarse;
+ }
+ if (name == "dpdyFine") {
+ return BuiltinFn::kDpdyFine;
+ }
+ if (name == "exp") {
+ return BuiltinFn::kExp;
+ }
+ if (name == "exp2") {
+ return BuiltinFn::kExp2;
+ }
+ if (name == "extractBits") {
+ return BuiltinFn::kExtractBits;
+ }
+ if (name == "faceForward") {
+ return BuiltinFn::kFaceForward;
+ }
+ if (name == "firstLeadingBit") {
+ return BuiltinFn::kFirstLeadingBit;
+ }
+ if (name == "firstTrailingBit") {
+ return BuiltinFn::kFirstTrailingBit;
+ }
+ if (name == "floor") {
+ return BuiltinFn::kFloor;
+ }
+ if (name == "fma") {
+ return BuiltinFn::kFma;
+ }
+ if (name == "fract") {
+ return BuiltinFn::kFract;
+ }
+ if (name == "frexp") {
+ return BuiltinFn::kFrexp;
+ }
+ if (name == "fwidth") {
+ return BuiltinFn::kFwidth;
+ }
+ if (name == "fwidthCoarse") {
+ return BuiltinFn::kFwidthCoarse;
+ }
+ if (name == "fwidthFine") {
+ return BuiltinFn::kFwidthFine;
+ }
+ if (name == "insertBits") {
+ return BuiltinFn::kInsertBits;
+ }
+ if (name == "inverseSqrt") {
+ return BuiltinFn::kInverseSqrt;
+ }
+ if (name == "ldexp") {
+ return BuiltinFn::kLdexp;
+ }
+ if (name == "length") {
+ return BuiltinFn::kLength;
+ }
+ if (name == "log") {
+ return BuiltinFn::kLog;
+ }
+ if (name == "log2") {
+ return BuiltinFn::kLog2;
+ }
+ if (name == "max") {
+ return BuiltinFn::kMax;
+ }
+ if (name == "min") {
+ return BuiltinFn::kMin;
+ }
+ if (name == "mix") {
+ return BuiltinFn::kMix;
+ }
+ if (name == "modf") {
+ return BuiltinFn::kModf;
+ }
+ if (name == "normalize") {
+ return BuiltinFn::kNormalize;
+ }
+ if (name == "pack2x16float") {
+ return BuiltinFn::kPack2X16Float;
+ }
+ if (name == "pack2x16snorm") {
+ return BuiltinFn::kPack2X16Snorm;
+ }
+ if (name == "pack2x16unorm") {
+ return BuiltinFn::kPack2X16Unorm;
+ }
+ if (name == "pack4x8snorm") {
+ return BuiltinFn::kPack4X8Snorm;
+ }
+ if (name == "pack4x8unorm") {
+ return BuiltinFn::kPack4X8Unorm;
+ }
+ if (name == "pow") {
+ return BuiltinFn::kPow;
+ }
+ if (name == "quantizeToF16") {
+ return BuiltinFn::kQuantizeToF16;
+ }
+ if (name == "radians") {
+ return BuiltinFn::kRadians;
+ }
+ if (name == "reflect") {
+ return BuiltinFn::kReflect;
+ }
+ if (name == "refract") {
+ return BuiltinFn::kRefract;
+ }
+ if (name == "reverseBits") {
+ return BuiltinFn::kReverseBits;
+ }
+ if (name == "round") {
+ return BuiltinFn::kRound;
+ }
+ if (name == "saturate") {
+ return BuiltinFn::kSaturate;
+ }
+ if (name == "select") {
+ return BuiltinFn::kSelect;
+ }
+ if (name == "sign") {
+ return BuiltinFn::kSign;
+ }
+ if (name == "sin") {
+ return BuiltinFn::kSin;
+ }
+ if (name == "sinh") {
+ return BuiltinFn::kSinh;
+ }
+ if (name == "smoothstep") {
+ return BuiltinFn::kSmoothstep;
+ }
+ if (name == "sqrt") {
+ return BuiltinFn::kSqrt;
+ }
+ if (name == "step") {
+ return BuiltinFn::kStep;
+ }
+ if (name == "storageBarrier") {
+ return BuiltinFn::kStorageBarrier;
+ }
+ if (name == "tan") {
+ return BuiltinFn::kTan;
+ }
+ if (name == "tanh") {
+ return BuiltinFn::kTanh;
+ }
+ if (name == "transpose") {
+ return BuiltinFn::kTranspose;
+ }
+ if (name == "trunc") {
+ return BuiltinFn::kTrunc;
+ }
+ if (name == "unpack2x16float") {
+ return BuiltinFn::kUnpack2X16Float;
+ }
+ if (name == "unpack2x16snorm") {
+ return BuiltinFn::kUnpack2X16Snorm;
+ }
+ if (name == "unpack2x16unorm") {
+ return BuiltinFn::kUnpack2X16Unorm;
+ }
+ if (name == "unpack4x8snorm") {
+ return BuiltinFn::kUnpack4X8Snorm;
+ }
+ if (name == "unpack4x8unorm") {
+ return BuiltinFn::kUnpack4X8Unorm;
+ }
+ if (name == "workgroupBarrier") {
+ return BuiltinFn::kWorkgroupBarrier;
+ }
+ if (name == "workgroupUniformLoad") {
+ return BuiltinFn::kWorkgroupUniformLoad;
+ }
+ if (name == "textureBarrier") {
+ return BuiltinFn::kTextureBarrier;
+ }
+ if (name == "textureDimensions") {
+ return BuiltinFn::kTextureDimensions;
+ }
+ if (name == "textureGather") {
+ return BuiltinFn::kTextureGather;
+ }
+ if (name == "textureGatherCompare") {
+ return BuiltinFn::kTextureGatherCompare;
+ }
+ if (name == "textureNumLayers") {
+ return BuiltinFn::kTextureNumLayers;
+ }
+ if (name == "textureNumLevels") {
+ return BuiltinFn::kTextureNumLevels;
+ }
+ if (name == "textureNumSamples") {
+ return BuiltinFn::kTextureNumSamples;
+ }
+ if (name == "textureSample") {
+ return BuiltinFn::kTextureSample;
+ }
+ if (name == "textureSampleBias") {
+ return BuiltinFn::kTextureSampleBias;
+ }
+ if (name == "textureSampleCompare") {
+ return BuiltinFn::kTextureSampleCompare;
+ }
+ if (name == "textureSampleCompareLevel") {
+ return BuiltinFn::kTextureSampleCompareLevel;
+ }
+ if (name == "textureSampleGrad") {
+ return BuiltinFn::kTextureSampleGrad;
+ }
+ if (name == "textureSampleLevel") {
+ return BuiltinFn::kTextureSampleLevel;
+ }
+ if (name == "textureSampleBaseClampToEdge") {
+ return BuiltinFn::kTextureSampleBaseClampToEdge;
+ }
+ if (name == "textureStore") {
+ return BuiltinFn::kTextureStore;
+ }
+ if (name == "textureLoad") {
+ return BuiltinFn::kTextureLoad;
+ }
+ if (name == "atomicLoad") {
+ return BuiltinFn::kAtomicLoad;
+ }
+ if (name == "atomicStore") {
+ return BuiltinFn::kAtomicStore;
+ }
+ if (name == "atomicAdd") {
+ return BuiltinFn::kAtomicAdd;
+ }
+ if (name == "atomicSub") {
+ return BuiltinFn::kAtomicSub;
+ }
+ if (name == "atomicMax") {
+ return BuiltinFn::kAtomicMax;
+ }
+ if (name == "atomicMin") {
+ return BuiltinFn::kAtomicMin;
+ }
+ if (name == "atomicAnd") {
+ return BuiltinFn::kAtomicAnd;
+ }
+ if (name == "atomicOr") {
+ return BuiltinFn::kAtomicOr;
+ }
+ if (name == "atomicXor") {
+ return BuiltinFn::kAtomicXor;
+ }
+ if (name == "atomicExchange") {
+ return BuiltinFn::kAtomicExchange;
+ }
+ if (name == "atomicCompareExchangeWeak") {
+ return BuiltinFn::kAtomicCompareExchangeWeak;
+ }
+ if (name == "subgroupBallot") {
+ return BuiltinFn::kSubgroupBallot;
+ }
+ if (name == "subgroupBroadcast") {
+ return BuiltinFn::kSubgroupBroadcast;
+ }
+ if (name == "_tint_materialize") {
+ return BuiltinFn::kTintMaterialize;
+ }
+ return BuiltinFn::kNone;
+}
+
+const char* str(BuiltinFn i) {
+ switch (i) {
+ case BuiltinFn::kNone:
+ return "<none>";
+ case BuiltinFn::kAbs:
+ return "abs";
+ case BuiltinFn::kAcos:
+ return "acos";
+ case BuiltinFn::kAcosh:
+ return "acosh";
+ case BuiltinFn::kAll:
+ return "all";
+ case BuiltinFn::kAny:
+ return "any";
+ case BuiltinFn::kArrayLength:
+ return "arrayLength";
+ case BuiltinFn::kAsin:
+ return "asin";
+ case BuiltinFn::kAsinh:
+ return "asinh";
+ case BuiltinFn::kAtan:
+ return "atan";
+ case BuiltinFn::kAtan2:
+ return "atan2";
+ case BuiltinFn::kAtanh:
+ return "atanh";
+ case BuiltinFn::kCeil:
+ return "ceil";
+ case BuiltinFn::kClamp:
+ return "clamp";
+ case BuiltinFn::kCos:
+ return "cos";
+ case BuiltinFn::kCosh:
+ return "cosh";
+ case BuiltinFn::kCountLeadingZeros:
+ return "countLeadingZeros";
+ case BuiltinFn::kCountOneBits:
+ return "countOneBits";
+ case BuiltinFn::kCountTrailingZeros:
+ return "countTrailingZeros";
+ case BuiltinFn::kCross:
+ return "cross";
+ case BuiltinFn::kDegrees:
+ return "degrees";
+ case BuiltinFn::kDeterminant:
+ return "determinant";
+ case BuiltinFn::kDistance:
+ return "distance";
+ case BuiltinFn::kDot:
+ return "dot";
+ case BuiltinFn::kDot4I8Packed:
+ return "dot4I8Packed";
+ case BuiltinFn::kDot4U8Packed:
+ return "dot4U8Packed";
+ case BuiltinFn::kDpdx:
+ return "dpdx";
+ case BuiltinFn::kDpdxCoarse:
+ return "dpdxCoarse";
+ case BuiltinFn::kDpdxFine:
+ return "dpdxFine";
+ case BuiltinFn::kDpdy:
+ return "dpdy";
+ case BuiltinFn::kDpdyCoarse:
+ return "dpdyCoarse";
+ case BuiltinFn::kDpdyFine:
+ return "dpdyFine";
+ case BuiltinFn::kExp:
+ return "exp";
+ case BuiltinFn::kExp2:
+ return "exp2";
+ case BuiltinFn::kExtractBits:
+ return "extractBits";
+ case BuiltinFn::kFaceForward:
+ return "faceForward";
+ case BuiltinFn::kFirstLeadingBit:
+ return "firstLeadingBit";
+ case BuiltinFn::kFirstTrailingBit:
+ return "firstTrailingBit";
+ case BuiltinFn::kFloor:
+ return "floor";
+ case BuiltinFn::kFma:
+ return "fma";
+ case BuiltinFn::kFract:
+ return "fract";
+ case BuiltinFn::kFrexp:
+ return "frexp";
+ case BuiltinFn::kFwidth:
+ return "fwidth";
+ case BuiltinFn::kFwidthCoarse:
+ return "fwidthCoarse";
+ case BuiltinFn::kFwidthFine:
+ return "fwidthFine";
+ case BuiltinFn::kInsertBits:
+ return "insertBits";
+ case BuiltinFn::kInverseSqrt:
+ return "inverseSqrt";
+ case BuiltinFn::kLdexp:
+ return "ldexp";
+ case BuiltinFn::kLength:
+ return "length";
+ case BuiltinFn::kLog:
+ return "log";
+ case BuiltinFn::kLog2:
+ return "log2";
+ case BuiltinFn::kMax:
+ return "max";
+ case BuiltinFn::kMin:
+ return "min";
+ case BuiltinFn::kMix:
+ return "mix";
+ case BuiltinFn::kModf:
+ return "modf";
+ case BuiltinFn::kNormalize:
+ return "normalize";
+ case BuiltinFn::kPack2X16Float:
+ return "pack2x16float";
+ case BuiltinFn::kPack2X16Snorm:
+ return "pack2x16snorm";
+ case BuiltinFn::kPack2X16Unorm:
+ return "pack2x16unorm";
+ case BuiltinFn::kPack4X8Snorm:
+ return "pack4x8snorm";
+ case BuiltinFn::kPack4X8Unorm:
+ return "pack4x8unorm";
+ case BuiltinFn::kPow:
+ return "pow";
+ case BuiltinFn::kQuantizeToF16:
+ return "quantizeToF16";
+ case BuiltinFn::kRadians:
+ return "radians";
+ case BuiltinFn::kReflect:
+ return "reflect";
+ case BuiltinFn::kRefract:
+ return "refract";
+ case BuiltinFn::kReverseBits:
+ return "reverseBits";
+ case BuiltinFn::kRound:
+ return "round";
+ case BuiltinFn::kSaturate:
+ return "saturate";
+ case BuiltinFn::kSelect:
+ return "select";
+ case BuiltinFn::kSign:
+ return "sign";
+ case BuiltinFn::kSin:
+ return "sin";
+ case BuiltinFn::kSinh:
+ return "sinh";
+ case BuiltinFn::kSmoothstep:
+ return "smoothstep";
+ case BuiltinFn::kSqrt:
+ return "sqrt";
+ case BuiltinFn::kStep:
+ return "step";
+ case BuiltinFn::kStorageBarrier:
+ return "storageBarrier";
+ case BuiltinFn::kTan:
+ return "tan";
+ case BuiltinFn::kTanh:
+ return "tanh";
+ case BuiltinFn::kTranspose:
+ return "transpose";
+ case BuiltinFn::kTrunc:
+ return "trunc";
+ case BuiltinFn::kUnpack2X16Float:
+ return "unpack2x16float";
+ case BuiltinFn::kUnpack2X16Snorm:
+ return "unpack2x16snorm";
+ case BuiltinFn::kUnpack2X16Unorm:
+ return "unpack2x16unorm";
+ case BuiltinFn::kUnpack4X8Snorm:
+ return "unpack4x8snorm";
+ case BuiltinFn::kUnpack4X8Unorm:
+ return "unpack4x8unorm";
+ case BuiltinFn::kWorkgroupBarrier:
+ return "workgroupBarrier";
+ case BuiltinFn::kWorkgroupUniformLoad:
+ return "workgroupUniformLoad";
+ case BuiltinFn::kTextureBarrier:
+ return "textureBarrier";
+ case BuiltinFn::kTextureDimensions:
+ return "textureDimensions";
+ case BuiltinFn::kTextureGather:
+ return "textureGather";
+ case BuiltinFn::kTextureGatherCompare:
+ return "textureGatherCompare";
+ case BuiltinFn::kTextureNumLayers:
+ return "textureNumLayers";
+ case BuiltinFn::kTextureNumLevels:
+ return "textureNumLevels";
+ case BuiltinFn::kTextureNumSamples:
+ return "textureNumSamples";
+ case BuiltinFn::kTextureSample:
+ return "textureSample";
+ case BuiltinFn::kTextureSampleBias:
+ return "textureSampleBias";
+ case BuiltinFn::kTextureSampleCompare:
+ return "textureSampleCompare";
+ case BuiltinFn::kTextureSampleCompareLevel:
+ return "textureSampleCompareLevel";
+ case BuiltinFn::kTextureSampleGrad:
+ return "textureSampleGrad";
+ case BuiltinFn::kTextureSampleLevel:
+ return "textureSampleLevel";
+ case BuiltinFn::kTextureSampleBaseClampToEdge:
+ return "textureSampleBaseClampToEdge";
+ case BuiltinFn::kTextureStore:
+ return "textureStore";
+ case BuiltinFn::kTextureLoad:
+ return "textureLoad";
+ case BuiltinFn::kAtomicLoad:
+ return "atomicLoad";
+ case BuiltinFn::kAtomicStore:
+ return "atomicStore";
+ case BuiltinFn::kAtomicAdd:
+ return "atomicAdd";
+ case BuiltinFn::kAtomicSub:
+ return "atomicSub";
+ case BuiltinFn::kAtomicMax:
+ return "atomicMax";
+ case BuiltinFn::kAtomicMin:
+ return "atomicMin";
+ case BuiltinFn::kAtomicAnd:
+ return "atomicAnd";
+ case BuiltinFn::kAtomicOr:
+ return "atomicOr";
+ case BuiltinFn::kAtomicXor:
+ return "atomicXor";
+ case BuiltinFn::kAtomicExchange:
+ return "atomicExchange";
+ case BuiltinFn::kAtomicCompareExchangeWeak:
+ return "atomicCompareExchangeWeak";
+ case BuiltinFn::kSubgroupBallot:
+ return "subgroupBallot";
+ case BuiltinFn::kSubgroupBroadcast:
+ return "subgroupBroadcast";
+ case BuiltinFn::kTintMaterialize:
+ return "_tint_materialize";
+ }
+ return "<unknown>";
+}
+
+bool IsCoarseDerivative(BuiltinFn f) {
+ return f == BuiltinFn::kDpdxCoarse || f == BuiltinFn::kDpdyCoarse ||
+ f == BuiltinFn::kFwidthCoarse;
+}
+
+bool IsFineDerivative(BuiltinFn f) {
+ return f == BuiltinFn::kDpdxFine || f == BuiltinFn::kDpdyFine || f == BuiltinFn::kFwidthFine;
+}
+
+bool IsDerivative(BuiltinFn f) {
+ return f == BuiltinFn::kDpdx || f == BuiltinFn::kDpdy || f == BuiltinFn::kFwidth ||
+ IsCoarseDerivative(f) || IsFineDerivative(f);
+}
+
+bool IsTexture(BuiltinFn f) {
+ return IsImageQuery(f) || //
+ f == BuiltinFn::kTextureGather || //
+ f == BuiltinFn::kTextureGatherCompare || //
+ f == BuiltinFn::kTextureLoad || //
+ f == BuiltinFn::kTextureSample || //
+ f == BuiltinFn::kTextureSampleBaseClampToEdge || //
+ f == BuiltinFn::kTextureSampleBias || //
+ f == BuiltinFn::kTextureSampleCompare || //
+ f == BuiltinFn::kTextureSampleCompareLevel || //
+ f == BuiltinFn::kTextureSampleGrad || //
+ f == BuiltinFn::kTextureSampleLevel || //
+ f == BuiltinFn::kTextureStore;
+}
+
+bool IsImageQuery(BuiltinFn f) {
+ return f == BuiltinFn::kTextureDimensions || f == BuiltinFn::kTextureNumLayers ||
+ f == BuiltinFn::kTextureNumLevels || f == BuiltinFn::kTextureNumSamples;
+}
+
+bool IsDataPacking(BuiltinFn f) {
+ return f == BuiltinFn::kPack4X8Snorm || f == BuiltinFn::kPack4X8Unorm ||
+ f == BuiltinFn::kPack2X16Snorm || f == BuiltinFn::kPack2X16Unorm ||
+ f == BuiltinFn::kPack2X16Float;
+}
+
+bool IsDataUnpacking(BuiltinFn f) {
+ return f == BuiltinFn::kUnpack4X8Snorm || f == BuiltinFn::kUnpack4X8Unorm ||
+ f == BuiltinFn::kUnpack2X16Snorm || f == BuiltinFn::kUnpack2X16Unorm ||
+ f == BuiltinFn::kUnpack2X16Float;
+}
+
+bool IsBarrier(BuiltinFn f) {
+ return f == BuiltinFn::kWorkgroupBarrier || f == BuiltinFn::kStorageBarrier ||
+ f == BuiltinFn::kTextureBarrier;
+}
+
+bool IsAtomic(BuiltinFn f) {
+ return f == BuiltinFn::kAtomicLoad || f == BuiltinFn::kAtomicStore ||
+ f == BuiltinFn::kAtomicAdd || f == BuiltinFn::kAtomicSub || f == BuiltinFn::kAtomicMax ||
+ f == BuiltinFn::kAtomicMin || f == BuiltinFn::kAtomicAnd || f == BuiltinFn::kAtomicOr ||
+ f == BuiltinFn::kAtomicXor || f == BuiltinFn::kAtomicExchange ||
+ f == BuiltinFn::kAtomicCompareExchangeWeak;
+}
+
+bool IsDP4a(BuiltinFn f) {
+ return f == BuiltinFn::kDot4I8Packed || f == BuiltinFn::kDot4U8Packed;
+}
+
+bool IsSubgroup(BuiltinFn f) {
+ return f == BuiltinFn::kSubgroupBallot || f == BuiltinFn::kSubgroupBroadcast;
+}
+
+bool HasSideEffects(BuiltinFn f) {
+ switch (f) {
+ case BuiltinFn::kAtomicAdd:
+ case BuiltinFn::kAtomicAnd:
+ case BuiltinFn::kAtomicCompareExchangeWeak:
+ case BuiltinFn::kAtomicExchange:
+ case BuiltinFn::kAtomicMax:
+ case BuiltinFn::kAtomicMin:
+ case BuiltinFn::kAtomicOr:
+ case BuiltinFn::kAtomicStore:
+ case BuiltinFn::kAtomicSub:
+ case BuiltinFn::kAtomicXor:
+ case BuiltinFn::kTextureStore:
+ case BuiltinFn::kWorkgroupUniformLoad:
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
+
+} // namespace tint::wgsl
diff --git a/src/tint/lang/wgsl/builtin_fn.cc.tmpl b/src/tint/lang/wgsl/builtin_fn.cc.tmpl
new file mode 100644
index 0000000..cf79bee
--- /dev/null
+++ b/src/tint/lang/wgsl/builtin_fn.cc.tmpl
@@ -0,0 +1,132 @@
+{{- /*
+--------------------------------------------------------------------------------
+Template file for use with tools/src/cmd/gen to generate builtin_fn.cc
+
+To update the generated file, run:
+ ./tools/run gen
+
+See:
+* tools/src/cmd/gen for structures used by this template
+* https://golang.org/pkg/text/template/ for documentation on the template syntax
+--------------------------------------------------------------------------------
+*/ -}}
+
+{{- $I := LoadIntrinsics "src/tint/lang/wgsl/wgsl.def" -}}
+#include "src/tint/lang/wgsl/builtin_fn.h"
+
+namespace tint::wgsl {
+
+BuiltinFn ParseBuiltinFn(std::string_view name) {
+{{- range $I.Sem.Builtins }}
+ if (name == "{{.Name}}") {
+ return BuiltinFn::k{{PascalCase .Name}};
+ }
+{{- end }}
+ return BuiltinFn::kNone;
+}
+
+const char* str(BuiltinFn i) {
+ switch (i) {
+ case BuiltinFn::kNone:
+ return "<none>";
+{{- range $I.Sem.Builtins }}
+ case BuiltinFn::k{{PascalCase .Name}}:
+ return "{{.Name}}";
+{{- end }}
+ }
+ return "<unknown>";
+}
+
+bool IsCoarseDerivative(BuiltinFn f) {
+ return f == BuiltinFn::kDpdxCoarse || f == BuiltinFn::kDpdyCoarse ||
+ f == BuiltinFn::kFwidthCoarse;
+}
+
+bool IsFineDerivative(BuiltinFn f) {
+ return f == BuiltinFn::kDpdxFine || f == BuiltinFn::kDpdyFine ||
+ f == BuiltinFn::kFwidthFine;
+}
+
+bool IsDerivative(BuiltinFn f) {
+ return f == BuiltinFn::kDpdx || f == BuiltinFn::kDpdy ||
+ f == BuiltinFn::kFwidth || IsCoarseDerivative(f) ||
+ IsFineDerivative(f);
+}
+
+bool IsTexture(BuiltinFn f) {
+ return IsImageQuery(f) || //
+ f == BuiltinFn::kTextureGather || //
+ f == BuiltinFn::kTextureGatherCompare || //
+ f == BuiltinFn::kTextureLoad || //
+ f == BuiltinFn::kTextureSample || //
+ f == BuiltinFn::kTextureSampleBaseClampToEdge || //
+ f == BuiltinFn::kTextureSampleBias || //
+ f == BuiltinFn::kTextureSampleCompare || //
+ f == BuiltinFn::kTextureSampleCompareLevel || //
+ f == BuiltinFn::kTextureSampleGrad || //
+ f == BuiltinFn::kTextureSampleLevel || //
+ f == BuiltinFn::kTextureStore;
+}
+
+bool IsImageQuery(BuiltinFn f) {
+ return f == BuiltinFn::kTextureDimensions ||
+ f == BuiltinFn::kTextureNumLayers || f == BuiltinFn::kTextureNumLevels ||
+ f == BuiltinFn::kTextureNumSamples;
+}
+
+bool IsDataPacking(BuiltinFn f) {
+ return f == BuiltinFn::kPack4X8Snorm || f == BuiltinFn::kPack4X8Unorm ||
+ f == BuiltinFn::kPack2X16Snorm || f == BuiltinFn::kPack2X16Unorm ||
+ f == BuiltinFn::kPack2X16Float;
+}
+
+bool IsDataUnpacking(BuiltinFn f) {
+ return f == BuiltinFn::kUnpack4X8Snorm || f == BuiltinFn::kUnpack4X8Unorm ||
+ f == BuiltinFn::kUnpack2X16Snorm || f == BuiltinFn::kUnpack2X16Unorm ||
+ f == BuiltinFn::kUnpack2X16Float;
+}
+
+bool IsBarrier(BuiltinFn f) {
+ return f == BuiltinFn::kWorkgroupBarrier || f == BuiltinFn::kStorageBarrier ||
+ f == BuiltinFn::kTextureBarrier;
+}
+
+bool IsAtomic(BuiltinFn f) {
+ return f == BuiltinFn::kAtomicLoad || f == BuiltinFn::kAtomicStore ||
+ f == BuiltinFn::kAtomicAdd || f == BuiltinFn::kAtomicSub ||
+ f == BuiltinFn::kAtomicMax || f == BuiltinFn::kAtomicMin ||
+ f == BuiltinFn::kAtomicAnd || f == BuiltinFn::kAtomicOr ||
+ f == BuiltinFn::kAtomicXor || f == BuiltinFn::kAtomicExchange ||
+ f == BuiltinFn::kAtomicCompareExchangeWeak;
+}
+
+bool IsDP4a(BuiltinFn f) {
+ return f == BuiltinFn::kDot4I8Packed || f == BuiltinFn::kDot4U8Packed;
+}
+
+bool IsSubgroup(BuiltinFn f) {
+ return f == BuiltinFn::kSubgroupBallot || f == BuiltinFn::kSubgroupBroadcast;
+}
+
+bool HasSideEffects(BuiltinFn f) {
+ switch (f) {
+ case BuiltinFn::kAtomicAdd:
+ case BuiltinFn::kAtomicAnd:
+ case BuiltinFn::kAtomicCompareExchangeWeak:
+ case BuiltinFn::kAtomicExchange:
+ case BuiltinFn::kAtomicMax:
+ case BuiltinFn::kAtomicMin:
+ case BuiltinFn::kAtomicOr:
+ case BuiltinFn::kAtomicStore:
+ case BuiltinFn::kAtomicSub:
+ case BuiltinFn::kAtomicXor:
+ case BuiltinFn::kTextureStore:
+ case BuiltinFn::kWorkgroupUniformLoad:
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
+
+} // namespace tint::wgsl
diff --git a/src/tint/lang/wgsl/builtin_fn.h b/src/tint/lang/wgsl/builtin_fn.h
new file mode 100644
index 0000000..724d36d
--- /dev/null
+++ b/src/tint/lang/wgsl/builtin_fn.h
@@ -0,0 +1,478 @@
+// Copyright 2023 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/src/cmd/gen' using the template:
+// src/tint/lang/wgsl/builtin_fn.h.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef SRC_TINT_LANG_WGSL_BUILTIN_FN_H_
+#define SRC_TINT_LANG_WGSL_BUILTIN_FN_H_
+
+#include <cstdint>
+#include <string>
+
+#include "src/tint/utils/traits/traits.h"
+
+// \cond DO_NOT_DOCUMENT
+namespace tint::wgsl {
+
+/// Enumerator of all builtin functions
+enum class BuiltinFn : uint8_t {
+ kAbs,
+ kAcos,
+ kAcosh,
+ kAll,
+ kAny,
+ kArrayLength,
+ kAsin,
+ kAsinh,
+ kAtan,
+ kAtan2,
+ kAtanh,
+ kCeil,
+ kClamp,
+ kCos,
+ kCosh,
+ kCountLeadingZeros,
+ kCountOneBits,
+ kCountTrailingZeros,
+ kCross,
+ kDegrees,
+ kDeterminant,
+ kDistance,
+ kDot,
+ kDot4I8Packed,
+ kDot4U8Packed,
+ kDpdx,
+ kDpdxCoarse,
+ kDpdxFine,
+ kDpdy,
+ kDpdyCoarse,
+ kDpdyFine,
+ kExp,
+ kExp2,
+ kExtractBits,
+ kFaceForward,
+ kFirstLeadingBit,
+ kFirstTrailingBit,
+ kFloor,
+ kFma,
+ kFract,
+ kFrexp,
+ kFwidth,
+ kFwidthCoarse,
+ kFwidthFine,
+ kInsertBits,
+ kInverseSqrt,
+ kLdexp,
+ kLength,
+ kLog,
+ kLog2,
+ kMax,
+ kMin,
+ kMix,
+ kModf,
+ kNormalize,
+ kPack2X16Float,
+ kPack2X16Snorm,
+ kPack2X16Unorm,
+ kPack4X8Snorm,
+ kPack4X8Unorm,
+ kPow,
+ kQuantizeToF16,
+ kRadians,
+ kReflect,
+ kRefract,
+ kReverseBits,
+ kRound,
+ kSaturate,
+ kSelect,
+ kSign,
+ kSin,
+ kSinh,
+ kSmoothstep,
+ kSqrt,
+ kStep,
+ kStorageBarrier,
+ kTan,
+ kTanh,
+ kTranspose,
+ kTrunc,
+ kUnpack2X16Float,
+ kUnpack2X16Snorm,
+ kUnpack2X16Unorm,
+ kUnpack4X8Snorm,
+ kUnpack4X8Unorm,
+ kWorkgroupBarrier,
+ kWorkgroupUniformLoad,
+ kTextureBarrier,
+ kTextureDimensions,
+ kTextureGather,
+ kTextureGatherCompare,
+ kTextureNumLayers,
+ kTextureNumLevels,
+ kTextureNumSamples,
+ kTextureSample,
+ kTextureSampleBias,
+ kTextureSampleCompare,
+ kTextureSampleCompareLevel,
+ kTextureSampleGrad,
+ kTextureSampleLevel,
+ kTextureSampleBaseClampToEdge,
+ kTextureStore,
+ kTextureLoad,
+ kAtomicLoad,
+ kAtomicStore,
+ kAtomicAdd,
+ kAtomicSub,
+ kAtomicMax,
+ kAtomicMin,
+ kAtomicAnd,
+ kAtomicOr,
+ kAtomicXor,
+ kAtomicExchange,
+ kAtomicCompareExchangeWeak,
+ kSubgroupBallot,
+ kSubgroupBroadcast,
+ kTintMaterialize,
+ kNone,
+};
+
+/// Matches the BuiltinFn by name
+/// @param name the builtin name to parse
+/// @returns the parsed BuiltinFn, or BuiltinFn::kNone if `name` did not
+/// match any builtin function.
+BuiltinFn ParseBuiltinFn(std::string_view name);
+
+/// @returns the name of the builtin function type. The spelling, including
+/// case, matches the name in the WGSL spec.
+const char* str(BuiltinFn i);
+
+/// Emits the name of the builtin function type. The spelling, including case,
+/// matches the name in the WGSL spec.
+template <typename STREAM, typename = traits::EnableIfIsOStream<STREAM>>
+auto& operator<<(STREAM& o, BuiltinFn i) {
+ return o << str(i);
+}
+
+/// All builtin functions
+constexpr BuiltinFn kBuiltinFns[] = {
+ BuiltinFn::kAbs,
+ BuiltinFn::kAcos,
+ BuiltinFn::kAcosh,
+ BuiltinFn::kAll,
+ BuiltinFn::kAny,
+ BuiltinFn::kArrayLength,
+ BuiltinFn::kAsin,
+ BuiltinFn::kAsinh,
+ BuiltinFn::kAtan,
+ BuiltinFn::kAtan2,
+ BuiltinFn::kAtanh,
+ BuiltinFn::kCeil,
+ BuiltinFn::kClamp,
+ BuiltinFn::kCos,
+ BuiltinFn::kCosh,
+ BuiltinFn::kCountLeadingZeros,
+ BuiltinFn::kCountOneBits,
+ BuiltinFn::kCountTrailingZeros,
+ BuiltinFn::kCross,
+ BuiltinFn::kDegrees,
+ BuiltinFn::kDeterminant,
+ BuiltinFn::kDistance,
+ BuiltinFn::kDot,
+ BuiltinFn::kDot4I8Packed,
+ BuiltinFn::kDot4U8Packed,
+ BuiltinFn::kDpdx,
+ BuiltinFn::kDpdxCoarse,
+ BuiltinFn::kDpdxFine,
+ BuiltinFn::kDpdy,
+ BuiltinFn::kDpdyCoarse,
+ BuiltinFn::kDpdyFine,
+ BuiltinFn::kExp,
+ BuiltinFn::kExp2,
+ BuiltinFn::kExtractBits,
+ BuiltinFn::kFaceForward,
+ BuiltinFn::kFirstLeadingBit,
+ BuiltinFn::kFirstTrailingBit,
+ BuiltinFn::kFloor,
+ BuiltinFn::kFma,
+ BuiltinFn::kFract,
+ BuiltinFn::kFrexp,
+ BuiltinFn::kFwidth,
+ BuiltinFn::kFwidthCoarse,
+ BuiltinFn::kFwidthFine,
+ BuiltinFn::kInsertBits,
+ BuiltinFn::kInverseSqrt,
+ BuiltinFn::kLdexp,
+ BuiltinFn::kLength,
+ BuiltinFn::kLog,
+ BuiltinFn::kLog2,
+ BuiltinFn::kMax,
+ BuiltinFn::kMin,
+ BuiltinFn::kMix,
+ BuiltinFn::kModf,
+ BuiltinFn::kNormalize,
+ BuiltinFn::kPack2X16Float,
+ BuiltinFn::kPack2X16Snorm,
+ BuiltinFn::kPack2X16Unorm,
+ BuiltinFn::kPack4X8Snorm,
+ BuiltinFn::kPack4X8Unorm,
+ BuiltinFn::kPow,
+ BuiltinFn::kQuantizeToF16,
+ BuiltinFn::kRadians,
+ BuiltinFn::kReflect,
+ BuiltinFn::kRefract,
+ BuiltinFn::kReverseBits,
+ BuiltinFn::kRound,
+ BuiltinFn::kSaturate,
+ BuiltinFn::kSelect,
+ BuiltinFn::kSign,
+ BuiltinFn::kSin,
+ BuiltinFn::kSinh,
+ BuiltinFn::kSmoothstep,
+ BuiltinFn::kSqrt,
+ BuiltinFn::kStep,
+ BuiltinFn::kStorageBarrier,
+ BuiltinFn::kTan,
+ BuiltinFn::kTanh,
+ BuiltinFn::kTranspose,
+ BuiltinFn::kTrunc,
+ BuiltinFn::kUnpack2X16Float,
+ BuiltinFn::kUnpack2X16Snorm,
+ BuiltinFn::kUnpack2X16Unorm,
+ BuiltinFn::kUnpack4X8Snorm,
+ BuiltinFn::kUnpack4X8Unorm,
+ BuiltinFn::kWorkgroupBarrier,
+ BuiltinFn::kWorkgroupUniformLoad,
+ BuiltinFn::kTextureBarrier,
+ BuiltinFn::kTextureDimensions,
+ BuiltinFn::kTextureGather,
+ BuiltinFn::kTextureGatherCompare,
+ BuiltinFn::kTextureNumLayers,
+ BuiltinFn::kTextureNumLevels,
+ BuiltinFn::kTextureNumSamples,
+ BuiltinFn::kTextureSample,
+ BuiltinFn::kTextureSampleBias,
+ BuiltinFn::kTextureSampleCompare,
+ BuiltinFn::kTextureSampleCompareLevel,
+ BuiltinFn::kTextureSampleGrad,
+ BuiltinFn::kTextureSampleLevel,
+ BuiltinFn::kTextureSampleBaseClampToEdge,
+ BuiltinFn::kTextureStore,
+ BuiltinFn::kTextureLoad,
+ BuiltinFn::kAtomicLoad,
+ BuiltinFn::kAtomicStore,
+ BuiltinFn::kAtomicAdd,
+ BuiltinFn::kAtomicSub,
+ BuiltinFn::kAtomicMax,
+ BuiltinFn::kAtomicMin,
+ BuiltinFn::kAtomicAnd,
+ BuiltinFn::kAtomicOr,
+ BuiltinFn::kAtomicXor,
+ BuiltinFn::kAtomicExchange,
+ BuiltinFn::kAtomicCompareExchangeWeak,
+ BuiltinFn::kSubgroupBallot,
+ BuiltinFn::kSubgroupBroadcast,
+ BuiltinFn::kTintMaterialize,
+};
+
+/// All builtin function names
+constexpr const char* kBuiltinFnStrings[] = {
+ "abs",
+ "acos",
+ "acosh",
+ "all",
+ "any",
+ "arrayLength",
+ "asin",
+ "asinh",
+ "atan",
+ "atan2",
+ "atanh",
+ "ceil",
+ "clamp",
+ "cos",
+ "cosh",
+ "countLeadingZeros",
+ "countOneBits",
+ "countTrailingZeros",
+ "cross",
+ "degrees",
+ "determinant",
+ "distance",
+ "dot",
+ "dot4I8Packed",
+ "dot4U8Packed",
+ "dpdx",
+ "dpdxCoarse",
+ "dpdxFine",
+ "dpdy",
+ "dpdyCoarse",
+ "dpdyFine",
+ "exp",
+ "exp2",
+ "extractBits",
+ "faceForward",
+ "firstLeadingBit",
+ "firstTrailingBit",
+ "floor",
+ "fma",
+ "fract",
+ "frexp",
+ "fwidth",
+ "fwidthCoarse",
+ "fwidthFine",
+ "insertBits",
+ "inverseSqrt",
+ "ldexp",
+ "length",
+ "log",
+ "log2",
+ "max",
+ "min",
+ "mix",
+ "modf",
+ "normalize",
+ "pack2x16float",
+ "pack2x16snorm",
+ "pack2x16unorm",
+ "pack4x8snorm",
+ "pack4x8unorm",
+ "pow",
+ "quantizeToF16",
+ "radians",
+ "reflect",
+ "refract",
+ "reverseBits",
+ "round",
+ "saturate",
+ "select",
+ "sign",
+ "sin",
+ "sinh",
+ "smoothstep",
+ "sqrt",
+ "step",
+ "storageBarrier",
+ "tan",
+ "tanh",
+ "transpose",
+ "trunc",
+ "unpack2x16float",
+ "unpack2x16snorm",
+ "unpack2x16unorm",
+ "unpack4x8snorm",
+ "unpack4x8unorm",
+ "workgroupBarrier",
+ "workgroupUniformLoad",
+ "textureBarrier",
+ "textureDimensions",
+ "textureGather",
+ "textureGatherCompare",
+ "textureNumLayers",
+ "textureNumLevels",
+ "textureNumSamples",
+ "textureSample",
+ "textureSampleBias",
+ "textureSampleCompare",
+ "textureSampleCompareLevel",
+ "textureSampleGrad",
+ "textureSampleLevel",
+ "textureSampleBaseClampToEdge",
+ "textureStore",
+ "textureLoad",
+ "atomicLoad",
+ "atomicStore",
+ "atomicAdd",
+ "atomicSub",
+ "atomicMax",
+ "atomicMin",
+ "atomicAnd",
+ "atomicOr",
+ "atomicXor",
+ "atomicExchange",
+ "atomicCompareExchangeWeak",
+ "subgroupBallot",
+ "subgroupBroadcast",
+ "_tint_materialize",
+};
+
+/// Determines if the given `f` is a coarse derivative.
+/// @param f the builtin type
+/// @returns true if the given derivative is coarse.
+bool IsCoarseDerivative(BuiltinFn f);
+
+/// Determines if the given `f` is a fine derivative.
+/// @param f the builtin type
+/// @returns true if the given derivative is fine.
+bool IsFineDerivative(BuiltinFn f);
+
+/// Determine if the given `f` is a derivative builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a derivative builtin
+bool IsDerivative(BuiltinFn f);
+
+/// Determines if the given `f` is a texture operation builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a texture operation builtin
+bool IsTexture(BuiltinFn f);
+
+/// Determines if the given `f` is an image query builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is an image query builtin
+bool IsImageQuery(BuiltinFn f);
+
+/// Determines if the given `f` is a data packing builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a data packing builtin
+bool IsDataPacking(BuiltinFn f);
+
+/// Determines if the given `f` is a data unpacking builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a data unpacking builtin
+bool IsDataUnpacking(BuiltinFn f);
+
+/// Determines if the given `f` is a barrier builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a barrier builtin
+bool IsBarrier(BuiltinFn f);
+
+/// Determines if the given `f` is an atomic builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is an atomic builtin
+bool IsAtomic(BuiltinFn f);
+
+/// Determines if the given `f` is a DP4a builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a DP4a builtin
+bool IsDP4a(BuiltinFn f);
+
+/// Determines if the given `f` is a subgroup builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a subgroup builtin
+bool IsSubgroup(BuiltinFn f);
+
+/// Determines if the given `f` may have side-effects (i.e. writes to at least one of its inputs)
+/// @returns true if intrinsic may have side-effects
+bool HasSideEffects(BuiltinFn f);
+
+} // namespace tint::wgsl
+// \endcond
+
+#endif // SRC_TINT_LANG_WGSL_BUILTIN_FN_H_
diff --git a/src/tint/lang/wgsl/builtin_fn.h.tmpl b/src/tint/lang/wgsl/builtin_fn.h.tmpl
new file mode 100644
index 0000000..e69eda2
--- /dev/null
+++ b/src/tint/lang/wgsl/builtin_fn.h.tmpl
@@ -0,0 +1,128 @@
+{{- /*
+--------------------------------------------------------------------------------
+Template file for use with tools/src/cmd/gen to generate builtin_fn.h
+
+To update the generated file, run:
+ ./tools/run gen
+
+See:
+* tools/src/cmd/gen for structures used by this template
+* https://golang.org/pkg/text/template/ for documentation on the template syntax
+--------------------------------------------------------------------------------
+*/ -}}
+
+{{- $I := LoadIntrinsics "src/tint/lang/wgsl/wgsl.def" -}}
+
+#ifndef SRC_TINT_LANG_WGSL_BUILTIN_FN_H_
+#define SRC_TINT_LANG_WGSL_BUILTIN_FN_H_
+
+#include <cstdint>
+#include <string>
+
+#include "src/tint/utils/traits/traits.h"
+
+// \cond DO_NOT_DOCUMENT
+namespace tint::wgsl {
+
+/// Enumerator of all builtin functions
+enum class BuiltinFn : uint8_t {
+{{- range $I.Sem.Builtins }}
+ k{{PascalCase .Name}},
+{{- end }}
+ kNone,
+};
+
+/// Matches the BuiltinFn by name
+/// @param name the builtin name to parse
+/// @returns the parsed BuiltinFn, or BuiltinFn::kNone if `name` did not
+/// match any builtin function.
+BuiltinFn ParseBuiltinFn(std::string_view name);
+
+/// @returns the name of the builtin function type. The spelling, including
+/// case, matches the name in the WGSL spec.
+const char* str(BuiltinFn i);
+
+/// Emits the name of the builtin function type. The spelling, including case,
+/// matches the name in the WGSL spec.
+template <typename STREAM, typename = traits::EnableIfIsOStream<STREAM>>
+auto& operator<<(STREAM& o, BuiltinFn i) {
+ return o << str(i);
+}
+
+/// All builtin functions
+constexpr BuiltinFn kBuiltinFns[] = {
+{{- range $I.Sem.Builtins }}
+ BuiltinFn::k{{PascalCase .Name}},
+{{- end }}
+};
+
+/// All builtin function names
+constexpr const char* kBuiltinFnStrings[] = {
+{{- range $I.Sem.Builtins }}
+ "{{.Name}}",
+{{- end }}
+};
+
+/// Determines if the given `f` is a coarse derivative.
+/// @param f the builtin type
+/// @returns true if the given derivative is coarse.
+bool IsCoarseDerivative(BuiltinFn f);
+
+/// Determines if the given `f` is a fine derivative.
+/// @param f the builtin type
+/// @returns true if the given derivative is fine.
+bool IsFineDerivative(BuiltinFn f);
+
+/// Determine if the given `f` is a derivative builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a derivative builtin
+bool IsDerivative(BuiltinFn f);
+
+/// Determines if the given `f` is a texture operation builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a texture operation builtin
+bool IsTexture(BuiltinFn f);
+
+/// Determines if the given `f` is an image query builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is an image query builtin
+bool IsImageQuery(BuiltinFn f);
+
+/// Determines if the given `f` is a data packing builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a data packing builtin
+bool IsDataPacking(BuiltinFn f);
+
+/// Determines if the given `f` is a data unpacking builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a data unpacking builtin
+bool IsDataUnpacking(BuiltinFn f);
+
+/// Determines if the given `f` is a barrier builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a barrier builtin
+bool IsBarrier(BuiltinFn f);
+
+/// Determines if the given `f` is an atomic builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is an atomic builtin
+bool IsAtomic(BuiltinFn f);
+
+/// Determines if the given `f` is a DP4a builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a DP4a builtin
+bool IsDP4a(BuiltinFn f);
+
+/// Determines if the given `f` is a subgroup builtin.
+/// @param f the builtin type
+/// @returns true if the given `f` is a subgroup builtin
+bool IsSubgroup(BuiltinFn f);
+
+/// Determines if the given `f` may have side-effects (i.e. writes to at least one of its inputs)
+/// @returns true if intrinsic may have side-effects
+bool HasSideEffects(BuiltinFn f);
+
+} // namespace tint::wgsl
+// \endcond
+
+#endif // SRC_TINT_LANG_WGSL_BUILTIN_FN_H_
diff --git a/src/tint/lang/wgsl/helpers/BUILD.bazel b/src/tint/lang/wgsl/helpers/BUILD.bazel
index c9687b0..7162fb1 100644
--- a/src/tint/lang/wgsl/helpers/BUILD.bazel
+++ b/src/tint/lang/wgsl/helpers/BUILD.bazel
@@ -85,6 +85,7 @@
"//src/tint/lang/wgsl/helpers",
"//src/tint/lang/wgsl/program",
"//src/tint/lang/wgsl/reader",
+ "//src/tint/lang/wgsl/reader/lower",
"//src/tint/lang/wgsl/reader/program_to_ir",
"//src/tint/lang/wgsl/resolver",
"//src/tint/lang/wgsl/sem",
diff --git a/src/tint/lang/wgsl/helpers/BUILD.cmake b/src/tint/lang/wgsl/helpers/BUILD.cmake
index 8cf2e47..8781482 100644
--- a/src/tint/lang/wgsl/helpers/BUILD.cmake
+++ b/src/tint/lang/wgsl/helpers/BUILD.cmake
@@ -84,6 +84,7 @@
tint_lang_wgsl_helpers
tint_lang_wgsl_program
tint_lang_wgsl_reader
+ tint_lang_wgsl_reader_lower
tint_lang_wgsl_reader_program_to_ir
tint_lang_wgsl_resolver
tint_lang_wgsl_sem
diff --git a/src/tint/lang/wgsl/helpers/BUILD.gn b/src/tint/lang/wgsl/helpers/BUILD.gn
index be773f2..57843c5 100644
--- a/src/tint/lang/wgsl/helpers/BUILD.gn
+++ b/src/tint/lang/wgsl/helpers/BUILD.gn
@@ -87,6 +87,7 @@
"${tint_src_dir}/lang/wgsl/helpers",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/reader",
+ "${tint_src_dir}/lang/wgsl/reader/lower",
"${tint_src_dir}/lang/wgsl/reader/program_to_ir",
"${tint_src_dir}/lang/wgsl/resolver",
"${tint_src_dir}/lang/wgsl/sem",
diff --git a/src/tint/lang/wgsl/helpers/ir_program_test.h b/src/tint/lang/wgsl/helpers/ir_program_test.h
index 615e9ee..fb5fd01 100644
--- a/src/tint/lang/wgsl/helpers/ir_program_test.h
+++ b/src/tint/lang/wgsl/helpers/ir_program_test.h
@@ -24,6 +24,7 @@
#include "src/tint/lang/core/ir/validator.h"
#include "src/tint/lang/core/number.h"
#include "src/tint/lang/wgsl/program/program_builder.h"
+#include "src/tint/lang/wgsl/reader/lower/lower.h"
#include "src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h"
#include "src/tint/lang/wgsl/reader/reader.h"
#include "src/tint/lang/wgsl/resolver/resolve.h"
@@ -38,8 +39,8 @@
IRProgramTestBase() = default;
~IRProgramTestBase() override = default;
- /// Build the module, cleaning up the program before returning.
- /// @returns the generated module
+ /// Builds a core-dialect module from this ProgramBuilder.
+ /// @returns the generated core-dialect module
tint::Result<core::ir::Module> Build() {
Program program{resolver::Resolve(*this)};
if (!program.IsValid()) {
@@ -47,11 +48,17 @@
}
auto result = wgsl::reader::ProgramToIR(program);
- if (result) {
- auto validated = core::ir::Validate(result.Get());
- if (!validated) {
- return validated.Failure();
- }
+ if (!result) {
+ return result.Failure();
+ }
+
+ // WGSL-dialect -> core-dialect
+ if (auto lower = wgsl::reader::Lower(result.Get()); !lower) {
+ return lower.Failure();
+ }
+
+ if (auto validate = core::ir::Validate(result.Get()); !validate) {
+ return validate.Failure();
}
return result;
}
@@ -59,15 +66,10 @@
/// Build the module from the given WGSL.
/// @param wgsl the WGSL to convert to IR
/// @returns the generated module
- tint::Result<core::ir::Module> Build(std::string wgsl) {
+ Result<core::ir::Module> Build(std::string wgsl) {
#if TINT_BUILD_WGSL_READER
Source::File file("test.wgsl", std::move(wgsl));
- auto program = wgsl::reader::Parse(&file);
- if (!program.IsValid()) {
- return Failure{program.Diagnostics()};
- }
-
- auto result = wgsl::reader::ProgramToIR(program);
+ auto result = wgsl::reader::WgslToIR(&file);
if (result) {
auto validated = core::ir::Validate(result.Get());
if (!validated) {
diff --git a/src/tint/lang/wgsl/inspector/BUILD.bazel b/src/tint/lang/wgsl/inspector/BUILD.bazel
index 86f9897..edbb595 100644
--- a/src/tint/lang/wgsl/inspector/BUILD.bazel
+++ b/src/tint/lang/wgsl/inspector/BUILD.bazel
@@ -77,6 +77,7 @@
"//src/tint/api/common",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
diff --git a/src/tint/lang/wgsl/inspector/BUILD.cmake b/src/tint/lang/wgsl/inspector/BUILD.cmake
index 5c0e910..8cfe979 100644
--- a/src/tint/lang/wgsl/inspector/BUILD.cmake
+++ b/src/tint/lang/wgsl/inspector/BUILD.cmake
@@ -76,6 +76,7 @@
tint_api_common
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
diff --git a/src/tint/lang/wgsl/inspector/BUILD.gn b/src/tint/lang/wgsl/inspector/BUILD.gn
index 00feb25..566230b 100644
--- a/src/tint/lang/wgsl/inspector/BUILD.gn
+++ b/src/tint/lang/wgsl/inspector/BUILD.gn
@@ -79,6 +79,7 @@
"${tint_src_dir}/api/common",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
diff --git a/src/tint/lang/wgsl/intrinsic/BUILD.bazel b/src/tint/lang/wgsl/intrinsic/BUILD.bazel
new file mode 100644
index 0000000..9f81589
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/BUILD.bazel
@@ -0,0 +1,26 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+
diff --git a/src/tint/lang/wgsl/intrinsic/BUILD.cmake b/src/tint/lang/wgsl/intrinsic/BUILD.cmake
new file mode 100644
index 0000000..f5bf63c
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/BUILD.cmake
@@ -0,0 +1,24 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+include(lang/wgsl/intrinsic/data/BUILD.cmake)
diff --git a/src/tint/lang/wgsl/intrinsic/BUILD.gn b/src/tint/lang/wgsl/intrinsic/BUILD.gn
new file mode 100644
index 0000000..b502e46
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/BUILD.gn
@@ -0,0 +1,26 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+import("../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
diff --git a/src/tint/lang/wgsl/intrinsic/data/BUILD.bazel b/src/tint/lang/wgsl/intrinsic/data/BUILD.bazel
new file mode 100644
index 0000000..7a62681
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/data/BUILD.bazel
@@ -0,0 +1,56 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+ name = "data",
+ srcs = [
+ "data.cc",
+ ],
+ hdrs = [
+ "data.h",
+ ],
+ deps = [
+ "//src/tint/lang/core",
+ "//src/tint/lang/core/constant",
+ "//src/tint/lang/core/intrinsic",
+ "//src/tint/lang/core/intrinsic/data",
+ "//src/tint/lang/core/type",
+ "//src/tint/utils/containers",
+ "//src/tint/utils/diagnostic",
+ "//src/tint/utils/ice",
+ "//src/tint/utils/id",
+ "//src/tint/utils/macros",
+ "//src/tint/utils/math",
+ "//src/tint/utils/memory",
+ "//src/tint/utils/result",
+ "//src/tint/utils/rtti",
+ "//src/tint/utils/symbol",
+ "//src/tint/utils/text",
+ "//src/tint/utils/traits",
+ ],
+ copts = COPTS,
+ visibility = ["//visibility:public"],
+)
+
diff --git a/src/tint/lang/wgsl/intrinsic/data/BUILD.cmake b/src/tint/lang/wgsl/intrinsic/data/BUILD.cmake
new file mode 100644
index 0000000..d676529
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/data/BUILD.cmake
@@ -0,0 +1,51 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+################################################################################
+# Target: tint_lang_wgsl_intrinsic_data
+# Kind: lib
+################################################################################
+tint_add_target(tint_lang_wgsl_intrinsic_data lib
+ lang/wgsl/intrinsic/data/data.cc
+ lang/wgsl/intrinsic/data/data.h
+)
+
+tint_target_add_dependencies(tint_lang_wgsl_intrinsic_data lib
+ tint_lang_core
+ tint_lang_core_constant
+ tint_lang_core_intrinsic
+ tint_lang_core_intrinsic_data
+ tint_lang_core_type
+ tint_utils_containers
+ tint_utils_diagnostic
+ tint_utils_ice
+ tint_utils_id
+ tint_utils_macros
+ tint_utils_math
+ tint_utils_memory
+ tint_utils_result
+ tint_utils_rtti
+ tint_utils_symbol
+ tint_utils_text
+ tint_utils_traits
+)
diff --git a/src/tint/lang/wgsl/intrinsic/data/BUILD.gn b/src/tint/lang/wgsl/intrinsic/data/BUILD.gn
new file mode 100644
index 0000000..ba1f02a
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/data/BUILD.gn
@@ -0,0 +1,52 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+import("../../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+libtint_source_set("data") {
+ sources = [
+ "data.cc",
+ "data.h",
+ ]
+ deps = [
+ "${tint_src_dir}/lang/core",
+ "${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/intrinsic",
+ "${tint_src_dir}/lang/core/intrinsic/data",
+ "${tint_src_dir}/lang/core/type",
+ "${tint_src_dir}/utils/containers",
+ "${tint_src_dir}/utils/diagnostic",
+ "${tint_src_dir}/utils/ice",
+ "${tint_src_dir}/utils/id",
+ "${tint_src_dir}/utils/macros",
+ "${tint_src_dir}/utils/math",
+ "${tint_src_dir}/utils/memory",
+ "${tint_src_dir}/utils/result",
+ "${tint_src_dir}/utils/rtti",
+ "${tint_src_dir}/utils/symbol",
+ "${tint_src_dir}/utils/text",
+ "${tint_src_dir}/utils/traits",
+ ]
+}
diff --git a/src/tint/lang/wgsl/intrinsic/data/data.cc b/src/tint/lang/wgsl/intrinsic/data/data.cc
new file mode 100644
index 0000000..4548260
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/data/data.cc
@@ -0,0 +1,12273 @@
+// Copyright 2023 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/src/cmd/gen' using the template:
+// src/tint/lang/wgsl/intrinsic/data/data.cc.tmpl
+//
+// To regenerate run: './tools/run gen'
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+#include <limits>
+#include <string>
+
+#include "src/tint/lang/core/intrinsic/data/type_matchers.h"
+#include "src/tint/lang/wgsl/intrinsic/data/data.h"
+#include "src/tint/utils/text/string_stream.h"
+
+namespace tint::wgsl::intrinsic::data {
+
+using namespace tint::core::intrinsic::data; // NOLINT(build/namespaces)
+
+namespace {
+
+using ConstEvalFunctionIndex = tint::core::intrinsic::ConstEvalFunctionIndex;
+using IntrinsicInfo = tint::core::intrinsic::IntrinsicInfo;
+using MatchState = tint::core::intrinsic::MatchState;
+using Number = tint::core::intrinsic::Number;
+using NumberMatcher = tint::core::intrinsic::NumberMatcher;
+using NumberMatcherIndex = tint::core::intrinsic::NumberMatcherIndex;
+using NumberMatcherIndicesIndex = tint::core::intrinsic::NumberMatcherIndicesIndex;
+using OverloadFlag = tint::core::intrinsic::OverloadFlag;
+using OverloadFlags = tint::core::intrinsic::OverloadFlags;
+using OverloadIndex = tint::core::intrinsic::OverloadIndex;
+using OverloadInfo = tint::core::intrinsic::OverloadInfo;
+using ParameterIndex = tint::core::intrinsic::ParameterIndex;
+using ParameterInfo = tint::core::intrinsic::ParameterInfo;
+using StringStream = tint::StringStream;
+using TemplateNumberIndex = tint::core::intrinsic::TemplateNumberIndex;
+using TemplateNumberInfo = tint::core::intrinsic::TemplateNumberInfo;
+using TemplateTypeIndex = tint::core::intrinsic::TemplateTypeIndex;
+using TemplateTypeInfo = tint::core::intrinsic::TemplateTypeInfo;
+using Type = tint::core::type::Type;
+using TypeMatcher = tint::core::intrinsic::TypeMatcher;
+using TypeMatcherIndex = tint::core::intrinsic::TypeMatcherIndex;
+using TypeMatcherIndicesIndex = tint::core::intrinsic::TypeMatcherIndicesIndex;
+
+template <size_t N>
+using TemplateNumberMatcher = tint::core::intrinsic::TemplateNumberMatcher<N>;
+
+template <size_t N>
+using TemplateTypeMatcher = tint::core::intrinsic::TemplateTypeMatcher<N>;
+
+// clang-format off
+
+/// TypeMatcher for 'type bool'
+constexpr TypeMatcher kBoolMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchBool(state, ty)) {
+ return nullptr;
+ }
+ return BuildBool(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "bool";
+ }
+};
+
+
+/// TypeMatcher for 'type ia'
+constexpr TypeMatcher kIaMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchIa(state, ty)) {
+ return nullptr;
+ }
+ return BuildIa(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ ss << "abstract-int";
+ return ss.str();
+ }
+};
+
+
+/// TypeMatcher for 'type fa'
+constexpr TypeMatcher kFaMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchFa(state, ty)) {
+ return nullptr;
+ }
+ return BuildFa(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ ss << "abstract-float";
+ return ss.str();
+ }
+};
+
+
+/// TypeMatcher for 'type i32'
+constexpr TypeMatcher kI32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchI32(state, ty)) {
+ return nullptr;
+ }
+ return BuildI32(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "i32";
+ }
+};
+
+
+/// TypeMatcher for 'type u32'
+constexpr TypeMatcher kU32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchU32(state, ty)) {
+ return nullptr;
+ }
+ return BuildU32(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "u32";
+ }
+};
+
+
+/// TypeMatcher for 'type f32'
+constexpr TypeMatcher kF32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchF32(state, ty)) {
+ return nullptr;
+ }
+ return BuildF32(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "f32";
+ }
+};
+
+
+/// TypeMatcher for 'type f16'
+constexpr TypeMatcher kF16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchF16(state, ty)) {
+ return nullptr;
+ }
+ return BuildF16(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "f16";
+ }
+};
+
+
+/// TypeMatcher for 'type vec2'
+constexpr TypeMatcher kVec2Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchVec2(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildVec2(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "vec2<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type vec3'
+constexpr TypeMatcher kVec3Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchVec3(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildVec3(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "vec3<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type vec4'
+constexpr TypeMatcher kVec4Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchVec4(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildVec4(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "vec4<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat2x2'
+constexpr TypeMatcher kMat2X2Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat2X2(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat2X2(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat2x2<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat2x3'
+constexpr TypeMatcher kMat2X3Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat2X3(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat2X3(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat2x3<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat2x4'
+constexpr TypeMatcher kMat2X4Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat2X4(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat2X4(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat2x4<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat3x2'
+constexpr TypeMatcher kMat3X2Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat3X2(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat3X2(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat3x2<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat3x3'
+constexpr TypeMatcher kMat3X3Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat3X3(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat3X3(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat3x3<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat3x4'
+constexpr TypeMatcher kMat3X4Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat3X4(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat3X4(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat3x4<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat4x2'
+constexpr TypeMatcher kMat4X2Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat4X2(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat4X2(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat4x2<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat4x3'
+constexpr TypeMatcher kMat4X3Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat4X3(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat4X3(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat4x3<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type mat4x4'
+constexpr TypeMatcher kMat4X4Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchMat4X4(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat4X4(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "mat4x4<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type vec'
+constexpr TypeMatcher kVecMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number N = Number::invalid;
+ const Type* T = nullptr;
+ if (!MatchVec(state, ty, N, T)) {
+ return nullptr;
+ }
+ N = state.Num(N);
+ if (!N.IsValid()) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildVec(state, ty, N, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string N = state->NumName();
+ const std::string T = state->TypeName();
+ StringStream ss;
+ ss << "vec" << N << "<" << T << ">";
+ return ss.str();
+ }
+};
+
+
+/// TypeMatcher for 'type mat'
+constexpr TypeMatcher kMatMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number N = Number::invalid;
+ Number M = Number::invalid;
+ const Type* T = nullptr;
+ if (!MatchMat(state, ty, N, M, T)) {
+ return nullptr;
+ }
+ N = state.Num(N);
+ if (!N.IsValid()) {
+ return nullptr;
+ }
+ M = state.Num(M);
+ if (!M.IsValid()) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildMat(state, ty, N, M, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string N = state->NumName();
+ const std::string M = state->NumName();
+ const std::string T = state->TypeName();
+ StringStream ss;
+ ss << "mat" << N << "x" << M << "<" << T << ">";
+ return ss.str();
+ }
+};
+
+
+/// TypeMatcher for 'type ptr'
+constexpr TypeMatcher kPtrMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number S = Number::invalid;
+ const Type* T = nullptr;
+ Number A = Number::invalid;
+ if (!MatchPtr(state, ty, S, T, A)) {
+ return nullptr;
+ }
+ S = state.Num(S);
+ if (!S.IsValid()) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ A = state.Num(A);
+ if (!A.IsValid()) {
+ return nullptr;
+ }
+ return BuildPtr(state, ty, S, T, A);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string S = state->NumName();
+ const std::string T = state->TypeName();
+ const std::string A = state->NumName();
+ return "ptr<" + S + ", " + T + ", " + A + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type atomic'
+constexpr TypeMatcher kAtomicMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchAtomic(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildAtomic(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "atomic<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type array'
+constexpr TypeMatcher kArrayMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchArray(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildArray(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "array<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type sampler'
+constexpr TypeMatcher kSamplerMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchSampler(state, ty)) {
+ return nullptr;
+ }
+ return BuildSampler(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "sampler";
+ }
+};
+
+
+/// TypeMatcher for 'type sampler_comparison'
+constexpr TypeMatcher kSamplerComparisonMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchSamplerComparison(state, ty)) {
+ return nullptr;
+ }
+ return BuildSamplerComparison(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "sampler_comparison";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_1d'
+constexpr TypeMatcher kTexture1DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchTexture1D(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildTexture1D(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "texture_1d<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_2d'
+constexpr TypeMatcher kTexture2DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchTexture2D(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildTexture2D(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "texture_2d<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_2d_array'
+constexpr TypeMatcher kTexture2DArrayMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchTexture2DArray(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildTexture2DArray(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "texture_2d_array<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_3d'
+constexpr TypeMatcher kTexture3DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchTexture3D(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildTexture3D(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "texture_3d<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_cube'
+constexpr TypeMatcher kTextureCubeMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchTextureCube(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildTextureCube(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "texture_cube<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_cube_array'
+constexpr TypeMatcher kTextureCubeArrayMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchTextureCubeArray(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildTextureCubeArray(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "texture_cube_array<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_multisampled_2d'
+constexpr TypeMatcher kTextureMultisampled2DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchTextureMultisampled2D(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildTextureMultisampled2D(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "texture_multisampled_2d<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_depth_2d'
+constexpr TypeMatcher kTextureDepth2DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchTextureDepth2D(state, ty)) {
+ return nullptr;
+ }
+ return BuildTextureDepth2D(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "texture_depth_2d";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_depth_2d_array'
+constexpr TypeMatcher kTextureDepth2DArrayMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchTextureDepth2DArray(state, ty)) {
+ return nullptr;
+ }
+ return BuildTextureDepth2DArray(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "texture_depth_2d_array";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_depth_cube'
+constexpr TypeMatcher kTextureDepthCubeMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchTextureDepthCube(state, ty)) {
+ return nullptr;
+ }
+ return BuildTextureDepthCube(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "texture_depth_cube";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_depth_cube_array'
+constexpr TypeMatcher kTextureDepthCubeArrayMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchTextureDepthCubeArray(state, ty)) {
+ return nullptr;
+ }
+ return BuildTextureDepthCubeArray(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "texture_depth_cube_array";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_depth_multisampled_2d'
+constexpr TypeMatcher kTextureDepthMultisampled2DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchTextureDepthMultisampled2D(state, ty)) {
+ return nullptr;
+ }
+ return BuildTextureDepthMultisampled2D(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "texture_depth_multisampled_2d";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_storage_1d'
+constexpr TypeMatcher kTextureStorage1DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number F = Number::invalid;
+ Number A = Number::invalid;
+ if (!MatchTextureStorage1D(state, ty, F, A)) {
+ return nullptr;
+ }
+ F = state.Num(F);
+ if (!F.IsValid()) {
+ return nullptr;
+ }
+ A = state.Num(A);
+ if (!A.IsValid()) {
+ return nullptr;
+ }
+ return BuildTextureStorage1D(state, ty, F, A);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string F = state->NumName();
+ const std::string A = state->NumName();
+ return "texture_storage_1d<" + F + ", " + A + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_storage_2d'
+constexpr TypeMatcher kTextureStorage2DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number F = Number::invalid;
+ Number A = Number::invalid;
+ if (!MatchTextureStorage2D(state, ty, F, A)) {
+ return nullptr;
+ }
+ F = state.Num(F);
+ if (!F.IsValid()) {
+ return nullptr;
+ }
+ A = state.Num(A);
+ if (!A.IsValid()) {
+ return nullptr;
+ }
+ return BuildTextureStorage2D(state, ty, F, A);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string F = state->NumName();
+ const std::string A = state->NumName();
+ return "texture_storage_2d<" + F + ", " + A + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_storage_2d_array'
+constexpr TypeMatcher kTextureStorage2DArrayMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number F = Number::invalid;
+ Number A = Number::invalid;
+ if (!MatchTextureStorage2DArray(state, ty, F, A)) {
+ return nullptr;
+ }
+ F = state.Num(F);
+ if (!F.IsValid()) {
+ return nullptr;
+ }
+ A = state.Num(A);
+ if (!A.IsValid()) {
+ return nullptr;
+ }
+ return BuildTextureStorage2DArray(state, ty, F, A);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string F = state->NumName();
+ const std::string A = state->NumName();
+ return "texture_storage_2d_array<" + F + ", " + A + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_storage_3d'
+constexpr TypeMatcher kTextureStorage3DMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number F = Number::invalid;
+ Number A = Number::invalid;
+ if (!MatchTextureStorage3D(state, ty, F, A)) {
+ return nullptr;
+ }
+ F = state.Num(F);
+ if (!F.IsValid()) {
+ return nullptr;
+ }
+ A = state.Num(A);
+ if (!A.IsValid()) {
+ return nullptr;
+ }
+ return BuildTextureStorage3D(state, ty, F, A);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string F = state->NumName();
+ const std::string A = state->NumName();
+ return "texture_storage_3d<" + F + ", " + A + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type texture_external'
+constexpr TypeMatcher kTextureExternalMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (!MatchTextureExternal(state, ty)) {
+ return nullptr;
+ }
+ return BuildTextureExternal(state, ty);
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "texture_external";
+ }
+};
+
+
+/// TypeMatcher for 'type packedVec3'
+constexpr TypeMatcher kPackedVec3Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchPackedVec3(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildPackedVec3(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "packedVec3<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'type __modf_result'
+constexpr TypeMatcher kModfResultMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchModfResult(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildModfResult(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ StringStream ss;
+ ss << "__modf_result_" << T;
+ return ss.str();
+ }
+};
+
+
+/// TypeMatcher for 'type __modf_result_vec'
+constexpr TypeMatcher kModfResultVecMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number N = Number::invalid;
+ const Type* T = nullptr;
+ if (!MatchModfResultVec(state, ty, N, T)) {
+ return nullptr;
+ }
+ N = state.Num(N);
+ if (!N.IsValid()) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildModfResultVec(state, ty, N, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string N = state->NumName();
+ const std::string T = state->TypeName();
+ StringStream ss;
+ ss << "__modf_result_vec" << N << "_" << T;
+ return ss.str();
+ }
+};
+
+
+/// TypeMatcher for 'type __frexp_result'
+constexpr TypeMatcher kFrexpResultMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchFrexpResult(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildFrexpResult(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ StringStream ss;
+ ss << "__frexp_result_" << T;
+ return ss.str();
+ }
+};
+
+
+/// TypeMatcher for 'type __frexp_result_vec'
+constexpr TypeMatcher kFrexpResultVecMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ Number N = Number::invalid;
+ const Type* T = nullptr;
+ if (!MatchFrexpResultVec(state, ty, N, T)) {
+ return nullptr;
+ }
+ N = state.Num(N);
+ if (!N.IsValid()) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildFrexpResultVec(state, ty, N, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string N = state->NumName();
+ const std::string T = state->TypeName();
+ StringStream ss;
+ ss << "__frexp_result_vec" << N << "_" << T;
+ return ss.str();
+ }
+};
+
+
+/// TypeMatcher for 'type __atomic_compare_exchange_result'
+constexpr TypeMatcher kAtomicCompareExchangeResultMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ const Type* T = nullptr;
+ if (!MatchAtomicCompareExchangeResult(state, ty, T)) {
+ return nullptr;
+ }
+ T = state.Type(T);
+ if (T == nullptr) {
+ return nullptr;
+ }
+ return BuildAtomicCompareExchangeResult(state, ty, T);
+ },
+/* string */ [](MatchState* state) -> std::string {
+ const std::string T = state->TypeName();
+ return "__atomic_compare_exchange_result<" + T + ">";
+ }
+};
+
+
+/// TypeMatcher for 'match scalar'
+constexpr TypeMatcher kScalarMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ if (MatchBool(state, ty)) {
+ return BuildBool(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match concrete_scalar'
+constexpr TypeMatcher kConcreteScalarMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ if (MatchBool(state, ty)) {
+ return BuildBool(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match scalar_no_f32'
+constexpr TypeMatcher kScalarNoF32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ if (MatchBool(state, ty)) {
+ return BuildBool(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match scalar_no_f16'
+constexpr TypeMatcher kScalarNoF16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchBool(state, ty)) {
+ return BuildBool(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match scalar_no_i32'
+constexpr TypeMatcher kScalarNoI32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ if (MatchBool(state, ty)) {
+ return BuildBool(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match scalar_no_u32'
+constexpr TypeMatcher kScalarNoU32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ if (MatchBool(state, ty)) {
+ return BuildBool(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match scalar_no_bool'
+constexpr TypeMatcher kScalarNoBoolMatcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fia_fiu32_f16'
+constexpr TypeMatcher kFiaFiu32F16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kFaMatcher.string(nullptr) << ", " << kIaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fia_fi32_f16'
+constexpr TypeMatcher kFiaFi32F16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kFaMatcher.string(nullptr) << ", " << kIaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fia_fiu32'
+constexpr TypeMatcher kFiaFiu32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kFaMatcher.string(nullptr) << ", " << kIaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fa_f32'
+constexpr TypeMatcher kFaF32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kFaMatcher.string(nullptr) << " or " << kF32Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fa_f32_f16'
+constexpr TypeMatcher kFaF32F16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchFa(state, ty)) {
+ return BuildFa(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match ia_iu32'
+constexpr TypeMatcher kIaIu32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kIaMatcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match ia_i32'
+constexpr TypeMatcher kIaI32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchIa(state, ty)) {
+ return BuildIa(state, ty);
+ }
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kIaMatcher.string(nullptr) << " or " << kI32Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fiu32_f16'
+constexpr TypeMatcher kFiu32F16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fiu32'
+constexpr TypeMatcher kFiu32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fi32_f16'
+constexpr TypeMatcher kFi32F16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match fi32'
+constexpr TypeMatcher kFi32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kF32Matcher.string(nullptr) << " or " << kI32Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match f32_f16'
+constexpr TypeMatcher kF32F16Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchF32(state, ty)) {
+ return BuildF32(state, ty);
+ }
+ if (MatchF16(state, ty)) {
+ return BuildF16(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kF32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// TypeMatcher for 'match iu32'
+constexpr TypeMatcher kIu32Matcher {
+/* match */ [](MatchState& state, const Type* ty) -> const Type* {
+ if (MatchI32(state, ty)) {
+ return BuildI32(state, ty);
+ }
+ if (MatchU32(state, ty)) {
+ return BuildU32(state, ty);
+ }
+ return nullptr;
+ },
+/* string */ [](MatchState*) -> std::string {
+ StringStream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr);
+ return ss.str();
+ }
+};
+
+/// EnumMatcher for 'match f32_texel_format'
+constexpr NumberMatcher kF32TexelFormatMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ switch (static_cast<core::TexelFormat>(number.Value())) {
+ case core::TexelFormat::kBgra8Unorm:
+ case core::TexelFormat::kRgba8Unorm:
+ case core::TexelFormat::kRgba8Snorm:
+ case core::TexelFormat::kRgba16Float:
+ case core::TexelFormat::kR32Float:
+ case core::TexelFormat::kRg32Float:
+ case core::TexelFormat::kRgba32Float:
+ return number;
+ default:
+ return Number::invalid;
+ }
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "bgra8unorm, rgba8unorm, rgba8snorm, rgba16float, r32float, rg32float or rgba32float";
+ }
+};
+
+/// EnumMatcher for 'match i32_texel_format'
+constexpr NumberMatcher kI32TexelFormatMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ switch (static_cast<core::TexelFormat>(number.Value())) {
+ case core::TexelFormat::kRgba8Sint:
+ case core::TexelFormat::kRgba16Sint:
+ case core::TexelFormat::kR32Sint:
+ case core::TexelFormat::kRg32Sint:
+ case core::TexelFormat::kRgba32Sint:
+ return number;
+ default:
+ return Number::invalid;
+ }
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "rgba8sint, rgba16sint, r32sint, rg32sint or rgba32sint";
+ }
+};
+
+/// EnumMatcher for 'match u32_texel_format'
+constexpr NumberMatcher kU32TexelFormatMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ switch (static_cast<core::TexelFormat>(number.Value())) {
+ case core::TexelFormat::kRgba8Uint:
+ case core::TexelFormat::kRgba16Uint:
+ case core::TexelFormat::kR32Uint:
+ case core::TexelFormat::kRg32Uint:
+ case core::TexelFormat::kRgba32Uint:
+ return number;
+ default:
+ return Number::invalid;
+ }
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "rgba8uint, rgba16uint, r32uint, rg32uint or rgba32uint";
+ }
+};
+
+/// EnumMatcher for 'match write'
+constexpr NumberMatcher kWriteMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::Access::kWrite)) {
+ return Number(static_cast<uint32_t>(core::Access::kWrite));
+ }
+ return Number::invalid;
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "write";
+ }
+};
+
+/// EnumMatcher for 'match read_write'
+constexpr NumberMatcher kReadWriteMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::Access::kReadWrite)) {
+ return Number(static_cast<uint32_t>(core::Access::kReadWrite));
+ }
+ return Number::invalid;
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "read_write";
+ }
+};
+
+/// EnumMatcher for 'match readable'
+constexpr NumberMatcher kReadableMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ switch (static_cast<core::Access>(number.Value())) {
+ case core::Access::kRead:
+ case core::Access::kReadWrite:
+ return number;
+ default:
+ return Number::invalid;
+ }
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "read or read_write";
+ }
+};
+
+/// EnumMatcher for 'match writable'
+constexpr NumberMatcher kWritableMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ switch (static_cast<core::Access>(number.Value())) {
+ case core::Access::kWrite:
+ case core::Access::kReadWrite:
+ return number;
+ default:
+ return Number::invalid;
+ }
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "write or read_write";
+ }
+};
+
+/// EnumMatcher for 'match function_private_workgroup'
+constexpr NumberMatcher kFunctionPrivateWorkgroupMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ switch (static_cast<core::AddressSpace>(number.Value())) {
+ case core::AddressSpace::kFunction:
+ case core::AddressSpace::kPrivate:
+ case core::AddressSpace::kWorkgroup:
+ return number;
+ default:
+ return Number::invalid;
+ }
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "function, private or workgroup";
+ }
+};
+
+/// EnumMatcher for 'match workgroup_or_storage'
+constexpr NumberMatcher kWorkgroupOrStorageMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ switch (static_cast<core::AddressSpace>(number.Value())) {
+ case core::AddressSpace::kWorkgroup:
+ case core::AddressSpace::kStorage:
+ return number;
+ default:
+ return Number::invalid;
+ }
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "workgroup or storage";
+ }
+};
+
+/// EnumMatcher for 'match storage'
+constexpr NumberMatcher kStorageMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::AddressSpace::kStorage)) {
+ return Number(static_cast<uint32_t>(core::AddressSpace::kStorage));
+ }
+ return Number::invalid;
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "storage";
+ }
+};
+
+/// EnumMatcher for 'match workgroup'
+constexpr NumberMatcher kWorkgroupMatcher {
+/* match */ [](MatchState&, Number number) -> Number {
+ if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::AddressSpace::kWorkgroup)) {
+ return Number(static_cast<uint32_t>(core::AddressSpace::kWorkgroup));
+ }
+ return Number::invalid;
+ },
+/* string */ [](MatchState*) -> std::string {
+ return "workgroup";
+ }
+};
+
+/// Type and number matchers
+
+/// The template types, types, and type matchers
+constexpr TypeMatcher kTypeMatchers[] = {
+ /* [0] */ TemplateTypeMatcher<0>::matcher,
+ /* [1] */ TemplateTypeMatcher<1>::matcher,
+ /* [2] */ TemplateTypeMatcher<2>::matcher,
+ /* [3] */ TemplateTypeMatcher<3>::matcher,
+ /* [4] */ kBoolMatcher,
+ /* [5] */ kIaMatcher,
+ /* [6] */ kFaMatcher,
+ /* [7] */ kI32Matcher,
+ /* [8] */ kU32Matcher,
+ /* [9] */ kF32Matcher,
+ /* [10] */ kF16Matcher,
+ /* [11] */ kVec2Matcher,
+ /* [12] */ kVec3Matcher,
+ /* [13] */ kVec4Matcher,
+ /* [14] */ kMat2X2Matcher,
+ /* [15] */ kMat2X3Matcher,
+ /* [16] */ kMat2X4Matcher,
+ /* [17] */ kMat3X2Matcher,
+ /* [18] */ kMat3X3Matcher,
+ /* [19] */ kMat3X4Matcher,
+ /* [20] */ kMat4X2Matcher,
+ /* [21] */ kMat4X3Matcher,
+ /* [22] */ kMat4X4Matcher,
+ /* [23] */ kVecMatcher,
+ /* [24] */ kMatMatcher,
+ /* [25] */ kPtrMatcher,
+ /* [26] */ kAtomicMatcher,
+ /* [27] */ kArrayMatcher,
+ /* [28] */ kSamplerMatcher,
+ /* [29] */ kSamplerComparisonMatcher,
+ /* [30] */ kTexture1DMatcher,
+ /* [31] */ kTexture2DMatcher,
+ /* [32] */ kTexture2DArrayMatcher,
+ /* [33] */ kTexture3DMatcher,
+ /* [34] */ kTextureCubeMatcher,
+ /* [35] */ kTextureCubeArrayMatcher,
+ /* [36] */ kTextureMultisampled2DMatcher,
+ /* [37] */ kTextureDepth2DMatcher,
+ /* [38] */ kTextureDepth2DArrayMatcher,
+ /* [39] */ kTextureDepthCubeMatcher,
+ /* [40] */ kTextureDepthCubeArrayMatcher,
+ /* [41] */ kTextureDepthMultisampled2DMatcher,
+ /* [42] */ kTextureStorage1DMatcher,
+ /* [43] */ kTextureStorage2DMatcher,
+ /* [44] */ kTextureStorage2DArrayMatcher,
+ /* [45] */ kTextureStorage3DMatcher,
+ /* [46] */ kTextureExternalMatcher,
+ /* [47] */ kPackedVec3Matcher,
+ /* [48] */ kModfResultMatcher,
+ /* [49] */ kModfResultVecMatcher,
+ /* [50] */ kFrexpResultMatcher,
+ /* [51] */ kFrexpResultVecMatcher,
+ /* [52] */ kAtomicCompareExchangeResultMatcher,
+ /* [53] */ kScalarMatcher,
+ /* [54] */ kConcreteScalarMatcher,
+ /* [55] */ kScalarNoF32Matcher,
+ /* [56] */ kScalarNoF16Matcher,
+ /* [57] */ kScalarNoI32Matcher,
+ /* [58] */ kScalarNoU32Matcher,
+ /* [59] */ kScalarNoBoolMatcher,
+ /* [60] */ kFiaFiu32F16Matcher,
+ /* [61] */ kFiaFi32F16Matcher,
+ /* [62] */ kFiaFiu32Matcher,
+ /* [63] */ kFaF32Matcher,
+ /* [64] */ kFaF32F16Matcher,
+ /* [65] */ kIaIu32Matcher,
+ /* [66] */ kIaI32Matcher,
+ /* [67] */ kFiu32F16Matcher,
+ /* [68] */ kFiu32Matcher,
+ /* [69] */ kFi32F16Matcher,
+ /* [70] */ kFi32Matcher,
+ /* [71] */ kF32F16Matcher,
+ /* [72] */ kIu32Matcher,
+};
+
+/// The template numbers, and number matchers
+constexpr NumberMatcher kNumberMatchers[] = {
+ /* [0] */ TemplateNumberMatcher<0>::matcher,
+ /* [1] */ TemplateNumberMatcher<1>::matcher,
+ /* [2] */ TemplateNumberMatcher<2>::matcher,
+ /* [3] */ kF32TexelFormatMatcher,
+ /* [4] */ kI32TexelFormatMatcher,
+ /* [5] */ kU32TexelFormatMatcher,
+ /* [6] */ kWriteMatcher,
+ /* [7] */ kReadWriteMatcher,
+ /* [8] */ kReadableMatcher,
+ /* [9] */ kWritableMatcher,
+ /* [10] */ kFunctionPrivateWorkgroupMatcher,
+ /* [11] */ kWorkgroupOrStorageMatcher,
+ /* [12] */ kStorageMatcher,
+ /* [13] */ kWorkgroupMatcher,
+};
+
+constexpr TypeMatcherIndex kTypeMatcherIndices[] = {
+ /* [0] */ TypeMatcherIndex(25),
+ /* [1] */ TypeMatcherIndex(27),
+ /* [2] */ TypeMatcherIndex(0),
+ /* [3] */ TypeMatcherIndex(25),
+ /* [4] */ TypeMatcherIndex(26),
+ /* [5] */ TypeMatcherIndex(0),
+ /* [6] */ TypeMatcherIndex(23),
+ /* [7] */ TypeMatcherIndex(0),
+ /* [8] */ TypeMatcherIndex(23),
+ /* [9] */ TypeMatcherIndex(4),
+ /* [10] */ TypeMatcherIndex(12),
+ /* [11] */ TypeMatcherIndex(0),
+ /* [12] */ TypeMatcherIndex(24),
+ /* [13] */ TypeMatcherIndex(0),
+ /* [14] */ TypeMatcherIndex(23),
+ /* [15] */ TypeMatcherIndex(9),
+ /* [16] */ TypeMatcherIndex(50),
+ /* [17] */ TypeMatcherIndex(0),
+ /* [18] */ TypeMatcherIndex(51),
+ /* [19] */ TypeMatcherIndex(0),
+ /* [20] */ TypeMatcherIndex(23),
+ /* [21] */ TypeMatcherIndex(1),
+ /* [22] */ TypeMatcherIndex(48),
+ /* [23] */ TypeMatcherIndex(0),
+ /* [24] */ TypeMatcherIndex(49),
+ /* [25] */ TypeMatcherIndex(0),
+ /* [26] */ TypeMatcherIndex(11),
+ /* [27] */ TypeMatcherIndex(9),
+ /* [28] */ TypeMatcherIndex(13),
+ /* [29] */ TypeMatcherIndex(9),
+ /* [30] */ TypeMatcherIndex(25),
+ /* [31] */ TypeMatcherIndex(0),
+ /* [32] */ TypeMatcherIndex(30),
+ /* [33] */ TypeMatcherIndex(0),
+ /* [34] */ TypeMatcherIndex(11),
+ /* [35] */ TypeMatcherIndex(8),
+ /* [36] */ TypeMatcherIndex(31),
+ /* [37] */ TypeMatcherIndex(0),
+ /* [38] */ TypeMatcherIndex(32),
+ /* [39] */ TypeMatcherIndex(0),
+ /* [40] */ TypeMatcherIndex(12),
+ /* [41] */ TypeMatcherIndex(8),
+ /* [42] */ TypeMatcherIndex(33),
+ /* [43] */ TypeMatcherIndex(0),
+ /* [44] */ TypeMatcherIndex(34),
+ /* [45] */ TypeMatcherIndex(0),
+ /* [46] */ TypeMatcherIndex(35),
+ /* [47] */ TypeMatcherIndex(0),
+ /* [48] */ TypeMatcherIndex(36),
+ /* [49] */ TypeMatcherIndex(0),
+ /* [50] */ TypeMatcherIndex(13),
+ /* [51] */ TypeMatcherIndex(0),
+ /* [52] */ TypeMatcherIndex(11),
+ /* [53] */ TypeMatcherIndex(7),
+ /* [54] */ TypeMatcherIndex(12),
+ /* [55] */ TypeMatcherIndex(9),
+ /* [56] */ TypeMatcherIndex(30),
+ /* [57] */ TypeMatcherIndex(9),
+ /* [58] */ TypeMatcherIndex(31),
+ /* [59] */ TypeMatcherIndex(9),
+ /* [60] */ TypeMatcherIndex(32),
+ /* [61] */ TypeMatcherIndex(9),
+ /* [62] */ TypeMatcherIndex(33),
+ /* [63] */ TypeMatcherIndex(9),
+ /* [64] */ TypeMatcherIndex(12),
+ /* [65] */ TypeMatcherIndex(7),
+ /* [66] */ TypeMatcherIndex(34),
+ /* [67] */ TypeMatcherIndex(9),
+ /* [68] */ TypeMatcherIndex(35),
+ /* [69] */ TypeMatcherIndex(9),
+ /* [70] */ TypeMatcherIndex(11),
+ /* [71] */ TypeMatcherIndex(0),
+ /* [72] */ TypeMatcherIndex(13),
+ /* [73] */ TypeMatcherIndex(7),
+ /* [74] */ TypeMatcherIndex(13),
+ /* [75] */ TypeMatcherIndex(8),
+ /* [76] */ TypeMatcherIndex(11),
+ /* [77] */ TypeMatcherIndex(1),
+ /* [78] */ TypeMatcherIndex(12),
+ /* [79] */ TypeMatcherIndex(1),
+ /* [80] */ TypeMatcherIndex(52),
+ /* [81] */ TypeMatcherIndex(0),
+ /* [82] */ TypeMatcherIndex(23),
+ /* [83] */ TypeMatcherIndex(8),
+ /* [84] */ TypeMatcherIndex(11),
+ /* [85] */ TypeMatcherIndex(5),
+ /* [86] */ TypeMatcherIndex(11),
+ /* [87] */ TypeMatcherIndex(10),
+ /* [88] */ TypeMatcherIndex(11),
+ /* [89] */ TypeMatcherIndex(4),
+ /* [90] */ TypeMatcherIndex(12),
+ /* [91] */ TypeMatcherIndex(5),
+ /* [92] */ TypeMatcherIndex(12),
+ /* [93] */ TypeMatcherIndex(10),
+ /* [94] */ TypeMatcherIndex(12),
+ /* [95] */ TypeMatcherIndex(4),
+ /* [96] */ TypeMatcherIndex(13),
+ /* [97] */ TypeMatcherIndex(5),
+ /* [98] */ TypeMatcherIndex(13),
+ /* [99] */ TypeMatcherIndex(1),
+ /* [100] */ TypeMatcherIndex(13),
+ /* [101] */ TypeMatcherIndex(10),
+ /* [102] */ TypeMatcherIndex(13),
+ /* [103] */ TypeMatcherIndex(4),
+ /* [104] */ TypeMatcherIndex(14),
+ /* [105] */ TypeMatcherIndex(0),
+ /* [106] */ TypeMatcherIndex(14),
+ /* [107] */ TypeMatcherIndex(10),
+ /* [108] */ TypeMatcherIndex(14),
+ /* [109] */ TypeMatcherIndex(9),
+ /* [110] */ TypeMatcherIndex(15),
+ /* [111] */ TypeMatcherIndex(0),
+ /* [112] */ TypeMatcherIndex(15),
+ /* [113] */ TypeMatcherIndex(10),
+ /* [114] */ TypeMatcherIndex(15),
+ /* [115] */ TypeMatcherIndex(9),
+ /* [116] */ TypeMatcherIndex(16),
+ /* [117] */ TypeMatcherIndex(0),
+ /* [118] */ TypeMatcherIndex(16),
+ /* [119] */ TypeMatcherIndex(10),
+ /* [120] */ TypeMatcherIndex(16),
+ /* [121] */ TypeMatcherIndex(9),
+ /* [122] */ TypeMatcherIndex(17),
+ /* [123] */ TypeMatcherIndex(0),
+ /* [124] */ TypeMatcherIndex(17),
+ /* [125] */ TypeMatcherIndex(10),
+ /* [126] */ TypeMatcherIndex(17),
+ /* [127] */ TypeMatcherIndex(9),
+ /* [128] */ TypeMatcherIndex(18),
+ /* [129] */ TypeMatcherIndex(0),
+ /* [130] */ TypeMatcherIndex(18),
+ /* [131] */ TypeMatcherIndex(10),
+ /* [132] */ TypeMatcherIndex(18),
+ /* [133] */ TypeMatcherIndex(9),
+ /* [134] */ TypeMatcherIndex(19),
+ /* [135] */ TypeMatcherIndex(0),
+ /* [136] */ TypeMatcherIndex(19),
+ /* [137] */ TypeMatcherIndex(10),
+ /* [138] */ TypeMatcherIndex(19),
+ /* [139] */ TypeMatcherIndex(9),
+ /* [140] */ TypeMatcherIndex(20),
+ /* [141] */ TypeMatcherIndex(0),
+ /* [142] */ TypeMatcherIndex(20),
+ /* [143] */ TypeMatcherIndex(10),
+ /* [144] */ TypeMatcherIndex(20),
+ /* [145] */ TypeMatcherIndex(9),
+ /* [146] */ TypeMatcherIndex(21),
+ /* [147] */ TypeMatcherIndex(0),
+ /* [148] */ TypeMatcherIndex(21),
+ /* [149] */ TypeMatcherIndex(10),
+ /* [150] */ TypeMatcherIndex(21),
+ /* [151] */ TypeMatcherIndex(9),
+ /* [152] */ TypeMatcherIndex(22),
+ /* [153] */ TypeMatcherIndex(0),
+ /* [154] */ TypeMatcherIndex(22),
+ /* [155] */ TypeMatcherIndex(10),
+ /* [156] */ TypeMatcherIndex(22),
+ /* [157] */ TypeMatcherIndex(9),
+ /* [158] */ TypeMatcherIndex(47),
+ /* [159] */ TypeMatcherIndex(0),
+ /* [160] */ TypeMatcherIndex(37),
+ /* [161] */ TypeMatcherIndex(38),
+ /* [162] */ TypeMatcherIndex(39),
+ /* [163] */ TypeMatcherIndex(40),
+ /* [164] */ TypeMatcherIndex(41),
+ /* [165] */ TypeMatcherIndex(42),
+ /* [166] */ TypeMatcherIndex(43),
+ /* [167] */ TypeMatcherIndex(44),
+ /* [168] */ TypeMatcherIndex(45),
+ /* [169] */ TypeMatcherIndex(46),
+ /* [170] */ TypeMatcherIndex(28),
+ /* [171] */ TypeMatcherIndex(2),
+ /* [172] */ TypeMatcherIndex(29),
+ /* [173] */ TypeMatcherIndex(3),
+};
+
+static_assert(TypeMatcherIndex::CanIndex(kTypeMatcherIndices),
+ "TypeMatcherIndex is not large enough to index kTypeMatcherIndices");
+
+constexpr NumberMatcherIndex kNumberMatcherIndices[] = {
+ /* [0] */ NumberMatcherIndex(12),
+ /* [1] */ NumberMatcherIndex(0),
+ /* [2] */ NumberMatcherIndex(0),
+ /* [3] */ NumberMatcherIndex(1),
+ /* [4] */ NumberMatcherIndex(0),
+ /* [5] */ NumberMatcherIndex(7),
+ /* [6] */ NumberMatcherIndex(13),
+ /* [7] */ NumberMatcherIndex(7),
+ /* [8] */ NumberMatcherIndex(3),
+ /* [9] */ NumberMatcherIndex(9),
+ /* [10] */ NumberMatcherIndex(4),
+ /* [11] */ NumberMatcherIndex(9),
+ /* [12] */ NumberMatcherIndex(5),
+ /* [13] */ NumberMatcherIndex(9),
+ /* [14] */ NumberMatcherIndex(3),
+ /* [15] */ NumberMatcherIndex(8),
+ /* [16] */ NumberMatcherIndex(4),
+ /* [17] */ NumberMatcherIndex(8),
+ /* [18] */ NumberMatcherIndex(5),
+ /* [19] */ NumberMatcherIndex(8),
+ /* [20] */ NumberMatcherIndex(1),
+ /* [21] */ NumberMatcherIndex(2),
+ /* [22] */ NumberMatcherIndex(0),
+ /* [23] */ NumberMatcherIndex(2),
+};
+
+static_assert(NumberMatcherIndex::CanIndex(kNumberMatcherIndices),
+ "NumberMatcherIndex is not large enough to index kNumberMatcherIndices");
+
+constexpr ParameterInfo kParameters[] = {
+ {
+ /* [0] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(3),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(4),
+ },
+ {
+ /* [1] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [2] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [3] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [4] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [5] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [6] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [7] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [8] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [9] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [10] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [11] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [12] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [13] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [14] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [15] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [16] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [17] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [18] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [19] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(60),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [20] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [21] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [22] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [23] */
+ /* usage */ core::ParameterUsage::kDdx,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [24] */
+ /* usage */ core::ParameterUsage::kDdy,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [25] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [26] */
+ /* usage */ core::ParameterUsage::kComponent,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [27] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(38),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [28] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [29] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [30] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(171),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [31] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [32] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(161),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [33] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(172),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [34] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [35] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [36] */
+ /* usage */ core::ParameterUsage::kDepthRef,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [37] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [38] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(60),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [39] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [40] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [41] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [42] */
+ /* usage */ core::ParameterUsage::kBias,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [43] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [44] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(58),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [45] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [46] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [47] */
+ /* usage */ core::ParameterUsage::kDdx,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [48] */
+ /* usage */ core::ParameterUsage::kDdy,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [49] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [50] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(62),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [51] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [52] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [53] */
+ /* usage */ core::ParameterUsage::kDdx,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [54] */
+ /* usage */ core::ParameterUsage::kDdy,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [55] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(64),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [56] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(68),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [57] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [58] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [59] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [60] */
+ /* usage */ core::ParameterUsage::kDdx,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [61] */
+ /* usage */ core::ParameterUsage::kDdy,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [62] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(60),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [63] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [64] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [65] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [66] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [67] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [68] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(161),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [69] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [70] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [71] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [72] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [73] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [74] */
+ /* usage */ core::ParameterUsage::kComponent,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [75] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(36),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [76] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [77] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [78] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [79] */
+ /* usage */ core::ParameterUsage::kComponent,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [80] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(46),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [81] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [82] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [83] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(171),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [84] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(161),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [85] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [86] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [87] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [88] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [89] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(160),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [90] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(172),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [91] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [92] */
+ /* usage */ core::ParameterUsage::kDepthRef,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [93] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [94] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(163),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [95] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(172),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [96] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [97] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [98] */
+ /* usage */ core::ParameterUsage::kDepthRef,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [99] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(60),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [100] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [101] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [102] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [103] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [104] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(58),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [105] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [106] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [107] */
+ /* usage */ core::ParameterUsage::kBias,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [108] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [109] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(62),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [110] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [111] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [112] */
+ /* usage */ core::ParameterUsage::kBias,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [113] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(64),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [114] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(68),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [115] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [116] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [117] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [118] */
+ /* usage */ core::ParameterUsage::kBias,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [119] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(66),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [120] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [121] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [122] */
+ /* usage */ core::ParameterUsage::kDdx,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [123] */
+ /* usage */ core::ParameterUsage::kDdy,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [124] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(58),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [125] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [126] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [127] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [128] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [129] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(62),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [130] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [131] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [132] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [133] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(64),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [134] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(68),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [135] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [136] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [137] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [138] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [139] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(160),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [140] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [141] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [142] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [143] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [144] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(163),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [145] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [146] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [147] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [148] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [149] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [150] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [151] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [152] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [153] */
+ /* usage */ core::ParameterUsage::kComponent,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [154] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(44),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [155] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [156] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [157] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(160),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [158] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [159] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [160] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [161] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(162),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [162] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(172),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [163] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [164] */
+ /* usage */ core::ParameterUsage::kDepthRef,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [165] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(58),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [166] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [167] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [168] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [169] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(62),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [170] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [171] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [172] */
+ /* usage */ core::ParameterUsage::kOffset,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(64),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [173] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(66),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [174] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [175] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [176] */
+ /* usage */ core::ParameterUsage::kBias,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [177] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(66),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [178] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [179] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [180] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [181] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(162),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [182] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [183] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [184] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [185] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(167),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(8),
+ },
+ {
+ /* [186] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [187] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [188] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [189] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(167),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(10),
+ },
+ {
+ /* [190] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [191] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [192] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [193] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(167),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(12),
+ },
+ {
+ /* [194] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [195] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [196] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [197] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(38),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [198] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(76),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [199] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(171),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [200] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(173),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [201] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(161),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [202] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [203] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [204] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(171),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [205] */
+ /* usage */ core::ParameterUsage::kX,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [206] */
+ /* usage */ core::ParameterUsage::kY,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [207] */
+ /* usage */ core::ParameterUsage::kZ,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [208] */
+ /* usage */ core::ParameterUsage::kW,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [209] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [210] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [211] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [212] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [213] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [214] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [215] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [216] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [217] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [218] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [219] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [220] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [221] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [222] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [223] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [224] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [225] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [226] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [227] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [228] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [229] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [230] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [231] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [232] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [233] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [234] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [235] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(56),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [236] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [237] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [238] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(169),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [239] */
+ /* usage */ core::ParameterUsage::kSampler,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(170),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [240] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [241] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(165),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(8),
+ },
+ {
+ /* [242] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [243] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [244] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(166),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(8),
+ },
+ {
+ /* [245] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [246] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [247] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(168),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(8),
+ },
+ {
+ /* [248] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [249] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [250] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(165),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(10),
+ },
+ {
+ /* [251] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [252] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [253] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(166),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(10),
+ },
+ {
+ /* [254] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [255] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [256] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(168),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(10),
+ },
+ {
+ /* [257] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [258] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [259] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(165),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(12),
+ },
+ {
+ /* [260] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [261] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [262] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(166),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(12),
+ },
+ {
+ /* [263] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [264] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [265] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(168),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(12),
+ },
+ {
+ /* [266] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [267] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [268] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(32),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [269] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [270] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(171),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [271] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(36),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [272] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(76),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [273] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(171),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [274] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(42),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [275] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(78),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [276] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(171),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [277] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(48),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [278] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(76),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [279] */
+ /* usage */ core::ParameterUsage::kSampleIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(171),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [280] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(160),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [281] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [282] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [283] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(164),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [284] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [285] */
+ /* usage */ core::ParameterUsage::kSampleIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [286] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(167),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(14),
+ },
+ {
+ /* [287] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [288] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [289] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(167),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(16),
+ },
+ {
+ /* [290] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [291] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [292] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(167),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(18),
+ },
+ {
+ /* [293] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [294] */
+ /* usage */ core::ParameterUsage::kArrayIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [295] */
+ /* usage */ core::ParameterUsage::kXy,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [296] */
+ /* usage */ core::ParameterUsage::kZ,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [297] */
+ /* usage */ core::ParameterUsage::kW,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [298] */
+ /* usage */ core::ParameterUsage::kX,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [299] */
+ /* usage */ core::ParameterUsage::kYz,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [300] */
+ /* usage */ core::ParameterUsage::kW,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [301] */
+ /* usage */ core::ParameterUsage::kX,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [302] */
+ /* usage */ core::ParameterUsage::kY,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [303] */
+ /* usage */ core::ParameterUsage::kZw,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [304] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [305] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [306] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [307] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(20),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [308] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(32),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [309] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [310] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(36),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [311] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [312] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(38),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [313] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [314] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(42),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [315] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [316] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(44),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [317] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [318] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(46),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [319] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(21),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [320] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(160),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [321] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [322] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(161),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [323] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [324] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(162),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [325] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [326] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(163),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [327] */
+ /* usage */ core::ParameterUsage::kLevel,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [328] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(169),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [329] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [330] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(165),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(14),
+ },
+ {
+ /* [331] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [332] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(165),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(16),
+ },
+ {
+ /* [333] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [334] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(165),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(18),
+ },
+ {
+ /* [335] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [336] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(166),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(14),
+ },
+ {
+ /* [337] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [338] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(166),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(16),
+ },
+ {
+ /* [339] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [340] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(166),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(18),
+ },
+ {
+ /* [341] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [342] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(168),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(14),
+ },
+ {
+ /* [343] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [344] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(168),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(16),
+ },
+ {
+ /* [345] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [346] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(168),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(18),
+ },
+ {
+ /* [347] */
+ /* usage */ core::ParameterUsage::kCoords,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [348] */
+ /* usage */ core::ParameterUsage::kValue,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [349] */
+ /* usage */ core::ParameterUsage::kSourceLaneIndex,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [350] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [351] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [352] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(82),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [353] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ },
+ {
+ /* [354] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ },
+ {
+ /* [355] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [356] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ },
+ {
+ /* [357] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [358] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(3),
+ },
+ {
+ /* [359] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ },
+ {
+ /* [360] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(22),
+ },
+ {
+ /* [361] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(3),
+ },
+ {
+ /* [362] */
+ /* usage */ core::ParameterUsage::kXy,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [363] */
+ /* usage */ core::ParameterUsage::kZw,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [364] */
+ /* usage */ core::ParameterUsage::kXyz,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [365] */
+ /* usage */ core::ParameterUsage::kW,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [366] */
+ /* usage */ core::ParameterUsage::kX,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [367] */
+ /* usage */ core::ParameterUsage::kZyw,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [368] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(0),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(0),
+ },
+ {
+ /* [369] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [370] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [371] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(14),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ },
+ {
+ /* [372] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [373] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [374] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(30),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(6),
+ },
+ {
+ /* [375] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(165),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ },
+ {
+ /* [376] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(166),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ },
+ {
+ /* [377] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(167),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ },
+ {
+ /* [378] */
+ /* usage */ core::ParameterUsage::kTexture,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(168),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ },
+ {
+ /* [379] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(53),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [380] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(87),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [381] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(76),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [382] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(78),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [383] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(98),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [384] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(104),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [385] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(108),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [386] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(106),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [387] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(110),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [388] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(114),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [389] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(112),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [390] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(116),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [391] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(120),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [392] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(118),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [393] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(122),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [394] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(126),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [395] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(124),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [396] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(128),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [397] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(132),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [398] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(130),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [399] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(134),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [400] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(138),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [401] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(136),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [402] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(140),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [403] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(144),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [404] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(142),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [405] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(146),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [406] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(150),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [407] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(148),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [408] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(152),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [409] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(156),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+ {
+ /* [410] */
+ /* usage */ core::ParameterUsage::kNone,
+ /* type_matcher_indices */ TypeMatcherIndicesIndex(154),
+ /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ },
+};
+
+static_assert(ParameterIndex::CanIndex(kParameters),
+ "ParameterIndex is not large enough to index kParameters");
+
+constexpr TemplateTypeInfo kTemplateTypes[] = {
+ {
+ /* [0] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(68),
+ },
+ {
+ /* [1] */
+ /* name */ "C",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [2] */
+ /* name */ "A",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [3] */
+ /* name */ "L",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [4] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(68),
+ },
+ {
+ /* [5] */
+ /* name */ "C",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [6] */
+ /* name */ "L",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [7] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(68),
+ },
+ {
+ /* [8] */
+ /* name */ "C",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [9] */
+ /* name */ "S",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [10] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(64),
+ },
+ {
+ /* [11] */
+ /* name */ "U",
+ /* matcher_index */ TypeMatcherIndex(66),
+ },
+ {
+ /* [12] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(68),
+ },
+ {
+ /* [13] */
+ /* name */ "L",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [14] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(9),
+ },
+ {
+ /* [15] */
+ /* name */ "U",
+ /* matcher_index */ TypeMatcherIndex(55),
+ },
+ {
+ /* [16] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(10),
+ },
+ {
+ /* [17] */
+ /* name */ "U",
+ /* matcher_index */ TypeMatcherIndex(56),
+ },
+ {
+ /* [18] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(7),
+ },
+ {
+ /* [19] */
+ /* name */ "U",
+ /* matcher_index */ TypeMatcherIndex(57),
+ },
+ {
+ /* [20] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(8),
+ },
+ {
+ /* [21] */
+ /* name */ "U",
+ /* matcher_index */ TypeMatcherIndex(58),
+ },
+ {
+ /* [22] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(4),
+ },
+ {
+ /* [23] */
+ /* name */ "U",
+ /* matcher_index */ TypeMatcherIndex(59),
+ },
+ {
+ /* [24] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(60),
+ },
+ {
+ /* [25] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(/* invalid */),
+ },
+ {
+ /* [26] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(72),
+ },
+ {
+ /* [27] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(53),
+ },
+ {
+ /* [28] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(61),
+ },
+ {
+ /* [29] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(65),
+ },
+ {
+ /* [30] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(57),
+ },
+ {
+ /* [31] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(58),
+ },
+ {
+ /* [32] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(55),
+ },
+ {
+ /* [33] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(56),
+ },
+ {
+ /* [34] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(59),
+ },
+ {
+ /* [35] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(54),
+ },
+ {
+ /* [36] */
+ /* name */ "T",
+ /* matcher_index */ TypeMatcherIndex(71),
+ },
+};
+
+static_assert(TemplateTypeIndex::CanIndex(kTemplateTypes),
+ "TemplateTypeIndex is not large enough to index kTemplateTypes");
+
+constexpr TemplateNumberInfo kTemplateNumbers[] = {
+ {
+ /* [0] */
+ /* name */ "K",
+ /* matcher_index */ NumberMatcherIndex(/* invalid */),
+ },
+ {
+ /* [1] */
+ /* name */ "C",
+ /* matcher_index */ NumberMatcherIndex(/* invalid */),
+ },
+ {
+ /* [2] */
+ /* name */ "R",
+ /* matcher_index */ NumberMatcherIndex(/* invalid */),
+ },
+ {
+ /* [3] */
+ /* name */ "M",
+ /* matcher_index */ NumberMatcherIndex(/* invalid */),
+ },
+ {
+ /* [4] */
+ /* name */ "N",
+ /* matcher_index */ NumberMatcherIndex(/* invalid */),
+ },
+ {
+ /* [5] */
+ /* name */ "M",
+ /* matcher_index */ NumberMatcherIndex(/* invalid */),
+ },
+ {
+ /* [6] */
+ /* name */ "F",
+ /* matcher_index */ NumberMatcherIndex(/* invalid */),
+ },
+ {
+ /* [7] */
+ /* name */ "A",
+ /* matcher_index */ NumberMatcherIndex(/* invalid */),
+ },
+ {
+ /* [8] */
+ /* name */ "S",
+ /* matcher_index */ NumberMatcherIndex(11),
+ },
+};
+
+static_assert(TemplateNumberIndex::CanIndex(kTemplateNumbers),
+ "TemplateNumberIndex is not large enough to index kTemplateNumbers");
+
+constexpr core::constant::Eval::Function kConstEvalFunctions[] = {
+ /* [0] */ &core::constant::Eval::abs,
+ /* [1] */ &core::constant::Eval::acos,
+ /* [2] */ &core::constant::Eval::acosh,
+ /* [3] */ &core::constant::Eval::all,
+ /* [4] */ &core::constant::Eval::any,
+ /* [5] */ &core::constant::Eval::asin,
+ /* [6] */ &core::constant::Eval::asinh,
+ /* [7] */ &core::constant::Eval::atan,
+ /* [8] */ &core::constant::Eval::atan2,
+ /* [9] */ &core::constant::Eval::atanh,
+ /* [10] */ &core::constant::Eval::ceil,
+ /* [11] */ &core::constant::Eval::clamp,
+ /* [12] */ &core::constant::Eval::cos,
+ /* [13] */ &core::constant::Eval::cosh,
+ /* [14] */ &core::constant::Eval::countLeadingZeros,
+ /* [15] */ &core::constant::Eval::countOneBits,
+ /* [16] */ &core::constant::Eval::countTrailingZeros,
+ /* [17] */ &core::constant::Eval::cross,
+ /* [18] */ &core::constant::Eval::degrees,
+ /* [19] */ &core::constant::Eval::determinant,
+ /* [20] */ &core::constant::Eval::distance,
+ /* [21] */ &core::constant::Eval::dot,
+ /* [22] */ &core::constant::Eval::exp,
+ /* [23] */ &core::constant::Eval::exp2,
+ /* [24] */ &core::constant::Eval::extractBits,
+ /* [25] */ &core::constant::Eval::faceForward,
+ /* [26] */ &core::constant::Eval::firstLeadingBit,
+ /* [27] */ &core::constant::Eval::firstTrailingBit,
+ /* [28] */ &core::constant::Eval::floor,
+ /* [29] */ &core::constant::Eval::fma,
+ /* [30] */ &core::constant::Eval::fract,
+ /* [31] */ &core::constant::Eval::frexp,
+ /* [32] */ &core::constant::Eval::insertBits,
+ /* [33] */ &core::constant::Eval::inverseSqrt,
+ /* [34] */ &core::constant::Eval::ldexp,
+ /* [35] */ &core::constant::Eval::length,
+ /* [36] */ &core::constant::Eval::log,
+ /* [37] */ &core::constant::Eval::log2,
+ /* [38] */ &core::constant::Eval::max,
+ /* [39] */ &core::constant::Eval::min,
+ /* [40] */ &core::constant::Eval::mix,
+ /* [41] */ &core::constant::Eval::modf,
+ /* [42] */ &core::constant::Eval::normalize,
+ /* [43] */ &core::constant::Eval::pack2x16float,
+ /* [44] */ &core::constant::Eval::pack2x16snorm,
+ /* [45] */ &core::constant::Eval::pack2x16unorm,
+ /* [46] */ &core::constant::Eval::pack4x8snorm,
+ /* [47] */ &core::constant::Eval::pack4x8unorm,
+ /* [48] */ &core::constant::Eval::pow,
+ /* [49] */ &core::constant::Eval::quantizeToF16,
+ /* [50] */ &core::constant::Eval::radians,
+ /* [51] */ &core::constant::Eval::reflect,
+ /* [52] */ &core::constant::Eval::refract,
+ /* [53] */ &core::constant::Eval::reverseBits,
+ /* [54] */ &core::constant::Eval::round,
+ /* [55] */ &core::constant::Eval::saturate,
+ /* [56] */ &core::constant::Eval::select_bool,
+ /* [57] */ &core::constant::Eval::select_boolvec,
+ /* [58] */ &core::constant::Eval::sign,
+ /* [59] */ &core::constant::Eval::sin,
+ /* [60] */ &core::constant::Eval::sinh,
+ /* [61] */ &core::constant::Eval::smoothstep,
+ /* [62] */ &core::constant::Eval::sqrt,
+ /* [63] */ &core::constant::Eval::step,
+ /* [64] */ &core::constant::Eval::tan,
+ /* [65] */ &core::constant::Eval::tanh,
+ /* [66] */ &core::constant::Eval::transpose,
+ /* [67] */ &core::constant::Eval::trunc,
+ /* [68] */ &core::constant::Eval::unpack2x16float,
+ /* [69] */ &core::constant::Eval::unpack2x16snorm,
+ /* [70] */ &core::constant::Eval::unpack2x16unorm,
+ /* [71] */ &core::constant::Eval::unpack4x8snorm,
+ /* [72] */ &core::constant::Eval::unpack4x8unorm,
+ /* [73] */ &core::constant::Eval::Identity,
+ /* [74] */ &core::constant::Eval::Not,
+ /* [75] */ &core::constant::Eval::Complement,
+ /* [76] */ &core::constant::Eval::UnaryMinus,
+ /* [77] */ &core::constant::Eval::Plus,
+ /* [78] */ &core::constant::Eval::Minus,
+ /* [79] */ &core::constant::Eval::Multiply,
+ /* [80] */ &core::constant::Eval::MultiplyMatVec,
+ /* [81] */ &core::constant::Eval::MultiplyVecMat,
+ /* [82] */ &core::constant::Eval::MultiplyMatMat,
+ /* [83] */ &core::constant::Eval::Divide,
+ /* [84] */ &core::constant::Eval::Modulo,
+ /* [85] */ &core::constant::Eval::Xor,
+ /* [86] */ &core::constant::Eval::And,
+ /* [87] */ &core::constant::Eval::Or,
+ /* [88] */ &core::constant::Eval::LogicalAnd,
+ /* [89] */ &core::constant::Eval::LogicalOr,
+ /* [90] */ &core::constant::Eval::Equal,
+ /* [91] */ &core::constant::Eval::NotEqual,
+ /* [92] */ &core::constant::Eval::LessThan,
+ /* [93] */ &core::constant::Eval::GreaterThan,
+ /* [94] */ &core::constant::Eval::LessThanEqual,
+ /* [95] */ &core::constant::Eval::GreaterThanEqual,
+ /* [96] */ &core::constant::Eval::ShiftLeft,
+ /* [97] */ &core::constant::Eval::ShiftRight,
+ /* [98] */ &core::constant::Eval::Zero,
+ /* [99] */ &core::constant::Eval::Conv,
+ /* [100] */ &core::constant::Eval::VecSplat,
+ /* [101] */ &core::constant::Eval::VecInitS,
+ /* [102] */ &core::constant::Eval::VecInitM,
+ /* [103] */ &core::constant::Eval::MatInitS,
+ /* [104] */ &core::constant::Eval::MatInitV,
+};
+
+static_assert(ConstEvalFunctionIndex::CanIndex(kConstEvalFunctions),
+ "ConstEvalFunctionIndex is not large enough to index kConstEvalFunctions");
+
+constexpr OverloadInfo kOverloads[] = {
+ {
+ /* [0] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(268),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [1] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(12),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(308),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [2] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(75),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [3] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(12),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(310),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [4] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(27),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [5] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(12),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(312),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [6] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(274),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(40),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [7] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(12),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(314),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(40),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [8] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(154),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [9] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(12),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(316),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [10] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(80),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [11] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(12),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(318),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [12] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(277),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [13] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(89),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [14] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(3),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(320),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [15] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [16] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(3),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(322),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [17] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(161),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [18] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(3),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(324),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [19] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(94),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [20] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(3),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(326),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [21] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(283),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [22] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(6),
+ /* parameters */ ParameterIndex(375),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [23] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(6),
+ /* parameters */ ParameterIndex(376),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [24] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(6),
+ /* parameters */ ParameterIndex(377),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [25] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(6),
+ /* parameters */ ParameterIndex(378),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(40),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [26] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(238),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [27] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 3,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(4),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(268),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [28] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 3,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(4),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(271),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [29] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 4,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(197),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [30] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 3,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(4),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(274),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [31] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 3,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(7),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(277),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [32] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(5),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(280),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [33] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 3,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(201),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [34] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(8),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(283),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [35] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(328),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [36] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(330),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [37] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(332),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [38] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(334),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [39] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(336),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [40] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(338),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [41] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(340),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [42] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(286),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [43] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(289),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [44] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(292),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [45] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(342),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [46] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(344),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [47] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(346),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [48] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(96),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [49] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(35),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [50] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(217),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [51] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(100),
+ },
+ {
+ /* [52] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(205),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(101),
+ },
+ {
+ /* [53] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(295),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ },
+ {
+ /* [54] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(298),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ },
+ {
+ /* [55] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(301),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ },
+ {
+ /* [56] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(362),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ },
+ {
+ /* [57] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(364),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ },
+ {
+ /* [58] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(366),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ },
+ {
+ /* [59] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(383),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [60] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(383),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(100),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [61] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(18),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(383),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(72),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [62] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(20),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(383),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [63] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(22),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(383),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(102),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [64] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(235),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [65] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(44),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [66] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(165),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [67] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(19),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [68] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(99),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [69] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(50),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [70] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(169),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [71] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(119),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [72] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(56),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [73] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(139),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [74] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(157),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [75] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(68),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [76] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(84),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [77] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(181),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [78] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(144),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [79] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(124),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [80] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(124),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [81] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(62),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [82] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(62),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [83] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(129),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [84] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(129),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [85] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(177),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [86] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(134),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [87] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(3),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(139),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [88] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(3),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(139),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [89] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(68),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [90] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(68),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [91] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(3),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(181),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [92] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(144),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [93] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(74),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [94] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(74),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [95] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 3,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(26),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [96] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 3,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(26),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [97] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(153),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [98] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 3,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(79),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(50),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [99] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(139),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [100] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(157),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [101] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(68),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [102] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(84),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [103] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(181),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [104] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(144),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [105] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(241),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [106] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(244),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [107] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 4,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(185),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [108] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(247),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [109] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(250),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [110] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(253),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [111] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 4,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(189),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [112] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(256),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [113] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(259),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [114] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(262),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [115] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 4,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(193),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [116] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(1),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(265),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [117] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(90),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [118] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(35),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [119] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(213),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [120] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(100),
+ },
+ {
+ /* [121] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(205),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(101),
+ },
+ {
+ /* [122] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(295),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ },
+ {
+ /* [123] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(298),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(102),
+ },
+ {
+ /* [124] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(382),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(54),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [125] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(382),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(92),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [126] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(18),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(382),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(64),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [127] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(20),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(382),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(40),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [128] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(22),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(382),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(94),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [129] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(268),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [130] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(75),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [131] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(27),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [132] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(274),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [133] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(154),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [134] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(80),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [135] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(89),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [136] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [137] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(161),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [138] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(94),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [139] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(84),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [140] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(35),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [141] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(209),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [142] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(100),
+ },
+ {
+ /* [143] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(205),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(70),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(101),
+ },
+ {
+ /* [144] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(381),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [145] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(381),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(86),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [146] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(18),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(381),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(52),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [147] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(20),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(381),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(34),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [148] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(22),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(381),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(88),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [149] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(79),
+ },
+ {
+ /* [150] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(79),
+ },
+ {
+ /* [151] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(223),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(79),
+ },
+ {
+ /* [152] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(350),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(79),
+ },
+ {
+ /* [153] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(355),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ /* const_eval_fn */ ConstEvalFunctionIndex(79),
+ },
+ {
+ /* [154] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(354),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ /* const_eval_fn */ ConstEvalFunctionIndex(79),
+ },
+ {
+ /* [155] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(1),
+ /* parameters */ ParameterIndex(356),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(80),
+ },
+ {
+ /* [156] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(1),
+ /* parameters */ ParameterIndex(358),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(81),
+ },
+ {
+ /* [157] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 3,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(0),
+ /* parameters */ ParameterIndex(360),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(20),
+ /* const_eval_fn */ ConstEvalFunctionIndex(82),
+ },
+ {
+ /* [158] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(104),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [159] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(104),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [160] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(38),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [161] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(38),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [162] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(109),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [163] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(109),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [164] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(173),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [165] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(114),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [166] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(44),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [167] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(44),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [168] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(19),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [169] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 7,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(19),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [170] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(50),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [171] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(50),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [172] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(119),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [173] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(56),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [174] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(89),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [175] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(89),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [176] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [177] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [178] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(161),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [179] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(94),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [180] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(89),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [181] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(89),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [182] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [183] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [184] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(161),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [185] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(94),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [186] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(89),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [187] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(89),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [188] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [189] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [190] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(161),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [191] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 5,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(2),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(94),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [192] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(104),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [193] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(384),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(104),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [194] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(104),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [195] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(209),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(104),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [196] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(385),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(106),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [197] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(386),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(108),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [198] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(110),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [199] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(387),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(110),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [200] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(110),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [201] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(213),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(110),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [202] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(388),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(112),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [203] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(389),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(114),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [204] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(116),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [205] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(390),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(116),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [206] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 8,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(116),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [207] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(217),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(116),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [208] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(391),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(118),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [209] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(392),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(120),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [210] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(122),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [211] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(393),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(122),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [212] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 6,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(122),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [213] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(209),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(122),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [214] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(394),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(124),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [215] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(395),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(126),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [216] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(128),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [217] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(396),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(128),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [218] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 9,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(128),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [219] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(213),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(128),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [220] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(397),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(130),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [221] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(398),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(132),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [222] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(134),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [223] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(399),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(134),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [224] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 12,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(134),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [225] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(217),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(134),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [226] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(400),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(136),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [227] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(401),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(138),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [228] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(140),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [229] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(402),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(140),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [230] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 8,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(140),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [231] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(209),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(140),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [232] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(403),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(142),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [233] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(404),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(144),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [234] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(146),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [235] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(405),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(146),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [236] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 12,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(146),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [237] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(213),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(146),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [238] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(406),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(148),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [239] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(407),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(150),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [240] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(152),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [241] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(36),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(408),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(152),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [242] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 16,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(152),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(103),
+ },
+ {
+ /* [243] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(217),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(152),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(104),
+ },
+ {
+ /* [244] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(16),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(409),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(154),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [245] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(14),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(410),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(156),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [246] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(27),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [247] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(80),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [248] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(32),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [249] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(94),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [250] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(6),
+ /* parameters */ ParameterIndex(377),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [251] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(77),
+ },
+ {
+ /* [252] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(77),
+ },
+ {
+ /* [253] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(223),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(77),
+ },
+ {
+ /* [254] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(350),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(77),
+ },
+ {
+ /* [255] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(353),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ /* const_eval_fn */ ConstEvalFunctionIndex(77),
+ },
+ {
+ /* [256] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(78),
+ },
+ {
+ /* [257] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(78),
+ },
+ {
+ /* [258] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(223),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(78),
+ },
+ {
+ /* [259] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(350),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(78),
+ },
+ {
+ /* [260] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(353),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(2),
+ /* const_eval_fn */ ConstEvalFunctionIndex(78),
+ },
+ {
+ /* [261] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(83),
+ },
+ {
+ /* [262] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(83),
+ },
+ {
+ /* [263] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(223),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(83),
+ },
+ {
+ /* [264] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(350),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(83),
+ },
+ {
+ /* [265] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(84),
+ },
+ {
+ /* [266] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(84),
+ },
+ {
+ /* [267] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(223),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(84),
+ },
+ {
+ /* [268] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(350),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(84),
+ },
+ {
+ /* [269] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(226),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(86),
+ },
+ {
+ /* [270] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(233),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(86),
+ },
+ {
+ /* [271] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(86),
+ },
+ {
+ /* [272] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(86),
+ },
+ {
+ /* [273] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(226),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(87),
+ },
+ {
+ /* [274] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(233),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(87),
+ },
+ {
+ /* [275] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(87),
+ },
+ {
+ /* [276] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(87),
+ },
+ {
+ /* [277] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(40),
+ },
+ {
+ /* [278] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(221),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(40),
+ },
+ {
+ /* [279] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(222),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(40),
+ },
+ {
+ /* [280] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(224),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(56),
+ },
+ {
+ /* [281] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(228),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(56),
+ },
+ {
+ /* [282] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(231),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(57),
+ },
+ {
+ /* [283] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(53),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [284] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(379),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(53),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [285] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(30),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(53),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [286] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [287] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(17),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [288] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(31),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [289] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [290] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(370),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [291] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(32),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [292] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(87),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [293] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(380),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(87),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [294] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(33),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(87),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [295] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(98),
+ },
+ {
+ /* [296] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConstructor, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(226),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [297] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(34),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+ {
+ /* [298] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(0),
+ },
+ {
+ /* [299] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(0),
+ },
+ {
+ /* [300] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(1),
+ },
+ {
+ /* [301] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(1),
+ },
+ {
+ /* [302] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(2),
+ },
+ {
+ /* [303] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(2),
+ },
+ {
+ /* [304] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(226),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(3),
+ },
+ {
+ /* [305] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(233),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(3),
+ },
+ {
+ /* [306] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(226),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(4),
+ },
+ {
+ /* [307] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(233),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(4),
+ },
+ {
+ /* [308] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(5),
+ },
+ {
+ /* [309] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(5),
+ },
+ {
+ /* [310] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(6),
+ },
+ {
+ /* [311] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(6),
+ },
+ {
+ /* [312] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(7),
+ },
+ {
+ /* [313] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(7),
+ },
+ {
+ /* [314] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(8),
+ },
+ {
+ /* [315] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(8),
+ },
+ {
+ /* [316] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(9),
+ },
+ {
+ /* [317] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(9),
+ },
+ {
+ /* [318] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(10),
+ },
+ {
+ /* [319] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(10),
+ },
+ {
+ /* [320] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(11),
+ },
+ {
+ /* [321] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(221),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(11),
+ },
+ {
+ /* [322] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(12),
+ },
+ {
+ /* [323] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(12),
+ },
+ {
+ /* [324] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(13),
+ },
+ {
+ /* [325] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(13),
+ },
+ {
+ /* [326] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(14),
+ },
+ {
+ /* [327] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(14),
+ },
+ {
+ /* [328] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(15),
+ },
+ {
+ /* [329] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(15),
+ },
+ {
+ /* [330] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(16),
+ },
+ {
+ /* [331] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(16),
+ },
+ {
+ /* [332] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(18),
+ },
+ {
+ /* [333] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(18),
+ },
+ {
+ /* [334] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(20),
+ },
+ {
+ /* [335] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(20),
+ },
+ {
+ /* [336] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(370),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [337] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(371),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(14),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [338] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(22),
+ },
+ {
+ /* [339] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(22),
+ },
+ {
+ /* [340] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(23),
+ },
+ {
+ /* [341] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(23),
+ },
+ {
+ /* [342] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(16),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(24),
+ },
+ {
+ /* [343] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(150),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(24),
+ },
+ {
+ /* [344] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(26),
+ },
+ {
+ /* [345] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(26),
+ },
+ {
+ /* [346] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(27),
+ },
+ {
+ /* [347] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(27),
+ },
+ {
+ /* [348] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(28),
+ },
+ {
+ /* [349] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(28),
+ },
+ {
+ /* [350] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(29),
+ },
+ {
+ /* [351] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(221),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(29),
+ },
+ {
+ /* [352] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(30),
+ },
+ {
+ /* [353] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(30),
+ },
+ {
+ /* [354] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(16),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(31),
+ },
+ {
+ /* [355] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(18),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(31),
+ },
+ {
+ /* [356] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(15),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(32),
+ },
+ {
+ /* [357] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 4,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(32),
+ },
+ {
+ /* [358] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(33),
+ },
+ {
+ /* [359] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(33),
+ },
+ {
+ /* [360] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(304),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(34),
+ },
+ {
+ /* [361] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 2,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(306),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(34),
+ },
+ {
+ /* [362] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(35),
+ },
+ {
+ /* [363] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(35),
+ },
+ {
+ /* [364] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(36),
+ },
+ {
+ /* [365] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(36),
+ },
+ {
+ /* [366] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(37),
+ },
+ {
+ /* [367] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(37),
+ },
+ {
+ /* [368] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(38),
+ },
+ {
+ /* [369] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(38),
+ },
+ {
+ /* [370] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(39),
+ },
+ {
+ /* [371] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(39),
+ },
+ {
+ /* [372] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(22),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(41),
+ },
+ {
+ /* [373] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(24),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(41),
+ },
+ {
+ /* [374] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(48),
+ },
+ {
+ /* [375] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(48),
+ },
+ {
+ /* [376] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(370),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(15),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(49),
+ },
+ {
+ /* [377] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(371),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(14),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(49),
+ },
+ {
+ /* [378] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(50),
+ },
+ {
+ /* [379] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(50),
+ },
+ {
+ /* [380] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(53),
+ },
+ {
+ /* [381] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(53),
+ },
+ {
+ /* [382] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(54),
+ },
+ {
+ /* [383] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(54),
+ },
+ {
+ /* [384] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(55),
+ },
+ {
+ /* [385] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(55),
+ },
+ {
+ /* [386] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(28),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(58),
+ },
+ {
+ /* [387] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(28),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(58),
+ },
+ {
+ /* [388] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(59),
+ },
+ {
+ /* [389] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(59),
+ },
+ {
+ /* [390] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(60),
+ },
+ {
+ /* [391] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(60),
+ },
+ {
+ /* [392] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(61),
+ },
+ {
+ /* [393] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(221),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(61),
+ },
+ {
+ /* [394] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(62),
+ },
+ {
+ /* [395] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(62),
+ },
+ {
+ /* [396] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(63),
+ },
+ {
+ /* [397] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(63),
+ },
+ {
+ /* [398] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(64),
+ },
+ {
+ /* [399] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(64),
+ },
+ {
+ /* [400] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(65),
+ },
+ {
+ /* [401] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(65),
+ },
+ {
+ /* [402] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(67),
+ },
+ {
+ /* [403] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(67),
+ },
+ {
+ /* [404] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(277),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [405] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(283),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [406] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(44),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [407] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(238),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [408] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(226),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(74),
+ },
+ {
+ /* [409] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(233),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(74),
+ },
+ {
+ /* [410] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(75),
+ },
+ {
+ /* [411] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(75),
+ },
+ {
+ /* [412] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(28),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(76),
+ },
+ {
+ /* [413] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(28),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(76),
+ },
+ {
+ /* [414] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(85),
+ },
+ {
+ /* [415] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(85),
+ },
+ {
+ /* [416] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(90),
+ },
+ {
+ /* [417] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(90),
+ },
+ {
+ /* [418] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(91),
+ },
+ {
+ /* [419] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(27),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(91),
+ },
+ {
+ /* [420] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(92),
+ },
+ {
+ /* [421] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(92),
+ },
+ {
+ /* [422] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(93),
+ },
+ {
+ /* [423] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(93),
+ },
+ {
+ /* [424] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(94),
+ },
+ {
+ /* [425] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(94),
+ },
+ {
+ /* [426] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(95),
+ },
+ {
+ /* [427] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(8),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(95),
+ },
+ {
+ /* [428] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(16),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(96),
+ },
+ {
+ /* [429] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(351),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(96),
+ },
+ {
+ /* [430] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(16),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(97),
+ },
+ {
+ /* [431] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(29),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(351),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(97),
+ },
+ {
+ /* [432] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(25),
+ /* template_numbers */ TemplateNumberIndex(7),
+ /* parameters */ ParameterIndex(368),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [433] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(213),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(10),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(17),
+ },
+ {
+ /* [434] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(369),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(19),
+ },
+ {
+ /* [435] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(24),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(21),
+ },
+ {
+ /* [436] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(17),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(53),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [437] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(17),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [438] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(221),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(25),
+ },
+ {
+ /* [439] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(42),
+ },
+ {
+ /* [440] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(372),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(43),
+ },
+ {
+ /* [441] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(372),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(44),
+ },
+ {
+ /* [442] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(372),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(45),
+ },
+ {
+ /* [443] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(373),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(46),
+ },
+ {
+ /* [444] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(373),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(35),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(47),
+ },
+ {
+ /* [445] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(149),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(51),
+ },
+ {
+ /* [446] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(4),
+ /* parameters */ ParameterIndex(222),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(6),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(1),
+ /* const_eval_fn */ ConstEvalFunctionIndex(52),
+ },
+ {
+ /* [447] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [448] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 2,
+ /* template_types */ TemplateTypeIndex(10),
+ /* template_numbers */ TemplateNumberIndex(3),
+ /* parameters */ ParameterIndex(353),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(12),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(3),
+ /* const_eval_fn */ ConstEvalFunctionIndex(66),
+ },
+ {
+ /* [449] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(17),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(68),
+ },
+ {
+ /* [450] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(17),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(69),
+ },
+ {
+ /* [451] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(17),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(26),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(70),
+ },
+ {
+ /* [452] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(17),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(71),
+ },
+ {
+ /* [453] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(17),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(28),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(72),
+ },
+ {
+ /* [454] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(25),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(374),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [455] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(8),
+ /* parameters */ ParameterIndex(0),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [456] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(8),
+ /* parameters */ ParameterIndex(0),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(/* invalid */),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [457] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(8),
+ /* parameters */ ParameterIndex(0),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [458] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 3,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 1,
+ /* template_types */ TemplateTypeIndex(26),
+ /* template_numbers */ TemplateNumberIndex(8),
+ /* parameters */ ParameterIndex(0),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(80),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [459] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 0,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(/* invalid */),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(74),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [460] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(0),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(348),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
+ },
+ {
+ /* [461] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(25),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(1),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(2),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(73),
+ },
+ {
+ /* [462] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(226),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(88),
+ },
+ {
+ /* [463] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 2,
+ /* num_template_types */ 0,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(/* invalid */),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(226),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(9),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(89),
+ },
+ {
+ /* [464] */
+ /* flags */ OverloadFlags(OverloadFlag::kIsConverter, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMustUse),
+ /* num_parameters */ 1,
+ /* num_template_types */ 1,
+ /* num_template_numbers */ 0,
+ /* template_types */ TemplateTypeIndex(35),
+ /* template_numbers */ TemplateNumberIndex(/* invalid */),
+ /* parameters */ ParameterIndex(213),
+ /* return_type_matcher_indices */ TypeMatcherIndicesIndex(158),
+ /* return_number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */),
+ /* const_eval_fn */ ConstEvalFunctionIndex(99),
+ },
+};
+
+static_assert(OverloadIndex::CanIndex(kOverloads),
+ "OverloadIndex is not large enough to index kOverloads");
+
+constexpr IntrinsicInfo kBuiltins[] = {
+ {
+ /* [0] */
+ /* fn abs<T : fia_fiu32_f16>(T) -> T */
+ /* fn abs<N : num, T : fia_fiu32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(298),
+ },
+ {
+ /* [1] */
+ /* fn acos<T : fa_f32_f16>(@test_value(0.96891242171) T) -> T */
+ /* fn acos<N : num, T : fa_f32_f16>(@test_value(0.96891242171) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(300),
+ },
+ {
+ /* [2] */
+ /* fn acosh<T : fa_f32_f16>(@test_value(1.5430806348) T) -> T */
+ /* fn acosh<N : num, T : fa_f32_f16>(@test_value(1.5430806348) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(302),
+ },
+ {
+ /* [3] */
+ /* fn all(bool) -> bool */
+ /* fn all<N : num>(vec<N, bool>) -> bool */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(304),
+ },
+ {
+ /* [4] */
+ /* fn any(bool) -> bool */
+ /* fn any<N : num>(vec<N, bool>) -> bool */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(306),
+ },
+ {
+ /* [5] */
+ /* fn arrayLength<T, A : access>(ptr<storage, array<T>, A>) -> u32 */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(432),
+ },
+ {
+ /* [6] */
+ /* fn asin<T : fa_f32_f16>(@test_value(0.479425538604) T) -> T */
+ /* fn asin<N : num, T : fa_f32_f16>(@test_value(0.479425538604) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(308),
+ },
+ {
+ /* [7] */
+ /* fn asinh<T : fa_f32_f16>(T) -> T */
+ /* fn asinh<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(310),
+ },
+ {
+ /* [8] */
+ /* fn atan<T : fa_f32_f16>(T) -> T */
+ /* fn atan<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(312),
+ },
+ {
+ /* [9] */
+ /* fn atan2<T : fa_f32_f16>(T, T) -> T */
+ /* fn atan2<T : fa_f32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(314),
+ },
+ {
+ /* [10] */
+ /* fn atanh<T : fa_f32_f16>(@test_value(0.5) T) -> T */
+ /* fn atanh<N : num, T : fa_f32_f16>(@test_value(0.5) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(316),
+ },
+ {
+ /* [11] */
+ /* fn ceil<T : fa_f32_f16>(@test_value(1.5) T) -> T */
+ /* fn ceil<N : num, T : fa_f32_f16>(@test_value(1.5) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(318),
+ },
+ {
+ /* [12] */
+ /* fn clamp<T : fia_fiu32_f16>(T, T, T) -> T */
+ /* fn clamp<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(320),
+ },
+ {
+ /* [13] */
+ /* fn cos<T : fa_f32_f16>(@test_value(0) T) -> T */
+ /* fn cos<N : num, T : fa_f32_f16>(@test_value(0) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(322),
+ },
+ {
+ /* [14] */
+ /* fn cosh<T : fa_f32_f16>(@test_value(0) T) -> T */
+ /* fn cosh<N : num, T : fa_f32_f16>(@test_value(0) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(324),
+ },
+ {
+ /* [15] */
+ /* fn countLeadingZeros<T : iu32>(T) -> T */
+ /* fn countLeadingZeros<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(326),
+ },
+ {
+ /* [16] */
+ /* fn countOneBits<T : iu32>(T) -> T */
+ /* fn countOneBits<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(328),
+ },
+ {
+ /* [17] */
+ /* fn countTrailingZeros<T : iu32>(T) -> T */
+ /* fn countTrailingZeros<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(330),
+ },
+ {
+ /* [18] */
+ /* fn cross<T : fa_f32_f16>(vec3<T>, vec3<T>) -> vec3<T> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(433),
+ },
+ {
+ /* [19] */
+ /* fn degrees<T : fa_f32_f16>(T) -> T */
+ /* fn degrees<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(332),
+ },
+ {
+ /* [20] */
+ /* fn determinant<N : num, T : fa_f32_f16>(mat<N, N, T>) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(434),
+ },
+ {
+ /* [21] */
+ /* fn distance<T : fa_f32_f16>(T, T) -> T */
+ /* fn distance<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>) -> T */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(334),
+ },
+ {
+ /* [22] */
+ /* fn dot<N : num, T : fia_fiu32_f16>(vec<N, T>, vec<N, T>) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(435),
+ },
+ {
+ /* [23] */
+ /* fn dot4I8Packed(u32, u32) -> i32 */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(436),
+ },
+ {
+ /* [24] */
+ /* fn dot4U8Packed(u32, u32) -> u32 */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(437),
+ },
+ {
+ /* [25] */
+ /* fn dpdx(f32) -> f32 */
+ /* fn dpdx<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [26] */
+ /* fn dpdxCoarse(f32) -> f32 */
+ /* fn dpdxCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [27] */
+ /* fn dpdxFine(f32) -> f32 */
+ /* fn dpdxFine<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [28] */
+ /* fn dpdy(f32) -> f32 */
+ /* fn dpdy<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [29] */
+ /* fn dpdyCoarse(f32) -> f32 */
+ /* fn dpdyCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [30] */
+ /* fn dpdyFine(f32) -> f32 */
+ /* fn dpdyFine<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [31] */
+ /* fn exp<T : fa_f32_f16>(T) -> T */
+ /* fn exp<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(338),
+ },
+ {
+ /* [32] */
+ /* fn exp2<T : fa_f32_f16>(T) -> T */
+ /* fn exp2<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(340),
+ },
+ {
+ /* [33] */
+ /* fn extractBits<T : iu32>(T, u32, u32) -> T */
+ /* fn extractBits<N : num, T : iu32>(vec<N, T>, u32, u32) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(342),
+ },
+ {
+ /* [34] */
+ /* fn faceForward<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(438),
+ },
+ {
+ /* [35] */
+ /* fn firstLeadingBit<T : iu32>(T) -> T */
+ /* fn firstLeadingBit<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(344),
+ },
+ {
+ /* [36] */
+ /* fn firstTrailingBit<T : iu32>(T) -> T */
+ /* fn firstTrailingBit<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(346),
+ },
+ {
+ /* [37] */
+ /* fn floor<T : fa_f32_f16>(@test_value(1.5) T) -> T */
+ /* fn floor<N : num, T : fa_f32_f16>(@test_value(1.5) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(348),
+ },
+ {
+ /* [38] */
+ /* fn fma<T : fa_f32_f16>(T, T, T) -> T */
+ /* fn fma<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(350),
+ },
+ {
+ /* [39] */
+ /* fn fract<T : fa_f32_f16>(@test_value(1.25) T) -> T */
+ /* fn fract<N : num, T : fa_f32_f16>(@test_value(1.25) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(352),
+ },
+ {
+ /* [40] */
+ /* fn frexp<T : fa_f32_f16>(T) -> __frexp_result<T> */
+ /* fn frexp<N : num, T : fa_f32_f16>(vec<N, T>) -> __frexp_result_vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(354),
+ },
+ {
+ /* [41] */
+ /* fn fwidth(f32) -> f32 */
+ /* fn fwidth<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [42] */
+ /* fn fwidthCoarse(f32) -> f32 */
+ /* fn fwidthCoarse<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [43] */
+ /* fn fwidthFine(f32) -> f32 */
+ /* fn fwidthFine<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(336),
+ },
+ {
+ /* [44] */
+ /* fn insertBits<T : iu32>(T, T, u32, u32) -> T */
+ /* fn insertBits<N : num, T : iu32>(vec<N, T>, vec<N, T>, u32, u32) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(356),
+ },
+ {
+ /* [45] */
+ /* fn inverseSqrt<T : fa_f32_f16>(T) -> T */
+ /* fn inverseSqrt<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(358),
+ },
+ {
+ /* [46] */
+ /* fn ldexp<T : fa_f32_f16, U : ia_i32>(T, U) -> T */
+ /* fn ldexp<N : num, T : fa_f32_f16, U : ia_i32>(vec<N, T>, vec<N, U>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(360),
+ },
+ {
+ /* [47] */
+ /* fn length<T : fa_f32_f16>(@test_value(0) T) -> T */
+ /* fn length<N : num, T : fa_f32_f16>(@test_value(0) vec<N, T>) -> T */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(362),
+ },
+ {
+ /* [48] */
+ /* fn log<T : fa_f32_f16>(T) -> T */
+ /* fn log<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(364),
+ },
+ {
+ /* [49] */
+ /* fn log2<T : fa_f32_f16>(T) -> T */
+ /* fn log2<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(366),
+ },
+ {
+ /* [50] */
+ /* fn max<T : fia_fiu32_f16>(T, T) -> T */
+ /* fn max<N : num, T : fia_fiu32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(368),
+ },
+ {
+ /* [51] */
+ /* fn min<T : fia_fiu32_f16>(T, T) -> T */
+ /* fn min<N : num, T : fia_fiu32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(370),
+ },
+ {
+ /* [52] */
+ /* fn mix<T : fa_f32_f16>(T, T, T) -> T */
+ /* fn mix<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* fn mix<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>, T) -> vec<N, T> */
+ /* num overloads */ 3,
+ /* overloads */ OverloadIndex(277),
+ },
+ {
+ /* [53] */
+ /* fn modf<T : fa_f32_f16>(@test_value(-1.5) T) -> __modf_result<T> */
+ /* fn modf<N : num, T : fa_f32_f16>(@test_value(-1.5) vec<N, T>) -> __modf_result_vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(372),
+ },
+ {
+ /* [54] */
+ /* fn normalize<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(439),
+ },
+ {
+ /* [55] */
+ /* fn pack2x16float(vec2<f32>) -> u32 */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(440),
+ },
+ {
+ /* [56] */
+ /* fn pack2x16snorm(vec2<f32>) -> u32 */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(441),
+ },
+ {
+ /* [57] */
+ /* fn pack2x16unorm(vec2<f32>) -> u32 */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(442),
+ },
+ {
+ /* [58] */
+ /* fn pack4x8snorm(vec4<f32>) -> u32 */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(443),
+ },
+ {
+ /* [59] */
+ /* fn pack4x8unorm(vec4<f32>) -> u32 */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(444),
+ },
+ {
+ /* [60] */
+ /* fn pow<T : fa_f32_f16>(T, T) -> T */
+ /* fn pow<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(374),
+ },
+ {
+ /* [61] */
+ /* fn quantizeToF16(f32) -> f32 */
+ /* fn quantizeToF16<N : num>(vec<N, f32>) -> vec<N, f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(376),
+ },
+ {
+ /* [62] */
+ /* fn radians<T : fa_f32_f16>(T) -> T */
+ /* fn radians<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(378),
+ },
+ {
+ /* [63] */
+ /* fn reflect<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(445),
+ },
+ {
+ /* [64] */
+ /* fn refract<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>, T) -> vec<N, T> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(446),
+ },
+ {
+ /* [65] */
+ /* fn reverseBits<T : iu32>(T) -> T */
+ /* fn reverseBits<N : num, T : iu32>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(380),
+ },
+ {
+ /* [66] */
+ /* fn round<T : fa_f32_f16>(@test_value(3.5) T) -> T */
+ /* fn round<N : num, T : fa_f32_f16>(@test_value(3.5) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(382),
+ },
+ {
+ /* [67] */
+ /* fn saturate<T : fa_f32_f16>(@test_value(2) T) -> T */
+ /* fn saturate<T : fa_f32_f16, N : num>(@test_value(2) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(384),
+ },
+ {
+ /* [68] */
+ /* fn select<T : scalar>(T, T, bool) -> T */
+ /* fn select<T : scalar, N : num>(vec<N, T>, vec<N, T>, bool) -> vec<N, T> */
+ /* fn select<N : num, T : scalar>(vec<N, T>, vec<N, T>, vec<N, bool>) -> vec<N, T> */
+ /* num overloads */ 3,
+ /* overloads */ OverloadIndex(280),
+ },
+ {
+ /* [69] */
+ /* fn sign<T : fia_fi32_f16>(T) -> T */
+ /* fn sign<N : num, T : fia_fi32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(386),
+ },
+ {
+ /* [70] */
+ /* fn sin<T : fa_f32_f16>(@test_value(1.57079632679) T) -> T */
+ /* fn sin<N : num, T : fa_f32_f16>(@test_value(1.57079632679) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(388),
+ },
+ {
+ /* [71] */
+ /* fn sinh<T : fa_f32_f16>(T) -> T */
+ /* fn sinh<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(390),
+ },
+ {
+ /* [72] */
+ /* fn smoothstep<T : fa_f32_f16>(@test_value(2) T, @test_value(4) T, @test_value(3) T) -> T */
+ /* fn smoothstep<N : num, T : fa_f32_f16>(@test_value(2) vec<N, T>, @test_value(4) vec<N, T>, @test_value(3) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(392),
+ },
+ {
+ /* [73] */
+ /* fn sqrt<T : fa_f32_f16>(T) -> T */
+ /* fn sqrt<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(394),
+ },
+ {
+ /* [74] */
+ /* fn step<T : fa_f32_f16>(T, T) -> T */
+ /* fn step<N : num, T : fa_f32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(396),
+ },
+ {
+ /* [75] */
+ /* fn storageBarrier() */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(447),
+ },
+ {
+ /* [76] */
+ /* fn tan<T : fa_f32_f16>(T) -> T */
+ /* fn tan<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(398),
+ },
+ {
+ /* [77] */
+ /* fn tanh<T : fa_f32_f16>(T) -> T */
+ /* fn tanh<N : num, T : fa_f32_f16>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(400),
+ },
+ {
+ /* [78] */
+ /* fn transpose<M : num, N : num, T : fa_f32_f16>(mat<M, N, T>) -> mat<N, M, T> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(448),
+ },
+ {
+ /* [79] */
+ /* fn trunc<T : fa_f32_f16>(@test_value(1.5) T) -> T */
+ /* fn trunc<N : num, T : fa_f32_f16>(@test_value(1.5) vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(402),
+ },
+ {
+ /* [80] */
+ /* fn unpack2x16float(u32) -> vec2<f32> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(449),
+ },
+ {
+ /* [81] */
+ /* fn unpack2x16snorm(u32) -> vec2<f32> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(450),
+ },
+ {
+ /* [82] */
+ /* fn unpack2x16unorm(u32) -> vec2<f32> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(451),
+ },
+ {
+ /* [83] */
+ /* fn unpack4x8snorm(u32) -> vec4<f32> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(452),
+ },
+ {
+ /* [84] */
+ /* fn unpack4x8unorm(u32) -> vec4<f32> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(453),
+ },
+ {
+ /* [85] */
+ /* fn workgroupBarrier() */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(447),
+ },
+ {
+ /* [86] */
+ /* fn workgroupUniformLoad<T>(ptr<workgroup, T, read_write>) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(454),
+ },
+ {
+ /* [87] */
+ /* fn textureBarrier() */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(447),
+ },
+ {
+ /* [88] */
+ /* fn textureDimensions<T : fiu32>(texture: texture_1d<T>) -> u32 */
+ /* fn textureDimensions<T : fiu32, L : iu32>(texture: texture_1d<T>, level: L) -> u32 */
+ /* fn textureDimensions<T : fiu32>(texture: texture_2d<T>) -> vec2<u32> */
+ /* fn textureDimensions<T : fiu32, L : iu32>(texture: texture_2d<T>, level: L) -> vec2<u32> */
+ /* fn textureDimensions<T : fiu32>(texture: texture_2d_array<T>) -> vec2<u32> */
+ /* fn textureDimensions<T : fiu32, L : iu32>(texture: texture_2d_array<T>, level: L) -> vec2<u32> */
+ /* fn textureDimensions<T : fiu32>(texture: texture_3d<T>) -> vec3<u32> */
+ /* fn textureDimensions<T : fiu32, L : iu32>(texture: texture_3d<T>, level: L) -> vec3<u32> */
+ /* fn textureDimensions<T : fiu32>(texture: texture_cube<T>) -> vec2<u32> */
+ /* fn textureDimensions<T : fiu32, L : iu32>(texture: texture_cube<T>, level: L) -> vec2<u32> */
+ /* fn textureDimensions<T : fiu32>(texture: texture_cube_array<T>) -> vec2<u32> */
+ /* fn textureDimensions<T : fiu32, L : iu32>(texture: texture_cube_array<T>, level: L) -> vec2<u32> */
+ /* fn textureDimensions<T : fiu32>(texture: texture_multisampled_2d<T>) -> vec2<u32> */
+ /* fn textureDimensions(texture: texture_depth_2d) -> vec2<u32> */
+ /* fn textureDimensions<L : iu32>(texture: texture_depth_2d, level: L) -> vec2<u32> */
+ /* fn textureDimensions(texture: texture_depth_2d_array) -> vec2<u32> */
+ /* fn textureDimensions<L : iu32>(texture: texture_depth_2d_array, level: L) -> vec2<u32> */
+ /* fn textureDimensions(texture: texture_depth_cube) -> vec2<u32> */
+ /* fn textureDimensions<L : iu32>(texture: texture_depth_cube, level: L) -> vec2<u32> */
+ /* fn textureDimensions(texture: texture_depth_cube_array) -> vec2<u32> */
+ /* fn textureDimensions<L : iu32>(texture: texture_depth_cube_array, level: L) -> vec2<u32> */
+ /* fn textureDimensions(texture: texture_depth_multisampled_2d) -> vec2<u32> */
+ /* fn textureDimensions<F : texel_format, A : access>(texture: texture_storage_1d<F, A>) -> u32 */
+ /* fn textureDimensions<F : texel_format, A : access>(texture: texture_storage_2d<F, A>) -> vec2<u32> */
+ /* fn textureDimensions<F : texel_format, A : access>(texture: texture_storage_2d_array<F, A>) -> vec2<u32> */
+ /* fn textureDimensions<F : texel_format, A : access>(texture: texture_storage_3d<F, A>) -> vec3<u32> */
+ /* fn textureDimensions(texture: texture_external) -> vec2<u32> */
+ /* num overloads */ 27,
+ /* overloads */ OverloadIndex(0),
+ },
+ {
+ /* [89] */
+ /* fn textureGather<T : fiu32, C : iu32>(@const component: C, texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>) -> vec4<T> */
+ /* fn textureGather<T : fiu32, C : iu32>(@const component: C, texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> vec4<T> */
+ /* fn textureGather<T : fiu32, C : iu32, A : iu32>(@const component: C, texture: texture_2d_array<T>, sampler: sampler, coords: vec2<f32>, array_index: A) -> vec4<T> */
+ /* fn textureGather<T : fiu32, C : iu32, A : iu32>(@const component: C, texture: texture_2d_array<T>, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> vec4<T> */
+ /* fn textureGather<T : fiu32, C : iu32>(@const component: C, texture: texture_cube<T>, sampler: sampler, coords: vec3<f32>) -> vec4<T> */
+ /* fn textureGather<T : fiu32, C : iu32, A : iu32>(@const component: C, texture: texture_cube_array<T>, sampler: sampler, coords: vec3<f32>, array_index: A) -> vec4<T> */
+ /* fn textureGather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */
+ /* fn textureGather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureGather<A : iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A) -> vec4<f32> */
+ /* fn textureGather<A : iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureGather(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> vec4<f32> */
+ /* fn textureGather<A : iu32>(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A) -> vec4<f32> */
+ /* num overloads */ 12,
+ /* overloads */ OverloadIndex(93),
+ },
+ {
+ /* [90] */
+ /* fn textureGatherCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> vec4<f32> */
+ /* fn textureGatherCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureGatherCompare<A : iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32) -> vec4<f32> */
+ /* fn textureGatherCompare<A : iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureGatherCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> vec4<f32> */
+ /* fn textureGatherCompare<A : iu32>(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: A, depth_ref: f32) -> vec4<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(174),
+ },
+ {
+ /* [91] */
+ /* fn textureNumLayers<T : fiu32>(texture: texture_2d_array<T>) -> u32 */
+ /* fn textureNumLayers<T : fiu32>(texture: texture_cube_array<T>) -> u32 */
+ /* fn textureNumLayers(texture: texture_depth_2d_array) -> u32 */
+ /* fn textureNumLayers(texture: texture_depth_cube_array) -> u32 */
+ /* fn textureNumLayers<F : texel_format, A : access>(texture: texture_storage_2d_array<F, A>) -> u32 */
+ /* num overloads */ 5,
+ /* overloads */ OverloadIndex(246),
+ },
+ {
+ /* [92] */
+ /* fn textureNumLevels<T : fiu32>(texture: texture_1d<T>) -> u32 */
+ /* fn textureNumLevels<T : fiu32>(texture: texture_2d<T>) -> u32 */
+ /* fn textureNumLevels<T : fiu32>(texture: texture_2d_array<T>) -> u32 */
+ /* fn textureNumLevels<T : fiu32>(texture: texture_3d<T>) -> u32 */
+ /* fn textureNumLevels<T : fiu32>(texture: texture_cube<T>) -> u32 */
+ /* fn textureNumLevels<T : fiu32>(texture: texture_cube_array<T>) -> u32 */
+ /* fn textureNumLevels(texture: texture_depth_2d) -> u32 */
+ /* fn textureNumLevels(texture: texture_depth_2d_array) -> u32 */
+ /* fn textureNumLevels(texture: texture_depth_cube) -> u32 */
+ /* fn textureNumLevels(texture: texture_depth_cube_array) -> u32 */
+ /* num overloads */ 10,
+ /* overloads */ OverloadIndex(129),
+ },
+ {
+ /* [93] */
+ /* fn textureNumSamples<T : fiu32>(texture: texture_multisampled_2d<T>) -> u32 */
+ /* fn textureNumSamples(texture: texture_depth_multisampled_2d) -> u32 */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(404),
+ },
+ {
+ /* [94] */
+ /* fn textureSample(texture: texture_1d<f32>, sampler: sampler, coords: f32) -> vec4<f32> */
+ /* fn textureSample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */
+ /* fn textureSample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureSample<A : iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A) -> vec4<f32> */
+ /* fn textureSample<A : iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureSample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32> */
+ /* fn textureSample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, @const offset: vec3<i32>) -> vec4<f32> */
+ /* fn textureSample(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32> */
+ /* fn textureSample<A : iu32>(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A) -> vec4<f32> */
+ /* fn textureSample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>) -> f32 */
+ /* fn textureSample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> f32 */
+ /* fn textureSample<A : iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A) -> f32 */
+ /* fn textureSample<A : iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> f32 */
+ /* fn textureSample(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> f32 */
+ /* fn textureSample<A : iu32>(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A) -> f32 */
+ /* num overloads */ 15,
+ /* overloads */ OverloadIndex(64),
+ },
+ {
+ /* [95] */
+ /* fn textureSampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32) -> vec4<f32> */
+ /* fn textureSampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureSampleBias<A : iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, bias: f32) -> vec4<f32> */
+ /* fn textureSampleBias<A : iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, bias: f32, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureSampleBias(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, bias: f32) -> vec4<f32> */
+ /* fn textureSampleBias(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, bias: f32, @const offset: vec3<i32>) -> vec4<f32> */
+ /* fn textureSampleBias(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, bias: f32) -> vec4<f32> */
+ /* fn textureSampleBias<A : iu32>(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, bias: f32) -> vec4<f32> */
+ /* num overloads */ 8,
+ /* overloads */ OverloadIndex(158),
+ },
+ {
+ /* [96] */
+ /* fn textureSampleCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32 */
+ /* fn textureSampleCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, @const offset: vec2<i32>) -> f32 */
+ /* fn textureSampleCompare<A : iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32) -> f32 */
+ /* fn textureSampleCompare<A : iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32, @const offset: vec2<i32>) -> f32 */
+ /* fn textureSampleCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32 */
+ /* fn textureSampleCompare<A : iu32>(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: A, depth_ref: f32) -> f32 */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(180),
+ },
+ {
+ /* [97] */
+ /* fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32 */
+ /* fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, @const offset: vec2<i32>) -> f32 */
+ /* fn textureSampleCompareLevel<A : iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32) -> f32 */
+ /* fn textureSampleCompareLevel<A : iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32, @const offset: vec2<i32>) -> f32 */
+ /* fn textureSampleCompareLevel(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32 */
+ /* fn textureSampleCompareLevel<A : iu32>(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: A, depth_ref: f32) -> f32 */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(186),
+ },
+ {
+ /* [98] */
+ /* fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32> */
+ /* fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureSampleGrad<A : iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32> */
+ /* fn textureSampleGrad<A : iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, ddx: vec2<f32>, ddy: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureSampleGrad(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32> */
+ /* fn textureSampleGrad(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>, @const offset: vec3<i32>) -> vec4<f32> */
+ /* fn textureSampleGrad(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32> */
+ /* fn textureSampleGrad<A : iu32>(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32> */
+ /* num overloads */ 8,
+ /* overloads */ OverloadIndex(166),
+ },
+ {
+ /* [99] */
+ /* fn textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32) -> vec4<f32> */
+ /* fn textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureSampleLevel<A : iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: f32) -> vec4<f32> */
+ /* fn textureSampleLevel<A : iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: f32, @const offset: vec2<i32>) -> vec4<f32> */
+ /* fn textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32> */
+ /* fn textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32, @const offset: vec3<i32>) -> vec4<f32> */
+ /* fn textureSampleLevel(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32> */
+ /* fn textureSampleLevel<A : iu32>(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, level: f32) -> vec4<f32> */
+ /* fn textureSampleLevel<L : iu32>(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: L) -> f32 */
+ /* fn textureSampleLevel<L : iu32>(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: L, @const offset: vec2<i32>) -> f32 */
+ /* fn textureSampleLevel<A : iu32, L : iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: L) -> f32 */
+ /* fn textureSampleLevel<A : iu32, L : iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: L, @const offset: vec2<i32>) -> f32 */
+ /* fn textureSampleLevel<L : iu32>(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>, level: L) -> f32 */
+ /* fn textureSampleLevel<A : iu32, L : iu32>(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A, level: L) -> f32 */
+ /* num overloads */ 14,
+ /* overloads */ OverloadIndex(79),
+ },
+ {
+ /* [100] */
+ /* fn textureSampleBaseClampToEdge(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */
+ /* fn textureSampleBaseClampToEdge(texture: texture_external, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(406),
+ },
+ {
+ /* [101] */
+ /* fn textureStore<C : iu32>(texture: texture_storage_1d<f32_texel_format, writable>, coords: C, value: vec4<f32>) */
+ /* fn textureStore<C : iu32>(texture: texture_storage_2d<f32_texel_format, writable>, coords: vec2<C>, value: vec4<f32>) */
+ /* fn textureStore<C : iu32, A : iu32>(texture: texture_storage_2d_array<f32_texel_format, writable>, coords: vec2<C>, array_index: A, value: vec4<f32>) */
+ /* fn textureStore<C : iu32>(texture: texture_storage_3d<f32_texel_format, writable>, coords: vec3<C>, value: vec4<f32>) */
+ /* fn textureStore<C : iu32>(texture: texture_storage_1d<i32_texel_format, writable>, coords: C, value: vec4<i32>) */
+ /* fn textureStore<C : iu32>(texture: texture_storage_2d<i32_texel_format, writable>, coords: vec2<C>, value: vec4<i32>) */
+ /* fn textureStore<C : iu32, A : iu32>(texture: texture_storage_2d_array<i32_texel_format, writable>, coords: vec2<C>, array_index: A, value: vec4<i32>) */
+ /* fn textureStore<C : iu32>(texture: texture_storage_3d<i32_texel_format, writable>, coords: vec3<C>, value: vec4<i32>) */
+ /* fn textureStore<C : iu32>(texture: texture_storage_1d<u32_texel_format, writable>, coords: C, value: vec4<u32>) */
+ /* fn textureStore<C : iu32>(texture: texture_storage_2d<u32_texel_format, writable>, coords: vec2<C>, value: vec4<u32>) */
+ /* fn textureStore<C : iu32, A : iu32>(texture: texture_storage_2d_array<u32_texel_format, writable>, coords: vec2<C>, array_index: A, value: vec4<u32>) */
+ /* fn textureStore<C : iu32>(texture: texture_storage_3d<u32_texel_format, writable>, coords: vec3<C>, value: vec4<u32>) */
+ /* num overloads */ 12,
+ /* overloads */ OverloadIndex(105),
+ },
+ {
+ /* [102] */
+ /* fn textureLoad<T : fiu32, C : iu32, L : iu32>(texture: texture_1d<T>, coords: C, level: L) -> vec4<T> */
+ /* fn textureLoad<T : fiu32, C : iu32, L : iu32>(texture: texture_2d<T>, coords: vec2<C>, level: L) -> vec4<T> */
+ /* fn textureLoad<T : fiu32, C : iu32, A : iu32, L : iu32>(texture: texture_2d_array<T>, coords: vec2<C>, array_index: A, level: L) -> vec4<T> */
+ /* fn textureLoad<T : fiu32, C : iu32, L : iu32>(texture: texture_3d<T>, coords: vec3<C>, level: L) -> vec4<T> */
+ /* fn textureLoad<T : fiu32, C : iu32, S : iu32>(texture: texture_multisampled_2d<T>, coords: vec2<C>, sample_index: S) -> vec4<T> */
+ /* fn textureLoad<C : iu32, L : iu32>(texture: texture_depth_2d, coords: vec2<C>, level: L) -> f32 */
+ /* fn textureLoad<C : iu32, A : iu32, L : iu32>(texture: texture_depth_2d_array, coords: vec2<C>, array_index: A, level: L) -> f32 */
+ /* fn textureLoad<C : iu32, S : iu32>(texture: texture_depth_multisampled_2d, coords: vec2<C>, sample_index: S) -> f32 */
+ /* fn textureLoad<C : iu32>(texture: texture_external, coords: vec2<C>) -> vec4<f32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_1d<f32_texel_format, readable>, coords: C) -> vec4<f32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_1d<i32_texel_format, readable>, coords: C) -> vec4<i32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_1d<u32_texel_format, readable>, coords: C) -> vec4<u32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_2d<f32_texel_format, readable>, coords: vec2<C>) -> vec4<f32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_2d<i32_texel_format, readable>, coords: vec2<C>) -> vec4<i32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_2d<u32_texel_format, readable>, coords: vec2<C>) -> vec4<u32> */
+ /* fn textureLoad<C : iu32, A : iu32>(texture: texture_storage_2d_array<f32_texel_format, readable>, coords: vec2<C>, array_index: A) -> vec4<f32> */
+ /* fn textureLoad<C : iu32, A : iu32>(texture: texture_storage_2d_array<i32_texel_format, readable>, coords: vec2<C>, array_index: A) -> vec4<i32> */
+ /* fn textureLoad<C : iu32, A : iu32>(texture: texture_storage_2d_array<u32_texel_format, readable>, coords: vec2<C>, array_index: A) -> vec4<u32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_3d<f32_texel_format, readable>, coords: vec3<C>) -> vec4<f32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_3d<i32_texel_format, readable>, coords: vec3<C>) -> vec4<i32> */
+ /* fn textureLoad<C : iu32>(texture: texture_storage_3d<u32_texel_format, readable>, coords: vec3<C>) -> vec4<u32> */
+ /* num overloads */ 21,
+ /* overloads */ OverloadIndex(27),
+ },
+ {
+ /* [103] */
+ /* fn atomicLoad<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(455),
+ },
+ {
+ /* [104] */
+ /* fn atomicStore<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(456),
+ },
+ {
+ /* [105] */
+ /* fn atomicAdd<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(457),
+ },
+ {
+ /* [106] */
+ /* fn atomicSub<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(457),
+ },
+ {
+ /* [107] */
+ /* fn atomicMax<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(457),
+ },
+ {
+ /* [108] */
+ /* fn atomicMin<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(457),
+ },
+ {
+ /* [109] */
+ /* fn atomicAnd<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(457),
+ },
+ {
+ /* [110] */
+ /* fn atomicOr<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(457),
+ },
+ {
+ /* [111] */
+ /* fn atomicXor<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(457),
+ },
+ {
+ /* [112] */
+ /* fn atomicExchange<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(457),
+ },
+ {
+ /* [113] */
+ /* fn atomicCompareExchangeWeak<T : iu32, S : workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T, T) -> __atomic_compare_exchange_result<T> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(458),
+ },
+ {
+ /* [114] */
+ /* fn subgroupBallot() -> vec4<u32> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(459),
+ },
+ {
+ /* [115] */
+ /* fn subgroupBroadcast<T : fiu32>(value: T, @const sourceLaneIndex: u32) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(460),
+ },
+ {
+ /* [116] */
+ /* fn _tint_materialize<T>(T) -> T */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(461),
+ },
+};
+
+constexpr IntrinsicInfo kUnaryOperators[] = {
+ {
+ /* [0] */
+ /* op !(bool) -> bool */
+ /* op !<N : num>(vec<N, bool>) -> vec<N, bool> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(408),
+ },
+ {
+ /* [1] */
+ /* op ~<T : ia_iu32>(T) -> T */
+ /* op ~<T : ia_iu32, N : num>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(410),
+ },
+ {
+ /* [2] */
+ /* op -<T : fia_fi32_f16>(T) -> T */
+ /* op -<T : fia_fi32_f16, N : num>(vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(412),
+ },
+};
+constexpr uint8_t kUnaryOperatorNot = 0;
+constexpr uint8_t kUnaryOperatorComplement = 1;
+constexpr uint8_t kUnaryOperatorMinus = 2;
+
+constexpr IntrinsicInfo kBinaryOperators[] = {
+ {
+ /* [0] */
+ /* op +<T : fia_fiu32_f16>(T, T) -> T */
+ /* op +<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* op +<T : fia_fiu32_f16, N : num>(vec<N, T>, T) -> vec<N, T> */
+ /* op +<T : fia_fiu32_f16, N : num>(T, vec<N, T>) -> vec<N, T> */
+ /* op +<T : fa_f32_f16, N : num, M : num>(mat<N, M, T>, mat<N, M, T>) -> mat<N, M, T> */
+ /* num overloads */ 5,
+ /* overloads */ OverloadIndex(251),
+ },
+ {
+ /* [1] */
+ /* op -<T : fia_fiu32_f16>(T, T) -> T */
+ /* op -<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* op -<T : fia_fiu32_f16, N : num>(vec<N, T>, T) -> vec<N, T> */
+ /* op -<T : fia_fiu32_f16, N : num>(T, vec<N, T>) -> vec<N, T> */
+ /* op -<T : fa_f32_f16, N : num, M : num>(mat<N, M, T>, mat<N, M, T>) -> mat<N, M, T> */
+ /* num overloads */ 5,
+ /* overloads */ OverloadIndex(256),
+ },
+ {
+ /* [2] */
+ /* op *<T : fia_fiu32_f16>(T, T) -> T */
+ /* op *<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* op *<T : fia_fiu32_f16, N : num>(vec<N, T>, T) -> vec<N, T> */
+ /* op *<T : fia_fiu32_f16, N : num>(T, vec<N, T>) -> vec<N, T> */
+ /* op *<T : fa_f32_f16, N : num, M : num>(T, mat<N, M, T>) -> mat<N, M, T> */
+ /* op *<T : fa_f32_f16, N : num, M : num>(mat<N, M, T>, T) -> mat<N, M, T> */
+ /* op *<T : fa_f32_f16, C : num, R : num>(mat<C, R, T>, vec<C, T>) -> vec<R, T> */
+ /* op *<T : fa_f32_f16, C : num, R : num>(vec<R, T>, mat<C, R, T>) -> vec<C, T> */
+ /* op *<T : fa_f32_f16, K : num, C : num, R : num>(mat<K, R, T>, mat<C, K, T>) -> mat<C, R, T> */
+ /* num overloads */ 9,
+ /* overloads */ OverloadIndex(149),
+ },
+ {
+ /* [3] */
+ /* op /<T : fia_fiu32_f16>(T, T) -> T */
+ /* op /<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* op /<T : fia_fiu32_f16, N : num>(vec<N, T>, T) -> vec<N, T> */
+ /* op /<T : fia_fiu32_f16, N : num>(T, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 4,
+ /* overloads */ OverloadIndex(261),
+ },
+ {
+ /* [4] */
+ /* op %<T : fia_fiu32_f16>(T, T) -> T */
+ /* op %<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* op %<T : fia_fiu32_f16, N : num>(vec<N, T>, T) -> vec<N, T> */
+ /* op %<T : fia_fiu32_f16, N : num>(T, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 4,
+ /* overloads */ OverloadIndex(265),
+ },
+ {
+ /* [5] */
+ /* op ^<T : ia_iu32>(T, T) -> T */
+ /* op ^<T : ia_iu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(414),
+ },
+ {
+ /* [6] */
+ /* op &(bool, bool) -> bool */
+ /* op &<N : num>(vec<N, bool>, vec<N, bool>) -> vec<N, bool> */
+ /* op &<T : ia_iu32>(T, T) -> T */
+ /* op &<T : ia_iu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 4,
+ /* overloads */ OverloadIndex(269),
+ },
+ {
+ /* [7] */
+ /* op |(bool, bool) -> bool */
+ /* op |<N : num>(vec<N, bool>, vec<N, bool>) -> vec<N, bool> */
+ /* op |<T : ia_iu32>(T, T) -> T */
+ /* op |<T : ia_iu32, N : num>(vec<N, T>, vec<N, T>) -> vec<N, T> */
+ /* num overloads */ 4,
+ /* overloads */ OverloadIndex(273),
+ },
+ {
+ /* [8] */
+ /* op &&(bool, bool) -> bool */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(462),
+ },
+ {
+ /* [9] */
+ /* op ||(bool, bool) -> bool */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(463),
+ },
+ {
+ /* [10] */
+ /* op ==<T : scalar>(T, T) -> bool */
+ /* op ==<T : scalar, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(416),
+ },
+ {
+ /* [11] */
+ /* op !=<T : scalar>(T, T) -> bool */
+ /* op !=<T : scalar, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(418),
+ },
+ {
+ /* [12] */
+ /* op <<T : fia_fiu32_f16>(T, T) -> bool */
+ /* op <<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(420),
+ },
+ {
+ /* [13] */
+ /* op ><T : fia_fiu32_f16>(T, T) -> bool */
+ /* op ><T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(422),
+ },
+ {
+ /* [14] */
+ /* op <=<T : fia_fiu32_f16>(T, T) -> bool */
+ /* op <=<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(424),
+ },
+ {
+ /* [15] */
+ /* op >=<T : fia_fiu32_f16>(T, T) -> bool */
+ /* op >=<T : fia_fiu32_f16, N : num>(vec<N, T>, vec<N, T>) -> vec<N, bool> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(426),
+ },
+ {
+ /* [16] */
+ /* op <<<T : ia_iu32>(T, u32) -> T */
+ /* op <<<T : ia_iu32, N : num>(vec<N, T>, vec<N, u32>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(428),
+ },
+ {
+ /* [17] */
+ /* op >><T : ia_iu32>(T, u32) -> T */
+ /* op >><T : ia_iu32, N : num>(vec<N, T>, vec<N, u32>) -> vec<N, T> */
+ /* num overloads */ 2,
+ /* overloads */ OverloadIndex(430),
+ },
+};
+constexpr uint8_t kBinaryOperatorPlus = 0;
+constexpr uint8_t kBinaryOperatorMinus = 1;
+constexpr uint8_t kBinaryOperatorStar = 2;
+constexpr uint8_t kBinaryOperatorDivide = 3;
+constexpr uint8_t kBinaryOperatorModulo = 4;
+constexpr uint8_t kBinaryOperatorXor = 5;
+constexpr uint8_t kBinaryOperatorAnd = 6;
+constexpr uint8_t kBinaryOperatorOr = 7;
+constexpr uint8_t kBinaryOperatorLogicalAnd = 8;
+constexpr uint8_t kBinaryOperatorLogicalOr = 9;
+constexpr uint8_t kBinaryOperatorEqual = 10;
+constexpr uint8_t kBinaryOperatorNotEqual = 11;
+constexpr uint8_t kBinaryOperatorLessThan = 12;
+constexpr uint8_t kBinaryOperatorGreaterThan = 13;
+constexpr uint8_t kBinaryOperatorLessThanEqual = 14;
+constexpr uint8_t kBinaryOperatorGreaterThanEqual = 15;
+constexpr uint8_t kBinaryOperatorShiftLeft = 16;
+constexpr uint8_t kBinaryOperatorShiftRight = 17;
+
+constexpr IntrinsicInfo kConstructorsAndConverters[] = {
+ {
+ /* [0] */
+ /* ctor i32() -> i32 */
+ /* ctor i32(i32) -> i32 */
+ /* conv i32<T : scalar_no_i32>(T) -> i32 */
+ /* num overloads */ 3,
+ /* overloads */ OverloadIndex(283),
+ },
+ {
+ /* [1] */
+ /* ctor u32() -> u32 */
+ /* ctor u32(u32) -> u32 */
+ /* conv u32<T : scalar_no_u32>(T) -> u32 */
+ /* num overloads */ 3,
+ /* overloads */ OverloadIndex(286),
+ },
+ {
+ /* [2] */
+ /* ctor f32() -> f32 */
+ /* ctor f32(f32) -> f32 */
+ /* conv f32<T : scalar_no_f32>(T) -> f32 */
+ /* num overloads */ 3,
+ /* overloads */ OverloadIndex(289),
+ },
+ {
+ /* [3] */
+ /* ctor f16() -> f16 */
+ /* ctor f16(f16) -> f16 */
+ /* conv f16<T : scalar_no_f16>(T) -> f16 */
+ /* num overloads */ 3,
+ /* overloads */ OverloadIndex(292),
+ },
+ {
+ /* [4] */
+ /* ctor bool() -> bool */
+ /* ctor bool(bool) -> bool */
+ /* conv bool<T : scalar_no_bool>(T) -> bool */
+ /* num overloads */ 3,
+ /* overloads */ OverloadIndex(295),
+ },
+ {
+ /* [5] */
+ /* ctor vec2() -> vec2<ia> */
+ /* ctor vec2<T : concrete_scalar>() -> vec2<T> */
+ /* ctor vec2<T : scalar>(vec2<T>) -> vec2<T> */
+ /* ctor vec2<T : scalar>(T) -> vec2<T> */
+ /* ctor vec2<T : scalar>(x: T, y: T) -> vec2<T> */
+ /* conv vec2<T : f32, U : scalar_no_f32>(vec2<U>) -> vec2<f32> */
+ /* conv vec2<T : f16, U : scalar_no_f16>(vec2<U>) -> vec2<f16> */
+ /* conv vec2<T : i32, U : scalar_no_i32>(vec2<U>) -> vec2<i32> */
+ /* conv vec2<T : u32, U : scalar_no_u32>(vec2<U>) -> vec2<u32> */
+ /* conv vec2<T : bool, U : scalar_no_bool>(vec2<U>) -> vec2<bool> */
+ /* num overloads */ 10,
+ /* overloads */ OverloadIndex(139),
+ },
+ {
+ /* [6] */
+ /* ctor vec3() -> vec3<ia> */
+ /* ctor vec3<T : concrete_scalar>() -> vec3<T> */
+ /* ctor vec3<T : scalar>(vec3<T>) -> vec3<T> */
+ /* ctor vec3<T : scalar>(T) -> vec3<T> */
+ /* ctor vec3<T : scalar>(x: T, y: T, z: T) -> vec3<T> */
+ /* ctor vec3<T : scalar>(xy: vec2<T>, z: T) -> vec3<T> */
+ /* ctor vec3<T : scalar>(x: T, yz: vec2<T>) -> vec3<T> */
+ /* conv vec3<T : f32, U : scalar_no_f32>(vec3<U>) -> vec3<f32> */
+ /* conv vec3<T : f16, U : scalar_no_f16>(vec3<U>) -> vec3<f16> */
+ /* conv vec3<T : i32, U : scalar_no_i32>(vec3<U>) -> vec3<i32> */
+ /* conv vec3<T : u32, U : scalar_no_u32>(vec3<U>) -> vec3<u32> */
+ /* conv vec3<T : bool, U : scalar_no_bool>(vec3<U>) -> vec3<bool> */
+ /* num overloads */ 12,
+ /* overloads */ OverloadIndex(117),
+ },
+ {
+ /* [7] */
+ /* ctor vec4() -> vec4<ia> */
+ /* ctor vec4<T : concrete_scalar>() -> vec4<T> */
+ /* ctor vec4<T : scalar>(vec4<T>) -> vec4<T> */
+ /* ctor vec4<T : scalar>(T) -> vec4<T> */
+ /* ctor vec4<T : scalar>(x: T, y: T, z: T, w: T) -> vec4<T> */
+ /* ctor vec4<T : scalar>(xy: vec2<T>, z: T, w: T) -> vec4<T> */
+ /* ctor vec4<T : scalar>(x: T, yz: vec2<T>, w: T) -> vec4<T> */
+ /* ctor vec4<T : scalar>(x: T, y: T, zw: vec2<T>) -> vec4<T> */
+ /* ctor vec4<T : scalar>(xy: vec2<T>, zw: vec2<T>) -> vec4<T> */
+ /* ctor vec4<T : scalar>(xyz: vec3<T>, w: T) -> vec4<T> */
+ /* ctor vec4<T : scalar>(x: T, zyw: vec3<T>) -> vec4<T> */
+ /* conv vec4<T : f32, U : scalar_no_f32>(vec4<U>) -> vec4<f32> */
+ /* conv vec4<T : f16, U : scalar_no_f16>(vec4<U>) -> vec4<f16> */
+ /* conv vec4<T : i32, U : scalar_no_i32>(vec4<U>) -> vec4<i32> */
+ /* conv vec4<T : u32, U : scalar_no_u32>(vec4<U>) -> vec4<u32> */
+ /* conv vec4<T : bool, U : scalar_no_bool>(vec4<U>) -> vec4<bool> */
+ /* num overloads */ 16,
+ /* overloads */ OverloadIndex(48),
+ },
+ {
+ /* [8] */
+ /* ctor mat2x2<T : f32_f16>() -> mat2x2<T> */
+ /* ctor mat2x2<T : f32_f16>(mat2x2<T>) -> mat2x2<T> */
+ /* ctor mat2x2<T : fa_f32_f16>(T, T, T, T) -> mat2x2<T> */
+ /* ctor mat2x2<T : fa_f32_f16>(vec2<T>, vec2<T>) -> mat2x2<T> */
+ /* conv mat2x2<T : f16>(mat2x2<f32>) -> mat2x2<f16> */
+ /* conv mat2x2<T : f32>(mat2x2<f16>) -> mat2x2<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(192),
+ },
+ {
+ /* [9] */
+ /* ctor mat2x3<T : f32_f16>() -> mat2x3<T> */
+ /* ctor mat2x3<T : f32_f16>(mat2x3<T>) -> mat2x3<T> */
+ /* ctor mat2x3<T : fa_f32_f16>(T, T, T, T, T, T) -> mat2x3<T> */
+ /* ctor mat2x3<T : fa_f32_f16>(vec3<T>, vec3<T>) -> mat2x3<T> */
+ /* conv mat2x3<T : f16>(mat2x3<f32>) -> mat2x3<f16> */
+ /* conv mat2x3<T : f32>(mat2x3<f16>) -> mat2x3<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(198),
+ },
+ {
+ /* [10] */
+ /* ctor mat2x4<T : f32_f16>() -> mat2x4<T> */
+ /* ctor mat2x4<T : f32_f16>(mat2x4<T>) -> mat2x4<T> */
+ /* ctor mat2x4<T : fa_f32_f16>(T, T, T, T, T, T, T, T) -> mat2x4<T> */
+ /* ctor mat2x4<T : fa_f32_f16>(vec4<T>, vec4<T>) -> mat2x4<T> */
+ /* conv mat2x4<T : f16>(mat2x4<f32>) -> mat2x4<f16> */
+ /* conv mat2x4<T : f32>(mat2x4<f16>) -> mat2x4<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(204),
+ },
+ {
+ /* [11] */
+ /* ctor mat3x2<T : f32_f16>() -> mat3x2<T> */
+ /* ctor mat3x2<T : f32_f16>(mat3x2<T>) -> mat3x2<T> */
+ /* ctor mat3x2<T : fa_f32_f16>(T, T, T, T, T, T) -> mat3x2<T> */
+ /* ctor mat3x2<T : fa_f32_f16>(vec2<T>, vec2<T>, vec2<T>) -> mat3x2<T> */
+ /* conv mat3x2<T : f16>(mat3x2<f32>) -> mat3x2<f16> */
+ /* conv mat3x2<T : f32>(mat3x2<f16>) -> mat3x2<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(210),
+ },
+ {
+ /* [12] */
+ /* ctor mat3x3<T : f32_f16>() -> mat3x3<T> */
+ /* ctor mat3x3<T : f32_f16>(mat3x3<T>) -> mat3x3<T> */
+ /* ctor mat3x3<T : fa_f32_f16>(T, T, T, T, T, T, T, T, T) -> mat3x3<T> */
+ /* ctor mat3x3<T : fa_f32_f16>(vec3<T>, vec3<T>, vec3<T>) -> mat3x3<T> */
+ /* conv mat3x3<T : f16>(mat3x3<f32>) -> mat3x3<f16> */
+ /* conv mat3x3<T : f32>(mat3x3<f16>) -> mat3x3<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(216),
+ },
+ {
+ /* [13] */
+ /* ctor mat3x4<T : f32_f16>() -> mat3x4<T> */
+ /* ctor mat3x4<T : f32_f16>(mat3x4<T>) -> mat3x4<T> */
+ /* ctor mat3x4<T : fa_f32_f16>(T, T, T, T, T, T, T, T, T, T, T, T) -> mat3x4<T> */
+ /* ctor mat3x4<T : fa_f32_f16>(vec4<T>, vec4<T>, vec4<T>) -> mat3x4<T> */
+ /* conv mat3x4<T : f16>(mat3x4<f32>) -> mat3x4<f16> */
+ /* conv mat3x4<T : f32>(mat3x4<f16>) -> mat3x4<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(222),
+ },
+ {
+ /* [14] */
+ /* ctor mat4x2<T : f32_f16>() -> mat4x2<T> */
+ /* ctor mat4x2<T : f32_f16>(mat4x2<T>) -> mat4x2<T> */
+ /* ctor mat4x2<T : fa_f32_f16>(T, T, T, T, T, T, T, T) -> mat4x2<T> */
+ /* ctor mat4x2<T : fa_f32_f16>(vec2<T>, vec2<T>, vec2<T>, vec2<T>) -> mat4x2<T> */
+ /* conv mat4x2<T : f16>(mat4x2<f32>) -> mat4x2<f16> */
+ /* conv mat4x2<T : f32>(mat4x2<f16>) -> mat4x2<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(228),
+ },
+ {
+ /* [15] */
+ /* ctor mat4x3<T : f32_f16>() -> mat4x3<T> */
+ /* ctor mat4x3<T : f32_f16>(mat4x3<T>) -> mat4x3<T> */
+ /* ctor mat4x3<T : fa_f32_f16>(T, T, T, T, T, T, T, T, T, T, T, T) -> mat4x3<T> */
+ /* ctor mat4x3<T : fa_f32_f16>(vec3<T>, vec3<T>, vec3<T>, vec3<T>) -> mat4x3<T> */
+ /* conv mat4x3<T : f16>(mat4x3<f32>) -> mat4x3<f16> */
+ /* conv mat4x3<T : f32>(mat4x3<f16>) -> mat4x3<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(234),
+ },
+ {
+ /* [16] */
+ /* ctor mat4x4<T : f32_f16>() -> mat4x4<T> */
+ /* ctor mat4x4<T : f32_f16>(mat4x4<T>) -> mat4x4<T> */
+ /* ctor mat4x4<T : fa_f32_f16>(T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T) -> mat4x4<T> */
+ /* ctor mat4x4<T : fa_f32_f16>(vec4<T>, vec4<T>, vec4<T>, vec4<T>) -> mat4x4<T> */
+ /* conv mat4x4<T : f16>(mat4x4<f32>) -> mat4x4<f16> */
+ /* conv mat4x4<T : f32>(mat4x4<f16>) -> mat4x4<f32> */
+ /* num overloads */ 6,
+ /* overloads */ OverloadIndex(240),
+ },
+ {
+ /* [17] */
+ /* conv packedVec3<T : concrete_scalar>(vec3<T>) -> packedVec3<T> */
+ /* num overloads */ 1,
+ /* overloads */ OverloadIndex(464),
+ },
+};
+
+// clang-format on
+
+} // anonymous namespace
+
+const core::intrinsic::TableData kData{
+ /* template_types */ kTemplateTypes,
+ /* template_numbers */ kTemplateNumbers,
+ /* type_matcher_indices */ kTypeMatcherIndices,
+ /* number_matcher_indices */ kNumberMatcherIndices,
+ /* type_matchers */ kTypeMatchers,
+ /* number_matchers */ kNumberMatchers,
+ /* parameters */ kParameters,
+ /* overloads */ kOverloads,
+ /* const_eval_functions */ kConstEvalFunctions,
+ /* ctor_conv */ kConstructorsAndConverters,
+ /* builtins */ kBuiltins,
+ /* binary '+' */ kBinaryOperators[kBinaryOperatorPlus],
+ /* binary '-' */ kBinaryOperators[kBinaryOperatorMinus],
+ /* binary '*' */ kBinaryOperators[kBinaryOperatorStar],
+ /* binary '/' */ kBinaryOperators[kBinaryOperatorDivide],
+ /* binary '%' */ kBinaryOperators[kBinaryOperatorModulo],
+ /* binary '^' */ kBinaryOperators[kBinaryOperatorXor],
+ /* binary '&' */ kBinaryOperators[kBinaryOperatorAnd],
+ /* binary '|' */ kBinaryOperators[kBinaryOperatorOr],
+ /* binary '&&' */ kBinaryOperators[kBinaryOperatorLogicalAnd],
+ /* binary '||' */ kBinaryOperators[kBinaryOperatorLogicalOr],
+ /* binary '==' */ kBinaryOperators[kBinaryOperatorEqual],
+ /* binary '!=' */ kBinaryOperators[kBinaryOperatorNotEqual],
+ /* binary '<' */ kBinaryOperators[kBinaryOperatorLessThan],
+ /* binary '>' */ kBinaryOperators[kBinaryOperatorGreaterThan],
+ /* binary '<=' */ kBinaryOperators[kBinaryOperatorLessThanEqual],
+ /* binary '>=' */ kBinaryOperators[kBinaryOperatorGreaterThanEqual],
+ /* binary '<<' */ kBinaryOperators[kBinaryOperatorShiftLeft],
+ /* binary '>>' */ kBinaryOperators[kBinaryOperatorShiftRight],
+ /* unary '!' */ kUnaryOperators[kUnaryOperatorNot],
+ /* unary '~' */ kUnaryOperators[kUnaryOperatorComplement],
+ /* unary '-' */ kUnaryOperators[kUnaryOperatorMinus],
+};
+
+} // namespace tint::wgsl::intrinsic::data
diff --git a/src/tint/lang/wgsl/intrinsic/data/data.cc.tmpl b/src/tint/lang/wgsl/intrinsic/data/data.cc.tmpl
new file mode 100644
index 0000000..5692ef5
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/data/data.cc.tmpl
@@ -0,0 +1,34 @@
+{{- /*
+--------------------------------------------------------------------------------
+Template file for use with tools/src/cmd/gen to generate intrinsic_table.inl
+Used by BuiltinTable.cc for builtin overload resolution.
+
+To update the generated file, run:
+ ./tools/run gen
+
+See:
+* tools/src/cmd/gen for structures used by this template
+* https://golang.org/pkg/text/template/ for documentation on the template syntax
+--------------------------------------------------------------------------------
+*/ -}}
+
+{{- Import "src/tint/utils/templates/intrinsic_table_data.tmpl.inc" -}}
+
+{{- $I := LoadIntrinsics "src/tint/lang/wgsl/wgsl.def" -}}
+
+#include <limits>
+#include <string>
+
+#include "src/tint/lang/core/intrinsic/data/type_matchers.h"
+#include "src/tint/lang/wgsl/intrinsic/data/data.h"
+#include "src/tint/utils/text/string_stream.h"
+
+namespace tint::wgsl::intrinsic::data {
+
+using namespace tint::core::intrinsic::data; // NOLINT(build/namespaces)
+
+{{ Eval "Data"
+ "Intrinsics" $I
+ "Name" "kData" -}}
+
+} // namespace tint::wgsl::intrinsic::data
diff --git a/src/tint/lang/wgsl/intrinsic/data/data.h b/src/tint/lang/wgsl/intrinsic/data/data.h
new file mode 100644
index 0000000..74faeb3
--- /dev/null
+++ b/src/tint/lang/wgsl/intrinsic/data/data.h
@@ -0,0 +1,26 @@
+// Copyright 2023 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.
+
+#ifndef SRC_TINT_LANG_WGSL_INTRINSIC_DATA_DATA_H_
+#define SRC_TINT_LANG_WGSL_INTRINSIC_DATA_DATA_H_
+
+#include "src/tint/lang/core/intrinsic/table_data.h"
+
+namespace tint::wgsl::intrinsic::data {
+
+extern const core::intrinsic::TableData kData;
+
+} // namespace tint::wgsl::intrinsic::data
+
+#endif // SRC_TINT_LANG_WGSL_INTRINSIC_DATA_DATA_H_
diff --git a/src/tint/lang/wgsl/ir/BUILD.bazel b/src/tint/lang/wgsl/ir/BUILD.bazel
new file mode 100644
index 0000000..cc09dc5
--- /dev/null
+++ b/src/tint/lang/wgsl/ir/BUILD.bazel
@@ -0,0 +1,60 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+ name = "ir",
+ srcs = [
+ "builtin_call.cc",
+ ],
+ hdrs = [
+ "builtin_call.h",
+ ],
+ deps = [
+ "//src/tint/api/common",
+ "//src/tint/lang/core",
+ "//src/tint/lang/core/constant",
+ "//src/tint/lang/core/intrinsic",
+ "//src/tint/lang/core/ir",
+ "//src/tint/lang/core/type",
+ "//src/tint/lang/wgsl",
+ "//src/tint/lang/wgsl/intrinsic/data",
+ "//src/tint/utils/containers",
+ "//src/tint/utils/diagnostic",
+ "//src/tint/utils/ice",
+ "//src/tint/utils/id",
+ "//src/tint/utils/macros",
+ "//src/tint/utils/math",
+ "//src/tint/utils/memory",
+ "//src/tint/utils/reflection",
+ "//src/tint/utils/result",
+ "//src/tint/utils/rtti",
+ "//src/tint/utils/symbol",
+ "//src/tint/utils/text",
+ "//src/tint/utils/traits",
+ ],
+ copts = COPTS,
+ visibility = ["//visibility:public"],
+)
+
diff --git a/src/tint/lang/wgsl/ir/BUILD.cmake b/src/tint/lang/wgsl/ir/BUILD.cmake
new file mode 100644
index 0000000..72ba88a
--- /dev/null
+++ b/src/tint/lang/wgsl/ir/BUILD.cmake
@@ -0,0 +1,55 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+################################################################################
+# Target: tint_lang_wgsl_ir
+# Kind: lib
+################################################################################
+tint_add_target(tint_lang_wgsl_ir lib
+ lang/wgsl/ir/builtin_call.cc
+ lang/wgsl/ir/builtin_call.h
+)
+
+tint_target_add_dependencies(tint_lang_wgsl_ir lib
+ tint_api_common
+ tint_lang_core
+ tint_lang_core_constant
+ tint_lang_core_intrinsic
+ tint_lang_core_ir
+ tint_lang_core_type
+ tint_lang_wgsl
+ tint_lang_wgsl_intrinsic_data
+ tint_utils_containers
+ tint_utils_diagnostic
+ tint_utils_ice
+ tint_utils_id
+ tint_utils_macros
+ tint_utils_math
+ tint_utils_memory
+ tint_utils_reflection
+ tint_utils_result
+ tint_utils_rtti
+ tint_utils_symbol
+ tint_utils_text
+ tint_utils_traits
+)
diff --git a/src/tint/lang/wgsl/ir/BUILD.gn b/src/tint/lang/wgsl/ir/BUILD.gn
new file mode 100644
index 0000000..7be98a4
--- /dev/null
+++ b/src/tint/lang/wgsl/ir/BUILD.gn
@@ -0,0 +1,56 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+import("../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+libtint_source_set("ir") {
+ sources = [
+ "builtin_call.cc",
+ "builtin_call.h",
+ ]
+ deps = [
+ "${tint_src_dir}/api/common",
+ "${tint_src_dir}/lang/core",
+ "${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/intrinsic",
+ "${tint_src_dir}/lang/core/ir",
+ "${tint_src_dir}/lang/core/type",
+ "${tint_src_dir}/lang/wgsl",
+ "${tint_src_dir}/lang/wgsl/intrinsic/data",
+ "${tint_src_dir}/utils/containers",
+ "${tint_src_dir}/utils/diagnostic",
+ "${tint_src_dir}/utils/ice",
+ "${tint_src_dir}/utils/id",
+ "${tint_src_dir}/utils/macros",
+ "${tint_src_dir}/utils/math",
+ "${tint_src_dir}/utils/memory",
+ "${tint_src_dir}/utils/reflection",
+ "${tint_src_dir}/utils/result",
+ "${tint_src_dir}/utils/rtti",
+ "${tint_src_dir}/utils/symbol",
+ "${tint_src_dir}/utils/text",
+ "${tint_src_dir}/utils/traits",
+ ]
+}
diff --git a/src/tint/lang/wgsl/ir/builtin_call.cc b/src/tint/lang/wgsl/ir/builtin_call.cc
new file mode 100644
index 0000000..4511787
--- /dev/null
+++ b/src/tint/lang/wgsl/ir/builtin_call.cc
@@ -0,0 +1,42 @@
+// Copyright 2023 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.
+
+#include "src/tint/lang/wgsl/ir/builtin_call.h"
+
+#include <utility>
+
+#include "src/tint/lang/core/ir/clone_context.h"
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/utils/ice/ice.h"
+
+TINT_INSTANTIATE_TYPEINFO(tint::wgsl::ir::BuiltinCall);
+
+namespace tint::wgsl::ir {
+
+BuiltinCall::BuiltinCall(core::ir::InstructionResult* result,
+ BuiltinFn fn,
+ VectorRef<core::ir::Value*> arguments)
+ : Base(result, arguments), fn_(fn) {
+ TINT_ASSERT(fn != BuiltinFn::kNone);
+}
+
+BuiltinCall::~BuiltinCall() = default;
+
+BuiltinCall* BuiltinCall::Clone(core::ir::CloneContext& ctx) {
+ auto* new_result = ctx.Clone(Result());
+ auto new_args = ctx.Clone<BuiltinCall::kDefaultNumOperands>(Args());
+ return ctx.ir.instructions.Create<BuiltinCall>(new_result, fn_, new_args);
+}
+
+} // namespace tint::wgsl::ir
diff --git a/src/tint/lang/wgsl/ir/builtin_call.h b/src/tint/lang/wgsl/ir/builtin_call.h
new file mode 100644
index 0000000..6e1d413
--- /dev/null
+++ b/src/tint/lang/wgsl/ir/builtin_call.h
@@ -0,0 +1,61 @@
+// Copyright 2023 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.
+
+#ifndef SRC_TINT_LANG_WGSL_IR_BUILTIN_CALL_H_
+#define SRC_TINT_LANG_WGSL_IR_BUILTIN_CALL_H_
+
+#include <string>
+
+#include "src/tint/lang/core/intrinsic/table_data.h"
+#include "src/tint/lang/core/ir/builtin_call.h"
+#include "src/tint/lang/wgsl/builtin_fn.h"
+#include "src/tint/lang/wgsl/intrinsic/data/data.h"
+#include "src/tint/utils/rtti/castable.h"
+
+namespace tint::wgsl::ir {
+
+/// A WGSL builtin call instruction in the IR.
+class BuiltinCall : public Castable<BuiltinCall, core::ir::BuiltinCall> {
+ public:
+ /// Constructor
+ /// @param result the result value
+ /// @param fn the builtin function
+ /// @param args the conversion arguments
+ BuiltinCall(core::ir::InstructionResult* result,
+ BuiltinFn fn,
+ VectorRef<core::ir::Value*> args = tint::Empty);
+ ~BuiltinCall() override;
+
+ /// @copydoc core::ir::Instruction::Clone()
+ BuiltinCall* Clone(core::ir::CloneContext& ctx) override;
+
+ /// @returns the builtin function
+ BuiltinFn Func() { return fn_; }
+
+ /// @returns the identifier for the function
+ size_t FuncId() override { return static_cast<size_t>(fn_); }
+
+ /// @returns the friendly name for the instruction
+ std::string FriendlyName() override { return std::string("wgsl.") + str(fn_); }
+
+ /// @returns the table data to validate this builtin
+ const core::intrinsic::TableData& TableData() override { return intrinsic::data::kData; }
+
+ private:
+ BuiltinFn fn_;
+};
+
+} // namespace tint::wgsl::ir
+
+#endif // SRC_TINT_LANG_WGSL_IR_BUILTIN_CALL_H_
diff --git a/src/tint/lang/wgsl/ir_roundtrip_test.cc b/src/tint/lang/wgsl/ir_roundtrip_test.cc
index 7973210..3585594 100644
--- a/src/tint/lang/wgsl/ir_roundtrip_test.cc
+++ b/src/tint/lang/wgsl/ir_roundtrip_test.cc
@@ -31,29 +31,19 @@
void Test(std::string_view input_wgsl, std::string_view expected_wgsl) {
auto input = tint::TrimSpace(input_wgsl);
Source::File file("test.wgsl", std::string(input));
- auto input_program = wgsl::reader::Parse(&file);
- ASSERT_TRUE(input_program.IsValid()) << input_program.Diagnostics();
-
- auto ir_module = wgsl::reader::ProgramToIR(input_program);
+ auto ir_module = wgsl::reader::WgslToIR(&file);
ASSERT_TRUE(ir_module) << ir_module;
tint::core::ir::Disassembler d{ir_module.Get()};
auto disassembly = d.Disassemble();
- auto output_program = wgsl::writer::IRToProgram(ir_module.Get());
- if (!output_program.IsValid()) {
- FAIL() << output_program.Diagnostics() << std::endl //
- << "IR:" << std::endl //
- << disassembly << std::endl //
- << "AST:" << std::endl //
- << Program::printer(output_program) << std::endl;
+ auto output = wgsl::writer::WgslFromIR(ir_module.Get());
+ if (!output) {
+ FAIL() << output.Failure() << std::endl //
+ << "IR:" << std::endl //
+ << disassembly << std::endl;
}
- ASSERT_TRUE(output_program.IsValid()) << output_program.Diagnostics();
-
- auto output = wgsl::writer::Generate(output_program, {});
- ASSERT_TRUE(output) << output.Failure();
-
auto expected = expected_wgsl.empty() ? input : tint::TrimSpace(expected_wgsl);
auto got = tint::TrimSpace(output->wgsl);
EXPECT_EQ(expected, got) << "IR:" << std::endl << disassembly;
diff --git a/src/tint/lang/wgsl/reader/BUILD.bazel b/src/tint/lang/wgsl/reader/BUILD.bazel
index 43922a8..116874d 100644
--- a/src/tint/lang/wgsl/reader/BUILD.bazel
+++ b/src/tint/lang/wgsl/reader/BUILD.bazel
@@ -35,11 +35,14 @@
"//src/tint/api/common",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
"//src/tint/lang/wgsl/program",
+ "//src/tint/lang/wgsl/reader/lower",
"//src/tint/lang/wgsl/reader/parser",
+ "//src/tint/lang/wgsl/reader/program_to_ir",
"//src/tint/lang/wgsl/resolver",
"//src/tint/lang/wgsl/sem",
"//src/tint/utils/containers",
@@ -65,9 +68,11 @@
"reader_bench.cc",
],
deps = [
+ "//src/tint/api/common",
"//src/tint/cmd/bench",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
@@ -81,6 +86,7 @@
"//src/tint/utils/macros",
"//src/tint/utils/math",
"//src/tint/utils/memory",
+ "//src/tint/utils/reflection",
"//src/tint/utils/result",
"//src/tint/utils/rtti",
"//src/tint/utils/symbol",
diff --git a/src/tint/lang/wgsl/reader/BUILD.cmake b/src/tint/lang/wgsl/reader/BUILD.cmake
index 9848c4b..2d94eb5 100644
--- a/src/tint/lang/wgsl/reader/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/BUILD.cmake
@@ -21,6 +21,7 @@
# Do not modify this file directly
################################################################################
+include(lang/wgsl/reader/lower/BUILD.cmake)
include(lang/wgsl/reader/parser/BUILD.cmake)
include(lang/wgsl/reader/program_to_ir/BUILD.cmake)
@@ -37,11 +38,14 @@
tint_api_common
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
tint_lang_wgsl_program
+ tint_lang_wgsl_reader_lower
tint_lang_wgsl_reader_parser
+ tint_lang_wgsl_reader_program_to_ir
tint_lang_wgsl_resolver
tint_lang_wgsl_sem
tint_utils_containers
@@ -68,9 +72,11 @@
)
tint_target_add_dependencies(tint_lang_wgsl_reader_bench bench
+ tint_api_common
tint_cmd_bench
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
@@ -84,6 +90,7 @@
tint_utils_macros
tint_utils_math
tint_utils_memory
+ tint_utils_reflection
tint_utils_result
tint_utils_rtti
tint_utils_symbol
diff --git a/src/tint/lang/wgsl/reader/BUILD.gn b/src/tint/lang/wgsl/reader/BUILD.gn
index 7c450ca..7962250 100644
--- a/src/tint/lang/wgsl/reader/BUILD.gn
+++ b/src/tint/lang/wgsl/reader/BUILD.gn
@@ -34,11 +34,14 @@
"${tint_src_dir}/api/common",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
"${tint_src_dir}/lang/wgsl/program",
+ "${tint_src_dir}/lang/wgsl/reader/lower",
"${tint_src_dir}/lang/wgsl/reader/parser",
+ "${tint_src_dir}/lang/wgsl/reader/program_to_ir",
"${tint_src_dir}/lang/wgsl/resolver",
"${tint_src_dir}/lang/wgsl/sem",
"${tint_src_dir}/utils/containers",
diff --git a/src/tint/lang/wgsl/reader/lower/BUILD.bazel b/src/tint/lang/wgsl/reader/lower/BUILD.bazel
new file mode 100644
index 0000000..4ff33794
--- /dev/null
+++ b/src/tint/lang/wgsl/reader/lower/BUILD.bazel
@@ -0,0 +1,99 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+ name = "lower",
+ srcs = [
+ "lower.cc",
+ ],
+ hdrs = [
+ "lower.h",
+ ],
+ deps = [
+ "//src/tint/api/common",
+ "//src/tint/lang/core",
+ "//src/tint/lang/core/constant",
+ "//src/tint/lang/core/intrinsic",
+ "//src/tint/lang/core/intrinsic/data",
+ "//src/tint/lang/core/ir",
+ "//src/tint/lang/core/type",
+ "//src/tint/lang/wgsl",
+ "//src/tint/lang/wgsl/intrinsic/data",
+ "//src/tint/lang/wgsl/ir",
+ "//src/tint/utils/containers",
+ "//src/tint/utils/diagnostic",
+ "//src/tint/utils/ice",
+ "//src/tint/utils/id",
+ "//src/tint/utils/macros",
+ "//src/tint/utils/math",
+ "//src/tint/utils/memory",
+ "//src/tint/utils/reflection",
+ "//src/tint/utils/result",
+ "//src/tint/utils/rtti",
+ "//src/tint/utils/symbol",
+ "//src/tint/utils/text",
+ "//src/tint/utils/traits",
+ ],
+ copts = COPTS,
+ visibility = ["//visibility:public"],
+)
+cc_library(
+ name = "test",
+ alwayslink = True,
+ srcs = [
+ "lower_test.cc",
+ ],
+ deps = [
+ "//src/tint/api/common",
+ "//src/tint/lang/core",
+ "//src/tint/lang/core/constant",
+ "//src/tint/lang/core/intrinsic",
+ "//src/tint/lang/core/intrinsic/data",
+ "//src/tint/lang/core/ir",
+ "//src/tint/lang/core/ir/transform:test",
+ "//src/tint/lang/core/type",
+ "//src/tint/lang/wgsl",
+ "//src/tint/lang/wgsl/intrinsic/data",
+ "//src/tint/lang/wgsl/ir",
+ "//src/tint/lang/wgsl/reader/lower",
+ "//src/tint/utils/containers",
+ "//src/tint/utils/diagnostic",
+ "//src/tint/utils/ice",
+ "//src/tint/utils/id",
+ "//src/tint/utils/macros",
+ "//src/tint/utils/math",
+ "//src/tint/utils/memory",
+ "//src/tint/utils/reflection",
+ "//src/tint/utils/result",
+ "//src/tint/utils/rtti",
+ "//src/tint/utils/symbol",
+ "//src/tint/utils/text",
+ "//src/tint/utils/traits",
+ "@gtest",
+ ],
+ copts = COPTS,
+ visibility = ["//visibility:public"],
+)
+
diff --git a/src/tint/lang/wgsl/reader/lower/BUILD.cmake b/src/tint/lang/wgsl/reader/lower/BUILD.cmake
new file mode 100644
index 0000000..3bc145f
--- /dev/null
+++ b/src/tint/lang/wgsl/reader/lower/BUILD.cmake
@@ -0,0 +1,97 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+################################################################################
+# Target: tint_lang_wgsl_reader_lower
+# Kind: lib
+################################################################################
+tint_add_target(tint_lang_wgsl_reader_lower lib
+ lang/wgsl/reader/lower/lower.cc
+ lang/wgsl/reader/lower/lower.h
+)
+
+tint_target_add_dependencies(tint_lang_wgsl_reader_lower lib
+ tint_api_common
+ tint_lang_core
+ tint_lang_core_constant
+ tint_lang_core_intrinsic
+ tint_lang_core_intrinsic_data
+ tint_lang_core_ir
+ tint_lang_core_type
+ tint_lang_wgsl
+ tint_lang_wgsl_intrinsic_data
+ tint_lang_wgsl_ir
+ tint_utils_containers
+ tint_utils_diagnostic
+ tint_utils_ice
+ tint_utils_id
+ tint_utils_macros
+ tint_utils_math
+ tint_utils_memory
+ tint_utils_reflection
+ tint_utils_result
+ tint_utils_rtti
+ tint_utils_symbol
+ tint_utils_text
+ tint_utils_traits
+)
+
+################################################################################
+# Target: tint_lang_wgsl_reader_lower_test
+# Kind: test
+################################################################################
+tint_add_target(tint_lang_wgsl_reader_lower_test test
+ lang/wgsl/reader/lower/lower_test.cc
+)
+
+tint_target_add_dependencies(tint_lang_wgsl_reader_lower_test test
+ tint_api_common
+ tint_lang_core
+ tint_lang_core_constant
+ tint_lang_core_intrinsic
+ tint_lang_core_intrinsic_data
+ tint_lang_core_ir
+ tint_lang_core_ir_transform_test
+ tint_lang_core_type
+ tint_lang_wgsl
+ tint_lang_wgsl_intrinsic_data
+ tint_lang_wgsl_ir
+ tint_lang_wgsl_reader_lower
+ tint_utils_containers
+ tint_utils_diagnostic
+ tint_utils_ice
+ tint_utils_id
+ tint_utils_macros
+ tint_utils_math
+ tint_utils_memory
+ tint_utils_reflection
+ tint_utils_result
+ tint_utils_rtti
+ tint_utils_symbol
+ tint_utils_text
+ tint_utils_traits
+)
+
+tint_target_add_external_dependencies(tint_lang_wgsl_reader_lower_test test
+ "gtest"
+)
diff --git a/src/tint/lang/wgsl/reader/lower/BUILD.gn b/src/tint/lang/wgsl/reader/lower/BUILD.gn
new file mode 100644
index 0000000..f9c38e3
--- /dev/null
+++ b/src/tint/lang/wgsl/reader/lower/BUILD.gn
@@ -0,0 +1,96 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+import("../../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+if (tint_build_unittests) {
+ import("//testing/test.gni")
+}
+
+libtint_source_set("lower") {
+ sources = [
+ "lower.cc",
+ "lower.h",
+ ]
+ deps = [
+ "${tint_src_dir}/api/common",
+ "${tint_src_dir}/lang/core",
+ "${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/intrinsic",
+ "${tint_src_dir}/lang/core/intrinsic/data",
+ "${tint_src_dir}/lang/core/ir",
+ "${tint_src_dir}/lang/core/type",
+ "${tint_src_dir}/lang/wgsl",
+ "${tint_src_dir}/lang/wgsl/intrinsic/data",
+ "${tint_src_dir}/lang/wgsl/ir",
+ "${tint_src_dir}/utils/containers",
+ "${tint_src_dir}/utils/diagnostic",
+ "${tint_src_dir}/utils/ice",
+ "${tint_src_dir}/utils/id",
+ "${tint_src_dir}/utils/macros",
+ "${tint_src_dir}/utils/math",
+ "${tint_src_dir}/utils/memory",
+ "${tint_src_dir}/utils/reflection",
+ "${tint_src_dir}/utils/result",
+ "${tint_src_dir}/utils/rtti",
+ "${tint_src_dir}/utils/symbol",
+ "${tint_src_dir}/utils/text",
+ "${tint_src_dir}/utils/traits",
+ ]
+}
+if (tint_build_unittests) {
+ tint_unittests_source_set("unittests") {
+ testonly = true
+ sources = [ "lower_test.cc" ]
+ deps = [
+ "${tint_src_dir}:gmock_and_gtest",
+ "${tint_src_dir}/api/common",
+ "${tint_src_dir}/lang/core",
+ "${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/intrinsic",
+ "${tint_src_dir}/lang/core/intrinsic/data",
+ "${tint_src_dir}/lang/core/ir",
+ "${tint_src_dir}/lang/core/ir/transform:unittests",
+ "${tint_src_dir}/lang/core/type",
+ "${tint_src_dir}/lang/wgsl",
+ "${tint_src_dir}/lang/wgsl/intrinsic/data",
+ "${tint_src_dir}/lang/wgsl/ir",
+ "${tint_src_dir}/lang/wgsl/reader/lower",
+ "${tint_src_dir}/utils/containers",
+ "${tint_src_dir}/utils/diagnostic",
+ "${tint_src_dir}/utils/ice",
+ "${tint_src_dir}/utils/id",
+ "${tint_src_dir}/utils/macros",
+ "${tint_src_dir}/utils/math",
+ "${tint_src_dir}/utils/memory",
+ "${tint_src_dir}/utils/reflection",
+ "${tint_src_dir}/utils/result",
+ "${tint_src_dir}/utils/rtti",
+ "${tint_src_dir}/utils/symbol",
+ "${tint_src_dir}/utils/text",
+ "${tint_src_dir}/utils/traits",
+ ]
+ }
+}
diff --git a/src/tint/lang/wgsl/reader/lower/lower.cc b/src/tint/lang/wgsl/reader/lower/lower.cc
new file mode 100644
index 0000000..64bef4b
--- /dev/null
+++ b/src/tint/lang/wgsl/reader/lower/lower.cc
@@ -0,0 +1,169 @@
+// Copyright 2023 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.
+
+#include "src/tint/lang/wgsl/reader/lower/lower.h"
+
+#include <utility>
+
+#include "src/tint/lang/core/builtin_fn.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
+#include "src/tint/lang/wgsl/builtin_fn.h"
+#include "src/tint/lang/wgsl/ir/builtin_call.h"
+
+namespace tint::wgsl::reader {
+namespace {
+
+core::BuiltinFn Convert(wgsl::BuiltinFn fn) {
+#define CASE(NAME) \
+ case wgsl::BuiltinFn::NAME: \
+ return core::BuiltinFn::NAME;
+
+ switch (fn) {
+ CASE(kAbs)
+ CASE(kAcos)
+ CASE(kAcosh)
+ CASE(kAll)
+ CASE(kAny)
+ CASE(kArrayLength)
+ CASE(kAsin)
+ CASE(kAsinh)
+ CASE(kAtan)
+ CASE(kAtan2)
+ CASE(kAtanh)
+ CASE(kCeil)
+ CASE(kClamp)
+ CASE(kCos)
+ CASE(kCosh)
+ CASE(kCountLeadingZeros)
+ CASE(kCountOneBits)
+ CASE(kCountTrailingZeros)
+ CASE(kCross)
+ CASE(kDegrees)
+ CASE(kDeterminant)
+ CASE(kDistance)
+ CASE(kDot)
+ CASE(kDot4I8Packed)
+ CASE(kDot4U8Packed)
+ CASE(kDpdx)
+ CASE(kDpdxCoarse)
+ CASE(kDpdxFine)
+ CASE(kDpdy)
+ CASE(kDpdyCoarse)
+ CASE(kDpdyFine)
+ CASE(kExp)
+ CASE(kExp2)
+ CASE(kExtractBits)
+ CASE(kFaceForward)
+ CASE(kFirstLeadingBit)
+ CASE(kFirstTrailingBit)
+ CASE(kFloor)
+ CASE(kFma)
+ CASE(kFract)
+ CASE(kFrexp)
+ CASE(kFwidth)
+ CASE(kFwidthCoarse)
+ CASE(kFwidthFine)
+ CASE(kInsertBits)
+ CASE(kInverseSqrt)
+ CASE(kLdexp)
+ CASE(kLength)
+ CASE(kLog)
+ CASE(kLog2)
+ CASE(kMax)
+ CASE(kMin)
+ CASE(kMix)
+ CASE(kModf)
+ CASE(kNormalize)
+ CASE(kPack2X16Float)
+ CASE(kPack2X16Snorm)
+ CASE(kPack2X16Unorm)
+ CASE(kPack4X8Snorm)
+ CASE(kPack4X8Unorm)
+ CASE(kPow)
+ CASE(kQuantizeToF16)
+ CASE(kRadians)
+ CASE(kReflect)
+ CASE(kRefract)
+ CASE(kReverseBits)
+ CASE(kRound)
+ CASE(kSaturate)
+ CASE(kSelect)
+ CASE(kSign)
+ CASE(kSin)
+ CASE(kSinh)
+ CASE(kSmoothstep)
+ CASE(kSqrt)
+ CASE(kStep)
+ CASE(kStorageBarrier)
+ CASE(kTan)
+ CASE(kTanh)
+ CASE(kTranspose)
+ CASE(kTrunc)
+ CASE(kUnpack2X16Float)
+ CASE(kUnpack2X16Snorm)
+ CASE(kUnpack2X16Unorm)
+ CASE(kUnpack4X8Snorm)
+ CASE(kUnpack4X8Unorm)
+ CASE(kWorkgroupBarrier)
+ CASE(kWorkgroupUniformLoad)
+ CASE(kTextureBarrier)
+ CASE(kTextureDimensions)
+ CASE(kTextureGather)
+ CASE(kTextureGatherCompare)
+ CASE(kTextureNumLayers)
+ CASE(kTextureNumLevels)
+ CASE(kTextureNumSamples)
+ CASE(kTextureSample)
+ CASE(kTextureSampleBias)
+ CASE(kTextureSampleCompare)
+ CASE(kTextureSampleCompareLevel)
+ CASE(kTextureSampleGrad)
+ CASE(kTextureSampleLevel)
+ CASE(kTextureSampleBaseClampToEdge)
+ CASE(kTextureStore)
+ CASE(kTextureLoad)
+ CASE(kAtomicLoad)
+ CASE(kAtomicStore)
+ CASE(kAtomicAdd)
+ CASE(kAtomicSub)
+ CASE(kAtomicMax)
+ CASE(kAtomicMin)
+ CASE(kAtomicAnd)
+ CASE(kAtomicOr)
+ CASE(kAtomicXor)
+ CASE(kAtomicExchange)
+ CASE(kAtomicCompareExchangeWeak)
+ CASE(kSubgroupBallot)
+ CASE(kSubgroupBroadcast)
+ default:
+ TINT_ICE() << "unhandled builtin function: " << fn;
+ return core::BuiltinFn::kNone;
+ }
+}
+
+} // namespace
+
+Result<SuccessType> Lower(core::ir::Module& mod) {
+ for (auto* inst : mod.instructions.Objects()) {
+ if (auto* call = inst->As<wgsl::ir::BuiltinCall>()) {
+ Vector<core::ir::Value*, 8> args(call->Args());
+ auto* replacement = mod.instructions.Create<core::ir::CoreBuiltinCall>(
+ call->Result(), Convert(call->Func()), std::move(args));
+ call->ReplaceWith(replacement);
+ }
+ }
+ return Success;
+}
+
+} // namespace tint::wgsl::reader
diff --git a/src/tint/lang/wgsl/reader/lower/lower.h b/src/tint/lang/wgsl/reader/lower/lower.h
new file mode 100644
index 0000000..6817413
--- /dev/null
+++ b/src/tint/lang/wgsl/reader/lower/lower.h
@@ -0,0 +1,31 @@
+// Copyright 2023 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.
+
+#ifndef SRC_TINT_LANG_WGSL_READER_LOWER_LOWER_H_
+#define SRC_TINT_LANG_WGSL_READER_LOWER_LOWER_H_
+
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/utils/diagnostic/diagnostic.h"
+#include "src/tint/utils/result/result.h"
+
+namespace tint::wgsl::reader {
+
+/// Lower converts a WGSL-dialect IR module to a core-dialect IR module
+/// @param mod the IR module
+/// @return the result of the operation
+Result<SuccessType> Lower(core::ir::Module& mod);
+
+} // namespace tint::wgsl::reader
+
+#endif // SRC_TINT_LANG_WGSL_READER_LOWER_LOWER_H_
diff --git a/src/tint/lang/wgsl/reader/lower/lower_test.cc b/src/tint/lang/wgsl/reader/lower/lower_test.cc
new file mode 100644
index 0000000..589a8c4
--- /dev/null
+++ b/src/tint/lang/wgsl/reader/lower/lower_test.cc
@@ -0,0 +1,68 @@
+// Copyright 2023 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.
+
+#include <utility>
+
+#include "src/tint/lang/core/ir/transform/helper_test.h"
+#include "src/tint/lang/core/type/struct.h"
+#include "src/tint/lang/wgsl/builtin_fn.h"
+#include "src/tint/lang/wgsl/ir/builtin_call.h"
+#include "src/tint/lang/wgsl/reader/lower/lower.h"
+
+namespace tint::wgsl::reader::lower {
+namespace {
+
+using namespace tint::core::fluent_types; // NOLINT
+using namespace tint::core::number_suffixes; // NOLINT
+
+using Wgslreader_LowerTest = core::ir::transform::TransformTest;
+
+TEST_F(Wgslreader_LowerTest, BuiltinConversion) {
+ auto* f = b.Function("f", ty.void_());
+ b.Append(f->Block(), [&] { //
+ auto* result = b.InstructionResult(ty.i32());
+ b.Append(b.ir.instructions.Create<wgsl::ir::BuiltinCall>(result, wgsl::BuiltinFn::kMax,
+ Vector{
+ b.Value(i32(1)),
+ b.Value(i32(2)),
+ }));
+ b.Return(f);
+ });
+
+ auto* src = R"(
+%f = func():void -> %b1 {
+ %b1 = block {
+ %2:i32 = wgsl.max 1i, 2i
+ ret
+ }
+}
+)";
+ EXPECT_EQ(src, str());
+
+ auto* expect = R"(
+%f = func():void -> %b1 {
+ %b1 = block {
+ %2:i32 = max 1i, 2i
+ ret
+ }
+}
+)";
+
+ Run(Lower);
+
+ EXPECT_EQ(expect, str());
+}
+
+} // namespace
+} // namespace tint::wgsl::reader::lower
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.bazel b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.bazel
index 17ea099..9f6305d 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.bazel
+++ b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.bazel
@@ -41,6 +41,8 @@
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
+ "//src/tint/lang/wgsl/intrinsic/data",
+ "//src/tint/lang/wgsl/ir",
"//src/tint/lang/wgsl/program",
"//src/tint/lang/wgsl/sem",
"//src/tint/utils/containers",
@@ -89,6 +91,7 @@
"//src/tint/lang/wgsl/helpers:test",
"//src/tint/lang/wgsl/program",
"//src/tint/lang/wgsl/reader",
+ "//src/tint/lang/wgsl/reader/lower",
"//src/tint/lang/wgsl/reader/program_to_ir",
"//src/tint/lang/wgsl/resolver",
"//src/tint/lang/wgsl/sem",
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
index 39a7619..812feec 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
+++ b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.cmake
@@ -40,6 +40,8 @@
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
+ tint_lang_wgsl_intrinsic_data
+ tint_lang_wgsl_ir
tint_lang_wgsl_program
tint_lang_wgsl_sem
tint_utils_containers
@@ -88,6 +90,7 @@
tint_lang_wgsl_helpers_test
tint_lang_wgsl_program
tint_lang_wgsl_reader
+ tint_lang_wgsl_reader_lower
tint_lang_wgsl_reader_program_to_ir
tint_lang_wgsl_resolver
tint_lang_wgsl_sem
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.gn b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.gn
index a2de875..110350a 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/BUILD.gn
+++ b/src/tint/lang/wgsl/reader/program_to_ir/BUILD.gn
@@ -44,6 +44,8 @@
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
+ "${tint_src_dir}/lang/wgsl/intrinsic/data",
+ "${tint_src_dir}/lang/wgsl/ir",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/sem",
"${tint_src_dir}/utils/containers",
@@ -91,6 +93,7 @@
"${tint_src_dir}/lang/wgsl/helpers:unittests",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/reader",
+ "${tint_src_dir}/lang/wgsl/reader/lower",
"${tint_src_dir}/lang/wgsl/reader/program_to_ir",
"${tint_src_dir}/lang/wgsl/resolver",
"${tint_src_dir}/lang/wgsl/sem",
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc b/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc
index a5cbeea..d987f56 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc
+++ b/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.cc
@@ -84,6 +84,7 @@
#include "src/tint/lang/wgsl/ast/var.h"
#include "src/tint/lang/wgsl/ast/variable_decl_statement.h"
#include "src/tint/lang/wgsl/ast/while_statement.h"
+#include "src/tint/lang/wgsl/ir/builtin_call.h"
#include "src/tint/lang/wgsl/program/program.h"
#include "src/tint/lang/wgsl/sem/builtin_fn.h"
#include "src/tint/lang/wgsl/sem/call.h"
@@ -1098,7 +1099,9 @@
core::ir::Instruction* inst = nullptr;
// If this is a builtin function, emit the specific builtin value
if (auto* b = sem->Target()->As<sem::BuiltinFn>()) {
- inst = impl.builder_.Call(ty, b->Fn(), args);
+ auto* res = impl.builder_.InstructionResult(ty);
+ inst = impl.builder_.ir.instructions.Create<wgsl::ir::BuiltinCall>(
+ res, b->Fn(), std::move(args));
} else if (sem->Target()->As<sem::ValueConstructor>()) {
inst = impl.builder_.Construct(ty, std::move(args));
} else if (sem->Target()->Is<sem::ValueConversion>()) {
diff --git a/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h b/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h
index a4a546c..c139896 100644
--- a/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h
+++ b/src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h
@@ -28,10 +28,9 @@
namespace tint::wgsl::reader {
-/// Builds an core::ir::Module from the given Program
+/// Builds a WGSL-dialect core::ir::Module from the given Program
/// @param program the Program to use.
-/// @returns the `utiils::Result` of generating the IR. The result will contain the
-/// `core::ir::Module` on success, otherwise the `std::string` error.
+/// @returns the WGSL-dialect IR module.
///
/// @note this assumes the `program.IsValid()`, and has had const-eval done so
/// any abstract values have been calculated and converted into the relevant
diff --git a/src/tint/lang/wgsl/reader/reader.cc b/src/tint/lang/wgsl/reader/reader.cc
index beec36b..fac4300 100644
--- a/src/tint/lang/wgsl/reader/reader.cc
+++ b/src/tint/lang/wgsl/reader/reader.cc
@@ -16,15 +16,30 @@
#include <utility>
+#include "src/tint/lang/wgsl/reader/lower/lower.h"
#include "src/tint/lang/wgsl/reader/parser/parser.h"
+#include "src/tint/lang/wgsl/reader/program_to_ir/program_to_ir.h"
#include "src/tint/lang/wgsl/resolver/resolve.h"
namespace tint::wgsl::reader {
-Program Parse(Source::File const* file) {
+Program Parse(const Source::File* file) {
Parser parser(file);
parser.Parse();
return resolver::Resolve(parser.builder());
}
+Result<core::ir::Module> WgslToIR(const Source::File* file) {
+ Program program = Parse(file);
+ auto module = ProgramToIR(program);
+ if (!module) {
+ return module.Failure();
+ }
+ // WGSL-dialect -> core-dialect
+ if (auto res = Lower(module.Get()); !res) {
+ return res.Failure();
+ }
+ return module;
+}
+
} // namespace tint::wgsl::reader
diff --git a/src/tint/lang/wgsl/reader/reader.h b/src/tint/lang/wgsl/reader/reader.h
index 4c96cb0..691b425 100644
--- a/src/tint/lang/wgsl/reader/reader.h
+++ b/src/tint/lang/wgsl/reader/reader.h
@@ -15,6 +15,7 @@
#ifndef SRC_TINT_LANG_WGSL_READER_READER_H_
#define SRC_TINT_LANG_WGSL_READER_READER_H_
+#include "src/tint/lang/core/ir/module.h"
#include "src/tint/lang/wgsl/program/program.h"
namespace tint::wgsl::reader {
@@ -25,7 +26,12 @@
/// `program.Diagnostics()` will describe the error.
/// @param file the source file
/// @returns the parsed program
-Program Parse(Source::File const* file);
+Program Parse(const Source::File* file);
+
+/// Parse a WGSL program from source, and return an IR module.
+/// @param file the input WGSL file
+/// @returns the resulting IR module, or failure
+Result<core::ir::Module> WgslToIR(const Source::File* file);
} // namespace tint::wgsl::reader
diff --git a/src/tint/lang/wgsl/resolver/BUILD.bazel b/src/tint/lang/wgsl/resolver/BUILD.bazel
index ffcbc6c..aebd08e 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.bazel
+++ b/src/tint/lang/wgsl/resolver/BUILD.bazel
@@ -136,6 +136,7 @@
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
"//src/tint/lang/core/intrinsic",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/core/type:test",
"//src/tint/lang/wgsl",
diff --git a/src/tint/lang/wgsl/resolver/BUILD.cmake b/src/tint/lang/wgsl/resolver/BUILD.cmake
index bd4bf3b..e74ab6e 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.cmake
+++ b/src/tint/lang/wgsl/resolver/BUILD.cmake
@@ -135,6 +135,7 @@
tint_lang_core
tint_lang_core_constant
tint_lang_core_intrinsic
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_core_type_test
tint_lang_wgsl
diff --git a/src/tint/lang/wgsl/resolver/BUILD.gn b/src/tint/lang/wgsl/resolver/BUILD.gn
index ef3752b..9fd29ec 100644
--- a/src/tint/lang/wgsl/resolver/BUILD.gn
+++ b/src/tint/lang/wgsl/resolver/BUILD.gn
@@ -138,6 +138,7 @@
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
"${tint_src_dir}/lang/core/intrinsic",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/core/type:unittests",
"${tint_src_dir}/lang/wgsl",
diff --git a/src/tint/lang/wgsl/resolver/builtin_test.cc b/src/tint/lang/wgsl/resolver/builtin_test.cc
index f4175a8..b315974 100644
--- a/src/tint/lang/wgsl/resolver/builtin_test.cc
+++ b/src/tint/lang/wgsl/resolver/builtin_test.cc
@@ -55,7 +55,7 @@
struct BuiltinData {
const char* name;
- core::BuiltinFn builtin;
+ wgsl::BuiltinFn builtin;
};
inline std::ostream& operator<<(std::ostream& out, BuiltinData data) {
@@ -78,9 +78,9 @@
// let a = select(1_i, 2_i, true);
// let b = select(3_i, 4_i, false);
// let c = select(5_u, 6_u, true);
- auto* select_a = Call(core::BuiltinFn::kSelect, 1_i, 2_i, true);
- auto* select_b = Call(core::BuiltinFn::kSelect, 3_i, 4_i, false);
- auto* select_c = Call(core::BuiltinFn::kSelect, 5_u, 6_u, true);
+ auto* select_a = Call(wgsl::BuiltinFn::kSelect, 1_i, 2_i, true);
+ auto* select_b = Call(wgsl::BuiltinFn::kSelect, 3_i, 4_i, false);
+ auto* select_c = Call(wgsl::BuiltinFn::kSelect, 5_u, 6_u, true);
WrapInFunction(Decl(Let("i", Expr(42_i))), //
Decl(Let("a", select_a)), //
Decl(Let("b", select_b)), //
@@ -273,7 +273,7 @@
struct BuiltinDataWithParamNum {
uint32_t args_number;
const char* name;
- core::BuiltinFn builtin;
+ wgsl::BuiltinFn builtin;
};
inline std::ostream& operator<<(std::ostream& out, BuiltinDataWithParamNum data) {
@@ -700,55 +700,55 @@
INSTANTIATE_TEST_SUITE_P(
ResolverTest,
ResolverBuiltinTest_FloatBuiltin_IdenticalType,
- testing::Values(BuiltinDataWithParamNum{1, "abs", core::BuiltinFn::kAbs},
- BuiltinDataWithParamNum{1, "acos", core::BuiltinFn::kAcos},
- BuiltinDataWithParamNum{1, "acosh", core::BuiltinFn::kAcos},
- BuiltinDataWithParamNum{1, "asin", core::BuiltinFn::kAsin},
- BuiltinDataWithParamNum{1, "asinh", core::BuiltinFn::kAsin},
- BuiltinDataWithParamNum{1, "atan", core::BuiltinFn::kAtan},
- BuiltinDataWithParamNum{1, "atanh", core::BuiltinFn::kAtan},
- BuiltinDataWithParamNum{2, "atan2", core::BuiltinFn::kAtan2},
- BuiltinDataWithParamNum{1, "ceil", core::BuiltinFn::kCeil},
- BuiltinDataWithParamNum{3, "clamp", core::BuiltinFn::kClamp},
- BuiltinDataWithParamNum{1, "cos", core::BuiltinFn::kCos},
- BuiltinDataWithParamNum{1, "cosh", core::BuiltinFn::kCosh},
+ testing::Values(BuiltinDataWithParamNum{1, "abs", wgsl::BuiltinFn::kAbs},
+ BuiltinDataWithParamNum{1, "acos", wgsl::BuiltinFn::kAcos},
+ BuiltinDataWithParamNum{1, "acosh", wgsl::BuiltinFn::kAcos},
+ BuiltinDataWithParamNum{1, "asin", wgsl::BuiltinFn::kAsin},
+ BuiltinDataWithParamNum{1, "asinh", wgsl::BuiltinFn::kAsin},
+ BuiltinDataWithParamNum{1, "atan", wgsl::BuiltinFn::kAtan},
+ BuiltinDataWithParamNum{1, "atanh", wgsl::BuiltinFn::kAtan},
+ BuiltinDataWithParamNum{2, "atan2", wgsl::BuiltinFn::kAtan2},
+ BuiltinDataWithParamNum{1, "ceil", wgsl::BuiltinFn::kCeil},
+ BuiltinDataWithParamNum{3, "clamp", wgsl::BuiltinFn::kClamp},
+ BuiltinDataWithParamNum{1, "cos", wgsl::BuiltinFn::kCos},
+ BuiltinDataWithParamNum{1, "cosh", wgsl::BuiltinFn::kCosh},
// cross: (vec3<T>, vec3<T>) -> vec3<T>
- BuiltinDataWithParamNum{1, "degrees", core::BuiltinFn::kDegrees},
+ BuiltinDataWithParamNum{1, "degrees", wgsl::BuiltinFn::kDegrees},
// distance: (T, T) -> T, (vecN<T>, vecN<T>) -> T
- BuiltinDataWithParamNum{1, "exp", core::BuiltinFn::kExp},
- BuiltinDataWithParamNum{1, "exp2", core::BuiltinFn::kExp2},
+ BuiltinDataWithParamNum{1, "exp", wgsl::BuiltinFn::kExp},
+ BuiltinDataWithParamNum{1, "exp2", wgsl::BuiltinFn::kExp2},
// faceForward: (vecN<T>, vecN<T>, vecN<T>) -> vecN<T>
- BuiltinDataWithParamNum{1, "floor", core::BuiltinFn::kFloor},
- BuiltinDataWithParamNum{3, "fma", core::BuiltinFn::kFma},
- BuiltinDataWithParamNum{1, "fract", core::BuiltinFn::kFract},
+ BuiltinDataWithParamNum{1, "floor", wgsl::BuiltinFn::kFloor},
+ BuiltinDataWithParamNum{3, "fma", wgsl::BuiltinFn::kFma},
+ BuiltinDataWithParamNum{1, "fract", wgsl::BuiltinFn::kFract},
// frexp
- BuiltinDataWithParamNum{1, "inverseSqrt", core::BuiltinFn::kInverseSqrt},
+ BuiltinDataWithParamNum{1, "inverseSqrt", wgsl::BuiltinFn::kInverseSqrt},
// ldexp: (T, i32) -> T, (vecN<T>, vecN<i32>) -> vecN<T>
// length: (vecN<T>) -> T
- BuiltinDataWithParamNum{1, "log", core::BuiltinFn::kLog},
- BuiltinDataWithParamNum{1, "log2", core::BuiltinFn::kLog2},
- BuiltinDataWithParamNum{2, "max", core::BuiltinFn::kMax},
- BuiltinDataWithParamNum{2, "min", core::BuiltinFn::kMin},
+ BuiltinDataWithParamNum{1, "log", wgsl::BuiltinFn::kLog},
+ BuiltinDataWithParamNum{1, "log2", wgsl::BuiltinFn::kLog2},
+ BuiltinDataWithParamNum{2, "max", wgsl::BuiltinFn::kMax},
+ BuiltinDataWithParamNum{2, "min", wgsl::BuiltinFn::kMin},
// Note that `mix(vecN<f32>, vecN<f32>, f32) -> vecN<f32>` is not tested here.
- BuiltinDataWithParamNum{3, "mix", core::BuiltinFn::kMix},
+ BuiltinDataWithParamNum{3, "mix", wgsl::BuiltinFn::kMix},
// modf
// normalize: (vecN<T>) -> vecN<T>
- BuiltinDataWithParamNum{2, "pow", core::BuiltinFn::kPow},
+ BuiltinDataWithParamNum{2, "pow", wgsl::BuiltinFn::kPow},
// quantizeToF16 is not implemented yet.
- BuiltinDataWithParamNum{1, "radians", core::BuiltinFn::kRadians},
+ BuiltinDataWithParamNum{1, "radians", wgsl::BuiltinFn::kRadians},
// reflect: (vecN<T>, vecN<T>) -> vecN<T>
// refract: (vecN<T>, vecN<T>, T) -> vecN<T>
- BuiltinDataWithParamNum{1, "round", core::BuiltinFn::kRound},
+ BuiltinDataWithParamNum{1, "round", wgsl::BuiltinFn::kRound},
// saturate not implemented yet.
- BuiltinDataWithParamNum{1, "sign", core::BuiltinFn::kSign},
- BuiltinDataWithParamNum{1, "sin", core::BuiltinFn::kSin},
- BuiltinDataWithParamNum{1, "sinh", core::BuiltinFn::kSinh},
- BuiltinDataWithParamNum{3, "smoothstep", core::BuiltinFn::kSmoothstep},
- BuiltinDataWithParamNum{1, "sqrt", core::BuiltinFn::kSqrt},
- BuiltinDataWithParamNum{2, "step", core::BuiltinFn::kStep},
- BuiltinDataWithParamNum{1, "tan", core::BuiltinFn::kTan},
- BuiltinDataWithParamNum{1, "tanh", core::BuiltinFn::kTanh},
- BuiltinDataWithParamNum{1, "trunc", core::BuiltinFn::kTrunc}));
+ BuiltinDataWithParamNum{1, "sign", wgsl::BuiltinFn::kSign},
+ BuiltinDataWithParamNum{1, "sin", wgsl::BuiltinFn::kSin},
+ BuiltinDataWithParamNum{1, "sinh", wgsl::BuiltinFn::kSinh},
+ BuiltinDataWithParamNum{3, "smoothstep", wgsl::BuiltinFn::kSmoothstep},
+ BuiltinDataWithParamNum{1, "sqrt", wgsl::BuiltinFn::kSqrt},
+ BuiltinDataWithParamNum{2, "step", wgsl::BuiltinFn::kStep},
+ BuiltinDataWithParamNum{1, "tan", wgsl::BuiltinFn::kTan},
+ BuiltinDataWithParamNum{1, "tanh", wgsl::BuiltinFn::kTanh},
+ BuiltinDataWithParamNum{1, "trunc", wgsl::BuiltinFn::kTrunc}));
using ResolverBuiltinFloatTest = ResolverTest;
@@ -1430,7 +1430,7 @@
struct BuiltinDataWithParamNum {
uint32_t args_number;
const char* name;
- core::BuiltinFn builtin;
+ wgsl::BuiltinFn builtin;
};
inline std::ostream& operator<<(std::ostream& out, BuiltinDataWithParamNum data) {
@@ -1826,18 +1826,18 @@
ResolverTest,
ResolverBuiltinTest_IntegerBuiltin_IdenticalType,
testing::Values(
- BuiltinDataWithParamNum{1, "abs", core::BuiltinFn::kAbs},
- BuiltinDataWithParamNum{3, "clamp", core::BuiltinFn::kClamp},
- BuiltinDataWithParamNum{1, "countLeadingZeros", core::BuiltinFn::kCountLeadingZeros},
- BuiltinDataWithParamNum{1, "countOneBits", core::BuiltinFn::kCountOneBits},
- BuiltinDataWithParamNum{1, "countTrailingZeros", core::BuiltinFn::kCountTrailingZeros},
+ BuiltinDataWithParamNum{1, "abs", wgsl::BuiltinFn::kAbs},
+ BuiltinDataWithParamNum{3, "clamp", wgsl::BuiltinFn::kClamp},
+ BuiltinDataWithParamNum{1, "countLeadingZeros", wgsl::BuiltinFn::kCountLeadingZeros},
+ BuiltinDataWithParamNum{1, "countOneBits", wgsl::BuiltinFn::kCountOneBits},
+ BuiltinDataWithParamNum{1, "countTrailingZeros", wgsl::BuiltinFn::kCountTrailingZeros},
// extractBits: (T, u32, u32) -> T
- BuiltinDataWithParamNum{1, "firstLeadingBit", core::BuiltinFn::kFirstLeadingBit},
- BuiltinDataWithParamNum{1, "firstTrailingBit", core::BuiltinFn::kFirstTrailingBit},
+ BuiltinDataWithParamNum{1, "firstLeadingBit", wgsl::BuiltinFn::kFirstLeadingBit},
+ BuiltinDataWithParamNum{1, "firstTrailingBit", wgsl::BuiltinFn::kFirstTrailingBit},
// insertBits: (T, T, u32, u32) -> T
- BuiltinDataWithParamNum{2, "max", core::BuiltinFn::kMax},
- BuiltinDataWithParamNum{2, "min", core::BuiltinFn::kMin},
- BuiltinDataWithParamNum{1, "reverseBits", core::BuiltinFn::kReverseBits}));
+ BuiltinDataWithParamNum{2, "max", wgsl::BuiltinFn::kMax},
+ BuiltinDataWithParamNum{2, "min", wgsl::BuiltinFn::kMin},
+ BuiltinDataWithParamNum{1, "reverseBits", wgsl::BuiltinFn::kReverseBits}));
} // namespace integer_builtin_tests
@@ -2576,8 +2576,8 @@
TEST_P(ResolverBuiltinTest_DataPacking, InferType) {
auto param = GetParam();
- bool pack4 = param.builtin == core::BuiltinFn::kPack4X8Snorm ||
- param.builtin == core::BuiltinFn::kPack4X8Unorm;
+ bool pack4 = param.builtin == wgsl::BuiltinFn::kPack4X8Snorm ||
+ param.builtin == wgsl::BuiltinFn::kPack4X8Unorm;
auto* call = pack4 ? Call(param.name, Call<vec4<f32>>(1_f, 2_f, 3_f, 4_f))
: Call(param.name, Call<vec2<f32>>(1_f, 2_f));
@@ -2591,8 +2591,8 @@
TEST_P(ResolverBuiltinTest_DataPacking, Error_IncorrectParamType) {
auto param = GetParam();
- bool pack4 = param.builtin == core::BuiltinFn::kPack4X8Snorm ||
- param.builtin == core::BuiltinFn::kPack4X8Unorm;
+ bool pack4 = param.builtin == wgsl::BuiltinFn::kPack4X8Snorm ||
+ param.builtin == wgsl::BuiltinFn::kPack4X8Unorm;
auto* call = pack4 ? Call(param.name, Call<vec4<i32>>(1_i, 2_i, 3_i, 4_i))
: Call(param.name, Call<vec2<i32>>(1_i, 2_i));
@@ -2617,8 +2617,8 @@
TEST_P(ResolverBuiltinTest_DataPacking, Error_TooManyParams) {
auto param = GetParam();
- bool pack4 = param.builtin == core::BuiltinFn::kPack4X8Snorm ||
- param.builtin == core::BuiltinFn::kPack4X8Unorm;
+ bool pack4 = param.builtin == wgsl::BuiltinFn::kPack4X8Snorm ||
+ param.builtin == wgsl::BuiltinFn::kPack4X8Unorm;
auto* call = pack4 ? Call(param.name, Call<vec4<f32>>(1_f, 2_f, 3_f, 4_f), 1_f)
: Call(param.name, Call<vec2<f32>>(1_f, 2_f), 1_f);
@@ -2632,11 +2632,11 @@
INSTANTIATE_TEST_SUITE_P(
ResolverTest,
ResolverBuiltinTest_DataPacking,
- testing::Values(BuiltinData{"pack4x8snorm", core::BuiltinFn::kPack4X8Snorm},
- BuiltinData{"pack4x8unorm", core::BuiltinFn::kPack4X8Unorm},
- BuiltinData{"pack2x16snorm", core::BuiltinFn::kPack2X16Snorm},
- BuiltinData{"pack2x16unorm", core::BuiltinFn::kPack2X16Unorm},
- BuiltinData{"pack2x16float", core::BuiltinFn::kPack2X16Float}));
+ testing::Values(BuiltinData{"pack4x8snorm", wgsl::BuiltinFn::kPack4X8Snorm},
+ BuiltinData{"pack4x8unorm", wgsl::BuiltinFn::kPack4X8Unorm},
+ BuiltinData{"pack2x16snorm", wgsl::BuiltinFn::kPack2X16Snorm},
+ BuiltinData{"pack2x16unorm", wgsl::BuiltinFn::kPack2X16Unorm},
+ BuiltinData{"pack2x16float", wgsl::BuiltinFn::kPack2X16Float}));
} // namespace data_packing_builtin_tests
@@ -2647,8 +2647,8 @@
TEST_P(ResolverBuiltinTest_DataUnpacking, InferType) {
auto param = GetParam();
- bool pack4 = param.builtin == core::BuiltinFn::kUnpack4X8Snorm ||
- param.builtin == core::BuiltinFn::kUnpack4X8Unorm;
+ bool pack4 = param.builtin == wgsl::BuiltinFn::kUnpack4X8Snorm ||
+ param.builtin == wgsl::BuiltinFn::kUnpack4X8Unorm;
auto* call = Call(param.name, 1_u);
WrapInFunction(call);
@@ -2666,11 +2666,11 @@
INSTANTIATE_TEST_SUITE_P(
ResolverTest,
ResolverBuiltinTest_DataUnpacking,
- testing::Values(BuiltinData{"unpack4x8snorm", core::BuiltinFn::kUnpack4X8Snorm},
- BuiltinData{"unpack4x8unorm", core::BuiltinFn::kUnpack4X8Unorm},
- BuiltinData{"unpack2x16snorm", core::BuiltinFn::kUnpack2X16Snorm},
- BuiltinData{"unpack2x16unorm", core::BuiltinFn::kUnpack2X16Unorm},
- BuiltinData{"unpack2x16float", core::BuiltinFn::kUnpack2X16Float}));
+ testing::Values(BuiltinData{"unpack4x8snorm", wgsl::BuiltinFn::kUnpack4X8Snorm},
+ BuiltinData{"unpack4x8unorm", wgsl::BuiltinFn::kUnpack4X8Unorm},
+ BuiltinData{"unpack2x16snorm", wgsl::BuiltinFn::kUnpack2X16Snorm},
+ BuiltinData{"unpack2x16unorm", wgsl::BuiltinFn::kUnpack2X16Unorm},
+ BuiltinData{"unpack2x16float", wgsl::BuiltinFn::kUnpack2X16Float}));
} // namespace data_unpacking_builtin_tests
@@ -2703,8 +2703,8 @@
INSTANTIATE_TEST_SUITE_P(
ResolverTest,
ResolverBuiltinTest_Barrier,
- testing::Values(BuiltinData{"storageBarrier", core::BuiltinFn::kStorageBarrier},
- BuiltinData{"workgroupBarrier", core::BuiltinFn::kWorkgroupBarrier}));
+ testing::Values(BuiltinData{"storageBarrier", wgsl::BuiltinFn::kStorageBarrier},
+ BuiltinData{"workgroupBarrier", wgsl::BuiltinFn::kWorkgroupBarrier}));
} // namespace synchronization_builtin_tests
diff --git a/src/tint/lang/wgsl/resolver/dependency_graph.cc b/src/tint/lang/wgsl/resolver/dependency_graph.cc
index baab8cd..e2f25d8 100644
--- a/src/tint/lang/wgsl/resolver/dependency_graph.cc
+++ b/src/tint/lang/wgsl/resolver/dependency_graph.cc
@@ -474,7 +474,7 @@
BuiltinType type = BuiltinType::kNone;
std::variant<std::monostate,
- core::BuiltinFn,
+ wgsl::BuiltinFn,
core::BuiltinType,
core::BuiltinValue,
core::AddressSpace,
@@ -490,8 +490,8 @@
/// @returns the builtin info
DependencyScanner::BuiltinInfo GetBuiltinInfo(Symbol symbol) {
return builtin_info_map.GetOrCreate(symbol, [&] {
- if (auto builtin_fn = core::ParseBuiltinFn(symbol.NameView());
- builtin_fn != core::BuiltinFn::kNone) {
+ if (auto builtin_fn = wgsl::ParseBuiltinFn(symbol.NameView());
+ builtin_fn != wgsl::BuiltinFn::kNone) {
return BuiltinInfo{BuiltinType::kFunction, builtin_fn};
}
if (auto builtin_ty = core::ParseBuiltinType(symbol.NameView());
@@ -537,7 +537,7 @@
break;
case BuiltinType::kFunction:
graph_.resolved_identifiers.Add(
- from, ResolvedIdentifier(builtin_info.Value<core::BuiltinFn>()));
+ from, ResolvedIdentifier(builtin_info.Value<wgsl::BuiltinFn>()));
break;
case BuiltinType::kBuiltin:
graph_.resolved_identifiers.Add(
@@ -921,7 +921,7 @@
return "<unknown>";
});
}
- if (auto builtin_fn = BuiltinFn(); builtin_fn != core::BuiltinFn::kNone) {
+ if (auto builtin_fn = BuiltinFn(); builtin_fn != wgsl::BuiltinFn::kNone) {
return "builtin function '" + tint::ToString(builtin_fn) + "'";
}
if (auto builtin_ty = BuiltinType(); builtin_ty != core::BuiltinType::kUndefined) {
diff --git a/src/tint/lang/wgsl/resolver/dependency_graph.h b/src/tint/lang/wgsl/resolver/dependency_graph.h
index 3755f00..85a91e2 100644
--- a/src/tint/lang/wgsl/resolver/dependency_graph.h
+++ b/src/tint/lang/wgsl/resolver/dependency_graph.h
@@ -19,13 +19,13 @@
#include <vector>
#include "src/tint/lang/core/access.h"
-#include "src/tint/lang/core/builtin_fn.h"
#include "src/tint/lang/core/builtin_type.h"
#include "src/tint/lang/core/builtin_value.h"
#include "src/tint/lang/core/interpolation_sampling.h"
#include "src/tint/lang/core/interpolation_type.h"
#include "src/tint/lang/core/texel_format.h"
#include "src/tint/lang/wgsl/ast/module.h"
+#include "src/tint/lang/wgsl/builtin_fn.h"
#include "src/tint/utils/containers/hashmap.h"
#include "src/tint/utils/diagnostic/diagnostic.h"
@@ -43,7 +43,7 @@
/// - const ast::TypeDecl* (as const ast::Node*)
/// - const ast::Variable* (as const ast::Node*)
/// - const ast::Function* (as const ast::Node*)
-/// - core::BuiltinFn
+/// - wgsl::BuiltinFn
/// - core::Access
/// - core::AddressSpace
/// - core::BuiltinType
@@ -74,13 +74,13 @@
return nullptr;
}
- /// @return the builtin function if the ResolvedIdentifier holds core::BuiltinFn, otherwise
- /// core::BuiltinFn::kNone
- core::BuiltinFn BuiltinFn() const {
- if (auto n = std::get_if<core::BuiltinFn>(&value_)) {
+ /// @return the builtin function if the ResolvedIdentifier holds wgsl::BuiltinFn, otherwise
+ /// wgsl::BuiltinFn::kNone
+ wgsl::BuiltinFn BuiltinFn() const {
+ if (auto n = std::get_if<wgsl::BuiltinFn>(&value_)) {
return *n;
}
- return core::BuiltinFn::kNone;
+ return wgsl::BuiltinFn::kNone;
}
/// @return the access if the ResolvedIdentifier holds core::Access, otherwise
@@ -169,7 +169,7 @@
private:
std::variant<UnresolvedIdentifier,
const ast::Node*,
- core::BuiltinFn,
+ wgsl::BuiltinFn,
core::Access,
core::AddressSpace,
core::BuiltinType,
diff --git a/src/tint/lang/wgsl/resolver/dependency_graph_test.cc b/src/tint/lang/wgsl/resolver/dependency_graph_test.cc
index 605ffe1..5b123e1 100644
--- a/src/tint/lang/wgsl/resolver/dependency_graph_test.cc
+++ b/src/tint/lang/wgsl/resolver/dependency_graph_test.cc
@@ -1178,7 +1178,7 @@
namespace resolve_to_builtin_func {
using ResolverDependencyGraphResolveToBuiltinFn =
- ResolverDependencyGraphTestWithParam<std::tuple<SymbolUseKind, core::BuiltinFn>>;
+ ResolverDependencyGraphTestWithParam<std::tuple<SymbolUseKind, wgsl::BuiltinFn>>;
TEST_P(ResolverDependencyGraphResolveToBuiltinFn, Resolve) {
const auto use = std::get<0>(GetParam());
@@ -1197,17 +1197,17 @@
INSTANTIATE_TEST_SUITE_P(Types,
ResolverDependencyGraphResolveToBuiltinFn,
testing::Combine(testing::ValuesIn(kTypeUseKinds),
- testing::ValuesIn(core::kBuiltinFns)));
+ testing::ValuesIn(wgsl::kBuiltinFns)));
INSTANTIATE_TEST_SUITE_P(Values,
ResolverDependencyGraphResolveToBuiltinFn,
testing::Combine(testing::ValuesIn(kValueUseKinds),
- testing::ValuesIn(core::kBuiltinFns)));
+ testing::ValuesIn(wgsl::kBuiltinFns)));
INSTANTIATE_TEST_SUITE_P(Functions,
ResolverDependencyGraphResolveToBuiltinFn,
testing::Combine(testing::ValuesIn(kFuncUseKinds),
- testing::ValuesIn(core::kBuiltinFns)));
+ testing::ValuesIn(wgsl::kBuiltinFns)));
} // namespace resolve_to_builtin_func
diff --git a/src/tint/lang/wgsl/resolver/materialize_test.cc b/src/tint/lang/wgsl/resolver/materialize_test.cc
index 6116ada..f4b0ab5 100644
--- a/src/tint/lang/wgsl/resolver/materialize_test.cc
+++ b/src/tint/lang/wgsl/resolver/materialize_test.cc
@@ -953,7 +953,7 @@
break;
}
case Method::kTintMaterializeBuiltin: {
- auto* call = Call(core::str(core::BuiltinFn::kTintMaterialize), abstract_expr());
+ auto* call = Call(wgsl::BuiltinFn::kTintMaterialize, abstract_expr());
WrapInFunction(Decl(Const("c", call)));
break;
}
diff --git a/src/tint/lang/wgsl/resolver/resolver.cc b/src/tint/lang/wgsl/resolver/resolver.cc
index 7bcf16d..e54460b 100644
--- a/src/tint/lang/wgsl/resolver/resolver.cc
+++ b/src/tint/lang/wgsl/resolver/resolver.cc
@@ -2325,7 +2325,7 @@
});
}
- if (auto f = resolved->BuiltinFn(); f != core::BuiltinFn::kNone) {
+ if (auto f = resolved->BuiltinFn(); f != wgsl::BuiltinFn::kNone) {
if (!TINT_LIKELY(CheckNotTemplated("builtin", ident))) {
return nullptr;
}
@@ -2400,7 +2400,7 @@
template <size_t N>
sem::Call* Resolver::BuiltinCall(const ast::CallExpression* expr,
- core::BuiltinFn fn,
+ wgsl::BuiltinFn fn,
Vector<const sem::ValueExpression*, N>& args) {
auto arg_stage = core::EvaluationStage::kConstant;
for (auto* arg : args) {
@@ -2439,7 +2439,7 @@
flags.Contains(OverloadFlag::kIsDeprecated), flags.Contains(OverloadFlag::kMustUse));
});
- if (fn == core::BuiltinFn::kTintMaterialize) {
+ if (fn == wgsl::BuiltinFn::kTintMaterialize) {
args[0] = Materialize(args[0]);
if (!args[0]) {
return nullptr;
@@ -2498,13 +2498,13 @@
CollectTextureSamplerPairs(target, call->Arguments());
}
- if (fn == core::BuiltinFn::kWorkgroupUniformLoad) {
+ if (fn == wgsl::BuiltinFn::kWorkgroupUniformLoad) {
if (!validator_.WorkgroupUniformLoad(call)) {
return nullptr;
}
}
- if (fn == core::BuiltinFn::kSubgroupBroadcast) {
+ if (fn == wgsl::BuiltinFn::kSubgroupBroadcast) {
if (!validator_.SubgroupBroadcast(call)) {
return nullptr;
}
@@ -3333,7 +3333,7 @@
return builder_->create<sem::TypeExpression>(expr, current_statement_, ty);
}
- if (resolved->BuiltinFn() != core::BuiltinFn::kNone) {
+ if (resolved->BuiltinFn() != wgsl::BuiltinFn::kNone) {
AddError("missing '(' for builtin function call", expr->source.End());
return nullptr;
}
diff --git a/src/tint/lang/wgsl/resolver/resolver.h b/src/tint/lang/wgsl/resolver/resolver.h
index 5dd2029..04c5243 100644
--- a/src/tint/lang/wgsl/resolver/resolver.h
+++ b/src/tint/lang/wgsl/resolver/resolver.h
@@ -212,7 +212,7 @@
sem::Expression* Identifier(const ast::IdentifierExpression*);
template <size_t N>
sem::Call* BuiltinCall(const ast::CallExpression*,
- core::BuiltinFn,
+ wgsl::BuiltinFn,
Vector<const sem::ValueExpression*, N>& args);
sem::ValueExpression* Literal(const ast::LiteralExpression*);
sem::ValueExpression* MemberAccessor(const ast::MemberAccessorExpression*);
@@ -635,7 +635,7 @@
Hashset<const ast::Expression*, 8> skip_const_eval_;
IdentifierResolveHint identifier_resolve_hint_;
Hashmap<const core::type::Type*, size_t, 8> nest_depth_;
- Hashmap<std::pair<core::intrinsic::Overload, core::BuiltinFn>, sem::BuiltinFn*, 64> builtins_;
+ Hashmap<std::pair<core::intrinsic::Overload, wgsl::BuiltinFn>, sem::BuiltinFn*, 64> builtins_;
Hashmap<core::intrinsic::Overload, sem::ValueConstructor*, 16> constructors_;
Hashmap<core::intrinsic::Overload, sem::ValueConversion*, 16> converters_;
};
diff --git a/src/tint/lang/wgsl/resolver/uniformity.cc b/src/tint/lang/wgsl/resolver/uniformity.cc
index 0ce82d0..506a20b 100644
--- a/src/tint/lang/wgsl/resolver/uniformity.cc
+++ b/src/tint/lang/wgsl/resolver/uniformity.cc
@@ -1552,12 +1552,12 @@
// some texture sampling builtins, and atomics.
if (builtin->IsBarrier()) {
callsite_tag = {CallSiteTag::CallSiteRequiredToBeUniform, default_severity};
- } else if (builtin->Fn() == core::BuiltinFn::kWorkgroupUniformLoad) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kWorkgroupUniformLoad) {
callsite_tag = {CallSiteTag::CallSiteRequiredToBeUniform, default_severity};
} else if (builtin->IsDerivative() ||
- builtin->Fn() == core::BuiltinFn::kTextureSample ||
- builtin->Fn() == core::BuiltinFn::kTextureSampleBias ||
- builtin->Fn() == core::BuiltinFn::kTextureSampleCompare) {
+ builtin->Fn() == wgsl::BuiltinFn::kTextureSample ||
+ builtin->Fn() == wgsl::BuiltinFn::kTextureSampleBias ||
+ builtin->Fn() == wgsl::BuiltinFn::kTextureSampleCompare) {
// Get the severity of derivative uniformity violations in this context.
auto severity = sem_.DiagnosticSeverity(
call, wgsl::CoreDiagnosticRule::kDerivativeUniformity);
@@ -1568,7 +1568,7 @@
} else if (builtin->IsAtomic()) {
callsite_tag = {CallSiteTag::CallSiteNoRestriction};
function_tag = ReturnValueMayBeNonUniform;
- } else if (builtin->Fn() == core::BuiltinFn::kTextureLoad) {
+ } else if (builtin->Fn() == wgsl::BuiltinFn::kTextureLoad) {
// Loading from a read-write storage texture may produce a non-uniform value.
auto* storage =
builtin->Parameters()[0]->Type()->As<core::type::StorageTexture>();
@@ -1670,7 +1670,7 @@
}
} else {
auto* builtin = sem->Target()->As<sem::BuiltinFn>();
- if (builtin && builtin->Fn() == core::BuiltinFn::kWorkgroupUniformLoad) {
+ if (builtin && builtin->Fn() == wgsl::BuiltinFn::kWorkgroupUniformLoad) {
// The workgroupUniformLoad builtin requires its parameter to be uniform.
current_function_->RequiredToBeUniform(default_severity)->AddEdge(args[i]);
} else {
diff --git a/src/tint/lang/wgsl/sem/builtin_fn.cc b/src/tint/lang/wgsl/sem/builtin_fn.cc
index b7c9909..4926c15 100644
--- a/src/tint/lang/wgsl/sem/builtin_fn.cc
+++ b/src/tint/lang/wgsl/sem/builtin_fn.cc
@@ -27,10 +27,10 @@
namespace tint::sem {
const char* BuiltinFn::str() const {
- return core::str(fn_);
+ return wgsl::str(fn_);
}
-BuiltinFn::BuiltinFn(core::BuiltinFn type,
+BuiltinFn::BuiltinFn(wgsl::BuiltinFn type,
const core::type::Type* return_type,
VectorRef<Parameter*> parameters,
core::EvaluationStage eval_stage,
@@ -45,51 +45,51 @@
BuiltinFn::~BuiltinFn() = default;
bool BuiltinFn::IsCoarseDerivative() const {
- return core::IsCoarseDerivative(fn_);
+ return wgsl::IsCoarseDerivative(fn_);
}
bool BuiltinFn::IsFineDerivative() const {
- return core::IsFineDerivative(fn_);
+ return wgsl::IsFineDerivative(fn_);
}
bool BuiltinFn::IsDerivative() const {
- return core::IsDerivative(fn_);
+ return wgsl::IsDerivative(fn_);
}
bool BuiltinFn::IsTexture() const {
- return core::IsTexture(fn_);
+ return wgsl::IsTexture(fn_);
}
bool BuiltinFn::IsImageQuery() const {
- return core::IsImageQuery(fn_);
+ return wgsl::IsImageQuery(fn_);
}
bool BuiltinFn::IsDataPacking() const {
- return core::IsDataPacking(fn_);
+ return wgsl::IsDataPacking(fn_);
}
bool BuiltinFn::IsDataUnpacking() const {
- return core::IsDataUnpacking(fn_);
+ return wgsl::IsDataUnpacking(fn_);
}
bool BuiltinFn::IsBarrier() const {
- return core::IsBarrier(fn_);
+ return wgsl::IsBarrier(fn_);
}
bool BuiltinFn::IsAtomic() const {
- return core::IsAtomic(fn_);
+ return wgsl::IsAtomic(fn_);
}
bool BuiltinFn::IsDP4a() const {
- return core::IsDP4a(fn_);
+ return wgsl::IsDP4a(fn_);
}
bool BuiltinFn::IsSubgroup() const {
- return core::IsSubgroup(fn_);
+ return wgsl::IsSubgroup(fn_);
}
bool BuiltinFn::HasSideEffects() const {
- return core::HasSideEffects(fn_);
+ return wgsl::HasSideEffects(fn_);
}
wgsl::Extension BuiltinFn::RequiredExtension() const {
@@ -99,7 +99,7 @@
if (IsSubgroup()) {
return wgsl::Extension::kChromiumExperimentalSubgroups;
}
- if (fn_ == core::BuiltinFn::kTextureBarrier) {
+ if (fn_ == wgsl::BuiltinFn::kTextureBarrier) {
return wgsl::Extension::kChromiumExperimentalReadWriteStorageTexture;
}
return wgsl::Extension::kUndefined;
diff --git a/src/tint/lang/wgsl/sem/builtin_fn.h b/src/tint/lang/wgsl/sem/builtin_fn.h
index 525403c..e7b8c8f 100644
--- a/src/tint/lang/wgsl/sem/builtin_fn.h
+++ b/src/tint/lang/wgsl/sem/builtin_fn.h
@@ -18,7 +18,7 @@
#include <string>
#include <vector>
-#include "src/tint/lang/core/builtin_fn.h"
+#include "src/tint/lang/wgsl/builtin_fn.h"
#include "src/tint/lang/wgsl/extension.h"
#include "src/tint/lang/wgsl/sem/call_target.h"
#include "src/tint/lang/wgsl/sem/pipeline_stage_set.h"
@@ -37,7 +37,7 @@
/// @param supported_stages the pipeline stages that this builtin can be used in
/// @param is_deprecated true if the particular overload is considered deprecated
/// @param must_use true if the builtin was annotated with `@must_use`
- BuiltinFn(core::BuiltinFn type,
+ BuiltinFn(wgsl::BuiltinFn type,
const core::type::Type* return_type,
VectorRef<Parameter*> parameters,
core::EvaluationStage eval_stage,
@@ -49,7 +49,7 @@
~BuiltinFn() override;
/// @return the type of the builtin
- core::BuiltinFn Fn() const { return fn_; }
+ wgsl::BuiltinFn Fn() const { return fn_; }
/// @return the pipeline stages that this builtin can be used in
PipelineStageSet SupportedStages() const { return supported_stages_; }
@@ -110,7 +110,7 @@
}
private:
- const core::BuiltinFn fn_;
+ const wgsl::BuiltinFn fn_;
const PipelineStageSet supported_stages_;
const bool is_deprecated_;
};
diff --git a/src/tint/lang/wgsl/sem/builtin_fn_test.cc b/src/tint/lang/wgsl/sem/builtin_fn_test.cc
index f10a9f9..2c7a9d1 100644
--- a/src/tint/lang/wgsl/sem/builtin_fn_test.cc
+++ b/src/tint/lang/wgsl/sem/builtin_fn_test.cc
@@ -21,7 +21,7 @@
struct BuiltinData {
const char* name;
- core::BuiltinFn builtin;
+ wgsl::BuiltinFn builtin;
};
inline std::ostream& operator<<(std::ostream& out, BuiltinData data) {
@@ -33,94 +33,94 @@
TEST_P(BuiltinFunctionTest, Parse) {
auto param = GetParam();
- EXPECT_EQ(core::ParseBuiltinFn(param.name), param.builtin);
+ EXPECT_EQ(wgsl::ParseBuiltinFn(param.name), param.builtin);
}
INSTANTIATE_TEST_SUITE_P(
BuiltinFunctionTest,
BuiltinFunctionTest,
- testing::Values(BuiltinData{"abs", core::BuiltinFn::kAbs},
- BuiltinData{"acos", core::BuiltinFn::kAcos},
- BuiltinData{"all", core::BuiltinFn::kAll},
- BuiltinData{"any", core::BuiltinFn::kAny},
- BuiltinData{"arrayLength", core::BuiltinFn::kArrayLength},
- BuiltinData{"asin", core::BuiltinFn::kAsin},
- BuiltinData{"atan", core::BuiltinFn::kAtan},
- BuiltinData{"atan2", core::BuiltinFn::kAtan2},
- BuiltinData{"ceil", core::BuiltinFn::kCeil},
- BuiltinData{"clamp", core::BuiltinFn::kClamp},
- BuiltinData{"cos", core::BuiltinFn::kCos},
- BuiltinData{"cosh", core::BuiltinFn::kCosh},
- BuiltinData{"countOneBits", core::BuiltinFn::kCountOneBits},
- BuiltinData{"cross", core::BuiltinFn::kCross},
- BuiltinData{"determinant", core::BuiltinFn::kDeterminant},
- BuiltinData{"distance", core::BuiltinFn::kDistance},
- BuiltinData{"dot", core::BuiltinFn::kDot},
- BuiltinData{"dot4I8Packed", core::BuiltinFn::kDot4I8Packed},
- BuiltinData{"dot4U8Packed", core::BuiltinFn::kDot4U8Packed},
- BuiltinData{"dpdx", core::BuiltinFn::kDpdx},
- BuiltinData{"dpdxCoarse", core::BuiltinFn::kDpdxCoarse},
- BuiltinData{"dpdxFine", core::BuiltinFn::kDpdxFine},
- BuiltinData{"dpdy", core::BuiltinFn::kDpdy},
- BuiltinData{"dpdyCoarse", core::BuiltinFn::kDpdyCoarse},
- BuiltinData{"dpdyFine", core::BuiltinFn::kDpdyFine},
- BuiltinData{"exp", core::BuiltinFn::kExp},
- BuiltinData{"exp2", core::BuiltinFn::kExp2},
- BuiltinData{"faceForward", core::BuiltinFn::kFaceForward},
- BuiltinData{"floor", core::BuiltinFn::kFloor},
- BuiltinData{"fma", core::BuiltinFn::kFma},
- BuiltinData{"fract", core::BuiltinFn::kFract},
- BuiltinData{"frexp", core::BuiltinFn::kFrexp},
- BuiltinData{"fwidth", core::BuiltinFn::kFwidth},
- BuiltinData{"fwidthCoarse", core::BuiltinFn::kFwidthCoarse},
- BuiltinData{"fwidthFine", core::BuiltinFn::kFwidthFine},
- BuiltinData{"inverseSqrt", core::BuiltinFn::kInverseSqrt},
- BuiltinData{"ldexp", core::BuiltinFn::kLdexp},
- BuiltinData{"length", core::BuiltinFn::kLength},
- BuiltinData{"log", core::BuiltinFn::kLog},
- BuiltinData{"log2", core::BuiltinFn::kLog2},
- BuiltinData{"max", core::BuiltinFn::kMax},
- BuiltinData{"min", core::BuiltinFn::kMin},
- BuiltinData{"mix", core::BuiltinFn::kMix},
- BuiltinData{"modf", core::BuiltinFn::kModf},
- BuiltinData{"normalize", core::BuiltinFn::kNormalize},
- BuiltinData{"pow", core::BuiltinFn::kPow},
- BuiltinData{"reflect", core::BuiltinFn::kReflect},
- BuiltinData{"reverseBits", core::BuiltinFn::kReverseBits},
- BuiltinData{"round", core::BuiltinFn::kRound},
- BuiltinData{"select", core::BuiltinFn::kSelect},
- BuiltinData{"sign", core::BuiltinFn::kSign},
- BuiltinData{"sin", core::BuiltinFn::kSin},
- BuiltinData{"sinh", core::BuiltinFn::kSinh},
- BuiltinData{"smoothstep", core::BuiltinFn::kSmoothstep},
- BuiltinData{"sqrt", core::BuiltinFn::kSqrt},
- BuiltinData{"step", core::BuiltinFn::kStep},
- BuiltinData{"storageBarrier", core::BuiltinFn::kStorageBarrier},
- BuiltinData{"tan", core::BuiltinFn::kTan},
- BuiltinData{"tanh", core::BuiltinFn::kTanh},
- BuiltinData{"textureDimensions", core::BuiltinFn::kTextureDimensions},
- BuiltinData{"textureLoad", core::BuiltinFn::kTextureLoad},
- BuiltinData{"textureNumLayers", core::BuiltinFn::kTextureNumLayers},
- BuiltinData{"textureNumLevels", core::BuiltinFn::kTextureNumLevels},
- BuiltinData{"textureNumSamples", core::BuiltinFn::kTextureNumSamples},
- BuiltinData{"textureSample", core::BuiltinFn::kTextureSample},
- BuiltinData{"textureSampleBias", core::BuiltinFn::kTextureSampleBias},
- BuiltinData{"textureSampleCompare", core::BuiltinFn::kTextureSampleCompare},
+ testing::Values(BuiltinData{"abs", wgsl::BuiltinFn::kAbs},
+ BuiltinData{"acos", wgsl::BuiltinFn::kAcos},
+ BuiltinData{"all", wgsl::BuiltinFn::kAll},
+ BuiltinData{"any", wgsl::BuiltinFn::kAny},
+ BuiltinData{"arrayLength", wgsl::BuiltinFn::kArrayLength},
+ BuiltinData{"asin", wgsl::BuiltinFn::kAsin},
+ BuiltinData{"atan", wgsl::BuiltinFn::kAtan},
+ BuiltinData{"atan2", wgsl::BuiltinFn::kAtan2},
+ BuiltinData{"ceil", wgsl::BuiltinFn::kCeil},
+ BuiltinData{"clamp", wgsl::BuiltinFn::kClamp},
+ BuiltinData{"cos", wgsl::BuiltinFn::kCos},
+ BuiltinData{"cosh", wgsl::BuiltinFn::kCosh},
+ BuiltinData{"countOneBits", wgsl::BuiltinFn::kCountOneBits},
+ BuiltinData{"cross", wgsl::BuiltinFn::kCross},
+ BuiltinData{"determinant", wgsl::BuiltinFn::kDeterminant},
+ BuiltinData{"distance", wgsl::BuiltinFn::kDistance},
+ BuiltinData{"dot", wgsl::BuiltinFn::kDot},
+ BuiltinData{"dot4I8Packed", wgsl::BuiltinFn::kDot4I8Packed},
+ BuiltinData{"dot4U8Packed", wgsl::BuiltinFn::kDot4U8Packed},
+ BuiltinData{"dpdx", wgsl::BuiltinFn::kDpdx},
+ BuiltinData{"dpdxCoarse", wgsl::BuiltinFn::kDpdxCoarse},
+ BuiltinData{"dpdxFine", wgsl::BuiltinFn::kDpdxFine},
+ BuiltinData{"dpdy", wgsl::BuiltinFn::kDpdy},
+ BuiltinData{"dpdyCoarse", wgsl::BuiltinFn::kDpdyCoarse},
+ BuiltinData{"dpdyFine", wgsl::BuiltinFn::kDpdyFine},
+ BuiltinData{"exp", wgsl::BuiltinFn::kExp},
+ BuiltinData{"exp2", wgsl::BuiltinFn::kExp2},
+ BuiltinData{"faceForward", wgsl::BuiltinFn::kFaceForward},
+ BuiltinData{"floor", wgsl::BuiltinFn::kFloor},
+ BuiltinData{"fma", wgsl::BuiltinFn::kFma},
+ BuiltinData{"fract", wgsl::BuiltinFn::kFract},
+ BuiltinData{"frexp", wgsl::BuiltinFn::kFrexp},
+ BuiltinData{"fwidth", wgsl::BuiltinFn::kFwidth},
+ BuiltinData{"fwidthCoarse", wgsl::BuiltinFn::kFwidthCoarse},
+ BuiltinData{"fwidthFine", wgsl::BuiltinFn::kFwidthFine},
+ BuiltinData{"inverseSqrt", wgsl::BuiltinFn::kInverseSqrt},
+ BuiltinData{"ldexp", wgsl::BuiltinFn::kLdexp},
+ BuiltinData{"length", wgsl::BuiltinFn::kLength},
+ BuiltinData{"log", wgsl::BuiltinFn::kLog},
+ BuiltinData{"log2", wgsl::BuiltinFn::kLog2},
+ BuiltinData{"max", wgsl::BuiltinFn::kMax},
+ BuiltinData{"min", wgsl::BuiltinFn::kMin},
+ BuiltinData{"mix", wgsl::BuiltinFn::kMix},
+ BuiltinData{"modf", wgsl::BuiltinFn::kModf},
+ BuiltinData{"normalize", wgsl::BuiltinFn::kNormalize},
+ BuiltinData{"pow", wgsl::BuiltinFn::kPow},
+ BuiltinData{"reflect", wgsl::BuiltinFn::kReflect},
+ BuiltinData{"reverseBits", wgsl::BuiltinFn::kReverseBits},
+ BuiltinData{"round", wgsl::BuiltinFn::kRound},
+ BuiltinData{"select", wgsl::BuiltinFn::kSelect},
+ BuiltinData{"sign", wgsl::BuiltinFn::kSign},
+ BuiltinData{"sin", wgsl::BuiltinFn::kSin},
+ BuiltinData{"sinh", wgsl::BuiltinFn::kSinh},
+ BuiltinData{"smoothstep", wgsl::BuiltinFn::kSmoothstep},
+ BuiltinData{"sqrt", wgsl::BuiltinFn::kSqrt},
+ BuiltinData{"step", wgsl::BuiltinFn::kStep},
+ BuiltinData{"storageBarrier", wgsl::BuiltinFn::kStorageBarrier},
+ BuiltinData{"tan", wgsl::BuiltinFn::kTan},
+ BuiltinData{"tanh", wgsl::BuiltinFn::kTanh},
+ BuiltinData{"textureDimensions", wgsl::BuiltinFn::kTextureDimensions},
+ BuiltinData{"textureLoad", wgsl::BuiltinFn::kTextureLoad},
+ BuiltinData{"textureNumLayers", wgsl::BuiltinFn::kTextureNumLayers},
+ BuiltinData{"textureNumLevels", wgsl::BuiltinFn::kTextureNumLevels},
+ BuiltinData{"textureNumSamples", wgsl::BuiltinFn::kTextureNumSamples},
+ BuiltinData{"textureSample", wgsl::BuiltinFn::kTextureSample},
+ BuiltinData{"textureSampleBias", wgsl::BuiltinFn::kTextureSampleBias},
+ BuiltinData{"textureSampleCompare", wgsl::BuiltinFn::kTextureSampleCompare},
BuiltinData{"textureSampleCompareLevel",
- core::BuiltinFn::kTextureSampleCompareLevel},
- BuiltinData{"textureSampleGrad", core::BuiltinFn::kTextureSampleGrad},
- BuiltinData{"textureSampleLevel", core::BuiltinFn::kTextureSampleLevel},
- BuiltinData{"trunc", core::BuiltinFn::kTrunc},
- BuiltinData{"unpack2x16float", core::BuiltinFn::kUnpack2X16Float},
- BuiltinData{"unpack2x16snorm", core::BuiltinFn::kUnpack2X16Snorm},
- BuiltinData{"unpack2x16unorm", core::BuiltinFn::kUnpack2X16Unorm},
- BuiltinData{"unpack4x8snorm", core::BuiltinFn::kUnpack4X8Snorm},
- BuiltinData{"unpack4x8unorm", core::BuiltinFn::kUnpack4X8Unorm},
- BuiltinData{"workgroupBarrier", core::BuiltinFn::kWorkgroupBarrier},
- BuiltinData{"workgroupUniformLoad", core::BuiltinFn::kWorkgroupUniformLoad}));
+ wgsl::BuiltinFn::kTextureSampleCompareLevel},
+ BuiltinData{"textureSampleGrad", wgsl::BuiltinFn::kTextureSampleGrad},
+ BuiltinData{"textureSampleLevel", wgsl::BuiltinFn::kTextureSampleLevel},
+ BuiltinData{"trunc", wgsl::BuiltinFn::kTrunc},
+ BuiltinData{"unpack2x16float", wgsl::BuiltinFn::kUnpack2X16Float},
+ BuiltinData{"unpack2x16snorm", wgsl::BuiltinFn::kUnpack2X16Snorm},
+ BuiltinData{"unpack2x16unorm", wgsl::BuiltinFn::kUnpack2X16Unorm},
+ BuiltinData{"unpack4x8snorm", wgsl::BuiltinFn::kUnpack4X8Snorm},
+ BuiltinData{"unpack4x8unorm", wgsl::BuiltinFn::kUnpack4X8Unorm},
+ BuiltinData{"workgroupBarrier", wgsl::BuiltinFn::kWorkgroupBarrier},
+ BuiltinData{"workgroupUniformLoad", wgsl::BuiltinFn::kWorkgroupUniformLoad}));
TEST_F(BuiltinFunctionTest, ParseNoMatch) {
- EXPECT_EQ(core::ParseBuiltinFn("not_builtin"), core::BuiltinFn::kNone);
+ EXPECT_EQ(wgsl::ParseBuiltinFn("not_builtin"), wgsl::BuiltinFn::kNone);
}
} // namespace
diff --git a/src/tint/lang/wgsl/wgsl.def b/src/tint/lang/wgsl/wgsl.def
index 0a40a81..9d6cce6 100644
--- a/src/tint/lang/wgsl/wgsl.def
+++ b/src/tint/lang/wgsl/wgsl.def
@@ -23,6 +23,10 @@
// from the Dawn source directory. //
////////////////////////////////////////////////////////////////////////////////
+import "src/tint/lang/core/access.def"
+import "src/tint/lang/core/address_space.def"
+import "src/tint/lang/core/texel_format.def"
+
////////////////////////////////////////////////////////////////////////////////
// Enumerators //
////////////////////////////////////////////////////////////////////////////////
@@ -72,3 +76,902 @@
// A Chromium-specific extension that enables pixel local storage.
chromium_experimental_pixel_local
}
+
+////////////////////////////////////////////////////////////////////////////////
+// WGSL primitive types //
+// Types may be decorated with @precedence(N) to prioritize which type //
+// will be picked when multiple types of a matcher match. //
+// This is used to ensure that abstract numerical types materialize to the //
+// concrete type with the lowest conversion rank. //
+// Types with higher the precedence values will be matched first. //
+////////////////////////////////////////////////////////////////////////////////
+
+// https://gpuweb.github.io/gpuweb/wgsl/#plain-types-section
+type bool
+@precedence(5) @display("abstract-int") type ia
+@precedence(4) @display("abstract-float") type fa
+@precedence(3) type i32
+@precedence(2) type u32
+@precedence(1) type f32
+@precedence(0) type f16
+type vec2<T>
+type vec3<T>
+type vec4<T>
+type mat2x2<T>
+type mat2x3<T>
+type mat2x4<T>
+type mat3x2<T>
+type mat3x3<T>
+type mat3x4<T>
+type mat4x2<T>
+type mat4x3<T>
+type mat4x4<T>
+@display("vec{N}<{T}>") type vec<N: num, T>
+@display("mat{N}x{M}<{T}>") type mat<N: num, M: num, T>
+type ptr<S: address_space, T, A: access>
+type atomic<T>
+type array<T>
+type sampler
+type sampler_comparison
+type texture_1d<T>
+type texture_2d<T>
+type texture_2d_array<T>
+type texture_3d<T>
+type texture_cube<T>
+type texture_cube_array<T>
+type texture_multisampled_2d<T>
+type texture_depth_2d
+type texture_depth_2d_array
+type texture_depth_cube
+type texture_depth_cube_array
+type texture_depth_multisampled_2d
+type texture_storage_1d<F: texel_format, A: access>
+type texture_storage_2d<F: texel_format, A: access>
+type texture_storage_2d_array<F: texel_format, A: access>
+type texture_storage_3d<F: texel_format, A: access>
+type texture_external
+type packedVec3<T>
+
+@display("__modf_result_{T}") type __modf_result<T>
+@display("__modf_result_vec{N}_{T}") type __modf_result_vec<N: num, T>
+@display("__frexp_result_{T}") type __frexp_result<T>
+@display("__frexp_result_vec{N}_{T}") type __frexp_result_vec<N: num, T>
+
+type __atomic_compare_exchange_result<T>
+
+////////////////////////////////////////////////////////////////////////////////
+// Type matchers //
+// //
+// A type matcher that can match one or more types. //
+////////////////////////////////////////////////////////////////////////////////
+
+match scalar: ia | fa | f32 | f16 | i32 | u32 | bool
+match concrete_scalar: f32 | f16 | i32 | u32 | bool
+match scalar_no_f32: ia | fa | i32 | f16 | u32 | bool
+match scalar_no_f16: ia | fa | f32 | i32 | u32 | bool
+match scalar_no_i32: ia | fa | f32 | f16 | u32 | bool
+match scalar_no_u32: ia | fa | f32 | f16 | i32 | bool
+match scalar_no_bool: ia | fa | f32 | f16 | i32 | u32
+match fia_fiu32_f16: fa | ia | f32 | i32 | u32 | f16
+match fia_fi32_f16: fa | ia | f32 | i32 | f16
+match fia_fiu32: fa | ia | f32 | i32 | u32
+match fa_f32: fa | f32
+match fa_f32_f16: fa | f32 | f16
+match ia_iu32: ia | i32 | u32
+match ia_i32: ia | i32
+match fiu32_f16: f32 | i32 | u32 | f16
+match fiu32: f32 | i32 | u32
+match fi32_f16: f32 | i32 | f16
+match fi32: f32 | i32
+match f32_f16: f32 | f16
+match iu32: i32 | u32
+
+////////////////////////////////////////////////////////////////////////////////
+// Enum matchers //
+// //
+// A number matcher that can match one or more enumerator values. //
+// All enumerator values listed in the match declaration need to be from the //
+// same enum. //
+////////////////////////////////////////////////////////////////////////////////
+
+// https://gpuweb.github.io/gpuweb/wgsl/#texel-formats
+match f32_texel_format
+ : texel_format.bgra8unorm
+ | texel_format.rgba8unorm
+ | texel_format.rgba8snorm
+ | texel_format.rgba16float
+ | texel_format.r32float
+ | texel_format.rg32float
+ | texel_format.rgba32float
+match i32_texel_format
+ : texel_format.rgba8sint
+ | texel_format.rgba16sint
+ | texel_format.r32sint
+ | texel_format.rg32sint
+ | texel_format.rgba32sint
+match u32_texel_format
+ : texel_format.rgba8uint
+ | texel_format.rgba16uint
+ | texel_format.r32uint
+ | texel_format.rg32uint
+ | texel_format.rgba32uint
+
+match write: access.write
+match read_write: access.read_write
+match readable
+ : access.read
+ | access.read_write
+match writable
+ : access.write
+ | access.read_write
+
+match function_private_workgroup
+ : address_space.function
+ | address_space.private
+ | address_space.workgroup
+match workgroup_or_storage
+ : address_space.workgroup
+ | address_space.storage
+match storage
+ : address_space.storage
+match workgroup
+ : address_space.workgroup
+
+////////////////////////////////////////////////////////////////////////////////
+// Builtin Functions //
+// //
+// The builtin function declarations below declare all the built-in //
+// functions supported by the WGSL language. This builtin definition //
+// language supports simple static-type function declarations, as well as //
+// single overload declarations that can match a number of different //
+// argument types via the use of template types and template numbers //
+// //
+// * Basic example: //
+// //
+// fn isInf(f32) -> bool //
+// //
+// Declares an overload of the function 'isInf' that accepts a single //
+// parameter of type 'f32' and returns a 'bool'. //
+// //
+// A template type is a type determined by the arguments to the builtin. //
+// //
+// * Template type example without constraint: //
+// //
+// fn arrayLength<T>(array<T>) -> u32 //
+// //
+// Declares an overload of the function 'arrayLength' that accepts a //
+// single argument of an array type with no constraints on the array //
+// element type. This overload will always return a value of the same type //
+// as its single argument. //
+// //
+// * Template type example with constraint: //
+// //
+// fn abs<T: fiu32>(T) -> T //
+// //
+// Declares an overload of the function 'abs' that accepts a single //
+// argument of type 'f32', 'i32' or 'u32', which returns a value of the //
+// same argument type. //
+// //
+// Similarly a template number is a number or enumerator that is determined //
+// by the arguments to the builtin. //
+// //
+// * Template number example: //
+// //
+// fn dpdx<N: num>(vec<N, f32>) -> vec<N, f32> //
+// //
+// Declares an overload of the function 'dpdx' that accepts a single //
+// argument of a variable-sized vector of 'f32', which returns a value of //
+// the same argument type. //
+// //
+// //
+// Matching algorithm for a single overload: //
+// ----------------------------------------- //
+// //
+// The goal of matching is to compare a function call's arguments and any //
+// explicitly provided template types in the program source against an //
+// overload declaration in this file, and determine if the call satisfies //
+// the form and type constraints of the overload. If the call matches an //
+// overload, then the overload is added to the list of 'overload candidates' //
+// used for overload resolution (described below). //
+// //
+// Prior to matching an overload, all template types are undefined. //
+// //
+// Template types are first defined with the type of the leftmost argument //
+// that matches against that template type name. Subsequent arguments that //
+// attempt to match against the template type name will either reject the //
+// overload or refine the template, in one of 3 ways: //
+// (a) Fail to match, causing the overload to be immediately rejected. //
+// (b) Match the existing template type, either exactly or via implicit //
+// conversion, and overload resolution continues. //
+// (c) Match via implicit conversion of the currently defined template type //
+// to the argument type. In this situation, the template type is refined //
+// with the more constrained argument type, and overload resolution //
+// continues. //
+// //
+// To better understand, let's consider the following hypothetical overload //
+// declaration: //
+// //
+// fn foo<T: scalar>(T, T); //
+// //
+// T - is the template type name //
+// scalar - is a matcher for the types 'f32', 'i32', 'u32' or 'bool' //
+// (declared above) //
+// <T: scalar> - declares the template type T, with the constraint that T //
+// must match one of 'f32', 'i32', 'u32' or 'bool'. //
+// //
+// The process for resolving this overload is as follows: //
+// //
+// (1) The overload resolver begins by attempting to match the argument //
+// types from left to right. //
+// The first parameter type is compared against the argument type T. //
+// As the template type T has not been defined yet, T is defined as the //
+// type of the first argument. //
+// There's no verification that the T type is a scalar at this stage. //
+// (2) The second parameter is then compared against the second argument. //
+// As the template type T is now defined the argument type is compared //
+// against the value of the defined type of T. Depending on the //
+// comparison of the argument type to the template type, either the //
+// actions of (a), (b) or (c) from above will occur. //
+// (3) If all the parameters matched, constraints on the template types //
+// need to be checked next. If the defined type does not match the //
+// 'match' constraint, then the overload is no longer considered. //
+// //
+// This algorithm for matching a single overload is less general than the //
+// algorithm described in the WGSL spec. But it makes the same decisions //
+// because the overloads defined by WGSL are monotonic in the sense that once //
+// a template parameter has been refined, there is never a need to backtrack //
+// and un-refine it to match a later argument. //
+// //
+// The algorithm for matching template numbers is similar to matching //
+// template types, except numbers need to exactly match across all uses - //
+// there is no implicit conversion. Template numbers may match integer //
+// numbers or enumerators. //
+// //
+// //
+// Overload resolution for candidate overloads //
+// ------------------------------------------- //
+// //
+// If multiple candidate overloads match a given set of arguments, then a //
+// final overload resolution pass needs to be performed. The arguments and //
+// overload parameter types for each candidate overload are compared, //
+// following the algorithm described at: //
+// https://www.w3.org/TR/WGSL/#overload-resolution-section //
+// //
+// If the candidate list contains a single entry, then that single candidate //
+// is picked, and no overload resolution needs to be performed. //
+// //
+// If the candidate list is empty, then the call fails to resolve and an //
+// error diagnostic is raised. //
+// //
+// //
+// More examples //
+// ------------- //
+// //
+// fn F() //
+// - Function called F. //
+// No template types or numbers, no parameters, no return value //
+// //
+// fn F() -> RETURN_TYPE //
+// - Function with RETURN_TYPE as the return type value //
+// //
+// fn F(f32, i32) //
+// - Two fixed-type, anonymous parameters //
+// //
+// fn F(USAGE : f32) //
+// - Single parameter with name USAGE. //
+// Note: Parameter names are used by Tint to infer parameter order for //
+// some builtin functions //
+// //
+// fn F<T>(T) //
+// - Single parameter of unconstrained template type T (any type) //
+// //
+// fn F<T: scalar>(T) //
+// - Single parameter of constrained template type T (must be a scalar) //
+// //
+// fn F<T: fiu32>(T) -> T //
+// - Single parameter of constrained template type T (must be a one of //
+// fiu32) Return type matches parameter type //
+// //
+// fn F<T, N: num>(vec<N, T>) //
+// - Single parameter of vector type with template number size N and //
+// element template type T //
+// //
+// fn F<A: access>(texture_storage_1d<f32_texel_format, A>) //
+// - Single parameter of texture_storage_1d type with template number //
+// access-control C, and of a texel format that is listed in //
+// f32_texel_format //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+// https://gpuweb.github.io/gpuweb/wgsl/#builtin-functions
+@must_use @const fn abs<T: fia_fiu32_f16>(T) -> T
+@must_use @const fn abs<N: num, T: fia_fiu32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn acos<T: fa_f32_f16>(@test_value(0.96891242171) T) -> T
+@must_use @const fn acos<N: num, T: fa_f32_f16>(@test_value(0.96891242171) vec<N, T>) -> vec<N, T>
+@must_use @const fn acosh<T: fa_f32_f16>(@test_value(1.5430806348) T) -> T
+@must_use @const fn acosh<N: num, T: fa_f32_f16>(@test_value(1.5430806348) vec<N, T>) -> vec<N, T>
+@must_use @const fn all(bool) -> bool
+@must_use @const fn all<N: num>(vec<N, bool>) -> bool
+@must_use @const fn any(bool) -> bool
+@must_use @const fn any<N: num>(vec<N, bool>) -> bool
+@must_use fn arrayLength<T, A: access>(ptr<storage, array<T>, A>) -> u32
+@must_use @const fn asin<T: fa_f32_f16>(@test_value(0.479425538604) T) -> T
+@must_use @const fn asin<N: num, T: fa_f32_f16>(@test_value(0.479425538604) vec<N, T>) -> vec<N, T>
+@must_use @const fn asinh<T: fa_f32_f16>(T) -> T
+@must_use @const fn asinh<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn atan<T: fa_f32_f16>(T) -> T
+@must_use @const fn atan<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn atan2<T: fa_f32_f16>(T, T) -> T
+@must_use @const fn atan2<T: fa_f32_f16, N: num>(vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn atanh<T: fa_f32_f16>(@test_value(0.5) T) -> T
+@must_use @const fn atanh<N: num, T: fa_f32_f16>(@test_value(0.5) vec<N, T>) -> vec<N, T>
+@must_use @const fn ceil<T: fa_f32_f16>(@test_value(1.5) T) -> T
+@must_use @const fn ceil<N: num, T: fa_f32_f16>(@test_value(1.5) vec<N, T>) -> vec<N, T>
+@must_use @const fn clamp<T: fia_fiu32_f16>(T, T, T) -> T
+@must_use @const fn clamp<T: fia_fiu32_f16, N: num>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn cos<T: fa_f32_f16>(@test_value(0) T) -> T
+@must_use @const fn cos<N: num, T: fa_f32_f16>(@test_value(0) vec<N, T>) -> vec<N, T>
+@must_use @const fn cosh<T: fa_f32_f16>(@test_value(0) T) -> T
+@must_use @const fn cosh<N: num, T: fa_f32_f16>(@test_value(0) vec<N, T>) -> vec<N, T>
+@must_use @const fn countLeadingZeros<T: iu32>(T) -> T
+@must_use @const fn countLeadingZeros<N: num, T: iu32>(vec<N, T>) -> vec<N, T>
+@must_use @const fn countOneBits<T: iu32>(T) -> T
+@must_use @const fn countOneBits<N: num, T: iu32>(vec<N, T>) -> vec<N, T>
+@must_use @const fn countTrailingZeros<T: iu32>(T) -> T
+@must_use @const fn countTrailingZeros<N: num, T: iu32>(vec<N, T>) -> vec<N, T>
+@must_use @const fn cross<T: fa_f32_f16>(vec3<T>, vec3<T>) -> vec3<T>
+@must_use @const fn degrees<T: fa_f32_f16>(T) -> T
+@must_use @const fn degrees<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn determinant<N: num, T: fa_f32_f16>(mat<N, N, T>) -> T
+@must_use @const fn distance<T: fa_f32_f16>(T, T) -> T
+@must_use @const fn distance<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>) -> T
+@must_use @const fn dot<N: num, T: fia_fiu32_f16>(vec<N, T>, vec<N, T>) -> T
+@must_use fn dot4I8Packed(u32, u32) -> i32
+@must_use fn dot4U8Packed(u32, u32) -> u32
+@must_use @stage("fragment") fn dpdx(f32) -> f32
+@must_use @stage("fragment") fn dpdx<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @stage("fragment") fn dpdxCoarse(f32) -> f32
+@must_use @stage("fragment") fn dpdxCoarse<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @stage("fragment") fn dpdxFine(f32) -> f32
+@must_use @stage("fragment") fn dpdxFine<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @stage("fragment") fn dpdy(f32) -> f32
+@must_use @stage("fragment") fn dpdy<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @stage("fragment") fn dpdyCoarse(f32) -> f32
+@must_use @stage("fragment") fn dpdyCoarse<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @stage("fragment") fn dpdyFine(f32) -> f32
+@must_use @stage("fragment") fn dpdyFine<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @const fn exp<T: fa_f32_f16>(T) -> T
+@must_use @const fn exp<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn exp2<T: fa_f32_f16>(T) -> T
+@must_use @const fn exp2<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn extractBits<T: iu32>(T, u32, u32) -> T
+@must_use @const fn extractBits<N: num, T: iu32>(vec<N, T>, u32, u32) -> vec<N, T>
+@must_use @const fn faceForward<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn firstLeadingBit<T: iu32>(T) -> T
+@must_use @const fn firstLeadingBit<N: num, T: iu32>(vec<N, T>) -> vec<N, T>
+@must_use @const fn firstTrailingBit<T: iu32>(T) -> T
+@must_use @const fn firstTrailingBit<N: num, T: iu32>(vec<N, T>) -> vec<N, T>
+@must_use @const fn floor<T: fa_f32_f16>(@test_value(1.5) T) -> T
+@must_use @const fn floor<N: num, T: fa_f32_f16>(@test_value(1.5) vec<N, T>) -> vec<N, T>
+@must_use @const fn fma<T: fa_f32_f16>(T, T, T) -> T
+@must_use @const fn fma<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn fract<T: fa_f32_f16>(@test_value(1.25) T) -> T
+@must_use @const fn fract<N: num, T: fa_f32_f16>(@test_value(1.25) vec<N, T>) -> vec<N, T>
+@must_use @const fn frexp<T: fa_f32_f16>(T) -> __frexp_result<T>
+@must_use @const fn frexp<N: num, T: fa_f32_f16>(vec<N, T>) -> __frexp_result_vec<N, T>
+@must_use @stage("fragment") fn fwidth(f32) -> f32
+@must_use @stage("fragment") fn fwidth<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @stage("fragment") fn fwidthCoarse(f32) -> f32
+@must_use @stage("fragment") fn fwidthCoarse<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @stage("fragment") fn fwidthFine(f32) -> f32
+@must_use @stage("fragment") fn fwidthFine<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @const fn insertBits<T: iu32>(T, T, u32, u32) -> T
+@must_use @const fn insertBits<N: num, T: iu32>(vec<N, T>, vec<N, T>, u32, u32) -> vec<N, T>
+@must_use @const fn inverseSqrt<T: fa_f32_f16>(T) -> T
+@must_use @const fn inverseSqrt<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn ldexp<T: fa_f32_f16, U: ia_i32>(T, U) -> T
+@must_use @const fn ldexp<N: num, T: fa_f32_f16, U: ia_i32>(vec<N, T>, vec<N, U>) -> vec<N, T>
+@must_use @const fn length<T: fa_f32_f16>(@test_value(0.0) T) -> T
+@must_use @const fn length<N: num, T: fa_f32_f16>(@test_value(0.0) vec<N, T>) -> T
+@must_use @const fn log<T: fa_f32_f16>(T) -> T
+@must_use @const fn log<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn log2<T: fa_f32_f16>(T) -> T
+@must_use @const fn log2<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn max<T: fia_fiu32_f16>(T, T) -> T
+@must_use @const fn max<N: num, T: fia_fiu32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn min<T: fia_fiu32_f16>(T, T) -> T
+@must_use @const fn min<N: num, T: fia_fiu32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn mix<T: fa_f32_f16>(T, T, T) -> T
+@must_use @const fn mix<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn mix<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>, T) -> vec<N, T>
+@must_use @const fn modf<T: fa_f32_f16>(@test_value(-1.5) T) -> __modf_result<T>
+@must_use @const fn modf<N: num, T: fa_f32_f16>(@test_value(-1.5) vec<N, T>) -> __modf_result_vec<N, T>
+@must_use @const fn normalize<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn pack2x16float(vec2<f32>) -> u32
+@must_use @const fn pack2x16snorm(vec2<f32>) -> u32
+@must_use @const fn pack2x16unorm(vec2<f32>) -> u32
+@must_use @const fn pack4x8snorm(vec4<f32>) -> u32
+@must_use @const fn pack4x8unorm(vec4<f32>) -> u32
+@must_use @const fn pow<T: fa_f32_f16>(T, T) -> T
+@must_use @const fn pow<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn quantizeToF16(f32) -> f32
+@must_use @const fn quantizeToF16<N: num>(vec<N, f32>) -> vec<N, f32>
+@must_use @const fn radians<T: fa_f32_f16>(T) -> T
+@must_use @const fn radians<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn reflect<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const fn refract<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>, T) -> vec<N, T>
+@must_use @const fn reverseBits<T: iu32>(T) -> T
+@must_use @const fn reverseBits<N: num, T: iu32>(vec<N, T>) -> vec<N, T>
+@must_use @const fn round<T: fa_f32_f16>(@test_value(3.5) T) -> T
+@must_use @const fn round<N: num, T: fa_f32_f16>(@test_value(3.5) vec<N, T>) -> vec<N, T>
+@must_use @const fn saturate<T: fa_f32_f16>(@test_value(2) T) -> T
+@must_use @const fn saturate<T: fa_f32_f16, N: num>(@test_value(2) vec<N, T>) -> vec<N, T>
+@must_use @const("select_bool") fn select<T: scalar>(T, T, bool) -> T
+@must_use @const("select_bool") fn select<T: scalar, N: num>(vec<N, T>, vec<N, T>, bool) -> vec<N, T>
+@must_use @const("select_boolvec") fn select<N: num, T: scalar>(vec<N, T>, vec<N, T>, vec<N, bool>) -> vec<N, T>
+@must_use @const fn sign<T: fia_fi32_f16>(T) -> T
+@must_use @const fn sign<N: num, T: fia_fi32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn sin<T: fa_f32_f16>(@test_value(1.57079632679) T) -> T
+@must_use @const fn sin<N: num, T: fa_f32_f16>(@test_value(1.57079632679) vec<N, T>) -> vec<N, T>
+@must_use @const fn sinh<T: fa_f32_f16>(T) -> T
+@must_use @const fn sinh<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn smoothstep<T: fa_f32_f16>(@test_value(2) T, @test_value(4) T, @test_value(3) T) -> T
+@must_use @const fn smoothstep<N: num, T: fa_f32_f16>(@test_value(2) vec<N, T>, @test_value(4) vec<N, T>, @test_value(3) vec<N, T>) -> vec<N, T>
+@must_use @const fn sqrt<T: fa_f32_f16>(T) -> T
+@must_use @const fn sqrt<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn step<T: fa_f32_f16>(T, T) -> T
+@must_use @const fn step<N: num, T: fa_f32_f16>(vec<N, T>, vec<N, T>) -> vec<N, T>
+@stage("compute") fn storageBarrier()
+@must_use @const fn tan<T: fa_f32_f16>(T) -> T
+@must_use @const fn tan<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn tanh<T: fa_f32_f16>(T) -> T
+@must_use @const fn tanh<N: num, T: fa_f32_f16>(vec<N, T>) -> vec<N, T>
+@must_use @const fn transpose<M: num, N: num, T: fa_f32_f16>(mat<M, N, T>) -> mat<N, M, T>
+@must_use @const fn trunc<T: fa_f32_f16>(@test_value(1.5) T) -> T
+@must_use @const fn trunc<N: num, T: fa_f32_f16>(@test_value(1.5) vec<N, T>) -> vec<N, T>
+@must_use @const fn unpack2x16float(u32) -> vec2<f32>
+@must_use @const fn unpack2x16snorm(u32) -> vec2<f32>
+@must_use @const fn unpack2x16unorm(u32) -> vec2<f32>
+@must_use @const fn unpack4x8snorm(u32) -> vec4<f32>
+@must_use @const fn unpack4x8unorm(u32) -> vec4<f32>
+@stage("compute") fn workgroupBarrier()
+@must_use @stage("compute") fn workgroupUniformLoad<T>(ptr<workgroup, T, read_write>) -> T
+
+@stage("compute") fn textureBarrier()
+@must_use fn textureDimensions<T: fiu32>(texture: texture_1d<T>) -> u32
+@must_use fn textureDimensions<T: fiu32, L: iu32>(texture: texture_1d<T>, level: L) -> u32
+@must_use fn textureDimensions<T: fiu32>(texture: texture_2d<T>) -> vec2<u32>
+@must_use fn textureDimensions<T: fiu32, L: iu32>(texture: texture_2d<T>, level: L) -> vec2<u32>
+@must_use fn textureDimensions<T: fiu32>(texture: texture_2d_array<T>) -> vec2<u32>
+@must_use fn textureDimensions<T: fiu32, L: iu32>(texture: texture_2d_array<T>, level: L) -> vec2<u32>
+@must_use fn textureDimensions<T: fiu32>(texture: texture_3d<T>) -> vec3<u32>
+@must_use fn textureDimensions<T: fiu32, L: iu32>(texture: texture_3d<T>, level: L) -> vec3<u32>
+@must_use fn textureDimensions<T: fiu32>(texture: texture_cube<T>) -> vec2<u32>
+@must_use fn textureDimensions<T: fiu32, L: iu32>(texture: texture_cube<T>, level: L) -> vec2<u32>
+@must_use fn textureDimensions<T: fiu32>(texture: texture_cube_array<T>) -> vec2<u32>
+@must_use fn textureDimensions<T: fiu32, L: iu32>(texture: texture_cube_array<T>, level: L) -> vec2<u32>
+@must_use fn textureDimensions<T: fiu32>(texture: texture_multisampled_2d<T>) -> vec2<u32>
+@must_use fn textureDimensions(texture: texture_depth_2d) -> vec2<u32>
+@must_use fn textureDimensions<L: iu32>(texture: texture_depth_2d, level: L) -> vec2<u32>
+@must_use fn textureDimensions(texture: texture_depth_2d_array) -> vec2<u32>
+@must_use fn textureDimensions<L: iu32>(texture: texture_depth_2d_array, level: L) -> vec2<u32>
+@must_use fn textureDimensions(texture: texture_depth_cube) -> vec2<u32>
+@must_use fn textureDimensions<L: iu32>(texture: texture_depth_cube, level: L) -> vec2<u32>
+@must_use fn textureDimensions(texture: texture_depth_cube_array) -> vec2<u32>
+@must_use fn textureDimensions<L: iu32>(texture: texture_depth_cube_array, level: L) -> vec2<u32>
+@must_use fn textureDimensions(texture: texture_depth_multisampled_2d) -> vec2<u32>
+@must_use fn textureDimensions<F: texel_format, A: access>(texture: texture_storage_1d<F, A>) -> u32
+@must_use fn textureDimensions<F: texel_format, A: access>(texture: texture_storage_2d<F, A>) -> vec2<u32>
+@must_use fn textureDimensions<F: texel_format, A: access>(texture: texture_storage_2d_array<F, A>) -> vec2<u32>
+@must_use fn textureDimensions<F: texel_format, A: access>(texture: texture_storage_3d<F, A>) -> vec3<u32>
+@must_use fn textureDimensions(texture: texture_external) -> vec2<u32>
+@must_use fn textureGather<T: fiu32, C: iu32>(@const component: C, texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>) -> vec4<T>
+@must_use fn textureGather<T: fiu32, C: iu32>(@const component: C, texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> vec4<T>
+@must_use fn textureGather<T: fiu32, C: iu32, A: iu32>(@const component: C, texture: texture_2d_array<T>, sampler: sampler, coords: vec2<f32>, array_index: A) -> vec4<T>
+@must_use fn textureGather<T: fiu32, C: iu32, A: iu32>(@const component: C, texture: texture_2d_array<T>, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> vec4<T>
+@must_use fn textureGather<T: fiu32, C: iu32>(@const component: C, texture: texture_cube<T>, sampler: sampler, coords: vec3<f32>) -> vec4<T>
+@must_use fn textureGather<T: fiu32, C: iu32, A: iu32>(@const component: C, texture: texture_cube_array<T>, sampler: sampler, coords: vec3<f32>, array_index: A) -> vec4<T>
+@must_use fn textureGather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>) -> vec4<f32>
+@must_use fn textureGather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32>
+@must_use fn textureGather<A: iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A) -> vec4<f32>
+@must_use fn textureGather<A: iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> vec4<f32>
+@must_use fn textureGather(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> vec4<f32>
+@must_use fn textureGather<A: iu32>(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A) -> vec4<f32>
+@must_use fn textureGatherCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> vec4<f32>
+@must_use fn textureGatherCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, @const offset: vec2<i32>) -> vec4<f32>
+@must_use fn textureGatherCompare<A: iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32) -> vec4<f32>
+@must_use fn textureGatherCompare<A: iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32, @const offset: vec2<i32>) -> vec4<f32>
+@must_use fn textureGatherCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> vec4<f32>
+@must_use fn textureGatherCompare<A: iu32>(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: A, depth_ref: f32) -> vec4<f32>
+@must_use fn textureNumLayers<T: fiu32>(texture: texture_2d_array<T>) -> u32
+@must_use fn textureNumLayers<T: fiu32>(texture: texture_cube_array<T>) -> u32
+@must_use fn textureNumLayers(texture: texture_depth_2d_array) -> u32
+@must_use fn textureNumLayers(texture: texture_depth_cube_array) -> u32
+@must_use fn textureNumLayers<F: texel_format, A: access>(texture: texture_storage_2d_array<F, A>) -> u32
+@must_use fn textureNumLevels<T: fiu32>(texture: texture_1d<T>) -> u32
+@must_use fn textureNumLevels<T: fiu32>(texture: texture_2d<T>) -> u32
+@must_use fn textureNumLevels<T: fiu32>(texture: texture_2d_array<T>) -> u32
+@must_use fn textureNumLevels<T: fiu32>(texture: texture_3d<T>) -> u32
+@must_use fn textureNumLevels<T: fiu32>(texture: texture_cube<T>) -> u32
+@must_use fn textureNumLevels<T: fiu32>(texture: texture_cube_array<T>) -> u32
+@must_use fn textureNumLevels(texture: texture_depth_2d) -> u32
+@must_use fn textureNumLevels(texture: texture_depth_2d_array) -> u32
+@must_use fn textureNumLevels(texture: texture_depth_cube) -> u32
+@must_use fn textureNumLevels(texture: texture_depth_cube_array) -> u32
+@must_use fn textureNumSamples<T: fiu32>(texture: texture_multisampled_2d<T>) -> u32
+@must_use fn textureNumSamples(texture: texture_depth_multisampled_2d) -> u32
+@must_use @stage("fragment") fn textureSample(texture: texture_1d<f32>, sampler: sampler, coords: f32) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample<A: iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample<A: iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, @const offset: vec3<i32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample<A: iu32>(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A) -> vec4<f32>
+@must_use @stage("fragment") fn textureSample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>) -> f32
+@must_use @stage("fragment") fn textureSample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> f32
+@must_use @stage("fragment") fn textureSample<A: iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A) -> f32
+@must_use @stage("fragment") fn textureSample<A: iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> f32
+@must_use @stage("fragment") fn textureSample(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> f32
+@must_use @stage("fragment") fn textureSample<A: iu32>(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A) -> f32
+@must_use @stage("fragment") fn textureSampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32) -> vec4<f32>
+@must_use @stage("fragment") fn textureSampleBias(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: f32, @const offset: vec2<i32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSampleBias<A: iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, bias: f32) -> vec4<f32>
+@must_use @stage("fragment") fn textureSampleBias<A: iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, bias: f32, @const offset: vec2<i32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSampleBias(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, bias: f32) -> vec4<f32>
+@must_use @stage("fragment") fn textureSampleBias(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, bias: f32, @const offset: vec3<i32>) -> vec4<f32>
+@must_use @stage("fragment") fn textureSampleBias(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, bias: f32) -> vec4<f32>
+@must_use @stage("fragment") fn textureSampleBias<A: iu32>(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, bias: f32) -> vec4<f32>
+@must_use @stage("fragment") fn textureSampleCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32
+@must_use @stage("fragment") fn textureSampleCompare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, @const offset: vec2<i32>) -> f32
+@must_use @stage("fragment") fn textureSampleCompare<A: iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32) -> f32
+@must_use @stage("fragment") fn textureSampleCompare<A: iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32, @const offset: vec2<i32>) -> f32
+@must_use @stage("fragment") fn textureSampleCompare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32
+@must_use @stage("fragment") fn textureSampleCompare<A: iu32>(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: A, depth_ref: f32) -> f32
+@must_use fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32
+@must_use fn textureSampleCompareLevel(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, @const offset: vec2<i32>) -> f32
+@must_use fn textureSampleCompareLevel<A: iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32) -> f32
+@must_use fn textureSampleCompareLevel<A: iu32>(texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32, @const offset: vec2<i32>) -> f32
+@must_use fn textureSampleCompareLevel(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32
+@must_use fn textureSampleCompareLevel<A: iu32>(texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: A, depth_ref: f32) -> f32
+@must_use fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32>
+@must_use fn textureSampleGrad(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, ddx: vec2<f32>, ddy: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32>
+@must_use fn textureSampleGrad<A: iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, ddx: vec2<f32>, ddy: vec2<f32>) -> vec4<f32>
+@must_use fn textureSampleGrad<A: iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, ddx: vec2<f32>, ddy: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32>
+@must_use fn textureSampleGrad(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32>
+@must_use fn textureSampleGrad(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>, @const offset: vec3<i32>) -> vec4<f32>
+@must_use fn textureSampleGrad(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32>
+@must_use fn textureSampleGrad<A: iu32>(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, ddx: vec3<f32>, ddy: vec3<f32>) -> vec4<f32>
+@must_use fn textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32) -> vec4<f32>
+@must_use fn textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32, @const offset: vec2<i32>) -> vec4<f32>
+@must_use fn textureSampleLevel<A: iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: f32) -> vec4<f32>
+@must_use fn textureSampleLevel<A: iu32>(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: f32, @const offset: vec2<i32>) -> vec4<f32>
+@must_use fn textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32>
+@must_use fn textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32, @const offset: vec3<i32>) -> vec4<f32>
+@must_use fn textureSampleLevel(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32>
+@must_use fn textureSampleLevel<A: iu32>(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, level: f32) -> vec4<f32>
+@must_use fn textureSampleLevel<L: iu32>(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: L) -> f32
+@must_use fn textureSampleLevel<L: iu32>(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: L, @const offset: vec2<i32>) -> f32
+@must_use fn textureSampleLevel<A: iu32, L: iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: L) -> f32
+@must_use fn textureSampleLevel<A: iu32, L: iu32>(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: L, @const offset: vec2<i32>) -> f32
+@must_use fn textureSampleLevel<L: iu32>(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>, level: L) -> f32
+@must_use fn textureSampleLevel<A: iu32, L: iu32>(texture: texture_depth_cube_array,sampler: sampler, coords: vec3<f32>, array_index: A, level: L) -> f32
+@must_use fn textureSampleBaseClampToEdge(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32>
+@must_use fn textureSampleBaseClampToEdge(texture: texture_external, sampler: sampler, coords: vec2<f32>) -> vec4<f32>
+fn textureStore<C: iu32>(texture: texture_storage_1d<f32_texel_format, writable>, coords: C, value: vec4<f32>)
+fn textureStore<C: iu32>(texture: texture_storage_2d<f32_texel_format, writable>, coords: vec2<C>, value: vec4<f32>)
+fn textureStore<C: iu32, A: iu32>(texture: texture_storage_2d_array<f32_texel_format, writable>, coords: vec2<C>, array_index: A, value: vec4<f32>)
+fn textureStore<C: iu32>(texture: texture_storage_3d<f32_texel_format, writable>, coords: vec3<C>, value: vec4<f32>)
+fn textureStore<C: iu32>(texture: texture_storage_1d<i32_texel_format, writable>, coords: C, value: vec4<i32>)
+fn textureStore<C: iu32>(texture: texture_storage_2d<i32_texel_format, writable>, coords: vec2<C>, value: vec4<i32>)
+fn textureStore<C: iu32, A: iu32>(texture: texture_storage_2d_array<i32_texel_format, writable>, coords: vec2<C>, array_index: A, value: vec4<i32>)
+fn textureStore<C: iu32>(texture: texture_storage_3d<i32_texel_format, writable>, coords: vec3<C>, value: vec4<i32>)
+fn textureStore<C: iu32>(texture: texture_storage_1d<u32_texel_format, writable>, coords: C, value: vec4<u32>)
+fn textureStore<C: iu32>(texture: texture_storage_2d<u32_texel_format, writable>, coords: vec2<C>, value: vec4<u32>)
+fn textureStore<C: iu32, A: iu32>(texture: texture_storage_2d_array<u32_texel_format, writable>, coords: vec2<C>, array_index: A, value: vec4<u32>)
+fn textureStore<C: iu32>(texture: texture_storage_3d<u32_texel_format, writable>, coords: vec3<C>, value: vec4<u32>)
+@must_use fn textureLoad<T: fiu32, C: iu32, L: iu32>(texture: texture_1d<T>, coords: C, level: L) -> vec4<T>
+@must_use fn textureLoad<T: fiu32, C: iu32, L: iu32>(texture: texture_2d<T>, coords: vec2<C>, level: L) -> vec4<T>
+@must_use fn textureLoad<T: fiu32, C: iu32, A: iu32, L: iu32>(texture: texture_2d_array<T>, coords: vec2<C>, array_index: A, level: L) -> vec4<T>
+@must_use fn textureLoad<T: fiu32, C: iu32, L: iu32>(texture: texture_3d<T>, coords: vec3<C>, level: L) -> vec4<T>
+@must_use fn textureLoad<T: fiu32, C: iu32, S: iu32>(texture: texture_multisampled_2d<T>, coords: vec2<C>, sample_index: S) -> vec4<T>
+@must_use fn textureLoad<C: iu32, L: iu32>(texture: texture_depth_2d, coords: vec2<C>, level: L) -> f32
+@must_use fn textureLoad<C: iu32, A: iu32, L: iu32>(texture: texture_depth_2d_array, coords: vec2<C>, array_index: A, level: L) -> f32
+@must_use fn textureLoad<C: iu32, S: iu32>(texture: texture_depth_multisampled_2d, coords: vec2<C>, sample_index: S) -> f32
+@must_use fn textureLoad<C: iu32>(texture: texture_external, coords: vec2<C>) -> vec4<f32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_1d<f32_texel_format, readable>, coords: C) -> vec4<f32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_1d<i32_texel_format, readable>, coords: C) -> vec4<i32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_1d<u32_texel_format, readable>, coords: C) -> vec4<u32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_2d<f32_texel_format, readable>, coords: vec2<C>) -> vec4<f32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_2d<i32_texel_format, readable>, coords: vec2<C>) -> vec4<i32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_2d<u32_texel_format, readable>, coords: vec2<C>) -> vec4<u32>
+@must_use fn textureLoad<C: iu32, A: iu32>(texture: texture_storage_2d_array<f32_texel_format, readable>, coords: vec2<C>, array_index: A) -> vec4<f32>
+@must_use fn textureLoad<C: iu32, A: iu32>(texture: texture_storage_2d_array<i32_texel_format, readable>, coords: vec2<C>, array_index: A) -> vec4<i32>
+@must_use fn textureLoad<C: iu32, A: iu32>(texture: texture_storage_2d_array<u32_texel_format, readable>, coords: vec2<C>, array_index: A) -> vec4<u32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_3d<f32_texel_format, readable>, coords: vec3<C>) -> vec4<f32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_3d<i32_texel_format, readable>, coords: vec3<C>) -> vec4<i32>
+@must_use fn textureLoad<C: iu32>(texture: texture_storage_3d<u32_texel_format, readable>, coords: vec3<C>) -> vec4<u32>
+
+@stage("fragment", "compute") fn atomicLoad<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>) -> T
+@stage("fragment", "compute") fn atomicStore<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T)
+@stage("fragment", "compute") fn atomicAdd<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T
+@stage("fragment", "compute") fn atomicSub<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T
+@stage("fragment", "compute") fn atomicMax<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T
+@stage("fragment", "compute") fn atomicMin<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T
+@stage("fragment", "compute") fn atomicAnd<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T
+@stage("fragment", "compute") fn atomicOr<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T
+@stage("fragment", "compute") fn atomicXor<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T
+@stage("fragment", "compute") fn atomicExchange<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T) -> T
+@stage("fragment", "compute") fn atomicCompareExchangeWeak<T: iu32, S: workgroup_or_storage>(ptr<S, atomic<T>, read_write>, T, T) -> __atomic_compare_exchange_result<T>
+
+@must_use @stage("compute") fn subgroupBallot() -> vec4<u32>
+@must_use @stage("compute") fn subgroupBroadcast<T: fiu32>(value: T, @const sourceLaneIndex: u32) -> T
+
+////////////////////////////////////////////////////////////////////////////////
+// Value constructors //
+////////////////////////////////////////////////////////////////////////////////
+
+// Zero value constructors
+@must_use @const("Zero") ctor i32() -> i32
+@must_use @const("Zero") ctor u32() -> u32
+@must_use @const("Zero") ctor f32() -> f32
+@must_use @const("Zero") ctor f16() -> f16
+@must_use @const("Zero") ctor bool() -> bool
+@must_use @const("Zero") ctor vec2() -> vec2<ia>
+@must_use @const("Zero") ctor vec3() -> vec3<ia>
+@must_use @const("Zero") ctor vec4() -> vec4<ia>
+@must_use @const("Zero") ctor vec2<T: concrete_scalar>() -> vec2<T>
+@must_use @const("Zero") ctor vec3<T: concrete_scalar>() -> vec3<T>
+@must_use @const("Zero") ctor vec4<T: concrete_scalar>() -> vec4<T>
+@must_use @const("Zero") ctor mat2x2<T: f32_f16>() -> mat2x2<T>
+@must_use @const("Zero") ctor mat2x3<T: f32_f16>() -> mat2x3<T>
+@must_use @const("Zero") ctor mat2x4<T: f32_f16>() -> mat2x4<T>
+@must_use @const("Zero") ctor mat3x2<T: f32_f16>() -> mat3x2<T>
+@must_use @const("Zero") ctor mat3x3<T: f32_f16>() -> mat3x3<T>
+@must_use @const("Zero") ctor mat3x4<T: f32_f16>() -> mat3x4<T>
+@must_use @const("Zero") ctor mat4x2<T: f32_f16>() -> mat4x2<T>
+@must_use @const("Zero") ctor mat4x3<T: f32_f16>() -> mat4x3<T>
+@must_use @const("Zero") ctor mat4x4<T: f32_f16>() -> mat4x4<T>
+
+// Identity constructors
+@must_use @const("Identity") ctor i32(i32) -> i32
+@must_use @const("Identity") ctor u32(u32) -> u32
+@must_use @const("Identity") ctor f32(f32) -> f32
+@must_use @const("Identity") ctor f16(f16) -> f16
+@must_use @const("Identity") ctor bool(bool) -> bool
+@must_use @const("Identity") ctor vec2<T: scalar>(vec2<T>) -> vec2<T>
+@must_use @const("Identity") ctor vec3<T: scalar>(vec3<T>) -> vec3<T>
+@must_use @const("Identity") ctor vec4<T: scalar>(vec4<T>) -> vec4<T>
+@must_use @const("Identity") ctor mat2x2<T: f32_f16>(mat2x2<T>) -> mat2x2<T>
+@must_use @const("Identity") ctor mat2x3<T: f32_f16>(mat2x3<T>) -> mat2x3<T>
+@must_use @const("Identity") ctor mat2x4<T: f32_f16>(mat2x4<T>) -> mat2x4<T>
+@must_use @const("Identity") ctor mat3x2<T: f32_f16>(mat3x2<T>) -> mat3x2<T>
+@must_use @const("Identity") ctor mat3x3<T: f32_f16>(mat3x3<T>) -> mat3x3<T>
+@must_use @const("Identity") ctor mat3x4<T: f32_f16>(mat3x4<T>) -> mat3x4<T>
+@must_use @const("Identity") ctor mat4x2<T: f32_f16>(mat4x2<T>) -> mat4x2<T>
+@must_use @const("Identity") ctor mat4x3<T: f32_f16>(mat4x3<T>) -> mat4x3<T>
+@must_use @const("Identity") ctor mat4x4<T: f32_f16>(mat4x4<T>) -> mat4x4<T>
+
+// Vector constructors (splat)
+@must_use @const("VecSplat") ctor vec2<T: scalar>(T) -> vec2<T>
+@must_use @const("VecSplat") ctor vec3<T: scalar>(T) -> vec3<T>
+@must_use @const("VecSplat") ctor vec4<T: scalar>(T) -> vec4<T>
+
+// Vector constructors (scalar)
+@must_use @const("VecInitS") ctor vec2<T: scalar>(x: T, y: T) -> vec2<T>
+@must_use @const("VecInitS") ctor vec3<T: scalar>(x: T, y: T, z: T) -> vec3<T>
+@must_use @const("VecInitS") ctor vec4<T: scalar>(x: T, y: T, z: T, w: T) -> vec4<T>
+
+// Vector constructors (mixed)
+@must_use @const("VecInitM") ctor vec3<T: scalar>(xy: vec2<T>, z: T) -> vec3<T>
+@must_use @const("VecInitM") ctor vec3<T: scalar>(x: T, yz: vec2<T>) -> vec3<T>
+@must_use @const("VecInitM") ctor vec4<T: scalar>(xy: vec2<T>, z: T, w: T) -> vec4<T>
+@must_use @const("VecInitM") ctor vec4<T: scalar>(x: T, yz: vec2<T>, w: T) -> vec4<T>
+@must_use @const("VecInitM") ctor vec4<T: scalar>(x: T, y: T, zw: vec2<T>) -> vec4<T>
+@must_use @const("VecInitM") ctor vec4<T: scalar>(xy: vec2<T>, zw: vec2<T>) -> vec4<T>
+@must_use @const("VecInitM") ctor vec4<T: scalar>(xyz: vec3<T>, w: T) -> vec4<T>
+@must_use @const("VecInitM") ctor vec4<T: scalar>(x: T, zyw: vec3<T>) -> vec4<T>
+
+// Matrix constructors (scalar)
+@must_use @const("MatInitS")
+ctor mat2x2<T: fa_f32_f16>(T, T,
+ T, T) -> mat2x2<T>
+@must_use @const("MatInitS")
+ctor mat2x3<T: fa_f32_f16>(T, T, T,
+ T, T, T) -> mat2x3<T>
+@must_use @const("MatInitS")
+ctor mat2x4<T: fa_f32_f16>(T, T, T, T,
+ T, T, T, T) -> mat2x4<T>
+@must_use @const("MatInitS")
+ctor mat3x2<T: fa_f32_f16>(T, T,
+ T, T,
+ T, T) -> mat3x2<T>
+@must_use @const("MatInitS")
+ctor mat3x3<T: fa_f32_f16>(T, T, T,
+ T, T, T,
+ T, T, T) -> mat3x3<T>
+@must_use @const("MatInitS")
+ctor mat3x4<T: fa_f32_f16>(T, T, T, T,
+ T, T, T, T,
+ T, T, T, T) -> mat3x4<T>
+@must_use @const("MatInitS")
+ctor mat4x2<T: fa_f32_f16>(T, T,
+ T, T,
+ T, T,
+ T, T) -> mat4x2<T>
+@must_use @const("MatInitS")
+ctor mat4x3<T: fa_f32_f16>(T, T, T,
+ T, T, T,
+ T, T, T,
+ T, T, T) -> mat4x3<T>
+@must_use @const("MatInitS")
+ctor mat4x4<T: fa_f32_f16>(T, T, T, T,
+ T, T, T, T,
+ T, T, T, T,
+ T, T, T, T) -> mat4x4<T>
+
+// Matrix constructors (column vectors)
+@must_use @const("MatInitV") ctor mat2x2<T: fa_f32_f16>(vec2<T>, vec2<T>) -> mat2x2<T>
+@must_use @const("MatInitV") ctor mat2x3<T: fa_f32_f16>(vec3<T>, vec3<T>) -> mat2x3<T>
+@must_use @const("MatInitV") ctor mat2x4<T: fa_f32_f16>(vec4<T>, vec4<T>) -> mat2x4<T>
+@must_use @const("MatInitV") ctor mat3x2<T: fa_f32_f16>(vec2<T>, vec2<T>, vec2<T>) -> mat3x2<T>
+@must_use @const("MatInitV") ctor mat3x3<T: fa_f32_f16>(vec3<T>, vec3<T>, vec3<T>) -> mat3x3<T>
+@must_use @const("MatInitV") ctor mat3x4<T: fa_f32_f16>(vec4<T>, vec4<T>, vec4<T>) -> mat3x4<T>
+@must_use @const("MatInitV") ctor mat4x2<T: fa_f32_f16>(vec2<T>, vec2<T>, vec2<T>, vec2<T>) -> mat4x2<T>
+@must_use @const("MatInitV") ctor mat4x3<T: fa_f32_f16>(vec3<T>, vec3<T>, vec3<T>, vec3<T>) -> mat4x3<T>
+@must_use @const("MatInitV") ctor mat4x4<T: fa_f32_f16>(vec4<T>, vec4<T>, vec4<T>, vec4<T>) -> mat4x4<T>
+
+////////////////////////////////////////////////////////////////////////////////
+// Value conversions //
+////////////////////////////////////////////////////////////////////////////////
+@must_use @const conv f32<T: scalar_no_f32>(T) -> f32
+@must_use @const conv f16<T: scalar_no_f16>(T) -> f16
+@must_use @const conv i32<T: scalar_no_i32>(T) -> i32
+@must_use @const conv u32<T: scalar_no_u32>(T) -> u32
+@must_use @const conv bool<T: scalar_no_bool>(T) -> bool
+
+@must_use @const conv vec2<T: f32, U: scalar_no_f32>(vec2<U>) -> vec2<f32>
+@must_use @const conv vec2<T: f16, U: scalar_no_f16>(vec2<U>) -> vec2<f16>
+@must_use @const conv vec2<T: i32, U: scalar_no_i32>(vec2<U>) -> vec2<i32>
+@must_use @const conv vec2<T: u32, U: scalar_no_u32>(vec2<U>) -> vec2<u32>
+@must_use @const conv vec2<T: bool, U: scalar_no_bool>(vec2<U>) -> vec2<bool>
+
+@must_use @const conv vec3<T: f32, U: scalar_no_f32>(vec3<U>) -> vec3<f32>
+@must_use @const conv vec3<T: f16, U: scalar_no_f16>(vec3<U>) -> vec3<f16>
+@must_use @const conv vec3<T: i32, U: scalar_no_i32>(vec3<U>) -> vec3<i32>
+@must_use @const conv vec3<T: u32, U: scalar_no_u32>(vec3<U>) -> vec3<u32>
+@must_use @const conv vec3<T: bool, U: scalar_no_bool>(vec3<U>) -> vec3<bool>
+
+@must_use @const conv vec4<T: f32, U: scalar_no_f32>(vec4<U>) -> vec4<f32>
+@must_use @const conv vec4<T: f16, U: scalar_no_f16>(vec4<U>) -> vec4<f16>
+@must_use @const conv vec4<T: i32, U: scalar_no_i32>(vec4<U>) -> vec4<i32>
+@must_use @const conv vec4<T: u32, U: scalar_no_u32>(vec4<U>) -> vec4<u32>
+@must_use @const conv vec4<T: bool, U: scalar_no_bool>(vec4<U>) -> vec4<bool>
+
+@must_use @const conv mat2x2<T: f16>(mat2x2<f32>) -> mat2x2<f16>
+@must_use @const conv mat2x2<T: f32>(mat2x2<f16>) -> mat2x2<f32>
+@must_use @const conv mat2x3<T: f16>(mat2x3<f32>) -> mat2x3<f16>
+@must_use @const conv mat2x3<T: f32>(mat2x3<f16>) -> mat2x3<f32>
+@must_use @const conv mat2x4<T: f16>(mat2x4<f32>) -> mat2x4<f16>
+@must_use @const conv mat2x4<T: f32>(mat2x4<f16>) -> mat2x4<f32>
+@must_use @const conv mat3x2<T: f16>(mat3x2<f32>) -> mat3x2<f16>
+@must_use @const conv mat3x2<T: f32>(mat3x2<f16>) -> mat3x2<f32>
+@must_use @const conv mat3x3<T: f16>(mat3x3<f32>) -> mat3x3<f16>
+@must_use @const conv mat3x3<T: f32>(mat3x3<f16>) -> mat3x3<f32>
+@must_use @const conv mat3x4<T: f16>(mat3x4<f32>) -> mat3x4<f16>
+@must_use @const conv mat3x4<T: f32>(mat3x4<f16>) -> mat3x4<f32>
+@must_use @const conv mat4x2<T: f16>(mat4x2<f32>) -> mat4x2<f16>
+@must_use @const conv mat4x2<T: f32>(mat4x2<f16>) -> mat4x2<f32>
+@must_use @const conv mat4x3<T: f16>(mat4x3<f32>) -> mat4x3<f16>
+@must_use @const conv mat4x3<T: f32>(mat4x3<f16>) -> mat4x3<f32>
+@must_use @const conv mat4x4<T: f16>(mat4x4<f32>) -> mat4x4<f16>
+@must_use @const conv mat4x4<T: f32>(mat4x4<f16>) -> mat4x4<f32>
+
+// Conversion from vec3 to internal __packed_vec3 type.
+@must_use @const conv packedVec3<T: concrete_scalar>(vec3<T>) -> packedVec3<T>
+
+////////////////////////////////////////////////////////////////////////////////
+// Operators //
+// //
+// The operator declarations below declare all the unary and binary operators //
+// supported by the WGSL language (with exception for address-of and //
+// dereference unary operators). //
+// //
+// The syntax is almost identical to builtin functions, except we use 'op' //
+// instead of 'fn'. The resolving rules are identical to builtins, which is //
+// described in detail above. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////////////
+// Unary Operators //
+////////////////////////////////////////////////////////////////////////////////
+@must_use @const op ! (bool) -> bool
+@must_use @const op ! <N: num> (vec<N, bool>) -> vec<N, bool>
+
+@must_use @const op ~ <T: ia_iu32>(T) -> T
+@must_use @const op ~ <T: ia_iu32, N: num> (vec<N, T>) -> vec<N, T>
+
+@must_use @const("UnaryMinus") op - <T: fia_fi32_f16>(T) -> T
+@must_use @const("UnaryMinus") op - <T: fia_fi32_f16, N: num> (vec<N, T>) -> vec<N, T>
+
+////////////////////////////////////////////////////////////////////////////////
+// Binary Operators //
+////////////////////////////////////////////////////////////////////////////////
+@must_use @const op + <T: fia_fiu32_f16>(T, T) -> T
+@must_use @const op + <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const op + <T: fia_fiu32_f16, N: num> (vec<N, T>, T) -> vec<N, T>
+@must_use @const op + <T: fia_fiu32_f16, N: num> (T, vec<N, T>) -> vec<N, T>
+@must_use @const op + <T: fa_f32_f16, N: num, M: num> (mat<N, M, T>, mat<N, M, T>) -> mat<N, M, T>
+
+@must_use @const op - <T: fia_fiu32_f16>(T, T) -> T
+@must_use @const op - <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const op - <T: fia_fiu32_f16, N: num> (vec<N, T>, T) -> vec<N, T>
+@must_use @const op - <T: fia_fiu32_f16, N: num> (T, vec<N, T>) -> vec<N, T>
+@must_use @const op - <T: fa_f32_f16, N: num, M: num> (mat<N, M, T>, mat<N, M, T>) -> mat<N, M, T>
+
+@must_use @const("Multiply") op * <T: fia_fiu32_f16>(T, T) -> T
+@must_use @const("Multiply") op * <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const("Multiply") op * <T: fia_fiu32_f16, N: num> (vec<N, T>, T) -> vec<N, T>
+@must_use @const("Multiply") op * <T: fia_fiu32_f16, N: num> (T, vec<N, T>) -> vec<N, T>
+@must_use @const("Multiply") op * <T: fa_f32_f16, N: num, M: num> (T, mat<N, M, T>) -> mat<N, M, T>
+@must_use @const("Multiply") op * <T: fa_f32_f16, N: num, M: num> (mat<N, M, T>, T) -> mat<N, M, T>
+@must_use @const("MultiplyMatVec") op * <T: fa_f32_f16, C: num, R: num> (mat<C, R, T>, vec<C, T>) -> vec<R, T>
+@must_use @const("MultiplyVecMat") op * <T: fa_f32_f16, C: num, R: num> (vec<R, T>, mat<C, R, T>) -> vec<C, T>
+@must_use @const("MultiplyMatMat") op * <T: fa_f32_f16, K: num, C: num, R: num> (mat<K, R, T>, mat<C, K, T>) -> mat<C, R, T>
+
+@must_use @const op / <T: fia_fiu32_f16>(T, T) -> T
+@must_use @const op / <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const op / <T: fia_fiu32_f16, N: num> (vec<N, T>, T) -> vec<N, T>
+@must_use @const op / <T: fia_fiu32_f16, N: num> (T, vec<N, T>) -> vec<N, T>
+
+@must_use @const op % <T: fia_fiu32_f16>(T, T) -> T
+@must_use @const op % <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, T>
+@must_use @const op % <T: fia_fiu32_f16, N: num> (vec<N, T>, T) -> vec<N, T>
+@must_use @const op % <T: fia_fiu32_f16, N: num> (T, vec<N, T>) -> vec<N, T>
+
+@must_use @const op ^ <T: ia_iu32>(T, T) -> T
+@must_use @const op ^ <T: ia_iu32, N: num> (vec<N, T>, vec<N, T>) -> vec<N, T>
+
+@must_use @const op & (bool, bool) -> bool
+@must_use @const op & <N: num> (vec<N, bool>, vec<N, bool>) -> vec<N, bool>
+@must_use @const op & <T: ia_iu32>(T, T) -> T
+@must_use @const op & <T: ia_iu32, N: num> (vec<N, T>, vec<N, T>) -> vec<N, T>
+
+@must_use @const op | (bool, bool) -> bool
+@must_use @const op | <N: num> (vec<N, bool>, vec<N, bool>) -> vec<N, bool>
+@must_use @const op | <T: ia_iu32>(T, T) -> T
+@must_use @const op | <T: ia_iu32, N: num> (vec<N, T>, vec<N, T>) -> vec<N, T>
+
+@must_use @const op && (bool, bool) -> bool
+@must_use @const op || (bool, bool) -> bool
+
+@must_use @const op == <T: scalar>(T, T) -> bool
+@must_use @const op == <T: scalar, N: num> (vec<N, T>, vec<N, T>) -> vec<N, bool>
+
+@must_use @const op != <T: scalar>(T, T) -> bool
+@must_use @const op != <T: scalar, N: num> (vec<N, T>, vec<N, T>) -> vec<N, bool>
+
+@must_use @const op < <T: fia_fiu32_f16>(T, T) -> bool
+@must_use @const op < <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, bool>
+
+@must_use @const op > <T: fia_fiu32_f16>(T, T) -> bool
+@must_use @const op > <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, bool>
+
+@must_use @const op <= <T: fia_fiu32_f16>(T, T) -> bool
+@must_use @const op <= <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, bool>
+
+@must_use @const op >= <T: fia_fiu32_f16>(T, T) -> bool
+@must_use @const op >= <T: fia_fiu32_f16, N: num> (vec<N, T>, vec<N, T>) -> vec<N, bool>
+
+@must_use @const op << <T: ia_iu32>(T, u32) -> T
+@must_use @const op << <T: ia_iu32, N: num> (vec<N, T>, vec<N, u32>) -> vec<N, T>
+
+@must_use @const op >> <T: ia_iu32>(T, u32) -> T
+@must_use @const op >> <T: ia_iu32, N: num> (vec<N, T>, vec<N, u32>) -> vec<N, T>
+
+////////////////////////////////////////////////////////////////////////////////
+// Tint internal builtins //
+////////////////////////////////////////////////////////////////////////////////
+@const("Identity") fn _tint_materialize<T>(T) -> T
diff --git a/src/tint/lang/wgsl/writer/BUILD.bazel b/src/tint/lang/wgsl/writer/BUILD.bazel
index 570230f..36cadd8 100644
--- a/src/tint/lang/wgsl/writer/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/BUILD.bazel
@@ -36,14 +36,18 @@
"writer.h",
],
deps = [
+ "//src/tint/api/common",
"//src/tint/lang/core",
"//src/tint/lang/core/constant",
+ "//src/tint/lang/core/ir",
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
"//src/tint/lang/wgsl/program",
"//src/tint/lang/wgsl/sem",
"//src/tint/lang/wgsl/writer/ast_printer",
+ "//src/tint/lang/wgsl/writer/ir_to_program",
+ "//src/tint/lang/wgsl/writer/raise",
"//src/tint/lang/wgsl/writer/syntax_tree_printer",
"//src/tint/utils/containers",
"//src/tint/utils/diagnostic",
diff --git a/src/tint/lang/wgsl/writer/BUILD.cmake b/src/tint/lang/wgsl/writer/BUILD.cmake
index 4802da7..c9893f6 100644
--- a/src/tint/lang/wgsl/writer/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/BUILD.cmake
@@ -23,6 +23,7 @@
include(lang/wgsl/writer/ast_printer/BUILD.cmake)
include(lang/wgsl/writer/ir_to_program/BUILD.cmake)
+include(lang/wgsl/writer/raise/BUILD.cmake)
include(lang/wgsl/writer/syntax_tree_printer/BUILD.cmake)
################################################################################
@@ -39,14 +40,18 @@
)
tint_target_add_dependencies(tint_lang_wgsl_writer lib
+ tint_api_common
tint_lang_core
tint_lang_core_constant
+ tint_lang_core_ir
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
tint_lang_wgsl_program
tint_lang_wgsl_sem
tint_lang_wgsl_writer_ast_printer
+ tint_lang_wgsl_writer_ir_to_program
+ tint_lang_wgsl_writer_raise
tint_lang_wgsl_writer_syntax_tree_printer
tint_utils_containers
tint_utils_diagnostic
diff --git a/src/tint/lang/wgsl/writer/BUILD.gn b/src/tint/lang/wgsl/writer/BUILD.gn
index 1bbf405..21b27a4 100644
--- a/src/tint/lang/wgsl/writer/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/BUILD.gn
@@ -35,14 +35,18 @@
"writer.h",
]
deps = [
+ "${tint_src_dir}/api/common",
"${tint_src_dir}/lang/core",
"${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/ir",
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/sem",
"${tint_src_dir}/lang/wgsl/writer/ast_printer",
+ "${tint_src_dir}/lang/wgsl/writer/ir_to_program",
+ "${tint_src_dir}/lang/wgsl/writer/raise",
"${tint_src_dir}/lang/wgsl/writer/syntax_tree_printer",
"${tint_src_dir}/utils/containers",
"${tint_src_dir}/utils/diagnostic",
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.bazel b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.bazel
index 09671ed..c14817f 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.bazel
+++ b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.bazel
@@ -43,6 +43,8 @@
"//src/tint/lang/core/type",
"//src/tint/lang/wgsl",
"//src/tint/lang/wgsl/ast",
+ "//src/tint/lang/wgsl/intrinsic/data",
+ "//src/tint/lang/wgsl/ir",
"//src/tint/lang/wgsl/program",
"//src/tint/lang/wgsl/resolver",
"//src/tint/lang/wgsl/sem",
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
index 4ac6bd8..d6e6e5f 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
+++ b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.cmake
@@ -42,6 +42,8 @@
tint_lang_core_type
tint_lang_wgsl
tint_lang_wgsl_ast
+ tint_lang_wgsl_intrinsic_data
+ tint_lang_wgsl_ir
tint_lang_wgsl_program
tint_lang_wgsl_resolver
tint_lang_wgsl_sem
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.gn b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.gn
index 584fa6c..d2b88ff 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/BUILD.gn
+++ b/src/tint/lang/wgsl/writer/ir_to_program/BUILD.gn
@@ -46,6 +46,8 @@
"${tint_src_dir}/lang/core/type",
"${tint_src_dir}/lang/wgsl",
"${tint_src_dir}/lang/wgsl/ast",
+ "${tint_src_dir}/lang/wgsl/intrinsic/data",
+ "${tint_src_dir}/lang/wgsl/ir",
"${tint_src_dir}/lang/wgsl/program",
"${tint_src_dir}/lang/wgsl/resolver",
"${tint_src_dir}/lang/wgsl/sem",
diff --git a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
index e57064a..0aa26de 100644
--- a/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
+++ b/src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.cc
@@ -63,6 +63,7 @@
#include "src/tint/lang/core/type/reference.h"
#include "src/tint/lang/core/type/sampler.h"
#include "src/tint/lang/core/type/texture.h"
+#include "src/tint/lang/wgsl/ir/builtin_call.h"
#include "src/tint/lang/wgsl/program/program_builder.h"
#include "src/tint/lang/wgsl/resolver/resolve.h"
#include "src/tint/lang/wgsl/writer/ir_to_program/rename_conflicts.h"
@@ -578,7 +579,7 @@
}
Bind(c->Result(), expr, PtrKind::kPtr);
},
- [&](core::ir::CoreBuiltinCall* c) {
+ [&](wgsl::ir::BuiltinCall* c) {
if (!disabled_derivative_uniformity_ && RequiresDerivativeUniformity(c->Func())) {
// TODO(crbug.com/tint/1985): Be smarter about disabling derivative uniformity.
b.DiagnosticDirective(wgsl::DiagnosticSeverity::kOff,
@@ -1141,20 +1142,20 @@
return b.IndexAccessor(expr, Expr(index));
}
- bool RequiresDerivativeUniformity(core::BuiltinFn fn) {
+ bool RequiresDerivativeUniformity(wgsl::BuiltinFn fn) {
switch (fn) {
- case core::BuiltinFn::kDpdxCoarse:
- case core::BuiltinFn::kDpdyCoarse:
- case core::BuiltinFn::kFwidthCoarse:
- case core::BuiltinFn::kDpdxFine:
- case core::BuiltinFn::kDpdyFine:
- case core::BuiltinFn::kFwidthFine:
- case core::BuiltinFn::kDpdx:
- case core::BuiltinFn::kDpdy:
- case core::BuiltinFn::kFwidth:
- case core::BuiltinFn::kTextureSample:
- case core::BuiltinFn::kTextureSampleBias:
- case core::BuiltinFn::kTextureSampleCompare:
+ case wgsl::BuiltinFn::kDpdxCoarse:
+ case wgsl::BuiltinFn::kDpdyCoarse:
+ case wgsl::BuiltinFn::kFwidthCoarse:
+ case wgsl::BuiltinFn::kDpdxFine:
+ case wgsl::BuiltinFn::kDpdyFine:
+ case wgsl::BuiltinFn::kFwidthFine:
+ case wgsl::BuiltinFn::kDpdx:
+ case wgsl::BuiltinFn::kDpdy:
+ case wgsl::BuiltinFn::kFwidth:
+ case wgsl::BuiltinFn::kTextureSample:
+ case wgsl::BuiltinFn::kTextureSampleBias:
+ case wgsl::BuiltinFn::kTextureSampleCompare:
return true;
default:
return false;
diff --git a/src/tint/lang/wgsl/writer/raise/BUILD.bazel b/src/tint/lang/wgsl/writer/raise/BUILD.bazel
new file mode 100644
index 0000000..d49adb4
--- /dev/null
+++ b/src/tint/lang/wgsl/writer/raise/BUILD.bazel
@@ -0,0 +1,96 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.bazel.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+load("//src/tint:flags.bzl", "COPTS")
+load("@bazel_skylib//lib:selects.bzl", "selects")
+cc_library(
+ name = "raise",
+ srcs = [
+ "raise.cc",
+ ],
+ hdrs = [
+ "raise.h",
+ ],
+ deps = [
+ "//src/tint/api/common",
+ "//src/tint/lang/core",
+ "//src/tint/lang/core/constant",
+ "//src/tint/lang/core/intrinsic",
+ "//src/tint/lang/core/intrinsic/data",
+ "//src/tint/lang/core/ir",
+ "//src/tint/lang/core/type",
+ "//src/tint/lang/wgsl",
+ "//src/tint/lang/wgsl/intrinsic/data",
+ "//src/tint/lang/wgsl/ir",
+ "//src/tint/utils/containers",
+ "//src/tint/utils/diagnostic",
+ "//src/tint/utils/ice",
+ "//src/tint/utils/id",
+ "//src/tint/utils/macros",
+ "//src/tint/utils/math",
+ "//src/tint/utils/memory",
+ "//src/tint/utils/reflection",
+ "//src/tint/utils/result",
+ "//src/tint/utils/rtti",
+ "//src/tint/utils/symbol",
+ "//src/tint/utils/text",
+ "//src/tint/utils/traits",
+ ],
+ copts = COPTS,
+ visibility = ["//visibility:public"],
+)
+cc_library(
+ name = "test",
+ alwayslink = True,
+ srcs = [
+ "raise_test.cc",
+ ],
+ deps = [
+ "//src/tint/api/common",
+ "//src/tint/lang/core",
+ "//src/tint/lang/core/constant",
+ "//src/tint/lang/core/intrinsic",
+ "//src/tint/lang/core/intrinsic/data",
+ "//src/tint/lang/core/ir",
+ "//src/tint/lang/core/ir/transform:test",
+ "//src/tint/lang/core/type",
+ "//src/tint/lang/wgsl/writer/raise",
+ "//src/tint/utils/containers",
+ "//src/tint/utils/diagnostic",
+ "//src/tint/utils/ice",
+ "//src/tint/utils/id",
+ "//src/tint/utils/macros",
+ "//src/tint/utils/math",
+ "//src/tint/utils/memory",
+ "//src/tint/utils/reflection",
+ "//src/tint/utils/result",
+ "//src/tint/utils/rtti",
+ "//src/tint/utils/symbol",
+ "//src/tint/utils/text",
+ "//src/tint/utils/traits",
+ "@gtest",
+ ],
+ copts = COPTS,
+ visibility = ["//visibility:public"],
+)
+
diff --git a/src/tint/lang/wgsl/writer/raise/BUILD.cmake b/src/tint/lang/wgsl/writer/raise/BUILD.cmake
new file mode 100644
index 0000000..fcbe110
--- /dev/null
+++ b/src/tint/lang/wgsl/writer/raise/BUILD.cmake
@@ -0,0 +1,94 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.cmake.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+################################################################################
+# Target: tint_lang_wgsl_writer_raise
+# Kind: lib
+################################################################################
+tint_add_target(tint_lang_wgsl_writer_raise lib
+ lang/wgsl/writer/raise/raise.cc
+ lang/wgsl/writer/raise/raise.h
+)
+
+tint_target_add_dependencies(tint_lang_wgsl_writer_raise lib
+ tint_api_common
+ tint_lang_core
+ tint_lang_core_constant
+ tint_lang_core_intrinsic
+ tint_lang_core_intrinsic_data
+ tint_lang_core_ir
+ tint_lang_core_type
+ tint_lang_wgsl
+ tint_lang_wgsl_intrinsic_data
+ tint_lang_wgsl_ir
+ tint_utils_containers
+ tint_utils_diagnostic
+ tint_utils_ice
+ tint_utils_id
+ tint_utils_macros
+ tint_utils_math
+ tint_utils_memory
+ tint_utils_reflection
+ tint_utils_result
+ tint_utils_rtti
+ tint_utils_symbol
+ tint_utils_text
+ tint_utils_traits
+)
+
+################################################################################
+# Target: tint_lang_wgsl_writer_raise_test
+# Kind: test
+################################################################################
+tint_add_target(tint_lang_wgsl_writer_raise_test test
+ lang/wgsl/writer/raise/raise_test.cc
+)
+
+tint_target_add_dependencies(tint_lang_wgsl_writer_raise_test test
+ tint_api_common
+ tint_lang_core
+ tint_lang_core_constant
+ tint_lang_core_intrinsic
+ tint_lang_core_intrinsic_data
+ tint_lang_core_ir
+ tint_lang_core_ir_transform_test
+ tint_lang_core_type
+ tint_lang_wgsl_writer_raise
+ tint_utils_containers
+ tint_utils_diagnostic
+ tint_utils_ice
+ tint_utils_id
+ tint_utils_macros
+ tint_utils_math
+ tint_utils_memory
+ tint_utils_reflection
+ tint_utils_result
+ tint_utils_rtti
+ tint_utils_symbol
+ tint_utils_text
+ tint_utils_traits
+)
+
+tint_target_add_external_dependencies(tint_lang_wgsl_writer_raise_test test
+ "gtest"
+)
diff --git a/src/tint/lang/wgsl/writer/raise/BUILD.gn b/src/tint/lang/wgsl/writer/raise/BUILD.gn
new file mode 100644
index 0000000..18ec5e1
--- /dev/null
+++ b/src/tint/lang/wgsl/writer/raise/BUILD.gn
@@ -0,0 +1,93 @@
+# Copyright 2023 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/src/cmd/gen' using the template:
+# tools/src/cmd/gen/build/BUILD.gn.tmpl
+#
+# To regenerate run: './tools/run gen'
+#
+# Do not modify this file directly
+################################################################################
+
+import("../../../../../../scripts/tint_overrides_with_defaults.gni")
+
+import("${tint_src_dir}/tint.gni")
+
+if (tint_build_unittests) {
+ import("//testing/test.gni")
+}
+
+libtint_source_set("raise") {
+ sources = [
+ "raise.cc",
+ "raise.h",
+ ]
+ deps = [
+ "${tint_src_dir}/api/common",
+ "${tint_src_dir}/lang/core",
+ "${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/intrinsic",
+ "${tint_src_dir}/lang/core/intrinsic/data",
+ "${tint_src_dir}/lang/core/ir",
+ "${tint_src_dir}/lang/core/type",
+ "${tint_src_dir}/lang/wgsl",
+ "${tint_src_dir}/lang/wgsl/intrinsic/data",
+ "${tint_src_dir}/lang/wgsl/ir",
+ "${tint_src_dir}/utils/containers",
+ "${tint_src_dir}/utils/diagnostic",
+ "${tint_src_dir}/utils/ice",
+ "${tint_src_dir}/utils/id",
+ "${tint_src_dir}/utils/macros",
+ "${tint_src_dir}/utils/math",
+ "${tint_src_dir}/utils/memory",
+ "${tint_src_dir}/utils/reflection",
+ "${tint_src_dir}/utils/result",
+ "${tint_src_dir}/utils/rtti",
+ "${tint_src_dir}/utils/symbol",
+ "${tint_src_dir}/utils/text",
+ "${tint_src_dir}/utils/traits",
+ ]
+}
+if (tint_build_unittests) {
+ tint_unittests_source_set("unittests") {
+ testonly = true
+ sources = [ "raise_test.cc" ]
+ deps = [
+ "${tint_src_dir}:gmock_and_gtest",
+ "${tint_src_dir}/api/common",
+ "${tint_src_dir}/lang/core",
+ "${tint_src_dir}/lang/core/constant",
+ "${tint_src_dir}/lang/core/intrinsic",
+ "${tint_src_dir}/lang/core/intrinsic/data",
+ "${tint_src_dir}/lang/core/ir",
+ "${tint_src_dir}/lang/core/ir/transform:unittests",
+ "${tint_src_dir}/lang/core/type",
+ "${tint_src_dir}/lang/wgsl/writer/raise",
+ "${tint_src_dir}/utils/containers",
+ "${tint_src_dir}/utils/diagnostic",
+ "${tint_src_dir}/utils/ice",
+ "${tint_src_dir}/utils/id",
+ "${tint_src_dir}/utils/macros",
+ "${tint_src_dir}/utils/math",
+ "${tint_src_dir}/utils/memory",
+ "${tint_src_dir}/utils/reflection",
+ "${tint_src_dir}/utils/result",
+ "${tint_src_dir}/utils/rtti",
+ "${tint_src_dir}/utils/symbol",
+ "${tint_src_dir}/utils/text",
+ "${tint_src_dir}/utils/traits",
+ ]
+ }
+}
diff --git a/src/tint/lang/wgsl/writer/raise/raise.cc b/src/tint/lang/wgsl/writer/raise/raise.cc
new file mode 100644
index 0000000..daacf36
--- /dev/null
+++ b/src/tint/lang/wgsl/writer/raise/raise.cc
@@ -0,0 +1,169 @@
+// Copyright 2023 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.
+
+#include "src/tint/lang/wgsl/writer/raise/raise.h"
+
+#include <utility>
+
+#include "src/tint/lang/core/builtin_fn.h"
+#include "src/tint/lang/core/ir/core_builtin_call.h"
+#include "src/tint/lang/wgsl/builtin_fn.h"
+#include "src/tint/lang/wgsl/ir/builtin_call.h"
+
+namespace tint::wgsl::writer::raise {
+namespace {
+
+wgsl::BuiltinFn Convert(core::BuiltinFn fn) {
+#define CASE(NAME) \
+ case core::BuiltinFn::NAME: \
+ return wgsl::BuiltinFn::NAME;
+
+ switch (fn) {
+ CASE(kAbs)
+ CASE(kAcos)
+ CASE(kAcosh)
+ CASE(kAll)
+ CASE(kAny)
+ CASE(kArrayLength)
+ CASE(kAsin)
+ CASE(kAsinh)
+ CASE(kAtan)
+ CASE(kAtan2)
+ CASE(kAtanh)
+ CASE(kCeil)
+ CASE(kClamp)
+ CASE(kCos)
+ CASE(kCosh)
+ CASE(kCountLeadingZeros)
+ CASE(kCountOneBits)
+ CASE(kCountTrailingZeros)
+ CASE(kCross)
+ CASE(kDegrees)
+ CASE(kDeterminant)
+ CASE(kDistance)
+ CASE(kDot)
+ CASE(kDot4I8Packed)
+ CASE(kDot4U8Packed)
+ CASE(kDpdx)
+ CASE(kDpdxCoarse)
+ CASE(kDpdxFine)
+ CASE(kDpdy)
+ CASE(kDpdyCoarse)
+ CASE(kDpdyFine)
+ CASE(kExp)
+ CASE(kExp2)
+ CASE(kExtractBits)
+ CASE(kFaceForward)
+ CASE(kFirstLeadingBit)
+ CASE(kFirstTrailingBit)
+ CASE(kFloor)
+ CASE(kFma)
+ CASE(kFract)
+ CASE(kFrexp)
+ CASE(kFwidth)
+ CASE(kFwidthCoarse)
+ CASE(kFwidthFine)
+ CASE(kInsertBits)
+ CASE(kInverseSqrt)
+ CASE(kLdexp)
+ CASE(kLength)
+ CASE(kLog)
+ CASE(kLog2)
+ CASE(kMax)
+ CASE(kMin)
+ CASE(kMix)
+ CASE(kModf)
+ CASE(kNormalize)
+ CASE(kPack2X16Float)
+ CASE(kPack2X16Snorm)
+ CASE(kPack2X16Unorm)
+ CASE(kPack4X8Snorm)
+ CASE(kPack4X8Unorm)
+ CASE(kPow)
+ CASE(kQuantizeToF16)
+ CASE(kRadians)
+ CASE(kReflect)
+ CASE(kRefract)
+ CASE(kReverseBits)
+ CASE(kRound)
+ CASE(kSaturate)
+ CASE(kSelect)
+ CASE(kSign)
+ CASE(kSin)
+ CASE(kSinh)
+ CASE(kSmoothstep)
+ CASE(kSqrt)
+ CASE(kStep)
+ CASE(kStorageBarrier)
+ CASE(kTan)
+ CASE(kTanh)
+ CASE(kTranspose)
+ CASE(kTrunc)
+ CASE(kUnpack2X16Float)
+ CASE(kUnpack2X16Snorm)
+ CASE(kUnpack2X16Unorm)
+ CASE(kUnpack4X8Snorm)
+ CASE(kUnpack4X8Unorm)
+ CASE(kWorkgroupBarrier)
+ CASE(kWorkgroupUniformLoad)
+ CASE(kTextureBarrier)
+ CASE(kTextureDimensions)
+ CASE(kTextureGather)
+ CASE(kTextureGatherCompare)
+ CASE(kTextureNumLayers)
+ CASE(kTextureNumLevels)
+ CASE(kTextureNumSamples)
+ CASE(kTextureSample)
+ CASE(kTextureSampleBias)
+ CASE(kTextureSampleCompare)
+ CASE(kTextureSampleCompareLevel)
+ CASE(kTextureSampleGrad)
+ CASE(kTextureSampleLevel)
+ CASE(kTextureSampleBaseClampToEdge)
+ CASE(kTextureStore)
+ CASE(kTextureLoad)
+ CASE(kAtomicLoad)
+ CASE(kAtomicStore)
+ CASE(kAtomicAdd)
+ CASE(kAtomicSub)
+ CASE(kAtomicMax)
+ CASE(kAtomicMin)
+ CASE(kAtomicAnd)
+ CASE(kAtomicOr)
+ CASE(kAtomicXor)
+ CASE(kAtomicExchange)
+ CASE(kAtomicCompareExchangeWeak)
+ CASE(kSubgroupBallot)
+ CASE(kSubgroupBroadcast)
+ default:
+ TINT_ICE() << "unhandled builtin function: " << fn;
+ return wgsl::BuiltinFn::kNone;
+ }
+}
+
+} // namespace
+
+Result<SuccessType> Raise(core::ir::Module& mod) {
+ for (auto* inst : mod.instructions.Objects()) {
+ if (auto* call = inst->As<core::ir::CoreBuiltinCall>()) {
+ Vector<core::ir::Value*, 8> args(call->Args());
+ auto* replacement = mod.instructions.Create<wgsl::ir::BuiltinCall>(
+ call->Result(), Convert(call->Func()), std::move(args));
+ call->ReplaceWith(replacement);
+ }
+ }
+ return Success;
+}
+
+} // namespace tint::wgsl::writer::raise
diff --git a/src/tint/lang/wgsl/writer/raise/raise.h b/src/tint/lang/wgsl/writer/raise/raise.h
new file mode 100644
index 0000000..a5b1487
--- /dev/null
+++ b/src/tint/lang/wgsl/writer/raise/raise.h
@@ -0,0 +1,31 @@
+// Copyright 2023 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.
+
+#ifndef SRC_TINT_LANG_WGSL_WRITER_RAISE_RAISE_H_
+#define SRC_TINT_LANG_WGSL_WRITER_RAISE_RAISE_H_
+
+#include "src/tint/lang/core/ir/module.h"
+#include "src/tint/utils/diagnostic/diagnostic.h"
+#include "src/tint/utils/result/result.h"
+
+namespace tint::wgsl::writer::raise {
+
+/// Raise converts a core-dialect IR module to a WGSL-dialect IR module
+/// @param mod the IR module
+/// @return the result of the operation
+Result<SuccessType> Raise(core::ir::Module& mod);
+
+} // namespace tint::wgsl::writer::raise
+
+#endif // SRC_TINT_LANG_WGSL_WRITER_RAISE_RAISE_H_
diff --git a/src/tint/lang/wgsl/writer/raise/raise_test.cc b/src/tint/lang/wgsl/writer/raise/raise_test.cc
new file mode 100644
index 0000000..a4f9b05
--- /dev/null
+++ b/src/tint/lang/wgsl/writer/raise/raise_test.cc
@@ -0,0 +1,61 @@
+// Copyright 2023 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.
+
+#include <utility>
+
+#include "src/tint/lang/core/ir/transform/helper_test.h"
+#include "src/tint/lang/core/type/struct.h"
+#include "src/tint/lang/wgsl/writer/raise/raise.h"
+
+namespace tint::wgsl::writer::raise {
+namespace {
+
+using namespace tint::core::fluent_types; // NOLINT
+using namespace tint::core::number_suffixes; // NOLINT
+
+using WgslWriter_RaiseTest = core::ir::transform::TransformTest;
+
+TEST_F(WgslWriter_RaiseTest, BuiltinConversion) {
+ auto* f = b.Function("f", ty.void_());
+ b.Append(f->Block(), [&] { //
+ b.Call(ty.i32(), core::BuiltinFn::kMax, i32(1), i32(2));
+ b.Return(f);
+ });
+
+ auto* src = R"(
+%f = func():void -> %b1 {
+ %b1 = block {
+ %2:i32 = max 1i, 2i
+ ret
+ }
+}
+)";
+ EXPECT_EQ(src, str());
+
+ auto* expect = R"(
+%f = func():void -> %b1 {
+ %b1 = block {
+ %2:i32 = wgsl.max 1i, 2i
+ ret
+ }
+}
+)";
+
+ Run(Raise);
+
+ EXPECT_EQ(expect, str());
+}
+
+} // namespace
+} // namespace tint::wgsl::writer::raise
diff --git a/src/tint/lang/wgsl/writer/writer.cc b/src/tint/lang/wgsl/writer/writer.cc
index 4c82f28..737f173 100644
--- a/src/tint/lang/wgsl/writer/writer.cc
+++ b/src/tint/lang/wgsl/writer/writer.cc
@@ -19,6 +19,8 @@
#include "src/tint/lang/wgsl/program/program.h"
#include "src/tint/lang/wgsl/writer/ast_printer/ast_printer.h"
+#include "src/tint/lang/wgsl/writer/ir_to_program/ir_to_program.h"
+#include "src/tint/lang/wgsl/writer/raise/raise.h"
#if TINT_BUILD_SYNTAX_TREE_WRITER
#include "src/tint/lang/wgsl/writer/syntax_tree_printer/syntax_tree_printer.h"
@@ -52,4 +54,18 @@
return output;
}
+Result<Output> WgslFromIR(core::ir::Module& module) {
+ // core-dialect -> WGSL-dialect
+ if (auto res = raise::Raise(module); !res) {
+ return res.Failure();
+ }
+
+ auto program = IRToProgram(module);
+ if (!program.IsValid()) {
+ return Failure{program.Diagnostics()};
+ }
+
+ return Generate(program, Options{});
+}
+
} // namespace tint::wgsl::writer
diff --git a/src/tint/lang/wgsl/writer/writer.h b/src/tint/lang/wgsl/writer/writer.h
index d88b50d..b6c14bf 100644
--- a/src/tint/lang/wgsl/writer/writer.h
+++ b/src/tint/lang/wgsl/writer/writer.h
@@ -26,6 +26,9 @@
namespace tint {
class Program;
} // namespace tint
+namespace tint::core::ir {
+class Module;
+} // namespace tint::core::ir
namespace tint::wgsl::writer {
@@ -36,6 +39,11 @@
/// @returns the resulting WGSL, or failure
Result<Output> Generate(const Program& program, const Options& options);
+/// Generate WGSL from a core-dialect ir::Module.
+/// @param module the core-dialect ir::Module.
+/// @returns the resulting WGSL, or failure
+Result<Output> WgslFromIR(core::ir::Module& module);
+
} // namespace tint::wgsl::writer
#endif // SRC_TINT_LANG_WGSL_WRITER_WRITER_H_