Files
armorpaint/base/sources/backends/vulkan_gpu.h
T

150 lines
3.5 KiB
C
Raw Normal View History

2025-02-26 13:24:16 +01:00
#pragma once
#include <stdbool.h>
#include <stdint.h>
#include <assert.h>
#include <vulkan/vulkan.h>
#include <vulkan/vulkan_core.h>
2025-06-11 11:36:22 +02:00
#define MAXIMUM_WINDOWS 1
2025-02-26 13:24:16 +01:00
struct vk_funs {
PFN_vkGetPhysicalDeviceSurfaceSupportKHR fpGetPhysicalDeviceSurfaceSupportKHR;
PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR fpGetPhysicalDeviceSurfaceCapabilitiesKHR;
PFN_vkGetPhysicalDeviceSurfaceFormatsKHR fpGetPhysicalDeviceSurfaceFormatsKHR;
PFN_vkGetPhysicalDeviceSurfacePresentModesKHR fpGetPhysicalDeviceSurfacePresentModesKHR;
PFN_vkCreateSwapchainKHR fpCreateSwapchainKHR;
PFN_vkDestroySwapchainKHR fpDestroySwapchainKHR;
PFN_vkGetSwapchainImagesKHR fpGetSwapchainImagesKHR;
PFN_vkDestroySurfaceKHR fpDestroySurfaceKHR;
PFN_vkCreateDebugUtilsMessengerEXT fpCreateDebugUtilsMessengerEXT;
PFN_vkDestroyDebugUtilsMessengerEXT fpDestroyDebugUtilsMessengerEXT;
PFN_vkQueuePresentKHR fpQueuePresentKHR;
PFN_vkAcquireNextImageKHR fpAcquireNextImageKHR;
};
struct vk_depth {
VkImage image;
VkImageView view;
VkDeviceMemory memory;
};
struct vk_window {
int width;
int height;
bool resized;
bool surface_destroyed;
int depth_bits;
bool vsynced;
uint32_t current_image;
VkSurfaceKHR surface;
VkSurfaceFormatKHR format;
VkSwapchainKHR swapchain;
uint32_t image_count;
VkImage *images;
VkImageView *views;
struct vk_depth depth;
};
struct vk_context {
VkInstance instance;
VkPhysicalDevice gpu;
VkDevice device;
VkPhysicalDeviceMemoryProperties memory_properties;
VkCommandBuffer setup_cmd;
VkCommandPool cmd_pool;
VkQueue queue;
struct vk_window windows[MAXIMUM_WINDOWS];
2025-06-11 11:36:22 +02:00
VkBuffer *uniform_buffer;
2025-02-26 13:24:16 +01:00
#ifdef VALIDATE
bool validation_found;
VkDebugUtilsMessengerEXT debug_messenger;
#endif
};
typedef struct {
int _indexCount;
VkCommandBuffer _buffer;
VkFence fence;
2025-03-16 19:49:13 +01:00
} gpu_command_list_impl_t;
2025-02-26 13:24:16 +01:00
2025-03-16 19:49:13 +01:00
typedef struct gpu_pipeline_impl {
2025-02-26 13:24:16 +01:00
const char **textures;
int *textureValues;
int textureCount;
2025-06-11 11:36:22 +02:00
VkPipeline pipeline;
2025-02-26 13:24:16 +01:00
VkShaderModule vert_shader_module;
VkShaderModule frag_shader_module;
VkPipelineLayout pipeline_layout;
2025-03-16 19:49:13 +01:00
} gpu_pipeline_impl_t;
2025-02-26 13:24:16 +01:00
typedef struct {
unsigned id;
char *source;
int length;
2025-03-16 19:49:13 +01:00
} gpu_shader_impl_t;
2025-02-26 13:24:16 +01:00
typedef struct {
2025-03-04 11:05:01 +01:00
VkImageLayout imageLayout;
2025-02-26 13:24:16 +01:00
VkDeviceSize deviceSize;
int stride;
2025-03-04 11:05:01 +01:00
VkImage image;
VkDeviceMemory mem;
VkImageView view;
2025-02-26 13:24:16 +01:00
VkImage depthImage;
VkDeviceMemory depthMemory;
VkImageView depthView;
int depthBufferBits;
VkFormat format;
2025-03-04 11:05:01 +01:00
VkBuffer readback_buffer;
VkDeviceMemory readback_memory;
bool readback_buffer_created;
2025-02-26 13:24:16 +01:00
int stage;
int stage_depth;
2025-03-16 19:49:13 +01:00
} gpu_texture_impl_t;
typedef struct {
2025-06-18 20:47:58 +02:00
int count;
2025-03-18 10:39:23 +01:00
2025-03-16 19:49:13 +01:00
VkBuffer buf;
VkDeviceMemory mem;
2025-03-18 10:39:23 +01:00
VkMemoryAllocateInfo mem_alloc;
2025-02-26 13:24:16 +01:00
float *data;
int myStride;
unsigned bufferId;
2025-03-18 10:39:23 +01:00
int lastStart;
int lastCount;
int mySize;
} gpu_buffer_impl_t;
2025-02-26 13:24:16 +01:00
typedef struct {
VkPipeline pipeline;
VkPipelineLayout pipeline_layout;
VkDescriptorSet descriptor_set;
VkDescriptorSetLayout descriptor_set_layout;
VkBuffer raygen_shader_binding_table;
VkBuffer miss_shader_binding_table;
VkBuffer hit_shader_binding_table;
2025-03-16 19:49:13 +01:00
} gpu_raytrace_pipeline_impl_t;
2025-02-26 13:24:16 +01:00
typedef struct {
VkAccelerationStructureKHR top_level_acceleration_structure;
VkAccelerationStructureKHR bottom_level_acceleration_structure[16];
uint64_t top_level_acceleration_structure_handle;
uint64_t bottom_level_acceleration_structure_handle[16];
VkBuffer bottom_level_buffer[16];
VkDeviceMemory bottom_level_mem[16];
VkBuffer top_level_buffer;
VkDeviceMemory top_level_mem;
VkBuffer instances_buffer;
VkDeviceMemory instances_mem;
2025-03-16 19:49:13 +01:00
} gpu_raytrace_acceleration_structure_impl_t;