summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-01-17 03:16:15 -0300
committerGravatar ReinUsesLisp2021-02-13 02:17:24 -0300
commita02b4e1df662dcc2d2edd7712539eabf2eef5d89 (patch)
tree6311228f312d4d22a9776587a0bd8af5bbeff328 /src/video_core/renderer_vulkan
parentvk_staging_buffer_pool: Add stream buffer for small uploads (diff)
downloadyuzu-a02b4e1df662dcc2d2edd7712539eabf2eef5d89.tar.gz
yuzu-a02b4e1df662dcc2d2edd7712539eabf2eef5d89.tar.xz
yuzu-a02b4e1df662dcc2d2edd7712539eabf2eef5d89.zip
buffer_cache: Skip cache on small uploads on Vulkan
Ports from OpenGL the optimization to skip small 3D uniform buffer uploads. This will take advantage of the previously introduced stream buffer. Fixes instances where the staging buffer offset was being ignored.
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.h7
-rw-r--r--src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp3
2 files changed, 9 insertions, 1 deletions
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h
index d232e1f2d..7ff7e0d55 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.h
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h
@@ -69,6 +69,13 @@ public:
69 69
70 void BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size); 70 void BindTransformFeedbackBuffer(u32 index, VkBuffer buffer, u32 offset, u32 size);
71 71
72 std::span<u8> BindMappedUniformBuffer([[maybe_unused]] size_t stage,
73 [[maybe_unused]] u32 binding_index, u32 size) {
74 const StagingBufferRef ref = staging_pool.Request(size, MemoryUsage::Upload);
75 BindBuffer(ref.buffer, static_cast<u32>(ref.offset), size);
76 return ref.mapped_span;
77 }
78
72 void BindUniformBuffer(VkBuffer buffer, u32 offset, u32 size) { 79 void BindUniformBuffer(VkBuffer buffer, u32 offset, u32 size) {
73 BindBuffer(buffer, offset, size); 80 BindBuffer(buffer, offset, size);
74 } 81 }
diff --git a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
index 275d740b8..bc71202e2 100644
--- a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
+++ b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
@@ -86,7 +86,8 @@ StagingBufferPool::StagingBufferPool(const Device& device_, MemoryAllocator& mem
86 .pNext = nullptr, 86 .pNext = nullptr,
87 .flags = 0, 87 .flags = 0,
88 .size = STREAM_BUFFER_SIZE, 88 .size = STREAM_BUFFER_SIZE,
89 .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT, 89 .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
90 VK_BUFFER_USAGE_INDEX_BUFFER_BIT,
90 .sharingMode = VK_SHARING_MODE_EXCLUSIVE, 91 .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
91 .queueFamilyIndexCount = 0, 92 .queueFamilyIndexCount = 0,
92 .pQueueFamilyIndices = nullptr, 93 .pQueueFamilyIndices = nullptr,