struct Vulkan_Framebuffers
{
uint32_t imageIndex;
VkImageView view;
VkFramebuffer frameBuffer;
// Allocation for all images (Win32_Alloc, ok for now)
VkImage* images;
};
struct Vulkan_Queue
{
VkQueue queue;
VkSemaphore semaphoreSubmit;
};
struct VulkanSystem
{
VkInstance instance;
VkPhysicalDevice physicalDevice;
VkDevice device;
VkSurfaceKHR surfaceKHR;
VkSwapchainKHR swapchainKHR;
VkSemaphore semaphoreNextImage;
VkCommandBuffer commandBuffer;
VkCommandPool commandPool;
Vulkan_Framebuffers frameBuffers;
Vulkan_Queue queue;
VkRenderPass renderPass;
};
// Get the Swapchain images
int GetSwapchainImages(VkDevice device, VkSwapchainKHR swapchain, VkSemaphore semaphore, VkImage** pImages, uint32_t* pImageIndex)
{
VkResult res;
uint32_t swapchainCount;
res = vkGetSwapchainImagesKHR(device, swapchain, &swapchainCount, 0);
if (res != VK_SUCCESS)
return 1;
VkImage* image = (VkImage*)Win32_Alloc(sizeof(VkImage)*swapchainCount);
res = vkGetSwapchainImagesKHR(device, swapchain, &swapchainCount, image);
if (res != VK_SUCCESS)
return 1;
uint32_t imageIndex;
res = vkAcquireNextImageKHR(device, swapchain, 0, semaphore, 0, &imageIndex);
VkImage images = image[imageIndex];
*pImages = image;
*pImageIndex = imageIndex;
//Win32_Free(image);
return res;
}