diff options
| author | Tony Barbour <tony@LunarG.com> | 2016-06-20 10:44:08 -0600 |
|---|---|---|
| committer | Tony Barbour <tony@LunarG.com> | 2016-06-20 13:12:52 -0600 |
| commit | e35e8aab1eaf50bebc56b65e46d1a1f34fd29d83 (patch) | |
| tree | cc76b531ab030f86708e6d771d92ee97b028a7e0 | |
| parent | 416c650ad7db179a37b6d24d8d42dd8baf22f480 (diff) | |
| download | usermoji-e35e8aab1eaf50bebc56b65e46d1a1f34fd29d83.tar.xz | |
demos: Add semaphore between queue and present
LeX #548
Change-Id: Ic34266d759923f2856cbd6efc9e5bdcfd193c366
| -rw-r--r-- | demos/cube.c | 18 | ||||
| -rw-r--r-- | demos/tri.c | 18 |
2 files changed, 26 insertions, 10 deletions
diff --git a/demos/cube.c b/demos/cube.c index 608a81cb..cc89d974 100644 --- a/demos/cube.c +++ b/demos/cube.c @@ -708,18 +708,22 @@ void demo_update_data_buffer(struct demo *demo) { static void demo_draw(struct demo *demo) { VkResult U_ASSERT_ONLY err; - VkSemaphore imageAcquiredSemaphore; - VkSemaphoreCreateInfo imageAcquiredSemaphoreCreateInfo = { + VkSemaphore imageAcquiredSemaphore, drawCompleteSemaphore; + VkSemaphoreCreateInfo semaphoreCreateInfo = { .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, .pNext = NULL, .flags = 0, }; VkFence nullFence = VK_NULL_HANDLE; - err = vkCreateSemaphore(demo->device, &imageAcquiredSemaphoreCreateInfo, + err = vkCreateSemaphore(demo->device, &semaphoreCreateInfo, NULL, &imageAcquiredSemaphore); assert(!err); + err = vkCreateSemaphore(demo->device, &semaphoreCreateInfo, + NULL, &drawCompleteSemaphore); + assert(!err); + // Get the index of the next available swapchain image: err = demo->fpAcquireNextImageKHR(demo->device, demo->swapchain, UINT64_MAX, imageAcquiredSemaphore, @@ -731,6 +735,7 @@ static void demo_draw(struct demo *demo) { demo_resize(demo); demo_draw(demo); vkDestroySemaphore(demo->device, imageAcquiredSemaphore, NULL); + vkDestroySemaphore(demo->device, drawCompleteSemaphore, NULL); return; } else if (err == VK_SUBOPTIMAL_KHR) { // demo->swapchain is not as optimal as it could be, but the platform's @@ -756,8 +761,8 @@ static void demo_draw(struct demo *demo) { .commandBufferCount = 1, .pCommandBuffers = &demo->buffers[demo->current_buffer].cmd, - .signalSemaphoreCount = 0, - .pSignalSemaphores = NULL}; + .signalSemaphoreCount = 1, + .pSignalSemaphores = &drawCompleteSemaphore}; err = vkQueueSubmit(demo->queue, 1, &submit_info, nullFence); assert(!err); @@ -768,6 +773,8 @@ static void demo_draw(struct demo *demo) { .swapchainCount = 1, .pSwapchains = &demo->swapchain, .pImageIndices = &demo->current_buffer, + .waitSemaphoreCount = 1, + .pWaitSemaphores = &drawCompleteSemaphore, }; // TBD/TODO: SHOULD THE "present" PARAMETER BE "const" IN THE HEADER? @@ -787,6 +794,7 @@ static void demo_draw(struct demo *demo) { assert(err == VK_SUCCESS); vkDestroySemaphore(demo->device, imageAcquiredSemaphore, NULL); + vkDestroySemaphore(demo->device, drawCompleteSemaphore, NULL); } static void demo_prepare_buffers(struct demo *demo) { diff --git a/demos/tri.c b/demos/tri.c index 7acc561c..1db0f821 100644 --- a/demos/tri.c +++ b/demos/tri.c @@ -530,17 +530,21 @@ static void demo_draw_build_cmd(struct demo *demo) { static void demo_draw(struct demo *demo) { VkResult U_ASSERT_ONLY err; - VkSemaphore imageAcquiredSemaphore; - VkSemaphoreCreateInfo imageAcquiredSemaphoreCreateInfo = { + VkSemaphore imageAcquiredSemaphore, drawCompleteSemaphore; + VkSemaphoreCreateInfo semaphoreCreateInfo = { .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO, .pNext = NULL, .flags = 0, }; - err = vkCreateSemaphore(demo->device, &imageAcquiredSemaphoreCreateInfo, + err = vkCreateSemaphore(demo->device, &semaphoreCreateInfo, NULL, &imageAcquiredSemaphore); assert(!err); + err = vkCreateSemaphore(demo->device, &semaphoreCreateInfo, + NULL, &drawCompleteSemaphore); + assert(!err); + // Get the index of the next available swapchain image: err = demo->fpAcquireNextImageKHR(demo->device, demo->swapchain, UINT64_MAX, imageAcquiredSemaphore, @@ -552,6 +556,7 @@ static void demo_draw(struct demo *demo) { demo_resize(demo); demo_draw(demo); vkDestroySemaphore(demo->device, imageAcquiredSemaphore, NULL); + vkDestroySemaphore(demo->device, drawCompleteSemaphore, NULL); return; } else if (err == VK_SUBOPTIMAL_KHR) { // demo->swapchain is not as optimal as it could be, but the platform's @@ -578,8 +583,8 @@ static void demo_draw(struct demo *demo) { .pWaitDstStageMask = &pipe_stage_flags, .commandBufferCount = 1, .pCommandBuffers = &demo->draw_cmd, - .signalSemaphoreCount = 0, - .pSignalSemaphores = NULL}; + .signalSemaphoreCount = 1, + .pSignalSemaphores = &drawCompleteSemaphore}; err = vkQueueSubmit(demo->queue, 1, &submit_info, nullFence); assert(!err); @@ -590,6 +595,8 @@ static void demo_draw(struct demo *demo) { .swapchainCount = 1, .pSwapchains = &demo->swapchain, .pImageIndices = &demo->current_buffer, + .waitSemaphoreCount = 1, + .pWaitSemaphores = &drawCompleteSemaphore, }; // TBD/TODO: SHOULD THE "present" PARAMETER BE "const" IN THE HEADER? @@ -609,6 +616,7 @@ static void demo_draw(struct demo *demo) { assert(err == VK_SUCCESS); vkDestroySemaphore(demo->device, imageAcquiredSemaphore, NULL); + vkDestroySemaphore(demo->device, drawCompleteSemaphore, NULL); } static void demo_prepare_buffers(struct demo *demo) { |
