rewriting swapchain/image/allocation parts
[demo] / src / vulkan / vkutil.h
1 #ifndef VKUTIL_H_
2 #define VKUTIL_H_
3
4 #include <vulkan/vulkan.h>
5 #include <vector>
6
7 extern VkPhysicalDevice vk_physical;
8 extern VkDevice vk_device;
9 extern VkCommandPool vk_pool;
10 extern VkQueue vk_queue;
11 extern VkSwapchainKHR vk_swapchain;
12 extern VkSurfaceKHR vk_surface;
13
14 extern VkPipeline *vkgparent_pipeline;
15 extern VkDescriptorSet *vkdescset;
16 extern VkFramebuffer *vkfbufs;
17 extern VkRenderPass vkrpass;
18 extern VkInstance vkinst;
19 extern VkCommandBuffer vkcmdbuf;        /* primary command buffer */
20 extern int vkqfamily;
21
22 /* presentation */
23 extern int vknum_swapchain_images;
24 extern VkImage *vkswapchain_images;
25 extern VkImageView *vkswapchain_views;
26 extern int vk_curr_swapchain_image;
27 extern VkSemaphore vk_img_avail_sema;
28 extern VkSemaphore vk_rend_done_sema;
29
30 struct vku_buffer {
31         VkBuffer buf;
32         VkDeviceMemory mem_pool;
33         int mem_start, mem_size;
34 };
35
36 /* extensions */
37 bool vku_have_extension(const char *name);
38 bool vku_have_device_extension(const char *name);
39
40 /* device */
41 bool vku_create_device();
42 void vku_cleanup();
43
44 /* semaphores */
45 bool vku_create_semaphores();
46
47 /* command buffers */
48 VkCommandBuffer vku_alloc_cmdbuf(VkCommandPool pool, VkCommandBufferLevel level);
49 void vku_free_cmdbuf(VkCommandPool pool, VkCommandBuffer buf);
50
51 void vku_begin_cmdbuf(VkCommandBuffer buf, unsigned int flags);
52 void vku_end_cmdbuf(VkCommandBuffer buf);
53 void vku_reset_cmdbuf(VkCommandBuffer buf);
54 void vku_submit_cmdbuf(VkQueue q, VkCommandBuffer buf, VkFence done_fence);
55
56 /* swapchain */
57 VkSwapchainKHR vku_create_swapchain(VkSurfaceKHR surf, int xsz, int ysz, int n,
58                 VkPresentModeKHR pmode, VkSwapchainKHR prev);
59 VkImage *vku_get_swapchain_images(VkSwapchainKHR sc, int *count);
60 VkImageView *vku_create_image_views(VkImage *images, int count);
61 int vku_get_next_image(VkSwapchainKHR sc);
62 void vku_present(VkSwapchainKHR sc, int img_idx);
63
64 /* rederpass */
65 bool vku_create_renderpass();
66
67 /* framebuffer */
68 bool vku_create_framebuffers(VkImageView *image_views, int count, int w, int h);
69
70 /* buffers */
71 vku_buffer *vku_create_buffer(int sz, unsigned int usage);
72 void vku_destroy_buffer(vku_buffer *buf);
73 void vku_cmd_copybuf(VkCommandBuffer cmdbuf, VkBuffer dest, int doffs,
74         VkBuffer src, int soffs, int size);
75
76 /* other */
77 const char *vku_get_vulkan_error_str(VkResult error);
78
79 /* pipeline */
80 bool vku_create_graphics_pipeline(VkPipelineLayout *layout);
81
82 /* descriptor set */
83 //bool vku_create_descriptor_set()
84
85 #endif // VKUTIL_H_