diff options
| author | néo Luigi <85024393+neoluigi4123@users.noreply.github.com> | 2026-10-31 20:08:24 +0100 |
|---|---|---|
| committer | kraibse <33869366+kraibse@users.noreply.github.com> | 2026-10-31 20:49:14 +0100 |
| commit | 41a81ab5e3d88b53b634ed765385874728634e9f (patch) | |
| tree | 86ee664b23bd519b12d150943bb94c1881023967 /src/video_core/renderer_vulkan/vk_rasterizer.cpp | |
| parent | c08864b3fed3b6c70418af0e1305395459e266c8 (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.cpp | 7 |
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), |
