// 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/msl/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/msl/intrinsic/dialect.h"
#include "src/tint/lang/msl/intrinsic/type_matchers.h"
#include "src/tint/utils/text/string_stream.h"

namespace tint::msl::intrinsic {

using namespace tint::core::intrinsic;  // NOLINT(build/namespaces)

namespace {

using ConstEvalFunctionIndex = tint::core::intrinsic::ConstEvalFunctionIndex;
using IntrinsicInfo = tint::core::intrinsic::IntrinsicInfo;
using MatcherIndicesIndex = tint::core::intrinsic::MatcherIndicesIndex;
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 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 TemplateIndex = tint::core::intrinsic::TemplateIndex;
using Type = tint::core::type::Type;
using TypeMatcher = tint::core::intrinsic::TypeMatcher;
using TypeMatcherIndex = tint::core::intrinsic::TypeMatcherIndex;

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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("bool");
  }
};


/// 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("i32");
  }
};


/// TypeMatcher for 'type i8'
constexpr TypeMatcher kI8Matcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (!MatchI8(state, ty)) {
      return nullptr;
    }
    return BuildI8(state, ty);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("i8");
  }
};


/// 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("u32");
  }
};


/// TypeMatcher for 'type u8'
constexpr TypeMatcher kU8Matcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (!MatchU8(state, ty)) {
      return nullptr;
    }
    return BuildU8(state, ty);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("u8");
  }
};


/// 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("vec4", "<", 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText N;
  state->PrintNum(N);StyledText T;
  state->PrintType(T);
    out << style::Type("vec", N, "<", T, ">");
  }
};


/// 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("atomic", "<", T, ">");
  }
};


/// 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText S;
  state->PrintNum(S);StyledText T;
  state->PrintType(T);StyledText A;
  state->PrintNum(A);
    out << style::Type("ptr", "<", S, ", ", T, ", ", A, ">");
  }
};


/// 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("texture_cube_array", "<", 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("texture_depth_multisampled_2d");
  }
};


/// 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText T;
  state->PrintType(T);
    out << style::Type("texture_multisampled_2d", "<", T, ">");
  }
};


/// 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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText F;
  state->PrintNum(F);StyledText A;
  state->PrintNum(A);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText F;
  state->PrintNum(F);StyledText A;
  state->PrintNum(A);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText F;
  state->PrintNum(F);StyledText A;
  state->PrintNum(A);
    out << style::Type("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);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {StyledText F;
  state->PrintNum(F);StyledText A;
  state->PrintNum(A);
    out << style::Type("texture_storage_3d", "<", F, ", ", A, ">");
  }
};


/// TypeMatcher for 'type bias'
constexpr TypeMatcher kBiasMatcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (!MatchBias(state, ty)) {
      return nullptr;
    }
    return BuildBias(state, ty);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("bias");
  }
};


/// TypeMatcher for 'type gradient2d'
constexpr TypeMatcher kGradient2DMatcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (!MatchGradient2D(state, ty)) {
      return nullptr;
    }
    return BuildGradient2D(state, ty);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("gradient2d");
  }
};


/// TypeMatcher for 'type gradient3d'
constexpr TypeMatcher kGradient3DMatcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (!MatchGradient3D(state, ty)) {
      return nullptr;
    }
    return BuildGradient3D(state, ty);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("gradient3d");
  }
};


/// TypeMatcher for 'type gradientcube'
constexpr TypeMatcher kGradientcubeMatcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (!MatchGradientcube(state, ty)) {
      return nullptr;
    }
    return BuildGradientcube(state, ty);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("gradientcube");
  }
};


/// TypeMatcher for 'type level'
constexpr TypeMatcher kLevelMatcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (!MatchLevel(state, ty)) {
      return nullptr;
    }
    return BuildLevel(state, ty);
  },
/* print */ []([[maybe_unused]] MatchState* state, StyledText& out) {
    out << style::Type("level");
  }
};


/// 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;
  },
/* print */ [](MatchState*, StyledText& out) {
    // Note: We pass nullptr to the Matcher.print() functions, as matchers do not support
    // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
 kI32Matcher.print(nullptr, out); out << style::Plain(" or "); kU32Matcher.print(nullptr, out);}
};

/// TypeMatcher for 'match fiu32'
constexpr TypeMatcher kFiu32Matcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (MatchF32(state, ty)) {
      return BuildF32(state, ty);
    }
    if (MatchI32(state, ty)) {
      return BuildI32(state, ty);
    }
    if (MatchU32(state, ty)) {
      return BuildU32(state, ty);
    }
    return nullptr;
  },
/* print */ [](MatchState*, StyledText& out) {
    // Note: We pass nullptr to the Matcher.print() functions, as matchers do not support
    // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
 kF32Matcher.print(nullptr, out); out << style::Plain(", "); kI32Matcher.print(nullptr, out); out << style::Plain(" or "); kU32Matcher.print(nullptr, out);}
};

/// 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;
  },
/* print */ [](MatchState*, StyledText& out) {
    // Note: We pass nullptr to the Matcher.print() functions, as matchers do not support
    // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
 kF32Matcher.print(nullptr, out); out << style::Plain(" or "); kF16Matcher.print(nullptr, out);}
};

/// TypeMatcher for 'match fiu32_f16'
constexpr TypeMatcher kFiu32F16Matcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (MatchF32(state, ty)) {
      return BuildF32(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);
    }
    return nullptr;
  },
/* print */ [](MatchState*, StyledText& out) {
    // Note: We pass nullptr to the Matcher.print() functions, as matchers do not support
    // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
 kF32Matcher.print(nullptr, out); out << style::Plain(", "); kI32Matcher.print(nullptr, out); out << style::Plain(", "); kU32Matcher.print(nullptr, out); out << style::Plain(" or "); kF16Matcher.print(nullptr, out);}
};

/// TypeMatcher for 'match iu8'
constexpr TypeMatcher kIu8Matcher {
/* match */ [](MatchState& state, const Type* ty) -> const Type* {
    if (MatchI8(state, ty)) {
      return BuildI8(state, ty);
    }
    if (MatchU8(state, ty)) {
      return BuildU8(state, ty);
    }
    return nullptr;
  },
/* print */ [](MatchState*, StyledText& out) {
    // Note: We pass nullptr to the Matcher.print() functions, as matchers do not support
    // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
 kI8Matcher.print(nullptr, out); out << style::Plain(" or "); kU8Matcher.print(nullptr, out);}
};

/// 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;
  },
/* print */ [](MatchState*, StyledText& out) {
  out<< style::Enum("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;
    }
  },
/* print */ [](MatchState*, StyledText& out) {
  out<< style::Enum("read")<< style::Plain(" or ") << style::Enum("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;
    }
  },
/* print */ [](MatchState*, StyledText& out) {
  out<< style::Enum("write")<< style::Plain(" or ") << style::Enum("read_write");
  }
};

/// EnumMatcher for 'match function'
constexpr NumberMatcher kFunctionMatcher {
/* match */ [](MatchState&, Number number) -> Number {
    if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::AddressSpace::kFunction)) {
      return Number(static_cast<uint32_t>(core::AddressSpace::kFunction));
    }
    return Number::invalid;
  },
/* print */ [](MatchState*, StyledText& out) {
  out<< style::Enum("function");
  }
};

/// 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;
    }
  },
/* print */ [](MatchState*, StyledText& out) {
  out<< style::Enum("workgroup")<< style::Plain(" or ") << style::Enum("storage");
  }
};

