]> O.S.I.I.S - jp/vkhelpers.git/commitdiff
check VK_VERSION for timeline semaphores
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sun, 4 Feb 2024 12:04:35 +0000 (13:04 +0100)
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>
Sun, 4 Feb 2024 12:04:35 +0000 (13:04 +0100)
CMakeLists.txt
include/vkh.h
src/vkhelpers.c

index 69196c4f8fac1048d0c2957d5419047ebb0e7c7d..05faf8e2badf01f0b403fccdc54714e338eb165d 100644 (file)
@@ -1,4 +1,4 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 3.16)
+CMAKE_MINIMUM_REQUIRED(VERSION 3.13)
 
 #OPTION (VKH_BUILD_SHARED_LIB "Build using shared libraries" OFF)
 OPTION(VKH_USE_VMA "enable Vulkan Memory Allocator" ON)
@@ -10,7 +10,7 @@ PROJECT(vkh VERSION 0.1.0 DESCRIPTION "Vulkan helpers library" LANGUAGES ${LANG}
 SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake")
 
 IF(NOT CMAKE_BUILD_TYPE)
-       SET(CMAKE_BUILD_TYPE Release)
+    SET(CMAKE_BUILD_TYPE Release)
 ENDIF()
 
 IF (CYGWIN)
@@ -29,7 +29,7 @@ if (CMAKE_BUILD_TYPE STREQUAL "Debug")
 ELSE()
     UNSET(ENABLE_VALIDATION CACHE)
     IF (UNIX)
-               #ADD_COMPILE_OPTIONS(-w -fvisibility=hidden)
+        #ADD_COMPILE_OPTIONS(-w -fvisibility=hidden)
         #ADD_COMPILE_OPTIONS(-flto)
     ELSEIF(MSVC)
         ADD_COMPILE_OPTIONS(/W0)
@@ -59,49 +59,49 @@ GET_DIRECTORY_PROPERTY (vkh_has_root_project PARENT_DIRECTORY)
 if (VKH_USE_VMA)
     ADD_DEFINITIONS (-DVKH_USE_VMA)
     SET(VKH_USE_VMA ON PARENT_SCOPE)
-       ADD_LIBRARY(VMA STATIC src/vma/VmaUsage.cpp)
+    ADD_LIBRARY(VMA STATIC src/vma/VmaUsage.cpp)
     SET_TARGET_PROPERTIES(
-               VMA PROPERTIES
+        VMA PROPERTIES
             POSITION_INDEPENDENT_CODE ON
-                       LINKER_LANGUAGE C
+            LINKER_LANGUAGE C
     )
-       TARGET_INCLUDE_DIRECTORIES(VMA
+    TARGET_INCLUDE_DIRECTORIES(VMA
         PUBLIC
-                       ${CMAKE_CURRENT_SOURCE_DIR}/src/vma
+            ${CMAKE_CURRENT_SOURCE_DIR}/src/vma
             ${Vulkan_INCLUDE_DIRS}
     )
 ENDIF()
 
 ADD_LIBRARY("${PROJECT_NAME}" ${VKH_SRC})
 SET_TARGET_PROPERTIES("${PROJECT_NAME}" PROPERTIES
-               OUTPUT_NAME ${PROJECT_NAME}
-               VERSION ${PROJECT_VERSION}
-               SOVERSION 1
-               C_STANDARD 11
-               C_EXTENSIONS OFF
-               PUBLIC_HEADER include/vkh.h
-               LINKER_LANGUAGE C
+        OUTPUT_NAME ${PROJECT_NAME}
+        VERSION ${PROJECT_VERSION}
+        SOVERSION 1
+        C_STANDARD 11
+        C_EXTENSIONS OFF
+        PUBLIC_HEADER include/vkh.h
+        LINKER_LANGUAGE C
 )
 TARGET_INCLUDE_DIRECTORIES("${PROJECT_NAME}"
-       PRIVATE
-               ${CMAKE_CURRENT_SOURCE_DIR}/src
-       PUBLIC
-               ${CMAKE_CURRENT_SOURCE_DIR}/include
-               ${Vulkan_INCLUDE_DIRS}
+    PRIVATE
+        ${CMAKE_CURRENT_SOURCE_DIR}/src
+    PUBLIC
+        ${CMAKE_CURRENT_SOURCE_DIR}/include
+        ${Vulkan_INCLUDE_DIRS}
 )
 if (VKH_USE_VMA)
-       TARGET_LINK_LIBRARIES("${PROJECT_NAME}"
-               PRIVATE
-                       VMA
-       )
+    TARGET_LINK_LIBRARIES("${PROJECT_NAME}"
+        PRIVATE
+            VMA
+    )
 ENDIF()
 TARGET_LINK_LIBRARIES("${PROJECT_NAME}"
-       PUBLIC
-               ${Vulkan_LIBRARIES}
-               Threads::Threads
+    PUBLIC
+        ${Vulkan_LIBRARIES}
+        Threads::Threads
 )
 INSTALL(TARGETS "${PROJECT_NAME}"
-       LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
-       RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
-       ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
-       PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
index 27e01f93b7afad25ad0180178668ef7f30428324..257880d85de0b23b0aa878061183803adb9e8846 100644 (file)
@@ -336,6 +336,8 @@ vkh_public
 VkFence         vkh_fence_create_signaled      (VkhDevice dev);
 vkh_public
 VkSemaphore     vkh_semaphore_create           (VkhDevice dev);
+
+#ifdef VK_VERSION_1_2
 vkh_public
 VkSemaphore            vkh_timeline_create                     (VkhDevice dev, uint64_t initialValue);
 vkh_public
@@ -346,6 +348,8 @@ void                        vkh_cmd_submit_timelined        (VkhQueue queue, VkCommandBuffer *pCmdBuff, VkSe
 vkh_public
 void                   vkh_cmd_submit_timelined2       (VkhQueue queue, VkCommandBuffer *pCmdBuff, VkSemaphore timelines[2],
                                                                                                 const uint64_t waits[2], const uint64_t signals[2]);
+#endif
+
 vkh_public
 VkEvent                        vkh_event_create                                (VkhDevice dev);
 
index fa508e592b61e31e12c37482a9e21b1876878ada..76c07401f050a53fd27023000ba8ae8787bf90b1 100644 (file)
 #define CHECK_BIT(var,pos) (((var)>>(pos)) & 1)
 
 VkFence vkh_fence_create (VkhDevice dev) {
-       VkFence fence;
-       VkFenceCreateInfo fenceInfo = { .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
-                                                                       .pNext = NULL,
-                                                                       .flags = 0 };
-       VK_CHECK_RESULT(vkCreateFence(dev->dev, &fenceInfo, NULL, &fence));
-       return fence;
+    VkFence fence;
+    VkFenceCreateInfo fenceInfo = { .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
+                                    .pNext = NULL,
+                                    .flags = 0 };
+    VK_CHECK_RESULT(vkCreateFence(dev->dev, &fenceInfo, NULL, &fence));
+    return fence;
 }
 VkFence vkh_fence_create_signaled (VkhDevice dev) {
-       VkFence fence;
-       VkFenceCreateInfo fenceInfo = { .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
-                                                                       .pNext = NULL,
-                                                                       .flags = VK_FENCE_CREATE_SIGNALED_BIT };
-       VK_CHECK_RESULT(vkCreateFence(dev->dev, &fenceInfo, NULL, &fence));
-       return fence;
+    VkFence fence;
+    VkFenceCreateInfo fenceInfo = { .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,
+                                    .pNext = NULL,
+                                    .flags = VK_FENCE_CREATE_SIGNALED_BIT };
+    VK_CHECK_RESULT(vkCreateFence(dev->dev, &fenceInfo, NULL, &fence));
+    return fence;
 }
 VkSemaphore vkh_semaphore_create (VkhDevice dev) {
-       VkSemaphore semaphore;
-       VkSemaphoreCreateInfo info = { .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
-                                                                  .pNext = NULL,
-                                                                  .flags = 0};
-       VK_CHECK_RESULT(vkCreateSemaphore(dev->dev, &info, NULL, &semaphore));
-       return semaphore;
+    VkSemaphore semaphore;
+    VkSemaphoreCreateInfo info = { .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
+                                   .pNext = NULL,
+                                   .flags = 0};
+    VK_CHECK_RESULT(vkCreateSemaphore(dev->dev, &info, NULL, &semaphore));
+    return semaphore;
 }
+
+#ifdef VK_VERSION_1_2
 VkSemaphore vkh_timeline_create (VkhDevice dev, uint64_t initialValue) {
-       VkSemaphore semaphore;
-       VkSemaphoreTypeCreateInfo timelineInfo = {
-               .sType = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, .pNext = NULL,
-               .semaphoreType = VK_SEMAPHORE_TYPE_TIMELINE,
-               .initialValue = initialValue};
-       VkSemaphoreCreateInfo info = { .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
-                                                                  .pNext = &timelineInfo,
-                                                                  .flags = 0};
-       VK_CHECK_RESULT(vkCreateSemaphore(dev->dev, &info, NULL, &semaphore));
-       return semaphore;
+    VkSemaphore semaphore;
+    VkSemaphoreTypeCreateInfo timelineInfo = {
+        .sType = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO, .pNext = NULL,
+        .semaphoreType = VK_SEMAPHORE_TYPE_TIMELINE,
+        .initialValue = initialValue};
+    VkSemaphoreCreateInfo info = { .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,
+                                   .pNext = &timelineInfo,
+                                   .flags = 0};
+    VK_CHECK_RESULT(vkCreateSemaphore(dev->dev, &info, NULL, &semaphore));
+    return semaphore;
 }
 
 VkResult vkh_timeline_wait (VkhDevice dev, VkSemaphore timeline, const uint64_t wait) {
-       VkSemaphoreWaitInfo waitInfo;
-       waitInfo.sType                  = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO;
-       waitInfo.pNext                  = NULL;
-       waitInfo.flags                  = 0;
-       waitInfo.semaphoreCount = 1;
-       waitInfo.pSemaphores    = &timeline;
-       waitInfo.pValues                = &wait;
-
-       return vkWaitSemaphores(dev->dev, &waitInfo, UINT64_MAX);
+    VkSemaphoreWaitInfo waitInfo;
+    waitInfo.sType                     = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO;
+    waitInfo.pNext                     = NULL;
+    waitInfo.flags                     = 0;
+    waitInfo.semaphoreCount = 1;
+    waitInfo.pSemaphores       = &timeline;
+    waitInfo.pValues           = &wait;
+
+    return vkWaitSemaphores(dev->dev, &waitInfo, UINT64_MAX);
 }
 void vkh_cmd_submit_timelined (VkhQueue queue, VkCommandBuffer *pCmdBuff, VkSemaphore timeline, const uint64_t wait, const uint64_t signal) {
-       static VkPipelineStageFlags stageFlags = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
-       VkTimelineSemaphoreSubmitInfo timelineInfo;
-       timelineInfo.sType = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO;
-       timelineInfo.pNext = NULL;
-       timelineInfo.waitSemaphoreValueCount = 1;
-       timelineInfo.pWaitSemaphoreValues = &wait;
-       timelineInfo.signalSemaphoreValueCount = 1;
-       timelineInfo.pSignalSemaphoreValues = &signal;
-
-       VkSubmitInfo submitInfo;
-       submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
-       submitInfo.pNext = &timelineInfo;
-       submitInfo.waitSemaphoreCount = 1;
-       submitInfo.pWaitSemaphores = &timeline;
-       submitInfo.signalSemaphoreCount  = 1;
-       submitInfo.pSignalSemaphores = &timeline;
-       submitInfo.pWaitDstStageMask = &stageFlags,
-       submitInfo.commandBufferCount = 1;
-       submitInfo.pCommandBuffers = pCmdBuff;
-
-       VK_CHECK_RESULT(vkQueueSubmit(queue->queue, 1, &submitInfo, VK_NULL_HANDLE));
+    static VkPipelineStageFlags stageFlags = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
+    VkTimelineSemaphoreSubmitInfo timelineInfo;
+    timelineInfo.sType = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO;
+    timelineInfo.pNext = NULL;
+    timelineInfo.waitSemaphoreValueCount = 1;
+    timelineInfo.pWaitSemaphoreValues = &wait;
+    timelineInfo.signalSemaphoreValueCount = 1;
+    timelineInfo.pSignalSemaphoreValues = &signal;
+
+    VkSubmitInfo submitInfo;
+    submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
+    submitInfo.pNext = &timelineInfo;
+    submitInfo.waitSemaphoreCount = 1;
+    submitInfo.pWaitSemaphores = &timeline;
+    submitInfo.signalSemaphoreCount  = 1;
+    submitInfo.pSignalSemaphores = &timeline;
+    submitInfo.pWaitDstStageMask = &stageFlags,
+    submitInfo.commandBufferCount = 1;
+    submitInfo.pCommandBuffers = pCmdBuff;
+
+    VK_CHECK_RESULT(vkQueueSubmit(queue->queue, 1, &submitInfo, VK_NULL_HANDLE));
 }
 void vkh_cmd_submit_timelined2 (VkhQueue queue, VkCommandBuffer *pCmdBuff, VkSemaphore timelines[2], const uint64_t waits[2], const uint64_t signals[2]) {
-       static VkPipelineStageFlags stageFlags[2] = { VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT };
-       VkTimelineSemaphoreSubmitInfo timelineInfo;
-       timelineInfo.sType = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO;
-       timelineInfo.pNext = NULL;
-       timelineInfo.waitSemaphoreValueCount = 2;
-       timelineInfo.pWaitSemaphoreValues = waits;
-       timelineInfo.signalSemaphoreValueCount = 2;
-       timelineInfo.pSignalSemaphoreValues = signals;
-
-       VkSubmitInfo submitInfo;
-       submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
-       submitInfo.pNext = &timelineInfo;
-       submitInfo.waitSemaphoreCount = 2;
-       submitInfo.pWaitSemaphores = timelines;
-       submitInfo.signalSemaphoreCount  = 2;
-       submitInfo.pSignalSemaphores = timelines;
-       submitInfo.pWaitDstStageMask = stageFlags,
-       submitInfo.commandBufferCount = 1;
-       submitInfo.pCommandBuffers = pCmdBuff;
-
-       VK_CHECK_RESULT(vkQueueSubmit(queue->queue, 1, &submitInfo, VK_NULL_HANDLE));
+    static VkPipelineStageFlags stageFlags[2] = { VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT };
+    VkTimelineSemaphoreSubmitInfo timelineInfo;
+    timelineInfo.sType = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO;
+    timelineInfo.pNext = NULL;
+    timelineInfo.waitSemaphoreValueCount = 2;
+    timelineInfo.pWaitSemaphoreValues = waits;
+    timelineInfo.signalSemaphoreValueCount = 2;
+    timelineInfo.pSignalSemaphoreValues = signals;
+
+    VkSubmitInfo submitInfo;
+    submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
+    submitInfo.pNext = &timelineInfo;
+    submitInfo.waitSemaphoreCount = 2;
+    submitInfo.pWaitSemaphores = timelines;
+    submitInfo.signalSemaphoreCount  = 2;
+    submitInfo.pSignalSemaphores = timelines;
+    submitInfo.pWaitDstStageMask = stageFlags,
+    submitInfo.commandBufferCount = 1;
+    submitInfo.pCommandBuffers = pCmdBuff;
+
+    VK_CHECK_RESULT(vkQueueSubmit(queue->queue, 1, &submitInfo, VK_NULL_HANDLE));
 }
+#endif
+
 VkEvent vkh_event_create (VkhDevice dev) {
-       VkEvent evt;
-       VkEventCreateInfo evtInfo = {.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO};
-       VK_CHECK_RESULT(vkCreateEvent (dev->dev, &evtInfo, NULL, &evt));
-       return evt;
+    VkEvent evt;
+    VkEventCreateInfo evtInfo = {.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO};
+    VK_CHECK_RESULT(vkCreateEvent (dev->dev, &evtInfo, NULL, &evt));
+    return evt;
 }
 VkCommandPool vkh_cmd_pool_create (VkhDevice dev, uint32_t qFamIndex, VkCommandPoolCreateFlags flags){
-       VkCommandPool cmdPool;
-       VkCommandPoolCreateInfo cmd_pool_info = { .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
-                                                                                         .pNext = NULL,
-                                                                                         .queueFamilyIndex = qFamIndex,
-                                                                                         .flags = flags };
-       VK_CHECK_RESULT (vkCreateCommandPool(dev->dev, &cmd_pool_info, NULL, &cmdPool));
-       return cmdPool;
+    VkCommandPool cmdPool;
+    VkCommandPoolCreateInfo cmd_pool_info = { .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,
+                                              .pNext = NULL,
+                                              .queueFamilyIndex = qFamIndex,
+                                              .flags = flags };
+    VK_CHECK_RESULT (vkCreateCommandPool(dev->dev, &cmd_pool_info, NULL, &cmdPool));
+    return cmdPool;
 }
 VkCommandBuffer vkh_cmd_buff_create (VkhDevice dev, VkCommandPool cmdPool, VkCommandBufferLevel level){
-       VkCommandBuffer cmdBuff;
-       VkCommandBufferAllocateInfo cmd = { .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
-                                                                               .pNext = NULL,
-                                                                               .commandPool = cmdPool,
-                                                                               .level = level,
-                                                                               .commandBufferCount = 1 };
-       VK_CHECK_RESULT (vkAllocateCommandBuffers (dev->dev, &cmd, &cmdBuff));
-       return cmdBuff;
+    VkCommandBuffer cmdBuff;
+    VkCommandBufferAllocateInfo cmd = { .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
+                                        .pNext = NULL,
+                                        .commandPool = cmdPool,
+                                        .level = level,
+                                        .commandBufferCount = 1 };
+    VK_CHECK_RESULT (vkAllocateCommandBuffers (dev->dev, &cmd, &cmdBuff));
+    return cmdBuff;
 }
 void vkh_cmd_buffs_create (VkhDevice dev, VkCommandPool cmdPool, VkCommandBufferLevel level, uint32_t count, VkCommandBuffer* cmdBuffs){
-       VkCommandBufferAllocateInfo cmd = { .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
-                                                                               .pNext = NULL,
-                                                                               .commandPool = cmdPool,
-                                                                               .level = level,
-                                                                               .commandBufferCount = count };
-       VK_CHECK_RESULT (vkAllocateCommandBuffers (dev->dev, &cmd, cmdBuffs));
+    VkCommandBufferAllocateInfo cmd = { .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
+                                        .pNext = NULL,
+                                        .commandPool = cmdPool,
+                                        .level = level,
+                                        .commandBufferCount = count };
+    VK_CHECK_RESULT (vkAllocateCommandBuffers (dev->dev, &cmd, cmdBuffs));
 }
 void vkh_cmd_begin(VkCommandBuffer cmdBuff, VkCommandBufferUsageFlags flags) {
-       VkCommandBufferBeginInfo cmd_buf_info = { .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
-                                                                                         .pNext = NULL,
-                                                                                         .flags = flags,
-                                                                                         .pInheritanceInfo = NULL };
+    VkCommandBufferBeginInfo cmd_buf_info = { .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
+                                              .pNext = NULL,
+                                              .flags = flags,
+                                              .pInheritanceInfo = NULL };
 
-       VK_CHECK_RESULT (vkBeginCommandBuffer (cmdBuff, &cmd_buf_info));
+    VK_CHECK_RESULT (vkBeginCommandBuffer (cmdBuff, &cmd_buf_info));
 }
 void vkh_cmd_end(VkCommandBuffer cmdBuff){
-       VK_CHECK_RESULT (vkEndCommandBuffer (cmdBuff));
+    VK_CHECK_RESULT (vkEndCommandBuffer (cmdBuff));
 }
 void vkh_cmd_submit(VkhQueue queue, VkCommandBuffer *pCmdBuff, VkFence fence){
-       VkPipelineStageFlags stageFlags = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
-       VkSubmitInfo submit_info = { .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
-                                                                .pWaitDstStageMask = &stageFlags,
-                                                                .commandBufferCount = 1,
-                                                                .pCommandBuffers = pCmdBuff};
-       VK_CHECK_RESULT(vkQueueSubmit(queue->queue, 1, &submit_info, fence));
+    VkPipelineStageFlags stageFlags = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
+    VkSubmitInfo submit_info = { .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
+                                 .pWaitDstStageMask = &stageFlags,
+                                 .commandBufferCount = 1,
+                                 .pCommandBuffers = pCmdBuff};
+    VK_CHECK_RESULT(vkQueueSubmit(queue->queue, 1, &submit_info, fence));
 }
 void vkh_cmd_submit_with_semaphores(VkhQueue queue, VkCommandBuffer *pCmdBuff, VkSemaphore waitSemaphore,
-                                                                       VkSemaphore signalSemaphore, VkFence fence){
-
-       VkPipelineStageFlags stageFlags = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
-       VkSubmitInfo submit_info = { .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
-                                                                .pWaitDstStageMask = &stageFlags,
-                                                                .commandBufferCount = 1,
-                                                                .pCommandBuffers = pCmdBuff};
-
-       if (waitSemaphore != VK_NULL_HANDLE){
-               submit_info.waitSemaphoreCount = 1;
-               submit_info.pWaitSemaphores = &waitSemaphore;
-       }
-       if (signalSemaphore != VK_NULL_HANDLE){
-               submit_info.signalSemaphoreCount = 1;
-               submit_info.pSignalSemaphores= &signalSemaphore;
-       }
-
-       VK_CHECK_RESULT(vkQueueSubmit(queue->queue, 1, &submit_info, fence));
+                                    VkSemaphore signalSemaphore, VkFence fence){
+
+    VkPipelineStageFlags stageFlags = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;
+    VkSubmitInfo submit_info = { .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,
+                                 .pWaitDstStageMask = &stageFlags,
+                                 .commandBufferCount = 1,
+                                 .pCommandBuffers = pCmdBuff};
+
+    if (waitSemaphore != VK_NULL_HANDLE){
+        submit_info.waitSemaphoreCount = 1;
+        submit_info.pWaitSemaphores = &waitSemaphore;
+    }
+    if (signalSemaphore != VK_NULL_HANDLE){
+        submit_info.signalSemaphoreCount = 1;
+        submit_info.pSignalSemaphores= &signalSemaphore;
+    }
+
+    VK_CHECK_RESULT(vkQueueSubmit(queue->queue, 1, &submit_info, fence));
 }
 
 
 void set_image_layout(VkCommandBuffer cmdBuff, VkImage image, VkImageAspectFlags aspectMask, VkImageLayout old_image_layout,
-                                         VkImageLayout new_image_layout, VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages) {
-       VkImageSubresourceRange subres = {aspectMask,0,1,0,1};
-       set_image_layout_subres(cmdBuff, image, subres, old_image_layout, new_image_layout, src_stages, dest_stages);
+                      VkImageLayout new_image_layout, VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages) {
+    VkImageSubresourceRange subres = {aspectMask,0,1,0,1};
+    set_image_layout_subres(cmdBuff, image, subres, old_image_layout, new_image_layout, src_stages, dest_stages);
 }
 
 void set_image_layout_subres(VkCommandBuffer cmdBuff, VkImage image, VkImageSubresourceRange subresourceRange,
-                                                        VkImageLayout old_image_layout, VkImageLayout new_image_layout,
-                                                        VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages) {
-       VkImageMemoryBarrier image_memory_barrier = { .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
-                                                                                                 .oldLayout = old_image_layout,
-                                                                                                 .newLayout = new_image_layout,
-                                                                                                 .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-                                                                                                 .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
-                                                                                                 .image = image,
-                                                                                                 .subresourceRange = subresourceRange};
-
-       switch (old_image_layout) {
-       case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
-               image_memory_barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
-               break;
-
-       case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
-               image_memory_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
-               break;
-
-       case VK_IMAGE_LAYOUT_PREINITIALIZED:
-               image_memory_barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT;
-               break;
-
-       default:
-               break;
-       }
-
-       switch (new_image_layout) {
-       case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
-               image_memory_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
-               break;
-
-       case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
-               image_memory_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
-               break;
-
-       case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
-               image_memory_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
-               break;
-
-       case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
-               image_memory_barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
-               break;
-
-       case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
-               image_memory_barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
-               break;
-
-       default:
-               break;
-       }
-
-       vkCmdPipelineBarrier(cmdBuff, src_stages, dest_stages, 0, 0, NULL, 0, NULL, 1, &image_memory_barrier);
+                             VkImageLayout old_image_layout, VkImageLayout new_image_layout,
+                             VkPipelineStageFlags src_stages, VkPipelineStageFlags dest_stages) {
+    VkImageMemoryBarrier image_memory_barrier = { .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
+                                                  .oldLayout = old_image_layout,
+                                                  .newLayout = new_image_layout,
+                                                  .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
+                                                  .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
+                                                  .image = image,
+                                                  .subresourceRange = subresourceRange};
+
+    switch (old_image_layout) {
+    case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
+        image_memory_barrier.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
+        break;
+
+    case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
+        image_memory_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
+        break;
+
+    case VK_IMAGE_LAYOUT_PREINITIALIZED:
+        image_memory_barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT;
+        break;
+
+    default:
+        break;
+    }
+
+    switch (new_image_layout) {
+    case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL:
+        image_memory_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
+        break;
+
+    case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL:
+        image_memory_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
+        break;
+
+    case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
+        image_memory_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
+        break;
+
+    case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
+        image_memory_barrier.dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
+        break;
+
+    case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL:
+        image_memory_barrier.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
+        break;
+
+    default:
+        break;
+    }
+
+    vkCmdPipelineBarrier(cmdBuff, src_stages, dest_stages, 0, 0, NULL, 0, NULL, 1, &image_memory_barrier);
 }
 
 bool vkh_memory_type_from_properties(VkPhysicalDeviceMemoryProperties* memory_properties, uint32_t typeBits, VkhMemoryUsage memUsage, uint32_t *typeIndex) {
-       VkMemoryPropertyFlagBits memFlags = 0;
-       switch(memUsage) {
-       case VKH_MEMORY_USAGE_GPU_ONLY:
-               memFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
-               break;
-       case VKH_MEMORY_USAGE_CPU_ONLY:
-               memFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
-               break;
-       case VKH_MEMORY_USAGE_CPU_TO_GPU:
-               memFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
-               break;
-       case VKH_MEMORY_USAGE_GPU_TO_CPU:
-               memFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
-               break;
-       case VKH_MEMORY_USAGE_CPU_COPY:
-               memFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
-               break;
-       case VKH_MEMORY_USAGE_GPU_LAZILY_ALLOCATED:
-               memFlags = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;
-               break;
-       }
-
-       // Search memtypes to find first index with those properties
-       for (uint32_t i = 0; i < memory_properties->memoryTypeCount; i++) {
-               if (CHECK_BIT(typeBits, i)) {
-                       // Type is available, does it match user properties?
-                       if ((memory_properties->memoryTypes[i].propertyFlags & memFlags) == memFlags) {
-                               *typeIndex = i;
-                               return true;
-                       }
-               }
-       }
-       // No memory types matched, return failure
-       return false;
+    VkMemoryPropertyFlagBits memFlags = 0;
+    switch(memUsage) {
+    case VKH_MEMORY_USAGE_GPU_ONLY:
+        memFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+        break;
+    case VKH_MEMORY_USAGE_CPU_ONLY:
+        memFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
+        break;
+    case VKH_MEMORY_USAGE_CPU_TO_GPU:
+        memFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
+        break;
+    case VKH_MEMORY_USAGE_GPU_TO_CPU:
+        memFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+        break;
+    case VKH_MEMORY_USAGE_CPU_COPY:
+        memFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+        break;
+    case VKH_MEMORY_USAGE_GPU_LAZILY_ALLOCATED:
+        memFlags = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;
+        break;
+    }
+
+    // Search memtypes to find first index with those properties
+    for (uint32_t i = 0; i < memory_properties->memoryTypeCount; i++) {
+        if (CHECK_BIT(typeBits, i)) {
+            // Type is available, does it match user properties?
+            if ((memory_properties->memoryTypes[i].propertyFlags & memFlags) == memFlags) {
+                *typeIndex = i;
+                return true;
+            }
+        }
+    }
+    // No memory types matched, return failure
+    return false;
 }
 
 VkShaderModule vkh_load_module(VkDevice dev, const char* path){
-       VkShaderModule module;
-       size_t filelength;
-       uint32_t* pCode = (uint32_t*)read_spv(path, &filelength);
-       VkShaderModuleCreateInfo createInfo = { .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
-                                                                                       .pCode = pCode,
-                                                                                       .codeSize = filelength };
-       VK_CHECK_RESULT(vkCreateShaderModule(dev, &createInfo, NULL, &module));
-       free (pCode);
-       //assert(module != VK_NULL_HANDLE);
-       return module;
+    VkShaderModule module;
+    size_t filelength;
+    uint32_t* pCode = (uint32_t*)read_spv(path, &filelength);
+    VkShaderModuleCreateInfo createInfo = { .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,
+                                            .pCode = pCode,
+                                            .codeSize = filelength };
+    VK_CHECK_RESULT(vkCreateShaderModule(dev, &createInfo, NULL, &module));
+    free (pCode);
+    //assert(module != VK_NULL_HANDLE);
+    return module;
 }
 
 char *read_spv(const char *filename, size_t *psize) {
-       size_t size;
-       size_t retval;
-       void *shader_code;
+    size_t size;
+    size_t retval;
+    void *shader_code;
 
 #if (defined(VK_USE_PLATFORM_IOS_MVK) || defined(VK_USE_PLATFORM_MACOS_MVK))
-       filename =[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @(filename)].UTF8String;
+    filename =[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @(filename)].UTF8String;
 #endif
 
-       FILE *fp = fopen(filename, "rb");
-       if (!fp)
-               return NULL;
+    FILE *fp = fopen(filename, "rb");
+    if (!fp)
+        return NULL;
 
-       fseek(fp, 0L, SEEK_END);
-       size = (size_t)ftell(fp);
+    fseek(fp, 0L, SEEK_END);
+    size = (size_t)ftell(fp);
 
-       fseek(fp, 0L, SEEK_SET);
+    fseek(fp, 0L, SEEK_SET);
 
-       shader_code = malloc(size);
-       retval = fread(shader_code, size, 1, fp);
-       assert(retval == 1);
+    shader_code = malloc(size);
+    retval = fread(shader_code, size, 1, fp);
+    assert(retval == 1);
 
-       *psize = size;
+    *psize = size;
 
-       fclose(fp);
-       return shader_code;
+    fclose(fp);
+    return shader_code;
 }
 
 // Read file into array of bytes, and cast to uint32_t*, then return.
 // The data has been padded, so that it fits into an array uint32_t.
 uint32_t* readFile(uint32_t* length, const char* filename) {
 
-       FILE* fp = fopen(filename, "rb");
-       if (fp == 0) {
-               printf("Could not find or open file: %s\n", filename);
-       }
+    FILE* fp = fopen(filename, "rb");
+    if (fp == 0) {
+        printf("Could not find or open file: %s\n", filename);
+    }
 
-       // get file size.
-       fseek(fp, 0, SEEK_END);
-       long filesize = ftell(fp);
-       fseek(fp, 0, SEEK_SET);
+    // get file size.
+    fseek(fp, 0, SEEK_END);
+    long filesize = ftell(fp);
+    fseek(fp, 0, SEEK_SET);
 
-       long filesizepadded = (long)(ceil(filesize / 4.0)) * 4;
+    long filesizepadded = (long)(ceil(filesize / 4.0)) * 4;
 
-       // read file contents.
-       char *str = (char*)malloc(filesizepadded*sizeof(char));
-       fread(str, filesize, sizeof(char), fp);
-       fclose(fp);
+    // read file contents.
+    char *str = (char*)malloc(filesizepadded*sizeof(char));
+    fread(str, filesize, sizeof(char), fp);
+    fclose(fp);
 
-       // data padding.
-       for (int i = filesize; i < filesizepadded; i++)
-               str[i] = 0;
+    // data padding.
+    for (int i = filesize; i < filesizepadded; i++)
+        str[i] = 0;
 
-       *length = filesizepadded;
-       return (uint32_t *)str;
+    *length = filesizepadded;
+    return (uint32_t *)str;
 }
 
 void dumpLayerExts () {
-       printf ("Layers:\n");
-       uint32_t instance_layer_count;
-       VK_CHECK_RESULT (vkEnumerateInstanceLayerProperties(&instance_layer_count, NULL));
-       if (instance_layer_count == 0)
-               return;
-       VkLayerProperties* vk_props = (VkLayerProperties*)malloc (instance_layer_count * sizeof(VkLayerProperties));
-       VK_CHECK_RESULT (vkEnumerateInstanceLayerProperties(&instance_layer_count, vk_props));
-
-       for (uint32_t i = 0; i < instance_layer_count; i++) {
-               printf ("\t%s, %s\n", vk_props[i].layerName, vk_props[i].description);
-               /*                res = init_global_extension_properties(layer_props);
-               if (res) return res;
-               info.instance_layer_properties.push_back(layer_props);*/
-       }
-       free(vk_props);
+    printf ("Layers:\n");
+    uint32_t instance_layer_count;
+    VK_CHECK_RESULT (vkEnumerateInstanceLayerProperties(&instance_layer_count, NULL));
+    if (instance_layer_count == 0)
+        return;
+    VkLayerProperties* vk_props = (VkLayerProperties*)malloc (instance_layer_count * sizeof(VkLayerProperties));
+    VK_CHECK_RESULT (vkEnumerateInstanceLayerProperties(&instance_layer_count, vk_props));
+
+    for (uint32_t i = 0; i < instance_layer_count; i++) {
+        printf ("\t%s, %s\n", vk_props[i].layerName, vk_props[i].description);
+        /*               res = init_global_extension_properties(layer_props);
+        if (res) return res;
+        info.instance_layer_properties.push_back(layer_props);*/
+    }
+    free(vk_props);
 }
 
 static VkExtensionProperties* instExtProps;