diff --git a/rpcs3/Emu/RSX/VK/VKDraw.cpp b/rpcs3/Emu/RSX/VK/VKDraw.cpp index c0869ddce6..fc8564cb2a 100644 --- a/rpcs3/Emu/RSX/VK/VKDraw.cpp +++ b/rpcs3/Emu/RSX/VK/VKDraw.cpp @@ -829,6 +829,7 @@ void VKGSRender::emit_geometry(u32 sub_index) { // Need to update descriptors; make a copy for the next draw VkDescriptorSet previous_set = m_current_frame->descriptor_set.value(); + m_current_frame->descriptor_set.flush(); m_current_frame->descriptor_set = allocate_descriptor_set(); rsx::simple_array copy_cmds(binding_table.total_descriptor_bindings); diff --git a/rpcs3/Emu/RSX/VK/vkutils/descriptors.cpp b/rpcs3/Emu/RSX/VK/vkutils/descriptors.cpp index 76b6950414..6c7826d8b1 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/descriptors.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/descriptors.cpp @@ -346,8 +346,10 @@ namespace vk vkUpdateDescriptorSets(*g_render_device, 1, &writer, 0, nullptr); } - void descriptor_set::push(rsx::simple_array& copy_cmd) + void descriptor_set::push(rsx::simple_array& copy_cmd, u32 type_mask) { + m_push_type_mask |= type_mask; + if (m_pending_copies.empty()) [[likely]] { m_pending_copies = std::move(copy_cmd); diff --git a/rpcs3/Emu/RSX/VK/vkutils/descriptors.h b/rpcs3/Emu/RSX/VK/vkutils/descriptors.h index 8ff4080830..19dc46f085 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/descriptors.h +++ b/rpcs3/Emu/RSX/VK/vkutils/descriptors.h @@ -65,7 +65,7 @@ namespace vk void push(const VkDescriptorBufferInfo& buffer_info, VkDescriptorType type, u32 binding); void push(const VkDescriptorImageInfo& image_info, VkDescriptorType type, u32 binding); void push(const VkDescriptorImageInfo* image_info, u32 count, VkDescriptorType type, u32 binding); - void push(rsx::simple_array& copy_cmd); + void push(rsx::simple_array& copy_cmd, u32 type_mask = umax); void bind(VkCommandBuffer cmd, VkPipelineBindPoint bind_point, VkPipelineLayout layout); void bind(const command_buffer& cmd, VkPipelineBindPoint bind_point, VkPipelineLayout layout);