/// EnumMatcher for 'match f32_texel_format'
constexpr NumberMatcher kF32TexelFormatMatcher {
/* match */ [](MatchState&, Number number) -> Number {
    switch (static_cast<core::TexelFormat>(number.Value())) {
      case core::TexelFormat::kR8Unorm:
      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;
    }
  },
/* print */ [](MatchState*, StyledText& out) {
  out<< style::Enum("r8unorm")<< style::Plain(", ") << style::Enum("bgra8unorm")<< style::Plain(", ") << style::Enum("rgba8unorm")<< style::Plain(", ") << style::Enum("rgba8snorm")<< style::Plain(", ") << style::Enum("rgba16float")<< style::Plain(", ") << style::Enum("r32float")<< style::Plain(", ") << style::Enum("rg32float")<< style::Plain(" or ") << style::Enum("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;
    }
  },
/* print */ [](MatchState*, StyledText& out) {
  out<< style::Enum("rgba8sint")<< style::Plain(", ") << style::Enum("rgba16sint")<< style::Plain(", ") << style::Enum("r32sint")<< style::Plain(", ") << style::Enum("rg32sint")<< style::Plain(" or ") << style::Enum("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;
    }
  },
/* print */ [](MatchState*, StyledText& out) {
  out<< style::Enum("rgba8uint")<< style::Plain(", ") << style::Enum("rgba16uint")<< style::Plain(", ") << style::Enum("r32uint")<< style::Plain(", ") << style::Enum("rg32uint")<< style::Plain(" or ") << style::Enum("rgba32uint");
  }
};

/// 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] */ kBoolMatcher,
  /* [4] */ kI32Matcher,
  /* [5] */ kI8Matcher,
  /* [6] */ kU32Matcher,
  /* [7] */ kU8Matcher,
  /* [8] */ kF32Matcher,
  /* [9] */ kF16Matcher,
  /* [10] */ kVec2Matcher,
  /* [11] */ kVec3Matcher,
  /* [12] */ kVec4Matcher,
  /* [13] */ kVecMatcher,
  /* [14] */ kAtomicMatcher,
  /* [15] */ kPtrMatcher,
  /* [16] */ kSamplerMatcher,
  /* [17] */ kSamplerComparisonMatcher,
  /* [18] */ kTexture1DMatcher,
  /* [19] */ kTexture2DMatcher,
  /* [20] */ kTexture2DArrayMatcher,
  /* [21] */ kTexture3DMatcher,
  /* [22] */ kTextureCubeMatcher,
  /* [23] */ kTextureCubeArrayMatcher,
  /* [24] */ kTextureDepth2DMatcher,
  /* [25] */ kTextureDepth2DArrayMatcher,
  /* [26] */ kTextureDepthCubeMatcher,
  /* [27] */ kTextureDepthCubeArrayMatcher,
  /* [28] */ kTextureDepthMultisampled2DMatcher,
  /* [29] */ kTextureMultisampled2DMatcher,
  /* [30] */ kTextureStorage1DMatcher,
  /* [31] */ kTextureStorage2DMatcher,
  /* [32] */ kTextureStorage2DArrayMatcher,
  /* [33] */ kTextureStorage3DMatcher,
  /* [34] */ kBiasMatcher,
  /* [35] */ kGradient2DMatcher,
  /* [36] */ kGradient3DMatcher,
  /* [37] */ kGradientcubeMatcher,
  /* [38] */ kLevelMatcher,
  /* [39] */ kIu32Matcher,
  /* [40] */ kFiu32Matcher,
  /* [41] */ kF32F16Matcher,
  /* [42] */ kFiu32F16Matcher,
  /* [43] */ kIu8Matcher,
};

/// The template numbers, and number matchers
constexpr NumberMatcher kNumberMatchers[] = {
  /* [0] */ TemplateNumberMatcher<0>::matcher,
  /* [1] */ TemplateNumberMatcher<1>::matcher,
  /* [2] */ TemplateNumberMatcher<2>::matcher,
  /* [3] */ kReadWriteMatcher,
  /* [4] */ kReadableMatcher,
  /* [5] */ kWritableMatcher,
  /* [6] */ kFunctionMatcher,
  /* [7] */ kWorkgroupOrStorageMatcher,
  /* [8] */ kF32TexelFormatMatcher,
  /* [9] */ kI32TexelFormatMatcher,
  /* [10] */ kU32TexelFormatMatcher,
};

