| // Copyright 2023 The Dawn & Tint Authors |
| // |
| // Redistribution and use in source and binary forms, with or without |
| // modification, are permitted provided that the following conditions are met: |
| // |
| // 1. Redistributions of source code must retain the above copyright notice, this |
| // list of conditions and the following disclaimer. |
| // |
| // 2. Redistributions in binary form must reproduce the above copyright notice, |
| // this list of conditions and the following disclaimer in the documentation |
| // and/or other materials provided with the distribution. |
| // |
| // 3. Neither the name of the copyright holder nor the names of its |
| // contributors may be used to endorse or promote products derived from |
| // this software without specific prior written permission. |
| // |
| // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // File generated by 'tools/src/cmd/gen' using the template: |
| // src/tint/lang/wgsl/intrinsic/data.cc.tmpl |
| // |
| // To regenerate run: './tools/run gen' |
| // |
| // Do not modify this file directly |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| #include <limits> |
| #include <string> |
| |
| #include "src/tint/lang/core/intrinsic/type_matchers.h" |
| #include "src/tint/lang/wgsl/intrinsic/dialect.h" |
| #include "src/tint/utils/text/string_stream.h" |
| |
| namespace tint::wgsl::intrinsic { |
| |
| using namespace tint::core::intrinsic; // NOLINT(build/namespaces) |
| |
| namespace { |
| |
| using ConstEvalFunctionIndex = tint::core::intrinsic::ConstEvalFunctionIndex; |
| using IntrinsicInfo = tint::core::intrinsic::IntrinsicInfo; |
| using MatchState = tint::core::intrinsic::MatchState; |
| using Number = tint::core::intrinsic::Number; |
| using NumberMatcher = tint::core::intrinsic::NumberMatcher; |
| using NumberMatcherIndex = tint::core::intrinsic::NumberMatcherIndex; |
| using NumberMatcherIndicesIndex = tint::core::intrinsic::NumberMatcherIndicesIndex; |
| using OverloadFlag = tint::core::intrinsic::OverloadFlag; |
| using OverloadFlags = tint::core::intrinsic::OverloadFlags; |
| using OverloadIndex = tint::core::intrinsic::OverloadIndex; |
| using OverloadInfo = tint::core::intrinsic::OverloadInfo; |
| using ParameterIndex = tint::core::intrinsic::ParameterIndex; |
| using ParameterInfo = tint::core::intrinsic::ParameterInfo; |
| using StringStream = tint::StringStream; |
| using TemplateNumberIndex = tint::core::intrinsic::TemplateNumberIndex; |
| using TemplateNumberInfo = tint::core::intrinsic::TemplateNumberInfo; |
| using TemplateTypeIndex = tint::core::intrinsic::TemplateTypeIndex; |
| using TemplateTypeInfo = tint::core::intrinsic::TemplateTypeInfo; |
| using Type = tint::core::type::Type; |
| using TypeMatcher = tint::core::intrinsic::TypeMatcher; |
| using TypeMatcherIndex = tint::core::intrinsic::TypeMatcherIndex; |
| using TypeMatcherIndicesIndex = tint::core::intrinsic::TypeMatcherIndicesIndex; |
| |
| template <size_t N> |
| using TemplateNumberMatcher = tint::core::intrinsic::TemplateNumberMatcher<N>; |
| |
| template <size_t N> |
| using TemplateTypeMatcher = tint::core::intrinsic::TemplateTypeMatcher<N>; |
| |
| // clang-format off |
| |
| /// TypeMatcher for 'type bool' |
| constexpr TypeMatcher kBoolMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchBool(state, ty)) { |
| return nullptr; |
| } |
| return BuildBool(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "bool"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type ia' |
| constexpr TypeMatcher kIaMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchIa(state, ty)) { |
| return nullptr; |
| } |
| return BuildIa(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| ss << "abstract-int"; |
| return ss.str(); |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type fa' |
| constexpr TypeMatcher kFaMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchFa(state, ty)) { |
| return nullptr; |
| } |
| return BuildFa(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| ss << "abstract-float"; |
| return ss.str(); |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type i32' |
| constexpr TypeMatcher kI32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchI32(state, ty)) { |
| return nullptr; |
| } |
| return BuildI32(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "i32"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type u32' |
| constexpr TypeMatcher kU32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchU32(state, ty)) { |
| return nullptr; |
| } |
| return BuildU32(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "u32"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type f32' |
| constexpr TypeMatcher kF32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchF32(state, ty)) { |
| return nullptr; |
| } |
| return BuildF32(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "f32"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type f16' |
| constexpr TypeMatcher kF16Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchF16(state, ty)) { |
| return nullptr; |
| } |
| return BuildF16(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "f16"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type vec2' |
| constexpr TypeMatcher kVec2Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchVec2(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildVec2(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "vec2<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type vec3' |
| constexpr TypeMatcher kVec3Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchVec3(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildVec3(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "vec3<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type vec4' |
| constexpr TypeMatcher kVec4Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchVec4(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildVec4(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "vec4<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat2x2' |
| constexpr TypeMatcher kMat2X2Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat2X2(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat2X2(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat2x2<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat2x3' |
| constexpr TypeMatcher kMat2X3Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat2X3(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat2X3(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat2x3<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat2x4' |
| constexpr TypeMatcher kMat2X4Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat2X4(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat2X4(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat2x4<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat3x2' |
| constexpr TypeMatcher kMat3X2Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat3X2(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat3X2(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat3x2<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat3x3' |
| constexpr TypeMatcher kMat3X3Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat3X3(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat3X3(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat3x3<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat3x4' |
| constexpr TypeMatcher kMat3X4Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat3X4(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat3X4(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat3x4<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat4x2' |
| constexpr TypeMatcher kMat4X2Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat4X2(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat4X2(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat4x2<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat4x3' |
| constexpr TypeMatcher kMat4X3Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat4X3(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat4X3(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat4x3<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat4x4' |
| constexpr TypeMatcher kMat4X4Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchMat4X4(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat4X4(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "mat4x4<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type vec' |
| constexpr TypeMatcher kVecMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number N = Number::invalid; |
| const Type* T = nullptr; |
| if (!MatchVec(state, ty, N, T)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildVec(state, ty, N, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string N = state->NumName(); |
| const std::string T = state->TypeName(); |
| StringStream ss; |
| ss << "vec" << N << "<" << T << ">"; |
| return ss.str(); |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type mat' |
| constexpr TypeMatcher kMatMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number N = Number::invalid; |
| Number M = Number::invalid; |
| const Type* T = nullptr; |
| if (!MatchMat(state, ty, N, M, T)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| M = state.Num(M); |
| if (!M.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildMat(state, ty, N, M, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string N = state->NumName(); |
| const std::string M = state->NumName(); |
| const std::string T = state->TypeName(); |
| StringStream ss; |
| ss << "mat" << N << "x" << M << "<" << T << ">"; |
| return ss.str(); |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type ptr' |
| constexpr TypeMatcher kPtrMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number S = Number::invalid; |
| const Type* T = nullptr; |
| Number A = Number::invalid; |
| if (!MatchPtr(state, ty, S, T, A)) { |
| return nullptr; |
| } |
| S = state.Num(S); |
| if (!S.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return BuildPtr(state, ty, S, T, A); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string S = state->NumName(); |
| const std::string T = state->TypeName(); |
| const std::string A = state->NumName(); |
| return "ptr<" + S + ", " + T + ", " + A + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type atomic' |
| constexpr TypeMatcher kAtomicMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchAtomic(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildAtomic(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "atomic<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type array' |
| constexpr TypeMatcher kArrayMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchArray(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildArray(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "array<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type sampler' |
| constexpr TypeMatcher kSamplerMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchSampler(state, ty)) { |
| return nullptr; |
| } |
| return BuildSampler(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "sampler"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type sampler_comparison' |
| constexpr TypeMatcher kSamplerComparisonMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchSamplerComparison(state, ty)) { |
| return nullptr; |
| } |
| return BuildSamplerComparison(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "sampler_comparison"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_1d' |
| constexpr TypeMatcher kTexture1DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchTexture1D(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildTexture1D(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "texture_1d<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_2d' |
| constexpr TypeMatcher kTexture2DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchTexture2D(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildTexture2D(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "texture_2d<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_2d_array' |
| constexpr TypeMatcher kTexture2DArrayMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchTexture2DArray(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildTexture2DArray(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "texture_2d_array<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_3d' |
| constexpr TypeMatcher kTexture3DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchTexture3D(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildTexture3D(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "texture_3d<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_cube' |
| constexpr TypeMatcher kTextureCubeMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchTextureCube(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildTextureCube(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "texture_cube<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_cube_array' |
| constexpr TypeMatcher kTextureCubeArrayMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchTextureCubeArray(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildTextureCubeArray(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "texture_cube_array<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_multisampled_2d' |
| constexpr TypeMatcher kTextureMultisampled2DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchTextureMultisampled2D(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildTextureMultisampled2D(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "texture_multisampled_2d<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_depth_2d' |
| constexpr TypeMatcher kTextureDepth2DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchTextureDepth2D(state, ty)) { |
| return nullptr; |
| } |
| return BuildTextureDepth2D(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "texture_depth_2d"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_depth_2d_array' |
| constexpr TypeMatcher kTextureDepth2DArrayMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchTextureDepth2DArray(state, ty)) { |
| return nullptr; |
| } |
| return BuildTextureDepth2DArray(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "texture_depth_2d_array"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_depth_cube' |
| constexpr TypeMatcher kTextureDepthCubeMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchTextureDepthCube(state, ty)) { |
| return nullptr; |
| } |
| return BuildTextureDepthCube(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "texture_depth_cube"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_depth_cube_array' |
| constexpr TypeMatcher kTextureDepthCubeArrayMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchTextureDepthCubeArray(state, ty)) { |
| return nullptr; |
| } |
| return BuildTextureDepthCubeArray(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "texture_depth_cube_array"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_depth_multisampled_2d' |
| constexpr TypeMatcher kTextureDepthMultisampled2DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchTextureDepthMultisampled2D(state, ty)) { |
| return nullptr; |
| } |
| return BuildTextureDepthMultisampled2D(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "texture_depth_multisampled_2d"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_storage_1d' |
| constexpr TypeMatcher kTextureStorage1DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!MatchTextureStorage1D(state, ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return BuildTextureStorage1D(state, ty, F, A); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string F = state->NumName(); |
| const std::string A = state->NumName(); |
| return "texture_storage_1d<" + F + ", " + A + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_storage_2d' |
| constexpr TypeMatcher kTextureStorage2DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!MatchTextureStorage2D(state, ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return BuildTextureStorage2D(state, ty, F, A); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string F = state->NumName(); |
| const std::string A = state->NumName(); |
| return "texture_storage_2d<" + F + ", " + A + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_storage_2d_array' |
| constexpr TypeMatcher kTextureStorage2DArrayMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!MatchTextureStorage2DArray(state, ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return BuildTextureStorage2DArray(state, ty, F, A); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string F = state->NumName(); |
| const std::string A = state->NumName(); |
| return "texture_storage_2d_array<" + F + ", " + A + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_storage_3d' |
| constexpr TypeMatcher kTextureStorage3DMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!MatchTextureStorage3D(state, ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return BuildTextureStorage3D(state, ty, F, A); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string F = state->NumName(); |
| const std::string A = state->NumName(); |
| return "texture_storage_3d<" + F + ", " + A + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type texture_external' |
| constexpr TypeMatcher kTextureExternalMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (!MatchTextureExternal(state, ty)) { |
| return nullptr; |
| } |
| return BuildTextureExternal(state, ty); |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "texture_external"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type packedVec3' |
| constexpr TypeMatcher kPackedVec3Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchPackedVec3(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildPackedVec3(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "packedVec3<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type __modf_result' |
| constexpr TypeMatcher kModfResultMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchModfResult(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildModfResult(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| StringStream ss; |
| ss << "__modf_result_" << T; |
| return ss.str(); |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type __modf_result_vec' |
| constexpr TypeMatcher kModfResultVecMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number N = Number::invalid; |
| const Type* T = nullptr; |
| if (!MatchModfResultVec(state, ty, N, T)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildModfResultVec(state, ty, N, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string N = state->NumName(); |
| const std::string T = state->TypeName(); |
| StringStream ss; |
| ss << "__modf_result_vec" << N << "_" << T; |
| return ss.str(); |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type __frexp_result' |
| constexpr TypeMatcher kFrexpResultMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchFrexpResult(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildFrexpResult(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| StringStream ss; |
| ss << "__frexp_result_" << T; |
| return ss.str(); |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type __frexp_result_vec' |
| constexpr TypeMatcher kFrexpResultVecMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| Number N = Number::invalid; |
| const Type* T = nullptr; |
| if (!MatchFrexpResultVec(state, ty, N, T)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildFrexpResultVec(state, ty, N, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string N = state->NumName(); |
| const std::string T = state->TypeName(); |
| StringStream ss; |
| ss << "__frexp_result_vec" << N << "_" << T; |
| return ss.str(); |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'type __atomic_compare_exchange_result' |
| constexpr TypeMatcher kAtomicCompareExchangeResultMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| const Type* T = nullptr; |
| if (!MatchAtomicCompareExchangeResult(state, ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return BuildAtomicCompareExchangeResult(state, ty, T); |
| }, |
| /* string */ [](MatchState* state) -> std::string { |
| const std::string T = state->TypeName(); |
| return "__atomic_compare_exchange_result<" + T + ">"; |
| } |
| }; |
| |
| |
| /// TypeMatcher for 'match scalar' |
| constexpr TypeMatcher kScalarMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| if (MatchBool(state, ty)) { |
| return BuildBool(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match concrete_scalar' |
| constexpr TypeMatcher kConcreteScalarMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| if (MatchBool(state, ty)) { |
| return BuildBool(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match scalar_no_f32' |
| constexpr TypeMatcher kScalarNoF32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| if (MatchBool(state, ty)) { |
| return BuildBool(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match scalar_no_f16' |
| constexpr TypeMatcher kScalarNoF16Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchBool(state, ty)) { |
| return BuildBool(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match scalar_no_i32' |
| constexpr TypeMatcher kScalarNoI32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| if (MatchBool(state, ty)) { |
| return BuildBool(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match scalar_no_u32' |
| constexpr TypeMatcher kScalarNoU32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| if (MatchBool(state, ty)) { |
| return BuildBool(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kBoolMatcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match scalar_no_bool' |
| constexpr TypeMatcher kScalarNoBoolMatcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kIaMatcher.string(nullptr) << ", " << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kF16Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fia_fiu32_f16' |
| constexpr TypeMatcher kFiaFiu32F16Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kFaMatcher.string(nullptr) << ", " << kIaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fia_fi32_f16' |
| constexpr TypeMatcher kFiaFi32F16Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kFaMatcher.string(nullptr) << ", " << kIaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fia_fiu32' |
| constexpr TypeMatcher kFiaFiu32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kFaMatcher.string(nullptr) << ", " << kIaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fa_f32' |
| constexpr TypeMatcher kFaF32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kFaMatcher.string(nullptr) << " or " << kF32Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fa_f32_f16' |
| constexpr TypeMatcher kFaF32F16Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchFa(state, ty)) { |
| return BuildFa(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kFaMatcher.string(nullptr) << ", " << kF32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match ia_iu32' |
| constexpr TypeMatcher kIaIu32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kIaMatcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match ia_i32' |
| constexpr TypeMatcher kIaI32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchIa(state, ty)) { |
| return BuildIa(state, ty); |
| } |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kIaMatcher.string(nullptr) << " or " << kI32Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fiu32_f16' |
| constexpr TypeMatcher kFiu32F16Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << ", " << kU32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fiu32' |
| constexpr TypeMatcher kFiu32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fi32_f16' |
| constexpr TypeMatcher kFi32F16Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kF32Matcher.string(nullptr) << ", " << kI32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match fi32' |
| constexpr TypeMatcher kFi32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kF32Matcher.string(nullptr) << " or " << kI32Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match f32_f16' |
| constexpr TypeMatcher kF32F16Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchF32(state, ty)) { |
| return BuildF32(state, ty); |
| } |
| if (MatchF16(state, ty)) { |
| return BuildF16(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kF32Matcher.string(nullptr) << " or " << kF16Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// TypeMatcher for 'match iu32' |
| constexpr TypeMatcher kIu32Matcher { |
| /* match */ [](MatchState& state, const Type* ty) -> const Type* { |
| if (MatchI32(state, ty)) { |
| return BuildI32(state, ty); |
| } |
| if (MatchU32(state, ty)) { |
| return BuildU32(state, ty); |
| } |
| return nullptr; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| StringStream ss; |
| // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support |
| // template arguments, nor can they match sub-types. As such, they have no use for the MatchState. |
| ss << kI32Matcher.string(nullptr) << " or " << kU32Matcher.string(nullptr); |
| return ss.str(); |
| } |
| }; |
| |
| /// EnumMatcher for 'match f32_texel_format' |
| constexpr NumberMatcher kF32TexelFormatMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| switch (static_cast<core::TexelFormat>(number.Value())) { |
| case core::TexelFormat::kBgra8Unorm: |
| case core::TexelFormat::kRgba8Unorm: |
| case core::TexelFormat::kRgba8Snorm: |
| case core::TexelFormat::kRgba16Float: |
| case core::TexelFormat::kR32Float: |
| case core::TexelFormat::kRg32Float: |
| case core::TexelFormat::kRgba32Float: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "bgra8unorm, rgba8unorm, rgba8snorm, rgba16float, r32float, rg32float or rgba32float"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match i32_texel_format' |
| constexpr NumberMatcher kI32TexelFormatMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| switch (static_cast<core::TexelFormat>(number.Value())) { |
| case core::TexelFormat::kRgba8Sint: |
| case core::TexelFormat::kRgba16Sint: |
| case core::TexelFormat::kR32Sint: |
| case core::TexelFormat::kRg32Sint: |
| case core::TexelFormat::kRgba32Sint: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "rgba8sint, rgba16sint, r32sint, rg32sint or rgba32sint"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match u32_texel_format' |
| constexpr NumberMatcher kU32TexelFormatMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| switch (static_cast<core::TexelFormat>(number.Value())) { |
| case core::TexelFormat::kRgba8Uint: |
| case core::TexelFormat::kRgba16Uint: |
| case core::TexelFormat::kR32Uint: |
| case core::TexelFormat::kRg32Uint: |
| case core::TexelFormat::kRgba32Uint: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "rgba8uint, rgba16uint, r32uint, rg32uint or rgba32uint"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match write' |
| constexpr NumberMatcher kWriteMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::Access::kWrite)) { |
| return Number(static_cast<uint32_t>(core::Access::kWrite)); |
| } |
| return Number::invalid; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "write"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match read_write' |
| constexpr NumberMatcher kReadWriteMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::Access::kReadWrite)) { |
| return Number(static_cast<uint32_t>(core::Access::kReadWrite)); |
| } |
| return Number::invalid; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "read_write"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match readable' |
| constexpr NumberMatcher kReadableMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| switch (static_cast<core::Access>(number.Value())) { |
| case core::Access::kRead: |
| case core::Access::kReadWrite: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "read or read_write"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match writable' |
| constexpr NumberMatcher kWritableMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| switch (static_cast<core::Access>(number.Value())) { |
| case core::Access::kWrite: |
| case core::Access::kReadWrite: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "write or read_write"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match function_private_workgroup' |
| constexpr NumberMatcher kFunctionPrivateWorkgroupMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| switch (static_cast<core::AddressSpace>(number.Value())) { |
| case core::AddressSpace::kFunction: |
| case core::AddressSpace::kPrivate: |
| case core::AddressSpace::kWorkgroup: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "function, private or workgroup"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match workgroup_or_storage' |
| constexpr NumberMatcher kWorkgroupOrStorageMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| switch (static_cast<core::AddressSpace>(number.Value())) { |
| case core::AddressSpace::kWorkgroup: |
| case core::AddressSpace::kStorage: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "workgroup or storage"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match storage' |
| constexpr NumberMatcher kStorageMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::AddressSpace::kStorage)) { |
| return Number(static_cast<uint32_t>(core::AddressSpace::kStorage)); |
| } |
| return Number::invalid; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "storage"; |
| } |
| }; |
| |
| /// EnumMatcher for 'match workgroup' |
| constexpr NumberMatcher kWorkgroupMatcher { |
| /* match */ [](MatchState&, Number number) -> Number { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(core::AddressSpace::kWorkgroup)) { |
| return Number(static_cast<uint32_t>(core::AddressSpace::kWorkgroup)); |
| } |
| return Number::invalid; |
| }, |
| /* string */ [](MatchState*) -> std::string { |
| return "workgroup"; |
| } |
| }; |
| |
| /// Type and number matchers |
| |
| /// The template types, types, and type matchers |
| constexpr TypeMatcher kTypeMatchers[] = { |
| /* [0] */ TemplateTypeMatcher<0>::matcher, |
| /* [1] */ TemplateTypeMatcher<1>::matcher, |
| /* [2] */ TemplateTypeMatcher<2>::matcher, |
| /* [3] */ TemplateTypeMatcher<3>::matcher, |
| /* [4] */ kBoolMatcher, |
| /* [5] */ kIaMatcher, |
| /* [6] */ kFaMatcher, |
| /* [7] */ kI32Matcher, |
| /* [8] */ kU32Matcher, |
| /* [9] */ kF32Matcher, |
| /* [10] */ kF16Matcher, |
| /* [11] */ kVec2Matcher, |
| /* [12] */ kVec3Matcher, |
| /* [13] */ kVec4Matcher, |
| /* [14] */ kMat2X2Matcher, |
| /* [15] */ kMat2X3Matcher, |
| /* [16] */ kMat2X4Matcher, |
| /* [17] */ kMat3X2Matcher, |
| /* [18] */ kMat3X3Matcher, |
| /* [19] */ kMat3X4Matcher, |
| /* [20] */ kMat4X2Matcher, |
| /* [21] */ kMat4X3Matcher, |
| /* [22] */ kMat4X4Matcher, |
| /* [23] */ kVecMatcher, |
| /* [24] */ kMatMatcher, |
| /* [25] */ kPtrMatcher, |
| /* [26] */ kAtomicMatcher, |
| /* [27] */ kArrayMatcher, |
| /* [28] */ kSamplerMatcher, |
| /* [29] */ kSamplerComparisonMatcher, |
| /* [30] */ kTexture1DMatcher, |
| /* [31] */ kTexture2DMatcher, |
| /* [32] */ kTexture2DArrayMatcher, |
| /* [33] */ kTexture3DMatcher, |
| /* [34] */ kTextureCubeMatcher, |
| /* [35] */ kTextureCubeArrayMatcher, |
| /* [36] */ kTextureMultisampled2DMatcher, |
| /* [37] */ kTextureDepth2DMatcher, |
| /* [38] */ kTextureDepth2DArrayMatcher, |
| /* [39] */ kTextureDepthCubeMatcher, |
| /* [40] */ kTextureDepthCubeArrayMatcher, |
| /* [41] */ kTextureDepthMultisampled2DMatcher, |
| /* [42] */ kTextureStorage1DMatcher, |
| /* [43] */ kTextureStorage2DMatcher, |
| /* [44] */ kTextureStorage2DArrayMatcher, |
| /* [45] */ kTextureStorage3DMatcher, |
| /* [46] */ kTextureExternalMatcher, |
| /* [47] */ kPackedVec3Matcher, |
| /* [48] */ kModfResultMatcher, |
| /* [49] */ kModfResultVecMatcher, |
| /* [50] */ kFrexpResultMatcher, |
| /* [51] */ kFrexpResultVecMatcher, |
| /* [52] */ kAtomicCompareExchangeResultMatcher, |
| /* [53] */ kScalarMatcher, |
| /* [54] */ kConcreteScalarMatcher, |
| /* [55] */ kScalarNoF32Matcher, |
| /* [56] */ kScalarNoF16Matcher, |
| /* [57] */ kScalarNoI32Matcher, |
| /* [58] */ kScalarNoU32Matcher, |
| /* [59] */ kScalarNoBoolMatcher, |
| /* [60] */ kFiaFiu32F16Matcher, |
| /* [61] */ kFiaFi32F16Matcher, |
| /* [62] */ kFiaFiu32Matcher, |
| /* [63] */ kFaF32Matcher, |
| /* [64] */ kFaF32F16Matcher, |
| /* [65] */ kIaIu32Matcher, |
| /* [66] */ kIaI32Matcher, |
| /* [67] */ kFiu32F16Matcher, |
| /* [68] */ kFiu32Matcher, |
| /* [69] */ kFi32F16Matcher, |
| /* [70] */ kFi32Matcher, |
| /* [71] */ kF32F16Matcher, |
| /* [72] */ kIu32Matcher, |
| }; |
| |
| /// The template numbers, and number matchers |
| constexpr NumberMatcher kNumberMatchers[] = { |
| /* [0] */ TemplateNumberMatcher<0>::matcher, |
| /* [1] */ TemplateNumberMatcher<1>::matcher, |
| /* [2] */ TemplateNumberMatcher<2>::matcher, |
| /* [3] */ kF32TexelFormatMatcher, |
| /* [4] */ kI32TexelFormatMatcher, |
| /* [5] */ kU32TexelFormatMatcher, |
| /* [6] */ kWriteMatcher, |
| /* [7] */ kReadWriteMatcher, |
| /* [8] */ kReadableMatcher, |
| /* [9] */ kWritableMatcher, |
| /* [10] */ kFunctionPrivateWorkgroupMatcher, |
| /* [11] */ kWorkgroupOrStorageMatcher, |
| /* [12] */ kStorageMatcher, |
| /* [13] */ kWorkgroupMatcher, |
| }; |
| |
| constexpr TypeMatcherIndex kTypeMatcherIndices[] = { |
| /* [0] */ TypeMatcherIndex(25), |
| /* [1] */ TypeMatcherIndex(27), |
| /* [2] */ TypeMatcherIndex(0), |
| /* [3] */ TypeMatcherIndex(25), |
| /* [4] */ TypeMatcherIndex(26), |
| /* [5] */ TypeMatcherIndex(0), |
| /* [6] */ TypeMatcherIndex(23), |
| /* [7] */ TypeMatcherIndex(0), |
| /* [8] */ TypeMatcherIndex(23), |
| /* [9] */ TypeMatcherIndex(4), |
| /* [10] */ TypeMatcherIndex(12), |
| /* [11] */ TypeMatcherIndex(0), |
| /* [12] */ TypeMatcherIndex(24), |
| /* [13] */ TypeMatcherIndex(0), |
| /* [14] */ TypeMatcherIndex(23), |
| /* [15] */ TypeMatcherIndex(9), |
| /* [16] */ TypeMatcherIndex(50), |
| /* [17] */ TypeMatcherIndex(0), |
| /* [18] */ TypeMatcherIndex(51), |
| /* [19] */ TypeMatcherIndex(0), |
| /* [20] */ TypeMatcherIndex(23), |
| /* [21] */ TypeMatcherIndex(1), |
| /* [22] */ TypeMatcherIndex(48), |
| /* [23] */ TypeMatcherIndex(0), |
| /* [24] */ TypeMatcherIndex(49), |
| /* [25] */ TypeMatcherIndex(0), |
| /* [26] */ TypeMatcherIndex(11), |
| /* [27] */ TypeMatcherIndex(9), |
| /* [28] */ TypeMatcherIndex(13), |
| /* [29] */ TypeMatcherIndex(9), |
| /* [30] */ TypeMatcherIndex(25), |
| /* [31] */ TypeMatcherIndex(0), |
| /* [32] */ TypeMatcherIndex(30), |
| /* [33] */ TypeMatcherIndex(0), |
| /* [34] */ TypeMatcherIndex(11), |
| /* [35] */ TypeMatcherIndex(8), |
| /* [36] */ TypeMatcherIndex(31), |
| /* [37] */ TypeMatcherIndex(0), |
| /* [38] */ TypeMatcherIndex(32), |
| /* [39] */ TypeMatcherIndex(0), |
| /* [40] */ TypeMatcherIndex(12), |
| /* [41] */ TypeMatcherIndex(8), |
| /* [42] */ TypeMatcherIndex(33), |
| /* [43] */ TypeMatcherIndex(0), |
| /* [44] */ TypeMatcherIndex(34), |
| /* [45] */ TypeMatcherIndex(0), |
| /* [46] */ TypeMatcherIndex(35), |
| /* [47] */ TypeMatcherIndex(0), |
| /* [48] */ TypeMatcherIndex(36), |
| /* [49] */ TypeMatcherIndex(0), |
| /* [50] */ TypeMatcherIndex(13), |
| /* [51] */ TypeMatcherIndex(0), |
| /* [52] */ TypeMatcherIndex(11), |
| /* [53] */ TypeMatcherIndex(7), |
| /* [54] */ TypeMatcherIndex(12), |
| /* [55] */ TypeMatcherIndex(9), |
| /* [56] */ TypeMatcherIndex(30), |
| /* [57] */ TypeMatcherIndex(9), |
| /* [58] */ TypeMatcherIndex(31), |
| /* [59] */ TypeMatcherIndex(9), |
| /* [60] */ TypeMatcherIndex(32), |
| /* [61] */ TypeMatcherIndex(9), |
| /* [62] */ TypeMatcherIndex(33), |
| /* [63] */ TypeMatcherIndex(9), |
| /* [64] */ TypeMatcherIndex(12), |
| /* [65] */ TypeMatcherIndex(7), |
| /* [66] */ TypeMatcherIndex(34), |
| /* [67] */ TypeMatcherIndex(9), |
| /* [68] */ TypeMatcherIndex(35), |
| /* [69] */ TypeMatcherIndex(9), |
| /* [70] */ TypeMatcherIndex(11), |
| /* [71] */ TypeMatcherIndex(0), |
| /* [72] */ TypeMatcherIndex(13), |
| /* [73] */ TypeMatcherIndex(7), |
| /* [74] */ TypeMatcherIndex(13), |
| /* [75] */ TypeMatcherIndex(8), |
| /* [76] */ TypeMatcherIndex(11), |
| /* [77] */ TypeMatcherIndex(1), |
| /* [78] */ TypeMatcherIndex(12), |
| /* [79] */ TypeMatcherIndex(1), |
| /* [80] */ TypeMatcherIndex(52), |
| /* [81] */ TypeMatcherIndex(0), |
| /* [82] */ TypeMatcherIndex(23), |
| /* [83] */ TypeMatcherIndex(8), |
| /* [84] */ TypeMatcherIndex(11), |
| /* [85] */ TypeMatcherIndex(5), |
| /* [86] */ TypeMatcherIndex(11), |
| /* [87] */ TypeMatcherIndex(10), |
| /* [88] */ TypeMatcherIndex(11), |
| /* [89] */ TypeMatcherIndex(4), |
| /* [90] */ TypeMatcherIndex(12), |
| /* [91] */ TypeMatcherIndex(5), |
| /* [92] */ TypeMatcherIndex(12), |
| /* [93] */ TypeMatcherIndex(10), |
| /* [94] */ TypeMatcherIndex(12), |
| /* [95] */ TypeMatcherIndex(4), |
| /* [96] */ TypeMatcherIndex(13), |
| /* [97] */ TypeMatcherIndex(5), |
| /* [98] */ TypeMatcherIndex(13), |
| /* [99] */ TypeMatcherIndex(1), |
| /* [100] */ TypeMatcherIndex(13), |
| /* [101] */ TypeMatcherIndex(10), |
| /* [102] */ TypeMatcherIndex(13), |
| /* [103] */ TypeMatcherIndex(4), |
| /* [104] */ TypeMatcherIndex(14), |
| /* [105] */ TypeMatcherIndex(0), |
| /* [106] */ TypeMatcherIndex(14), |
| /* [107] */ TypeMatcherIndex(10), |
| /* [108] */ TypeMatcherIndex(14), |
| /* [109] */ TypeMatcherIndex(9), |
| /* [110] */ TypeMatcherIndex(15), |
| /* [111] */ TypeMatcherIndex(0), |
| /* [112] */ TypeMatcherIndex(15), |
| /* [113] */ TypeMatcherIndex(10), |
| /* [114] */ TypeMatcherIndex(15), |
| /* [115] */ TypeMatcherIndex(9), |
| /* [116] */ TypeMatcherIndex(16), |
| /* [117] */ TypeMatcherIndex(0), |
| /* [118] */ TypeMatcherIndex(16), |
| /* [119] */ TypeMatcherIndex(10), |
| /* [120] */ TypeMatcherIndex(16), |
| /* [121] */ TypeMatcherIndex(9), |
| /* [122] */ TypeMatcherIndex(17), |
| /* [123] */ TypeMatcherIndex(0), |
| /* [124] */ TypeMatcherIndex(17), |
| /* [125] */ TypeMatcherIndex(10), |
| /* [126] */ TypeMatcherIndex(17), |
| /* [127] */ TypeMatcherIndex(9), |
| /* [128] */ TypeMatcherIndex(18), |
| /* [129] */ TypeMatcherIndex(0), |
| /* [130] */ TypeMatcherIndex(18), |
| /* [131] */ TypeMatcherIndex(10), |
| /* [132] */ TypeMatcherIndex(18), |
| /* [133] */ TypeMatcherIndex(9), |
| /* [134] */ TypeMatcherIndex(19), |
| /* [135] */ TypeMatcherIndex(0), |
| /* [136] */ TypeMatcherIndex(19), |
| /* [137] */ TypeMatcherIndex(10), |
| /* [138] */ TypeMatcherIndex(19), |
| /* [139] */ TypeMatcherIndex(9), |
| /* [140] */ TypeMatcherIndex(20), |
| /* [141] */ TypeMatcherIndex(0), |
| /* [142] */ TypeMatcherIndex(20), |
| /* [143] */ TypeMatcherIndex(10), |
| /* [144] */ TypeMatcherIndex(20), |
| /* [145] */ TypeMatcherIndex(9), |
| /* [146] */ TypeMatcherIndex(21), |
| /* [147] */ TypeMatcherIndex(0), |
| /* [148] */ TypeMatcherIndex(21), |
| /* [149] */ TypeMatcherIndex(10), |
| /* [150] */ TypeMatcherIndex(21), |
| /* [151] */ TypeMatcherIndex(9), |
| /* [152] */ TypeMatcherIndex(22), |
| /* [153] */ TypeMatcherIndex(0), |
| /* [154] */ TypeMatcherIndex(22), |
| /* [155] */ TypeMatcherIndex(10), |
| /* [156] */ TypeMatcherIndex(22), |
| /* [157] */ TypeMatcherIndex(9), |
| /* [158] */ TypeMatcherIndex(47), |
| /* [159] */ TypeMatcherIndex(0), |
| /* [160] */ TypeMatcherIndex(37), |
| /* [161] */ TypeMatcherIndex(38), |
| /* [162] */ TypeMatcherIndex(39), |
| /* [163] */ TypeMatcherIndex(40), |
| /* [164] */ TypeMatcherIndex(41), |
| /* [165] */ TypeMatcherIndex(42), |
| /* [166] */ TypeMatcherIndex(43), |
| /* [167] */ TypeMatcherIndex(44), |
| /* [168] */ TypeMatcherIndex(45), |
| /* [169] */ TypeMatcherIndex(46), |
| /* [170] */ TypeMatcherIndex(28), |
| /* [171] */ TypeMatcherIndex(2), |
| /* [172] */ TypeMatcherIndex(29), |
| /* [173] */ TypeMatcherIndex(3), |
| }; |
| |
| static_assert(TypeMatcherIndex::CanIndex(kTypeMatcherIndices), |
| "TypeMatcherIndex is not large enough to index kTypeMatcherIndices"); |
| |
| constexpr NumberMatcherIndex kNumberMatcherIndices[] = { |
| /* [0] */ NumberMatcherIndex(12), |
| /* [1] */ NumberMatcherIndex(0), |
| /* [2] */ NumberMatcherIndex(0), |
| /* [3] */ NumberMatcherIndex(1), |
| /* [4] */ NumberMatcherIndex(0), |
| /* [5] */ NumberMatcherIndex(7), |
| /* [6] */ NumberMatcherIndex(13), |
| /* [7] */ NumberMatcherIndex(7), |
| /* [8] */ NumberMatcherIndex(3), |
| /* [9] */ NumberMatcherIndex(9), |
| /* [10] */ NumberMatcherIndex(4), |
| /* [11] */ NumberMatcherIndex(9), |
| /* [12] */ NumberMatcherIndex(5), |
| /* [13] */ NumberMatcherIndex(9), |
| /* [14] */ NumberMatcherIndex(3), |
| /* [15] */ NumberMatcherIndex(8), |
| /* [16] */ NumberMatcherIndex(4), |
| /* [17] */ NumberMatcherIndex(8), |
| /* [18] */ NumberMatcherIndex(5), |
| /* [19] */ NumberMatcherIndex(8), |
| /* [20] */ NumberMatcherIndex(1), |
| /* [21] */ NumberMatcherIndex(2), |
| /* [22] */ NumberMatcherIndex(0), |
| /* [23] */ NumberMatcherIndex(2), |
| }; |
| |
| static_assert(NumberMatcherIndex::CanIndex(kNumberMatcherIndices), |
| "NumberMatcherIndex is not large enough to index kNumberMatcherIndices"); |
| |
| constexpr ParameterInfo kParameters[] = { |
| { |
| /* [0] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(3), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(4), |
| }, |
| { |
| /* [1] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [2] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [3] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [4] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [5] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [6] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [7] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [8] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [9] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [10] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [11] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [12] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [13] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [14] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [15] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [16] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [17] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(35), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [18] */ |
| /* usage */ core::ParameterUsage::kNone, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(35), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [19] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(60), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [20] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [21] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [22] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [23] */ |
| /* usage */ core::ParameterUsage::kDdx, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [24] */ |
| /* usage */ core::ParameterUsage::kDdy, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [25] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [26] */ |
| /* usage */ core::ParameterUsage::kComponent, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(21), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [27] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(38), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [28] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [29] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [30] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(171), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [31] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [32] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(161), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [33] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(172), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [34] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [35] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [36] */ |
| /* usage */ core::ParameterUsage::kDepthRef, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(15), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [37] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [38] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(60), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [39] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [40] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [41] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [42] */ |
| /* usage */ core::ParameterUsage::kBias, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(15), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [43] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [44] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(58), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [45] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [46] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [47] */ |
| /* usage */ core::ParameterUsage::kDdx, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [48] */ |
| /* usage */ core::ParameterUsage::kDdy, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [49] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [50] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(62), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [51] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [52] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [53] */ |
| /* usage */ core::ParameterUsage::kDdx, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [54] */ |
| /* usage */ core::ParameterUsage::kDdy, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [55] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(64), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [56] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(68), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [57] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [58] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [59] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [60] */ |
| /* usage */ core::ParameterUsage::kDdx, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [61] */ |
| /* usage */ core::ParameterUsage::kDdy, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [62] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(60), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [63] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [64] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [65] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [66] */ |
| /* usage */ core::ParameterUsage::kLevel, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(15), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [67] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [68] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(161), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [69] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [70] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [71] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [72] */ |
| /* usage */ core::ParameterUsage::kLevel, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(21), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [73] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [74] */ |
| /* usage */ core::ParameterUsage::kComponent, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(21), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [75] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(36), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [76] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [77] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [78] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [79] */ |
| /* usage */ core::ParameterUsage::kComponent, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(21), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [80] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(46), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [81] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [82] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [83] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(171), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [84] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(161), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [85] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [86] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [87] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [88] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [89] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(160), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [90] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(172), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [91] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [92] */ |
| /* usage */ core::ParameterUsage::kDepthRef, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(15), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [93] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [94] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(163), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [95] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(172), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [96] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [97] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [98] */ |
| /* usage */ core::ParameterUsage::kDepthRef, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(15), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [99] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(60), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [100] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [101] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [102] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [103] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [104] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(58), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [105] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [106] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(26), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [107] */ |
| /* usage */ core::ParameterUsage::kBias, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(15), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [108] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(52), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [109] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(62), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [110] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [111] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [112] */ |
| /* usage */ core::ParameterUsage::kBias, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(15), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [113] */ |
| /* usage */ core::ParameterUsage::kOffset, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(64), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [114] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(68), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [115] */ |
| /* usage */ core::ParameterUsage::kSampler, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(170), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [116] */ |
| /* usage */ core::ParameterUsage::kCoords, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(54), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [117] */ |
| /* usage */ core::ParameterUsage::kArrayIndex, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(2), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [118] */ |
| /* usage */ core::ParameterUsage::kBias, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(15), |
| /* number_matcher_indices */ NumberMatcherIndicesIndex(/* invalid */), |
| }, |
| { |
| /* [119] */ |
| /* usage */ core::ParameterUsage::kTexture, |
| /* type_matcher_indices */ TypeMatcherIndicesIndex(66), |
| |