summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar bunnei2022-01-31 18:08:21 -0700
committerGravatar GitHub2022-01-31 18:08:21 -0700
commit34dc1c8bc2fc7d837787a4e779f354b339b12799 (patch)
tree5bbbdf9b9e67a8374c9b19cb2166d817abe60a9b /src/video_core/renderer_vulkan
parentMerge pull request #7791 from german77/wall_clock (diff)
parentRasterizer: Refactor inlineToMemory. (diff)
downloadyuzu-34dc1c8bc2fc7d837787a4e779f354b339b12799.tar.gz
yuzu-34dc1c8bc2fc7d837787a4e779f354b339b12799.tar.xz
yuzu-34dc1c8bc2fc7d837787a4e779f354b339b12799.zip
Merge pull request #7805 from FernandoS27/rodrigo-failed-me
Inline2Memory: Flush before writing buffer.
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.cpp22
-rw-r--r--src/video_core/renderer_vulkan/vk_rasterizer.h2
2 files changed, 24 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.cpp b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
index fd334a146..2227d9197 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp
@@ -548,6 +548,28 @@ Tegra::Engines::AccelerateDMAInterface& RasterizerVulkan::AccessAccelerateDMA()
548 return accelerate_dma; 548 return accelerate_dma;
549} 549}
550 550
551void RasterizerVulkan::AccelerateInlineToMemory(GPUVAddr address, size_t copy_size,
552 std::span<u8> memory) {
553 auto cpu_addr = gpu_memory.GpuToCpuAddress(address);
554 if (!cpu_addr) [[unlikely]] {
555 gpu_memory.WriteBlock(address, memory.data(), copy_size);
556 return;
557 }
558 gpu_memory.WriteBlockUnsafe(address, memory.data(), copy_size);
559 {
560 std::unique_lock<std::mutex> lock{buffer_cache.mutex};
561 if (!buffer_cache.InlineMemory(*cpu_addr, copy_size, memory)) {
562 buffer_cache.WriteMemory(*cpu_addr, copy_size);
563 }
564 }
565 {
566 std::scoped_lock lock_texture{texture_cache.mutex};
567 texture_cache.WriteMemory(*cpu_addr, copy_size);
568 }
569 pipeline_cache.InvalidateRegion(*cpu_addr, copy_size);
570 query_cache.InvalidateRegion(*cpu_addr, copy_size);
571}
572
551bool RasterizerVulkan::AccelerateDisplay(const Tegra::FramebufferConfig& config, 573bool RasterizerVulkan::AccelerateDisplay(const Tegra::FramebufferConfig& config,
552 VAddr framebuffer_addr, u32 pixel_stride) { 574 VAddr framebuffer_addr, u32 pixel_stride) {
553 if (!framebuffer_addr) { 575 if (!framebuffer_addr) {
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h
index 866827247..5af2e275b 100644
--- a/src/video_core/renderer_vulkan/vk_rasterizer.h
+++ b/src/video_core/renderer_vulkan/vk_rasterizer.h
@@ -99,6 +99,8 @@ public:
99 const Tegra::Engines::Fermi2D::Surface& dst, 99 const Tegra::Engines::Fermi2D::Surface& dst,
100 const Tegra::Engines::Fermi2D::Config& copy_config) override; 100 const Tegra::Engines::Fermi2D::Config& copy_config) override;
101 Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override; 101 Tegra::Engines::AccelerateDMAInterface& AccessAccelerateDMA() override;
102 void AccelerateInlineToMemory(GPUVAddr address, size_t copy_size,
103 std::span<u8> memory) override;
102 bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr, 104 bool AccelerateDisplay(const Tegra::FramebufferConfig& config, VAddr framebuffer_addr,
103 u32 pixel_stride) override; 105 u32 pixel_stride) override;
104 void LoadDiskResources(u64 title_id, std::stop_token stop_loading, 106 void LoadDiskResources(u64 title_id, std::stop_token stop_loading,