diff options
author | Fernando S <fsahmkow27@gmail.com> | 2023-12-20 18:44:47 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-12-20 18:44:47 +0100 |
commit | 234867b84deb52073d4509084d0d7f6ee44a9b23 (patch) | |
tree | 5cf36e56bade9a657f878a2423d323f787b0b5bf /src/video_core/renderer_vulkan | |
parent | Merge pull request #12411 from ameerj/gl-nv-tfb-fixups (diff) | |
parent | renderer_vulkan: work around turnip binding bug in a610 (diff) | |
download | yuzu-234867b84deb52073d4509084d0d7f6ee44a9b23.tar yuzu-234867b84deb52073d4509084d0d7f6ee44a9b23.tar.gz yuzu-234867b84deb52073d4509084d0d7f6ee44a9b23.tar.bz2 yuzu-234867b84deb52073d4509084d0d7f6ee44a9b23.tar.lz yuzu-234867b84deb52073d4509084d0d7f6ee44a9b23.tar.xz yuzu-234867b84deb52073d4509084d0d7f6ee44a9b23.tar.zst yuzu-234867b84deb52073d4509084d0d7f6ee44a9b23.zip |
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r-- | src/video_core/renderer_vulkan/vk_buffer_cache.cpp | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index 5958f52f7..2267069e7 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp @@ -563,22 +563,27 @@ void BufferCacheRuntime::BindVertexBuffers(VideoCommon::HostBindings<Buffer>& bi } buffer_handles.push_back(handle); } + const u32 device_max = device.GetMaxVertexInputBindings(); + const u32 min_binding = std::min(bindings.min_index, device_max); + const u32 max_binding = std::min(bindings.max_index, device_max); + const u32 binding_count = max_binding - min_binding; + if (binding_count == 0) { + return; + } if (device.IsExtExtendedDynamicStateSupported()) { - scheduler.Record([this, bindings_ = std::move(bindings), - buffer_handles_ = std::move(buffer_handles)](vk::CommandBuffer cmdbuf) { - cmdbuf.BindVertexBuffers2EXT(bindings_.min_index, - std::min(bindings_.max_index - bindings_.min_index, - device.GetMaxVertexInputBindings()), - buffer_handles_.data(), bindings_.offsets.data(), - bindings_.sizes.data(), bindings_.strides.data()); + scheduler.Record([bindings_ = std::move(bindings), + buffer_handles_ = std::move(buffer_handles), + binding_count](vk::CommandBuffer cmdbuf) { + cmdbuf.BindVertexBuffers2EXT(bindings_.min_index, binding_count, buffer_handles_.data(), + bindings_.offsets.data(), bindings_.sizes.data(), + bindings_.strides.data()); }); } else { - scheduler.Record([this, bindings_ = std::move(bindings), - buffer_handles_ = std::move(buffer_handles)](vk::CommandBuffer cmdbuf) { - cmdbuf.BindVertexBuffers(bindings_.min_index, - std::min(bindings_.max_index - bindings_.min_index, - device.GetMaxVertexInputBindings()), - buffer_handles_.data(), bindings_.offsets.data()); + scheduler.Record([bindings_ = std::move(bindings), + buffer_handles_ = std::move(buffer_handles), + binding_count](vk::CommandBuffer cmdbuf) { + cmdbuf.BindVertexBuffers(bindings_.min_index, binding_count, buffer_handles_.data(), + bindings_.offsets.data()); }); } } |