summaryrefslogtreecommitdiff
path: root/src/video_core/buffer_cache
diff options
context:
space:
mode:
authorGravatar bunnei2020-06-14 00:29:16 -0400
committerGravatar GitHub2020-06-14 00:29:16 -0400
commit92021a344cc2562496a41e2fc4e4090e49e1c6fb (patch)
tree02ddce73a3c77c9f6ba72b7ebb36b62de4c0583b /src/video_core/buffer_cache
parentMerge pull request #4049 from ReinUsesLisp/separate-samplers (diff)
parentgl_rasterizer: Mark vertex buffers as dirty after buffer cache invalidation (diff)
downloadyuzu-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.h16
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;