summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2024-11-27 21:59:02 -0600
committerDanny Holman <dholman@gymli.org>2024-11-27 22:02:08 -0600
commita62d0aea52df81648b9d429ffd5b3e8ef190ed52 (patch)
tree9769372666083d511578a0ac98b3c1ae883173bd
parent6944276194f05c2a61aa92fe7b9104a7b947f43d (diff)
render: centralize the type definitions
Centralize the type definitions for the Vulkan renderer. This removes the possibility for cyclic dependencies in the include paths. Signed-off-by: Danny Holman <dholman@gymli.org>
-rw-r--r--include/rune/ui/input.h2
-rw-r--r--render/vulkan/context.h34
-rw-r--r--render/vulkan/device.h48
-rw-r--r--render/vulkan/fence.h9
-rw-r--r--render/vulkan/framebuffer.h10
-rw-r--r--render/vulkan/image.c1
-rw-r--r--render/vulkan/image.h12
-rw-r--r--render/vulkan/renderpass.h18
-rw-r--r--render/vulkan/surface.h13
-rw-r--r--render/vulkan/swapchain.c3
-rw-r--r--render/vulkan/swapchain.h16
-rw-r--r--render/vulkan/vk_types.h111
-rw-r--r--render/vulkan/vkassert.h2
13 files changed, 123 insertions, 156 deletions
diff --git a/include/rune/ui/input.h b/include/rune/ui/input.h
index c03f8a2..3d8ca9a 100644
--- a/include/rune/ui/input.h
+++ b/include/rune/ui/input.h
@@ -23,7 +23,7 @@
#define RUNE_UI_INPUT_H
#include <rune/util/types.h>
-#include <rune/ui/window.h>
+#include <rune/ui/app_window.h>
#define KB_MODE_RAW 0
#define KB_MODE_TEXT 1
diff --git a/render/vulkan/context.h b/render/vulkan/context.h
index 14a86f1..e671223 100644
--- a/render/vulkan/context.h
+++ b/render/vulkan/context.h
@@ -1,39 +1,7 @@
#ifndef VKCONTEXT_H
#define VKCONTEXT_H
-#include "surface.h"
-#include "device.h"
-#include "swapchain.h"
-#include "renderpass.h"
-#include "framebuffer.h"
-#include "fence.h"
-
-struct ext_container {
- const char** extensions;
- uint32_t ext_count;
-};
-
-struct vklayer_container {
- const char** vklayer_names;
- uint32_t vklayer_count;
-};
-
-struct vkcontext {
- VkInstance instance;
- VkDebugUtilsMessengerEXT db_messenger;
- VkSemaphore *queue_semaphores;
- VkSemaphore *image_semaphores;
- struct vksurface *surface;
- struct vkswapchain *swapchain;
- struct vkrendpass *rendpass;
- struct vkdev *dev;
- struct vkcmdbuffer** cmdbuffers;
- struct vkframebuffer** framebuffers;
- struct vkfence** fences_in_flight;
- struct vkfence** images_in_flight;
- uint32_t num_fences_in_flight;
- uint32_t img_index;
-};
+#include "vk_types.h"
struct vkcontext* create_vkcontext(struct vklayer_container *vklayers, struct ext_container *ext);
void destroy_vkcontext(struct vkcontext *context);
diff --git a/render/vulkan/device.h b/render/vulkan/device.h
index e498137..6e3f5aa 100644
--- a/render/vulkan/device.h
+++ b/render/vulkan/device.h
@@ -1,53 +1,7 @@
-/*
- * Rune Game Engine
- * Copyright 2024 Danny Holman <dholman@gymli.org>
- *
- * This software is provided 'as-is', without any express or implied
- * warranty. In no event will the authors be held liable for any damages
- * arising from the use of this software.
- *
- * Permission is granted to anyone to use this software for any purpose,
- * including commercial applications, and to alter it and redistribute it
- * freely, subject to the following restrictions:
- *
- * 1. The origin of this software must not be misrepresented; you must not
- * claim that you wrote the original software. If you use this software
- * in a product, an acknowledgment in the product documentation would be
- * appreciated but is not required.
- * 2. Altered source versions must be plainly marked as such, and must not be
- * misrepresented as being the original software.
- * 3. This notice may not be removed or altered from any source distribution.
- */
-
#ifndef VKDEVICE_H
#define VKDEVICE_H
-#include <rune/util/types.h>
-#include <vulkan/vulkan.h>
-#include <GLFW/glfw3.h>
-
-struct vkswapchain_data {
- VkSurfaceCapabilitiesKHR capabilities;
- VkSurfaceFormatKHR *formats;
- VkPresentModeKHR *present_modes;
- uint32_t format_count;
- uint32_t present_count;
-};
-
-struct vkqueue {
- uint32_t index;
- uint32_t qfam;
- VkQueue handle;
-};
-
-struct vkdev {
- VkPhysicalDevice pdev;
- VkDevice ldev;
- struct vkswapchain_data scdata;
- struct vkqueue queues[4];
- VkCommandPool cmd_pool;
- VkFormat depth_format;
-};
+#include "vk_types.h"
struct vkdev* create_vkdev(VkInstance instance, VkSurfaceKHR surface);
void destroy_vkdev(struct vkdev *dev);
diff --git a/render/vulkan/fence.h b/render/vulkan/fence.h
index 34af87d..16e309d 100644
--- a/render/vulkan/fence.h
+++ b/render/vulkan/fence.h
@@ -1,14 +1,7 @@
#ifndef VKFENCE_H
#define VKFENCE_H
-#include "device.h"
-#include <rune/util/types.h>
-#include <vulkan/vulkan.h>
-
-struct vkfence {
- VkFence handle;
- int signal;
-};
+#include "vk_types.h"
struct vkfence* create_vkfence(struct vkdev *dev, uint8_t signal);
void destroy_vkfence(struct vkfence *fence, struct vkdev *dev);
diff --git a/render/vulkan/framebuffer.h b/render/vulkan/framebuffer.h
index 4bd7e86..a5bfd59 100644
--- a/render/vulkan/framebuffer.h
+++ b/render/vulkan/framebuffer.h
@@ -1,15 +1,7 @@
#ifndef VKFRAMEBUFFER_H
#define VKFRAMEBUFFER_H
-#include "device.h"
-#include "renderpass.h"
-
-struct vkframebuffer {
- VkFramebuffer handle;
- uint32_t at_count;
- VkImageView *attachments;
- struct vkrendpass *rendpass;
-};
+#include "vk_types.h"
struct vkframebuffer* create_vkframebuffer(struct vkdev *dev, struct vkrendpass *rendpass, uint32_t width, uint32_t height, uint32_t at_count, VkImageView *at);
void destroy_vkframebuffer(struct vkframebuffer *framebuffer, struct vkdev *dev);
diff --git a/render/vulkan/image.c b/render/vulkan/image.c
index 9160fee..41548f6 100644
--- a/render/vulkan/image.c
+++ b/render/vulkan/image.c
@@ -1,4 +1,5 @@
#include "image.h"
+#include "device.h"
#include "vkassert.h"
#include <rune/core/alloc.h>
diff --git a/render/vulkan/image.h b/render/vulkan/image.h
index 9e5b101..7b96695 100644
--- a/render/vulkan/image.h
+++ b/render/vulkan/image.h
@@ -1,17 +1,7 @@
#ifndef VKIMAGE_H
#define VKIMAGE_H
-#include <rune/util/types.h>
-#include "surface.h"
-#include "device.h"
-
-struct vkimage {
- VkImage handle;
- VkDeviceMemory memory;
- VkImageView view;
- uint32_t width;
- uint32_t height;
-};
+#include "vk_types.h"
struct vkimage* create_vkimage(struct vkdev *dev, VkFormat format, uint32_t width, uint32_t height, uint32_t usage, uint32_t mem_flags, uint32_t aflags, int create_view);
void destroy_vkimage(struct vkimage *image, struct vkdev *dev);
diff --git a/render/vulkan/renderpass.h b/render/vulkan/renderpass.h
index 9fbb417..2a27821 100644
--- a/render/vulkan/renderpass.h
+++ b/render/vulkan/renderpass.h
@@ -1,10 +1,7 @@
#ifndef VKRENDERPASS_H
#define VKRENDERPASS_H
-#include "swapchain.h"
-#include "device.h"
-#include <rune/util/types.h>
-#include <cglm/cglm.h>
+#include "vk_types.h"
enum cmdbuf_state {
CMDBUF_READY,
@@ -14,19 +11,6 @@ enum cmdbuf_state {
CMDBUF_SUBMIT
};
-struct vkcmdbuffer {
- VkCommandBuffer handle;
- int state;
-};
-
-struct vkrendpass {
- VkRenderPass handle;
- vec4 area;
- vec4 color;
- float depth;
- uint32_t stencil;
-};
-
struct vkcmdbuffer* create_vkcmdbuffer(struct vkdev *dev, int primary);
void destroy_vkcmdbuffer(struct vkcmdbuffer *cmdbuffer, struct vkdev *dev);
diff --git a/render/vulkan/surface.h b/render/vulkan/surface.h
deleted file mode 100644
index 8d59ab8..0000000
--- a/render/vulkan/surface.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef VKSURFACE_H
-#define VKSURFACE_H
-
-#include <vulkan/vulkan.h>
-#include <GLFW/glfw3.h>
-
-struct vksurface {
- VkSurfaceKHR handle;
- uint32_t width;
- uint32_t height;
-};
-
-#endif
diff --git a/render/vulkan/swapchain.c b/render/vulkan/swapchain.c
index c6cea29..7d655a3 100644
--- a/render/vulkan/swapchain.c
+++ b/render/vulkan/swapchain.c
@@ -1,6 +1,7 @@
#include "swapchain.h"
-#include "vkassert.h"
#include "image.h"
+#include "device.h"
+#include "vkassert.h"
#include <rune/core/logging.h>
#include <rune/core/alloc.h>
#include <rune/util/stubbed.h>
diff --git a/render/vulkan/swapchain.h b/render/vulkan/swapchain.h
index d2f3d89..716aadd 100644
--- a/render/vulkan/swapchain.h
+++ b/render/vulkan/swapchain.h
@@ -1,21 +1,7 @@
#ifndef VKSWAPCHAIN_H
#define VKSWAPCHAIN_H
-#include "surface.h"
-#include "device.h"
-
-struct vkswapchain {
- VkSwapchainKHR handle;
- VkSurfaceFormatKHR format_khr;
- VkFormat format;
- VkSemaphore render_complete;
- VkImage *images;
- VkImageView *views;
- struct vkimage *depth_attachment;
- uint8_t max_frames;
- uint32_t frame;
- uint32_t img_count;
-};
+#include "vk_types.h"
struct vkswapchain* create_swapchain(struct vksurface *surface, struct vkdev *dev);
void destroy_swapchain(struct vkswapchain *swapchain, struct vkdev *dev);
diff --git a/render/vulkan/vk_types.h b/render/vulkan/vk_types.h
new file mode 100644
index 0000000..6e99bca
--- /dev/null
+++ b/render/vulkan/vk_types.h
@@ -0,0 +1,111 @@
+#ifndef VK_TYPES_H
+#define VK_TYPES_H
+
+#include <rune/util/types.h>
+#include <vulkan/vulkan.h>
+#include <GLFW/glfw3.h>
+#include <cglm/cglm.h>
+
+struct vkqueue {
+ uint32_t index;
+ uint32_t qfam;
+ VkQueue handle;
+};
+
+struct vksurface {
+ VkSurfaceKHR handle;
+ uint32_t width;
+ uint32_t height;
+};
+
+struct vkcmdbuffer {
+ VkCommandBuffer handle;
+ int state;
+};
+
+struct vkfence {
+ VkFence handle;
+ int signal;
+};
+
+struct vkimage {
+ VkImage handle;
+ VkDeviceMemory memory;
+ VkImageView view;
+ uint32_t width;
+ uint32_t height;
+};
+
+struct ext_container {
+ const char** extensions;
+ uint32_t ext_count;
+};
+
+struct vklayer_container {
+ const char** vklayer_names;
+ uint32_t vklayer_count;
+};
+
+struct vkswapchain_data {
+ VkSurfaceCapabilitiesKHR capabilities;
+ VkSurfaceFormatKHR *formats;
+ VkPresentModeKHR *present_modes;
+ uint32_t format_count;
+ uint32_t present_count;
+};
+
+struct vkrendpass {
+ VkRenderPass handle;
+ vec4 area;
+ vec4 color;
+ float depth;
+ uint32_t stencil;
+};
+
+struct vkframebuffer {
+ VkFramebuffer handle;
+ uint32_t at_count;
+ VkImageView *attachments;
+ struct vkrendpass *rendpass;
+};
+
+struct vkdev {
+ VkPhysicalDevice pdev;
+ VkDevice ldev;
+ struct vkswapchain_data scdata;
+ struct vkqueue queues[4];
+ VkCommandPool cmd_pool;
+ VkFormat depth_format;
+};
+
+struct vkswapchain {
+ VkSwapchainKHR handle;
+ VkSurfaceFormatKHR format_khr;
+ VkFormat format;
+ VkSemaphore render_complete;
+ VkImage *images;
+ VkImageView *views;
+ struct vkimage *depth_attachment;
+ uint8_t max_frames;
+ uint32_t frame;
+ uint32_t img_count;
+};
+
+struct vkcontext {
+ VkInstance instance;
+ VkDebugUtilsMessengerEXT db_messenger;
+ VkSemaphore *queue_semaphores;
+ VkSemaphore *image_semaphores;
+ struct vksurface *surface;
+ struct vkswapchain *swapchain;
+ struct vkrendpass *rendpass;
+ struct vkdev *dev;
+ struct vkcmdbuffer** cmdbuffers;
+ struct vkframebuffer** framebuffers;
+ struct vkfence** fences_in_flight;
+ struct vkfence** images_in_flight;
+ uint32_t num_fences_in_flight;
+ uint32_t img_index;
+};
+
+#endif
diff --git a/render/vulkan/vkassert.h b/render/vulkan/vkassert.h
index 4d4f99b..b708732 100644
--- a/render/vulkan/vkassert.h
+++ b/render/vulkan/vkassert.h
@@ -1,9 +1,9 @@
#ifndef VKASSERT_H
#define VKASSERT_H
+#include "vk_types.h"
#include <rune/core/logging.h>
#include <rune/core/abort.h>
-#include <vulkan/vulkan.h>
#include <string.h>
static char* get_vkerr_str(VkResult res) {