From 49329aca2173ff483da1b393e862100d7351010c Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Tue, 25 Nov 2025 17:22:35 -0400 Subject: [PATCH] [vk, vendor] Clamping memory usage in mobile gpu's --- .../renderer_vulkan/vk_pipeline_cache.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index 4f561e186b..b04e73f41d 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -788,6 +788,19 @@ std::unique_ptr PipelineCache::CreateComputePipeline( } auto program{TranslateProgram(pools.inst, pools.block, env, cfg, host_info)}; + const VkDriverIdKHR driver_id = device.GetDriverID(); + const bool needs_shared_mem_clamp = + driver_id == VK_DRIVER_ID_QUALCOMM_PROPRIETARY || + driver_id == VK_DRIVER_ID_ARM_PROPRIETARY; + const u32 max_shared_memory = device.GetMaxComputeSharedMemorySize(); + if (needs_shared_mem_clamp && program.shared_memory_size > max_shared_memory) { + LOG_WARNING(Render_Vulkan, + "Compute shader 0x{:016x} requests {}KB shared memory but device max is {}KB - clamping", + key.unique_hash, + program.shared_memory_size / 1024, + max_shared_memory / 1024); + program.shared_memory_size = max_shared_memory; + } const std::vector code{EmitSPIRV(profile, program, this->optimize_spirv_output)}; device.SaveShader(code); vk::ShaderModule spv_module{BuildShader(device, code)};