diff options
| author | 2022-01-29 17:42:28 +0100 | |
|---|---|---|
| committer | 2022-01-29 17:42:28 +0100 | |
| commit | f54280dafd82f83dac03a92ee0bce84e8ba4033e (patch) | |
| tree | a87dc3093b48684020287800da4e3fffcec95567 | |
| parent | Merge pull request #7791 from german77/wall_clock (diff) | |
| download | yuzu-f54280dafd82f83dac03a92ee0bce84e8ba4033e.tar.gz yuzu-f54280dafd82f83dac03a92ee0bce84e8ba4033e.tar.xz yuzu-f54280dafd82f83dac03a92ee0bce84e8ba4033e.zip | |
Inline2Memory: Flush before writting buffer.
| -rw-r--r-- | src/video_core/engines/engine_upload.cpp | 1 | ||||
| -rw-r--r-- | src/video_core/memory_manager.h | 4 |
2 files changed, 3 insertions, 2 deletions
diff --git a/src/video_core/engines/engine_upload.cpp b/src/video_core/engines/engine_upload.cpp index 71d7e1473..9ac0e533c 100644 --- a/src/video_core/engines/engine_upload.cpp +++ b/src/video_core/engines/engine_upload.cpp | |||
| @@ -32,6 +32,7 @@ void State::ProcessData(const u32 data, const bool is_last_call) { | |||
| 32 | } | 32 | } |
| 33 | const GPUVAddr address{regs.dest.Address()}; | 33 | const GPUVAddr address{regs.dest.Address()}; |
| 34 | if (is_linear) { | 34 | if (is_linear) { |
| 35 | memory_manager.FlushRegion(address, copy_size); | ||
| 35 | memory_manager.WriteBlock(address, inner_buffer.data(), copy_size); | 36 | memory_manager.WriteBlock(address, inner_buffer.data(), copy_size); |
| 36 | } else { | 37 | } else { |
| 37 | UNIMPLEMENTED_IF(regs.dest.z != 0); | 38 | UNIMPLEMENTED_IF(regs.dest.z != 0); |
diff --git a/src/video_core/memory_manager.h b/src/video_core/memory_manager.h index 38d8d9d74..61bfe47c7 100644 --- a/src/video_core/memory_manager.h +++ b/src/video_core/memory_manager.h | |||
| @@ -143,6 +143,8 @@ public: | |||
| 143 | [[nodiscard]] GPUVAddr Allocate(std::size_t size, std::size_t align); | 143 | [[nodiscard]] GPUVAddr Allocate(std::size_t size, std::size_t align); |
| 144 | void Unmap(GPUVAddr gpu_addr, std::size_t size); | 144 | void Unmap(GPUVAddr gpu_addr, std::size_t size); |
| 145 | 145 | ||
| 146 | void FlushRegion(GPUVAddr gpu_addr, size_t size) const; | ||
| 147 | |||
| 146 | private: | 148 | private: |
| 147 | [[nodiscard]] PageEntry GetPageEntry(GPUVAddr gpu_addr) const; | 149 | [[nodiscard]] PageEntry GetPageEntry(GPUVAddr gpu_addr) const; |
| 148 | void SetPageEntry(GPUVAddr gpu_addr, PageEntry page_entry, std::size_t size = page_size); | 150 | void SetPageEntry(GPUVAddr gpu_addr, PageEntry page_entry, std::size_t size = page_size); |
| @@ -153,8 +155,6 @@ private: | |||
| 153 | void TryLockPage(PageEntry page_entry, std::size_t size); | 155 | void TryLockPage(PageEntry page_entry, std::size_t size); |
| 154 | void TryUnlockPage(PageEntry page_entry, std::size_t size); | 156 | void TryUnlockPage(PageEntry page_entry, std::size_t size); |
| 155 | 157 | ||
| 156 | void FlushRegion(GPUVAddr gpu_addr, size_t size) const; | ||
| 157 | |||
| 158 | void ReadBlockImpl(GPUVAddr gpu_src_addr, void* dest_buffer, std::size_t size, | 158 | void ReadBlockImpl(GPUVAddr gpu_src_addr, void* dest_buffer, std::size_t size, |
| 159 | bool is_safe) const; | 159 | bool is_safe) const; |
| 160 | void WriteBlockImpl(GPUVAddr gpu_dest_addr, const void* src_buffer, std::size_t size, | 160 | void WriteBlockImpl(GPUVAddr gpu_dest_addr, const void* src_buffer, std::size_t size, |