]> O.S.I.I.S - jp/vkhelpers.git/commitdiff
split acquire img and draw
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 2 Sep 2019 23:51:33 +0000 (01:51 +0200)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Mon, 2 Sep 2019 23:51:33 +0000 (01:51 +0200)
include/vkh.h
src/vkh_image.c
src/vkh_presenter.c

index 25687604efbbc7cf130de3dd53e1348ba79f25e0..ca212b7e1ba8f47151c55ecae322087ca5ce274f 100644 (file)
@@ -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);
index 9522fb54c7bf5a3114c9902481b2be0a138595e1..b7d6ca8ebe64b729d69ecd62698f0c297f2cdac3 100644 (file)
@@ -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)
index 23680b2309f1272bc0753121e912e2ca3a4bbfc6..532ae54cb45bccb18dcc2193348f0de5f359094a 100644 (file)
@@ -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,