mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
[vulkan] Create per-swap image fences for presenter
This commit is contained in:
parent
a6d1fe07f2
commit
b6804a95b7
@ -188,17 +188,26 @@ namespace dxvk::vk {
|
|||||||
m_semaphores.resize(m_info.imageCount);
|
m_semaphores.resize(m_info.imageCount);
|
||||||
|
|
||||||
for (uint32_t i = 0; i < m_info.imageCount; i++) {
|
for (uint32_t i = 0; i < m_info.imageCount; i++) {
|
||||||
VkSemaphoreCreateInfo info;
|
VkFenceCreateInfo fenceInfo;
|
||||||
info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
fenceInfo.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
||||||
info.pNext = nullptr;
|
fenceInfo.pNext = nullptr;
|
||||||
info.flags = 0;
|
fenceInfo.flags = 0;
|
||||||
|
|
||||||
|
if ((status = m_vkd->vkCreateFence(m_vkd->device(),
|
||||||
|
&fenceInfo, nullptr, &m_semaphores[i].fence)) != VK_SUCCESS)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
VkSemaphoreCreateInfo semInfo;
|
||||||
|
semInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
||||||
|
semInfo.pNext = nullptr;
|
||||||
|
semInfo.flags = 0;
|
||||||
|
|
||||||
if ((status = m_vkd->vkCreateSemaphore(m_vkd->device(),
|
if ((status = m_vkd->vkCreateSemaphore(m_vkd->device(),
|
||||||
&info, nullptr, &m_semaphores[i].acquire)) != VK_SUCCESS)
|
&semInfo, nullptr, &m_semaphores[i].acquire)) != VK_SUCCESS)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
if ((status = m_vkd->vkCreateSemaphore(m_vkd->device(),
|
if ((status = m_vkd->vkCreateSemaphore(m_vkd->device(),
|
||||||
&info, nullptr, &m_semaphores[i].present)) != VK_SUCCESS)
|
&semInfo, nullptr, &m_semaphores[i].present)) != VK_SUCCESS)
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -385,6 +394,7 @@ namespace dxvk::vk {
|
|||||||
m_vkd->vkDestroyImageView(m_vkd->device(), img.view, nullptr);
|
m_vkd->vkDestroyImageView(m_vkd->device(), img.view, nullptr);
|
||||||
|
|
||||||
for (const auto& sem : m_semaphores) {
|
for (const auto& sem : m_semaphores) {
|
||||||
|
m_vkd->vkDestroyFence(m_vkd->device(), sem.fence, nullptr);
|
||||||
m_vkd->vkDestroySemaphore(m_vkd->device(), sem.acquire, nullptr);
|
m_vkd->vkDestroySemaphore(m_vkd->device(), sem.acquire, nullptr);
|
||||||
m_vkd->vkDestroySemaphore(m_vkd->device(), sem.present, nullptr);
|
m_vkd->vkDestroySemaphore(m_vkd->device(), sem.present, nullptr);
|
||||||
}
|
}
|
||||||
|
@ -61,11 +61,13 @@ namespace dxvk::vk {
|
|||||||
/**
|
/**
|
||||||
* \brief Presenter semaphores
|
* \brief Presenter semaphores
|
||||||
*
|
*
|
||||||
* Pair of semaphores used for acquire
|
* Pair of semaphores used for acquire and present
|
||||||
* and present operations, including
|
* operations, including the command buffers used
|
||||||
* the command buffers used in between.
|
* in between. Also stores a fence to signal on
|
||||||
|
* image acquisition.
|
||||||
*/
|
*/
|
||||||
struct PresenterSync {
|
struct PresenterSync {
|
||||||
|
VkFence fence;
|
||||||
VkSemaphore acquire;
|
VkSemaphore acquire;
|
||||||
VkSemaphore present;
|
VkSemaphore present;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user