constexpr MatcherIndex kMatcherIndices[] = {
  /* [0] */ MatcherIndex(15),
  /* [1] */ MatcherIndex(1),
  /* [2] */ MatcherIndex(14),
  /* [3] */ MatcherIndex(0),
  /* [4] */ MatcherIndex(3),
  /* [5] */ MatcherIndex(15),
  /* [6] */ MatcherIndex(6),
  /* [7] */ MatcherIndex(0),
  /* [8] */ MatcherIndex(3),
  /* [9] */ MatcherIndex(30),
  /* [10] */ MatcherIndex(0),
  /* [11] */ MatcherIndex(1),
  /* [12] */ MatcherIndex(31),
  /* [13] */ MatcherIndex(0),
  /* [14] */ MatcherIndex(1),
  /* [15] */ MatcherIndex(32),
  /* [16] */ MatcherIndex(0),
  /* [17] */ MatcherIndex(1),
  /* [18] */ MatcherIndex(33),
  /* [19] */ MatcherIndex(0),
  /* [20] */ MatcherIndex(1),
  /* [21] */ MatcherIndex(30),
  /* [22] */ MatcherIndex(8),
  /* [23] */ MatcherIndex(4),
  /* [24] */ MatcherIndex(31),
  /* [25] */ MatcherIndex(8),
  /* [26] */ MatcherIndex(4),
  /* [27] */ MatcherIndex(32),
  /* [28] */ MatcherIndex(8),
  /* [29] */ MatcherIndex(4),
  /* [30] */ MatcherIndex(33),
  /* [31] */ MatcherIndex(8),
  /* [32] */ MatcherIndex(4),
  /* [33] */ MatcherIndex(30),
  /* [34] */ MatcherIndex(9),
  /* [35] */ MatcherIndex(4),
  /* [36] */ MatcherIndex(31),
  /* [37] */ MatcherIndex(9),
  /* [38] */ MatcherIndex(4),
  /* [39] */ MatcherIndex(32),
  /* [40] */ MatcherIndex(9),
  /* [41] */ MatcherIndex(4),
  /* [42] */ MatcherIndex(33),
  /* [43] */ MatcherIndex(9),
  /* [44] */ MatcherIndex(4),
  /* [45] */ MatcherIndex(30),
  /* [46] */ MatcherIndex(10),
  /* [47] */ MatcherIndex(4),
  /* [48] */ MatcherIndex(31),
  /* [49] */ MatcherIndex(10),
  /* [50] */ MatcherIndex(4),
  /* [51] */ MatcherIndex(32),
  /* [52] */ MatcherIndex(10),
  /* [53] */ MatcherIndex(4),
  /* [54] */ MatcherIndex(33),
  /* [55] */ MatcherIndex(10),
  /* [56] */ MatcherIndex(4),
  /* [57] */ MatcherIndex(30),
  /* [58] */ MatcherIndex(8),
  /* [59] */ MatcherIndex(5),
  /* [60] */ MatcherIndex(31),
  /* [61] */ MatcherIndex(8),
  /* [62] */ MatcherIndex(5),
  /* [63] */ MatcherIndex(32),
  /* [64] */ MatcherIndex(8),
  /* [65] */ MatcherIndex(5),
  /* [66] */ MatcherIndex(33),
  /* [67] */ MatcherIndex(8),
  /* [68] */ MatcherIndex(5),
  /* [69] */ MatcherIndex(30),
  /* [70] */ MatcherIndex(9),
  /* [71] */ MatcherIndex(5),
  /* [72] */ MatcherIndex(31),
  /* [73] */ MatcherIndex(9),
  /* [74] */ MatcherIndex(5),
  /* [75] */ MatcherIndex(32),
  /* [76] */ MatcherIndex(9),
  /* [77] */ MatcherIndex(5),
  /* [78] */ MatcherIndex(33),
  /* [79] */ MatcherIndex(9),
  /* [80] */ MatcherIndex(5),
  /* [81] */ MatcherIndex(30),
  /* [82] */ MatcherIndex(10),
  /* [83] */ MatcherIndex(5),
  /* [84] */ MatcherIndex(31),
  /* [85] */ MatcherIndex(10),
  /* [86] */ MatcherIndex(5),
  /* [87] */ MatcherIndex(32),
  /* [88] */ MatcherIndex(10),
  /* [89] */ MatcherIndex(5),
  /* [90] */ MatcherIndex(33),
  /* [91] */ MatcherIndex(10),
  /* [92] */ MatcherIndex(5),
  /* [93] */ MatcherIndex(13),
  /* [94] */ MatcherIndex(0),
  /* [95] */ MatcherIndex(1),
  /* [96] */ MatcherIndex(13),
  /* [97] */ MatcherIndex(0),
  /* [98] */ MatcherIndex(4),
  /* [99] */ MatcherIndex(12),
  /* [100] */ MatcherIndex(0),
  /* [101] */ MatcherIndex(19),
  /* [102] */ MatcherIndex(0),
  /* [103] */ MatcherIndex(10),
  /* [104] */ MatcherIndex(8),
  /* [105] */ MatcherIndex(20),
  /* [106] */ MatcherIndex(0),
  /* [107] */ MatcherIndex(22),
  /* [108] */ MatcherIndex(0),
  /* [109] */ MatcherIndex(11),
  /* [110] */ MatcherIndex(8),
  /* [111] */ MatcherIndex(23),
  /* [112] */ MatcherIndex(0),
  /* [113] */ MatcherIndex(12),
  /* [114] */ MatcherIndex(8),
  /* [115] */ MatcherIndex(18),
  /* [116] */ MatcherIndex(0),
  /* [117] */ MatcherIndex(21),
  /* [118] */ MatcherIndex(0),
  /* [119] */ MatcherIndex(29),
  /* [120] */ MatcherIndex(0),
  /* [121] */ MatcherIndex(10),
  /* [122] */ MatcherIndex(6),
  /* [123] */ MatcherIndex(11),
  /* [124] */ MatcherIndex(6),
  /* [125] */ MatcherIndex(12),
  /* [126] */ MatcherIndex(4),
  /* [127] */ MatcherIndex(12),
  /* [128] */ MatcherIndex(6),
  /* [129] */ MatcherIndex(18),
  /* [130] */ MatcherIndex(8),
  /* [131] */ MatcherIndex(19),
  /* [132] */ MatcherIndex(8),
  /* [133] */ MatcherIndex(20),
  /* [134] */ MatcherIndex(8),
  /* [135] */ MatcherIndex(21),
  /* [136] */ MatcherIndex(8),
  /* [137] */ MatcherIndex(11),
  /* [138] */ MatcherIndex(4),
  /* [139] */ MatcherIndex(22),
  /* [140] */ MatcherIndex(8),
  /* [141] */ MatcherIndex(23),
  /* [142] */ MatcherIndex(8),
  /* [143] */ MatcherIndex(39),
  /* [144] */ MatcherIndex(7),
  /* [145] */ MatcherIndex(40),
  /* [146] */ MatcherIndex(16),
  /* [147] */ MatcherIndex(24),
  /* [148] */ MatcherIndex(25),
  /* [149] */ MatcherIndex(26),
  /* [150] */ MatcherIndex(27),
  /* [151] */ MatcherIndex(17),
  /* [152] */ MatcherIndex(28),
  /* [153] */ MatcherIndex(2),
  /* [154] */ MatcherIndex(38),
  /* [155] */ MatcherIndex(34),
  /* [156] */ MatcherIndex(35),
  /* [157] */ MatcherIndex(36),
  /* [158] */ MatcherIndex(37),
  /* [159] */ MatcherIndex(41),
  /* [160] */ MatcherIndex(42),
  /* [161] */ MatcherIndex(43),
};

static_assert(MatcherIndicesIndex::CanIndex(kMatcherIndices),
              "MatcherIndicesIndex is not large enough to index kMatcherIndices");

