Skip to content

Commit

Permalink
rsx/vk: Synchronize access to queue submit calls
Browse files Browse the repository at this point in the history
- Should prevent concurrent access on the present/graphics queue
  • Loading branch information
kd-11 committed Dec 31, 2017
1 parent 688569e commit 4872be9
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
19 changes: 17 additions & 2 deletions rpcs3/Emu/RSX/VK/VKHelpers.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
#include "stdafx.h"
#include "VKHelpers.h"

#include <mutex>

namespace vk
{
context* g_current_vulkan_ctx = nullptr;
Expand All @@ -9,14 +11,17 @@ namespace vk
std::unique_ptr<image> g_null_texture;
std::unique_ptr<image_view> g_null_image_view;

VkSampler g_null_sampler = nullptr;
VkSampler g_null_sampler = nullptr;

bool g_cb_no_interrupt_flag = false;
bool g_drv_no_primitive_restart_flag = false;

u64 g_num_processed_frames = 0;
u64 g_num_total_frames = 0;

//global submit guard to prevent race condition on queue submit
std::mutex g_submit_mutex;

VKAPI_ATTR void* VKAPI_CALL mem_realloc(void* pUserData, void* pOriginal, size_t size, size_t alignment, VkSystemAllocationScope allocationScope)
{
#ifdef _MSC_VER
Expand Down Expand Up @@ -219,7 +224,7 @@ namespace vk

g_null_texture.reset(new image(g_current_renderer, get_memory_mapping(g_current_renderer.gpu()).device_local, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
VK_IMAGE_TYPE_2D, VK_FORMAT_B8G8R8A8_UNORM, 4, 4, 1, 1, 1, VK_SAMPLE_COUNT_1_BIT, VK_IMAGE_LAYOUT_UNDEFINED,
VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_SAMPLED_BIT, 0));
VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, 0));

g_null_image_view.reset(new image_view(g_current_renderer, g_null_texture->value, VK_IMAGE_VIEW_TYPE_2D,
VK_FORMAT_B8G8R8A8_UNORM, {VK_COMPONENT_SWIZZLE_R, VK_COMPONENT_SWIZZLE_G, VK_COMPONENT_SWIZZLE_B, VK_COMPONENT_SWIZZLE_A},
Expand All @@ -236,6 +241,16 @@ namespace vk
return g_null_image_view->value;
}

void acquire_global_submit_lock()
{
g_submit_mutex.lock();
}

void release_global_submit_lock()
{
g_submit_mutex.unlock();
}

void destroy_global_resources()
{
g_null_texture.reset();
Expand Down
6 changes: 6 additions & 0 deletions rpcs3/Emu/RSX/VK/VKHelpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,10 @@ namespace vk
VkSampler null_sampler();
VkImageView null_image_view(vk::command_buffer&);

//Sync helpers around vkQueueSubmit
void acquire_global_submit_lock();
void release_global_submit_lock();

void destroy_global_resources();

void change_image_layout(VkCommandBuffer cmd, VkImage image, VkImageLayout current_layout, VkImageLayout new_layout, VkImageSubresourceRange range);
Expand Down Expand Up @@ -1127,7 +1131,9 @@ namespace vk
infos.waitSemaphoreCount = static_cast<uint32_t>(semaphores.size());
infos.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;

acquire_global_submit_lock();
CHECK_RESULT(vkQueueSubmit(queue, 1, &infos, fence));
release_global_submit_lock();
}
};

Expand Down

0 comments on commit 4872be9

Please sign in to comment.