blob: 677c7ad89b34f77e569c3ab5f35d197aaf8fb274 [file] [log] [blame]
// Copyright 2023 The Dawn & Tint Authors
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// 3. Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
// FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
// SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
// OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
////////////////////////////////////////////////////////////////////////////////
// File generated by 'tools/src/cmd/gen' using the template:
// src/tint/lang/wgsl/intrinsic/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/type_matchers.h"
#include "src/tint/lang/wgsl/intrinsic/dialect.h"
#include "src/tint/utils/text/string_stream.h"
namespace tint::wgsl::intrinsic {
using namespace tint::core::intrinsic; // 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),