aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Barbour <tony@LunarG.com>2016-06-20 10:44:08 -0600
committerTony Barbour <tony@LunarG.com>2016-06-20 13:12:52 -0600
commite35e8aab1eaf50bebc56b65e46d1a1f34fd29d83 (patch)
treecc76b531ab030f86708e6d771d92ee97b028a7e0
parent416c650ad7db179a37b6d24d8d42dd8baf22f480 (diff)
downloadusermoji-e35e8aab1eaf50bebc56b65e46d1a1f34fd29d83.tar.xz
demos: Add semaphore between queue and present
LeX #548 Change-Id: Ic34266d759923f2856cbd6efc9e5bdcfd193c366
-rw-r--r--demos/cube.c18
-rw-r--r--demos/tri.c18
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) {