From 148586d2f6542fd7892d9f1a0b49b2065e4040ed Mon Sep 17 00:00:00 2001 From: CamilleLaVey Date: Thu, 2 Jul 2026 14:09:58 -0400 Subject: [PATCH] [texture_cache, pipeline_cache] Maintenance for some clamps + promoting to general purpose --- src/video_core/renderer_vulkan/vk_pipeline_cache.cpp | 6 +----- src/video_core/texture_cache/texture_cache.h | 5 ++++- src/video_core/vulkan_common/vulkan_device.cpp | 3 ++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp index c8aa2f7b40..04d34ac92b 100644 --- a/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_pipeline_cache.cpp @@ -929,12 +929,8 @@ 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) { + if (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, diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index 2cfdb94359..060e75ff47 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -1915,13 +1915,16 @@ void TextureCache

::TrimInactiveSamplers(size_t budget) { ankerl::unordered_dense::set active_sampler_ids; for (auto const& e : channel_state->sampler_ids) active_sampler_ids.insert(e.second); + if constexpr (requires { runtime.Finish(); }) { + runtime.Finish(); + } // Elements in the map must be necesarily valid size_t removed = 0; for (auto it = channel_state->samplers.begin(); it != channel_state->samplers.end();) { const SamplerId sampler_id = it->second; if (!sampler_id || sampler_id == CORRUPT_ID) { it = channel_state->samplers.erase(it); - } else if (std::ranges::find(active_sampler_ids, sampler_id) != active_sampler_ids.end()) { + } else if (active_sampler_ids.contains(sampler_id)) { ++it; } else { slot_samplers.erase(sampler_id); diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index cce4c7b6c7..82588a8028 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -644,7 +644,8 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR if (is_turnip || is_qualcomm) { LOG_WARNING(Render_Vulkan, "Driver requires higher-than-reported binding limits"); - properties.properties.limits.maxVertexInputBindings = 32; + properties.properties.limits.maxVertexInputBindings = + (std::max)(properties.properties.limits.maxVertexInputBindings, 32U); } const auto dyna_state = Settings::values.dyna_state.GetValue();