diff options
| author | 2023-04-30 17:14:06 +0200 | |
|---|---|---|
| committer | 2023-05-07 23:46:12 +0200 | |
| commit | c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4 (patch) | |
| tree | 0d71092cfad84e47a193917028200e2fc216f5e6 /src/video_core/renderer_vulkan | |
| parent | Merge pull request #10097 from german77/nfp_full (diff) | |
| download | yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.gz yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.tar.xz yuzu-c6cac2ffaad4ac27f35cea25022d9c59c7ecfbf4.zip | |
GPU: Add Reactive flushing
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.cpp | 23 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_rasterizer.h | 1 |
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 d1489fc95..bae4aa611 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.cpp +++ b/src/video_core/renderer_vulkan/vk_rasterizer.cpp | |||
| @@ -502,6 +502,29 @@ bool RasterizerVulkan::MustFlushRegion(VAddr addr, u64 size, VideoCommon::CacheT | |||
| 502 | return false; | 502 | return false; |
| 503 | } | 503 | } |
| 504 | 504 | ||
| 505 | VideoCore::RasterizerDownloadArea RasterizerVulkan::GetFlushArea(VAddr addr, u64 size) { | ||
| 506 | { | ||
| 507 | std::scoped_lock lock{texture_cache.mutex}; | ||
| 508 | auto area = texture_cache.GetFlushArea(addr, size); | ||
| 509 | if (area) { | ||
| 510 | return *area; | ||
| 511 | } | ||
| 512 | } | ||
| 513 | { | ||
| 514 | std::scoped_lock lock{buffer_cache.mutex}; | ||
| 515 | auto area = buffer_cache.GetFlushArea(addr, size); | ||
| 516 | if (area) { | ||
| 517 | return *area; | ||
| 518 | } | ||
| 519 | } | ||
| 520 | VideoCore::RasterizerDownloadArea new_area{ | ||
| 521 | .start_address = Common::AlignDown(addr, Core::Memory::YUZU_PAGESIZE), | ||
| 522 | .end_address = Common::AlignUp(addr + size, Core::Memory::YUZU_PAGESIZE), | ||
| 523 | .preemtive = true, | ||
| 524 | }; | ||
| 525 | return new_area; | ||
| 526 | } | ||
| 527 | |||
| 505 | void RasterizerVulkan::InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType which) { | 528 | void RasterizerVulkan::InvalidateRegion(VAddr addr, u64 size, VideoCommon::CacheType which) { |
| 506 | if (addr == 0 || size == 0) { | 529 | if (addr == 0 || size == 0) { |
| 507 | return; | 530 | return; |
diff --git a/src/video_core/renderer_vulkan/vk_rasterizer.h b/src/video_core/renderer_vulkan/vk_rasterizer.h index 1659fbc13..9bd422850 100644 --- a/src/video_core/renderer_vulkan/vk_rasterizer.h +++ b/src/video_core/renderer_vulkan/vk_rasterizer.h | |||
| @@ -92,6 +92,7 @@ public: | |||
| 92 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; | 92 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; |
| 93 | bool MustFlushRegion(VAddr addr, u64 size, | 93 | bool MustFlushRegion(VAddr addr, u64 size, |
| 94 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; | 94 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; |
| 95 | VideoCore::RasterizerDownloadArea GetFlushArea(VAddr addr, u64 size) override; | ||
| 95 | void InvalidateRegion(VAddr addr, u64 size, | 96 | void InvalidateRegion(VAddr addr, u64 size, |
| 96 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; | 97 | VideoCommon::CacheType which = VideoCommon::CacheType::All) override; |
| 97 | void InnerInvalidation(std::span<const std::pair<VAddr, std::size_t>> sequences) override; | 98 | void InnerInvalidation(std::span<const std::pair<VAddr, std::size_t>> sequences) override; |