diff --git a/rpcs3/Emu/RSX/VK/VKDraw.cpp b/rpcs3/Emu/RSX/VK/VKDraw.cpp index b8730af2f0..bf919daddb 100644 --- a/rpcs3/Emu/RSX/VK/VKDraw.cpp +++ b/rpcs3/Emu/RSX/VK/VKDraw.cpp @@ -972,21 +972,23 @@ void VKGSRender::emit_geometry(u32 sub_index) { const auto subranges = draw_call.get_subranges(); const auto subranges_count = ::size32(subranges); - const auto allocation_size = subranges_count * 3; + const auto allocation_size = subranges_count * sizeof(VkMultiDrawIndexedInfoEXT); m_multidraw_parameters_buffer.resize(allocation_size); - auto _ptr = m_multidraw_parameters_buffer.data(); + auto _ptr = utils::bless(m_multidraw_parameters_buffer.data()); u32 vertex_offset = 0; for (const auto& range : subranges) { const auto count = get_index_count(draw_call.primitive, range.count); - *_ptr++ = 0; - *_ptr++ = vertex_offset; - *_ptr++ = count; + _ptr->firstIndex = vertex_offset; + _ptr->indexCount = count; + _ptr->vertexOffset = 0; + + _ptr++; vertex_offset += count; } - _vkCmdDrawMultiIndexedEXT(*m_current_command_buffer, subranges_count, utils::bless(_ptr), 1, 0, sizeof(u32) * 3, nullptr); + _vkCmdDrawMultiIndexedEXT(*m_current_command_buffer, subranges_count, _ptr, 1, 0, sizeof(u32) * 3, nullptr); } else { diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.h b/rpcs3/Emu/RSX/VK/VKGSRender.h index 2fe1314f13..f37c0d411b 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.h +++ b/rpcs3/Emu/RSX/VK/VKGSRender.h @@ -147,7 +147,7 @@ private: VkDescriptorBufferInfo m_vertex_instructions_buffer_info {}; VkDescriptorBufferInfo m_fragment_instructions_buffer_info {}; - rsx::simple_array m_multidraw_parameters_buffer; + rsx::simple_array m_multidraw_parameters_buffer; u64 m_xform_constants_dynamic_offset = 0; // We manage transform_constants dynamic offset manually to alleviate performance penalty of doing a hot-patch of constants. std::array frame_context_storage;