From 4824a7ec5b113892f2fdac0059f0e0f88a490625 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jean-Philippe=20Bruy=C3=A8re?= Date: Tue, 3 Sep 2019 01:51:33 +0200 Subject: [PATCH] split acquire img and draw --- include/vkh.h | 14 ++++++++------ src/vkh_image.c | 8 +++++++- src/vkh_presenter.c | 13 ++++++++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/include/vkh.h b/include/vkh.h index 2568760..ca212b7 100644 --- a/include/vkh.h +++ b/include/vkh.h @@ -89,12 +89,13 @@ void vkh_device_set_object_name (VkhDevice dev, VkDebugReportObjectTypeEXT objec /**************** * VkhPresenter * ****************/ -VkhPresenter vkh_presenter_create (VkhDevice dev, uint32_t presentQueueFamIdx, VkSurfaceKHR surface, - uint32_t width, uint32_t height, - VkFormat preferedFormat, VkPresentModeKHR presentMode); -void vkh_presenter_destroy (VkhPresenter r); -bool vkh_presenter_draw (VkhPresenter r); -void vkh_presenter_build_blit_cmd (VkhPresenter r, VkImage blitSource, uint32_t width, uint32_t height); +VkhPresenter vkh_presenter_create (VkhDevice dev, uint32_t presentQueueFamIdx, VkSurfaceKHR surface, + uint32_t width, uint32_t height, + VkFormat preferedFormat, VkPresentModeKHR presentMode); +void vkh_presenter_destroy (VkhPresenter r); +bool vkh_presenter_draw (VkhPresenter r); +bool vkh_presenter_acquireNextImage (VkhPresenter r, VkFence fence); +void vkh_presenter_build_blit_cmd (VkhPresenter r, VkImage blitSource, uint32_t width, uint32_t height); /************ * VkhImage * ************/ @@ -114,6 +115,7 @@ void vkh_image_set_layout (VkCommandBuffer cmdBuff, VkhImage image, VkImag VkImageLayout new_image_layout, VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages); void vkh_image_set_layout_subres(VkCommandBuffer cmdBuff, VkhImage image, VkImageSubresourceRange subresourceRange, VkImageLayout old_image_layout, VkImageLayout new_image_layout, VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages); +void vkh_image_destroy_sampler (VkhImage img); void vkh_image_destroy (VkhImage img); void* vkh_image_map (VkhImage img); void vkh_image_unmap (VkhImage img); diff --git a/src/vkh_image.c b/src/vkh_image.c index 9522fb5..b7d6ca8 100644 --- a/src/vkh_image.c +++ b/src/vkh_image.c @@ -211,7 +211,13 @@ void vkh_image_set_layout_subres(VkCommandBuffer cmdBuff, VkhImage image, VkImag vkCmdPipelineBarrier(cmdBuff, src_stages, dest_stages, 0, 0, NULL, 0, NULL, 1, &image_memory_barrier); image->layout = new_image_layout; } - +void vkh_image_destroy_sampler (VkhImage img) { + if (img==NULL) + return; + if(img->sampler != VK_NULL_HANDLE) + vkDestroySampler (img->pDev->dev,img->sampler,NULL); + img->sampler = VK_NULL_HANDLE; +} void vkh_image_destroy(VkhImage img) { if (img==NULL) diff --git a/src/vkh_presenter.c b/src/vkh_presenter.c index 23680b2..532ae54 100644 --- a/src/vkh_presenter.c +++ b/src/vkh_presenter.c @@ -69,18 +69,21 @@ void vkh_presenter_destroy (VkhPresenter r) { free (r); } -bool vkh_presenter_draw (VkhPresenter r) { - +bool vkh_presenter_acquireNextImage (VkhPresenter r, VkFence fence) { // Get the index of the next available swapchain image: VkResult err = vkAcquireNextImageKHR - (r->dev->dev, r->swapChain, UINT64_MAX, r->semaPresentEnd, VK_NULL_HANDLE, &r->currentScBufferIndex); + (r->dev->dev, r->swapChain, UINT64_MAX, r->semaPresentEnd, fence, &r->currentScBufferIndex); if ((err == VK_ERROR_OUT_OF_DATE_KHR) || (err == VK_SUBOPTIMAL_KHR)){ _swapchain_create (r); return false; - } + return true; +} + - VK_CHECK_RESULT(err); +bool vkh_presenter_draw (VkhPresenter r) { + if (!vkh_presenter_acquireNextImage (r, VK_NULL_HANDLE)) + return false; VkPipelineStageFlags dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; VkSubmitInfo submit_info = { .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO, -- 2.47.3