backup
[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 extern VkInstance vk_instance;
14 extern int vk_qfamily;
15 extern VkDescriptorPool vk_dpool;
16 extern VkRenderPass vk_renderpass;
17
18 struct vku_buffer {
19         VkBuffer buf;
20         VkDeviceMemory mem_pool;
21         int mem_start, mem_size;
22 };
23
24 struct vku_descriptor {
25         VkDescriptorSetLayout layout;
26         VkDescriptorType type;
27         VkFlags stage_flags;
28         int binding_point;
29         int size;
30 };
31
32 struct vku_pipeline {
33 };
34
35 struct vku_pipeline_info {
36         /* shader stages */
37         VkShaderModule vs;
38         VkShaderModule fs;
39
40         /* states info */
41
42         VkPipelineShaderStageCreateInfo inf_shader_stage;
43
44         VkPipelineVertexInputStateCreateInfo inf_vertex_input;
45
46         VkPipelineInputAssemblyStateCreateInfo inf_input_asm;
47
48         VkPipelineTessellationStateCreateInfo inf_tessel;
49
50         VkPipelineViewportStateCreateInfo inf_viewport;
51         VkPipelineRasterizationStateCreateInfo inf_raster;
52         VkPipelineMultisampleStateCreateInfo inf_multisample;
53         VkPipelineDepthStencilStateCreateInfo inf_depth_stencil;
54         VkPipelineColorBlendStateCreateInfo inf_colorblend;
55
56         VkPipelineDynamicStateCreateInfo inf_dynamic_state;
57
58         VkPipelineLayout layout;
59         VkRenderPass renderpass;
60         uint32_t subpass;
61 };
62
63 /* extensions */
64 bool vku_have_extension(const char *name);
65 bool vku_have_device_extension(const char *name);
66
67 /* device */
68 bool vku_create_device();
69 void vku_cleanup();
70
71 /* command buffers */
72 VkCommandBuffer vku_alloc_cmdbuf(VkCommandPool pool, VkCommandBufferLevel level);
73 bool vku_alloc_cmdbufs(VkCommandPool pool, VkCommandBufferLevel level, unsigned int count, VkCommandBuffer *buf_array);
74 void vku_free_cmdbuf(VkCommandPool pool, VkCommandBuffer buf);
75
76 void vku_begin_cmdbuf(VkCommandBuffer buf, unsigned int flags);
77 void vku_end_cmdbuf(VkCommandBuffer buf);
78 void vku_reset_cmdbuf(VkCommandBuffer buf);
79 void vku_submit_cmdbuf(VkQueue q, VkCommandBuffer buf, VkFence done_fence);
80
81 bool vku_get_surface_format(VkPhysicalDevice gpu, VkSurfaceKHR surface, VkSurfaceFormatKHR *sformat);
82 VkColorSpaceKHR vku_get_surface_colorspace(VkPhysicalDevice gpu, VkSurfaceKHR surface);
83
84 int vku_get_next_image(VkSwapchainKHR sc);
85 void vku_present(VkSwapchainKHR sc, int img_idx);
86
87 /* buffers */
88 vku_buffer *vku_create_buffer(int sz, unsigned int usage);
89 void vku_destroy_buffer(vku_buffer *buf);
90 bool vku_update_buffer(vku_buffer *buf, int size, void *data);
91
92 void vku_cmd_copybuf(VkCommandBuffer cmdbuf, VkBuffer dest, int doffs,
93         VkBuffer src, int soffs, int size);
94
95 /* other */
96 const char *vku_get_vulkan_error_str(VkResult error);
97
98 /* pipelines */
99 vku_descriptor *vku_create_descriptor(VkDescriptorType type, VkFlags stage,
100                 int binding_point, int size);
101 void vku_destroy_descriptor(vku_descriptor *descriptor);
102
103 bool vku_create_descriptor_pool(vku_descriptor **descriptors, int num_desc,
104                 VkDescriptorSet set);
105 void vku_destroy_descriptor_pool();
106
107 #endif // VKUTIL_H_