summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar Liam2022-12-06 21:43:14 -0500
committerGravatar Liam2023-01-04 22:14:01 -0500
commit66ae79de133bfe4d6f02451136aa87aef52efc80 (patch)
tree85347da97ffd6e114e291f2d26a273afa4451742 /src/video_core/renderer_vulkan
parentMerge pull request #9501 from FernandoS27/yfc-rel-2 (diff)
downloadyuzu-66ae79de133bfe4d6f02451136aa87aef52efc80.tar.gz
yuzu-66ae79de133bfe4d6f02451136aa87aef52efc80.tar.xz
yuzu-66ae79de133bfe4d6f02451136aa87aef52efc80.zip
renderer_vulkan: implement fallback path for null descriptors
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.cpp11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
index 487d8b416..b0153a502 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
@@ -336,6 +336,9 @@ void BufferCacheRuntime::Finish() {
336 336
337void BufferCacheRuntime::CopyBuffer(VkBuffer dst_buffer, VkBuffer src_buffer, 337void BufferCacheRuntime::CopyBuffer(VkBuffer dst_buffer, VkBuffer src_buffer,
338 std::span<const VideoCommon::BufferCopy> copies, bool barrier) { 338 std::span<const VideoCommon::BufferCopy> copies, bool barrier) {
339 if (dst_buffer == VK_NULL_HANDLE || src_buffer == VK_NULL_HANDLE) {
340 return;
341 }
339 static constexpr VkMemoryBarrier READ_BARRIER{ 342 static constexpr VkMemoryBarrier READ_BARRIER{
340 .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, 343 .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
341 .pNext = nullptr, 344 .pNext = nullptr,
@@ -394,6 +397,9 @@ void BufferCacheRuntime::PostCopyBarrier() {
394} 397}
395 398
396void BufferCacheRuntime::ClearBuffer(VkBuffer dest_buffer, u32 offset, size_t size, u32 value) { 399void BufferCacheRuntime::ClearBuffer(VkBuffer dest_buffer, u32 offset, size_t size, u32 value) {
400 if (dest_buffer == VK_NULL_HANDLE) {
401 return;
402 }
397 static constexpr VkMemoryBarrier READ_BARRIER{ 403 static constexpr VkMemoryBarrier READ_BARRIER{
398 .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER, 404 .sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER,
399 .pNext = nullptr, 405 .pNext = nullptr,
@@ -473,6 +479,11 @@ void BufferCacheRuntime::BindVertexBuffer(u32 index, VkBuffer buffer, u32 offset
473 cmdbuf.BindVertexBuffers2EXT(index, 1, &buffer, &vk_offset, &vk_size, &vk_stride); 479 cmdbuf.BindVertexBuffers2EXT(index, 1, &buffer, &vk_offset, &vk_size, &vk_stride);
474 }); 480 });
475 } else { 481 } else {
482 if (!device.HasNullDescriptor() && buffer == VK_NULL_HANDLE) {
483 ReserveNullBuffer();
484 buffer = *null_buffer;
485 offset = 0;
486 }
476 scheduler.Record([index, buffer, offset](vk::CommandBuffer cmdbuf) { 487 scheduler.Record([index, buffer, offset](vk::CommandBuffer cmdbuf) {
477 cmdbuf.BindVertexBuffer(index, buffer, offset); 488 cmdbuf.BindVertexBuffer(index, buffer, offset);
478 }); 489 });