diff options
| author | lizzie <lizzie@eden-emu.dev> | 2025-10-18 01:54:43 +0200 |
|---|---|---|
| committer | crueter <crueter@eden-emu.dev> | 2025-10-18 01:54:43 +0200 |
| commit | f55e560ac5f3724d869963addbc823366059b5f8 (patch) | |
| tree | 9f86bcf821cc80af3aa27e5b3f71ccef399358d5 /src/video_core/shader_cache.cpp | |
| parent | 84ab54c4bc8ce8258ee88310ac0af654bcf7fee7 (diff) | |
[compat] Debian stable gcc12/clang14 compilation fixes (#2763)
Mainly because - while we can just give out an AppImage and call it a day - building natively should be an option for all major distros.
And "base" stable debian doesn't provide a new enough g++/clang++ so... we need to make some "fixups".
Signed-off-by: lizzie <lizzie@eden-emu.dev>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2763
Reviewed-by: crueter <crueter@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Co-authored-by: lizzie <lizzie@eden-emu.dev>
Co-committed-by: lizzie <lizzie@eden-emu.dev>
Diffstat (limited to 'src/video_core/shader_cache.cpp')
| -rw-r--r-- | src/video_core/shader_cache.cpp | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/src/video_core/shader_cache.cpp b/src/video_core/shader_cache.cpp index 2af32c8f25..8a349bfe2a 100644 --- a/src/video_core/shader_cache.cpp +++ b/src/video_core/shader_cache.cpp @@ -1,9 +1,13 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include <algorithm> #include <array> #include <vector> +#include <boost/container/small_vector.hpp> #include "common/assert.h" #include "shader_recompiler/frontend/maxwell/control_flow.h" @@ -16,6 +20,7 @@ #include "video_core/memory_manager.h" #include "video_core/shader_cache.h" #include "video_core/shader_environment.h" +#include "video_core/texture_cache/util.h" namespace VideoCommon { @@ -157,21 +162,22 @@ void ShaderCache::RemovePendingShaders() { std::ranges::sort(marked_for_removal); marked_for_removal.erase(std::unique(marked_for_removal.begin(), marked_for_removal.end()), marked_for_removal.end()); - + // Linear growth anyways - maybe consider static_vector instead? boost::container::small_vector<ShaderInfo*, 16> removed_shaders; - std::scoped_lock lock{lookup_mutex}; for (Entry* const entry : marked_for_removal) { removed_shaders.push_back(entry->data); - - const auto it = lookup_cache.find(entry->addr_start); + auto const it = lookup_cache.find(entry->addr_start); ASSERT(it != lookup_cache.end()); lookup_cache.erase(it); } marked_for_removal.clear(); if (!removed_shaders.empty()) { - RemoveShadersFromStorage(removed_shaders); + // Remove the given shaders from the cache + std::erase_if(storage, [&removed_shaders](const std::unique_ptr<ShaderInfo>& shader) { + return std::ranges::find(removed_shaders, shader.get()) != removed_shaders.end(); + }); } } @@ -214,13 +220,6 @@ void ShaderCache::UnmarkMemory(Entry* entry) { device_memory.UpdatePagesCachedCount(addr, size, -1); } -void ShaderCache::RemoveShadersFromStorage(std::span<ShaderInfo*> removed_shaders) { - // Remove them from the cache - std::erase_if(storage, [&removed_shaders](const std::unique_ptr<ShaderInfo>& shader) { - return std::ranges::find(removed_shaders, shader.get()) != removed_shaders.end(); - }); -} - ShaderCache::Entry* ShaderCache::NewEntry(VAddr addr, VAddr addr_end, ShaderInfo* data) { auto entry = std::make_unique<Entry>(Entry{addr, addr_end, data}); Entry* const entry_pointer = entry.get(); |
