diff options
| author | 2020-06-14 00:29:16 -0400 | |
|---|---|---|
| committer | 2020-06-14 00:29:16 -0400 | |
| commit | 92021a344cc2562496a41e2fc4e4090e49e1c6fb (patch) | |
| tree | 02ddce73a3c77c9f6ba72b7ebb36b62de4c0583b /src/video_core/buffer_cache | |
| parent | Merge pull request #4049 from ReinUsesLisp/separate-samplers (diff) | |
| parent | gl_rasterizer: Mark vertex buffers as dirty after buffer cache invalidation (diff) | |
| download | yuzu-92021a344cc2562496a41e2fc4e4090e49e1c6fb.tar.gz yuzu-92021a344cc2562496a41e2fc4e4090e49e1c6fb.tar.xz yuzu-92021a344cc2562496a41e2fc4e4090e49e1c6fb.zip | |
Merge pull request #4064 from ReinUsesLisp/invalidate-buffers
gl_rasterizer: Mark vertex buffers as dirty after buffer cache invalidation
Diffstat (limited to 'src/video_core/buffer_cache')
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index b88fce2cd..77ae34339 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -110,19 +110,23 @@ public: | |||
| 110 | }); | 110 | }); |
| 111 | } | 111 | } |
| 112 | 112 | ||
| 113 | void Map(std::size_t max_size) { | 113 | /// Prepares the buffer cache for data uploading |
| 114 | /// @param max_size Maximum number of bytes that will be uploaded | ||
| 115 | /// @return True when a stream buffer invalidation was required, false otherwise | ||
| 116 | bool Map(std::size_t max_size) { | ||
| 114 | std::lock_guard lock{mutex}; | 117 | std::lock_guard lock{mutex}; |
| 115 | 118 | ||
| 119 | bool invalidated; | ||
| 116 | std::tie(buffer_ptr, buffer_offset_base, invalidated) = stream_buffer->Map(max_size, 4); | 120 | std::tie(buffer_ptr, buffer_offset_base, invalidated) = stream_buffer->Map(max_size, 4); |
| 117 | buffer_offset = buffer_offset_base; | 121 | buffer_offset = buffer_offset_base; |
| 122 | |||
| 123 | return invalidated; | ||
| 118 | } | 124 | } |
| 119 | 125 | ||
| 120 | /// Finishes the upload stream, returns true on bindings invalidation. | 126 | /// Finishes the upload stream |
| 121 | bool Unmap() { | 127 | void Unmap() { |
| 122 | std::lock_guard lock{mutex}; | 128 | std::lock_guard lock{mutex}; |
| 123 | |||
| 124 | stream_buffer->Unmap(buffer_offset - buffer_offset_base); | 129 | stream_buffer->Unmap(buffer_offset - buffer_offset_base); |
| 125 | return std::exchange(invalidated, false); | ||
| 126 | } | 130 | } |
| 127 | 131 | ||
| 128 | void TickFrame() { | 132 | void TickFrame() { |
| @@ -576,8 +580,6 @@ private: | |||
| 576 | std::unique_ptr<StreamBuffer> stream_buffer; | 580 | std::unique_ptr<StreamBuffer> stream_buffer; |
| 577 | BufferType stream_buffer_handle{}; | 581 | BufferType stream_buffer_handle{}; |
| 578 | 582 | ||
| 579 | bool invalidated = false; | ||
| 580 | |||
| 581 | u8* buffer_ptr = nullptr; | 583 | u8* buffer_ptr = nullptr; |
| 582 | u64 buffer_offset = 0; | 584 | u64 buffer_offset = 0; |
| 583 | u64 buffer_offset_base = 0; | 585 | u64 buffer_offset_base = 0; |