summaryrefslogtreecommitdiff
path: root/src/graphics.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/graphics.h')
-rw-r--r--src/graphics.h73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/graphics.h b/src/graphics.h
new file mode 100644
index 0000000..52e511e
--- /dev/null
+++ b/src/graphics.h
@@ -0,0 +1,73 @@
+#ifndef GRAPHICS_H
+#define GRAPHICS_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <vulkan/vulkan.h>
+
+#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