From ee4a3719e92d6da59a3a5fffa1a3f80969d841fa Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Mon, 5 Jan 2026 16:43:41 +0200 Subject: [PATCH] added more settings in emulator_settings --- src/core/devtools/widget/shader_list.cpp | 4 +- src/core/emulator_settings.cpp | 2 +- src/core/emulator_settings.h | 119 ++++++++++++++---- .../renderer_vulkan/vk_pipeline_cache.cpp | 8 +- 4 files changed, 105 insertions(+), 28 deletions(-) diff --git a/src/core/devtools/widget/shader_list.cpp b/src/core/devtools/widget/shader_list.cpp index a18970785..ea7ca1673 100644 --- a/src/core/devtools/widget/shader_list.cpp +++ b/src/core/devtools/widget/shader_list.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -245,7 +245,7 @@ void ShaderList::Draw() { return; } - if (!EmulatorSettings::GetInstance()->IsShaderDump()) { + if (!EmulatorSettings::GetInstance()->IsShaderCollect()) { DrawCenteredText("Enable 'shader_dump' in config to see shaders"); End(); return; diff --git a/src/core/emulator_settings.cpp b/src/core/emulator_settings.cpp index 73aac097a..a454c692e 100644 --- a/src/core/emulator_settings.cpp +++ b/src/core/emulator_settings.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include diff --git a/src/core/emulator_settings.h b/src/core/emulator_settings.h index 1d29c3e71..1989fa80a 100644 --- a/src/core/emulator_settings.h +++ b/src/core/emulator_settings.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once @@ -130,30 +130,32 @@ NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(GeneralSettings, install_dirs, addon_install_ struct DebugSettings { Setting separate_logging_enabled{false}; // specific Setting debug_dump{false}; // specific - Setting shader_dump{false}; // specific + Setting shader_collect{false}; // specific Setting fps_color{true}; Setting log_enabled{true}; // specific std::vector GetOverrideableFields() const { return std::vector{ make_override("debug_dump", &DebugSettings::debug_dump), - make_override("shader_dump", &DebugSettings::shader_dump), + make_override("shader_collect", &DebugSettings::shader_collect), make_override("separate_logging_enabled", &DebugSettings::separate_logging_enabled), make_override("log_enabled", &DebugSettings::log_enabled)}; } }; -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(DebugSettings, separate_logging_enabled, debug_dump, shader_dump, - fps_color, log_enabled) +NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(DebugSettings, separate_logging_enabled, debug_dump, + shader_collect, fps_color, log_enabled) // ------------------------------- // Input settings // ------------------------------- enum HideCursorState : int { Never, Idle, Always }; +enum UsbDevice : int { Real, SkylanderPortal, InfinityBase, DimensionsToypad }; struct InputSettings { Setting cursor_state{HideCursorState::Idle}; // specific Setting cursor_hide_timeout{5}; // specific + Setting usb_device{UsbDevice::Real}; // specific Setting use_special_pad{false}; Setting special_pad_class{1}; Setting motion_controls_enabled{true}; // specific @@ -166,13 +168,14 @@ struct InputSettings { make_override("cursor_state", &InputSettings::cursor_state), make_override("cursor_hide_timeout", &InputSettings::cursor_hide_timeout), + make_override("usb_device", &InputSettings::usb_device), make_override("motion_controls_enabled", &InputSettings::motion_controls_enabled), make_override("background_controller_input", &InputSettings::background_controller_input)}; } }; -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(InputSettings, cursor_state, cursor_hide_timeout, +NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(InputSettings, cursor_state, cursor_hide_timeout, usb_device, use_special_pad, special_pad_class, motion_controls_enabled, use_unified_Input_Config, default_controller_id, background_controller_input) @@ -187,6 +190,7 @@ struct AudioSettings { // TODO add overrides std::vector GetOverrideableFields() const { return std::vector{ + make_override("mic_device", &AudioSettings::mic_device), make_override("main_output_device", &AudioSettings::main_output_device), make_override("padSpk_output_device", &AudioSettings::padSpk_output_device)}; @@ -205,14 +209,13 @@ struct GPUSettings { Setting internal_screen_width{1280}; Setting internal_screen_height{720}; Setting null_gpu{false}; - Setting should_copy_gpu_buffers{false}; + Setting copy_gpu_buffers{false}; Setting readbacks_enabled{false}; Setting readback_linear_images_enabled{false}; Setting direct_memory_access_enabled{false}; - Setting should_dump_shaders{false}; - Setting should_patch_shaders{false}; + Setting dump_shaders{false}; + Setting patch_shaders{false}; Setting vblank_frequency{60}; - Setting full_screen{false}; Setting full_screen_mode{"Windowed"}; Setting present_mode{"Mailbox"}; Setting hdr_allowed{false}; @@ -223,31 +226,75 @@ struct GPUSettings { std::vector GetOverrideableFields() const { return std::vector{ make_override("null_gpu", &GPUSettings::null_gpu), - make_override("full_screen", &GPUSettings::full_screen), - make_override("present_mode", &GPUSettings::present_mode)}; + make_override("copy_gpu_buffers", &GPUSettings::copy_gpu_buffers), + make_override("full_screen_mode", &GPUSettings::full_screen_mode), + make_override("present_mode", &GPUSettings::present_mode), + make_override("window_height", &GPUSettings::window_height), + make_override("window_width", &GPUSettings::window_width), + make_override("hdr_allowed", &GPUSettings::hdr_allowed), + make_override("fsr_enabled", &GPUSettings::fsr_enabled), + make_override("rcas_enabled", &GPUSettings::rcas_enabled), + make_override("rcas_attenuation", &GPUSettings::rcas_attenuation), + make_override("dump_shaders", &GPUSettings::dump_shaders), + make_override("patch_shaders", &GPUSettings::patch_shaders), + make_override("readbacks_enabled", &GPUSettings::readbacks_enabled), + make_override("readback_linear_images_enabled", + &GPUSettings::readback_linear_images_enabled), + make_override("direct_memory_access_enabled", + &GPUSettings::direct_memory_access_enabled), + }; } }; NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(GPUSettings, window_width, window_height, internal_screen_width, - internal_screen_height, null_gpu, should_copy_gpu_buffers, + internal_screen_height, null_gpu, copy_gpu_buffers, readbacks_enabled, readback_linear_images_enabled, - direct_memory_access_enabled, should_dump_shaders, - should_patch_shaders, vblank_frequency, full_screen, - full_screen_mode, present_mode, hdr_allowed, fsr_enabled, - rcas_enabled, rcas_attenuation) + direct_memory_access_enabled, dump_shaders, patch_shaders, + vblank_frequency, full_screen_mode, present_mode, hdr_allowed, + fsr_enabled, rcas_enabled, rcas_attenuation) // ------------------------------- // Vulkan settings // ------------------------------- struct VulkanSettings { Setting gpu_id{-1}; Setting full_screen{false}; - // TODO + Setting renderdoc_enabled{false}; + Setting vkvalidation_enabled{false}; + Setting vkvalidation_core_enabled{true}; + Setting vkvalidation_sync_enabled{false}; + Setting vkvalidation_gpu_enabled{false}; + Setting crash_diagnostic_enabled{false}; + Setting host_markers{false}; + Setting guest_markers{false}; + Setting pipeline_cache_enabled{false}; + Setting pipeline_cache_archive{false}; std::vector GetOverrideableFields() const { return std::vector{ make_override("gpu_id", &VulkanSettings::gpu_id), - make_override("full_screen", &VulkanSettings::full_screen)}; + make_override("full_screen", &VulkanSettings::full_screen), + make_override("renderdoc_enabled", &VulkanSettings::renderdoc_enabled), + make_override("vkvalidation_enabled", + &VulkanSettings::vkvalidation_enabled), + make_override("vkvalidation_core_enabled", + &VulkanSettings::vkvalidation_core_enabled), + make_override("vkvalidation_sync_enabled", + &VulkanSettings::vkvalidation_sync_enabled), + make_override("vkvalidation_gpu_enabled", + &VulkanSettings::vkvalidation_gpu_enabled), + make_override("crash_diagnostic_enabled", + &VulkanSettings::crash_diagnostic_enabled), + make_override("host_markers", &VulkanSettings::host_markers), + make_override("guest_markers", &VulkanSettings::guest_markers), + make_override("pipeline_cache_enabled", + &VulkanSettings::pipeline_cache_enabled), + make_override("pipeline_cache_archive", + &VulkanSettings::pipeline_cache_archive), + }; } }; -NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(VulkanSettings, gpu_id, full_screen) +NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(VulkanSettings, gpu_id, full_screen, renderdoc_enabled, + vkvalidation_enabled, vkvalidation_core_enabled, + vkvalidation_sync_enabled, vkvalidation_gpu_enabled, + crash_diagnostic_enabled, host_markers, guest_markers) // ------------------------------- // User settings // ------------------------------- @@ -346,23 +393,53 @@ public: SETTING_FORWARD_BOOL(m_general, DiscordRPCEnabled, discord_rpc_enabled) // Audio settings + SETTING_FORWARD(m_audio, MicDevice, mic_device) SETTING_FORWARD(m_audio, MainOutputDevice, main_output_device) SETTING_FORWARD(m_audio, PadSpkOutputDevice, padSpk_output_device) // Debug settings SETTING_FORWARD_BOOL(m_debug, SeparateLoggingEnabled, separate_logging_enabled) SETTING_FORWARD_BOOL(m_debug, DebugDump, debug_dump) - SETTING_FORWARD_BOOL(m_debug, ShaderDump, shader_dump) + SETTING_FORWARD_BOOL(m_debug, ShaderCollect, shader_collect) SETTING_FORWARD_BOOL(m_debug, LogEnabled, log_enabled) // GPU Settings SETTING_FORWARD_BOOL(m_gpu, NullGPU, null_gpu) + SETTING_FORWARD_BOOL(m_gpu, DumpShaders, dump_shaders) + SETTING_FORWARD_BOOL(m_gpu, CopyGpuBuffers, copy_gpu_buffers) SETTING_FORWARD(m_gpu, FullScreenMode, full_screen_mode) SETTING_FORWARD(m_gpu, PresentMode, present_mode) + SETTING_FORWARD(m_gpu, WindowHeight, window_height) + SETTING_FORWARD(m_gpu, WindowWidth, window_width) + SETTING_FORWARD_BOOL(m_gpu, HdrAllowed, hdr_allowed) + SETTING_FORWARD_BOOL(m_gpu, FsrEnabled, fsr_enabled) + SETTING_FORWARD_BOOL(m_gpu, RcasEnabled, rcas_enabled) + SETTING_FORWARD(m_gpu, RcasAttenuation, rcas_attenuation) + SETTING_FORWARD_BOOL(m_gpu, ReadbacksEnabled, readbacks_enabled) + SETTING_FORWARD_BOOL(m_gpu, ReadbackLinearImagesEnabled, readback_linear_images_enabled) + SETTING_FORWARD_BOOL(m_gpu, DirectMemoryAccessEnabled, direct_memory_access_enabled) + SETTING_FORWARD(m_gpu, VblankFrequency, vblank_frequency) + + // Input Settings + SETTING_FORWARD(m_input, CursorState, cursor_state) + SETTING_FORWARD(m_input, CursorHideTimeout, cursor_hide_timeout) + SETTING_FORWARD(m_input, UsbDevice, usb_device) + SETTING_FORWARD_BOOL(m_input, MotionControlsEnabled, motion_controls_enabled) + SETTING_FORWARD_BOOL(m_input, BackgroundControllerInput, background_controller_input) // Vulkan settings SETTING_FORWARD(m_vulkan, GpuId, gpu_id) SETTING_FORWARD_BOOL(m_vulkan, FullScreen, full_screen) + SETTING_FORWARD_BOOL(m_vulkan, RenderdocEnabled, renderdoc_enabled) + SETTING_FORWARD_BOOL(m_vulkan, VkValidationEnabled, vkvalidation_enabled) + SETTING_FORWARD_BOOL(m_vulkan, VkValidationCoreEnabled, vkvalidation_core_enabled) + SETTING_FORWARD_BOOL(m_vulkan, VkValidationSyncEnabled, vkvalidation_sync_enabled) + SETTING_FORWARD_BOOL(m_vulkan, VkValidationGpuEnabled, vkvalidation_gpu_enabled) + SETTING_FORWARD_BOOL(m_vulkan, CrashDiagnosticEnabled, crash_diagnostic_enabled) + SETTING_FORWARD_BOOL(m_vulkan, HostMarkers, host_markers) + SETTING_FORWARD_BOOL(m_vulkan, GuestMarkers, guest_markers) + SETTING_FORWARD_BOOL(m_vulkan, PipelineCacheEnabled, pipeline_cache_enabled) + SETTING_FORWARD_BOOL(m_vulkan, PipelineCacheArchive, pipeline_cache_archive) #undef SETTING_FORWARD #undef SETTING_FORWARD_BOOL diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index db2790a0a..6c724c4a2 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2026 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2025-2026 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -296,7 +296,7 @@ const GraphicsPipeline* PipelineCache::GetGraphicsPipeline() { RegisterPipelineData(graphics_key, pipeline_hash, sdata); ++num_new_pipelines; - if (EmulatorSettings::GetInstance()->IsShaderDump()) { + if (EmulatorSettings::GetInstance()->IsShaderCollect()) { for (auto stage = 0; stage < MaxShaderStages; ++stage) { if (infos[stage]) { auto& m = modules[stage]; @@ -325,7 +325,7 @@ const ComputePipeline* PipelineCache::GetComputePipeline() { RegisterPipelineData(compute_key, sdata); ++num_new_pipelines; - if (EmulatorSettings::GetInstance()->IsShaderDump()) { + if (EmulatorSettings::GetInstance()->IsShaderCollect()) { auto& m = modules[0]; module_related_pipelines[m].emplace_back(compute_key); } @@ -556,7 +556,7 @@ vk::ShaderModule PipelineCache::CompileModule(Shader::Info& info, Shader::Runtim const auto name = GetShaderName(info.stage, info.pgm_hash, perm_idx); Vulkan::SetObjectName(instance.GetDevice(), module, name); - if (EmulatorSettings::GetInstance()->IsShaderDump()) { + if (EmulatorSettings::GetInstance()->IsShaderCollect()) { DebugState.CollectShader(name, info.l_stage, module, spv, code, patch ? *patch : std::span{}, is_patched); }