diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 1121284aaf..0ed65e29e9 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -1989,8 +1989,8 @@ SamplerId TextureCache
::FindSampler(const TSCEntry& config) {
}
const auto [pair, is_new] = channel_state->samplers.try_emplace(config);
if (is_new) {
- EnforceSamplerBudget();
pair->second = slot_samplers.insert(runtime, config);
+ EnforceSamplerBudget();
}
return pair->second;
}
@@ -2363,7 +2363,7 @@ void TextureCache
::UnregisterImage(ImageId image_id) {
image.flags &= ~ImageFlagBits::BadOverlap;
lru_cache.Free(image.lru_index);
const auto& clear_page_table =
- [image_id](u64 page, std::unordered_map, Common::IdentityHash>& selected_page_table) {
+ [image_id](u64 page, ankerl::unordered_dense::map, Common::IdentityHash>& selected_page_table) {
const auto page_it = selected_page_table.find(page);
if (page_it == selected_page_table.end()) {
ASSERT_MSG(false, "Unregistering unregistered page=0x{:x}", page << YUZU_PAGEBITS);
diff --git a/src/video_core/texture_cache/texture_cache_base.h b/src/video_core/texture_cache/texture_cache_base.h
index 0016c9968a..cff300da8f 100644
--- a/src/video_core/texture_cache/texture_cache_base.h
+++ b/src/video_core/texture_cache/texture_cache_base.h
@@ -14,6 +14,7 @@
#include
// TODO: find out which don't require stable iters
#include
+#include
#include
#include
#include
@@ -66,7 +67,7 @@ struct AsyncDecodeContext {
std::atomic_bool complete;
};
-using TextureCacheGPUMap = std::unordered_map, Common::IdentityHash>;
+using TextureCacheGPUMap = ankerl::unordered_dense::map, Common::IdentityHash>;
class TextureCacheChannelInfo : public ChannelInfo {
public:
@@ -85,6 +86,7 @@ public:
std::vector compute_sampler_ids;
std::vector compute_image_view_ids;
+ // TODO: still relies on bad iterators :(
std::unordered_map image_views;
std::unordered_map samplers;
@@ -454,10 +456,9 @@ private:
RenderTargets render_targets;
- std::unordered_map framebuffers;
-
- std::unordered_map, Common::IdentityHash> page_table;
- std::unordered_map> sparse_views;
+ ankerl::unordered_dense::map framebuffers;
+ ankerl::unordered_dense::map, Common::IdentityHash> page_table;
+ ankerl::unordered_dense::map> sparse_views;
DAddr virtual_invalid_space{};
@@ -514,7 +515,7 @@ private:
DelayedDestructionRing sentenced_image_view;
DelayedDestructionRing sentenced_framebuffers;
- std::unordered_map image_allocs_table;
+ ankerl::unordered_dense::map image_allocs_table;
Common::ScratchBuffer swizzle_data_buffer;
Common::ScratchBuffer unswizzle_data_buffer;
@@ -541,7 +542,7 @@ private:
ImageId id;
};
boost::container::small_vector join_copies_to_do;
- std::unordered_map join_alias_indices;
+ ankerl::unordered_dense::map join_alias_indices;
};
} // namespace VideoCommon