#ifndef INITIALIZERS_H #define INITIALIZERS_H // Normal header #include "types.h" namespace vkinit { VkCommandPoolCreateInfo commandPoolCreateInfo( uint32_t queueFamilyIndex, VkCommandPoolCreateFlags flags = 0 ); VkCommandBufferAllocateInfo commandBufferAllocateInfo( VkCommandPool pool, uint32_t count ); VkFenceCreateInfo fenceCreateInfo( VkFenceCreateFlags flags = 0 ); VkSemaphoreCreateInfo semaphoreCreateInfo ( VkSemaphoreCreateFlags flags = 0 ); VkCommandBufferBeginInfo commandBufferBeginInfo ( VkCommandBufferUsageFlags flags = 0 ); VkImageSubresourceRange imageSubresourceRange( VkImageAspectFlags aspectMask ); VkSemaphoreSubmitInfo semaphoreSubmitInfo( VkPipelineStageFlags2 stageMask, VkSemaphore semaphore ); VkCommandBufferSubmitInfo commandBufferSubmitInfo ( VkCommandBuffer cmd ); VkSubmitInfo2 submitInfo( VkCommandBufferSubmitInfo* cmd, VkSemaphoreSubmitInfo* signalSemaphoreInfo, VkSemaphoreSubmitInfo* waitSemaphoreInfo ); } #endif #ifdef INITIALIZERS_IMPL #ifndef INITIALIZERS_IMPL_H #define INITIALIZERS_IMPL_H // Implementation namespace vkinit { VkCommandPoolCreateInfo commandPoolCreateInfo( uint32_t queueFamilyIndex, VkCommandPoolCreateFlags flags ) { VkCommandPoolCreateInfo info = {}; info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO; info.pNext = nullptr; info.queueFamilyIndex = queueFamilyIndex; info.flags = flags; return info; } VkCommandBufferAllocateInfo commandBufferAllocateInfo( VkCommandPool pool, uint32_t count ) { VkCommandBufferAllocateInfo info = {}; info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO; info.pNext = nullptr; info.commandPool = pool; info.commandBufferCount = count; info.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; return info; } VkFenceCreateInfo fenceCreateInfo( VkFenceCreateFlags flags /*= 0 */ ) { VkFenceCreateInfo info = {}; info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; info.pNext = nullptr; info.flags = flags; return info; } VkSemaphoreCreateInfo semaphoreCreateInfo ( VkSemaphoreCreateFlags flags /*= 0*/ ) { VkSemaphoreCreateInfo info = {}; info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; info.pNext = nullptr; info.flags = flags; return info; } VkCommandBufferBeginInfo commandBufferBeginInfo ( VkCommandBufferUsageFlags flags /*= 0*/ ) { VkCommandBufferBeginInfo info = {}; info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; info.pNext = nullptr; info.pInheritanceInfo = nullptr; info.flags = flags; return info; } VkImageSubresourceRange imageSubresourceRange( VkImageAspectFlags aspectMask ) { VkImageSubresourceRange subImage {}; subImage.aspectMask = aspectMask; subImage.baseMipLevel = 0; subImage.levelCount = VK_REMAINING_MIP_LEVELS; subImage.baseArrayLayer = 0; subImage.layerCount = VK_REMAINING_ARRAY_LAYERS; return subImage; } VkSemaphoreSubmitInfo semaphoreSubmitInfo( VkPipelineStageFlags2 stageMask, VkSemaphore semaphore ) { VkSemaphoreSubmitInfo submitInfo{}; submitInfo.sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO; submitInfo.pNext = nullptr; submitInfo.semaphore = semaphore; submitInfo.stageMask = stageMask; submitInfo.deviceIndex = 0; submitInfo.value = 1; return submitInfo; } VkCommandBufferSubmitInfo commandBufferSubmitInfo ( VkCommandBuffer cmd ) { VkCommandBufferSubmitInfo info {}; info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO; info.pNext = nullptr; info.commandBuffer = cmd; info.deviceMask = 0; return info; } VkSubmitInfo2 submitInfo( VkCommandBufferSubmitInfo* cmd, VkSemaphoreSubmitInfo* signalSemaphoreInfo, VkSemaphoreSubmitInfo* waitSemaphoreInfo ) { VkSubmitInfo2 info = {}; info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO; info.pNext = nullptr; info.waitSemaphoreInfoCount = waitSemaphoreInfo == nullptr ? 0 : 1; info.pWaitSemaphoreInfos = waitSemaphoreInfo; info.signalSemaphoreInfoCount = signalSemaphoreInfo == nullptr ? 0 : 1; info.pSignalSemaphoreInfos = signalSemaphoreInfo; info.commandBufferInfoCount = 1; info.pCommandBufferInfos = cmd; return info; } } #endif #endif