#ifndef KYTY_COMMON_EMULATOR_CONFIG_H_ #define KYTY_COMMON_EMULATOR_CONFIG_H_ #include "common/common.h" #include #include #include #include #include #include namespace Config { void Initialize(); void Shutdown(); struct Lifecycle { static constexpr const char* name = "Config"; static constexpr auto initialize = Config::Initialize; static constexpr auto shutdown = Config::Shutdown; }; enum class ShaderOptimizationType { None, Size, Performance }; enum class LogDirection { Silent, Console, File }; enum class PresentMode { Fifo, Mailbox, Immediate }; using Keymap = std::vector; using ControllerColor = std::array; constexpr uint32_t DEFAULT_CONSOLE_LANGUAGE = 1; constexpr uint32_t MAX_CONSOLE_LANGUAGE = 29; constexpr std::size_t MAX_USER_NAME_LENGTH = 16; constexpr int32_t DEFAULT_USER_ID = 1000; constexpr bool IsConfiguredUserIdValid(int32_t user_id) { constexpr int32_t USER_ID_EVERYONE = 0xfe; constexpr int32_t USER_ID_SYSTEM = 0xff; return user_id >= 0 && user_id != USER_ID_EVERYONE && user_id != USER_ID_SYSTEM; } struct ConfigOptions { uint32_t screen_width = 1280; uint32_t screen_height = 720; std::string user_name = "Kyty"; int32_t user_id = DEFAULT_USER_ID; std::string audio_input_device; std::optional controller_color; uint32_t controller_speaker_volume = 50; uint32_t controller_vibration_intensity = 100; PresentMode present_mode = PresentMode::Mailbox; int32_t gpu_index = -1; bool fullscreen_enabled = false; bool hide_cursor_enabled = false; bool vr_enabled = false; bool amd_cpu_enabled = false; uint32_t vblank_frequency = 60; uint32_t console_language = DEFAULT_CONSOLE_LANGUAGE; bool vulkan_validation_enabled = false; bool shader_validation_enabled = false; ShaderOptimizationType shader_optimization_type = ShaderOptimizationType::None; LogDirection shader_log_direction = LogDirection::Silent; std::filesystem::path shader_log_folder = "_Shaders"; bool command_buffer_dump_enabled = false; std::filesystem::path command_buffer_dump_folder = "_Buffers"; bool graphics_debug_dump_enabled = false; LogDirection printf_direction = LogDirection::Silent; std::filesystem::path printf_output_file = "_kyty.txt"; bool profiler_enabled = false; bool spirv_debug_printf_enabled = false; bool gpu_assisted_validation_enabled = false; bool renderdoc_enabled = false; bool readback_linear_images = false; bool tessellation_enabled = false; bool trophy_enabled = true; bool playgo_hack_enabled = false; bool skip_notice_screen = false; #if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS bool red_zone_protection_enabled = false; #endif Keymap keymap; }; void Load(const ConfigOptions& cfg); uint32_t GetScreenWidth(); uint32_t GetScreenHeight(); const std::string& GetUserName(); int32_t GetUserId(); const std::string& GetAudioInputDevice(); const std::optional& GetControllerColor(); uint32_t GetControllerSpeakerVolume(); uint32_t GetControllerVibrationIntensity(); PresentMode GetPresentMode(); int32_t GetGpuIndex(); bool FullscreenEnabled(); bool HideCursorEnabled(); bool VrEnabled(); bool AmdCpuEnabled(); uint32_t GetVblankFrequency(); uint32_t GetConsoleLanguage(); bool VulkanValidationEnabled(); bool ShaderValidationEnabled(); ShaderOptimizationType GetShaderOptimizationType(); LogDirection GetShaderLogDirection(); std::filesystem::path GetShaderLogFolder(); bool CommandBufferDumpEnabled(); std::filesystem::path GetCommandBufferDumpFolder(); bool GraphicsDebugDumpEnabled(); LogDirection GetPrintfDirection(); std::filesystem::path GetPrintfOutputFile(); bool ProfilerEnabled(); bool SpirvDebugPrintfEnabled(); bool GpuAssistedValidationEnabled(); bool RenderDocEnabled(); bool ReadbackLinearImagesEnabled(); bool TessellationEnabled(); bool TrophyEnabled(); bool PlayGoHackEnabled(); bool SkipNoticeScreen(); #if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS bool RedZoneProtectionEnabled(); #endif const Keymap& GetKeymap(); } // namespace Config #endif /* KYTY_COMMON_EMULATOR_CONFIG_H_ */