65 lines
1.4 KiB
C
65 lines
1.4 KiB
C
#ifndef GPU_H
|
|
#define GPU_H
|
|
|
|
#include "linear_alg.h"
|
|
#include "model.h"
|
|
|
|
#define GLFW_INCLUDE_VULKAN
|
|
#include <GLFW/glfw3.h>
|
|
|
|
#define MAX_FRAMES_IN_FLIGHT 4
|
|
|
|
typedef struct {
|
|
mat4_t model;
|
|
mat4_t view;
|
|
mat4_t proj;
|
|
} mvp_t;
|
|
|
|
typedef struct {
|
|
VkInstance inst;
|
|
VkSurfaceKHR surface;
|
|
VkPhysicalDevice physical_dev;
|
|
VkDevice dev;
|
|
VkQueue queue;
|
|
VkSwapchainKHR swapchain;
|
|
VkExtent2D swapchain_extent;
|
|
uint32_t swapchain_img_count;
|
|
VkImageView swapchain_img_views[MAX_FRAMES_IN_FLIGHT];
|
|
VkImage depth_img;
|
|
VkDeviceMemory depth_img_mem;
|
|
VkImageView depth_img_view;
|
|
VkFramebuffer framebuffers[MAX_FRAMES_IN_FLIGHT];
|
|
VkShaderModule vert_shader;
|
|
VkShaderModule frag_shader;
|
|
VkDescriptorSetLayout desc_set_layout;
|
|
VkDescriptorPool desc_pool;
|
|
VkDescriptorSet desc_sets[MAX_FRAMES_IN_FLIGHT];
|
|
VkBuffer mvp_buffer;
|
|
VkDeviceMemory mvp_buffer_mem;
|
|
mvp_t *mvps;
|
|
VkPipelineLayout pipeline_layout;
|
|
VkRenderPass render_pass;
|
|
VkPipeline pipeline;
|
|
VkCommandPool cmd_pool;
|
|
VkCommandBuffer cmd_buf;
|
|
VkFence in_flight;
|
|
VkSemaphore render_fin;
|
|
VkSemaphore img_avail;
|
|
VkBuffer vertex_buf;
|
|
VkDeviceMemory vertex_buf_mem;
|
|
VkBuffer index_buf;
|
|
VkDeviceMemory index_buf_mem;
|
|
size_t index_count;
|
|
} gpu_ctx_t;
|
|
|
|
typedef struct {
|
|
const char *application_name;
|
|
GLFWwindow *window;
|
|
} gpu_config_t;
|
|
|
|
void gpu_init(gpu_ctx_t *ctx, const gpu_config_t *config, model_t model);
|
|
void gpu_cleanup(const gpu_ctx_t *ctx);
|
|
void gpu_render(const gpu_ctx_t *ctx, const mvp_t *mvp);
|
|
|
|
#endif
|