summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2020-06-08 20:22:31 -0300
committerGravatar ReinUsesLisp2020-06-08 20:22:31 -0300
commit6e122f0b2c3fe6a2cccd15256a04bcd4342c86f7 (patch)
tree852d18e943c3643dc954bb8736bd10eeaa0c2181 /src
parentMerge pull request #4034 from ReinUsesLisp/storage-texels (diff)
downloadyuzu-6e122f0b2c3fe6a2cccd15256a04bcd4342c86f7.tar.gz
yuzu-6e122f0b2c3fe6a2cccd15256a04bcd4342c86f7.tar.xz
yuzu-6e122f0b2c3fe6a2cccd15256a04bcd4342c86f7.zip
buffer_cache: Return stream buffer invalidation in Map instead of Unmap
We have to invalidate whatever cache is being used before uploading the data, hence it makes more sense to return this on Map instead of Unmap.
Diffstat (limited to 'src')
-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;