// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include #include #include "common/common_funcs.h" #include "shader_recompiler/exception.h" namespace Shader::IR { enum class Type { Void = 0, Opaque = 1 << 0, Reg = 1 << 1, Pred = 1 << 2, Attribute = 1 << 3, Patch = 1 << 4, U1 = 1 << 5, U8 = 1 << 6, U16 = 1 << 7, U32 = 1 << 8, U64 = 1 << 9, S32 = 1 << 10, F16 = 1 << 11, F32 = 1 << 12, F64 = 1 << 13, U32x2 = 1 << 14, U32x3 = 1 << 15, U32x4 = 1 << 16, F16x2 = 1 << 17, F16x3 = 1 << 18, F16x4 = 1 << 19, F32x2 = 1 << 20, F32x3 = 1 << 21, F32x4 = 1 << 22, F64x2 = 1 << 23, F64x3 = 1 << 24, F64x4 = 1 << 25, }; DECLARE_ENUM_FLAG_OPERATORS(Type) [[nodiscard]] std::string NameOf(Type type); [[nodiscard]] bool AreTypesCompatible(Type lhs, Type rhs) noexcept; } // namespace Shader::IR template <> struct fmt::formatter { constexpr auto parse(format_parse_context& ctx) { return ctx.begin(); } template auto format(const Shader::IR::Type& type, FormatContext& ctx) { return fmt::format_to(ctx.out(), "{}", NameOf(type)); } };