From: John Tsiombikas Date: Fri, 31 Mar 2023 19:09:50 +0000 (+0300) Subject: ugh X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=vktest3;a=commitdiff_plain;h=2fce392c750852815282044c03c4b00036660453 ugh --- 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_ */