diff options
Diffstat (limited to 'src/video_core/buffer_cache')
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 2442ddfd6..63b3a8205 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -30,7 +30,7 @@ public: | |||
| 30 | using BufferInfo = std::pair<const TBufferType*, u64>; | 30 | using BufferInfo = std::pair<const TBufferType*, u64>; |
| 31 | 31 | ||
| 32 | BufferInfo UploadMemory(GPUVAddr gpu_addr, std::size_t size, std::size_t alignment = 4, | 32 | BufferInfo UploadMemory(GPUVAddr gpu_addr, std::size_t size, std::size_t alignment = 4, |
| 33 | bool is_written = false) { | 33 | bool is_written = false, bool use_fast_cbuf = false) { |
| 34 | std::lock_guard lock{mutex}; | 34 | std::lock_guard lock{mutex}; |
| 35 | 35 | ||
| 36 | auto& memory_manager = system.GPU().MemoryManager(); | 36 | auto& memory_manager = system.GPU().MemoryManager(); |
| @@ -43,9 +43,13 @@ public: | |||
| 43 | // Cache management is a big overhead, so only cache entries with a given size. | 43 | // Cache management is a big overhead, so only cache entries with a given size. |
| 44 | // TODO: Figure out which size is the best for given games. | 44 | // TODO: Figure out which size is the best for given games. |
| 45 | constexpr std::size_t max_stream_size = 0x800; | 45 | constexpr std::size_t max_stream_size = 0x800; |
| 46 | if (size < max_stream_size) { | 46 | if (use_fast_cbuf || size < max_stream_size) { |
| 47 | if (!is_written && !IsRegionWritten(cache_addr, cache_addr + size - 1)) { | 47 | if (!is_written && !IsRegionWritten(cache_addr, cache_addr + size - 1)) { |
| 48 | return StreamBufferUpload(host_ptr, size, alignment); | 48 | if (use_fast_cbuf) { |
| 49 | return ConstBufferUpload(host_ptr, size); | ||
| 50 | } else { | ||
| 51 | return StreamBufferUpload(host_ptr, size, alignment); | ||
| 52 | } | ||
| 49 | } | 53 | } |
| 50 | } | 54 | } |
| 51 | 55 | ||
| @@ -152,6 +156,10 @@ protected: | |||
| 152 | virtual void CopyBlock(const TBuffer& src, const TBuffer& dst, std::size_t src_offset, | 156 | virtual void CopyBlock(const TBuffer& src, const TBuffer& dst, std::size_t src_offset, |
| 153 | std::size_t dst_offset, std::size_t size) = 0; | 157 | std::size_t dst_offset, std::size_t size) = 0; |
| 154 | 158 | ||
| 159 | virtual BufferInfo ConstBufferUpload(const void* raw_pointer, std::size_t size) { | ||
| 160 | return {}; | ||
| 161 | } | ||
| 162 | |||
| 155 | /// Register an object into the cache | 163 | /// Register an object into the cache |
| 156 | void Register(const MapInterval& new_map, bool inherit_written = false) { | 164 | void Register(const MapInterval& new_map, bool inherit_written = false) { |
| 157 | const CacheAddr cache_ptr = new_map->GetStart(); | 165 | const CacheAddr cache_ptr = new_map->GetStart(); |