From 2fce392c750852815282044c03c4b00036660453 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Fri, 31 Mar 2023 22:09:50 +0300 Subject: [PATCH] ugh --- src/app.c | 57 +++++++++++++++++++++++++++++++++++++++++++++------------ src/vk.c | 30 ++++++++++++++++++++++++++---- src/vk.h | 7 ++++++- 3 files changed, 77 insertions(+), 17 deletions(-) diff --git a/src/app.c b/src/app.c index ae0a1f1..7fc68bd 100644 --- a/src/app.c +++ b/src/app.c @@ -6,12 +6,13 @@ int win_width, win_height; -static int rpass, pipeln, fb; +static int rpass, pipeln, *fb, num_swap_img; static VkSemaphore sem_getimg, sem_draw; static VkQueue queue; int app_init(void) { + int i; unsigned int flags; if(vk_init(VKINIT_DEPTH, &flags) == -1) { @@ -22,14 +23,27 @@ int app_init(void) return -1; } + /* force swapchain creation, to find out how many framebuffers to create */ + vk_reshape(win_width, win_height); + if((num_swap_img = vk_num_swap_images()) <= 0) { + return -1; + } + if(!(fb = malloc(num_swap_img * sizeof *fb))) { + return -1; + } + rpass = vk_create_rpass(); - fb = vk_create_fb(); - vk_fb_size(fb, win_width, win_height); - vk_fb_rpass(fb, rpass); + for(i=0; ioffset.x = x; + r->offset.y = y; + r->extent.width = w; + r->extent.height = h; +} + + #define ARRSZ(arr) (sizeof arr / sizeof *arr) static const char *known_layer_list[] = { "VK_LAYER_GOOGLE_threading", diff --git a/src/vk.h b/src/vk.h index 301474c..b9a8fb0 100644 --- a/src/vk.h +++ b/src/vk.h @@ -57,8 +57,11 @@ void vk_cleanup(void); int vk_reshape(int xsz, int ysz); +/* returns the number of swapchain images */ +int vk_num_swap_images(void); +VkImageView vk_swap_image(int idx); /* returns the image index, or -1 on failure. Pass optional semaphore to signal */ -int vk_next_image(VkSemaphore sem); +int vk_next_swap_image(VkSemaphore sem); int vk_submit(VkQueue q, VkCommandBuffer cmdbuf, VkSemaphore semwait, VkSemaphore semsig); int vk_present(VkQueue q, int imgid, VkSemaphore semwait); @@ -117,5 +120,7 @@ void vk_free_shader(VkShaderModule sdr); VkSemaphore vk_create_sem(void); void vk_free_sem(VkSemaphore sem); +/* random helpers */ +void vk_rect(VkRect2D *r, int x, int y, int w, int h); #endif /* VK_H_ */ -- 1.7.10.4