diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index 85b6d2d50..efeeb1902 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -103,65 +103,755 @@ inline u32 EnumMetadata::Index() { return 100; } -ENUM(AudioMode, Mono, Stereo, Surround); +enum class AudioMode : u32 { + Mono = 0, + Stereo = 1, + Surround = 2, +}; -ENUM(Language, Japanese, EnglishAmerican, French, German, Italian, Spanish, Chinese, Korean, Dutch, - Portuguese, Russian, Taiwanese, EnglishBritish, FrenchCanadian, SpanishLatin, - ChineseSimplified, ChineseTraditional, PortugueseBrazilian); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Mono", AudioMode::Mono}, + {"Stereo", AudioMode::Stereo}, + {"Surround", AudioMode::Surround}, + }; +} -ENUM(Region, Japan, Usa, Europe, Australia, China, Korea, Taiwan); +template <> +inline u32 EnumMetadata::Index() { + return 0; +} -ENUM(TimeZone, Auto, Default, Cet, Cst6Cdt, Cuba, Eet, Egypt, Eire, Est, Est5Edt, Gb, GbEire, Gmt, - GmtPlusZero, GmtMinusZero, GmtZero, Greenwich, Hongkong, Hst, Iceland, Iran, Israel, Jamaica, - Japan, Kwajalein, Libya, Met, Mst, Mst7Mdt, Navajo, Nz, NzChat, Poland, Portugal, Prc, Pst8Pdt, - Roc, Rok, Singapore, Turkey, Uct, Universal, Utc, WSu, Wet, Zulu); +enum class Language : u32 { + Japanese = 0, + EnglishAmerican = 1, + French = 2, + German = 3, + Italian = 4, + Spanish = 5, + Chinese = 6, + Korean = 7, + Dutch = 8, + Portuguese = 9, + Russian = 10, + Taiwanese = 11, + EnglishBritish = 12, + FrenchCanadian = 13, + SpanishLatin = 14, + ChineseSimplified = 15, + ChineseTraditional = 16, + PortugueseBrazilian = 17, +}; -ENUM(AnisotropyMode, Automatic, Default, X2, X4, X8, X16); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Japanese", Language::Japanese}, + {"EnglishAmerican", Language::EnglishAmerican}, + {"French", Language::French}, + {"German", Language::German}, + {"Italian", Language::Italian}, + {"Spanish", Language::Spanish}, + {"Chinese", Language::Chinese}, + {"Korean", Language::Korean}, + {"Dutch", Language::Dutch}, + {"Portuguese", Language::Portuguese}, + {"Russian", Language::Russian}, + {"Taiwanese", Language::Taiwanese}, + {"EnglishBritish", Language::EnglishBritish}, + {"FrenchCanadian", Language::FrenchCanadian}, + {"SpanishLatin", Language::SpanishLatin}, + {"ChineseSimplified", Language::ChineseSimplified}, + {"ChineseTraditional", Language::ChineseTraditional}, + {"PortugueseBrazilian", Language::PortugueseBrazilian}, + }; +} -ENUM(AstcDecodeMode, Cpu, Gpu, CpuAsynchronous); +template <> +inline u32 EnumMetadata::Index() { + return 1; +} -ENUM(AstcRecompression, Uncompressed, Bc1, Bc3); +enum class Region : u32 { + Japan = 0, + Usa = 1, + Europe = 2, + Australia = 3, + China = 4, + Korea = 5, + Taiwan = 6, +}; -ENUM(VSyncMode, Immediate, Mailbox, Fifo, FifoRelaxed); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Japan", Region::Japan}, + {"Usa", Region::Usa}, + {"Europe", Region::Europe}, + {"Australia", Region::Australia}, + {"China", Region::China}, + {"Korea", Region::Korea}, + {"Taiwan", Region::Taiwan}, + }; +} -ENUM(VramUsageMode, Conservative, Aggressive, HighEnd, Insane); +template <> +inline u32 EnumMetadata::Index() { + return 2; +} -ENUM(RendererBackend, OpenGL, Vulkan, Null); +enum class TimeZone : u32 { + Auto = 0, + Default = 1, + Cet = 2, + Cst6Cdt = 3, + Cuba = 4, + Eet = 5, + Egypt = 6, + Eire = 7, + Est = 8, + Est5Edt = 9, + Gb = 10, + GbEire = 11, + Gmt = 12, + GmtPlusZero = 13, + GmtMinusZero = 14, + GmtZero = 15, + Greenwich = 16, + Hongkong = 17, + Hst = 18, + Iceland = 19, + Iran = 20, + Israel = 21, + Jamaica = 22, + Japan = 23, + Kwajalein = 24, + Libya = 25, + Met = 26, + Mst = 27, + Mst7Mdt = 28, + Navajo = 29, + Nz = 30, + NzChat = 31, + Poland = 32, + Portugal = 33, + Prc = 34, + Pst8Pdt = 35, + Roc = 36, + Rok = 37, + Singapore = 38, + Turkey = 39, + Uct = 40, + Universal = 41, + Utc = 42, + WSu = 43, + Wet = 44, + Zulu = 45, +}; -ENUM(ShaderBackend, Glsl, Glasm, SpirV); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Auto", TimeZone::Auto}, + {"Default", TimeZone::Default}, + {"Cet", TimeZone::Cet}, + {"Cst6Cdt", TimeZone::Cst6Cdt}, + {"Cuba", TimeZone::Cuba}, + {"Eet", TimeZone::Eet}, + {"Egypt", TimeZone::Egypt}, + {"Eire", TimeZone::Eire}, + {"Est", TimeZone::Est}, + {"Est5Edt", TimeZone::Est5Edt}, + {"Gb", TimeZone::Gb}, + {"GbEire", TimeZone::GbEire}, + {"Gmt", TimeZone::Gmt}, + {"GmtPlusZero", TimeZone::GmtPlusZero}, + {"GmtMinusZero", TimeZone::GmtMinusZero}, + {"GmtZero", TimeZone::GmtZero}, + {"Greenwich", TimeZone::Greenwich}, + {"Hongkong", TimeZone::Hongkong}, + {"Hst", TimeZone::Hst}, + {"Iceland", TimeZone::Iceland}, + {"Iran", TimeZone::Iran}, + {"Israel", TimeZone::Israel}, + {"Jamaica", TimeZone::Jamaica}, + {"Japan", TimeZone::Japan}, + {"Kwajalein", TimeZone::Kwajalein}, + {"Libya", TimeZone::Libya}, + {"Met", TimeZone::Met}, + {"Mst", TimeZone::Mst}, + {"Mst7Mdt", TimeZone::Mst7Mdt}, + {"Navajo", TimeZone::Navajo}, + {"Nz", TimeZone::Nz}, + {"NzChat", TimeZone::NzChat}, + {"Poland", TimeZone::Poland}, + {"Portugal", TimeZone::Portugal}, + {"Prc", TimeZone::Prc}, + {"Pst8Pdt", TimeZone::Pst8Pdt}, + {"Roc", TimeZone::Roc}, + {"Rok", TimeZone::Rok}, + {"Singapore", TimeZone::Singapore}, + {"Turkey", TimeZone::Turkey}, + {"Uct", TimeZone::Uct}, + {"Universal", TimeZone::Universal}, + {"Utc", TimeZone::Utc}, + {"WSu", TimeZone::WSu}, + {"Wet", TimeZone::Wet}, + {"Zulu", TimeZone::Zulu}, + }; +} -ENUM(GpuAccuracy, Low, Normal, High, Extreme); +template <> +inline u32 EnumMetadata::Index() { + return 3; +} -ENUM(CpuBackend, Dynarmic, Nce); +enum class AnisotropyMode : u32 { + Automatic = 0, + Default = 1, + X2 = 2, + X4 = 3, + X8 = 4, + X16 = 5, +}; -ENUM(CpuAccuracy, Auto, Accurate, Unsafe, Paranoid); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Automatic", AnisotropyMode::Automatic}, + {"Default", AnisotropyMode::Default}, + {"X2", AnisotropyMode::X2}, + {"X4", AnisotropyMode::X4}, + {"X8", AnisotropyMode::X8}, + {"X16", AnisotropyMode::X16}, + }; +} -ENUM(MemoryLayout, Memory_4Gb, Memory_6Gb, Memory_8Gb, Memory_10Gb, Memory_12Gb, Memory_14Gb, Memory_16Gb); +template <> +inline u32 EnumMetadata::Index() { + return 4; +} -ENUM(ConfirmStop, Ask_Always, Ask_Based_On_Game, Ask_Never); +enum class AstcDecodeMode : u32 { + Cpu = 0, + Gpu = 1, + CpuAsynchronous = 2, +}; -ENUM(FullscreenMode, Borderless, Exclusive); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Cpu", AstcDecodeMode::Cpu}, + {"Gpu", AstcDecodeMode::Gpu}, + {"CpuAsynchronous", AstcDecodeMode::CpuAsynchronous}, + }; +} -ENUM(NvdecEmulation, Off, Cpu, Gpu); +template <> +inline u32 EnumMetadata::Index() { + return 5; +} -ENUM(ResolutionSetup, Res1_4X, Res1_2X, Res3_4X, Res1X, Res3_2X, Res2X, Res3X, Res4X, Res5X, Res6X, Res7X, - Res8X); +enum class AstcRecompression : u32 { + Uncompressed = 0, + Bc1 = 1, + Bc3 = 2, +}; -ENUM(ScalingFilter, NearestNeighbor, Bilinear, Bicubic, Gaussian, ScaleForce, ScaleFx, Lanczos, Fsr, Fsr2, MaxEnum); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Uncompressed", AstcRecompression::Uncompressed}, + {"Bc1", AstcRecompression::Bc1}, + {"Bc3", AstcRecompression::Bc3}, + }; +} -ENUM(AntiAliasing, None, Fxaa, Smaa, Taa, MaxEnum); +template <> +inline u32 EnumMetadata::Index() { + return 6; +} -ENUM(FSR2QualityMode, Quality, Balanced, Performance, UltraPerformance); +enum class VSyncMode : u32 { + Immediate = 0, + Mailbox = 1, + Fifo = 2, + FifoRelaxed = 3, +}; -ENUM(FrameSkipping, Disabled, Enabled, MaxEnum); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Immediate", VSyncMode::Immediate}, + {"Mailbox", VSyncMode::Mailbox}, + {"Fifo", VSyncMode::Fifo}, + {"FifoRelaxed", VSyncMode::FifoRelaxed}, + }; +} -ENUM(FrameSkippingMode, Adaptive, Fixed, MaxEnum); +template <> +inline u32 EnumMetadata::Index() { + return 7; +} -ENUM(AspectRatio, R16_9, R4_3, R21_9, R16_10, R32_9, Stretch); +enum class VramUsageMode : u32 { + Conservative = 0, + Aggressive = 1, + HighEnd = 2, + Insane = 3, +}; -ENUM(ConsoleMode, Handheld, Docked); +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Conservative", VramUsageMode::Conservative}, + {"Aggressive", VramUsageMode::Aggressive}, + {"HighEnd", VramUsageMode::HighEnd}, + {"Insane", VramUsageMode::Insane}, + }; +} -ENUM(AppletMode, HLE, LLE); +template <> +inline u32 EnumMetadata::Index() { + return 8; +} + +enum class RendererBackend : u32 { + OpenGL = 0, + Vulkan = 1, + Null = 2, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"OpenGL", RendererBackend::OpenGL}, + {"Vulkan", RendererBackend::Vulkan}, + {"Null", RendererBackend::Null}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 9; +} + +enum class ShaderBackend : u32 { + Glsl = 0, + Glasm = 1, + SpirV = 2, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Glsl", ShaderBackend::Glsl}, + {"Glasm", ShaderBackend::Glasm}, + {"SpirV", ShaderBackend::SpirV}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 10; +} + +enum class GpuAccuracy : u32 { + Low = 0, + Normal = 1, + High = 2, + Extreme = 3, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Low", GpuAccuracy::Low}, + {"Normal", GpuAccuracy::Normal}, + {"High", GpuAccuracy::High}, + {"Extreme", GpuAccuracy::Extreme}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 11; +} + +enum class CpuBackend : u32 { + Dynarmic = 0, + Nce = 1, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Dynarmic", CpuBackend::Dynarmic}, + {"Nce", CpuBackend::Nce}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 12; +} + +enum class CpuAccuracy : u32 { + Auto = 0, + Accurate = 1, + Unsafe = 2, + Paranoid = 3, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Auto", CpuAccuracy::Auto}, + {"Accurate", CpuAccuracy::Accurate}, + {"Unsafe", CpuAccuracy::Unsafe}, + {"Paranoid", CpuAccuracy::Paranoid}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 13; +} + +enum class MemoryLayout : u32 { + Memory_4Gb = 0, + Memory_6Gb = 1, + Memory_8Gb = 2, + Memory_10Gb = 3, + Memory_12Gb = 4, + Memory_14Gb = 5, + Memory_16Gb = 6, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Memory_4Gb", MemoryLayout::Memory_4Gb}, + {"Memory_6Gb", MemoryLayout::Memory_6Gb}, + {"Memory_8Gb", MemoryLayout::Memory_8Gb}, + {"Memory_10Gb", MemoryLayout::Memory_10Gb}, + {"Memory_12Gb", MemoryLayout::Memory_12Gb}, + {"Memory_14Gb", MemoryLayout::Memory_14Gb}, + {"Memory_16Gb", MemoryLayout::Memory_16Gb}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 14; +} + +enum class ConfirmStop : u32 { + Ask_Always = 0, + Ask_Based_On_Game = 1, + Ask_Never = 2, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Ask_Always", ConfirmStop::Ask_Always}, + {"Ask_Based_On_Game", ConfirmStop::Ask_Based_On_Game}, + {"Ask_Never", ConfirmStop::Ask_Never}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 15; +} + +enum class FullscreenMode : u32 { + Borderless = 0, + Exclusive = 1, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Borderless", FullscreenMode::Borderless}, + {"Exclusive", FullscreenMode::Exclusive}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 16; +} + +enum class NvdecEmulation : u32 { + Off = 0, + Cpu = 1, + Gpu = 2, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Off", NvdecEmulation::Off}, + {"Cpu", NvdecEmulation::Cpu}, + {"Gpu", NvdecEmulation::Gpu}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 17; +} + +// ResolutionSetup must be specified discretely due to needing signed values +enum class ResolutionSetup : s32 { + Res1_4X = -1, + Res1_2X = 0, + Res3_4X = 1, + Res1X = 2, + Res3_2X = 3, + Res2X = 4, + Res3X = 5, + Res4X = 6, + Res5X = 7, + Res6X = 8, + Res7X = 9, + Res8X = 10, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Res1_4X", ResolutionSetup::Res1_4X}, + {"Res1_2X", ResolutionSetup::Res1_2X}, + {"Res3_4X", ResolutionSetup::Res3_4X}, + {"Res1X", ResolutionSetup::Res1X}, + {"Res3_2X", ResolutionSetup::Res3_2X}, + {"Res2X", ResolutionSetup::Res2X}, + {"Res3X", ResolutionSetup::Res3X}, + {"Res4X", ResolutionSetup::Res4X}, + {"Res5X", ResolutionSetup::Res5X}, + {"Res6X", ResolutionSetup::Res6X}, + {"Res7X", ResolutionSetup::Res7X}, + {"Res8X", ResolutionSetup::Res8X}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 101; +} + +enum class ScalingFilter : u32 { + NearestNeighbor = 0, + Bilinear = 1, + Bicubic = 2, + Gaussian = 3, + ScaleForce = 4, + ScaleFx = 5, + Lanczos = 6, + Fsr = 7, + Fsr2 = 8, + MaxEnum = 9, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"NearestNeighbor", ScalingFilter::NearestNeighbor}, + {"Bilinear", ScalingFilter::Bilinear}, + {"Bicubic", ScalingFilter::Bicubic}, + {"Gaussian", ScalingFilter::Gaussian}, + {"ScaleForce", ScalingFilter::ScaleForce}, + {"ScaleFx", ScalingFilter::ScaleFx}, + {"Lanczos", ScalingFilter::Lanczos}, + {"Fsr", ScalingFilter::Fsr}, + {"Fsr2", ScalingFilter::Fsr2}, + {"MaxEnum", ScalingFilter::MaxEnum}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 18; +} + +enum class AntiAliasing : u32 { + None = 0, + Fxaa = 1, + Smaa = 2, + Taa = 3, + MaxEnum = 4, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"None", AntiAliasing::None}, + {"Fxaa", AntiAliasing::Fxaa}, + {"Smaa", AntiAliasing::Smaa}, + {"Taa", AntiAliasing::Taa}, + {"MaxEnum", AntiAliasing::MaxEnum}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 19; +} + +enum class FSR2QualityMode : u32 { + Quality = 0, + Balanced = 1, + Performance = 2, + UltraPerformance = 3, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Quality", FSR2QualityMode::Quality}, + {"Balanced", FSR2QualityMode::Balanced}, + {"Performance", FSR2QualityMode::Performance}, + {"UltraPerformance", FSR2QualityMode::UltraPerformance}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 20; +} + +enum class FrameSkipping : u32 { + Disabled = 0, + Enabled = 1, + MaxEnum = 2, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Disabled", FrameSkipping::Disabled}, + {"Enabled", FrameSkipping::Enabled}, + {"MaxEnum", FrameSkipping::MaxEnum}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 21; +} + +enum class FrameSkippingMode : u32 { + Adaptive = 0, + Fixed = 1, + MaxEnum = 2, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Adaptive", FrameSkippingMode::Adaptive}, + {"Fixed", FrameSkippingMode::Fixed}, + {"MaxEnum", FrameSkippingMode::MaxEnum}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 22; +} + +enum class AspectRatio : u32 { + R16_9 = 0, + R4_3 = 1, + R21_9 = 2, + R16_10 = 3, + R32_9 = 4, + Stretch = 5, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"R16_9", AspectRatio::R16_9}, + {"R4_3", AspectRatio::R4_3}, + {"R21_9", AspectRatio::R21_9}, + {"R16_10", AspectRatio::R16_10}, + {"R32_9", AspectRatio::R32_9}, + {"Stretch", AspectRatio::Stretch}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 23; +} + +enum class ConsoleMode : u32 { + Handheld = 0, + Docked = 1, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"Handheld", ConsoleMode::Handheld}, + {"Docked", ConsoleMode::Docked}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 24; +} + +enum class AppletMode : u32 { + HLE = 0, + LLE = 1, +}; + +template <> +inline std::vector> +EnumMetadata::Canonicalizations() { + return { + {"HLE", AppletMode::HLE}, + {"LLE", AppletMode::LLE}, + }; +} + +template <> +inline u32 EnumMetadata::Index() { + return 25; +} template inline std::string CanonicalizeEnum(Type id) {