diff --git a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp index 87eb55b3f7..69e8b4509f 100644 --- a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp +++ b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp @@ -129,7 +129,7 @@ namespace vk return std::exchange(m_sync_label, nullptr); } - void AsyncTaskScheduler::flush(VkSemaphore wait_semaphore, VkPipelineStageFlags wait_dst_stage_mask) + void AsyncTaskScheduler::flush(VkBool32 force_flush, VkSemaphore wait_semaphore, VkPipelineStageFlags wait_dst_stage_mask) { if (!m_current_cb) { @@ -143,7 +143,7 @@ namespace vk } m_current_cb->end(); - m_current_cb->submit(get_current_renderer()->get_transfer_queue(), wait_semaphore, VK_NULL_HANDLE, nullptr, wait_dst_stage_mask, VK_FALSE); + m_current_cb->submit(get_current_renderer()->get_transfer_queue(), wait_semaphore, VK_NULL_HANDLE, nullptr, wait_dst_stage_mask, force_flush); m_last_used_cb = m_current_cb; m_current_cb = nullptr; diff --git a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.h b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.h index 6a77d723d8..e01cff797c 100644 --- a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.h +++ b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.h @@ -48,7 +48,7 @@ namespace vk command_buffer* get_current(); event* get_primary_sync_label(); - void flush(VkSemaphore wait_semaphore = VK_NULL_HANDLE, VkPipelineStageFlags wait_dst_stage_mask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT); + void flush(VkBool32 force_flush, VkSemaphore wait_semaphore = VK_NULL_HANDLE, VkPipelineStageFlags wait_dst_stage_mask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT); void kill(); // Thread entry-point diff --git a/rpcs3/Emu/RSX/VK/VKDMA.cpp b/rpcs3/Emu/RSX/VK/VKDMA.cpp index 7570bb902b..18f1127639 100644 --- a/rpcs3/Emu/RSX/VK/VKDMA.cpp +++ b/rpcs3/Emu/RSX/VK/VKDMA.cpp @@ -263,7 +263,7 @@ namespace vk if (vendor == driver_vendor::NVIDIA) { allow_host_buffers = (chip != chip_class::NV_mobile_kepler) ? - rsx::get_location(base_address) == CELL_GCM_LOCATION_LOCAL : + test_host_pointer(base_address, expected_length) : false; } else diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index b84b30fe44..06ac388f8a 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -1939,7 +1939,7 @@ void VKGSRender::close_and_submit_command_buffer(vk::fence* pFence, VkSemaphore const VkBool32 force_flush = !sync_success; // Flush any asynchronously scheduled jobs - g_fxo->get()->flush(); + g_fxo->get()->flush(force_flush); if (vk::test_status_interrupt(vk::heap_dirty)) { diff --git a/rpcs3/Emu/RSX/VK/VKTextureCache.h b/rpcs3/Emu/RSX/VK/VKTextureCache.h index 15cb9e77e5..b64680671a 100644 --- a/rpcs3/Emu/RSX/VK/VKTextureCache.h +++ b/rpcs3/Emu/RSX/VK/VKTextureCache.h @@ -936,7 +936,7 @@ namespace vk } vk::upload_image(cmd, image, subresource_layout, gcm_format, input_swizzled, mipmaps, image->aspect(), - *m_texture_upload_heap, upload_heap_align_default, initialize_image_layout | upload_contents_inline); + *m_texture_upload_heap, upload_heap_align_default, initialize_image_layout | upload_contents_async); vk::leave_uninterruptible(); diff --git a/rpcs3/Emu/RSX/VK/vkutils/image.cpp b/rpcs3/Emu/RSX/VK/vkutils/image.cpp index 0cd9c8c9c8..5360bbd9c5 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/image.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/image.cpp @@ -203,7 +203,7 @@ namespace vk u32 dst_queue = new_queue_family; if (current_queue_family == VK_QUEUE_FAMILY_IGNORED) - { + { // Implicit acquisition dst_queue = VK_QUEUE_FAMILY_IGNORED; }