From 4b152a4492b500dc06a7c85c48b3cf4d1f61c464 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Mon, 17 Feb 2020 00:10:32 +0900 Subject: [PATCH] Rework semaphore sets --- include/QF/Vulkan/command.h | 3 ++- libs/video/renderer/vulkan/command.c | 18 ++++++++++++------ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/include/QF/Vulkan/command.h b/include/QF/Vulkan/command.h index 14eb625ac..7ef36a7f4 100644 --- a/include/QF/Vulkan/command.h +++ b/include/QF/Vulkan/command.h @@ -26,7 +26,8 @@ typedef struct qfv_semaphore_s { typedef struct qfv_semaphoreset_s { struct qfv_device_s *device; - VkSemaphore *semaphores; + qfv_semaphore_t **semaphores; + VkSemaphore *vkSemaphores; VkPipelineStageFlags *stages; int numSemaphores; } qfv_semaphoreset_t; diff --git a/libs/video/renderer/vulkan/command.c b/libs/video/renderer/vulkan/command.c index 9f581ded6..f4cf4bc14 100644 --- a/libs/video/renderer/vulkan/command.c +++ b/libs/video/renderer/vulkan/command.c @@ -237,17 +237,23 @@ QFV_CreateSemaphoreSet (qfv_semaphore_t **semaphores, int numSemaphores) qfv_device_t *device = semaphores[0]->device; qfv_semaphoreset_t *semaphoreset; semaphoreset = calloc (1, sizeof (*semaphoreset) + + sizeof (qfv_semaphore_t *) * numSemaphores + sizeof (VkSemaphore) * numSemaphores + sizeof (VkPipelineStageFlags) * numSemaphores); semaphoreset->device = device; - semaphoreset->semaphores = (VkSemaphore *) (semaphoreset + 1); + semaphoreset->vkSemaphores = (VkSemaphore *) (semaphoreset + 1); semaphoreset->stages = (VkPipelineStageFlags *) - &semaphoreset->semaphores[numSemaphores]; + &semaphoreset->vkSemaphores[numSemaphores]; + semaphoreset->semaphores = (qfv_semaphore_t **) (semaphoreset->stages + + numSemaphores); semaphoreset->numSemaphores = numSemaphores; - for (int i = 0; i < numSemaphores; i++) { - semaphoreset->semaphores[i] = semaphores[i]->semaphore; + if (semaphores) { + for (int i = 0; i < numSemaphores; i++) { + semaphoreset->semaphores[i] = semaphores[i]; + semaphoreset->vkSemaphores[i] = semaphores[i]->semaphore; + } } return semaphoreset; } @@ -379,10 +385,10 @@ QFV_QueueSubmit (qfv_queue_t *queue, qfv_semaphoreset_t *waitSemaphores, VkSubmitInfo submitInfo = { VK_STRUCTURE_TYPE_SUBMIT_INFO, 0, waitSemaphores->numSemaphores, - waitSemaphores->semaphores, waitSemaphores->stages, + waitSemaphores->vkSemaphores, waitSemaphores->stages, buffers->numBuffers, buffers->vkBuffers, signalSemaphores->numSemaphores, - signalSemaphores->semaphores + signalSemaphores->vkSemaphores }; //FIXME multi-batch return dfunc->vkQueueSubmit (queue->queue, 1, &submitInfo,