mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-05-14 08:12:16 +00:00
vk_rasterizer: Control mapped_ranges access with shared lock. (#2788)
This commit is contained in:
parent
2b633fd3c5
commit
683a223c1b
2 changed files with 15 additions and 4 deletions
|
@ -930,12 +930,17 @@ bool Rasterizer::IsMapped(VAddr addr, u64 size) {
|
||||||
// There is no memory, so not mapped.
|
// There is no memory, so not mapped.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return mapped_ranges.find(boost::icl::interval<VAddr>::right_open(addr, addr + size)) !=
|
const auto range = decltype(mapped_ranges)::interval_type::right_open(addr, addr + size);
|
||||||
mapped_ranges.end();
|
|
||||||
|
std::shared_lock lock{mapped_ranges_mutex};
|
||||||
|
return boost::icl::contains(mapped_ranges, range);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rasterizer::MapMemory(VAddr addr, u64 size) {
|
void Rasterizer::MapMemory(VAddr addr, u64 size) {
|
||||||
mapped_ranges += boost::icl::interval<VAddr>::right_open(addr, addr + size);
|
{
|
||||||
|
std::unique_lock lock{mapped_ranges_mutex};
|
||||||
|
mapped_ranges += decltype(mapped_ranges)::interval_type::right_open(addr, addr + size);
|
||||||
|
}
|
||||||
page_manager.OnGpuMap(addr, size);
|
page_manager.OnGpuMap(addr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -943,7 +948,10 @@ void Rasterizer::UnmapMemory(VAddr addr, u64 size) {
|
||||||
buffer_cache.InvalidateMemory(addr, size);
|
buffer_cache.InvalidateMemory(addr, size);
|
||||||
texture_cache.UnmapMemory(addr, size);
|
texture_cache.UnmapMemory(addr, size);
|
||||||
page_manager.OnGpuUnmap(addr, size);
|
page_manager.OnGpuUnmap(addr, size);
|
||||||
mapped_ranges -= boost::icl::interval<VAddr>::right_open(addr, addr + size);
|
{
|
||||||
|
std::unique_lock lock{mapped_ranges_mutex};
|
||||||
|
mapped_ranges -= decltype(mapped_ranges)::interval_type::right_open(addr, addr + size);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Rasterizer::UpdateDynamicState(const GraphicsPipeline& pipeline) const {
|
void Rasterizer::UpdateDynamicState(const GraphicsPipeline& pipeline) const {
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <shared_mutex>
|
||||||
|
|
||||||
#include "video_core/buffer_cache/buffer_cache.h"
|
#include "video_core/buffer_cache/buffer_cache.h"
|
||||||
#include "video_core/page_manager.h"
|
#include "video_core/page_manager.h"
|
||||||
#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
|
#include "video_core/renderer_vulkan/vk_pipeline_cache.h"
|
||||||
|
@ -106,6 +108,7 @@ private:
|
||||||
AmdGpu::Liverpool* liverpool;
|
AmdGpu::Liverpool* liverpool;
|
||||||
Core::MemoryManager* memory;
|
Core::MemoryManager* memory;
|
||||||
boost::icl::interval_set<VAddr> mapped_ranges;
|
boost::icl::interval_set<VAddr> mapped_ranges;
|
||||||
|
std::shared_mutex mapped_ranges_mutex;
|
||||||
PipelineCache pipeline_cache;
|
PipelineCache pipeline_cache;
|
||||||
|
|
||||||
boost::container::static_vector<
|
boost::container::static_vector<
|
||||||
|
|
Loading…
Add table
Reference in a new issue