mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-13 09:18:58 +02:00
[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>
This commit is contained in:
parent
84ab54c4bc
commit
f55e560ac5
17 changed files with 122 additions and 51 deletions
|
|
@ -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();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue