// Copyright 2023 The Dawn & Tint Authors // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // // 1. Redistributions of source code must retain the above copyright notice, this // list of conditions and the following disclaimer. // // 2. Redistributions in binary form must reproduce the above copyright notice, // this list of conditions and the following disclaimer in the documentation // and/or other materials provided with the distribution. // // 3. Neither the name of the copyright holder nor the names of its // contributors may be used to endorse or promote products derived from // this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. //////////////////////////////////////////////////////////////////////////////// // File generated by 'tools/src/cmd/gen' using the template: // src/tint/lang/core/builtin_fn.h.tmpl // // To regenerate run: './tools/run gen' // // Do not modify this file directly //////////////////////////////////////////////////////////////////////////////// #ifndef SRC_TINT_LANG_CORE_BUILTIN_FN_H_ #define SRC_TINT_LANG_CORE_BUILTIN_FN_H_ #include <cstdint> #include <string> #include "src/tint/utils/traits/traits.h" // \cond DO_NOT_DOCUMENT namespace tint::core { /// Enumerator of all builtin functions enum class BuiltinFn : uint8_t { … }; /// Matches the BuiltinFn by name /// @param name the builtin name to parse /// @returns the parsed BuiltinFn, or BuiltinFn::kNone if `name` did not /// match any builtin function. BuiltinFn ParseBuiltinFn(std::string_view name); /// @returns the name of the builtin function type. The spelling, including /// case, matches the name in the WGSL spec. const char* str(BuiltinFn i); /// Emits the name of the builtin function type. The spelling, including case, /// matches the name in the WGSL spec. template <typename STREAM, typename = traits::EnableIfIsOStream<STREAM>> auto& operator<<(STREAM& o, BuiltinFn i) { … } /// All builtin functions constexpr BuiltinFn kBuiltinFns[] = …; /// All builtin function names constexpr const char* kBuiltinFnStrings[] = …; /// Determines if the given `f` is a coarse derivative. /// @param f the builtin type /// @returns true if the given derivative is coarse. bool IsCoarseDerivative(BuiltinFn f); /// Determines if the given `f` is a fine derivative. /// @param f the builtin type /// @returns true if the given derivative is fine. bool IsFineDerivative(BuiltinFn f); /// Determine if the given `f` is a derivative builtin. /// @param f the builtin type /// @returns true if the given `f` is a derivative builtin bool IsDerivative(BuiltinFn f); /// Determines if the given `f` is a texture operation builtin. /// @param f the builtin type /// @returns true if the given `f` is a texture operation builtin bool IsTexture(BuiltinFn f); /// Determines if the given `f` is an image query builtin. /// @param f the builtin type /// @returns true if the given `f` is an image query builtin bool IsImageQuery(BuiltinFn f); /// Determines if the given `f` is a data packing builtin. /// @param f the builtin type /// @returns true if the given `f` is a data packing builtin bool IsDataPacking(BuiltinFn f); /// Determines if the given `f` is a data unpacking builtin. /// @param f the builtin type /// @returns true if the given `f` is a data unpacking builtin bool IsDataUnpacking(BuiltinFn f); /// Determines if the given `f` is a barrier builtin. /// @param f the builtin type /// @returns true if the given `f` is a barrier builtin bool IsBarrier(BuiltinFn f); /// Determines if the given `f` is an atomic builtin. /// @param f the builtin type /// @returns true if the given `f` is an atomic builtin bool IsAtomic(BuiltinFn f); /// Determines if the given `f` is a builtin defined in the language extension /// `packed_4x8_integer_dot_product`. /// @param f the builtin type /// @returns true if the given `f` is a builtin defined in the language extension /// `packed_4x8_integer_dot_product`. bool IsPacked4x8IntegerDotProductBuiltin(BuiltinFn f); /// Determines if the given `f` is a subgroup builtin. /// @param f the builtin type /// @returns true if the given `f` is a subgroup builtin bool IsSubgroup(BuiltinFn f); /// Determines if the given `f` may have side-effects (i.e. writes to at least one of its inputs) /// @returns true if intrinsic may have side-effects bool HasSideEffects(BuiltinFn f); } // namespace tint::core // \endcond #endif // SRC_TINT_LANG_CORE_BUILTIN_FN_H_