aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2021-01-11 23:43:36 +0100
committerladevieq <ladevie.quentin@gmail.com>2021-01-11 23:43:36 +0100
commit0fe938746ed89ff900d970a349511b9788631422 (patch)
treecc76ff3e6ab6bd5e3c5c239bc0749215ba99cb9b /src
parent18dd6722d1c4b14dfe322b036b6e4fa1281b4712 (diff)
Use wait for fence instead of device idle
Diffstat (limited to 'src')
-rw-r--r--src/vk-renderer.cpp25
1 files changed, 19 insertions, 6 deletions
diff --git a/src/vk-renderer.cpp b/src/vk-renderer.cpp
index f6eaa23..ac1edd4 100644
--- a/src/vk-renderer.cpp
+++ b/src/vk-renderer.cpp
@@ -30,9 +30,10 @@ vkrenderer::vkrenderer(window& wnd) {
create_memory_allocator();
create_command_buffer();
create_descriptor_set();
+ create_fence();
create_semaphores();
- initialization_frame();
+ // initialization_frame();
}
void vkrenderer::compute(const input_data& inputs, size_t width, size_t height) {
@@ -116,9 +117,7 @@ void vkrenderer::compute(const input_data& inputs, size_t width, size_t height)
submit_info.commandBufferCount = 1;
submit_info.pCommandBuffers = &command_buffer;
- VKRESULT(vkQueueSubmit(compute_queue, 1, &submit_info, VK_NULL_HANDLE))
-
- VKRESULT(vkDeviceWaitIdle(device))
+ VKRESULT(vkQueueSubmit(compute_queue, 1, &submit_info, submission_fence))
VkPresentInfoKHR present_info = {};
present_info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
@@ -131,6 +130,8 @@ void vkrenderer::compute(const input_data& inputs, size_t width, size_t height)
present_info.pResults = nullptr;
VKRESULT(vkQueuePresentKHR(compute_queue, &present_info))
+
+ VKRESULT(vkWaitForFences(device, 1, &submission_fence, VK_TRUE, UINT64_MAX))
}
@@ -450,12 +451,22 @@ void vkrenderer::create_descriptor_set() {
vkAllocateDescriptorSets(device, &descriptor_set_allocate_info, &compute_shader_set);
}
+void vkrenderer::create_fence() {
+ VkFenceCreateInfo create_info = {};
+ create_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
+ create_info.pNext = nullptr;
+ create_info.flags = 0;
+
+ VKRESULT(vkCreateFence(device, &create_info, nullptr, &submission_fence))
+}
+
void vkrenderer::create_semaphores() {
VkSemaphoreCreateInfo create_info = {};
create_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
create_info.pNext = nullptr;
create_info.flags = 0;
+ VKRESULT(vkCreateSemaphore(device, &create_info, nullptr, &execution_semaphore))
VKRESULT(vkCreateSemaphore(device, &create_info, nullptr, &acquire_semaphore))
}
@@ -514,9 +525,11 @@ void vkrenderer::initialization_frame() {
submit_info.commandBufferCount = 1;
submit_info.pCommandBuffers = &command_buffer;
- VKRESULT(vkQueueSubmit(compute_queue, 1, &submit_info, VK_NULL_HANDLE))
+ VKRESULT(vkQueueSubmit(compute_queue, 1, &submit_info, submission_fence))
+
+ VKRESULT(vkWaitForFences(device, 1, &submission_fence, VK_TRUE, UINT64_MAX))
- VKRESULT(vkDeviceWaitIdle(device))
+ vkResetFences(device, 1, &submission_fence);
}
void vkrenderer::select_physical_device() {