mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-07 22:29:48 +00:00
[common] Switch to boost::unordered_flat containers (#4326)
Replaces all instances of ankerl's unordered map/set with boost's `unordered_flat_*` classes. This uses std::hash since boost::hash is actually a lot slower. Also adds an abstraction layer in `Common` so future changes are quicker and easier. Other implementation details: - ankerl provided hash specializations for tuple and pair, so those were ported here - std::erase_if doesn't work on boost, so just used the ADL'd erase_if This should be about equal or superior performance as unordered_dense for everything except iteration. Signed-off-by: crueter <crueter@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4326 Reviewed-by: Lizzie and Samuel <lizzie@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
This commit is contained in:
@@ -13,7 +13,7 @@
|
||||
#include <filesystem>
|
||||
#include <memory>
|
||||
#include <type_traits>
|
||||
#include <ankerl/unordered_dense.h>
|
||||
#include "common/container/unordered_map.h"
|
||||
#include <vector>
|
||||
|
||||
#include "common/common_types.h"
|
||||
@@ -163,8 +163,8 @@ private:
|
||||
GraphicsPipelineCacheKey graphics_key{};
|
||||
GraphicsPipeline* current_pipeline{};
|
||||
|
||||
ankerl::unordered_dense::map<ComputePipelineCacheKey, std::unique_ptr<ComputePipeline>> compute_cache;
|
||||
ankerl::unordered_dense::map<GraphicsPipelineCacheKey, std::unique_ptr<GraphicsPipeline>> graphics_cache;
|
||||
::Common::unordered_map<ComputePipelineCacheKey, std::unique_ptr<ComputePipeline>> compute_cache;
|
||||
::Common::unordered_map<GraphicsPipelineCacheKey, std::unique_ptr<GraphicsPipeline>> graphics_cache;
|
||||
|
||||
ShaderPools main_pools;
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
#include <memory>
|
||||
#include <span>
|
||||
#include <type_traits>
|
||||
#include <ankerl/unordered_dense.h>
|
||||
#include "common/container/unordered_map.h"
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
#include "video_core/renderer_vulkan/vk_texture_cache.h"
|
||||
@@ -246,7 +246,7 @@ public:
|
||||
sync_values_stash.emplace_back();
|
||||
std::vector<HostSyncValues>* sync_values = &sync_values_stash.back();
|
||||
sync_values->reserve(num_slots_used);
|
||||
ankerl::unordered_dense::map<size_t, std::pair<size_t, size_t>> offsets;
|
||||
::Common::unordered_map<size_t, std::pair<size_t, size_t>> offsets;
|
||||
resolve_buffers.clear();
|
||||
size_t resolve_buffer_index = ObtainBuffer<true>(num_slots_used);
|
||||
resolve_buffers.push_back(resolve_buffer_index);
|
||||
@@ -428,7 +428,7 @@ private:
|
||||
template <bool is_ordered, typename Func>
|
||||
void ApplyBanksWideOp(std::vector<size_t>& queries, Func&& func) {
|
||||
std::conditional_t<is_ordered, std::map<size_t, std::pair<size_t, size_t>>,
|
||||
ankerl::unordered_dense::map<size_t, std::pair<size_t, size_t>>>
|
||||
::Common::unordered_map<size_t, std::pair<size_t, size_t>>>
|
||||
indexer;
|
||||
for (auto q : queries) {
|
||||
auto* query = GetQuery(q);
|
||||
@@ -757,7 +757,7 @@ public:
|
||||
|
||||
void SyncWrites() override {
|
||||
CloseCounter();
|
||||
ankerl::unordered_dense::map<size_t, std::vector<HostSyncValues>> sync_values_stash;
|
||||
::Common::unordered_map<size_t, std::vector<HostSyncValues>> sync_values_stash;
|
||||
for (auto q : pending_sync) {
|
||||
auto* query = GetQuery(q);
|
||||
if (True(query->flags & VideoCommon::QueryFlagBits::IsRewritten)) {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include <ankerl/unordered_dense.h>
|
||||
#include "common/container/unordered_map.h"
|
||||
|
||||
#include <boost/container/static_vector.hpp>
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <mutex>
|
||||
#include <ankerl/unordered_dense.h>
|
||||
#include "common/container/unordered_map.h"
|
||||
|
||||
#include "common/container_hash.h"
|
||||
#include "video_core/surface.h"
|
||||
@@ -75,7 +75,7 @@ public:
|
||||
|
||||
private:
|
||||
const Device* device{};
|
||||
ankerl::unordered_dense::map<RenderPassKey, vk::RenderPass> cache;
|
||||
::Common::unordered_map<RenderPassKey, vk::RenderPass> cache;
|
||||
std::mutex mutex;
|
||||
};
|
||||
|
||||
|
||||
@@ -186,7 +186,7 @@ public:
|
||||
};
|
||||
|
||||
std::vector<MsaaScratchImage> msaa_scratch_images;
|
||||
ankerl::unordered_dense::map<VkImage, ResolveShadow> resolve_shadows;
|
||||
::Common::unordered_map<VkImage, ResolveShadow> resolve_shadows;
|
||||
std::vector<std::pair<u64, ResolveShadow>> pending_resolve_shadows;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user