constexpr ParameterInfo kParameters[] = {
  {
    /* [0] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(148),
  },
  {
    /* [1] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(151),
  },
  {
    /* [2] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [3] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [4] */
    /* usage */ core::ParameterUsage::kDepthRef,
    /* matcher_indices */ MatcherIndicesIndex(22),
  },
  {
    /* [5] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [6] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [7] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(105),
  },
  {
    /* [8] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [9] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [10] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(1),
  },
  {
    /* [11] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [12] */
    /* usage */ core::ParameterUsage::kComponent,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [13] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(148),
  },
  {
    /* [14] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(151),
  },
  {
    /* [15] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [16] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [17] */
    /* usage */ core::ParameterUsage::kDepthRef,
    /* matcher_indices */ MatcherIndicesIndex(22),
  },
  {
    /* [18] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [19] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(133),
  },
  {
    /* [20] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [21] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [22] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [23] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [24] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [25] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(148),
  },
  {
    /* [26] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [27] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [28] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [29] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [30] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [31] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(133),
  },
  {
    /* [32] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [33] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [34] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [35] */
    /* usage */ core::ParameterUsage::kBias,
    /* matcher_indices */ MatcherIndicesIndex(155),
  },
  {
    /* [36] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [37] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(133),
  },
  {
    /* [38] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [39] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [40] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [41] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(156),
  },
  {
    /* [42] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [43] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(147),
  },
  {
    /* [44] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(151),
  },
  {
    /* [45] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [46] */
    /* usage */ core::ParameterUsage::kDepthRef,
    /* matcher_indices */ MatcherIndicesIndex(22),
  },
  {
    /* [47] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [48] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [49] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(150),
  },
  {
    /* [50] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(151),
  },
  {
    /* [51] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [52] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [53] */
    /* usage */ core::ParameterUsage::kDepthRef,
    /* matcher_indices */ MatcherIndicesIndex(22),
  },
  {
    /* [54] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [55] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(0),
  },
  {
    /* [56] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(5),
  },
  {
    /* [57] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [58] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [59] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [60] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(101),
  },
  {
    /* [61] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [62] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [63] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [64] */
    /* usage */ core::ParameterUsage::kComponent,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [65] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(111),
  },
  {
    /* [66] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [67] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [68] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(1),
  },
  {
    /* [69] */
    /* usage */ core::ParameterUsage::kComponent,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [70] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(148),
  },
  {
    /* [71] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [72] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [73] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [74] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [75] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(147),
  },
  {
    /* [76] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(151),
  },
  {
    /* [77] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [78] */
    /* usage */ core::ParameterUsage::kDepthRef,
    /* matcher_indices */ MatcherIndicesIndex(22),
  },
  {
    /* [79] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [80] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(133),
  },
  {
    /* [81] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [82] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [83] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [84] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [85] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(131),
  },
  {
    /* [86] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [87] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [88] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [89] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [90] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(135),
  },
  {
    /* [91] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [92] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [93] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [94] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(137),
  },
  {
    /* [95] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(141),
  },
  {
    /* [96] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [97] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [98] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [99] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [100] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(147),
  },
  {
    /* [101] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [102] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [103] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [104] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [105] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(150),
  },
  {
    /* [106] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [107] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [108] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [109] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [110] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(131),
  },
  {
    /* [111] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [112] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [113] */
    /* usage */ core::ParameterUsage::kBias,
    /* matcher_indices */ MatcherIndicesIndex(155),
  },
  {
    /* [114] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [115] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(135),
  },
  {
    /* [116] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [117] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [118] */
    /* usage */ core::ParameterUsage::kBias,
    /* matcher_indices */ MatcherIndicesIndex(155),
  },
  {
    /* [119] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(137),
  },
  {
    /* [120] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(141),
  },
  {
    /* [121] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [122] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [123] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [124] */
    /* usage */ core::ParameterUsage::kBias,
    /* matcher_indices */ MatcherIndicesIndex(155),
  },
  {
    /* [125] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(131),
  },
  {
    /* [126] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [127] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [128] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(156),
  },
  {
    /* [129] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [130] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(135),
  },
  {
    /* [131] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [132] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [133] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(157),
  },
  {
    /* [134] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(137),
  },
  {
    /* [135] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(141),
  },
  {
    /* [136] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [137] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [138] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [139] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(158),
  },
  {
    /* [140] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(149),
  },
  {
    /* [141] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(151),
  },
  {
    /* [142] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [143] */
    /* usage */ core::ParameterUsage::kDepthRef,
    /* matcher_indices */ MatcherIndicesIndex(22),
  },
  {
    /* [144] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [145] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(107),
  },
  {
    /* [146] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [147] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [148] */
    /* usage */ core::ParameterUsage::kComponent,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [149] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(147),
  },
  {
    /* [150] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [151] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [152] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [153] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(105),
  },
  {
    /* [154] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [155] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(1),
  },
  {
    /* [156] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(153),
  },
  {
    /* [157] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(148),
  },
  {
    /* [158] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [159] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [160] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(1),
  },
  {
    /* [161] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(131),
  },
  {
    /* [162] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [163] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(103),
  },
  {
    /* [164] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(46),
  },
  {
    /* [165] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(135),
  },
  {
    /* [166] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [167] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [168] */
    /* usage */ core::ParameterUsage::kOffset,
    /* matcher_indices */ MatcherIndicesIndex(137),
  },
  {
    /* [169] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(139),
  },
  {
    /* [170] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [171] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [172] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [173] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(149),
  },
  {
    /* [174] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [175] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [176] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(154),
  },
  {
    /* [177] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(139),
  },
  {
    /* [178] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [179] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [180] */
    /* usage */ core::ParameterUsage::kBias,
    /* matcher_indices */ MatcherIndicesIndex(155),
  },
  {
    /* [181] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(139),
  },
  {
    /* [182] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [183] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(109),
  },
  {
    /* [184] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(158),
  },
  {
    /* [185] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(63),
  },
  {
    /* [186] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(113),
  },
  {
    /* [187] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [188] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [189] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(75),
  },
  {
    /* [190] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(125),
  },
  {
    /* [191] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [192] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [193] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(87),
  },
  {
    /* [194] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(127),
  },
  {
    /* [195] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [196] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [197] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(0),
  },
  {
    /* [198] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [199] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [200] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(101),
  },
  {
    /* [201] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [202] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(1),
  },
  {
    /* [203] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(117),
  },
  {
    /* [204] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(123),
  },
  {
    /* [205] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(1),
  },
  {
    /* [206] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(119),
  },
  {
    /* [207] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [208] */
    /* usage */ core::ParameterUsage::kSampleIndex,
    /* matcher_indices */ MatcherIndicesIndex(1),
  },
  {
    /* [209] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(147),
  },
  {
    /* [210] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [211] */
    /* usage */ core::ParameterUsage::kLevel,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [212] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(152),
  },
  {
    /* [213] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [214] */
    /* usage */ core::ParameterUsage::kSampleIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [215] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(27),
  },
  {
    /* [216] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [217] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [218] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(39),
  },
  {
    /* [219] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [220] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [221] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(51),
  },
  {
    /* [222] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [223] */
    /* usage */ core::ParameterUsage::kArrayIndex,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [224] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(129),
  },
  {
    /* [225] */
    /* usage */ core::ParameterUsage::kSampler,
    /* matcher_indices */ MatcherIndicesIndex(146),
  },
  {
    /* [226] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(22),
  },
  {
    /* [227] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(57),
  },
  {
    /* [228] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(113),
  },
  {
    /* [229] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [230] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(60),
  },
  {
    /* [231] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(113),
  },
  {
    /* [232] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [233] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(66),
  },
  {
    /* [234] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(113),
  },
  {
    /* [235] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(123),
  },
  {
    /* [236] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(69),
  },
  {
    /* [237] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(125),
  },
  {
    /* [238] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [239] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(72),
  },
  {
    /* [240] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(125),
  },
  {
    /* [241] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [242] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(78),
  },
  {
    /* [243] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(125),
  },
  {
    /* [244] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(123),
  },
  {
    /* [245] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(81),
  },
  {
    /* [246] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(127),
  },
  {
    /* [247] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [248] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(84),
  },
  {
    /* [249] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(127),
  },
  {
    /* [250] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [251] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(90),
  },
  {
    /* [252] */
    /* usage */ core::ParameterUsage::kValue,
    /* matcher_indices */ MatcherIndicesIndex(127),
  },
  {
    /* [253] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(123),
  },
  {
    /* [254] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(0),
  },
  {
    /* [255] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [256] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(101),
  },
  {
    /* [257] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [258] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(105),
  },
  {
    /* [259] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [260] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(117),
  },
  {
    /* [261] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [262] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(107),
  },
  {
    /* [263] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [264] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(111),
  },
  {
    /* [265] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [266] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(147),
  },
  {
    /* [267] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [268] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(148),
  },
  {
    /* [269] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [270] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(149),
  },
  {
    /* [271] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [272] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(150),
  },
  {
    /* [273] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [274] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(12),
  },
  {
    /* [275] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [276] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(15),
  },
  {
    /* [277] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [278] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(18),
  },
  {
    /* [279] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [280] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(115),
  },
  {
    /* [281] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [282] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(21),
  },
  {
    /* [283] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [284] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(24),
  },
  {
    /* [285] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [286] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(30),
  },
  {
    /* [287] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(123),
  },
  {
    /* [288] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(33),
  },
  {
    /* [289] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [290] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(36),
  },
  {
    /* [291] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [292] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(42),
  },
  {
    /* [293] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(123),
  },
  {
    /* [294] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(45),
  },
  {
    /* [295] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [296] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(48),
  },
  {
    /* [297] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(121),
  },
  {
    /* [298] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(54),
  },
  {
    /* [299] */
    /* usage */ core::ParameterUsage::kCoords,
    /* matcher_indices */ MatcherIndicesIndex(123),
  },
  {
    /* [300] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(93),
  },
  {
    /* [301] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(93),
  },
  {
    /* [302] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(1),
  },
  {
    /* [303] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(93),
  },
  {
    /* [304] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(96),
  },
  {
    /* [305] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [306] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(3),
  },
  {
    /* [307] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(23),
  },
  {
    /* [308] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(93),
  },
  {
    /* [309] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(6),
  },
  {
    /* [310] */
    /* usage */ core::ParameterUsage::kTexture,
    /* matcher_indices */ MatcherIndicesIndex(9),
  },
  {
    /* [311] */
    /* usage */ core::ParameterUsage::kNone,
    /* matcher_indices */ MatcherIndicesIndex(4),
  },
};

static_assert(ParameterIndex::CanIndex(kParameters),
              "ParameterIndex is not large enough to index kParameters");

constexpr TemplateInfo kTemplates[] = {
  {
    /* [0] */
    /* name */ "T",
    /* matcher_indices */ MatcherIndicesIndex(145),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [1] */
    /* name */ "A",
    /* matcher_indices */ MatcherIndicesIndex(143),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [2] */
    /* name */ "L",
    /* matcher_indices */ MatcherIndicesIndex(143),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [3] */
    /* name */ "T",
    /* matcher_indices */ MatcherIndicesIndex(143),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [4] */
    /* name */ "S",
    /* matcher_indices */ MatcherIndicesIndex(144),
    /* kind */ TemplateInfo::Kind::kNumber,
  },
  {
    /* [5] */
    /* name */ "F",
    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* kind */ TemplateInfo::Kind::kNumber,
  },
  {
    /* [6] */
    /* name */ "A",
    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* kind */ TemplateInfo::Kind::kNumber,
  },
  {
    /* [7] */
    /* name */ "T",
    /* matcher_indices */ MatcherIndicesIndex(145),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [8] */
    /* name */ "L",
    /* matcher_indices */ MatcherIndicesIndex(143),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [9] */
    /* name */ "T",
    /* matcher_indices */ MatcherIndicesIndex(145),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [10] */
    /* name */ "S",
    /* matcher_indices */ MatcherIndicesIndex(143),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [11] */
    /* name */ "N",
    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* kind */ TemplateInfo::Kind::kNumber,
  },
  {
    /* [12] */
    /* name */ "T",
    /* matcher_indices */ MatcherIndicesIndex(159),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [13] */
    /* name */ "N",
    /* matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* kind */ TemplateInfo::Kind::kNumber,
  },
  {
    /* [14] */
    /* name */ "T",
    /* matcher_indices */ MatcherIndicesIndex(160),
    /* kind */ TemplateInfo::Kind::kType,
  },
  {
    /* [15] */
    /* name */ "T",
    /* matcher_indices */ MatcherIndicesIndex(161),
    /* kind */ TemplateInfo::Kind::kType,
  },
};

static_assert(TemplateIndex::CanIndex(kTemplates),
              "TemplateIndex is not large enough to index kTemplates");

constexpr OverloadInfo kOverloads[] = {
  {
    /* [0] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(224),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [1] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(85),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [2] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(161),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [3] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(19),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [4] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(80),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [5] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(90),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [6] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(165),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [7] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(169),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [8] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(95),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [9] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(100),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [10] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(149),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [11] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(25),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [12] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(70),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [13] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(173),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [14] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(105),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [15] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(85),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [16] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(85),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [17] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(19),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [18] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(19),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [19] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(90),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [20] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(90),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [21] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(169),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [22] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(95),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [23] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(100),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [24] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(100),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [25] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(25),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [26] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(25),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [27] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(173),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [28] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(105),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [29] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(110),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [30] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(110),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [31] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(31),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [32] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(31),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [33] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(115),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [34] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(115),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [35] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(177),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [36] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(120),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [37] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(125),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [38] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(125),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [39] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(37),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [40] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(37),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [41] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(130),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [42] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(130),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [43] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(181),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [44] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(135),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [45] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(280),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [46] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(7),
    /* parameters */ ParameterIndex(200),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [47] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 3,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(153),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [48] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(7),
    /* parameters */ ParameterIndex(203),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [49] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(9),
    /* parameters */ ParameterIndex(206),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [50] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(2),
    /* parameters */ ParameterIndex(209),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [51] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(157),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [52] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(10),
    /* parameters */ ParameterIndex(212),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [53] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(282),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [54] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(284),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [55] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(215),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [56] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(286),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [57] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(288),
    /* return_matcher_indices */ MatcherIndicesIndex(125),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [58] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(290),
    /* return_matcher_indices */ MatcherIndicesIndex(125),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [59] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(218),
    /* return_matcher_indices */ MatcherIndicesIndex(125),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [60] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(292),
    /* return_matcher_indices */ MatcherIndicesIndex(125),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [61] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(294),
    /* return_matcher_indices */ MatcherIndicesIndex(127),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [62] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(296),
    /* return_matcher_indices */ MatcherIndicesIndex(127),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [63] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(221),
    /* return_matcher_indices */ MatcherIndicesIndex(127),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [64] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(298),
    /* return_matcher_indices */ MatcherIndicesIndex(127),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [65] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(280),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [66] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(256),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [67] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(258),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [68] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(260),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [69] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(262),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [70] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(264),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [71] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(206),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [72] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(266),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [73] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(268),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [74] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(270),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [75] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(272),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [76] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(212),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [77] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(310),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [78] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(274),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [79] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(276),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [80] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(278),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [81] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(256),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [82] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(258),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [83] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(260),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [84] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(262),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [85] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(264),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [86] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(206),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [87] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(266),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [88] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(268),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [89] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(270),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [90] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(272),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [91] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(212),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [92] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(274),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [93] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(276),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [94] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(278),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [95] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(43),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [96] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(75),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [97] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(0),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [98] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(13),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [99] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(140),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [100] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(49),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [101] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(43),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [102] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(43),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [103] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(0),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [104] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 7,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(0),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [105] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(140),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [106] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(49),
    /* return_matcher_indices */ MatcherIndicesIndex(22),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [107] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(227),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [108] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(230),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [109] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(185),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [110] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(233),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [111] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(236),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [112] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(239),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [113] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(189),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [114] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(242),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [115] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(245),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [116] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(248),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [117] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(193),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [118] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(251),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [119] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(280),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [120] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(60),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [121] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(7),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [122] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(203),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [123] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(145),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [124] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(65),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [125] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(43),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [126] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(0),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [127] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(140),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [128] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(49),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [129] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(60),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [130] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(7),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [131] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(145),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [132] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(65),
    /* return_matcher_indices */ MatcherIndicesIndex(99),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [133] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(149),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [134] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(70),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [135] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(173),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [136] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(105),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [137] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(43),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [138] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(75),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [139] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(0),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [140] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 6,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(13),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [141] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 4,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(140),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [142] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(1),
    /* parameters */ ParameterIndex(49),
    /* return_matcher_indices */ MatcherIndicesIndex(113),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [143] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(7),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [144] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(65),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [145] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(0),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [146] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(49),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [147] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(276),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [148] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(310),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [149] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(274),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [150] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(276),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [151] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(278),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [152] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(12),
    /* parameters */ ParameterIndex(305),
    /* return_matcher_indices */ MatcherIndicesIndex(3),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [153] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(11),
    /* parameters */ ParameterIndex(300),
    /* return_matcher_indices */ MatcherIndicesIndex(93),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [154] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(11),
    /* parameters */ ParameterIndex(302),
    /* return_matcher_indices */ MatcherIndicesIndex(93),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [155] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(11),
    /* parameters */ ParameterIndex(301),
    /* return_matcher_indices */ MatcherIndicesIndex(93),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [156] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(260),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [157] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(5),
    /* parameters */ ParameterIndex(278),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [158] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(0),
    /* parameters */ ParameterIndex(206),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [159] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline, OverloadFlag::kMemberFunction),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(212),
    /* return_matcher_indices */ MatcherIndicesIndex(6),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [160] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(12),
    /* parameters */ ParameterIndex(306),
    /* return_matcher_indices */ MatcherIndicesIndex(3),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [161] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(11),
    /* parameters */ ParameterIndex(303),
    /* return_matcher_indices */ MatcherIndicesIndex(93),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [162] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(12),
    /* parameters */ ParameterIndex(57),
    /* return_matcher_indices */ MatcherIndicesIndex(3),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [163] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(11),
    /* parameters */ ParameterIndex(300),
    /* return_matcher_indices */ MatcherIndicesIndex(93),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [164] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(14),
    /* parameters */ ParameterIndex(57),
    /* return_matcher_indices */ MatcherIndicesIndex(3),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [165] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(13),
    /* parameters */ ParameterIndex(308),
    /* return_matcher_indices */ MatcherIndicesIndex(93),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [166] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 5,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(3),
    /* parameters */ ParameterIndex(55),
    /* return_matcher_indices */ MatcherIndicesIndex(4),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [167] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(3),
    /* parameters */ ParameterIndex(197),
    /* return_matcher_indices */ MatcherIndicesIndex(3),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [168] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(3),
    /* parameters */ ParameterIndex(254),
    /* return_matcher_indices */ MatcherIndicesIndex(3),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [169] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 3,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(3),
    /* parameters */ ParameterIndex(197),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [170] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(11),
    /* parameters */ ParameterIndex(300),
    /* return_matcher_indices */ MatcherIndicesIndex(1),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [171] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 2,
    /* templates */ TemplateIndex(11),
    /* parameters */ ParameterIndex(300),
    /* return_matcher_indices */ MatcherIndicesIndex(1),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [172] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(58),
    /* return_matcher_indices */ MatcherIndicesIndex(/* invalid */),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [173] */
    /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 1,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 0,
    /* templates */ TemplateIndex(/* invalid */),
    /* parameters */ ParameterIndex(311),
    /* return_matcher_indices */ MatcherIndicesIndex(121),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
  {
    /* [174] */
    /* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
    /* num_parameters */ 2,
    /* num_explicit_templates */ 0,
    /* num_templates   */ 1,
    /* templates */ TemplateIndex(15),
    /* parameters */ ParameterIndex(305),
    /* return_matcher_indices */ MatcherIndicesIndex(3),
    /* const_eval_fn */ ConstEvalFunctionIndex(/* invalid */),
  },
};

