#ifndef GRAPHICS_H #define GRAPHICS_H #include #include #include #include "common.h" // from vulkan source #define MAKE_VERSION(major, minor, patch) \ ((((u32)(major)) << 22U) | (((u32)(minor)) << 12U) | ((u32)(patch))) typedef uint32_t u32; typedef struct graphics { VkInstance instance; VkDebugUtilsMessengerEXT debug_messenger; VkPhysicalDevice physical_device; VkDevice logical_device; VkQueue graphics_queue; VkQueue present_queue; VkSurfaceKHR surface; struct pipeline { VkRenderPass render_pass; VkPipelineLayout layout; VkPipeline pipeline; } pipeline; struct swap_chain { VkSwapchainKHR swap_chain; VkImage *images; VkImageView *image_views; VkFramebuffer *framebuffers; u32 nimages; VkFormat image_format; VkExtent2D extent; } swap_chain; struct command { VkCommandPool pool; VkCommandBuffer buffer; } command; struct sync { VkSemaphore semph_image_available; VkSemaphore semph_render_finished; VkFence fence_inflight; } sync; } * graphics_t; struct graphics_info { char *name; u32 version; const char* const* extensions; u32 ext_count; int (*surface_func)(VkInstance instance, VkSurfaceKHR *surface); }; graphics_t graphics_create(struct graphics_info *info); void graphics_destroy(graphics_t device); int graphics_draw_frame(graphics_t device); #endif