1
0
mirror of https://github.com/RPCS3/rpcs3.git synced 2024-11-26 04:32:35 +01:00

vk: Ignore queue transfer stuff when using 'fast' mode

This commit is contained in:
kd-11 2022-02-11 21:22:50 +03:00 committed by kd-11
parent 44cc254620
commit c8ad8b18bb

View File

@ -811,7 +811,8 @@ namespace vk
const vk::command_buffer* pcmd = nullptr; const vk::command_buffer* pcmd = nullptr;
if (flags & image_upload_options::upload_contents_async) if (flags & image_upload_options::upload_contents_async)
{ {
auto async_cmd = g_fxo->get<AsyncTaskScheduler>().get_current(); auto& async_scheduler = g_fxo->get<AsyncTaskScheduler>();
auto async_cmd = async_scheduler.get_current();
async_cmd->begin(); async_cmd->begin();
pcmd = async_cmd; pcmd = async_cmd;
@ -819,6 +820,20 @@ namespace vk
{ {
flags |= image_upload_options::initialize_image_layout; flags |= image_upload_options::initialize_image_layout;
} }
// Queue transfer stuff. Must release from primary if owned and acquire in secondary.
// Ignore queue transfers when running in the hacky "fast" mode. We're already violating spec there.
if (dst_image->current_layout != VK_IMAGE_LAYOUT_UNDEFINED && async_scheduler.is_host_mode())
{
// Release barrier
dst_image->queue_release(primary_cb, pcmd->get_queue_family(), dst_image->current_layout);
// Acquire barrier. This is not needed if we're going to be changing layouts later anyway (implicit acquire)
if (!(flags & image_upload_options::initialize_image_layout))
{
dst_image->queue_acquire(*pcmd, dst_image->current_layout);
}
}
} }
else else
{ {
@ -832,21 +847,10 @@ namespace vk
ensure(pcmd); ensure(pcmd);
// Queue transfer stuff. Must release from primary if owned and acquire in secondary.
const bool need_queue_xfer = dst_image->current_layout != VK_IMAGE_LAYOUT_UNDEFINED && primary_cb.get_queue_family() != pcmd->get_queue_family();
if (need_queue_xfer)
{
dst_image->queue_release(primary_cb, pcmd->get_queue_family(), dst_image->current_layout);
}
if (flags & image_upload_options::initialize_image_layout) if (flags & image_upload_options::initialize_image_layout)
{ {
dst_image->change_layout(*pcmd, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); dst_image->change_layout(*pcmd, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL);
} }
else if (need_queue_xfer)
{
dst_image->queue_acquire(*pcmd, dst_image->current_layout);
}
return *pcmd; return *pcmd;
} }