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),