diff options
| author | 2022-02-09 15:00:05 +0100 | |
|---|---|---|
| committer | 2023-01-01 16:43:57 -0500 | |
| commit | a5a94f52ffcbf3119d272a9369021a213ea6dad2 (patch) | |
| tree | ba6d42b142894d0f3f0ac34fb6ce491442bae8fd /src/video_core/buffer_cache | |
| parent | Merge pull request #9538 from merryhime/char-concat (diff) | |
| download | yuzu-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.h | 22 |
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 | ||
| 793 | template <class P> | 796 | template <class P> |
| 797 | std::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 | |||
| 815 | template <class P> | ||
| 794 | void BufferCache<P>::FlushCachedWrites() { | 816 | void 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(); |