summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar Fernando Sahmkow2022-12-28 09:32:31 -0500
committerGravatar Fernando Sahmkow2023-01-03 22:52:15 -0500
commit03ccd8bf432e8b2c945b68f00e8fa88f67388098 (patch)
tree446afdee8cfc6f5ec126bbdae7dbbe23b05d8550 /src/video_core/renderer_vulkan
parentVulkan: Update blacklisting to latest driver versions. (diff)
downloadyuzu-03ccd8bf432e8b2c945b68f00e8fa88f67388098.tar.gz
yuzu-03ccd8bf432e8b2c945b68f00e8fa88f67388098.tar.xz
yuzu-03ccd8bf432e8b2c945b68f00e8fa88f67388098.zip
Texture Cache: Implement async texture downloads.
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.cpp8
-rw-r--r--src/video_core/renderer_vulkan/vk_texture_cache.h6
2 files changed, 11 insertions, 3 deletions
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
index a65bbeb1c..d39372ec4 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp
@@ -812,8 +812,12 @@ StagingBufferRef TextureCacheRuntime::UploadStagingBuffer(size_t size) {
812 return staging_buffer_pool.Request(size, MemoryUsage::Upload); 812 return staging_buffer_pool.Request(size, MemoryUsage::Upload);
813} 813}
814 814
815StagingBufferRef TextureCacheRuntime::DownloadStagingBuffer(size_t size) { 815StagingBufferRef TextureCacheRuntime::DownloadStagingBuffer(size_t size, bool deferred) {
816 return staging_buffer_pool.Request(size, MemoryUsage::Download); 816 return staging_buffer_pool.Request(size, MemoryUsage::Download, deferred);
817}
818
819void TextureCacheRuntime::FreeDeferredStagingBuffer(StagingBufferRef& ref) {
820 staging_buffer_pool.FreeDeferred(ref);
817} 821}
818 822
819bool TextureCacheRuntime::ShouldReinterpret(Image& dst, Image& src) { 823bool TextureCacheRuntime::ShouldReinterpret(Image& dst, Image& src) {
diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.h b/src/video_core/renderer_vulkan/vk_texture_cache.h
index 7ec0df134..1f27a3589 100644
--- a/src/video_core/renderer_vulkan/vk_texture_cache.h
+++ b/src/video_core/renderer_vulkan/vk_texture_cache.h
@@ -51,7 +51,9 @@ public:
51 51
52 StagingBufferRef UploadStagingBuffer(size_t size); 52 StagingBufferRef UploadStagingBuffer(size_t size);
53 53
54 StagingBufferRef DownloadStagingBuffer(size_t size); 54 StagingBufferRef DownloadStagingBuffer(size_t size, bool deferred = false);
55
56 void FreeDeferredStagingBuffer(StagingBufferRef& ref);
55 57
56 void TickFrame(); 58 void TickFrame();
57 59
@@ -347,6 +349,7 @@ struct TextureCacheParams {
347 static constexpr bool FRAMEBUFFER_BLITS = false; 349 static constexpr bool FRAMEBUFFER_BLITS = false;
348 static constexpr bool HAS_EMULATED_COPIES = false; 350 static constexpr bool HAS_EMULATED_COPIES = false;
349 static constexpr bool HAS_DEVICE_MEMORY_INFO = true; 351 static constexpr bool HAS_DEVICE_MEMORY_INFO = true;
352 static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = true;
350 353
351 using Runtime = Vulkan::TextureCacheRuntime; 354 using Runtime = Vulkan::TextureCacheRuntime;
352 using Image = Vulkan::Image; 355 using Image = Vulkan::Image;
@@ -354,6 +357,7 @@ struct TextureCacheParams {
354 using ImageView = Vulkan::ImageView; 357 using ImageView = Vulkan::ImageView;
355 using Sampler = Vulkan::Sampler; 358 using Sampler = Vulkan::Sampler;
356 using Framebuffer = Vulkan::Framebuffer; 359 using Framebuffer = Vulkan::Framebuffer;
360 using AsyncBuffer = Vulkan::StagingBufferRef;
357}; 361};
358 362
359using TextureCache = VideoCommon::TextureCache<TextureCacheParams>; 363using TextureCache = VideoCommon::TextureCache<TextureCacheParams>;