nuclear@3: #ifndef VKU_H_ nuclear@3: #define VKU_H_ nuclear@3: nuclear@4: #ifdef __unix__ nuclear@4: #define VK_USE_PLATFORM_XLIB_KHR nuclear@4: #endif nuclear@4: nuclear@3: #include nuclear@3: nuclear@3: VkInstance vk; nuclear@3: VkDevice vkdev; nuclear@3: VkQueue vkq; nuclear@3: VkCommandPool vkcmdpool; nuclear@4: VkCommandBuffer vkcmdbuf; /* primary command buffer */ nuclear@3: nuclear@14: int swapchain_size; nuclear@7: VkImage *swapchain_images; nuclear@14: VkFormat swapchain_image_fmt; nuclear@14: VkImageView *swapchain_views; nuclear@7: int next_swapchain_image; nuclear@14: VkFramebuffer *swapchain_framebuf; nuclear@17: VkSemaphore swapchain_getimg_sem; nuclear@17: VkCommandBuffer *swapchain_cmdbuf; nuclear@7: nuclear@12: VkViewport vkvport; nuclear@13: VkRenderPass vkrpass; nuclear@12: nuclear@7: nuclear@4: struct vku_buffer { nuclear@3: VkBuffer buf; nuclear@3: VkDeviceMemory mem_pool; nuclear@3: int mem_start, mem_size; nuclear@3: }; nuclear@3: nuclear@4: int vku_have_extension(const char *name); nuclear@4: int vku_have_device_extension(const char *name); nuclear@4: nuclear@15: void vku_set_debug_callback(void (*func)(const char*, void*), void *cls); nuclear@15: nuclear@3: int vku_create_dev(void); nuclear@3: void vku_cleanup(void); nuclear@3: nuclear@4: VkCommandBuffer vku_alloc_cmdbuf(VkCommandPool pool, VkCommandBufferLevel level); nuclear@4: void vku_free_cmdbuf(VkCommandPool pool, VkCommandBuffer buf); nuclear@3: nuclear@4: void vku_begin_cmdbuf(VkCommandBuffer buf, unsigned int flags); nuclear@4: void vku_end_cmdbuf(VkCommandBuffer buf); nuclear@4: void vku_reset_cmdbuf(VkCommandBuffer buf); nuclear@4: nuclear@17: void vku_submit_cmdbuf(VkQueue q, VkCommandBuffer buf, VkSemaphore sem_wait, nuclear@17: VkSemaphore sem_done, VkFence done_fence); nuclear@4: nuclear@5: VkSwapchainKHR vku_create_swapchain(VkSurfaceKHR surf, int xsz, int ysz, int n, nuclear@14: VkFormat fmt, VkPresentModeKHR pmode, VkSwapchainKHR prev); nuclear@6: VkImage *vku_get_swapchain_images(VkSwapchainKHR sc, int *count); nuclear@17: int vku_get_next_image(VkSwapchainKHR sc, VkSemaphore semdone); nuclear@17: void vku_present(VkSwapchainKHR sc, int img_idx, VkSemaphore sem_wait); nuclear@5: nuclear@14: VkImageView vku_create_view(VkImage img, VkFormat fmt); nuclear@14: void vku_destroy_view(VkImageView view); nuclear@14: nuclear@14: VkFramebuffer vku_create_framebuffer(VkImageView view, int width, int height, VkRenderPass rpass); nuclear@14: void vku_destroy_framebuffer(VkFramebuffer fb); nuclear@14: nuclear@4: struct vku_buffer *vku_create_buffer(int sz, unsigned int usage); nuclear@4: void vku_destroy_buffer(struct vku_buffer *buf); nuclear@4: nuclear@4: void vku_cmd_copybuf(VkCommandBuffer cmdbuf, VkBuffer dest, int doffs, nuclear@4: VkBuffer src, int soffs, int size); nuclear@4: nuclear@13: VkRenderPass vku_create_renderpass(VkFormat cfmt, VkFormat dsfmt); nuclear@13: void vku_destroy_renderpass(VkRenderPass rpass); nuclear@15: void vku_begin_renderpass(VkCommandBuffer cmdbuf, VkRenderPass rpass, VkFramebuffer fb, nuclear@15: VkSubpassContents cont); nuclear@15: void vku_end_renderpass(VkCommandBuffer cmdbuf); nuclear@13: nuclear@17: VkSemaphore vku_create_semaphore(void); nuclear@17: void vku_destroy_semaphore(VkSemaphore s); nuclear@17: nuclear@17: VkFence vku_create_fence(void); nuclear@17: void vku_destroy_fence(VkFence f); nuclear@17: void vku_wait_fence(VkFence f); nuclear@17: nuclear@4: /* platform-specific */ nuclear@4: #ifdef VK_USE_PLATFORM_XLIB_KHR nuclear@4: #include nuclear@4: int vku_xlib_usable_visual(Display *dpy, VisualID vid); nuclear@5: VkSurfaceKHR vku_xlib_create_surface(Display *dpy, Window win); nuclear@4: #endif nuclear@3: nuclear@3: #endif /* VKU_H_ */