mirror of
https://github.com/love2d/love.git
synced 2026-08-20 12:40:20 +02:00
fix validation warnings relating to swapchain
for more information: https://docs.vulkan.org/guide/latest/swapchain_semaphore_reuse.html
This commit is contained in:
@@ -431,13 +431,6 @@ void Graphics::submitGpuCommands(SubmitMode submitMode, void *screenshotCallback
|
|||||||
|
|
||||||
endRecordingGraphicsCommands();
|
endRecordingGraphicsCommands();
|
||||||
|
|
||||||
if (!imagesInFlight.empty())
|
|
||||||
{
|
|
||||||
if (imagesInFlight[imageIndex] != VK_NULL_HANDLE)
|
|
||||||
vkWaitForFences(device, 1, &imagesInFlight.at(imageIndex), VK_TRUE, UINT64_MAX);
|
|
||||||
imagesInFlight[imageIndex] = inFlightFences[currentFrame];
|
|
||||||
}
|
|
||||||
|
|
||||||
std::array<VkCommandBuffer, 1> submitCommandbuffers = { commandBuffers.at(currentFrame) };
|
std::array<VkCommandBuffer, 1> submitCommandbuffers = { commandBuffers.at(currentFrame) };
|
||||||
|
|
||||||
VkSubmitInfo submitInfo{};
|
VkSubmitInfo submitInfo{};
|
||||||
@@ -457,7 +450,7 @@ void Graphics::submitGpuCommands(SubmitMode submitMode, void *screenshotCallback
|
|||||||
submitInfo.commandBufferCount = static_cast<uint32_t>(submitCommandbuffers.size());
|
submitInfo.commandBufferCount = static_cast<uint32_t>(submitCommandbuffers.size());
|
||||||
submitInfo.pCommandBuffers = submitCommandbuffers.data();
|
submitInfo.pCommandBuffers = submitCommandbuffers.data();
|
||||||
|
|
||||||
VkSemaphore signalSemaphores[] = { renderFinishedSemaphores.at(currentFrame) };
|
VkSemaphore signalSemaphores[] = { renderFinishedSemaphores.at(imageIndex) };
|
||||||
|
|
||||||
VkFence fence = VK_NULL_HANDLE;
|
VkFence fence = VK_NULL_HANDLE;
|
||||||
|
|
||||||
@@ -469,7 +462,6 @@ void Graphics::submitGpuCommands(SubmitMode submitMode, void *screenshotCallback
|
|||||||
submitInfo.pSignalSemaphores = signalSemaphores;
|
submitInfo.pSignalSemaphores = signalSemaphores;
|
||||||
}
|
}
|
||||||
|
|
||||||
vkResetFences(device, 1, &inFlightFences[currentFrame]);
|
|
||||||
fence = inFlightFences[currentFrame];
|
fence = inFlightFences[currentFrame];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -572,7 +564,7 @@ void Graphics::present(void *screenshotCallbackdata)
|
|||||||
VkPresentInfoKHR presentInfo{};
|
VkPresentInfoKHR presentInfo{};
|
||||||
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
|
||||||
presentInfo.waitSemaphoreCount = 1;
|
presentInfo.waitSemaphoreCount = 1;
|
||||||
presentInfo.pWaitSemaphores = &renderFinishedSemaphores.at(currentFrame);
|
presentInfo.pWaitSemaphores = &renderFinishedSemaphores.at(imageIndex);
|
||||||
presentInfo.swapchainCount = 1;
|
presentInfo.swapchainCount = 1;
|
||||||
presentInfo.pSwapchains = &swapChain;
|
presentInfo.pSwapchains = &swapChain;
|
||||||
presentInfo.pImageIndices = &imageIndex;
|
presentInfo.pImageIndices = &imageIndex;
|
||||||
@@ -1383,6 +1375,8 @@ void Graphics::beginSwapChainFrame()
|
|||||||
{
|
{
|
||||||
imageRequested = false;
|
imageRequested = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vkResetFences(device, 1, &inFlightFences.at(currentFrame));
|
||||||
|
|
||||||
startRecordingGraphicsCommands();
|
startRecordingGraphicsCommands();
|
||||||
|
|
||||||
@@ -3374,9 +3368,7 @@ void Graphics::createCommandBuffers()
|
|||||||
void Graphics::createSyncObjects()
|
void Graphics::createSyncObjects()
|
||||||
{
|
{
|
||||||
imageAvailableSemaphores.resize(MAX_FRAMES_IN_FLIGHT);
|
imageAvailableSemaphores.resize(MAX_FRAMES_IN_FLIGHT);
|
||||||
renderFinishedSemaphores.resize(MAX_FRAMES_IN_FLIGHT);
|
|
||||||
inFlightFences.resize(MAX_FRAMES_IN_FLIGHT);
|
inFlightFences.resize(MAX_FRAMES_IN_FLIGHT);
|
||||||
imagesInFlight.resize(swapChainImages.size(), VK_NULL_HANDLE);
|
|
||||||
|
|
||||||
VkSemaphoreCreateInfo semaphoreInfo{};
|
VkSemaphoreCreateInfo semaphoreInfo{};
|
||||||
semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
semaphoreInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
||||||
@@ -3386,10 +3378,18 @@ void Graphics::createSyncObjects()
|
|||||||
fenceInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT;
|
fenceInfo.flags = VK_FENCE_CREATE_SIGNALED_BIT;
|
||||||
|
|
||||||
for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
for (size_t i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
|
||||||
|
{
|
||||||
if (vkCreateSemaphore(device, &semaphoreInfo, nullptr, &imageAvailableSemaphores.at(i)) != VK_SUCCESS ||
|
if (vkCreateSemaphore(device, &semaphoreInfo, nullptr, &imageAvailableSemaphores.at(i)) != VK_SUCCESS ||
|
||||||
vkCreateSemaphore(device, &semaphoreInfo, nullptr, &renderFinishedSemaphores.at(i)) != VK_SUCCESS ||
|
|
||||||
vkCreateFence(device, &fenceInfo, nullptr, &inFlightFences.at(i)) != VK_SUCCESS)
|
vkCreateFence(device, &fenceInfo, nullptr, &inFlightFences.at(i)) != VK_SUCCESS)
|
||||||
throw love::Exception("Failed to create Vulkan synchronization objects for a frame!");
|
throw love::Exception("Failed to create Vulkan synchronization objects for a frame!");
|
||||||
|
}
|
||||||
|
|
||||||
|
renderFinishedSemaphores.resize(swapChainImages.size());
|
||||||
|
for (size_t i = 0; i < swapChainImages.size(); i++)
|
||||||
|
{
|
||||||
|
if (vkCreateSemaphore(device, &semaphoreInfo, nullptr, &renderFinishedSemaphores.at(i)) != VK_SUCCESS)
|
||||||
|
throw love::Exception("Failed to create image available semaphore");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Graphics::cleanup()
|
void Graphics::cleanup()
|
||||||
|
|||||||
@@ -398,7 +398,6 @@ private:
|
|||||||
std::vector<VkSemaphore> imageAvailableSemaphores;
|
std::vector<VkSemaphore> imageAvailableSemaphores;
|
||||||
std::vector<VkSemaphore> renderFinishedSemaphores;
|
std::vector<VkSemaphore> renderFinishedSemaphores;
|
||||||
std::vector<VkFence> inFlightFences;
|
std::vector<VkFence> inFlightFences;
|
||||||
std::vector<VkFence> imagesInFlight;
|
|
||||||
int vsync = 1;
|
int vsync = 1;
|
||||||
VkDeviceSize minUniformBufferOffsetAlignment = 0;
|
VkDeviceSize minUniformBufferOffsetAlignment = 0;
|
||||||
bool imageRequested = false;
|
bool imageRequested = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user