@@ -939,17 +939,8 @@ void VKGSRender::emit_geometry(u32 sub_index)
939
939
else if (m_device->get_multidraw_support ())
940
940
{
941
941
const auto subranges = draw_call.get_subranges ();
942
- const auto subranges_count = ::size32 (subranges);
943
- auto [offset, ptr] = m_draw_indirect_count_ring_info.alloc_and_map <4 , VkMultiDrawInfoEXT>(subranges_count);
944
-
945
- auto _ptr = ptr;
946
- for (const auto & range : subranges)
947
- {
948
- _ptr->firstVertex = range.first ;
949
- _ptr->vertexCount = range.count ;
950
- _ptr++;
951
- }
952
- _vkCmdDrawMultiEXT (*m_current_command_buffer, subranges_count, ptr, 1 , 0 , sizeof (VkMultiDrawInfoEXT));
942
+ auto ptr = reinterpret_cast <const VkMultiDrawInfoEXT*>(& subranges.front ().first );
943
+ _vkCmdDrawMultiEXT (*m_current_command_buffer, ::size32 (subranges), ptr, 1 , 0 , sizeof (rsx::draw_range_t ));
953
944
}
954
945
else
955
946
{
@@ -981,21 +972,21 @@ void VKGSRender::emit_geometry(u32 sub_index)
981
972
{
982
973
const auto subranges = draw_call.get_subranges ();
983
974
const auto subranges_count = ::size32 (subranges);
984
- auto [offset, ptr] = m_draw_indirect_count_ring_info. alloc_and_map < 4 , VkMultiDrawIndexedInfoEXT>( subranges_count) ;
975
+ const auto allocation_size = subranges_count * 3 ;
985
976
986
- auto _ptr = ptr;
977
+ m_multidraw_parameters_buffer.resize (allocation_size);
978
+ auto _ptr = m_multidraw_parameters_buffer.data ();
987
979
u32 vertex_offset = 0 ;
980
+
988
981
for (const auto & range : subranges)
989
982
{
990
983
const auto count = get_index_count (draw_call.primitive , range.count );
991
- _ptr->vertexOffset = 0 ;
992
- _ptr->firstIndex = vertex_offset;
993
- _ptr->indexCount = count;
994
-
995
- _ptr++;
984
+ *_ptr++ = 0 ;
985
+ *_ptr++ = vertex_offset;
986
+ *_ptr++ = count;
996
987
vertex_offset += count;
997
988
}
998
- _vkCmdDrawMultiIndexedEXT (*m_current_command_buffer, subranges_count, ptr , 1 , 0 , sizeof (VkMultiDrawIndexedInfoEXT) , nullptr );
989
+ _vkCmdDrawMultiIndexedEXT (*m_current_command_buffer, subranges_count, reinterpret_cast < const VkMultiDrawIndexedInfoEXT*>(_ptr) , 1 , 0 , sizeof (u32) * 3 , nullptr );
999
990
}
1000
991
else
1001
992
{
0 commit comments