From: John Tsiombikas Date: Sun, 8 Sep 2024 04:13:00 +0000 (+0300) Subject: no comment X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=6fa47ee7f5823501ef316c0ff0b8f04f800e3fa0;p=vktest3 no comment --- diff --git a/.gitignore b/.gitignore index 537ac62..5f30f93 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,7 @@ *.swp *.d vktest +.vs/ +*.vcxproj.user +vktest3/ +x64/ diff --git a/src/app.c b/src/app.c index 6f9e8f9..7fff41e 100644 --- a/src/app.c +++ b/src/app.c @@ -3,10 +3,18 @@ #include "app.h" #include "vk.h" +struct swapchain { + int fb; + VkImageView img; + VkSemaphore sem_getimg; + VkFence imgfence; +}; + int win_width, win_height; -static int rpass, pipeln, *fb, num_swap_img; -static VkSemaphore sem_getimg, sem_draw; +static int rpass, pipeln, num_swap_img; +static struct swapchain *swapchain; +static VkSemaphore sem_draw; static VkQueue queue; int app_init(void) @@ -27,31 +35,38 @@ int app_init(void) if((num_swap_img = vk_num_swap_images()) <= 0) { return -1; } - if(!(fb = malloc(num_swap_img * sizeof *fb))) { + if(!(swapchain = malloc(num_swap_img * sizeof *swapchain))) { return -1; } rpass = vk_create_rpass(); for(i=0; ileft = x; diff --git a/src/vk.c b/src/vk.c index c73cf31..9c03342 100644 --- a/src/vk.c +++ b/src/vk.c @@ -273,10 +273,11 @@ VkImageView vk_swap_image(int idx) int vk_next_swap_image(VkSemaphore sem) { uint32_t idx; - if(vkAcquireNextImageKHR(vkdev, vksc, UINT64_MAX, sem, 0, &idx) != 0) { - return -1; + VkResult res = vkAcquireNextImageKHR(vkdev, vksc, UINT64_MAX, sem, 0, &idx); + if(res == VK_SUCCESS || res == VK_SUBOPTIMAL_KHR) { + return (int)idx; } - return (int)idx; + return -1; } int vk_submit(VkQueue q, VkCommandBuffer cmdbuf, VkSemaphore semwait, VkSemaphore semsig) @@ -1088,6 +1089,22 @@ void vk_free_sem(VkSemaphore sem) vkDestroySemaphore(vkdev, sem, 0); } +VkFence vk_create_fence(void) +{ + VkFence fence; + VkFenceCreateInfo finf = {0}; + + finf.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; + if(vkCreateFence(vkdev, &finf, 0, &fence) != 0) { + return 0; + } + return fence; +} + +void vk_free_fence(VkFence fence) +{ + vkDestroyFence(vkdev, fence, 0); +} void vk_rect(VkRect2D *r, int x, int y, int w, int h) { diff --git a/src/vk.h b/src/vk.h index accc10c..4beedf8 100644 --- a/src/vk.h +++ b/src/vk.h @@ -128,6 +128,9 @@ void vk_free_shader(VkShaderModule sdr); VkSemaphore vk_create_sem(void); void vk_free_sem(VkSemaphore sem); +VkFence vk_create_fence(void); +void vk_free_fence(VkFence fence); + /* random helpers */ void vk_rect(VkRect2D *r, int x, int y, int w, int h);