backup
[demo] / src / vulkan / vkutil.h
index 853349f..775fd27 100644 (file)
@@ -4,23 +4,16 @@
 #include <vulkan/vulkan.h>
 #include <vector>
 
-extern VkPipeline *vkgraphics_pipeline;
-extern VkDescriptorSet *vkdescset;
-extern VkFramebuffer *vkfbufs;
-extern VkRenderPass vkrpass;
-extern VkSwapchainKHR vkswapchain;
-extern VkImage *vkswapchain_images;
-extern VkImageView *vkswapchain_views;
-extern int vknum_swapchain_images;
-extern VkSurfaceKHR vksurface;
-extern VkInstance vkinst;
-extern VkPhysicalDevice vkpdev;
-extern VkDevice vkdev;
-extern VkQueue vkq;
-extern VkCommandPool vkcmdpool;
-extern VkCommandBuffer vkcmdbuf;       /* primary command buffer */
-extern int vkqfamily;
-extern int vknext_swapchain_image;
+extern VkPhysicalDevice vk_physical;
+extern VkDevice vk_device;
+extern VkCommandPool vk_pool;
+extern VkQueue vk_queue;
+extern VkSwapchainKHR vk_swapchain;
+extern VkSurfaceKHR vk_surface;
+extern VkInstance vk_instance;
+extern int vk_qfamily;
+extern VkDescriptorPool vk_dpool;
+extern VkRenderPass vk_renderpass;
 
 struct vku_buffer {
        VkBuffer buf;
@@ -28,6 +21,45 @@ struct vku_buffer {
        int mem_start, mem_size;
 };
 
+struct vku_descriptor {
+       VkDescriptorSetLayout layout;
+       VkDescriptorType type;
+       VkFlags stage_flags;
+       int binding_point;
+       int size;
+};
+
+struct vku_pipeline {
+};
+
+struct vku_pipeline_info {
+       /* shader stages */
+       VkShaderModule vs;
+       VkShaderModule fs;
+
+       /* states info */
+
+       VkPipelineShaderStageCreateInfo inf_shader_stage;
+
+       VkPipelineVertexInputStateCreateInfo inf_vertex_input;
+
+       VkPipelineInputAssemblyStateCreateInfo inf_input_asm;
+
+       VkPipelineTessellationStateCreateInfo inf_tessel;
+
+       VkPipelineViewportStateCreateInfo inf_viewport;
+       VkPipelineRasterizationStateCreateInfo inf_raster;
+       VkPipelineMultisampleStateCreateInfo inf_multisample;
+       VkPipelineDepthStencilStateCreateInfo inf_depth_stencil;
+       VkPipelineColorBlendStateCreateInfo inf_colorblend;
+
+       VkPipelineDynamicStateCreateInfo inf_dynamic_state;
+
+       VkPipelineLayout layout;
+       VkRenderPass renderpass;
+       uint32_t subpass;
+};
+
 /* extensions */
 bool vku_have_extension(const char *name);
 bool vku_have_device_extension(const char *name);
@@ -38,6 +70,7 @@ void vku_cleanup();
 
 /* command buffers */
 VkCommandBuffer vku_alloc_cmdbuf(VkCommandPool pool, VkCommandBufferLevel level);
+bool vku_alloc_cmdbufs(VkCommandPool pool, VkCommandBufferLevel level, unsigned int count, VkCommandBuffer *buf_array);
 void vku_free_cmdbuf(VkCommandPool pool, VkCommandBuffer buf);
 
 void vku_begin_cmdbuf(VkCommandBuffer buf, unsigned int flags);
@@ -45,33 +78,30 @@ void vku_end_cmdbuf(VkCommandBuffer buf);
 void vku_reset_cmdbuf(VkCommandBuffer buf);
 void vku_submit_cmdbuf(VkQueue q, VkCommandBuffer buf, VkFence done_fence);
 
-/* swapchain */
-VkSwapchainKHR vku_create_swapchain(VkSurfaceKHR surf, int xsz, int ysz, int n,
-               VkPresentModeKHR pmode, VkSwapchainKHR prev);
-VkImage *vku_get_swapchain_images(VkSwapchainKHR sc, int *count);
-VkImageView *vku_create_image_views(VkImage *images, int count);
+bool vku_get_surface_format(VkPhysicalDevice gpu, VkSurfaceKHR surface, VkSurfaceFormatKHR *sformat);
+VkColorSpaceKHR vku_get_surface_colorspace(VkPhysicalDevice gpu, VkSurfaceKHR surface);
+
 int vku_get_next_image(VkSwapchainKHR sc);
 void vku_present(VkSwapchainKHR sc, int img_idx);
 
-/* rederpass */
-bool vku_create_renderpass();
-
-/* framebuffer */
-bool vku_create_framebuffers(VkImageView *image_views, int count, int w, int h);
-
 /* buffers */
 vku_buffer *vku_create_buffer(int sz, unsigned int usage);
 void vku_destroy_buffer(vku_buffer *buf);
+bool vku_update_buffer(vku_buffer *buf, int size, void *data);
+
 void vku_cmd_copybuf(VkCommandBuffer cmdbuf, VkBuffer dest, int doffs,
        VkBuffer src, int soffs, int size);
 
 /* other */
 const char *vku_get_vulkan_error_str(VkResult error);
 
-/* pipeline */
-bool vku_create_graphics_pipeline(VkPipelineLayout *layout);
+/* pipelines */
+vku_descriptor *vku_create_descriptor(VkDescriptorType type, VkFlags stage,
+               int binding_point, int size);
+void vku_destroy_descriptor(vku_descriptor *descriptor);
 
-/* descriptor set */
-//bool vku_create_descriptor_set()
+bool vku_create_descriptor_pool(vku_descriptor **descriptors, int num_desc,
+               VkDescriptorSet set);
+void vku_destroy_descriptor_pool();
 
 #endif // VKUTIL_H_