From 0a4578926bb89b994a793306f130d5240b5b27dd Mon Sep 17 00:00:00 2001 From: xbzk Date: Tue, 26 May 2026 17:44:28 -0300 Subject: [PATCH] [settings] kill confusing flag gpu_logging_enabled, redundant to gpu_log_level == 0 --- .../features/settings/model/BooleanSetting.kt | 1 - .../settings/model/view/SettingsItem.kt | 7 -- .../settings/ui/SettingsFragmentPresenter.kt | 1 - .../app/src/main/res/values-ar/strings.xml | 2 - .../app/src/main/res/values-es/strings.xml | 2 - .../app/src/main/res/values-fr/strings.xml | 1 - .../app/src/main/res/values-ru/strings.xml | 2 - .../app/src/main/res/values-uk/strings.xml | 2 - .../src/main/res/values-zh-rCN/strings.xml | 2 - .../app/src/main/res/values/strings.xml | 2 - src/common/settings.h | 3 +- src/video_core/gpu_logging/gpu_logging.cpp | 66 +++++++++---------- src/video_core/gpu_logging/gpu_logging.h | 12 ++-- .../renderer_vulkan/vk_compute_pipeline.cpp | 4 +- .../renderer_vulkan/vk_graphics_pipeline.cpp | 4 +- .../renderer_vulkan/vk_pipeline_cache.cpp | 37 +++++++---- .../renderer_vulkan/vk_rasterizer.cpp | 8 +-- .../renderer_vulkan/vk_scheduler.cpp | 6 +- .../renderer_vulkan/vk_texture_cache.cpp | 2 +- .../vulkan_common/vulkan_debug_callback.cpp | 2 +- .../vulkan_common/vulkan_device.cpp | 11 ++-- .../vulkan_common/vulkan_memory_allocator.cpp | 8 +-- 22 files changed, 83 insertions(+), 102 deletions(-) diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt index a412a80a2e..e3fa9ce428 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/BooleanSetting.kt @@ -83,7 +83,6 @@ enum class BooleanSetting(override val key: String) : AbstractBooleanSetting { ENABLE_OVERLAY("enable_overlay"), // GPU Logging - GPU_LOGGING_ENABLED("gpu_logging_enabled"), GPU_LOG_VULKAN_CALLS("gpu_log_vulkan_calls"), GPU_LOG_SHADER_DUMPS("gpu_log_shader_dumps"), GPU_LOG_MEMORY_TRACKING("gpu_log_memory_tracking"), diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt index f95c53720f..4c13996954 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/model/view/SettingsItem.kt @@ -924,13 +924,6 @@ abstract class SettingsItem( ) // GPU Logging settings - put( - SwitchSetting( - BooleanSetting.GPU_LOGGING_ENABLED, - titleId = R.string.gpu_logging_enabled, - descriptionId = R.string.gpu_logging_enabled_description - ) - ) put( SingleChoiceSetting( ByteSetting.GPU_LOG_LEVEL, diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt index fee953aa14..ad81b494bf 100644 --- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt +++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/settings/ui/SettingsFragmentPresenter.kt @@ -1289,7 +1289,6 @@ class SettingsFragmentPresenter( if (!NativeConfig.isPerGameConfigLoaded()) { add(HeaderSetting(R.string.gpu_logging_header)) - add(BooleanSetting.GPU_LOGGING_ENABLED.key) add(ByteSetting.GPU_LOG_LEVEL.key) add(BooleanSetting.GPU_LOG_VULKAN_CALLS.key) add(BooleanSetting.GPU_LOG_SHADER_DUMPS.key) diff --git a/src/android/app/src/main/res/values-ar/strings.xml b/src/android/app/src/main/res/values-ar/strings.xml index 08d56dea49..7e1656bf78 100644 --- a/src/android/app/src/main/res/values-ar/strings.xml +++ b/src/android/app/src/main/res/values-ar/strings.xml @@ -564,8 +564,6 @@ تسجيل وحدة معالجة الرسومات - تمكين تسجيل وحدة معالجة الرسومات - تسجيل عمليات وحدة معالجة الرسومات في ملف eden_gpu.log لتصحيح أخطاء برامج تشغيل Adreno مستوى السجل مستوى التفاصيل لسجلات وحدة معالجة الرسومات (كلما زاد المستوى، زادت التفاصيل وزادت التكاليف الإضافية) تسجيل استدعاءات واجهة برمجة تطبيقات Vulkan diff --git a/src/android/app/src/main/res/values-es/strings.xml b/src/android/app/src/main/res/values-es/strings.xml index 167ffe6ff1..82fe252941 100644 --- a/src/android/app/src/main/res/values-es/strings.xml +++ b/src/android/app/src/main/res/values-es/strings.xml @@ -558,8 +558,6 @@ Registros de la GPU - Activar los registros de la GPU - Registra las operaciones de la GPU en eden_gpu.log para la depuración de los controladores de Adreno Nivel de registros Nivel de detalle de los registros de la GPU (más alto = más detalles, más sobrecarga) Registros de llamadas del API de Vulkan diff --git a/src/android/app/src/main/res/values-fr/strings.xml b/src/android/app/src/main/res/values-fr/strings.xml index ca96302a3a..9ba4068bca 100644 --- a/src/android/app/src/main/res/values-fr/strings.xml +++ b/src/android/app/src/main/res/values-fr/strings.xml @@ -527,7 +527,6 @@ Journalisation GPU - Activer la journalisation GPU Niveau de journalisation Journaliser les appels API Vulkan Extraire les shaders diff --git a/src/android/app/src/main/res/values-ru/strings.xml b/src/android/app/src/main/res/values-ru/strings.xml index 4e5f2149e8..94d577ff91 100644 --- a/src/android/app/src/main/res/values-ru/strings.xml +++ b/src/android/app/src/main/res/values-ru/strings.xml @@ -560,8 +560,6 @@ Ведение журнала ГПУ - Включить ведение журнала ГПУ - Записывать операции ГПУ в файл eden_gpu.log для отладки драйверов Adreno Уровень журналирования Уровень детализации логов ГПУ (больше значение = больше деталей, выше нагрузка) Записывать вызовы Vulkan API diff --git a/src/android/app/src/main/res/values-uk/strings.xml b/src/android/app/src/main/res/values-uk/strings.xml index 04356234cb..c143e89546 100644 --- a/src/android/app/src/main/res/values-uk/strings.xml +++ b/src/android/app/src/main/res/values-uk/strings.xml @@ -560,8 +560,6 @@ Журналювання ГП - Увімкнути журналювання ГП - Журналювати операції ГП до eden_gpu.log для зневадження драйверів Adreno Рівень журналювання Рівень подробиць у журналі ГП (вищий = більше подробиць, більший вплив на швидкодію) Записувати виклики API Vulkan diff --git a/src/android/app/src/main/res/values-zh-rCN/strings.xml b/src/android/app/src/main/res/values-zh-rCN/strings.xml index 9f8b4dbb4a..a016f9e78d 100644 --- a/src/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/src/android/app/src/main/res/values-zh-rCN/strings.xml @@ -554,8 +554,6 @@ GPU 日志 - 启用 GPU 日志 - 将 GPU 操作记录至 eden_gpu.log 以供调试 Adreno 驱动 日志等级 GPU 日志的详细级别(数值越高 = 细节越多,开销越大) 记录 Vulkan API 调用 diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index 77be250537..16cb1460d2 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -572,8 +572,6 @@ GPU Logging - Enable GPU Logging - Log GPU operations to eden_gpu.log for debugging Adreno drivers Log Level Detail level for GPU logs (higher = more detail, more overhead) Log Vulkan API Calls diff --git a/src/common/settings.h b/src/common/settings.h index 800301a93c..2d115f6fec 100644 --- a/src/common/settings.h +++ b/src/common/settings.h @@ -807,8 +807,7 @@ struct Values { Setting disable_web_applet{linkage, true, "disable_web_applet", Category::Debugging}; // GPU Logging - Setting gpu_logging_enabled{linkage, false, "gpu_logging_enabled", Category::Debugging}; - Setting gpu_log_level{linkage, GpuLogLevel::Standard, "gpu_log_level", + Setting gpu_log_level{linkage, GpuLogLevel::Off, "gpu_log_level", Category::Debugging}; Setting gpu_log_vulkan_calls{linkage, true, "gpu_log_vulkan_calls", Category::Debugging}; Setting gpu_log_shader_dumps{linkage, false, "gpu_log_shader_dumps", Category::Debugging}; diff --git a/src/video_core/gpu_logging/gpu_logging.cpp b/src/video_core/gpu_logging/gpu_logging.cpp index 5f5e376e99..b4e93d16cf 100644 --- a/src/video_core/gpu_logging/gpu_logging.cpp +++ b/src/video_core/gpu_logging/gpu_logging.cpp @@ -4,6 +4,7 @@ #include "video_core/gpu_logging/gpu_logging.h" #include +#include #include #include "common/fs/file.h" @@ -280,13 +281,12 @@ void GPULogger::LogMemoryDeallocation(uintptr_t memory) { } void GPULogger::LogShaderCompilation(const std::string& shader_name, - const std::string& shader_info, - std::span spirv_code) { + const std::string& shader_info) { if (!initialized || current_level == LogLevel::Off) { return; } - if (!dump_shaders && current_level < LogLevel::Verbose) { + if (current_level < LogLevel::Verbose) { return; } @@ -294,38 +294,38 @@ void GPULogger::LogShaderCompilation(const std::string& shader_name, std::chrono::steady_clock::now().time_since_epoch()); const auto log_entry = fmt::format("[{}] [Shader] Compiled: {} ({})\n", - FormatTimestamp(timestamp), shader_name, shader_info); + FormatTimestamp(timestamp), shader_name, shader_info); WriteToLog(log_entry); +} - // Dump SPIR-V binary if enabled and we have data - if (dump_shaders && !spirv_code.empty()) { - using namespace Common::FS; - const auto& log_dir = GetEdenPath(EdenPath::LogDir); - const auto shaders_dir = log_dir / "shaders"; +bool IsActive() noexcept { + return Settings::values.gpu_log_level.GetValue() != Settings::GpuLogLevel::Off; +} - // Create directory on first dump - if (!shader_dump_dir_created) { - [[maybe_unused]] const bool created = CreateDir(shaders_dir); - shader_dump_dir_created = true; - } - - // Write SPIR-V binary file - const auto shader_path = shaders_dir / fmt::format("{}.spv", shader_name); - auto shader_file = std::make_unique( - shader_path, FileAccessMode::Write, FileType::BinaryFile); - - if (shader_file->IsOpen()) { - const size_t bytes_to_write = spirv_code.size() * sizeof(u32); - static_cast(shader_file->WriteSpan(spirv_code)); - shader_file->Close(); - - const auto dump_log = fmt::format("[{}] [Shader] Dumped SPIR-V: {} ({} bytes)\n", - FormatTimestamp(timestamp), shader_path.string(), bytes_to_write); - WriteToLog(dump_log); - } else { - LOG_WARNING(Render_Vulkan, "[GPU Logging] Failed to dump shader: {}", shader_path.string()); - } +void DumpSpirvShader(const std::string& shader_name, std::span spirv_code) { + if (spirv_code.empty()) { + return; } + + using namespace Common::FS; + const auto& log_dir = GetEdenPath(EdenPath::LogDir); + const auto shaders_dir = log_dir / "shaders"; + + // Ensure parent + shaders/ exist once. CreateDir is idempotent — guarded just to + // skip the syscall on subsequent dumps. + static std::once_flag dirs_flag; + std::call_once(dirs_flag, [&log_dir, &shaders_dir]() { + [[maybe_unused]] const bool log_dir_created = CreateDir(log_dir); + [[maybe_unused]] const bool shaders_dir_created = CreateDir(shaders_dir); + }); + + const auto shader_path = shaders_dir / fmt::format("{}.spv", shader_name); + Common::FS::IOFile shader_file(shader_path, FileAccessMode::Write, FileType::BinaryFile); + if (!shader_file.IsOpen()) { + LOG_WARNING(Render_Vulkan, "[Shader Dump] Failed to open {}", shader_path.string()); + return; + } + static_cast(shader_file.WriteSpan(spirv_code)); } void GPULogger::LogPipelineStateChange(const std::string& state_info) { @@ -657,10 +657,6 @@ void GPULogger::EnableVulkanCallTracking(bool enabled) { track_vulkan_calls = enabled; } -void GPULogger::EnableShaderDumps(bool enabled) { - dump_shaders = enabled; -} - void GPULogger::EnableMemoryTracking(bool enabled) { track_memory = enabled; } diff --git a/src/video_core/gpu_logging/gpu_logging.h b/src/video_core/gpu_logging/gpu_logging.h index 134fa94c0f..d76859d0c3 100644 --- a/src/video_core/gpu_logging/gpu_logging.h +++ b/src/video_core/gpu_logging/gpu_logging.h @@ -87,8 +87,7 @@ public: void LogVulkanCall(const std::string& call_name, const std::string& params, int result); void LogMemoryAllocation(uintptr_t memory, u64 size, u32 memory_flags); void LogMemoryDeallocation(uintptr_t memory); - void LogShaderCompilation(const std::string& shader_name, const std::string& shader_info, - std::span spirv_code = {}); + void LogShaderCompilation(const std::string& shader_name, const std::string& shader_info); void LogPipelineStateChange(const std::string& state_info); void LogDriverDebugInfo(const std::string& debug_info); @@ -121,7 +120,6 @@ public: // Settings void SetLogLevel(LogLevel level); void EnableVulkanCallTracking(bool enabled); - void EnableShaderDumps(bool enabled); void EnableMemoryTracking(bool enabled); void EnableDriverDebugInfo(bool enabled); void SetRingBufferSize(size_t entries); @@ -171,7 +169,6 @@ private: // Feature flags bool track_vulkan_calls = true; - bool dump_shaders = false; bool track_memory = false; bool capture_driver_debug = false; @@ -179,15 +176,16 @@ private: std::set used_extensions; mutable std::mutex extension_mutex; - // Shader dump directory (created on demand) - bool shader_dump_dir_created = false; - // Stored state for crash dumps std::string stored_driver_debug_info; std::string stored_pipeline_state; mutable std::mutex state_mutex; }; +[[nodiscard]] bool IsActive() noexcept; + +void DumpSpirvShader(const std::string& shader_name, std::span spirv_code); + // Helper to get stage name from index inline const char* GetShaderStageName(size_t stage_index) { static constexpr std::array stage_names{ diff --git a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp index 490dd7acfe..daf7c40f05 100644 --- a/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_compute_pipeline.cpp @@ -87,7 +87,7 @@ ComputePipeline::ComputePipeline(const Device& device_, vk::PipelineCache& pipel }, *pipeline_cache); // Log compute pipeline creation - if (Settings::values.gpu_logging_enabled.GetValue()) { + if (GPU::Logging::IsActive()) { GPU::Logging::GPULogger::GetInstance().LogPipelineStateChange( "ComputePipeline created" ); @@ -223,7 +223,7 @@ void ComputePipeline::Configure(Tegra::Engines::KeplerCompute& kepler_compute, } // Log compute pipeline binding - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { GPU::Logging::GPULogger::GetInstance().LogPipelineBind(true, "compute pipeline"); } diff --git a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp index 43fbefe425..9377123cb5 100644 --- a/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp +++ b/src/video_core/renderer_vulkan/vk_graphics_pipeline.cpp @@ -533,7 +533,7 @@ void GraphicsPipeline::ConfigureDraw(const RescalingPushConstant& rescaling, const bool bind_pipeline{scheduler.UpdateGraphicsPipeline(this)}; // Log graphics pipeline binding - if (bind_pipeline && Settings::values.gpu_logging_enabled.GetValue() && + if (bind_pipeline && GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { const std::string pipeline_info = fmt::format("hash=0x{:016x}", key.Hash()); GPU::Logging::GPULogger::GetInstance().LogPipelineBind(false, pipeline_info); @@ -987,7 +987,7 @@ void GraphicsPipeline::MakePipeline(VkRenderPass render_pass) { }, *pipeline_cache); // Log graphics pipeline creation - if (Settings::values.gpu_logging_enabled.GetValue()) { + if (GPU::Logging::IsActive()) { const std::string pipeline_info = fmt::format( "GraphicsPipeline created: stages={}, attachments={}", shader_stages.size(), diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index d0f98091c1..12dcfb0cb7 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -784,14 +784,21 @@ std::unique_ptr PipelineCache::CreateGraphicsPipeline( device.SaveShader(code); modules[stage_index] = BuildShader(device, code); - // Log shader compilation to GPU logger (with SPIR-V binary dump if enabled) - if (Settings::values.gpu_logging_enabled.GetValue()) { + // Text log + .spv dump. Text log is gated by gpu_log_level != Off; .spv dump + // is independent and gated only by gpu_log_shader_dumps. + const bool should_log = GPU::Logging::IsActive(); + const bool should_dump = Settings::values.gpu_log_shader_dumps.GetValue(); + if (should_log || should_dump) { static constexpr std::array stage_names{"vertex", "tess_control", "tess_eval", "geometry", "fragment"}; const std::string shader_name = fmt::format("shader_{:016x}_{}", key.unique_hashes[index], stage_names[stage_index]); - const std::string shader_info = fmt::format("SPIR-V size: {} bytes, hash: {:016x}", - code.size() * sizeof(u32), key.unique_hashes[index]); - GPU::Logging::GPULogger::GetInstance().LogShaderCompilation(shader_name, shader_info, - std::span(code.data(), code.size())); + if (should_log) { + const std::string shader_info = fmt::format("SPIR-V size: {} bytes, hash: {:016x}", + code.size() * sizeof(u32), key.unique_hashes[index]); + GPU::Logging::GPULogger::GetInstance().LogShaderCompilation(shader_name, shader_info); + } + if (should_dump) { + GPU::Logging::DumpSpirvShader(shader_name, std::span(code.data(), code.size())); + } } if (device.HasDebuggingToolAttached()) { @@ -902,13 +909,19 @@ std::unique_ptr PipelineCache::CreateComputePipeline( device.SaveShader(code); vk::ShaderModule spv_module{BuildShader(device, code)}; - // Log compute shader compilation to GPU logger (with SPIR-V binary dump if enabled) - if (Settings::values.gpu_logging_enabled.GetValue()) { + // Text log + .spv dump. Same split as the graphics path. + const bool should_log = GPU::Logging::IsActive(); + const bool should_dump = Settings::values.gpu_log_shader_dumps.GetValue(); + if (should_log || should_dump) { const std::string shader_name = fmt::format("shader_{:016x}_compute", key.unique_hash); - const std::string shader_info = fmt::format("SPIR-V size: {} bytes, hash: {:016x}", - code.size() * sizeof(u32), key.unique_hash); - GPU::Logging::GPULogger::GetInstance().LogShaderCompilation(shader_name, shader_info, - std::span(code.data(), code.size())); + if (should_log) { + const std::string shader_info = fmt::format("SPIR-V size: {} bytes, hash: {:016x}", + code.size() * sizeof(u32), key.unique_hash); + GPU::Logging::GPULogger::GetInstance().LogShaderCompilation(shader_name, shader_info); + } + if (should_dump) { + GPU::Logging::DumpSpirvShader(shader_name, std::span(code.data(), code.size())); + } } if (device.HasDebuggingToolAttached()) { diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp index 3c3367cfd8..467a85dd0b 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp @@ -270,7 +270,7 @@ void RasterizerVulkan::Draw(bool is_indexed, u32 instance_count) { }); // Log draw call - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { const std::string params = is_indexed ? fmt::format("vertices={}, instances={}, firstIndex={}, baseVertex={}, baseInstance={}", @@ -331,7 +331,7 @@ void RasterizerVulkan::DrawIndirect() { }); // Log indirect draw call - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { const std::string log_params = fmt::format("drawCount={}, stride={}", params.max_draw_counts, params.stride); @@ -585,7 +585,7 @@ void RasterizerVulkan::DispatchCompute() { scheduler.Record([dim](vk::CommandBuffer cmdbuf) { cmdbuf.Dispatch(dim[0], dim[1], dim[2]); }); // Log compute dispatch - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { const std::string params = fmt::format("groupCountX={}, groupCountY={}, groupCountZ={}", dim[0], dim[1], dim[2]); @@ -1110,7 +1110,7 @@ void RasterizerVulkan::HandleTransformFeedback() { regs.transform_feedback_enabled); if (regs.transform_feedback_enabled != 0) { // Log extension usage for transform feedback - if (Settings::values.gpu_logging_enabled.GetValue()) { + if (GPU::Logging::IsActive()) { GPU::Logging::GPULogger::GetInstance().LogExtensionUsage( "VK_EXT_transform_feedback", "HandleTransformFeedback"); } diff --git a/src/video_core/renderer_vulkan/vk_scheduler.cpp b/src/video_core/renderer_vulkan/vk_scheduler.cpp index abad831b69..3e2c26e065 100644 --- a/src/video_core/renderer_vulkan/vk_scheduler.cpp +++ b/src/video_core/renderer_vulkan/vk_scheduler.cpp @@ -169,7 +169,7 @@ void Scheduler::RequestRenderpass(const Framebuffer* framebuffer) { state.render_area = render_area; // Log render pass begin - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { const std::string render_pass_info = fmt::format( "renderArea={}x{}, numImages={}", @@ -281,7 +281,7 @@ u64 Scheduler::SubmitExecution(VkSemaphore signal_semaphore, VkSemaphore wait_se cmdbuf, upload_cmdbuf, signal_semaphore, wait_semaphore, signal_value)) { case VK_SUCCESS: // Log successful queue submission - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { GPU::Logging::GPULogger::GetInstance().LogVulkanCall( "vkQueueSubmit", "", VK_SUCCESS); @@ -324,7 +324,7 @@ void Scheduler::EndRenderPass() query_cache->CounterClose(VideoCommon::QueryType::StreamingByteCount); // Log render pass end - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { GPU::Logging::GPULogger::GetInstance().LogRenderPassEnd(); } diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index f099db74cb..3efc61d9d1 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -2332,7 +2332,7 @@ Sampler::Sampler(TextureCacheRuntime& runtime, const Tegra::Texture::TSCEntry& t if (has_custom_border_colors) { pnext = &border_ci; // Log extension usage for custom border color - if (Settings::values.gpu_logging_enabled.GetValue()) { + if (GPU::Logging::IsActive()) { GPU::Logging::GPULogger::GetInstance().LogExtensionUsage( "VK_EXT_custom_border_color", "Sampler::Sampler"); } diff --git a/src/video_core/vulkan_common/vulkan_debug_callback.cpp b/src/video_core/vulkan_common/vulkan_debug_callback.cpp index d1bd009c8f..165b3de733 100644 --- a/src/video_core/vulkan_common/vulkan_debug_callback.cpp +++ b/src/video_core/vulkan_common/vulkan_debug_callback.cpp @@ -76,7 +76,7 @@ VkBool32 DebugUtilCallback(VkDebugUtilsMessageSeverityFlagBitsEXT severity, } // Route to GPU logger for tracking Vulkan validation messages - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_vulkan_calls.GetValue()) { // Convert severity to result code for logging (negative = error) int result_code = 0; diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 6e55306079..a2c24b17eb 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -1502,7 +1502,10 @@ std::vector Device::GetDeviceQueueCreateInfos() const { } void Device::InitializeGPULogging() { - if (!Settings::values.gpu_logging_enabled.GetValue()) { + // Get log level from settings — Off is the disable. + const auto log_level = static_cast( + static_cast(Settings::values.gpu_log_level.GetValue())); + if (log_level == GPU::Logging::LogLevel::Off) { return; } @@ -1516,18 +1519,12 @@ void Device::InitializeGPULogging() { detected_driver = GPU::Logging::DriverType::Qualcomm; } - // Get log level from settings - const auto log_level = static_cast( - static_cast(Settings::values.gpu_log_level.GetValue())); - // Initialize GPU logger GPU::Logging::GPULogger::GetInstance().Initialize(log_level, detected_driver); // Configure feature flags GPU::Logging::GPULogger::GetInstance().EnableVulkanCallTracking( Settings::values.gpu_log_vulkan_calls.GetValue()); - GPU::Logging::GPULogger::GetInstance().EnableShaderDumps( - Settings::values.gpu_log_shader_dumps.GetValue()); GPU::Logging::GPULogger::GetInstance().EnableMemoryTracking( Settings::values.gpu_log_memory_tracking.GetValue()); GPU::Logging::GPULogger::GetInstance().EnableDriverDebugInfo( diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp index 9c7cd8a61f..a158017db0 100644 --- a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp +++ b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp @@ -111,7 +111,7 @@ namespace Vulkan { : allocator{alloc}, allocation{a}, memory{info.deviceMemory}, offset{info.offset}, size{info.size}, mapped_ptr{info.pMappedData} { // Log GPU memory allocation - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_memory_tracking.GetValue()) { GPU::Logging::GPULogger::GetInstance().LogMemoryAllocation( reinterpret_cast(memory), @@ -179,7 +179,7 @@ namespace Vulkan { void MemoryCommit::Release() { if (allocation && allocator) { // Log GPU memory deallocation - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_memory_tracking.GetValue() && memory != VK_NULL_HANDLE) { GPU::Logging::GPULogger::GetInstance().LogMemoryDeallocation( @@ -243,7 +243,7 @@ namespace Vulkan { vk::Check(vmaCreateImage(allocator, &ci, &alloc_ci, &handle, &allocation, &alloc_info)); // Log GPU memory allocation for images - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_memory_tracking.GetValue()) { GPU::Logging::GPULogger::GetInstance().LogMemoryAllocation( reinterpret_cast(alloc_info.deviceMemory), @@ -279,7 +279,7 @@ namespace Vulkan { vmaGetAllocationMemoryProperties(allocator, allocation, &property_flags); // Log GPU memory allocation for buffers - if (Settings::values.gpu_logging_enabled.GetValue() && + if (GPU::Logging::IsActive() && Settings::values.gpu_log_memory_tracking.GetValue()) { GPU::Logging::GPULogger::GetInstance().LogMemoryAllocation( reinterpret_cast(alloc_info.deviceMemory),