| // Copyright 2021 The Tint Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| // File generated by tools/intrinsic-gen |
| // using the template: |
| // src/intrinsic_table.inl.tmpl |
| // and the intrinsic defintion file: |
| // src/intrinsics.def |
| // |
| // Do not modify this file directly |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| // clang-format off |
| |
| /// TypeMatcher for 'type bool' |
| /// @see src/intrinsics.def:68:6 |
| class Bool : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Bool::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_bool(ty)) { |
| return nullptr; |
| } |
| return build_bool(state); |
| } |
| |
| std::string Bool::String(MatchState&) const { |
| return "bool"; |
| } |
| |
| /// TypeMatcher for 'type f32' |
| /// @see src/intrinsics.def:69:6 |
| class F32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* F32::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_f32(ty)) { |
| return nullptr; |
| } |
| return build_f32(state); |
| } |
| |
| std::string F32::String(MatchState&) const { |
| return "f32"; |
| } |
| |
| /// TypeMatcher for 'type i32' |
| /// @see src/intrinsics.def:70:6 |
| class I32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* I32::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_i32(ty)) { |
| return nullptr; |
| } |
| return build_i32(state); |
| } |
| |
| std::string I32::String(MatchState&) const { |
| return "i32"; |
| } |
| |
| /// TypeMatcher for 'type u32' |
| /// @see src/intrinsics.def:71:6 |
| class U32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* U32::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_u32(ty)) { |
| return nullptr; |
| } |
| return build_u32(state); |
| } |
| |
| std::string U32::String(MatchState&) const { |
| return "u32"; |
| } |
| |
| /// TypeMatcher for 'type vec2' |
| /// @see src/intrinsics.def:72:6 |
| class Vec2 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Vec2::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_vec2(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_vec2(state, T); |
| } |
| |
| std::string Vec2::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "vec2<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type vec3' |
| /// @see src/intrinsics.def:73:6 |
| class Vec3 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Vec3::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_vec3(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_vec3(state, T); |
| } |
| |
| std::string Vec3::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "vec3<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type vec4' |
| /// @see src/intrinsics.def:74:6 |
| class Vec4 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Vec4::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_vec4(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_vec4(state, T); |
| } |
| |
| std::string Vec4::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "vec4<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type vec' |
| /// @see src/intrinsics.def:75:37 |
| class Vec : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Vec::Match(MatchState& state, const sem::Type* ty) const { |
| Number N = Number::invalid; |
| const sem::Type* T = nullptr; |
| if (!match_vec(ty, N, T)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_vec(state, N, T); |
| } |
| |
| std::string Vec::String(MatchState& state) const { |
| const std::string N = state.NumName(); |
| const std::string T = state.TypeName(); |
| std::stringstream ss; |
| ss << "vec" << N << "<" << T << ">"; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type mat' |
| /// @see src/intrinsics.def:76:37 |
| class Mat : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Mat::Match(MatchState& state, const sem::Type* ty) const { |
| Number N = Number::invalid; |
| Number M = Number::invalid; |
| const sem::Type* T = nullptr; |
| if (!match_mat(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 build_mat(state, N, M, T); |
| } |
| |
| std::string Mat::String(MatchState& state) const { |
| const std::string N = state.NumName(); |
| const std::string M = state.NumName(); |
| const std::string T = state.TypeName(); |
| std::stringstream ss; |
| ss << "mat" << N << "x" << M << "<" << T << ">"; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type ptr' |
| /// @see src/intrinsics.def:77:6 |
| class Ptr : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Ptr::Match(MatchState& state, const sem::Type* ty) const { |
| Number S = Number::invalid; |
| const sem::Type* T = nullptr; |
| Number A = Number::invalid; |
| if (!match_ptr(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 build_ptr(state, S, T, A); |
| } |
| |
| std::string Ptr::String(MatchState& state) const { |
| 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' |
| /// @see src/intrinsics.def:78:6 |
| class Atomic : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Atomic::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_atomic(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_atomic(state, T); |
| } |
| |
| std::string Atomic::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "atomic<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type array' |
| /// @see src/intrinsics.def:79:6 |
| class Array : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Array::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_array(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_array(state, T); |
| } |
| |
| std::string Array::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "array<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type sampler' |
| /// @see src/intrinsics.def:80:6 |
| class Sampler : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Sampler::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_sampler(ty)) { |
| return nullptr; |
| } |
| return build_sampler(state); |
| } |
| |
| std::string Sampler::String(MatchState&) const { |
| return "sampler"; |
| } |
| |
| /// TypeMatcher for 'type sampler_comparison' |
| /// @see src/intrinsics.def:81:6 |
| class SamplerComparison : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* SamplerComparison::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_sampler_comparison(ty)) { |
| return nullptr; |
| } |
| return build_sampler_comparison(state); |
| } |
| |
| std::string SamplerComparison::String(MatchState&) const { |
| return "sampler_comparison"; |
| } |
| |
| /// TypeMatcher for 'type texture_1d' |
| /// @see src/intrinsics.def:82:6 |
| class Texture1D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Texture1D::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_1d(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_1d(state, T); |
| } |
| |
| std::string Texture1D::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "texture_1d<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_2d' |
| /// @see src/intrinsics.def:83:6 |
| class Texture2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Texture2D::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_2d(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_2d(state, T); |
| } |
| |
| std::string Texture2D::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "texture_2d<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_2d_array' |
| /// @see src/intrinsics.def:84:6 |
| class Texture2DArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Texture2DArray::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_2d_array(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_2d_array(state, T); |
| } |
| |
| std::string Texture2DArray::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "texture_2d_array<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_3d' |
| /// @see src/intrinsics.def:85:6 |
| class Texture3D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Texture3D::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_3d(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_3d(state, T); |
| } |
| |
| std::string Texture3D::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "texture_3d<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_cube' |
| /// @see src/intrinsics.def:86:6 |
| class TextureCube : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureCube::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_cube(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_cube(state, T); |
| } |
| |
| std::string TextureCube::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "texture_cube<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_cube_array' |
| /// @see src/intrinsics.def:87:6 |
| class TextureCubeArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureCubeArray::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_cube_array(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_cube_array(state, T); |
| } |
| |
| std::string TextureCubeArray::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "texture_cube_array<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_multisampled_2d' |
| /// @see src/intrinsics.def:88:6 |
| class TextureMultisampled2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureMultisampled2D::Match(MatchState& state, const sem::Type* ty) const { |
| const sem::Type* T = nullptr; |
| if (!match_texture_multisampled_2d(ty, T)) { |
| return nullptr; |
| } |
| T = state.Type(T); |
| if (T == nullptr) { |
| return nullptr; |
| } |
| return build_texture_multisampled_2d(state, T); |
| } |
| |
| std::string TextureMultisampled2D::String(MatchState& state) const { |
| const std::string T = state.TypeName(); |
| return "texture_multisampled_2d<" + T + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_2d' |
| /// @see src/intrinsics.def:89:6 |
| class TextureDepth2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureDepth2D::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_2d(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_2d(state); |
| } |
| |
| std::string TextureDepth2D::String(MatchState&) const { |
| return "texture_depth_2d"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_2d_array' |
| /// @see src/intrinsics.def:90:6 |
| class TextureDepth2DArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureDepth2DArray::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_2d_array(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_2d_array(state); |
| } |
| |
| std::string TextureDepth2DArray::String(MatchState&) const { |
| return "texture_depth_2d_array"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_cube' |
| /// @see src/intrinsics.def:91:6 |
| class TextureDepthCube : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureDepthCube::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_cube(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_cube(state); |
| } |
| |
| std::string TextureDepthCube::String(MatchState&) const { |
| return "texture_depth_cube"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_cube_array' |
| /// @see src/intrinsics.def:92:6 |
| class TextureDepthCubeArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureDepthCubeArray::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_cube_array(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_cube_array(state); |
| } |
| |
| std::string TextureDepthCubeArray::String(MatchState&) const { |
| return "texture_depth_cube_array"; |
| } |
| |
| /// TypeMatcher for 'type texture_depth_multisampled_2d' |
| /// @see src/intrinsics.def:93:6 |
| class TextureDepthMultisampled2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureDepthMultisampled2D::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_depth_multisampled_2d(ty)) { |
| return nullptr; |
| } |
| return build_texture_depth_multisampled_2d(state); |
| } |
| |
| std::string TextureDepthMultisampled2D::String(MatchState&) const { |
| return "texture_depth_multisampled_2d"; |
| } |
| |
| /// TypeMatcher for 'type texture_storage_1d' |
| /// @see src/intrinsics.def:94:6 |
| class TextureStorage1D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureStorage1D::Match(MatchState& state, const sem::Type* ty) const { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!match_texture_storage_1d(ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_texture_storage_1d(state, F, A); |
| } |
| |
| std::string TextureStorage1D::String(MatchState& state) const { |
| const std::string F = state.NumName(); |
| const std::string A = state.NumName(); |
| return "texture_storage_1d<" + F + ", " + A + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_storage_2d' |
| /// @see src/intrinsics.def:95:6 |
| class TextureStorage2D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureStorage2D::Match(MatchState& state, const sem::Type* ty) const { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!match_texture_storage_2d(ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_texture_storage_2d(state, F, A); |
| } |
| |
| std::string TextureStorage2D::String(MatchState& state) const { |
| 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' |
| /// @see src/intrinsics.def:96:6 |
| class TextureStorage2DArray : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureStorage2DArray::Match(MatchState& state, const sem::Type* ty) const { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!match_texture_storage_2d_array(ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_texture_storage_2d_array(state, F, A); |
| } |
| |
| std::string TextureStorage2DArray::String(MatchState& state) const { |
| 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' |
| /// @see src/intrinsics.def:97:6 |
| class TextureStorage3D : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureStorage3D::Match(MatchState& state, const sem::Type* ty) const { |
| Number F = Number::invalid; |
| Number A = Number::invalid; |
| if (!match_texture_storage_3d(ty, F, A)) { |
| return nullptr; |
| } |
| F = state.Num(F); |
| if (!F.IsValid()) { |
| return nullptr; |
| } |
| A = state.Num(A); |
| if (!A.IsValid()) { |
| return nullptr; |
| } |
| return build_texture_storage_3d(state, F, A); |
| } |
| |
| std::string TextureStorage3D::String(MatchState& state) const { |
| const std::string F = state.NumName(); |
| const std::string A = state.NumName(); |
| return "texture_storage_3d<" + F + ", " + A + ">"; |
| } |
| |
| /// TypeMatcher for 'type texture_external' |
| /// @see src/intrinsics.def:98:6 |
| class TextureExternal : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* TextureExternal::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_texture_external(ty)) { |
| return nullptr; |
| } |
| return build_texture_external(state); |
| } |
| |
| std::string TextureExternal::String(MatchState&) const { |
| return "texture_external"; |
| } |
| |
| /// TypeMatcher for 'type __modf_result' |
| /// @see src/intrinsics.def:100:6 |
| class ModfResult : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* ModfResult::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_modf_result(ty)) { |
| return nullptr; |
| } |
| return build_modf_result(state); |
| } |
| |
| std::string ModfResult::String(MatchState&) const { |
| return "__modf_result"; |
| } |
| |
| /// TypeMatcher for 'type __modf_result_vec' |
| /// @see src/intrinsics.def:101:42 |
| class ModfResultVec : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* ModfResultVec::Match(MatchState& state, const sem::Type* ty) const { |
| Number N = Number::invalid; |
| if (!match_modf_result_vec(ty, N)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| return build_modf_result_vec(state, N); |
| } |
| |
| std::string ModfResultVec::String(MatchState& state) const { |
| const std::string N = state.NumName(); |
| std::stringstream ss; |
| ss << "__modf_result_vec" << N; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'type __frexp_result' |
| /// @see src/intrinsics.def:102:6 |
| class FrexpResult : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* FrexpResult::Match(MatchState& state, const sem::Type* ty) const { |
| if (!match_frexp_result(ty)) { |
| return nullptr; |
| } |
| return build_frexp_result(state); |
| } |
| |
| std::string FrexpResult::String(MatchState&) const { |
| return "__frexp_result"; |
| } |
| |
| /// TypeMatcher for 'type __frexp_result_vec' |
| /// @see src/intrinsics.def:103:43 |
| class FrexpResultVec : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* FrexpResultVec::Match(MatchState& state, const sem::Type* ty) const { |
| Number N = Number::invalid; |
| if (!match_frexp_result_vec(ty, N)) { |
| return nullptr; |
| } |
| N = state.Num(N); |
| if (!N.IsValid()) { |
| return nullptr; |
| } |
| return build_frexp_result_vec(state, N); |
| } |
| |
| std::string FrexpResultVec::String(MatchState& state) const { |
| const std::string N = state.NumName(); |
| std::stringstream ss; |
| ss << "__frexp_result_vec" << N; |
| return ss.str(); |
| } |
| |
| /// TypeMatcher for 'match fiu32' |
| /// @see src/intrinsics.def:111:7 |
| class Fiu32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Fiu32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| return nullptr; |
| } |
| |
| std::string Fiu32::String(MatchState&) const { |
| return "f32, i32 or u32"; |
| } |
| |
| /// TypeMatcher for 'match iu32' |
| /// @see src/intrinsics.def:112:7 |
| class Iu32 : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Iu32::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| return nullptr; |
| } |
| |
| std::string Iu32::String(MatchState&) const { |
| return "i32 or u32"; |
| } |
| |
| /// TypeMatcher for 'match scalar' |
| /// @see src/intrinsics.def:113:7 |
| class Scalar : public TypeMatcher { |
| public: |
| /// Checks whether the given type matches the matcher rules, and returns the |
| /// expected, canonicalized type on success. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param type the type to match |
| /// @returns the canonicalized type on match, otherwise nullptr |
| const sem::Type* Match(MatchState& state, |
| const sem::Type* type) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| const sem::Type* Scalar::Match(MatchState& state, const sem::Type* ty) const { |
| if (match_f32(ty)) { |
| return build_f32(state); |
| } |
| if (match_i32(ty)) { |
| return build_i32(state); |
| } |
| if (match_u32(ty)) { |
| return build_u32(state); |
| } |
| if (match_bool(ty)) { |
| return build_bool(state); |
| } |
| return nullptr; |
| } |
| |
| std::string Scalar::String(MatchState&) const { |
| return "f32, i32, u32 or bool"; |
| } |
| |
| /// EnumMatcher for 'match f32_texel_format' |
| /// @see src/intrinsics.def:124:7 |
| class F32TexelFormat : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number F32TexelFormat::Match(MatchState&, Number number) const { |
| switch (static_cast<TexelFormat>(number.Value())) { |
| case TexelFormat::kRgba8Unorm: |
| case TexelFormat::kRgba8Snorm: |
| case TexelFormat::kRgba16Float: |
| case TexelFormat::kR32Float: |
| case TexelFormat::kRg32Float: |
| case TexelFormat::kRgba32Float: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string F32TexelFormat::String(MatchState&) const { |
| return "rgba8unorm, rgba8snorm, rgba16float, r32float, rg32float or rgba32float"; |
| } |
| |
| /// EnumMatcher for 'match i32_texel_format' |
| /// @see src/intrinsics.def:126:7 |
| class I32TexelFormat : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number I32TexelFormat::Match(MatchState&, Number number) const { |
| switch (static_cast<TexelFormat>(number.Value())) { |
| case TexelFormat::kRgba8Sint: |
| case TexelFormat::kRgba16Sint: |
| case TexelFormat::kR32Sint: |
| case TexelFormat::kRg32Sint: |
| case TexelFormat::kRgba32Sint: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string I32TexelFormat::String(MatchState&) const { |
| return "rgba8sint, rgba16sint, r32sint, rg32sint or rgba32sint"; |
| } |
| |
| /// EnumMatcher for 'match u32_texel_format' |
| /// @see src/intrinsics.def:128:7 |
| class U32TexelFormat : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number U32TexelFormat::Match(MatchState&, Number number) const { |
| switch (static_cast<TexelFormat>(number.Value())) { |
| case TexelFormat::kRgba8Uint: |
| case TexelFormat::kRgba16Uint: |
| case TexelFormat::kR32Uint: |
| case TexelFormat::kRg32Uint: |
| case TexelFormat::kRgba32Uint: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string U32TexelFormat::String(MatchState&) const { |
| return "rgba8uint, rgba16uint, r32uint, rg32uint or rgba32uint"; |
| } |
| |
| /// EnumMatcher for 'match write_only' |
| /// @see src/intrinsics.def:131:7 |
| class WriteOnly : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number WriteOnly::Match(MatchState&, Number number) const { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(Access::kWrite)) { |
| return Number(static_cast<uint32_t>(Access::kWrite)); |
| } |
| return Number::invalid; |
| } |
| |
| std::string WriteOnly::String(MatchState&) const { |
| return "write"; |
| } |
| |
| /// EnumMatcher for 'match function_private_workgroup' |
| /// @see src/intrinsics.def:133:7 |
| class FunctionPrivateWorkgroup : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number FunctionPrivateWorkgroup::Match(MatchState&, Number number) const { |
| switch (static_cast<StorageClass>(number.Value())) { |
| case StorageClass::kFunction: |
| case StorageClass::kPrivate: |
| case StorageClass::kWorkgroup: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string FunctionPrivateWorkgroup::String(MatchState&) const { |
| return "function, private or workgroup"; |
| } |
| |
| /// EnumMatcher for 'match workgroup_or_storage' |
| /// @see src/intrinsics.def:134:7 |
| class WorkgroupOrStorage : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number WorkgroupOrStorage::Match(MatchState&, Number number) const { |
| switch (static_cast<StorageClass>(number.Value())) { |
| case StorageClass::kWorkgroup: |
| case StorageClass::kStorage: |
| return number; |
| default: |
| return Number::invalid; |
| } |
| } |
| |
| std::string WorkgroupOrStorage::String(MatchState&) const { |
| return "workgroup or storage"; |
| } |
| |
| /// EnumMatcher for 'match storage' |
| class Storage : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number Storage::Match(MatchState&, Number number) const { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(StorageClass::kStorage)) { |
| return Number(static_cast<uint32_t>(StorageClass::kStorage)); |
| } |
| return Number::invalid; |
| } |
| |
| std::string Storage::String(MatchState&) const { |
| return "storage"; |
| } |
| |
| /// EnumMatcher for 'match write' |
| class Write : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number Write::Match(MatchState&, Number number) const { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(Access::kWrite)) { |
| return Number(static_cast<uint32_t>(Access::kWrite)); |
| } |
| return Number::invalid; |
| } |
| |
| std::string Write::String(MatchState&) const { |
| return "write"; |
| } |
| |
| /// EnumMatcher for 'match read_write' |
| class ReadWrite : public NumberMatcher { |
| public: |
| /// Checks whether the given number matches the enum matcher rules. |
| /// Match may close open types and numbers in state. |
| /// @param state the MatchState |
| /// @param number the enum value as a Number |
| /// @return true if the enum value matches the set |
| Number Match(MatchState& state, Number number) const override; |
| /// @param state the MatchState |
| /// @return a string representation of the matcher. |
| std::string String(MatchState& state) const override; |
| }; |
| |
| Number ReadWrite::Match(MatchState&, Number number) const { |
| if (number.IsAny() || number.Value() == static_cast<uint32_t>(Access::kReadWrite)) { |
| return Number(static_cast<uint32_t>(Access::kReadWrite)); |
| } |
| return Number::invalid; |
| } |
| |
| std::string ReadWrite::String(MatchState&) const { |
| return "read_write"; |
| } |
| |
| /// Matchers holds type and number matchers |
| class Matchers { |
| private: |
| OpenTypeMatcher open_type_0_{0}; |
| OpenNumberMatcher open_number_0_{0}; |
| OpenNumberMatcher open_number_1_{1}; |
| Bool Bool_; |
| F32 F32_; |
| I32 I32_; |
| U32 U32_; |
| Vec2 Vec2_; |
| Vec3 Vec3_; |
| Vec4 Vec4_; |
| Vec Vec_; |
| Mat Mat_; |
| Ptr Ptr_; |
| Atomic Atomic_; |
| Array Array_; |
| Sampler Sampler_; |
| SamplerComparison SamplerComparison_; |
| Texture1D Texture1D_; |
| Texture2D Texture2D_; |
| Texture2DArray Texture2DArray_; |
| Texture3D Texture3D_; |
| TextureCube TextureCube_; |
| TextureCubeArray TextureCubeArray_; |
| TextureMultisampled2D TextureMultisampled2D_; |
| TextureDepth2D TextureDepth2D_; |
| TextureDepth2DArray TextureDepth2DArray_; |
| TextureDepthCube TextureDepthCube_; |
| TextureDepthCubeArray TextureDepthCubeArray_; |
| TextureDepthMultisampled2D TextureDepthMultisampled2D_; |
| TextureStorage1D TextureStorage1D_; |
| TextureStorage2D TextureStorage2D_; |
| TextureStorage2DArray TextureStorage2DArray_; |
| TextureStorage3D TextureStorage3D_; |
| TextureExternal TextureExternal_; |
| ModfResult ModfResult_; |
| ModfResultVec ModfResultVec_; |
| FrexpResult FrexpResult_; |
| FrexpResultVec FrexpResultVec_; |
| Fiu32 Fiu32_; |
| Iu32 Iu32_; |
| Scalar Scalar_; |
| F32TexelFormat F32TexelFormat_; |
| I32TexelFormat I32TexelFormat_; |
| U32TexelFormat U32TexelFormat_; |
| WriteOnly WriteOnly_; |
| FunctionPrivateWorkgroup FunctionPrivateWorkgroup_; |
| WorkgroupOrStorage WorkgroupOrStorage_; |
| Storage Storage_; |
| Write Write_; |
| ReadWrite ReadWrite_; |
| |
| public: |
| /// Constructor |
| Matchers(); |
| /// Destructor |
| ~Matchers(); |
| |
| /// The open-types, types, and type matchers |
| TypeMatcher const* const type[39] = { |
| /* [0] */ &open_type_0_, |
| /* [1] */ &Bool_, |
| /* [2] */ &F32_, |
| /* [3] */ &I32_, |
| /* [4] */ &U32_, |
| /* [5] */ &Vec2_, |
| /* [6] */ &Vec3_, |
| /* [7] */ &Vec4_, |
| /* [8] */ &Vec_, |
| /* [9] */ &Mat_, |
| /* [10] */ &Ptr_, |
| /* [11] */ &Atomic_, |
| /* [12] */ &Array_, |
| /* [13] */ &Sampler_, |
| /* [14] */ &SamplerComparison_, |
| /* [15] */ &Texture1D_, |
| /* [16] */ &Texture2D_, |
| /* [17] */ &Texture2DArray_, |
| /* [18] */ &Texture3D_, |
| /* [19] */ &TextureCube_, |
| /* [20] */ &TextureCubeArray_, |
| /* [21] */ &TextureMultisampled2D_, |
| /* [22] */ &TextureDepth2D_, |
| /* [23] */ &TextureDepth2DArray_, |
| /* [24] */ &TextureDepthCube_, |
| /* [25] */ &TextureDepthCubeArray_, |
| /* [26] */ &TextureDepthMultisampled2D_, |
| /* [27] */ &TextureStorage1D_, |
| /* [28] */ &TextureStorage2D_, |
| /* [29] */ &TextureStorage2DArray_, |
| /* [30] */ &TextureStorage3D_, |
| /* [31] */ &TextureExternal_, |
| /* [32] */ &ModfResult_, |
| /* [33] */ &ModfResultVec_, |
| /* [34] */ &FrexpResult_, |
| /* [35] */ &FrexpResultVec_, |
| /* [36] */ &Fiu32_, |
| /* [37] */ &Iu32_, |
| /* [38] */ &Scalar_, |
| }; |
| |
| /// The open-numbers, and number matchers |
| NumberMatcher const* const number[11] = { |
| /* [0] */ &open_number_0_, |
| /* [1] */ &open_number_1_, |
| /* [2] */ &F32TexelFormat_, |
| /* [3] */ &I32TexelFormat_, |
| /* [4] */ &U32TexelFormat_, |
| /* [5] */ &WriteOnly_, |
| /* [6] */ &FunctionPrivateWorkgroup_, |
| /* [7] */ &WorkgroupOrStorage_, |
| /* [8] */ &Storage_, |
| /* [9] */ &Write_, |
| /* [10] */ &ReadWrite_, |
| }; |
| }; |
| |
| Matchers::Matchers() = default; |
| Matchers::~Matchers() = default; |
| |
| constexpr MatcherIndex kMatcherIndices[] = { |
| /* [0] */ 10, |
| /* [1] */ 0, |
| /* [2] */ 11, |
| /* [3] */ 0, |
| /* [4] */ 10, |
| /* [5] */ 8, |
| /* [6] */ 12, |
| /* [7] */ 0, |
| /* [8] */ 0, |
| /* [9] */ 9, |
| /* [10] */ 1, |
| /* [11] */ 0, |
| /* [12] */ 2, |
| /* [13] */ 9, |
| /* [14] */ 0, |
| /* [15] */ 1, |
| /* [16] */ 2, |
| /* [17] */ 9, |
| /* [18] */ 0, |
| /* [19] */ 0, |
| /* [20] */ 2, |
| /* [21] */ 8, |
| /* [22] */ 0, |
| /* [23] */ 2, |
| /* [24] */ 8, |
| /* [25] */ 0, |
| /* [26] */ 1, |
| /* [27] */ 29, |
| /* [28] */ 0, |
| /* [29] */ 1, |
| /* [30] */ 30, |
| /* [31] */ 0, |
| /* [32] */ 1, |
| /* [33] */ 28, |
| /* [34] */ 0, |
| /* [35] */ 1, |
| /* [36] */ 27, |
| /* [37] */ 0, |
| /* [38] */ 1, |
| /* [39] */ 8, |
| /* [40] */ 0, |
| /* [41] */ 0, |
| /* [42] */ 30, |
| /* [43] */ 4, |
| /* [44] */ 9, |
| /* [45] */ 29, |
| /* [46] */ 4, |
| /* [47] */ 9, |
| /* [48] */ 28, |
| /* [49] */ 4, |
| /* [50] */ 9, |
| /* [51] */ 27, |
| /* [52] */ 4, |
| /* [53] */ 9, |
| /* [54] */ 30, |
| /* [55] */ 3, |
| /* [56] */ 9, |
| /* [57] */ 29, |
| /* [58] */ 3, |
| /* [59] */ 9, |
| /* [60] */ 28, |
| /* [61] */ 3, |
| /* [62] */ 9, |
| /* [63] */ 27, |
| /* [64] */ 3, |
| /* [65] */ 9, |
| /* [66] */ 30, |
| /* [67] */ 2, |
| /* [68] */ 9, |
| /* [69] */ 29, |
| /* [70] */ 2, |
| /* [71] */ 9, |
| /* [72] */ 28, |
| /* [73] */ 2, |
| /* [74] */ 9, |
| /* [75] */ 27, |
| /* [76] */ 2, |
| /* [77] */ 9, |
| /* [78] */ 8, |
| /* [79] */ 0, |
| /* [80] */ 3, |
| /* [81] */ 7, |
| /* [82] */ 2, |
| /* [83] */ 18, |
| /* [84] */ 2, |
| /* [85] */ 5, |
| /* [86] */ 3, |
| /* [87] */ 6, |
| /* [88] */ 2, |
| /* [89] */ 5, |
| /* [90] */ 2, |
| /* [91] */ 17, |
| /* [92] */ 2, |
| /* [93] */ 6, |
| /* [94] */ 3, |
| /* [95] */ 19, |
| /* [96] */ 2, |
| /* [97] */ 16, |
| /* [98] */ 2, |
| /* [99] */ 20, |
| /* [100] */ 2, |
| /* [101] */ 33, |
| /* [102] */ 0, |
| /* [103] */ 35, |
| /* [104] */ 0, |
| /* [105] */ 7, |
| /* [106] */ 3, |
| /* [107] */ 7, |
| /* [108] */ 4, |
| /* [109] */ 15, |
| /* [110] */ 0, |
| /* [111] */ 7, |
| /* [112] */ 0, |
| /* [113] */ 16, |
| /* [114] */ 0, |
| /* [115] */ 17, |
| /* [116] */ 0, |
| /* [117] */ 18, |
| /* [118] */ 0, |
| /* [119] */ 21, |
| /* [120] */ 0, |
| /* [121] */ 19, |
| /* [122] */ 0, |
| /* [123] */ 20, |
| /* [124] */ 0, |
| /* [125] */ 15, |
| /* [126] */ 2, |
| /* [127] */ 5, |
| /* [128] */ 0, |
| /* [129] */ 13, |
| /* [130] */ 22, |
| /* [131] */ 23, |
| /* [132] */ 26, |
| /* [133] */ 24, |
| /* [134] */ 25, |
| /* [135] */ 31, |
| /* [136] */ 14, |
| /* [137] */ 32, |
| /* [138] */ 34, |
| }; |
| |
| // Assert that the MatcherIndex is big enough to index all the matchers, plus |
| // kNoMatcher. |
| static_assert(static_cast<int>(sizeof(kMatcherIndices) / sizeof(kMatcherIndices[0])) < |
| static_cast<int>(std::numeric_limits<MatcherIndex>::max() - 1), |
| "MatcherIndex is not large enough to index kMatcherIndices"); |
| |
| constexpr ParameterInfo kParameters[] = { |
| { |
| /* [0] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[91], |
| }, |
| { |
| /* [1] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [2] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [3] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [4] */ |
| /* usage */ ParameterUsage::kDdx, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [5] */ |
| /* usage */ ParameterUsage::kDdy, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [6] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [7] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[97], |
| }, |
| { |
| /* [8] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [9] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [10] */ |
| /* usage */ ParameterUsage::kDdx, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [11] */ |
| /* usage */ ParameterUsage::kDdy, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [12] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [13] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[91], |
| }, |
| { |
| /* [14] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [15] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [16] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [17] */ |
| /* usage */ ParameterUsage::kDdx, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [18] */ |
| /* usage */ ParameterUsage::kDdy, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [19] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[91], |
| }, |
| { |
| /* [20] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [21] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [22] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [23] */ |
| /* usage */ ParameterUsage::kBias, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [24] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [25] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[91], |
| }, |
| { |
| /* [26] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [27] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [28] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [29] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [30] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [31] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[99], |
| }, |
| { |
| /* [32] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [33] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [34] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [35] */ |
| /* usage */ ParameterUsage::kDdx, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [36] */ |
| /* usage */ ParameterUsage::kDdy, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [37] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [38] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [39] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [40] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [41] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [42] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [43] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[83], |
| }, |
| { |
| /* [44] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [45] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [46] */ |
| /* usage */ ParameterUsage::kDdx, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [47] */ |
| /* usage */ ParameterUsage::kDdy, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [48] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[93], |
| }, |
| { |
| /* [49] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [50] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [51] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [52] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [53] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [54] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [55] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [56] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [57] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [58] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [59] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [60] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [61] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[99], |
| }, |
| { |
| /* [62] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [63] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [64] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [65] */ |
| /* usage */ ParameterUsage::kBias, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [66] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[97], |
| }, |
| { |
| /* [67] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [68] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [69] */ |
| /* usage */ ParameterUsage::kBias, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [70] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [71] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[99], |
| }, |
| { |
| /* [72] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [73] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [74] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [75] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [76] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[130], |
| }, |
| { |
| /* [77] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [78] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [79] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [80] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [81] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [82] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [83] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [84] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [85] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [86] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[83], |
| }, |
| { |
| /* [87] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [88] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [89] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [90] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[93], |
| }, |
| { |
| /* [91] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [92] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [93] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [94] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [95] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [96] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[130], |
| }, |
| { |
| /* [97] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [98] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [99] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [100] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [101] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [102] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [103] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [104] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [105] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [106] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[134], |
| }, |
| { |
| /* [107] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [108] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [109] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [110] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [111] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[91], |
| }, |
| { |
| /* [112] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [113] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [114] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [115] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [116] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[83], |
| }, |
| { |
| /* [117] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [118] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [119] */ |
| /* usage */ ParameterUsage::kBias, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [120] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[93], |
| }, |
| { |
| /* [121] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[83], |
| }, |
| { |
| /* [122] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [123] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [124] */ |
| /* usage */ ParameterUsage::kDdx, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [125] */ |
| /* usage */ ParameterUsage::kDdy, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [126] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[134], |
| }, |
| { |
| /* [127] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [128] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [129] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [130] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [131] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[91], |
| }, |
| { |
| /* [132] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [133] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [134] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [135] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [136] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[95], |
| }, |
| { |
| /* [137] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [138] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [139] */ |
| /* usage */ ParameterUsage::kDdx, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [140] */ |
| /* usage */ ParameterUsage::kDdy, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [141] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[130], |
| }, |
| { |
| /* [142] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [143] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [144] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [145] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [146] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[91], |
| }, |
| { |
| /* [147] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [148] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [149] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [150] */ |
| /* usage */ ParameterUsage::kBias, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [151] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [152] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [153] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [154] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [155] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [156] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[134], |
| }, |
| { |
| /* [157] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [158] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [159] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [160] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [161] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[97], |
| }, |
| { |
| /* [162] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [163] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [164] */ |
| /* usage */ ParameterUsage::kDdx, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [165] */ |
| /* usage */ ParameterUsage::kDdy, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [166] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[97], |
| }, |
| { |
| /* [167] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [168] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [169] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [170] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [171] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[57], |
| }, |
| { |
| /* [172] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [173] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [174] */ |
| /* usage */ ParameterUsage::kValue, |
| /* matcher indices */ &kMatcherIndices[105], |
| }, |
| { |
| /* [175] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[133], |
| }, |
| { |
| /* [176] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [177] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [178] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [179] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[99], |
| }, |
| { |
| /* [180] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [181] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [182] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [183] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[130], |
| }, |
| { |
| /* [184] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [185] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [186] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [187] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[133], |
| }, |
| { |
| /* [188] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [189] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [190] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [191] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[130], |
| }, |
| { |
| /* [192] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [193] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [194] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [195] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [196] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [197] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [198] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [199] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[133], |
| }, |
| { |
| /* [200] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [201] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [202] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [203] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[115], |
| }, |
| { |
| /* [204] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [205] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [206] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [207] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[95], |
| }, |
| { |
| /* [208] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [209] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [210] */ |
| /* usage */ ParameterUsage::kBias, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [211] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[83], |
| }, |
| { |
| /* [212] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [213] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [214] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[93], |
| }, |
| { |
| /* [215] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[130], |
| }, |
| { |
| /* [216] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [217] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [218] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [219] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[97], |
| }, |
| { |
| /* [220] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [221] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [222] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [223] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[97], |
| }, |
| { |
| /* [224] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [225] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [226] */ |
| /* usage */ ParameterUsage::kBias, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [227] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[95], |
| }, |
| { |
| /* [228] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [229] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [230] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [231] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[131], |
| }, |
| { |
| /* [232] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
| { |
| /* [233] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [234] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [235] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[83], |
| }, |
| { |
| /* [236] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [237] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [238] */ |
| /* usage */ ParameterUsage::kLevel, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [239] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[134], |
| }, |
| { |
| /* [240] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [241] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [242] */ |
| /* usage */ ParameterUsage::kArrayIndex, |
| /* matcher indices */ &kMatcherIndices[55], |
| }, |
| { |
| /* [243] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[83], |
| }, |
| { |
| /* [244] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [245] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[87], |
| }, |
| { |
| /* [246] */ |
| /* usage */ ParameterUsage::kBias, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [247] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[130], |
| }, |
| { |
| /* [248] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[136], |
| }, |
| { |
| /* [249] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [250] */ |
| /* usage */ ParameterUsage::kDepthRef, |
| /* matcher indices */ &kMatcherIndices[12], |
| }, |
| { |
| /* [251] */ |
| /* usage */ ParameterUsage::kTexture, |
| /* matcher indices */ &kMatcherIndices[97], |
| }, |
| { |
| /* [252] */ |
| /* usage */ ParameterUsage::kSampler, |
| /* matcher indices */ &kMatcherIndices[129], |
| }, |
| { |
| /* [253] */ |
| /* usage */ ParameterUsage::kCoords, |
| /* matcher indices */ &kMatcherIndices[89], |
| }, |
| { |
| /* [254] */ |
| /* usage */ ParameterUsage::kOffset, |
| /* matcher indices */ &kMatcherIndices[85], |
| }, |
|