static_assert(OverloadIndex::CanIndex(kOverloads),
              "OverloadIndex is not large enough to index kOverloads");

constexpr IntrinsicInfo kBuiltins[] = {
  {
    /* [0] */
    /* fn atomic_compare_exchange_weak_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, ptr<function, T, read_write>, T, u32, u32) -> bool */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(166),
  },
  {
    /* [1] */
    /* fn atomic_exchange_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(167),
  },
  {
    /* [2] */
    /* fn atomic_fetch_add_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(167),
  },
  {
    /* [3] */
    /* fn atomic_fetch_and_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(167),
  },
  {
    /* [4] */
    /* fn atomic_fetch_max_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(167),
  },
  {
    /* [5] */
    /* fn atomic_fetch_min_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(167),
  },
  {
    /* [6] */
    /* fn atomic_fetch_or_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(167),
  },
  {
    /* [7] */
    /* fn atomic_fetch_sub_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(167),
  },
  {
    /* [8] */
    /* fn atomic_fetch_xor_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(167),
  },
  {
    /* [9] */
    /* fn atomic_load_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, u32) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(168),
  },
  {
    /* [10] */
    /* fn atomic_store_explicit[T : iu32, S : workgroup_or_storage](ptr<S, atomic<T>, read_write>, T, u32) */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(169),
  },
  {
    /* [11] */
    /* fn fence[F : texel_format, A : access](texture: texture_storage_1d<F, A>) */
    /* fn fence[F : texel_format, A : access](texture: texture_storage_2d<F, A>) */
    /* fn fence[F : texel_format, A : access](texture: texture_storage_2d_array<F, A>) */
    /* fn fence[F : texel_format, A : access](texture: texture_storage_3d<F, A>) */
    /* num overloads */ 4,
    /* overloads */ OverloadIndex(148),
  },
  {
    /* [12] */
    /* fn gather[T : fiu32](texture: texture_2d<T>, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>, component: u32) -> vec4<T> */
    /* fn gather[T : fiu32, A : iu32](texture: texture_2d_array<T>, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>, component: u32) -> vec4<T> */
    /* fn gather[T : fiu32](texture: texture_cube<T>, sampler: sampler, coords: vec3<f32>, component: u32) -> vec4<T> */
    /* fn gather[T : fiu32, A : iu32](texture: texture_cube_array<T>, sampler: sampler, coords: vec3<f32>, array_index: A, component: u32) -> vec4<T> */
    /* fn gather(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn gather[A : iu32](texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn gather(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> vec4<f32> */
    /* fn gather[A : iu32](texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A) -> vec4<f32> */
    /* num overloads */ 8,
    /* overloads */ OverloadIndex(129),
  },
  {
    /* [13] */
    /* fn gather_compare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> vec4<f32> */
    /* fn gather_compare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn gather_compare[A : iu32](texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32) -> vec4<f32> */
    /* fn gather_compare[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 gather_compare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> vec4<f32> */
    /* fn gather_compare[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(137),
  },
  {
    /* [14] */
    /* fn get_width[T : fiu32](texture: texture_1d<T>) -> u32 */
    /* fn get_width[T : fiu32](texture: texture_2d<T>, u32) -> u32 */
    /* fn get_width[T : fiu32](texture: texture_2d_array<T>, u32) -> u32 */
    /* fn get_width[T : fiu32](texture: texture_3d<T>, u32) -> u32 */
    /* fn get_width[T : fiu32](texture: texture_cube<T>, u32) -> u32 */
    /* fn get_width[T : fiu32](texture: texture_cube_array<T>, u32) -> u32 */
    /* fn get_width[T : fiu32](texture: texture_multisampled_2d<T>) -> u32 */
    /* fn get_width(texture: texture_depth_2d, u32) -> u32 */
    /* fn get_width(texture: texture_depth_2d_array, u32) -> u32 */
    /* fn get_width(texture: texture_depth_cube, u32) -> u32 */
    /* fn get_width(texture: texture_depth_cube_array, u32) -> u32 */
    /* fn get_width(texture: texture_depth_multisampled_2d) -> u32 */
    /* fn get_width[F : texel_format, A : access](texture: texture_storage_1d<F, A>) -> u32 */
    /* fn get_width[F : texel_format, A : access](texture: texture_storage_2d<F, A>, u32) -> u32 */
    /* fn get_width[F : texel_format, A : access](texture: texture_storage_2d_array<F, A>, u32) -> u32 */
    /* fn get_width[F : texel_format, A : access](texture: texture_storage_3d<F, A>, u32) -> u32 */
    /* num overloads */ 16,
    /* overloads */ OverloadIndex(65),
  },
  {
    /* [15] */
    /* fn get_height[T : fiu32](texture: texture_2d<T>, u32) -> u32 */
    /* fn get_height[T : fiu32](texture: texture_2d_array<T>, u32) -> u32 */
    /* fn get_height[T : fiu32](texture: texture_3d<T>, u32) -> u32 */
    /* fn get_height[T : fiu32](texture: texture_cube<T>, u32) -> u32 */
    /* fn get_height[T : fiu32](texture: texture_cube_array<T>, u32) -> u32 */
    /* fn get_height[T : fiu32](texture: texture_multisampled_2d<T>) -> u32 */
    /* fn get_height(texture: texture_depth_2d, u32) -> u32 */
    /* fn get_height(texture: texture_depth_2d_array, u32) -> u32 */
    /* fn get_height(texture: texture_depth_cube, u32) -> u32 */
    /* fn get_height(texture: texture_depth_cube_array, u32) -> u32 */
    /* fn get_height(texture: texture_depth_multisampled_2d) -> u32 */
    /* fn get_height[F : texel_format, A : access](texture: texture_storage_2d<F, A>, u32) -> u32 */
    /* fn get_height[F : texel_format, A : access](texture: texture_storage_2d_array<F, A>, u32) -> u32 */
    /* fn get_height[F : texel_format, A : access](texture: texture_storage_3d<F, A>, u32) -> u32 */
    /* num overloads */ 14,
    /* overloads */ OverloadIndex(81),
  },
  {
    /* [16] */
    /* fn get_depth[T : fiu32](texture: texture_3d<T>, u32) -> u32 */
    /* fn get_depth[F : texel_format, A : access](texture: texture_storage_3d<F, A>, u32) -> u32 */
    /* num overloads */ 2,
    /* overloads */ OverloadIndex(156),
  },
  {
    /* [17] */
    /* fn get_array_size[T : fiu32](texture: texture_2d_array<T>) -> u32 */
    /* fn get_array_size[T : fiu32](texture: texture_cube_array<T>) -> u32 */
    /* fn get_array_size(texture: texture_depth_2d_array) -> u32 */
    /* fn get_array_size(texture: texture_depth_cube_array) -> u32 */
    /* fn get_array_size[F : texel_format, A : access](texture: texture_storage_2d_array<F, A>) -> u32 */
    /* num overloads */ 5,
    /* overloads */ OverloadIndex(143),
  },
  {
    /* [18] */
    /* fn get_num_mip_levels[T : fiu32](texture: texture_1d<T>) -> u32 */
    /* fn get_num_mip_levels[T : fiu32](texture: texture_2d<T>) -> u32 */
    /* fn get_num_mip_levels[T : fiu32](texture: texture_2d_array<T>) -> u32 */
    /* fn get_num_mip_levels[T : fiu32](texture: texture_3d<T>) -> u32 */
    /* fn get_num_mip_levels[T : fiu32](texture: texture_cube<T>) -> u32 */
    /* fn get_num_mip_levels[T : fiu32](texture: texture_cube_array<T>) -> u32 */
    /* fn get_num_mip_levels(texture: texture_depth_2d) -> u32 */
    /* fn get_num_mip_levels(texture: texture_depth_2d_array) -> u32 */
    /* fn get_num_mip_levels(texture: texture_depth_cube) -> u32 */
    /* fn get_num_mip_levels(texture: texture_depth_cube_array) -> u32 */
    /* num overloads */ 10,
    /* overloads */ OverloadIndex(119),
  },
  {
    /* [19] */
    /* fn get_num_samples[T : fiu32](texture: texture_multisampled_2d<T>) -> u32 */
    /* fn get_num_samples(texture: texture_depth_multisampled_2d) -> u32 */
    /* num overloads */ 2,
    /* overloads */ OverloadIndex(158),
  },
  {
    /* [20] */
    /* fn read[T : fiu32](texture: texture_1d<T>, coords: u32) -> vec4<T> */
    /* fn read[T : fiu32, L : iu32](texture: texture_2d<T>, coords: vec2<u32>, level: L) -> vec4<T> */
    /* fn read[T : fiu32, A : iu32, L : iu32](texture: texture_2d_array<T>, coords: vec2<u32>, array_index: A, level: L) -> vec4<T> */
    /* fn read[T : fiu32, L : iu32](texture: texture_3d<T>, coords: vec3<u32>, level: L) -> vec4<T> */
    /* fn read[T : fiu32, S : iu32](texture: texture_multisampled_2d<T>, coords: vec2<u32>, sample_index: S) -> vec4<T> */
    /* fn read[L : iu32](texture: texture_depth_2d, coords: vec2<u32>, level: L) -> f32 */
    /* fn read[A : iu32, L : iu32](texture: texture_depth_2d_array, coords: vec2<u32>, array_index: A, level: L) -> f32 */
    /* fn read[S : iu32](texture: texture_depth_multisampled_2d, coords: vec2<u32>, sample_index: S) -> f32 */
    /* fn read(texture: texture_storage_1d<f32_texel_format, readable>, coords: u32) -> vec4<f32> */
    /* fn read(texture: texture_storage_2d<f32_texel_format, readable>, coords: vec2<u32>) -> vec4<f32> */
    /* fn read[A : iu32](texture: texture_storage_2d_array<f32_texel_format, readable>, coords: vec2<u32>, array_index: A) -> vec4<f32> */
    /* fn read(texture: texture_storage_3d<f32_texel_format, readable>, coords: vec3<u32>) -> vec4<f32> */
    /* fn read(texture: texture_storage_1d<i32_texel_format, readable>, coords: u32) -> vec4<i32> */
    /* fn read(texture: texture_storage_2d<i32_texel_format, readable>, coords: vec2<u32>) -> vec4<i32> */
    /* fn read[A : iu32](texture: texture_storage_2d_array<i32_texel_format, readable>, coords: vec2<u32>, array_index: A) -> vec4<i32> */
    /* fn read(texture: texture_storage_3d<i32_texel_format, readable>, coords: vec3<u32>) -> vec4<i32> */
    /* fn read(texture: texture_storage_1d<u32_texel_format, readable>, coords: u32) -> vec4<u32> */
    /* fn read(texture: texture_storage_2d<u32_texel_format, readable>, coords: vec2<u32>) -> vec4<u32> */
    /* fn read[A : iu32](texture: texture_storage_2d_array<u32_texel_format, readable>, coords: vec2<u32>, array_index: A) -> vec4<u32> */
    /* fn read(texture: texture_storage_3d<u32_texel_format, readable>, coords: vec3<u32>) -> vec4<u32> */
    /* num overloads */ 20,
    /* overloads */ OverloadIndex(45),
  },
  {
    /* [21] */
    /* fn sample(texture: texture_1d<f32>, sampler: sampler, coords: f32) -> vec4<f32> */
    /* fn sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>) -> vec4<f32> */
    /* fn sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn sample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32> */
    /* fn sample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, @const offset: vec3<i32>) -> vec4<f32> */
    /* fn sample(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A) -> vec4<f32> */
    /* fn sample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>) -> f32 */
    /* fn sample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, @const offset: vec2<i32>) -> f32 */
    /* fn sample[A : iu32](texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A) -> f32 */
    /* fn sample[A : iu32](texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, @const offset: vec2<i32>) -> f32 */
    /* fn sample(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>) -> f32 */
    /* fn sample[A : iu32](texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A) -> f32 */
    /* fn sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: level) -> vec4<f32> */
    /* fn sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: level, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: level) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: level, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn sample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: level) -> vec4<f32> */
    /* fn sample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: level, @const offset: vec3<i32>) -> vec4<f32> */
    /* fn sample(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, level: level) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, level: level) -> vec4<f32> */
    /* fn sample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: level) -> f32 */
    /* fn sample(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: level, @const offset: vec2<i32>) -> f32 */
    /* fn sample[A : iu32](texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: level) -> f32 */
    /* fn sample[A : iu32](texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: level, @const offset: vec2<i32>) -> f32 */
    /* fn sample(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>, level: level) -> f32 */
    /* fn sample[A : iu32](texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A, level: level) -> f32 */
    /* fn sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: bias) -> vec4<f32> */
    /* fn sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, bias: bias, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, bias: bias) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, bias: bias, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn sample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, bias: bias) -> vec4<f32> */
    /* fn sample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, bias: bias, @const offset: vec3<i32>) -> vec4<f32> */
    /* fn sample(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, bias: bias) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, bias: bias) -> vec4<f32> */
    /* fn sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, gradient2d) -> vec4<f32> */
    /* fn sample(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, gradient2d, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, gradient2d) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, gradient2d, @const offset: vec2<i32>) -> vec4<f32> */
    /* fn sample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, gradient3d) -> vec4<f32> */
    /* fn sample(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, gradient3d, @const offset: vec3<i32>) -> vec4<f32> */
    /* fn sample(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, gradientcube) -> vec4<f32> */
    /* fn sample[A : iu32](texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, gradientcube) -> vec4<f32> */
    /* num overloads */ 45,
    /* overloads */ OverloadIndex(0),
  },
  {
    /* [22] */
    /* fn sample_compare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32) -> f32 */
    /* fn sample_compare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, @const offset: vec2<i32>) -> f32 */
    /* fn sample_compare[A : iu32](texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32) -> f32 */
    /* fn sample_compare[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 sample_compare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32) -> f32 */
    /* fn sample_compare[A : iu32](texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: A, depth_ref: f32) -> f32 */
    /* fn sample_compare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, level: level) -> f32 */
    /* fn sample_compare(texture: texture_depth_2d, sampler: sampler_comparison, coords: vec2<f32>, depth_ref: f32, level: level, @const offset: vec2<i32>) -> f32 */
    /* fn sample_compare[A : iu32](texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32, level: level) -> f32 */
    /* fn sample_compare[A : iu32](texture: texture_depth_2d_array, sampler: sampler_comparison, coords: vec2<f32>, array_index: A, depth_ref: f32, level: level, @const offset: vec2<i32>) -> f32 */
    /* fn sample_compare(texture: texture_depth_cube, sampler: sampler_comparison, coords: vec3<f32>, depth_ref: f32, level: level) -> f32 */
    /* fn sample_compare[A : iu32](texture: texture_depth_cube_array, sampler: sampler_comparison, coords: vec3<f32>, array_index: A, depth_ref: f32, level: level) -> f32 */
    /* num overloads */ 12,
    /* overloads */ OverloadIndex(95),
  },
  {
    /* [23] */
    /* fn write(texture: texture_storage_1d<f32_texel_format, writable>, value: vec4<f32>, coords: u32) */
    /* fn write(texture: texture_storage_2d<f32_texel_format, writable>, value: vec4<f32>, coords: vec2<u32>) */
    /* fn write[A : iu32](texture: texture_storage_2d_array<f32_texel_format, writable>, value: vec4<f32>, coords: vec2<u32>, array_index: A) */
    /* fn write(texture: texture_storage_3d<f32_texel_format, writable>, value: vec4<f32>, coords: vec3<u32>) */
    /* fn write(texture: texture_storage_1d<i32_texel_format, writable>, value: vec4<i32>, coords: u32) */
    /* fn write(texture: texture_storage_2d<i32_texel_format, writable>, value: vec4<i32>, coords: vec2<u32>) */
    /* fn write[A : iu32](texture: texture_storage_2d_array<i32_texel_format, writable>, value: vec4<i32>, coords: vec2<u32>, array_index: A) */
    /* fn write(texture: texture_storage_3d<i32_texel_format, writable>, value: vec4<i32>, coords: vec3<u32>) */
    /* fn write(texture: texture_storage_1d<u32_texel_format, writable>, value: vec4<u32>, coords: u32) */
    /* fn write(texture: texture_storage_2d<u32_texel_format, writable>, value: vec4<u32>, coords: vec2<u32>) */
    /* fn write[A : iu32](texture: texture_storage_2d_array<u32_texel_format, writable>, value: vec4<u32>, coords: vec2<u32>, array_index: A) */
    /* fn write(texture: texture_storage_3d<u32_texel_format, writable>, value: vec4<u32>, coords: vec3<u32>) */
    /* num overloads */ 12,
    /* overloads */ OverloadIndex(107),
  },
  {
    /* [24] */
    /* fn distance[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(170),
  },
  {
    /* [25] */
    /* fn dot[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(170),
  },
  {
    /* [26] */
    /* fn fmod[T : f32_f16](T, T) -> T */
    /* fn fmod[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> vec<N, T> */
    /* fn fmod[N : num, T : f32_f16](T, vec<N, T>) -> vec<N, T> */
    /* fn fmod[N : num, T : f32_f16](vec<N, T>, T) -> vec<N, T> */
    /* num overloads */ 4,
    /* overloads */ OverloadIndex(152),
  },
  {
    /* [27] */
    /* fn frexp[T : f32_f16](T, i32) -> T */
    /* fn frexp[N : num, T : f32_f16](vec<N, T>, vec<N, i32>) -> vec<N, T> */
    /* num overloads */ 2,
    /* overloads */ OverloadIndex(160),
  },
  {
    /* [28] */
    /* fn length[N : num, T : f32_f16](vec<N, T>) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(171),
  },
  {
    /* [29] */
    /* fn modf[T : f32_f16](T, T) -> T */
    /* fn modf[N : num, T : f32_f16](vec<N, T>, vec<N, T>) -> vec<N, T> */
    /* num overloads */ 2,
    /* overloads */ OverloadIndex(152),
  },
  {
    /* [30] */
    /* fn sign[T : f32_f16](T) -> T */
    /* fn sign[N : num, T : f32_f16](vec<N, T>) -> vec<N, T> */
    /* num overloads */ 2,
    /* overloads */ OverloadIndex(162),
  },
  {
    /* [31] */
    /* fn threadgroup_barrier(u32) */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(172),
  },
  {
    /* [32] */
    /* fn simd_ballot(bool) -> vec2<u32> */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(173),
  },
  {
    /* [33] */
    /* fn quad_shuffle_xor[T : fiu32_f16](T, u32) -> T */
    /* fn quad_shuffle_xor[N : num, T : fiu32_f16](vec<N, T>, u32) -> vec<N, T> */
    /* num overloads */ 2,
    /* overloads */ OverloadIndex(164),
  },
};

