// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later

#pragma once

#include "common/common_types.h"

namespace Shader::IR {

enum class Patch : u64 {
    TessellationLodLeft,
    TessellationLodTop,
    TessellationLodRight,
    TessellationLodBottom,
    TessellationLodInteriorU,
    TessellationLodInteriorV,
    Component0,
    Component1,
    Component2,
    Component3,
    Component4,
    Component5,
    Component6,
    Component7,
    Component8,
    Component9,
    Component10,
    Component11,
    Component12,
    Component13,
    Component14,
    Component15,
    Component16,
    Component17,
    Component18,
    Component19,
    Component20,
    Component21,
    Component22,
    Component23,
    Component24,
    Component25,
    Component26,
    Component27,
    Component28,
    Component29,
    Component30,
    Component31,
    Component32,
    Component33,
    Component34,
    Component35,
    Component36,
    Component37,
    Component38,
    Component39,
    Component40,
    Component41,
    Component42,
    Component43,
    Component44,
    Component45,
    Component46,
    Component47,
    Component48,
    Component49,
    Component50,
    Component51,
    Component52,
    Component53,
    Component54,
    Component55,
    Component56,
    Component57,
    Component58,
    Component59,
    Component60,
    Component61,
    Component62,
    Component63,
    Component64,
    Component65,
    Component66,
    Component67,
    Component68,
    Component69,
    Component70,
    Component71,
    Component72,
    Component73,
    Component74,
    Component75,
    Component76,
    Component77,
    Component78,
    Component79,
    Component80,
    Component81,
    Component82,
    Component83,
    Component84,
    Component85,
    Component86,
    Component87,
    Component88,
    Component89,
    Component90,
    Component91,
    Component92,
    Component93,
    Component94,
    Component95,
    Component96,
    Component97,
    Component98,
    Component99,
    Component100,
    Component101,
    Component102,
    Component103,
    Component104,
    Component105,
    Component106,
    Component107,
    Component108,
    Component109,
    Component110,
    Component111,
    Component112,
    Component113,
    Component114,
    Component115,
    Component116,
    Component117,
    Component118,
    Component119,
};
static_assert(static_cast<u64>(Patch::Component119) == 125);

[[nodiscard]] bool IsGeneric(Patch patch) noexcept;

[[nodiscard]] u32 GenericPatchIndex(Patch patch);

[[nodiscard]] u32 GenericPatchElement(Patch patch);

} // namespace Shader::IR
