#include "common/emulatorConfig.h" #include "common/assert.h" #include "common/debugCounters.h" #include #include namespace Config { static std::unique_ptr g_config; void Initialize() { EXIT_IF(g_config != nullptr); g_config = std::make_unique(); } void Shutdown() { Common::DebugCounters::SetEnabled(false); g_config.reset(); } void Load(const ConfigOptions& cfg) { EXIT_IF(g_config == nullptr); EXIT_IF(cfg.user_name.empty() || cfg.user_name.size() > MAX_USER_NAME_LENGTH); EXIT_IF(!IsConfiguredUserIdValid(cfg.user_id)); EXIT_IF(cfg.controller_speaker_volume > 100 || cfg.controller_vibration_intensity > 100); EXIT_IF(cfg.keyboard_player > static_cast(MAX_PLAYERS)); *g_config = cfg; Common::DebugCounters::SetEnabled(cfg.perf_overlay_enabled); } uint32_t GetScreenWidth() { return g_config->screen_width; } uint32_t GetScreenHeight() { return g_config->screen_height; } const std::string& GetUserName() { return g_config->user_name; } int32_t GetUserId() { return g_config->user_id; } const std::string& GetAudioInputDevice() { return g_config->audio_input_device; } const std::optional& GetControllerColor() { return g_config->controller_color; } uint32_t GetControllerSpeakerVolume() { return g_config->controller_speaker_volume; } uint32_t GetControllerVibrationIntensity() { return g_config->controller_vibration_intensity; } uint32_t GetKeyboardPlayer() { return g_config->keyboard_player; } int32_t GetPlayerUserId(int player) { return g_config->user_id + player * PLAYER_USER_ID_STEP; } int GetPlayerFromUserId(int32_t user_id) { for (int player = 0; player < MAX_PLAYERS; player++) { if (user_id == GetPlayerUserId(player)) { return player; } } return -1; } bool IsGuestUserId(int32_t user_id) { return GetPlayerFromUserId(user_id) > 0; } PresentMode GetPresentMode() { return g_config->present_mode; } int32_t GetGpuIndex() { return g_config->gpu_index; } bool FullscreenEnabled() { return g_config->fullscreen_enabled; } bool HdrEnabled() { return g_config->hdr_enabled; } bool HideCursorEnabled() { return g_config->hide_cursor_enabled; } bool VrEnabled() { return g_config->vr_enabled; } bool AmdCpuEnabled() { return g_config->amd_cpu_enabled; } uint32_t GetVblankFrequency() { return std::clamp(g_config->vblank_frequency, 30u, 360u); } uint32_t GetConsoleLanguage() { return g_config->console_language; } bool VulkanValidationEnabled() { return g_config->vulkan_validation_enabled; } bool IsNetworkConnected() { return g_config->network_connected; } bool ShaderValidationEnabled() { return g_config->shader_validation_enabled; } ShaderOptimizationType GetShaderOptimizationType() { return g_config->shader_optimization_type; } LogDirection GetShaderLogDirection() { return g_config->shader_log_direction; } std::filesystem::path GetShaderLogFolder() { return g_config->shader_log_folder; } bool CommandBufferDumpEnabled() { return g_config->command_buffer_dump_enabled; } std::filesystem::path GetCommandBufferDumpFolder() { return g_config->command_buffer_dump_folder; } bool GraphicsDebugDumpEnabled() { return g_config->graphics_debug_dump_enabled; } LogDirection GetPrintfDirection() { return g_config->printf_direction; } std::filesystem::path GetPrintfOutputFile() { return g_config->printf_output_file; } bool ProfilerEnabled() { return g_config->profiler_enabled; } bool SpirvDebugPrintfEnabled() { return g_config->spirv_debug_printf_enabled; } bool GpuAssistedValidationEnabled() { return g_config->gpu_assisted_validation_enabled && g_config->vulkan_validation_enabled; } bool RenderDocEnabled() { return g_config->renderdoc_enabled; } bool ReadbackLinearImagesEnabled() { return g_config->readback_linear_images; } bool SyncRawImageBuffersEnabled() { return g_config->sync_raw_image_buffers; } bool TessellationEnabled() { return g_config->tessellation_enabled; } bool TrophyEnabled() { return g_config->trophy_enabled; } uint32_t GetTrophyDurationSeconds() { return std::clamp(g_config->trophy_duration_seconds, 5u, 10u); } bool PlayGoHackEnabled() { return g_config->playgo_hack_enabled; } bool SkipNoticeScreen() { return g_config->skip_notice_screen; } #if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS bool RedZoneProtectionEnabled() { return g_config->red_zone_protection_enabled; } #endif const Keymap& GetKeymap() { return g_config->keymap; } const std::vector& GetGuestArguments() { return g_config->guest_arguments; } } // namespace Config