aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan/vk_rasterizer.cpp
diff options
context:
space:
mode:
authornéo Luigi <85024393+neoluigi4123@users.noreply.github.com>2026-10-31 20:08:24 +0100
committerkraibse <33869366+kraibse@users.noreply.github.com>2026-10-31 20:49:14 +0100
commit41a81ab5e3d88b53b634ed765385874728634e9f (patch)
tree86ee664b23bd519b12d150943bb94c1881023967 /src/video_core/renderer_vulkan/vk_rasterizer.cpp
parentc08864b3fed3b6c70418af0e1305395459e266c8 (diff)
Gpu buffer readback to cpu. Fixing visible glitches such as missing collision on some object, but can extend to more.
Assisted-by: Claude Opus 5.5 (debugging & implementation)
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_rasterizer.cpp')
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index 0826820714..cb31a0e7e4 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -1006,6 +1006,13 @@ VideoCore::RasterizerDownloadArea RasterizerVulkan::GetFlushArea(DAddr addr, u64
return *area;
}
}
+ if (buffer_cache.FlushesOnCpuRead()) {
+ std::scoped_lock lock{buffer_cache.mutex};
+ auto area = buffer_cache.GetFlushArea(addr, size);
+ if (area) {
+ return *area;
+ }
+ }
VideoCore::RasterizerDownloadArea new_area{
.start_address = Common::AlignDown(addr, Core::DEVICE_PAGESIZE),
.end_address = Common::AlignUp(addr + size, Core::DEVICE_PAGESIZE),