From 3f80151a6fa5552727a7aabc206910f3cdc95672 Mon Sep 17 00:00:00 2001 From: nmzik Date: Mon, 14 Sep 2026 11:36:20 +0400 Subject: [PATCH] Respect vertex buffer sizes --- src/graphics/host_gpu/renderer/renderDraw.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/graphics/host_gpu/renderer/renderDraw.cpp b/src/graphics/host_gpu/renderer/renderDraw.cpp index eaf03f80..3d7fe7ff 100644 --- a/src/graphics/host_gpu/renderer/renderDraw.cpp +++ b/src/graphics/host_gpu/renderer/renderDraw.cpp @@ -709,6 +709,7 @@ struct PreparedVertexBuffers { std::array buffers {}; std::array offsets {}; + std::array sizes {}; uint32_t count = 0; }; @@ -793,6 +794,7 @@ static PreparedVertexBuffers AcquireVertexBuffers(CommandBuffer& b prepared.buffers[i] = range->binding.first->Handle(); prepared.offsets[i] = range->binding.second + vertex.addr - range->base_address; + prepared.sizes[i] = std::min(size, range->acquired_end - vertex.addr); SetVulkanObjectNameF( buffer.GetContext().GetGraphics().device, prepared.buffers[i], "Kyty.VertexBuffer[slot={} guest=0x{:016x} size=0x{:x} stride={} records={}]", i, @@ -989,8 +991,9 @@ static void CommitVertexBuffers(vk::CommandBuffer vk_buffer, EXIT_IF(prepared.buffers[i] == nullptr); } if (prepared.count != 0) { - vk_buffer.bindVertexBuffers(0, prepared.count, prepared.buffers.data(), - prepared.offsets.data()); + // Guest descriptor bounds must survive allocation merging in the cache. + vk_buffer.bindVertexBuffers2(0, prepared.count, prepared.buffers.data(), + prepared.offsets.data(), prepared.sizes.data(), nullptr); } }