| // Copyright 2025 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/core/enums.cc.tmpl |
| // |
| // To regenerate run: './tools/run gen' |
| // |
| // Do not modify this file directly |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| // clang-format off |
| |
| #include "src/tint/lang/core/enums.h" |
| |
| namespace tint::core { |
| |
| /// ParseAccess parses a Access from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or Access::kUndefined if the string could not be parsed. |
| Access ParseAccess(std::string_view str) { |
| if (str == "read") { |
| return Access::kRead; |
| } |
| if (str == "read_write") { |
| return Access::kReadWrite; |
| } |
| if (str == "write") { |
| return Access::kWrite; |
| } |
| return Access::kUndefined; |
| } |
| std::string_view ToString(Access value) { |
| switch (value) { |
| case Access::kUndefined: |
| return "undefined"; |
| case Access::kRead: |
| return "read"; |
| case Access::kReadWrite: |
| return "read_write"; |
| case Access::kWrite: |
| return "write"; |
| } |
| return "<unknown>"; |
| } |
| |
| /// ParseAddressSpace parses a AddressSpace from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or AddressSpace::kUndefined if the string could not be parsed. |
| AddressSpace ParseAddressSpace(std::string_view str) { |
| if (str == "function") { |
| return AddressSpace::kFunction; |
| } |
| if (str == "immediate") { |
| return AddressSpace::kImmediate; |
| } |
| if (str == "pixel_local") { |
| return AddressSpace::kPixelLocal; |
| } |
| if (str == "private") { |
| return AddressSpace::kPrivate; |
| } |
| if (str == "storage") { |
| return AddressSpace::kStorage; |
| } |
| if (str == "uniform") { |
| return AddressSpace::kUniform; |
| } |
| if (str == "workgroup") { |
| return AddressSpace::kWorkgroup; |
| } |
| return AddressSpace::kUndefined; |
| } |
| std::string_view ToString(AddressSpace value) { |
| switch (value) { |
| case AddressSpace::kUndefined: |
| return "undefined"; |
| case AddressSpace::kIn: |
| return "__in"; |
| case AddressSpace::kOut: |
| return "__out"; |
| case AddressSpace::kFunction: |
| return "function"; |
| case AddressSpace::kHandle: |
| return "handle"; |
| case AddressSpace::kImmediate: |
| return "immediate"; |
| case AddressSpace::kPixelLocal: |
| return "pixel_local"; |
| case AddressSpace::kPrivate: |
| return "private"; |
| case AddressSpace::kStorage: |
| return "storage"; |
| case AddressSpace::kUniform: |
| return "uniform"; |
| case AddressSpace::kWorkgroup: |
| return "workgroup"; |
| } |
| return "<unknown>"; |
| } |
| |
| /// ParseInterpolationSampling parses a InterpolationSampling from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or InterpolationSampling::kUndefined if the string could not be parsed. |
| InterpolationSampling ParseInterpolationSampling(std::string_view str) { |
| if (str == "center") { |
| return InterpolationSampling::kCenter; |
| } |
| if (str == "centroid") { |
| return InterpolationSampling::kCentroid; |
| } |
| if (str == "either") { |
| return InterpolationSampling::kEither; |
| } |
| if (str == "first") { |
| return InterpolationSampling::kFirst; |
| } |
| if (str == "sample") { |
| return InterpolationSampling::kSample; |
| } |
| return InterpolationSampling::kUndefined; |
| } |
| std::string_view ToString(InterpolationSampling value) { |
| switch (value) { |
| case InterpolationSampling::kUndefined: |
| return "undefined"; |
| case InterpolationSampling::kCenter: |
| return "center"; |
| case InterpolationSampling::kCentroid: |
| return "centroid"; |
| case InterpolationSampling::kEither: |
| return "either"; |
| case InterpolationSampling::kFirst: |
| return "first"; |
| case InterpolationSampling::kSample: |
| return "sample"; |
| } |
| return "<unknown>"; |
| } |
| |
| /// ParseInterpolationType parses a InterpolationType from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or InterpolationType::kUndefined if the string could not be parsed. |
| InterpolationType ParseInterpolationType(std::string_view str) { |
| if (str == "flat") { |
| return InterpolationType::kFlat; |
| } |
| if (str == "linear") { |
| return InterpolationType::kLinear; |
| } |
| if (str == "perspective") { |
| return InterpolationType::kPerspective; |
| } |
| return InterpolationType::kUndefined; |
| } |
| std::string_view ToString(InterpolationType value) { |
| switch (value) { |
| case InterpolationType::kUndefined: |
| return "undefined"; |
| case InterpolationType::kFlat: |
| return "flat"; |
| case InterpolationType::kLinear: |
| return "linear"; |
| case InterpolationType::kPerspective: |
| return "perspective"; |
| } |
| return "<unknown>"; |
| } |
| |
| /// ParseSubgroupMatrixKind parses a SubgroupMatrixKind from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or SubgroupMatrixKind::kUndefined if the string could not be parsed. |
| SubgroupMatrixKind ParseSubgroupMatrixKind(std::string_view str) { |
| if (str == "left") { |
| return SubgroupMatrixKind::kLeft; |
| } |
| if (str == "result") { |
| return SubgroupMatrixKind::kResult; |
| } |
| if (str == "right") { |
| return SubgroupMatrixKind::kRight; |
| } |
| return SubgroupMatrixKind::kUndefined; |
| } |
| std::string_view ToString(SubgroupMatrixKind value) { |
| switch (value) { |
| case SubgroupMatrixKind::kUndefined: |
| return "undefined"; |
| case SubgroupMatrixKind::kLeft: |
| return "left"; |
| case SubgroupMatrixKind::kResult: |
| return "result"; |
| case SubgroupMatrixKind::kRight: |
| return "right"; |
| } |
| return "<unknown>"; |
| } |
| |
| /// ParseTexelFormat parses a TexelFormat from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or TexelFormat::kUndefined if the string could not be parsed. |
| TexelFormat ParseTexelFormat(std::string_view str) { |
| if (str == "bgra8unorm") { |
| return TexelFormat::kBgra8Unorm; |
| } |
| if (str == "r16float") { |
| return TexelFormat::kR16Float; |
| } |
| if (str == "r16sint") { |
| return TexelFormat::kR16Sint; |
| } |
| if (str == "r16snorm") { |
| return TexelFormat::kR16Snorm; |
| } |
| if (str == "r16uint") { |
| return TexelFormat::kR16Uint; |
| } |
| if (str == "r16unorm") { |
| return TexelFormat::kR16Unorm; |
| } |
| if (str == "r32float") { |
| return TexelFormat::kR32Float; |
| } |
| if (str == "r32sint") { |
| return TexelFormat::kR32Sint; |
| } |
| if (str == "r32uint") { |
| return TexelFormat::kR32Uint; |
| } |
| if (str == "r8sint") { |
| return TexelFormat::kR8Sint; |
| } |
| if (str == "r8snorm") { |
| return TexelFormat::kR8Snorm; |
| } |
| if (str == "r8uint") { |
| return TexelFormat::kR8Uint; |
| } |
| if (str == "r8unorm") { |
| return TexelFormat::kR8Unorm; |
| } |
| if (str == "rg11b10ufloat") { |
| return TexelFormat::kRg11B10Ufloat; |
| } |
| if (str == "rg16float") { |
| return TexelFormat::kRg16Float; |
| } |
| if (str == "rg16sint") { |
| return TexelFormat::kRg16Sint; |
| } |
| if (str == "rg16snorm") { |
| return TexelFormat::kRg16Snorm; |
| } |
| if (str == "rg16uint") { |
| return TexelFormat::kRg16Uint; |
| } |
| if (str == "rg16unorm") { |
| return TexelFormat::kRg16Unorm; |
| } |
| if (str == "rg32float") { |
| return TexelFormat::kRg32Float; |
| } |
| if (str == "rg32sint") { |
| return TexelFormat::kRg32Sint; |
| } |
| if (str == "rg32uint") { |
| return TexelFormat::kRg32Uint; |
| } |
| if (str == "rg8sint") { |
| return TexelFormat::kRg8Sint; |
| } |
| if (str == "rg8snorm") { |
| return TexelFormat::kRg8Snorm; |
| } |
| if (str == "rg8uint") { |
| return TexelFormat::kRg8Uint; |
| } |
| if (str == "rg8unorm") { |
| return TexelFormat::kRg8Unorm; |
| } |
| if (str == "rgb10a2uint") { |
| return TexelFormat::kRgb10A2Uint; |
| } |
| if (str == "rgb10a2unorm") { |
| return TexelFormat::kRgb10A2Unorm; |
| } |
| if (str == "rgba16float") { |
| return TexelFormat::kRgba16Float; |
| } |
| if (str == "rgba16sint") { |
| return TexelFormat::kRgba16Sint; |
| } |
| if (str == "rgba16snorm") { |
| return TexelFormat::kRgba16Snorm; |
| } |
| if (str == "rgba16uint") { |
| return TexelFormat::kRgba16Uint; |
| } |
| if (str == "rgba16unorm") { |
| return TexelFormat::kRgba16Unorm; |
| } |
| if (str == "rgba32float") { |
| return TexelFormat::kRgba32Float; |
| } |
| if (str == "rgba32sint") { |
| return TexelFormat::kRgba32Sint; |
| } |
| if (str == "rgba32uint") { |
| return TexelFormat::kRgba32Uint; |
| } |
| if (str == "rgba8sint") { |
| return TexelFormat::kRgba8Sint; |
| } |
| if (str == "rgba8snorm") { |
| return TexelFormat::kRgba8Snorm; |
| } |
| if (str == "rgba8uint") { |
| return TexelFormat::kRgba8Uint; |
| } |
| if (str == "rgba8unorm") { |
| return TexelFormat::kRgba8Unorm; |
| } |
| return TexelFormat::kUndefined; |
| } |
| std::string_view ToString(TexelFormat value) { |
| switch (value) { |
| case TexelFormat::kUndefined: |
| return "undefined"; |
| case TexelFormat::kBgra8Unorm: |
| return "bgra8unorm"; |
| case TexelFormat::kR16Float: |
| return "r16float"; |
| case TexelFormat::kR16Sint: |
| return "r16sint"; |
| case TexelFormat::kR16Snorm: |
| return "r16snorm"; |
| case TexelFormat::kR16Uint: |
| return "r16uint"; |
| case TexelFormat::kR16Unorm: |
| return "r16unorm"; |
| case TexelFormat::kR32Float: |
| return "r32float"; |
| case TexelFormat::kR32Sint: |
| return "r32sint"; |
| case TexelFormat::kR32Uint: |
| return "r32uint"; |
| case TexelFormat::kR8Sint: |
| return "r8sint"; |
| case TexelFormat::kR8Snorm: |
| return "r8snorm"; |
| case TexelFormat::kR8Uint: |
| return "r8uint"; |
| case TexelFormat::kR8Unorm: |
| return "r8unorm"; |
| case TexelFormat::kRg11B10Ufloat: |
| return "rg11b10ufloat"; |
| case TexelFormat::kRg16Float: |
| return "rg16float"; |
| case TexelFormat::kRg16Sint: |
| return "rg16sint"; |
| case TexelFormat::kRg16Snorm: |
| return "rg16snorm"; |
| case TexelFormat::kRg16Uint: |
| return "rg16uint"; |
| case TexelFormat::kRg16Unorm: |
| return "rg16unorm"; |
| case TexelFormat::kRg32Float: |
| return "rg32float"; |
| case TexelFormat::kRg32Sint: |
| return "rg32sint"; |
| case TexelFormat::kRg32Uint: |
| return "rg32uint"; |
| case TexelFormat::kRg8Sint: |
| return "rg8sint"; |
| case TexelFormat::kRg8Snorm: |
| return "rg8snorm"; |
| case TexelFormat::kRg8Uint: |
| return "rg8uint"; |
| case TexelFormat::kRg8Unorm: |
| return "rg8unorm"; |
| case TexelFormat::kRgb10A2Uint: |
| return "rgb10a2uint"; |
| case TexelFormat::kRgb10A2Unorm: |
| return "rgb10a2unorm"; |
| case TexelFormat::kRgba16Float: |
| return "rgba16float"; |
| case TexelFormat::kRgba16Sint: |
| return "rgba16sint"; |
| case TexelFormat::kRgba16Snorm: |
| return "rgba16snorm"; |
| case TexelFormat::kRgba16Uint: |
| return "rgba16uint"; |
| case TexelFormat::kRgba16Unorm: |
| return "rgba16unorm"; |
| case TexelFormat::kRgba32Float: |
| return "rgba32float"; |
| case TexelFormat::kRgba32Sint: |
| return "rgba32sint"; |
| case TexelFormat::kRgba32Uint: |
| return "rgba32uint"; |
| case TexelFormat::kRgba8Sint: |
| return "rgba8sint"; |
| case TexelFormat::kRgba8Snorm: |
| return "rgba8snorm"; |
| case TexelFormat::kRgba8Uint: |
| return "rgba8uint"; |
| case TexelFormat::kRgba8Unorm: |
| return "rgba8unorm"; |
| } |
| return "<unknown>"; |
| } |
| |
| /// ParseBuiltinType parses a BuiltinType from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or BuiltinType::kUndefined if the string could not be parsed. |
| BuiltinType ParseBuiltinType(std::string_view str) { |
| if (str == "__atomic_compare_exchange_result_i32") { |
| return BuiltinType::kAtomicCompareExchangeResultI32; |
| } |
| if (str == "__atomic_compare_exchange_result_u32") { |
| return BuiltinType::kAtomicCompareExchangeResultU32; |
| } |
| if (str == "__frexp_result_abstract") { |
| return BuiltinType::kFrexpResultAbstract; |
| } |
| if (str == "__frexp_result_f16") { |
| return BuiltinType::kFrexpResultF16; |
| } |
| if (str == "__frexp_result_f32") { |
| return BuiltinType::kFrexpResultF32; |
| } |
| if (str == "__frexp_result_vec2_abstract") { |
| return BuiltinType::kFrexpResultVec2Abstract; |
| } |
| if (str == "__frexp_result_vec2_f16") { |
| return BuiltinType::kFrexpResultVec2F16; |
| } |
| if (str == "__frexp_result_vec2_f32") { |
| return BuiltinType::kFrexpResultVec2F32; |
| } |
| if (str == "__frexp_result_vec3_abstract") { |
| return BuiltinType::kFrexpResultVec3Abstract; |
| } |
| if (str == "__frexp_result_vec3_f16") { |
| return BuiltinType::kFrexpResultVec3F16; |
| } |
| if (str == "__frexp_result_vec3_f32") { |
| return BuiltinType::kFrexpResultVec3F32; |
| } |
| if (str == "__frexp_result_vec4_abstract") { |
| return BuiltinType::kFrexpResultVec4Abstract; |
| } |
| if (str == "__frexp_result_vec4_f16") { |
| return BuiltinType::kFrexpResultVec4F16; |
| } |
| if (str == "__frexp_result_vec4_f32") { |
| return BuiltinType::kFrexpResultVec4F32; |
| } |
| if (str == "__modf_result_abstract") { |
| return BuiltinType::kModfResultAbstract; |
| } |
| if (str == "__modf_result_f16") { |
| return BuiltinType::kModfResultF16; |
| } |
| if (str == "__modf_result_f32") { |
| return BuiltinType::kModfResultF32; |
| } |
| if (str == "__modf_result_vec2_abstract") { |
| return BuiltinType::kModfResultVec2Abstract; |
| } |
| if (str == "__modf_result_vec2_f16") { |
| return BuiltinType::kModfResultVec2F16; |
| } |
| if (str == "__modf_result_vec2_f32") { |
| return BuiltinType::kModfResultVec2F32; |
| } |
| if (str == "__modf_result_vec3_abstract") { |
| return BuiltinType::kModfResultVec3Abstract; |
| } |
| if (str == "__modf_result_vec3_f16") { |
| return BuiltinType::kModfResultVec3F16; |
| } |
| if (str == "__modf_result_vec3_f32") { |
| return BuiltinType::kModfResultVec3F32; |
| } |
| if (str == "__modf_result_vec4_abstract") { |
| return BuiltinType::kModfResultVec4Abstract; |
| } |
| if (str == "__modf_result_vec4_f16") { |
| return BuiltinType::kModfResultVec4F16; |
| } |
| if (str == "__modf_result_vec4_f32") { |
| return BuiltinType::kModfResultVec4F32; |
| } |
| if (str == "array") { |
| return BuiltinType::kArray; |
| } |
| if (str == "atomic") { |
| return BuiltinType::kAtomic; |
| } |
| if (str == "binding_array") { |
| return BuiltinType::kBindingArray; |
| } |
| if (str == "bool") { |
| return BuiltinType::kBool; |
| } |
| if (str == "f16") { |
| return BuiltinType::kF16; |
| } |
| if (str == "f32") { |
| return BuiltinType::kF32; |
| } |
| if (str == "i32") { |
| return BuiltinType::kI32; |
| } |
| if (str == "i8") { |
| return BuiltinType::kI8; |
| } |
| if (str == "input_attachment") { |
| return BuiltinType::kInputAttachment; |
| } |
| if (str == "mat2x2") { |
| return BuiltinType::kMat2X2; |
| } |
| if (str == "mat2x2f") { |
| return BuiltinType::kMat2X2F; |
| } |
| if (str == "mat2x2h") { |
| return BuiltinType::kMat2X2H; |
| } |
| if (str == "mat2x3") { |
| return BuiltinType::kMat2X3; |
| } |
| if (str == "mat2x3f") { |
| return BuiltinType::kMat2X3F; |
| } |
| if (str == "mat2x3h") { |
| return BuiltinType::kMat2X3H; |
| } |
| if (str == "mat2x4") { |
| return BuiltinType::kMat2X4; |
| } |
| if (str == "mat2x4f") { |
| return BuiltinType::kMat2X4F; |
| } |
| if (str == "mat2x4h") { |
| return BuiltinType::kMat2X4H; |
| } |
| if (str == "mat3x2") { |
| return BuiltinType::kMat3X2; |
| } |
| if (str == "mat3x2f") { |
| return BuiltinType::kMat3X2F; |
| } |
| if (str == "mat3x2h") { |
| return BuiltinType::kMat3X2H; |
| } |
| if (str == "mat3x3") { |
| return BuiltinType::kMat3X3; |
| } |
| if (str == "mat3x3f") { |
| return BuiltinType::kMat3X3F; |
| } |
| if (str == "mat3x3h") { |
| return BuiltinType::kMat3X3H; |
| } |
| if (str == "mat3x4") { |
| return BuiltinType::kMat3X4; |
| } |
| if (str == "mat3x4f") { |
| return BuiltinType::kMat3X4F; |
| } |
| if (str == "mat3x4h") { |
| return BuiltinType::kMat3X4H; |
| } |
| if (str == "mat4x2") { |
| return BuiltinType::kMat4X2; |
| } |
| if (str == "mat4x2f") { |
| return BuiltinType::kMat4X2F; |
| } |
| if (str == "mat4x2h") { |
| return BuiltinType::kMat4X2H; |
| } |
| if (str == "mat4x3") { |
| return BuiltinType::kMat4X3; |
| } |
| if (str == "mat4x3f") { |
| return BuiltinType::kMat4X3F; |
| } |
| if (str == "mat4x3h") { |
| return BuiltinType::kMat4X3H; |
| } |
| if (str == "mat4x4") { |
| return BuiltinType::kMat4X4; |
| } |
| if (str == "mat4x4f") { |
| return BuiltinType::kMat4X4F; |
| } |
| if (str == "mat4x4h") { |
| return BuiltinType::kMat4X4H; |
| } |
| if (str == "ptr") { |
| return BuiltinType::kPtr; |
| } |
| if (str == "resource_binding") { |
| return BuiltinType::kResourceBinding; |
| } |
| if (str == "sampler") { |
| return BuiltinType::kSampler; |
| } |
| if (str == "sampler_comparison") { |
| return BuiltinType::kSamplerComparison; |
| } |
| if (str == "subgroup_matrix_left") { |
| return BuiltinType::kSubgroupMatrixLeft; |
| } |
| if (str == "subgroup_matrix_result") { |
| return BuiltinType::kSubgroupMatrixResult; |
| } |
| if (str == "subgroup_matrix_right") { |
| return BuiltinType::kSubgroupMatrixRight; |
| } |
| if (str == "texel_buffer") { |
| return BuiltinType::kTexelBuffer; |
| } |
| if (str == "texture_1d") { |
| return BuiltinType::kTexture1D; |
| } |
| if (str == "texture_2d") { |
| return BuiltinType::kTexture2D; |
| } |
| if (str == "texture_2d_array") { |
| return BuiltinType::kTexture2DArray; |
| } |
| if (str == "texture_3d") { |
| return BuiltinType::kTexture3D; |
| } |
| if (str == "texture_cube") { |
| return BuiltinType::kTextureCube; |
| } |
| if (str == "texture_cube_array") { |
| return BuiltinType::kTextureCubeArray; |
| } |
| if (str == "texture_depth_2d") { |
| return BuiltinType::kTextureDepth2D; |
| } |
| if (str == "texture_depth_2d_array") { |
| return BuiltinType::kTextureDepth2DArray; |
| } |
| if (str == "texture_depth_cube") { |
| return BuiltinType::kTextureDepthCube; |
| } |
| if (str == "texture_depth_cube_array") { |
| return BuiltinType::kTextureDepthCubeArray; |
| } |
| if (str == "texture_depth_multisampled_2d") { |
| return BuiltinType::kTextureDepthMultisampled2D; |
| } |
| if (str == "texture_external") { |
| return BuiltinType::kTextureExternal; |
| } |
| if (str == "texture_multisampled_2d") { |
| return BuiltinType::kTextureMultisampled2D; |
| } |
| if (str == "texture_storage_1d") { |
| return BuiltinType::kTextureStorage1D; |
| } |
| if (str == "texture_storage_2d") { |
| return BuiltinType::kTextureStorage2D; |
| } |
| if (str == "texture_storage_2d_array") { |
| return BuiltinType::kTextureStorage2DArray; |
| } |
| if (str == "texture_storage_3d") { |
| return BuiltinType::kTextureStorage3D; |
| } |
| if (str == "u32") { |
| return BuiltinType::kU32; |
| } |
| if (str == "u8") { |
| return BuiltinType::kU8; |
| } |
| if (str == "vec2") { |
| return BuiltinType::kVec2; |
| } |
| if (str == "vec2f") { |
| return BuiltinType::kVec2F; |
| } |
| if (str == "vec2h") { |
| return BuiltinType::kVec2H; |
| } |
| if (str == "vec2i") { |
| return BuiltinType::kVec2I; |
| } |
| if (str == "vec2u") { |
| return BuiltinType::kVec2U; |
| } |
| if (str == "vec3") { |
| return BuiltinType::kVec3; |
| } |
| if (str == "vec3f") { |
| return BuiltinType::kVec3F; |
| } |
| if (str == "vec3h") { |
| return BuiltinType::kVec3H; |
| } |
| if (str == "vec3i") { |
| return BuiltinType::kVec3I; |
| } |
| if (str == "vec3u") { |
| return BuiltinType::kVec3U; |
| } |
| if (str == "vec4") { |
| return BuiltinType::kVec4; |
| } |
| if (str == "vec4f") { |
| return BuiltinType::kVec4F; |
| } |
| if (str == "vec4h") { |
| return BuiltinType::kVec4H; |
| } |
| if (str == "vec4i") { |
| return BuiltinType::kVec4I; |
| } |
| if (str == "vec4u") { |
| return BuiltinType::kVec4U; |
| } |
| return BuiltinType::kUndefined; |
| } |
| std::string_view ToString(BuiltinType value) { |
| switch (value) { |
| case BuiltinType::kUndefined: |
| return "undefined"; |
| case BuiltinType::kAtomicCompareExchangeResultI32: |
| return "__atomic_compare_exchange_result_i32"; |
| case BuiltinType::kAtomicCompareExchangeResultU32: |
| return "__atomic_compare_exchange_result_u32"; |
| case BuiltinType::kFrexpResultAbstract: |
| return "__frexp_result_abstract"; |
| case BuiltinType::kFrexpResultF16: |
| return "__frexp_result_f16"; |
| case BuiltinType::kFrexpResultF32: |
| return "__frexp_result_f32"; |
| case BuiltinType::kFrexpResultVec2Abstract: |
| return "__frexp_result_vec2_abstract"; |
| case BuiltinType::kFrexpResultVec2F16: |
| return "__frexp_result_vec2_f16"; |
| case BuiltinType::kFrexpResultVec2F32: |
| return "__frexp_result_vec2_f32"; |
| case BuiltinType::kFrexpResultVec3Abstract: |
| return "__frexp_result_vec3_abstract"; |
| case BuiltinType::kFrexpResultVec3F16: |
| return "__frexp_result_vec3_f16"; |
| case BuiltinType::kFrexpResultVec3F32: |
| return "__frexp_result_vec3_f32"; |
| case BuiltinType::kFrexpResultVec4Abstract: |
| return "__frexp_result_vec4_abstract"; |
| case BuiltinType::kFrexpResultVec4F16: |
| return "__frexp_result_vec4_f16"; |
| case BuiltinType::kFrexpResultVec4F32: |
| return "__frexp_result_vec4_f32"; |
| case BuiltinType::kModfResultAbstract: |
| return "__modf_result_abstract"; |
| case BuiltinType::kModfResultF16: |
| return "__modf_result_f16"; |
| case BuiltinType::kModfResultF32: |
| return "__modf_result_f32"; |
| case BuiltinType::kModfResultVec2Abstract: |
| return "__modf_result_vec2_abstract"; |
| case BuiltinType::kModfResultVec2F16: |
| return "__modf_result_vec2_f16"; |
| case BuiltinType::kModfResultVec2F32: |
| return "__modf_result_vec2_f32"; |
| case BuiltinType::kModfResultVec3Abstract: |
| return "__modf_result_vec3_abstract"; |
| case BuiltinType::kModfResultVec3F16: |
| return "__modf_result_vec3_f16"; |
| case BuiltinType::kModfResultVec3F32: |
| return "__modf_result_vec3_f32"; |
| case BuiltinType::kModfResultVec4Abstract: |
| return "__modf_result_vec4_abstract"; |
| case BuiltinType::kModfResultVec4F16: |
| return "__modf_result_vec4_f16"; |
| case BuiltinType::kModfResultVec4F32: |
| return "__modf_result_vec4_f32"; |
| case BuiltinType::kArray: |
| return "array"; |
| case BuiltinType::kAtomic: |
| return "atomic"; |
| case BuiltinType::kBindingArray: |
| return "binding_array"; |
| case BuiltinType::kBool: |
| return "bool"; |
| case BuiltinType::kF16: |
| return "f16"; |
| case BuiltinType::kF32: |
| return "f32"; |
| case BuiltinType::kI32: |
| return "i32"; |
| case BuiltinType::kI8: |
| return "i8"; |
| case BuiltinType::kInputAttachment: |
| return "input_attachment"; |
| case BuiltinType::kMat2X2: |
| return "mat2x2"; |
| case BuiltinType::kMat2X2F: |
| return "mat2x2f"; |
| case BuiltinType::kMat2X2H: |
| return "mat2x2h"; |
| case BuiltinType::kMat2X3: |
| return "mat2x3"; |
| case BuiltinType::kMat2X3F: |
| return "mat2x3f"; |
| case BuiltinType::kMat2X3H: |
| return "mat2x3h"; |
| case BuiltinType::kMat2X4: |
| return "mat2x4"; |
| case BuiltinType::kMat2X4F: |
| return "mat2x4f"; |
| case BuiltinType::kMat2X4H: |
| return "mat2x4h"; |
| case BuiltinType::kMat3X2: |
| return "mat3x2"; |
| case BuiltinType::kMat3X2F: |
| return "mat3x2f"; |
| case BuiltinType::kMat3X2H: |
| return "mat3x2h"; |
| case BuiltinType::kMat3X3: |
| return "mat3x3"; |
| case BuiltinType::kMat3X3F: |
| return "mat3x3f"; |
| case BuiltinType::kMat3X3H: |
| return "mat3x3h"; |
| case BuiltinType::kMat3X4: |
| return "mat3x4"; |
| case BuiltinType::kMat3X4F: |
| return "mat3x4f"; |
| case BuiltinType::kMat3X4H: |
| return "mat3x4h"; |
| case BuiltinType::kMat4X2: |
| return "mat4x2"; |
| case BuiltinType::kMat4X2F: |
| return "mat4x2f"; |
| case BuiltinType::kMat4X2H: |
| return "mat4x2h"; |
| case BuiltinType::kMat4X3: |
| return "mat4x3"; |
| case BuiltinType::kMat4X3F: |
| return "mat4x3f"; |
| case BuiltinType::kMat4X3H: |
| return "mat4x3h"; |
| case BuiltinType::kMat4X4: |
| return "mat4x4"; |
| case BuiltinType::kMat4X4F: |
| return "mat4x4f"; |
| case BuiltinType::kMat4X4H: |
| return "mat4x4h"; |
| case BuiltinType::kPtr: |
| return "ptr"; |
| case BuiltinType::kResourceBinding: |
| return "resource_binding"; |
| case BuiltinType::kSampler: |
| return "sampler"; |
| case BuiltinType::kSamplerComparison: |
| return "sampler_comparison"; |
| case BuiltinType::kSubgroupMatrixLeft: |
| return "subgroup_matrix_left"; |
| case BuiltinType::kSubgroupMatrixResult: |
| return "subgroup_matrix_result"; |
| case BuiltinType::kSubgroupMatrixRight: |
| return "subgroup_matrix_right"; |
| case BuiltinType::kTexelBuffer: |
| return "texel_buffer"; |
| case BuiltinType::kTexture1D: |
| return "texture_1d"; |
| case BuiltinType::kTexture2D: |
| return "texture_2d"; |
| case BuiltinType::kTexture2DArray: |
| return "texture_2d_array"; |
| case BuiltinType::kTexture3D: |
| return "texture_3d"; |
| case BuiltinType::kTextureCube: |
| return "texture_cube"; |
| case BuiltinType::kTextureCubeArray: |
| return "texture_cube_array"; |
| case BuiltinType::kTextureDepth2D: |
| return "texture_depth_2d"; |
| case BuiltinType::kTextureDepth2DArray: |
| return "texture_depth_2d_array"; |
| case BuiltinType::kTextureDepthCube: |
| return "texture_depth_cube"; |
| case BuiltinType::kTextureDepthCubeArray: |
| return "texture_depth_cube_array"; |
| case BuiltinType::kTextureDepthMultisampled2D: |
| return "texture_depth_multisampled_2d"; |
| case BuiltinType::kTextureExternal: |
| return "texture_external"; |
| case BuiltinType::kTextureMultisampled2D: |
| return "texture_multisampled_2d"; |
| case BuiltinType::kTextureStorage1D: |
| return "texture_storage_1d"; |
| case BuiltinType::kTextureStorage2D: |
| return "texture_storage_2d"; |
| case BuiltinType::kTextureStorage2DArray: |
| return "texture_storage_2d_array"; |
| case BuiltinType::kTextureStorage3D: |
| return "texture_storage_3d"; |
| case BuiltinType::kU32: |
| return "u32"; |
| case BuiltinType::kU8: |
| return "u8"; |
| case BuiltinType::kVec2: |
| return "vec2"; |
| case BuiltinType::kVec2F: |
| return "vec2f"; |
| case BuiltinType::kVec2H: |
| return "vec2h"; |
| case BuiltinType::kVec2I: |
| return "vec2i"; |
| case BuiltinType::kVec2U: |
| return "vec2u"; |
| case BuiltinType::kVec3: |
| return "vec3"; |
| case BuiltinType::kVec3F: |
| return "vec3f"; |
| case BuiltinType::kVec3H: |
| return "vec3h"; |
| case BuiltinType::kVec3I: |
| return "vec3i"; |
| case BuiltinType::kVec3U: |
| return "vec3u"; |
| case BuiltinType::kVec4: |
| return "vec4"; |
| case BuiltinType::kVec4F: |
| return "vec4f"; |
| case BuiltinType::kVec4H: |
| return "vec4h"; |
| case BuiltinType::kVec4I: |
| return "vec4i"; |
| case BuiltinType::kVec4U: |
| return "vec4u"; |
| } |
| return "<unknown>"; |
| } |
| |
| /// ParseBuiltinValue parses a BuiltinValue from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or BuiltinValue::kUndefined if the string could not be parsed. |
| BuiltinValue ParseBuiltinValue(std::string_view str) { |
| if (str == "barycentric_coord") { |
| return BuiltinValue::kBarycentricCoord; |
| } |
| if (str == "clip_distances") { |
| return BuiltinValue::kClipDistances; |
| } |
| if (str == "frag_depth") { |
| return BuiltinValue::kFragDepth; |
| } |
| if (str == "front_facing") { |
| return BuiltinValue::kFrontFacing; |
| } |
| if (str == "global_invocation_id") { |
| return BuiltinValue::kGlobalInvocationId; |
| } |
| if (str == "instance_index") { |
| return BuiltinValue::kInstanceIndex; |
| } |
| if (str == "local_invocation_id") { |
| return BuiltinValue::kLocalInvocationId; |
| } |
| if (str == "local_invocation_index") { |
| return BuiltinValue::kLocalInvocationIndex; |
| } |
| if (str == "num_workgroups") { |
| return BuiltinValue::kNumWorkgroups; |
| } |
| if (str == "position") { |
| return BuiltinValue::kPosition; |
| } |
| if (str == "primitive_index") { |
| return BuiltinValue::kPrimitiveIndex; |
| } |
| if (str == "sample_index") { |
| return BuiltinValue::kSampleIndex; |
| } |
| if (str == "sample_mask") { |
| return BuiltinValue::kSampleMask; |
| } |
| if (str == "subgroup_id") { |
| return BuiltinValue::kSubgroupId; |
| } |
| if (str == "subgroup_invocation_id") { |
| return BuiltinValue::kSubgroupInvocationId; |
| } |
| if (str == "subgroup_size") { |
| return BuiltinValue::kSubgroupSize; |
| } |
| if (str == "vertex_index") { |
| return BuiltinValue::kVertexIndex; |
| } |
| if (str == "workgroup_id") { |
| return BuiltinValue::kWorkgroupId; |
| } |
| return BuiltinValue::kUndefined; |
| } |
| std::string_view ToString(BuiltinValue value) { |
| switch (value) { |
| case BuiltinValue::kUndefined: |
| return "undefined"; |
| case BuiltinValue::kCullDistance: |
| return "__cull_distance"; |
| case BuiltinValue::kPointSize: |
| return "__point_size"; |
| case BuiltinValue::kBarycentricCoord: |
| return "barycentric_coord"; |
| case BuiltinValue::kClipDistances: |
| return "clip_distances"; |
| case BuiltinValue::kFragDepth: |
| return "frag_depth"; |
| case BuiltinValue::kFrontFacing: |
| return "front_facing"; |
| case BuiltinValue::kGlobalInvocationId: |
| return "global_invocation_id"; |
| case BuiltinValue::kInstanceIndex: |
| return "instance_index"; |
| case BuiltinValue::kLocalInvocationId: |
| return "local_invocation_id"; |
| case BuiltinValue::kLocalInvocationIndex: |
| return "local_invocation_index"; |
| case BuiltinValue::kNumWorkgroups: |
| return "num_workgroups"; |
| case BuiltinValue::kPosition: |
| return "position"; |
| case BuiltinValue::kPrimitiveIndex: |
| return "primitive_index"; |
| case BuiltinValue::kSampleIndex: |
| return "sample_index"; |
| case BuiltinValue::kSampleMask: |
| return "sample_mask"; |
| case BuiltinValue::kSubgroupId: |
| return "subgroup_id"; |
| case BuiltinValue::kSubgroupInvocationId: |
| return "subgroup_invocation_id"; |
| case BuiltinValue::kSubgroupSize: |
| return "subgroup_size"; |
| case BuiltinValue::kVertexIndex: |
| return "vertex_index"; |
| case BuiltinValue::kWorkgroupId: |
| return "workgroup_id"; |
| } |
| return "<unknown>"; |
| } |
| |
| /// ParseAttribute parses a Attribute from a string. |
| /// @param str the string to parse |
| /// @returns the parsed enum, or Attribute::kUndefined if the string could not be parsed. |
| Attribute ParseAttribute(std::string_view str) { |
| if (str == "align") { |
| return Attribute::kAlign; |
| } |
| if (str == "binding") { |
| return Attribute::kBinding; |
| } |
| if (str == "blend_src") { |
| return Attribute::kBlendSrc; |
| } |
| if (str == "builtin") { |
| return Attribute::kBuiltin; |
| } |
| if (str == "color") { |
| return Attribute::kColor; |
| } |
| if (str == "compute") { |
| return Attribute::kCompute; |
| } |
| if (str == "diagnostic") { |
| return Attribute::kDiagnostic; |
| } |
| if (str == "fragment") { |
| return Attribute::kFragment; |
| } |
| if (str == "group") { |
| return Attribute::kGroup; |
| } |
| if (str == "id") { |
| return Attribute::kId; |
| } |
| if (str == "input_attachment_index") { |
| return Attribute::kInputAttachmentIndex; |
| } |
| if (str == "interpolate") { |
| return Attribute::kInterpolate; |
| } |
| if (str == "invariant") { |
| return Attribute::kInvariant; |
| } |
| if (str == "location") { |
| return Attribute::kLocation; |
| } |
| if (str == "must_use") { |
| return Attribute::kMustUse; |
| } |
| if (str == "size") { |
| return Attribute::kSize; |
| } |
| if (str == "vertex") { |
| return Attribute::kVertex; |
| } |
| if (str == "workgroup_size") { |
| return Attribute::kWorkgroupSize; |
| } |
| return Attribute::kUndefined; |
| } |
| std::string_view ToString(Attribute value) { |
| switch (value) { |
| case Attribute::kUndefined: |
| return "undefined"; |
| case Attribute::kAlign: |
| return "align"; |
| case Attribute::kBinding: |
| return "binding"; |
| case Attribute::kBlendSrc: |
| return "blend_src"; |
| case Attribute::kBuiltin: |
| return "builtin"; |
| case Attribute::kColor: |
| return "color"; |
| case Attribute::kCompute: |
| return "compute"; |
| case Attribute::kDiagnostic: |
| return "diagnostic"; |
| case Attribute::kFragment: |
| return "fragment"; |
| case Attribute::kGroup: |
| return "group"; |
| case Attribute::kId: |
| return "id"; |
| case Attribute::kInputAttachmentIndex: |
| return "input_attachment_index"; |
| case Attribute::kInterpolate: |
| return "interpolate"; |
| case Attribute::kInvariant: |
| return "invariant"; |
| case Attribute::kLocation: |
| return "location"; |
| case Attribute::kMustUse: |
| return "must_use"; |
| case Attribute::kSize: |
| return "size"; |
| case Attribute::kVertex: |
| return "vertex"; |
| case Attribute::kWorkgroupSize: |
| return "workgroup_size"; |
| } |
| return "<unknown>"; |
| } |
| |
| std::string_view ToString(ParameterUsage usage) { |
| switch (usage) { |
| case ParameterUsage::kNone: |
| return "none"; |
| case ParameterUsage::kArrayIndex: |
| return "array_index"; |
| case ParameterUsage::kBase: |
| return "base"; |
| case ParameterUsage::kBias: |
| return "bias"; |
| case ParameterUsage::kBits: |
| return "bits"; |
| case ParameterUsage::kCompareValue: |
| return "compare_value"; |
| case ParameterUsage::kComponent: |
| return "component"; |
| case ParameterUsage::kConstOffset: |
| return "const_offset"; |
| case ParameterUsage::kCoords: |
| return "coords"; |
| case ParameterUsage::kCount: |
| return "count"; |
| case ParameterUsage::kDdx: |
| return "ddx"; |
| case ParameterUsage::kDdy: |
| return "ddy"; |
| case ParameterUsage::kDelta: |
| return "delta"; |
| case ParameterUsage::kDepth: |
| return "depth"; |
| case ParameterUsage::kDepthRef: |
| return "depth_ref"; |
| case ParameterUsage::kDir: |
| return "dir"; |
| case ParameterUsage::kDref: |
| return "dref"; |
| case ParameterUsage::kE: |
| return "e"; |
| case ParameterUsage::kElements: |
| return "elements"; |
| case ParameterUsage::kExp: |
| return "exp"; |
| case ParameterUsage::kGroupOperation: |
| return "group_operation"; |
| case ParameterUsage::kHeight: |
| return "height"; |
| case ParameterUsage::kI: |
| return "i"; |
| case ParameterUsage::kId: |
| return "id"; |
| case ParameterUsage::kImage: |
| return "image"; |
| case ParameterUsage::kImageOperands: |
| return "image_operands"; |
| case ParameterUsage::kIndex: |
| return "index"; |
| case ParameterUsage::kInputAttachment: |
| return "input_attachment"; |
| case ParameterUsage::kInsert: |
| return "insert"; |
| case ParameterUsage::kLevel: |
| return "level"; |
| case ParameterUsage::kLocation: |
| return "location"; |
| case ParameterUsage::kLod: |
| return "lod"; |
| case ParameterUsage::kMask: |
| return "mask"; |
| case ParameterUsage::kNumLevels: |
| return "num_levels"; |
| case ParameterUsage::kOffset: |
| return "offset"; |
| case ParameterUsage::kOriginalValue: |
| return "original_value"; |
| case ParameterUsage::kRefz: |
| return "refz"; |
| case ParameterUsage::kResult: |
| return "result"; |
| case ParameterUsage::kSample: |
| return "sample"; |
| case ParameterUsage::kSampleIndex: |
| return "sample_index"; |
| case ParameterUsage::kSampler: |
| return "sampler"; |
| case ParameterUsage::kSamples: |
| return "samples"; |
| case ParameterUsage::kScope: |
| return "scope"; |
| case ParameterUsage::kSourceLaneIndex: |
| return "sourceLaneIndex"; |
| case ParameterUsage::kTexel: |
| return "texel"; |
| case ParameterUsage::kTexture: |
| return "texture"; |
| case ParameterUsage::kValue: |
| return "value"; |
| case ParameterUsage::kW: |
| return "w"; |
| case ParameterUsage::kWidth: |
| return "width"; |
| case ParameterUsage::kX: |
| return "x"; |
| case ParameterUsage::kXy: |
| return "xy"; |
| case ParameterUsage::kXyz: |
| return "xyz"; |
| case ParameterUsage::kY: |
| return "y"; |
| case ParameterUsage::kYz: |
| return "yz"; |
| case ParameterUsage::kZ: |
| return "z"; |
| case ParameterUsage::kZw: |
| return "zw"; |
| case ParameterUsage::kZyw: |
| return "zyw"; |
| } |
| return "<unknown>"; |
| } |
| |
| BuiltinFn ParseBuiltinFn(std::string_view name) { |
| if (name == "abs") { |
| return BuiltinFn::kAbs; |
| } |
| if (name == "acos") { |
| return BuiltinFn::kAcos; |
| } |
| if (name == "acosh") { |
| return BuiltinFn::kAcosh; |
| } |
| if (name == "all") { |
| return BuiltinFn::kAll; |
| } |
| if (name == "any") { |
| return BuiltinFn::kAny; |
| } |
| if (name == "arrayLength") { |
| return BuiltinFn::kArrayLength; |
| } |
| if (name == "asin") { |
| return BuiltinFn::kAsin; |
| } |
| if (name == "asinh") { |
| return BuiltinFn::kAsinh; |
| } |
| if (name == "atan") { |
| return BuiltinFn::kAtan; |
| } |
| if (name == "atan2") { |
| return BuiltinFn::kAtan2; |
| } |
| if (name == "atanh") { |
| return BuiltinFn::kAtanh; |
| } |
| if (name == "ceil") { |
| return BuiltinFn::kCeil; |
| } |
| if (name == "clamp") { |
| return BuiltinFn::kClamp; |
| } |
| if (name == "cos") { |
| return BuiltinFn::kCos; |
| } |
| if (name == "cosh") { |
| return BuiltinFn::kCosh; |
| } |
| if (name == "countLeadingZeros") { |
| return BuiltinFn::kCountLeadingZeros; |
| } |
| if (name == "countOneBits") { |
| return BuiltinFn::kCountOneBits; |
| } |
| if (name == "countTrailingZeros") { |
| return BuiltinFn::kCountTrailingZeros; |
| } |
| if (name == "cross") { |
| return BuiltinFn::kCross; |
| } |
| if (name == "degrees") { |
| return BuiltinFn::kDegrees; |
| } |
| if (name == "determinant") { |
| return BuiltinFn::kDeterminant; |
| } |
| if (name == "distance") { |
| return BuiltinFn::kDistance; |
| } |
| if (name == "dot") { |
| return BuiltinFn::kDot; |
| } |
| if (name == "dot4I8Packed") { |
| return BuiltinFn::kDot4I8Packed; |
| } |
| if (name == "dot4U8Packed") { |
| return BuiltinFn::kDot4U8Packed; |
| } |
| if (name == "dpdx") { |
| return BuiltinFn::kDpdx; |
| } |
| if (name == "dpdxCoarse") { |
| return BuiltinFn::kDpdxCoarse; |
| } |
| if (name == "dpdxFine") { |
| return BuiltinFn::kDpdxFine; |
| } |
| if (name == "dpdy") { |
| return BuiltinFn::kDpdy; |
| } |
| if (name == "dpdyCoarse") { |
| return BuiltinFn::kDpdyCoarse; |
| } |
| if (name == "dpdyFine") { |
| return BuiltinFn::kDpdyFine; |
| } |
| if (name == "exp") { |
| return BuiltinFn::kExp; |
| } |
| if (name == "exp2") { |
| return BuiltinFn::kExp2; |
| } |
| if (name == "extractBits") { |
| return BuiltinFn::kExtractBits; |
| } |
| if (name == "faceForward") { |
| return BuiltinFn::kFaceForward; |
| } |
| if (name == "firstLeadingBit") { |
| return BuiltinFn::kFirstLeadingBit; |
| } |
| if (name == "firstTrailingBit") { |
| return BuiltinFn::kFirstTrailingBit; |
| } |
| if (name == "floor") { |
| return BuiltinFn::kFloor; |
| } |
| if (name == "fma") { |
| return BuiltinFn::kFma; |
| } |
| if (name == "fract") { |
| return BuiltinFn::kFract; |
| } |
| if (name == "frexp") { |
| return BuiltinFn::kFrexp; |
| } |
| if (name == "fwidth") { |
| return BuiltinFn::kFwidth; |
| } |
| if (name == "fwidthCoarse") { |
| return BuiltinFn::kFwidthCoarse; |
| } |
| if (name == "fwidthFine") { |
| return BuiltinFn::kFwidthFine; |
| } |
| if (name == "insertBits") { |
| return BuiltinFn::kInsertBits; |
| } |
| if (name == "inverseSqrt") { |
| return BuiltinFn::kInverseSqrt; |
| } |
| if (name == "ldexp") { |
| return BuiltinFn::kLdexp; |
| } |
| if (name == "length") { |
| return BuiltinFn::kLength; |
| } |
| if (name == "log") { |
| return BuiltinFn::kLog; |
| } |
| if (name == "log2") { |
| return BuiltinFn::kLog2; |
| } |
| if (name == "max") { |
| return BuiltinFn::kMax; |
| } |
| if (name == "min") { |
| return BuiltinFn::kMin; |
| } |
| if (name == "mix") { |
| return BuiltinFn::kMix; |
| } |
| if (name == "modf") { |
| return BuiltinFn::kModf; |
| } |
| if (name == "normalize") { |
| return BuiltinFn::kNormalize; |
| } |
| if (name == "pack2x16float") { |
| return BuiltinFn::kPack2X16Float; |
| } |
| if (name == "pack2x16snorm") { |
| return BuiltinFn::kPack2X16Snorm; |
| } |
| if (name == "pack2x16unorm") { |
| return BuiltinFn::kPack2X16Unorm; |
| } |
| if (name == "pack4x8snorm") { |
| return BuiltinFn::kPack4X8Snorm; |
| } |
| if (name == "pack4x8unorm") { |
| return BuiltinFn::kPack4X8Unorm; |
| } |
| if (name == "pack4xI8") { |
| return BuiltinFn::kPack4XI8; |
| } |
| if (name == "pack4xU8") { |
| return BuiltinFn::kPack4XU8; |
| } |
| if (name == "pack4xI8Clamp") { |
| return BuiltinFn::kPack4XI8Clamp; |
| } |
| if (name == "pack4xU8Clamp") { |
| return BuiltinFn::kPack4XU8Clamp; |
| } |
| if (name == "pow") { |
| return BuiltinFn::kPow; |
| } |
| if (name == "quantizeToF16") { |
| return BuiltinFn::kQuantizeToF16; |
| } |
| if (name == "radians") { |
| return BuiltinFn::kRadians; |
| } |
| if (name == "reflect") { |
| return BuiltinFn::kReflect; |
| } |
| if (name == "refract") { |
| return BuiltinFn::kRefract; |
| } |
| if (name == "reverseBits") { |
| return BuiltinFn::kReverseBits; |
| } |
| if (name == "round") { |
| return BuiltinFn::kRound; |
| } |
| if (name == "saturate") { |
| return BuiltinFn::kSaturate; |
| } |
| if (name == "select") { |
| return BuiltinFn::kSelect; |
| } |
| if (name == "sign") { |
| return BuiltinFn::kSign; |
| } |
| if (name == "sin") { |
| return BuiltinFn::kSin; |
| } |
| if (name == "sinh") { |
| return BuiltinFn::kSinh; |
| } |
| if (name == "smoothstep") { |
| return BuiltinFn::kSmoothstep; |
| } |
| if (name == "sqrt") { |
| return BuiltinFn::kSqrt; |
| } |
| if (name == "step") { |
| return BuiltinFn::kStep; |
| } |
| if (name == "storageBarrier") { |
| return BuiltinFn::kStorageBarrier; |
| } |
| if (name == "tan") { |
| return BuiltinFn::kTan; |
| } |
| if (name == "tanh") { |
| return BuiltinFn::kTanh; |
| } |
| if (name == "transpose") { |
| return BuiltinFn::kTranspose; |
| } |
| if (name == "trunc") { |
| return BuiltinFn::kTrunc; |
| } |
| if (name == "unpack2x16float") { |
| return BuiltinFn::kUnpack2X16Float; |
| } |
| if (name == "unpack2x16snorm") { |
| return BuiltinFn::kUnpack2X16Snorm; |
| } |
| if (name == "unpack2x16unorm") { |
| return BuiltinFn::kUnpack2X16Unorm; |
| } |
| if (name == "unpack4x8snorm") { |
| return BuiltinFn::kUnpack4X8Snorm; |
| } |
| if (name == "unpack4x8unorm") { |
| return BuiltinFn::kUnpack4X8Unorm; |
| } |
| if (name == "unpack4xI8") { |
| return BuiltinFn::kUnpack4XI8; |
| } |
| if (name == "unpack4xU8") { |
| return BuiltinFn::kUnpack4XU8; |
| } |
| if (name == "workgroupBarrier") { |
| return BuiltinFn::kWorkgroupBarrier; |
| } |
| if (name == "textureBarrier") { |
| return BuiltinFn::kTextureBarrier; |
| } |
| if (name == "textureDimensions") { |
| return BuiltinFn::kTextureDimensions; |
| } |
| if (name == "textureGather") { |
| return BuiltinFn::kTextureGather; |
| } |
| if (name == "textureGatherCompare") { |
| return BuiltinFn::kTextureGatherCompare; |
| } |
| if (name == "textureNumLayers") { |
| return BuiltinFn::kTextureNumLayers; |
| } |
| if (name == "textureNumLevels") { |
| return BuiltinFn::kTextureNumLevels; |
| } |
| if (name == "textureNumSamples") { |
| return BuiltinFn::kTextureNumSamples; |
| } |
| if (name == "textureSample") { |
| return BuiltinFn::kTextureSample; |
| } |
| if (name == "textureSampleBias") { |
| return BuiltinFn::kTextureSampleBias; |
| } |
| if (name == "textureSampleCompare") { |
| return BuiltinFn::kTextureSampleCompare; |
| } |
| if (name == "textureSampleCompareLevel") { |
| return BuiltinFn::kTextureSampleCompareLevel; |
| } |
| if (name == "textureSampleGrad") { |
| return BuiltinFn::kTextureSampleGrad; |
| } |
| if (name == "textureSampleLevel") { |
| return BuiltinFn::kTextureSampleLevel; |
| } |
| if (name == "textureSampleBaseClampToEdge") { |
| return BuiltinFn::kTextureSampleBaseClampToEdge; |
| } |
| if (name == "textureStore") { |
| return BuiltinFn::kTextureStore; |
| } |
| if (name == "textureLoad") { |
| return BuiltinFn::kTextureLoad; |
| } |
| if (name == "inputAttachmentLoad") { |
| return BuiltinFn::kInputAttachmentLoad; |
| } |
| if (name == "atomicLoad") { |
| return BuiltinFn::kAtomicLoad; |
| } |
| if (name == "atomicStore") { |
| return BuiltinFn::kAtomicStore; |
| } |
| if (name == "atomicAdd") { |
| return BuiltinFn::kAtomicAdd; |
| } |
| if (name == "atomicSub") { |
| return BuiltinFn::kAtomicSub; |
| } |
| if (name == "atomicMax") { |
| return BuiltinFn::kAtomicMax; |
| } |
| if (name == "atomicMin") { |
| return BuiltinFn::kAtomicMin; |
| } |
| if (name == "atomicAnd") { |
| return BuiltinFn::kAtomicAnd; |
| } |
| if (name == "atomicOr") { |
| return BuiltinFn::kAtomicOr; |
| } |
| if (name == "atomicXor") { |
| return BuiltinFn::kAtomicXor; |
| } |
| if (name == "atomicExchange") { |
| return BuiltinFn::kAtomicExchange; |
| } |
| if (name == "atomicCompareExchangeWeak") { |
| return BuiltinFn::kAtomicCompareExchangeWeak; |
| } |
| if (name == "subgroupBallot") { |
| return BuiltinFn::kSubgroupBallot; |
| } |
| if (name == "subgroupElect") { |
| return BuiltinFn::kSubgroupElect; |
| } |
| if (name == "subgroupBroadcast") { |
| return BuiltinFn::kSubgroupBroadcast; |
| } |
| if (name == "subgroupBroadcastFirst") { |
| return BuiltinFn::kSubgroupBroadcastFirst; |
| } |
| if (name == "subgroupShuffle") { |
| return BuiltinFn::kSubgroupShuffle; |
| } |
| if (name == "subgroupShuffleXor") { |
| return BuiltinFn::kSubgroupShuffleXor; |
| } |
| if (name == "subgroupShuffleUp") { |
| return BuiltinFn::kSubgroupShuffleUp; |
| } |
| if (name == "subgroupShuffleDown") { |
| return BuiltinFn::kSubgroupShuffleDown; |
| } |
| if (name == "subgroupAdd") { |
| return BuiltinFn::kSubgroupAdd; |
| } |
| if (name == "subgroupInclusiveAdd") { |
| return BuiltinFn::kSubgroupInclusiveAdd; |
| } |
| if (name == "subgroupExclusiveAdd") { |
| return BuiltinFn::kSubgroupExclusiveAdd; |
| } |
| if (name == "subgroupMul") { |
| return BuiltinFn::kSubgroupMul; |
| } |
| if (name == "subgroupInclusiveMul") { |
| return BuiltinFn::kSubgroupInclusiveMul; |
| } |
| if (name == "subgroupExclusiveMul") { |
| return BuiltinFn::kSubgroupExclusiveMul; |
| } |
| if (name == "subgroupAnd") { |
| return BuiltinFn::kSubgroupAnd; |
| } |
| if (name == "subgroupOr") { |
| return BuiltinFn::kSubgroupOr; |
| } |
| if (name == "subgroupXor") { |
| return BuiltinFn::kSubgroupXor; |
| } |
| if (name == "subgroupMin") { |
| return BuiltinFn::kSubgroupMin; |
| } |
| if (name == "subgroupMax") { |
| return BuiltinFn::kSubgroupMax; |
| } |
| if (name == "subgroupAll") { |
| return BuiltinFn::kSubgroupAll; |
| } |
| if (name == "subgroupAny") { |
| return BuiltinFn::kSubgroupAny; |
| } |
| if (name == "quadBroadcast") { |
| return BuiltinFn::kQuadBroadcast; |
| } |
| if (name == "quadSwapX") { |
| return BuiltinFn::kQuadSwapX; |
| } |
| if (name == "quadSwapY") { |
| return BuiltinFn::kQuadSwapY; |
| } |
| if (name == "quadSwapDiagonal") { |
| return BuiltinFn::kQuadSwapDiagonal; |
| } |
| if (name == "subgroupMatrixLoad") { |
| return BuiltinFn::kSubgroupMatrixLoad; |
| } |
| if (name == "subgroupMatrixStore") { |
| return BuiltinFn::kSubgroupMatrixStore; |
| } |
| if (name == "subgroupMatrixMultiply") { |
| return BuiltinFn::kSubgroupMatrixMultiply; |
| } |
| if (name == "subgroupMatrixMultiplyAccumulate") { |
| return BuiltinFn::kSubgroupMatrixMultiplyAccumulate; |
| } |
| if (name == "print") { |
| return BuiltinFn::kPrint; |
| } |
| if (name == "hasBinding") { |
| return BuiltinFn::kHasBinding; |
| } |
| if (name == "getBinding") { |
| return BuiltinFn::kGetBinding; |
| } |
| return BuiltinFn::kNone; |
| } |
| |
| const char* str(BuiltinFn i) { |
| switch (i) { |
| case BuiltinFn::kNone: |
| return "<none>"; |
| case BuiltinFn::kAbs: |
| return "abs"; |
| case BuiltinFn::kAcos: |
| return "acos"; |
| case BuiltinFn::kAcosh: |
| return "acosh"; |
| case BuiltinFn::kAll: |
| return "all"; |
| case BuiltinFn::kAny: |
| return "any"; |
| case BuiltinFn::kArrayLength: |
| return "arrayLength"; |
| case BuiltinFn::kAsin: |
| return "asin"; |
| case BuiltinFn::kAsinh: |
| return "asinh"; |
| case BuiltinFn::kAtan: |
| return "atan"; |
| case BuiltinFn::kAtan2: |
| return "atan2"; |
| case BuiltinFn::kAtanh: |
| return "atanh"; |
| case BuiltinFn::kCeil: |
| return "ceil"; |
| case BuiltinFn::kClamp: |
| return "clamp"; |
| case BuiltinFn::kCos: |
| return "cos"; |
| case BuiltinFn::kCosh: |
| return "cosh"; |
| case BuiltinFn::kCountLeadingZeros: |
| return "countLeadingZeros"; |
| case BuiltinFn::kCountOneBits: |
| return "countOneBits"; |
| case BuiltinFn::kCountTrailingZeros: |
| return "countTrailingZeros"; |
| case BuiltinFn::kCross: |
| return "cross"; |
| case BuiltinFn::kDegrees: |
| return "degrees"; |
| case BuiltinFn::kDeterminant: |
| return "determinant"; |
| case BuiltinFn::kDistance: |
| return "distance"; |
| case BuiltinFn::kDot: |
| return "dot"; |
| case BuiltinFn::kDot4I8Packed: |
| return "dot4I8Packed"; |
| case BuiltinFn::kDot4U8Packed: |
| return "dot4U8Packed"; |
| case BuiltinFn::kDpdx: |
| return "dpdx"; |
| case BuiltinFn::kDpdxCoarse: |
| return "dpdxCoarse"; |
| case BuiltinFn::kDpdxFine: |
| return "dpdxFine"; |
| case BuiltinFn::kDpdy: |
| return "dpdy"; |
| case BuiltinFn::kDpdyCoarse: |
| return "dpdyCoarse"; |
| case BuiltinFn::kDpdyFine: |
| return "dpdyFine"; |
| case BuiltinFn::kExp: |
| return "exp"; |
| case BuiltinFn::kExp2: |
| return "exp2"; |
| case BuiltinFn::kExtractBits: |
| return "extractBits"; |
| case BuiltinFn::kFaceForward: |
| return "faceForward"; |
| case BuiltinFn::kFirstLeadingBit: |
| return "firstLeadingBit"; |
| case BuiltinFn::kFirstTrailingBit: |
| return "firstTrailingBit"; |
| case BuiltinFn::kFloor: |
| return "floor"; |
| case BuiltinFn::kFma: |
| return "fma"; |
| case BuiltinFn::kFract: |
| return "fract"; |
| case BuiltinFn::kFrexp: |
| return "frexp"; |
| case BuiltinFn::kFwidth: |
| return "fwidth"; |
| case BuiltinFn::kFwidthCoarse: |
| return "fwidthCoarse"; |
| case BuiltinFn::kFwidthFine: |
| return "fwidthFine"; |
| case BuiltinFn::kInsertBits: |
| return "insertBits"; |
| case BuiltinFn::kInverseSqrt: |
| return "inverseSqrt"; |
| case BuiltinFn::kLdexp: |
| return "ldexp"; |
| case BuiltinFn::kLength: |
| return "length"; |
| case BuiltinFn::kLog: |
| return "log"; |
| case BuiltinFn::kLog2: |
| return "log2"; |
| case BuiltinFn::kMax: |
| return "max"; |
| case BuiltinFn::kMin: |
| return "min"; |
| case BuiltinFn::kMix: |
| return "mix"; |
| case BuiltinFn::kModf: |
| return "modf"; |
| case BuiltinFn::kNormalize: |
| return "normalize"; |
| case BuiltinFn::kPack2X16Float: |
| return "pack2x16float"; |
| case BuiltinFn::kPack2X16Snorm: |
| return "pack2x16snorm"; |
| case BuiltinFn::kPack2X16Unorm: |
| return "pack2x16unorm"; |
| case BuiltinFn::kPack4X8Snorm: |
| return "pack4x8snorm"; |
| case BuiltinFn::kPack4X8Unorm: |
| return "pack4x8unorm"; |
| case BuiltinFn::kPack4XI8: |
| return "pack4xI8"; |
| case BuiltinFn::kPack4XU8: |
| return "pack4xU8"; |
| case BuiltinFn::kPack4XI8Clamp: |
| return "pack4xI8Clamp"; |
| case BuiltinFn::kPack4XU8Clamp: |
| return "pack4xU8Clamp"; |
| case BuiltinFn::kPow: |
| return "pow"; |
| case BuiltinFn::kQuantizeToF16: |
| return "quantizeToF16"; |
| case BuiltinFn::kRadians: |
| return "radians"; |
| case BuiltinFn::kReflect: |
| return "reflect"; |
| case BuiltinFn::kRefract: |
| return "refract"; |
| case BuiltinFn::kReverseBits: |
| return "reverseBits"; |
| case BuiltinFn::kRound: |
| return "round"; |
| case BuiltinFn::kSaturate: |
| return "saturate"; |
| case BuiltinFn::kSelect: |
| return "select"; |
| case BuiltinFn::kSign: |
| return "sign"; |
| case BuiltinFn::kSin: |
| return "sin"; |
| case BuiltinFn::kSinh: |
| return "sinh"; |
| case BuiltinFn::kSmoothstep: |
| return "smoothstep"; |
| case BuiltinFn::kSqrt: |
| return "sqrt"; |
| case BuiltinFn::kStep: |
| return "step"; |
| case BuiltinFn::kStorageBarrier: |
| return "storageBarrier"; |
| case BuiltinFn::kTan: |
| return "tan"; |
| case BuiltinFn::kTanh: |
| return "tanh"; |
| case BuiltinFn::kTranspose: |
| return "transpose"; |
| case BuiltinFn::kTrunc: |
| return "trunc"; |
| case BuiltinFn::kUnpack2X16Float: |
| return "unpack2x16float"; |
| case BuiltinFn::kUnpack2X16Snorm: |
| return "unpack2x16snorm"; |
| case BuiltinFn::kUnpack2X16Unorm: |
| return "unpack2x16unorm"; |
| case BuiltinFn::kUnpack4X8Snorm: |
| return "unpack4x8snorm"; |
| case BuiltinFn::kUnpack4X8Unorm: |
| return "unpack4x8unorm"; |
| case BuiltinFn::kUnpack4XI8: |
| return "unpack4xI8"; |
| case BuiltinFn::kUnpack4XU8: |
| return "unpack4xU8"; |
| case BuiltinFn::kWorkgroupBarrier: |
| return "workgroupBarrier"; |
| case BuiltinFn::kTextureBarrier: |
| return "textureBarrier"; |
| case BuiltinFn::kTextureDimensions: |
| return "textureDimensions"; |
| case BuiltinFn::kTextureGather: |
| return "textureGather"; |
| case BuiltinFn::kTextureGatherCompare: |
| return "textureGatherCompare"; |
| case BuiltinFn::kTextureNumLayers: |
| return "textureNumLayers"; |
| case BuiltinFn::kTextureNumLevels: |
| return "textureNumLevels"; |
| case BuiltinFn::kTextureNumSamples: |
| return "textureNumSamples"; |
| case BuiltinFn::kTextureSample: |
| return "textureSample"; |
| case BuiltinFn::kTextureSampleBias: |
| return "textureSampleBias"; |
| case BuiltinFn::kTextureSampleCompare: |
| return "textureSampleCompare"; |
| case BuiltinFn::kTextureSampleCompareLevel: |
| return "textureSampleCompareLevel"; |
| case BuiltinFn::kTextureSampleGrad: |
| return "textureSampleGrad"; |
| case BuiltinFn::kTextureSampleLevel: |
| return "textureSampleLevel"; |
| case BuiltinFn::kTextureSampleBaseClampToEdge: |
| return "textureSampleBaseClampToEdge"; |
| case BuiltinFn::kTextureStore: |
| return "textureStore"; |
| case BuiltinFn::kTextureLoad: |
| return "textureLoad"; |
| case BuiltinFn::kInputAttachmentLoad: |
| return "inputAttachmentLoad"; |
| case BuiltinFn::kAtomicLoad: |
| return "atomicLoad"; |
| case BuiltinFn::kAtomicStore: |
| return "atomicStore"; |
| case BuiltinFn::kAtomicAdd: |
| return "atomicAdd"; |
| case BuiltinFn::kAtomicSub: |
| return "atomicSub"; |
| case BuiltinFn::kAtomicMax: |
| return "atomicMax"; |
| case BuiltinFn::kAtomicMin: |
| return "atomicMin"; |
| case BuiltinFn::kAtomicAnd: |
| return "atomicAnd"; |
| case BuiltinFn::kAtomicOr: |
| return "atomicOr"; |
| case BuiltinFn::kAtomicXor: |
| return "atomicXor"; |
| case BuiltinFn::kAtomicExchange: |
| return "atomicExchange"; |
| case BuiltinFn::kAtomicCompareExchangeWeak: |
| return "atomicCompareExchangeWeak"; |
| case BuiltinFn::kSubgroupBallot: |
| return "subgroupBallot"; |
| case BuiltinFn::kSubgroupElect: |
| return "subgroupElect"; |
| case BuiltinFn::kSubgroupBroadcast: |
| return "subgroupBroadcast"; |
| case BuiltinFn::kSubgroupBroadcastFirst: |
| return "subgroupBroadcastFirst"; |
| case BuiltinFn::kSubgroupShuffle: |
| return "subgroupShuffle"; |
| case BuiltinFn::kSubgroupShuffleXor: |
| return "subgroupShuffleXor"; |
| case BuiltinFn::kSubgroupShuffleUp: |
| return "subgroupShuffleUp"; |
| case BuiltinFn::kSubgroupShuffleDown: |
| return "subgroupShuffleDown"; |
| case BuiltinFn::kSubgroupAdd: |
| return "subgroupAdd"; |
| case BuiltinFn::kSubgroupInclusiveAdd: |
| return "subgroupInclusiveAdd"; |
| case BuiltinFn::kSubgroupExclusiveAdd: |
| return "subgroupExclusiveAdd"; |
| case BuiltinFn::kSubgroupMul: |
| return "subgroupMul"; |
| case BuiltinFn::kSubgroupInclusiveMul: |
| return "subgroupInclusiveMul"; |
| case BuiltinFn::kSubgroupExclusiveMul: |
| return "subgroupExclusiveMul"; |
| case BuiltinFn::kSubgroupAnd: |
| return "subgroupAnd"; |
| case BuiltinFn::kSubgroupOr: |
| return "subgroupOr"; |
| case BuiltinFn::kSubgroupXor: |
| return "subgroupXor"; |
| case BuiltinFn::kSubgroupMin: |
| return "subgroupMin"; |
| case BuiltinFn::kSubgroupMax: |
| return "subgroupMax"; |
| case BuiltinFn::kSubgroupAll: |
| return "subgroupAll"; |
| case BuiltinFn::kSubgroupAny: |
| return "subgroupAny"; |
| case BuiltinFn::kQuadBroadcast: |
| return "quadBroadcast"; |
| case BuiltinFn::kQuadSwapX: |
| return "quadSwapX"; |
| case BuiltinFn::kQuadSwapY: |
| return "quadSwapY"; |
| case BuiltinFn::kQuadSwapDiagonal: |
| return "quadSwapDiagonal"; |
| case BuiltinFn::kSubgroupMatrixLoad: |
| return "subgroupMatrixLoad"; |
| case BuiltinFn::kSubgroupMatrixStore: |
| return "subgroupMatrixStore"; |
| case BuiltinFn::kSubgroupMatrixMultiply: |
| return "subgroupMatrixMultiply"; |
| case BuiltinFn::kSubgroupMatrixMultiplyAccumulate: |
| return "subgroupMatrixMultiplyAccumulate"; |
| case BuiltinFn::kPrint: |
| return "print"; |
| case BuiltinFn::kHasBinding: |
| return "hasBinding"; |
| case BuiltinFn::kGetBinding: |
| return "getBinding"; |
| } |
| return "<unknown>"; |
| } |
| |
| bool IsTexture(BuiltinFn f) { |
| return IsImageQuery(f) || // |
| f == BuiltinFn::kTextureGather || // |
| f == BuiltinFn::kTextureGatherCompare || // |
| f == BuiltinFn::kTextureLoad || // |
| f == BuiltinFn::kTextureSample || // |
| f == BuiltinFn::kTextureSampleBaseClampToEdge || // |
| f == BuiltinFn::kTextureSampleBias || // |
| f == BuiltinFn::kTextureSampleCompare || // |
| f == BuiltinFn::kTextureSampleCompareLevel || // |
| f == BuiltinFn::kTextureSampleGrad || // |
| f == BuiltinFn::kTextureSampleLevel || // |
| f == BuiltinFn::kTextureStore || f == BuiltinFn::kInputAttachmentLoad; |
| } |
| |
| bool IsImageQuery(BuiltinFn f) { |
| return f == BuiltinFn::kTextureDimensions || |
| f == BuiltinFn::kTextureNumLayers || f == BuiltinFn::kTextureNumLevels || |
| f == BuiltinFn::kTextureNumSamples; |
| } |
| |
| bool IsAtomic(BuiltinFn f) { |
| return f == BuiltinFn::kAtomicLoad || f == BuiltinFn::kAtomicStore || |
| f == BuiltinFn::kAtomicAdd || f == BuiltinFn::kAtomicSub || |
| f == BuiltinFn::kAtomicMax || f == BuiltinFn::kAtomicMin || |
| f == BuiltinFn::kAtomicAnd || f == BuiltinFn::kAtomicOr || |
| f == BuiltinFn::kAtomicXor || f == BuiltinFn::kAtomicExchange || |
| f == BuiltinFn::kAtomicCompareExchangeWeak; |
| } |
| |
| bool IsSubgroup(BuiltinFn f) { |
| switch (f) { |
| case BuiltinFn::kSubgroupBallot: |
| case BuiltinFn::kSubgroupElect: |
| case BuiltinFn::kSubgroupBroadcast: |
| case BuiltinFn::kSubgroupBroadcastFirst: |
| case BuiltinFn::kSubgroupShuffle: |
| case BuiltinFn::kSubgroupShuffleXor: |
| case BuiltinFn::kSubgroupShuffleUp: |
| case BuiltinFn::kSubgroupShuffleDown: |
| case BuiltinFn::kSubgroupAdd: |
| case BuiltinFn::kSubgroupInclusiveAdd: |
| case BuiltinFn::kSubgroupExclusiveAdd: |
| case BuiltinFn::kSubgroupMul: |
| case BuiltinFn::kSubgroupInclusiveMul: |
| case BuiltinFn::kSubgroupExclusiveMul: |
| case BuiltinFn::kSubgroupAnd: |
| case BuiltinFn::kSubgroupOr: |
| case BuiltinFn::kSubgroupXor: |
| case BuiltinFn::kSubgroupMin: |
| case BuiltinFn::kSubgroupMax: |
| case BuiltinFn::kSubgroupAll: |
| case BuiltinFn::kSubgroupAny: |
| case BuiltinFn::kQuadBroadcast: |
| case BuiltinFn::kQuadSwapX: |
| case BuiltinFn::kQuadSwapY: |
| case BuiltinFn::kQuadSwapDiagonal: |
| return true; |
| default: |
| return false; |
| } |
| } |
| |
| bool HasSideEffects(BuiltinFn f) { |
| switch (f) { |
| case BuiltinFn::kAtomicAdd: |
| case BuiltinFn::kAtomicAnd: |
| case BuiltinFn::kAtomicCompareExchangeWeak: |
| case BuiltinFn::kAtomicExchange: |
| case BuiltinFn::kAtomicMax: |
| case BuiltinFn::kAtomicMin: |
| case BuiltinFn::kAtomicOr: |
| case BuiltinFn::kAtomicStore: |
| case BuiltinFn::kAtomicSub: |
| case BuiltinFn::kAtomicXor: |
| case BuiltinFn::kTextureStore: |
| return true; |
| default: |
| break; |
| } |
| return false; |
| } |
| |
| } // namespace tint::core |
| |
| // clang-format on |