diff options
| author | 2023-08-13 23:17:28 -0400 | |
|---|---|---|
| committer | 2023-08-13 23:17:59 -0500 | |
| commit | d1c878fb41324614b4f09026ebb3336432fbb559 (patch) | |
| tree | 42345e00adfddf6b42810ced27a32dec89e9ac20 /src/video_core/renderer_opengl | |
| parent | gl_buffer_cache: Enable async downloads (diff) | |
| download | yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.tar.gz yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.tar.xz yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.zip | |
gl_texture_cache: Enable async downloads
Diffstat (limited to 'src/video_core/renderer_opengl')
5 files changed, 16 insertions, 9 deletions
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp index 9d9c6b9da..d1284e62f 100644 --- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp +++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp | |||
| @@ -151,7 +151,7 @@ StagingBufferMap BufferCacheRuntime::DownloadStagingBuffer(size_t size, bool def | |||
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | void BufferCacheRuntime::FreeDeferredStagingBuffer(StagingBufferMap& buffer) { | 153 | void BufferCacheRuntime::FreeDeferredStagingBuffer(StagingBufferMap& buffer) { |
| 154 | staging_buffer_pool.FreeDeferredStagingBuffer(buffer.index); | 154 | staging_buffer_pool.FreeDeferredStagingBuffer(buffer); |
| 155 | } | 155 | } |
| 156 | 156 | ||
| 157 | u64 BufferCacheRuntime::GetDeviceMemoryUsage() const { | 157 | u64 BufferCacheRuntime::GetDeviceMemoryUsage() const { |
diff --git a/src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp b/src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp index edd0746dc..cadad6507 100644 --- a/src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp +++ b/src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp | |||
| @@ -45,6 +45,7 @@ StagingBufferMap StagingBuffers::RequestMap(size_t requested_size, bool insert_f | |||
| 45 | } | 45 | } |
| 46 | 46 | ||
| 47 | void StagingBuffers::FreeDeferredStagingBuffer(size_t index) { | 47 | void StagingBuffers::FreeDeferredStagingBuffer(size_t index) { |
| 48 | ASSERT(allocs[index].deferred); | ||
| 48 | allocs[index].deferred = false; | 49 | allocs[index].deferred = false; |
| 49 | } | 50 | } |
| 50 | 51 | ||
| @@ -152,8 +153,8 @@ StagingBufferMap StagingBufferPool::RequestDownloadBuffer(size_t size, bool defe | |||
| 152 | return download_buffers.RequestMap(size, false, deferred); | 153 | return download_buffers.RequestMap(size, false, deferred); |
| 153 | } | 154 | } |
| 154 | 155 | ||
| 155 | void StagingBufferPool::FreeDeferredStagingBuffer(size_t index) { | 156 | void StagingBufferPool::FreeDeferredStagingBuffer(StagingBufferMap& buffer) { |
| 156 | download_buffers.FreeDeferredStagingBuffer(index); | 157 | download_buffers.FreeDeferredStagingBuffer(buffer.index); |
| 157 | } | 158 | } |
| 158 | 159 | ||
| 159 | } // namespace OpenGL | 160 | } // namespace OpenGL |
diff --git a/src/video_core/renderer_opengl/gl_staging_buffer_pool.h b/src/video_core/renderer_opengl/gl_staging_buffer_pool.h index 598ddc172..07a56b4d2 100644 --- a/src/video_core/renderer_opengl/gl_staging_buffer_pool.h +++ b/src/video_core/renderer_opengl/gl_staging_buffer_pool.h | |||
| @@ -93,7 +93,7 @@ public: | |||
| 93 | 93 | ||
| 94 | StagingBufferMap RequestUploadBuffer(size_t size); | 94 | StagingBufferMap RequestUploadBuffer(size_t size); |
| 95 | StagingBufferMap RequestDownloadBuffer(size_t size, bool deferred = false); | 95 | StagingBufferMap RequestDownloadBuffer(size_t size, bool deferred = false); |
| 96 | void FreeDeferredStagingBuffer(size_t index); | 96 | void FreeDeferredStagingBuffer(StagingBufferMap& buffer); |
| 97 | 97 | ||
| 98 | private: | 98 | private: |
| 99 | StagingBuffers upload_buffers{GL_MAP_WRITE_BIT, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT}; | 99 | StagingBuffers upload_buffers{GL_MAP_WRITE_BIT, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT}; |
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp index 512eef575..66a5ca03e 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.cpp +++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp | |||
| @@ -557,8 +557,12 @@ StagingBufferMap TextureCacheRuntime::UploadStagingBuffer(size_t size) { | |||
| 557 | return staging_buffer_pool.RequestUploadBuffer(size); | 557 | return staging_buffer_pool.RequestUploadBuffer(size); |
| 558 | } | 558 | } |
| 559 | 559 | ||
| 560 | StagingBufferMap TextureCacheRuntime::DownloadStagingBuffer(size_t size) { | 560 | StagingBufferMap TextureCacheRuntime::DownloadStagingBuffer(size_t size, bool deferred) { |
| 561 | return staging_buffer_pool.RequestDownloadBuffer(size); | 561 | return staging_buffer_pool.RequestDownloadBuffer(size, deferred); |
| 562 | } | ||
| 563 | |||
| 564 | void TextureCacheRuntime::FreeDeferredStagingBuffer(StagingBufferMap& buffer) { | ||
| 565 | staging_buffer_pool.FreeDeferredStagingBuffer(buffer); | ||
| 562 | } | 566 | } |
| 563 | 567 | ||
| 564 | u64 TextureCacheRuntime::GetDeviceMemoryUsage() const { | 568 | u64 TextureCacheRuntime::GetDeviceMemoryUsage() const { |
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.h b/src/video_core/renderer_opengl/gl_texture_cache.h index e71b87e99..34870c81f 100644 --- a/src/video_core/renderer_opengl/gl_texture_cache.h +++ b/src/video_core/renderer_opengl/gl_texture_cache.h | |||
| @@ -74,7 +74,9 @@ public: | |||
| 74 | 74 | ||
| 75 | StagingBufferMap UploadStagingBuffer(size_t size); | 75 | StagingBufferMap UploadStagingBuffer(size_t size); |
| 76 | 76 | ||
| 77 | StagingBufferMap DownloadStagingBuffer(size_t size); | 77 | StagingBufferMap DownloadStagingBuffer(size_t size, bool deferred = false); |
| 78 | |||
| 79 | void FreeDeferredStagingBuffer(StagingBufferMap& buffer); | ||
| 78 | 80 | ||
| 79 | u64 GetDeviceLocalMemory() const { | 81 | u64 GetDeviceLocalMemory() const { |
| 80 | return device_access_memory; | 82 | return device_access_memory; |
| @@ -359,7 +361,7 @@ struct TextureCacheParams { | |||
| 359 | static constexpr bool FRAMEBUFFER_BLITS = true; | 361 | static constexpr bool FRAMEBUFFER_BLITS = true; |
| 360 | static constexpr bool HAS_EMULATED_COPIES = true; | 362 | static constexpr bool HAS_EMULATED_COPIES = true; |
| 361 | static constexpr bool HAS_DEVICE_MEMORY_INFO = true; | 363 | static constexpr bool HAS_DEVICE_MEMORY_INFO = true; |
| 362 | static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = false; | 364 | static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = true; |
| 363 | 365 | ||
| 364 | using Runtime = OpenGL::TextureCacheRuntime; | 366 | using Runtime = OpenGL::TextureCacheRuntime; |
| 365 | using Image = OpenGL::Image; | 367 | using Image = OpenGL::Image; |
| @@ -367,7 +369,7 @@ struct TextureCacheParams { | |||
| 367 | using ImageView = OpenGL::ImageView; | 369 | using ImageView = OpenGL::ImageView; |
| 368 | using Sampler = OpenGL::Sampler; | 370 | using Sampler = OpenGL::Sampler; |
| 369 | using Framebuffer = OpenGL::Framebuffer; | 371 | using Framebuffer = OpenGL::Framebuffer; |
| 370 | using AsyncBuffer = u32; | 372 | using AsyncBuffer = OpenGL::StagingBufferMap; |
| 371 | using BufferType = GLuint; | 373 | using BufferType = GLuint; |
| 372 | }; | 374 | }; |
| 373 | 375 | ||