/****************
* 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 *
************/
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);
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)
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,