added a vulkan util (vkutil.h/.cc)
[demo] / src / vulkan / vkutil.h
diff --git a/src/vulkan/vkutil.h b/src/vulkan/vkutil.h
new file mode 100644 (file)
index 0000000..f9cbf94
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef VKUTIL_H_
+#define VKUTIL_H_
+
+#include <vulkan/vulkan.h>
+
+extern VkSwapchainKHR vkswapchain;
+extern VkImage *vkswapchain_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;
+
+struct vku_buffer {
+       VkBuffer buf;
+       VkDeviceMemory mem_pool;
+       int mem_start, mem_size;
+};
+
+/* extensions */
+bool vku_have_extension(const char *name);
+bool vku_have_device_extension(const char *name);
+
+/* device */
+bool vku_create_device();
+void vku_cleanup();
+
+/* command buffers */
+VkCommandBuffer vku_alloc_cmdbuf(VkCommandPool pool, VkCommandBufferLevel level);
+void vku_free_cmdbuf(VkCommandPool pool, VkCommandBuffer buf);
+
+void vku_begin_cmdbuf(VkCommandBuffer buf, unsigned int flags);
+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);
+int vku_get_next_image(VkSwapchainKHR sc);
+void vku_present(VkSwapchainKHR sc, int img_idx);
+
+/* buffers */
+vku_buffer *vku_create_buffer(int sz, unsigned int usage);
+void vku_destroy_buffer(vku_buffer *buf);
+
+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);
+
+#endif // VKUTIL_H_
\ No newline at end of file