From af0e1f609e5a554b55446aa292df8901f0ceacb4 Mon Sep 17 00:00:00 2001 From: kd-11 Date: Tue, 22 Mar 2022 21:37:49 +0300 Subject: [PATCH] Fix vulkan compilation warnings --- rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp | 8 ++++---- rpcs3/Emu/RSX/VK/VKAsyncScheduler.h | 2 +- rpcs3/Emu/RSX/VK/VKGSRender.cpp | 2 +- rpcs3/Emu/RSX/VK/VKRenderTargets.h | 2 +- rpcs3/Emu/RSX/VK/VKTexture.cpp | 2 +- rpcs3/Emu/RSX/VK/vkutils/sync.cpp | 1 + rpcs3/Emu/RSX/VK/vkutils/sync.h | 7 +++++++ 7 files changed, 16 insertions(+), 8 deletions(-) diff --git a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp index d77bc1c33f..ecfdca5940 100644 --- a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp +++ b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.cpp @@ -20,7 +20,7 @@ namespace vk return; } - init_config_options(); + init_config_options(mode); } AsyncTaskScheduler::~AsyncTaskScheduler() @@ -32,7 +32,7 @@ namespace vk } } - void AsyncTaskScheduler::init_config_options() + void AsyncTaskScheduler::init_config_options(vk_gpu_scheduler_mode mode) { std::lock_guard lock(m_config_mutex); if (std::exchange(m_options_initialized, true)) @@ -41,13 +41,13 @@ namespace vk return; } - m_use_host_scheduler = g_cfg.video.vk.asynchronous_scheduler == vk_gpu_scheduler_mode::safe || g_cfg.video.strict_rendering_mode; + m_use_host_scheduler = (mode == vk_gpu_scheduler_mode::safe) || g_cfg.video.strict_rendering_mode; rsx_log.notice("Asynchronous task scheduler is active running in %s mode", m_use_host_scheduler? "'Safe'" : "'Fast'"); } void AsyncTaskScheduler::delayed_init() { - init_config_options(); + ensure(m_options_initialized); auto pdev = get_current_renderer(); m_command_pool.create(*const_cast(pdev), pdev->get_transfer_queue_family()); diff --git a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.h b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.h index 540a4f7d2d..c6f14fb94f 100644 --- a/rpcs3/Emu/RSX/VK/VKAsyncScheduler.h +++ b/rpcs3/Emu/RSX/VK/VKAsyncScheduler.h @@ -39,7 +39,7 @@ namespace vk shared_mutex m_submit_mutex; - void init_config_options(); + void init_config_options(vk_gpu_scheduler_mode mode); void delayed_init(); void insert_sync_event(); diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index 8c4d30f695..a358951448 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -1544,7 +1544,7 @@ bool VKGSRender::release_GCM_label(u32 address, u32 args) return false; } - m_host_data_ptr->last_label_release_event = ++m_host_data_ptr->event_counter; + m_host_data_ptr->last_label_release_event = m_host_data_ptr->inc_counter(); if (m_host_data_ptr->texture_load_request_event > m_host_data_ptr->last_label_submit_event) { diff --git a/rpcs3/Emu/RSX/VK/VKRenderTargets.h b/rpcs3/Emu/RSX/VK/VKRenderTargets.h index d2f85945cc..3ee7c35ff5 100644 --- a/rpcs3/Emu/RSX/VK/VKRenderTargets.h +++ b/rpcs3/Emu/RSX/VK/VKRenderTargets.h @@ -89,7 +89,7 @@ namespace vk using download_buffer_object = void*; using barrier_descriptor_t = rsx::deferred_clipped_region; - static std::pair get_attachment_create_flags(VkFormat format, u8 samples) + static std::pair get_attachment_create_flags(VkFormat format, u8 /*samples*/) { if (g_cfg.video.strict_rendering_mode) { diff --git a/rpcs3/Emu/RSX/VK/VKTexture.cpp b/rpcs3/Emu/RSX/VK/VKTexture.cpp index d263528cbc..7ebb63e73f 100644 --- a/rpcs3/Emu/RSX/VK/VKTexture.cpp +++ b/rpcs3/Emu/RSX/VK/VKTexture.cpp @@ -1154,7 +1154,7 @@ namespace vk // Queue a sync update on the CB doing the load auto [host_data, host_buffer] = static_cast(rsxthr)->map_host_object_data(); ensure(host_data); - const auto event_id = ++host_data->event_counter; + const auto event_id = host_data->inc_counter(); host_data->texture_load_request_event = event_id; vkCmdUpdateBuffer(cmd2, host_buffer, ::offset32(&vk::host_data_t::texture_load_complete_event), sizeof(u64), &event_id); } diff --git a/rpcs3/Emu/RSX/VK/vkutils/sync.cpp b/rpcs3/Emu/RSX/VK/vkutils/sync.cpp index fa05e8604a..71d559ecc0 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/sync.cpp +++ b/rpcs3/Emu/RSX/VK/vkutils/sync.cpp @@ -181,6 +181,7 @@ namespace vk switch (status) { case VK_NOT_READY: + utils::pause(); continue; default: die_with_error(status); diff --git a/rpcs3/Emu/RSX/VK/vkutils/sync.h b/rpcs3/Emu/RSX/VK/vkutils/sync.h index 2641fc1e5d..489d0189dc 100644 --- a/rpcs3/Emu/RSX/VK/vkutils/sync.h +++ b/rpcs3/Emu/RSX/VK/vkutils/sync.h @@ -26,6 +26,13 @@ namespace vk u64 last_label_submit_event = 0; u64 commands_complete_event = 0; u64 last_label_request_timestamp = 0; + + inline u64 inc_counter() volatile + { + // Workaround for volatile increment warning. GPU can see this value directly, but currently we do not modify it on the device. + event_counter = event_counter + 1; + return event_counter; + } }; struct fence