summaryrefslogtreecommitdiff
path: root/src/video_core/buffer_cache
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2022-02-09 15:00:05 +0100
committerGravatar Fernando Sahmkow2023-01-01 16:43:57 -0500
commita5a94f52ffcbf3119d272a9369021a213ea6dad2 (patch)
treeba6d42b142894d0f3f0ac34fb6ce491442bae8fd /src/video_core/buffer_cache
parentMerge pull request #9538 from merryhime/char-concat (diff)
downloadyuzu-a5a94f52ffcbf3119d272a9369021a213ea6dad2.tar.gz
yuzu-a5a94f52ffcbf3119d272a9369021a213ea6dad2.tar.xz
yuzu-a5a94f52ffcbf3119d272a9369021a213ea6dad2.zip
MacroHLE: Add MultidrawIndirect HLE Macro.
Diffstat (limited to 'src/video_core/buffer_cache')
-rw-r--r--src/video_core/buffer_cache/buffer_cache.h22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h
index f1c60d1f3..99abe0edf 100644
--- a/src/video_core/buffer_cache/buffer_cache.h
+++ b/src/video_core/buffer_cache/buffer_cache.h
@@ -170,6 +170,9 @@ public:
170 void BindComputeTextureBuffer(size_t tbo_index, GPUVAddr gpu_addr, u32 size, PixelFormat format, 170 void BindComputeTextureBuffer(size_t tbo_index, GPUVAddr gpu_addr, u32 size, PixelFormat format,
171 bool is_written, bool is_image); 171 bool is_written, bool is_image);
172 172
173 [[nodiscard]] std::pair<Buffer*, u32> ObtainBuffer(GPUVAddr gpu_addr, u32 size,
174 bool synchronize, bool mark_as_written);
175
173 void FlushCachedWrites(); 176 void FlushCachedWrites();
174 177
175 /// Return true when there are uncommitted buffers to be downloaded 178 /// Return true when there are uncommitted buffers to be downloaded
@@ -791,6 +794,25 @@ void BufferCache<P>::BindComputeTextureBuffer(size_t tbo_index, GPUVAddr gpu_add
791} 794}
792 795
793template <class P> 796template <class P>
797std::pair<typename P::Buffer*, u32> BufferCache<P>::ObtainBuffer(GPUVAddr gpu_addr, u32 size,
798 bool synchronize,
799 bool mark_as_written) {
800 const std::optional<VAddr> cpu_addr = gpu_memory->GpuToCpuAddress(gpu_addr);
801 if (!cpu_addr) {
802 return {&slot_buffers[NULL_BUFFER_ID], 0};
803 }
804 const BufferId buffer_id = FindBuffer(*cpu_addr, size);
805 Buffer& buffer = slot_buffers[buffer_id];
806 if (synchronize) {
807 SynchronizeBuffer(buffer, *cpu_addr, size);
808 }
809 if (mark_as_written) {
810 MarkWrittenBuffer(buffer_id, *cpu_addr, size);
811 }
812 return {&buffer, buffer.Offset(*cpu_addr)};
813}
814
815template <class P>
794void BufferCache<P>::FlushCachedWrites() { 816void BufferCache<P>::FlushCachedWrites() {
795 for (const BufferId buffer_id : cached_write_buffer_ids) { 817 for (const BufferId buffer_id : cached_write_buffer_ids) {
796 slot_buffers[buffer_id].FlushCachedWrites(); 818 slot_buffers[buffer_id].FlushCachedWrites();