constexpr IntrinsicInfo kBinaryOperators[] = {
  {
    /* [0] */
    /* op +[T : iu8](T, T) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(174),
  },
  {
    /* [1] */
    /* op *[T : iu8](T, T) -> T */
    /* num overloads */ 1,
    /* overloads */ OverloadIndex(174),
  },
};
constexpr uint8_t kBinaryOperatorPlus = 0;
constexpr uint8_t kBinaryOperatorStar = 1;

// clang-format on

}  // anonymous namespace

const core::intrinsic::TableData Dialect::kData{
    /* templates */ kTemplates,
    /* type_matcher_indices */ kMatcherIndices,
    /* type_matchers */ kTypeMatchers,
    /* number_matchers */ kNumberMatchers,
    /* parameters */ kParameters,
    /* overloads */ kOverloads,
    /* const_eval_functions */ Empty,
    /* ctor_conv */ Empty,
    /* builtins */ kBuiltins,
    /* binary '+' */ kBinaryOperators[kBinaryOperatorPlus],
    /* binary '-' */ tint::core::intrinsic::kNoOverloads,
    /* binary '*' */ kBinaryOperators[kBinaryOperatorStar],
    /* binary '/' */ tint::core::intrinsic::kNoOverloads,
    /* binary '%' */ tint::core::intrinsic::kNoOverloads,
    /* binary '^' */ tint::core::intrinsic::kNoOverloads,
    /* binary '&' */ tint::core::intrinsic::kNoOverloads,
    /* binary '|' */ tint::core::intrinsic::kNoOverloads,
    /* binary '&&' */ tint::core::intrinsic::kNoOverloads,
    /* binary '||' */ tint::core::intrinsic::kNoOverloads,
    /* binary '==' */ tint::core::intrinsic::kNoOverloads,
    /* binary '!=' */ tint::core::intrinsic::kNoOverloads,
    /* binary '<' */ tint::core::intrinsic::kNoOverloads,
    /* binary '>' */ tint::core::intrinsic::kNoOverloads,
    /* binary '<=' */ tint::core::intrinsic::kNoOverloads,
    /* binary '>=' */ tint::core::intrinsic::kNoOverloads,
    /* binary '<<' */ tint::core::intrinsic::kNoOverloads,
    /* binary '>>' */ tint::core::intrinsic::kNoOverloads,
    /* unary '!' */ tint::core::intrinsic::kNoOverloads,
    /* unary '~' */ tint::core::intrinsic::kNoOverloads,
    /* unary '-' */ tint::core::intrinsic::kNoOverloads,
    /* unary '*' */ tint::core::intrinsic::kNoOverloads,
    /* unary '&' */ tint::core::intrinsic::kNoOverloads,
};

}  // namespace tint::msl::intrinsic
