vulkan游戏引擎核心vulkan_types.inl实现

1.vulkan_types.inl

#pragma once

#include "defines.h"

#include "core/asserts.h"

#include "renderer/renderer_types.inl"

#include <vulkan/vulkan.h>

#define VK_CHECK(expr) \

{ \

KASSERT(expr == VK_SUCCESS); \

}

typedef struct vulkan_buffer{

u64 total_size;

VkBuffer handle;

VkBufferUsageFlagBits usage;

b8 is_locked;

VkDeviceMemory memory;

i32 memory_index;

u32 memory_property_flags;

}vulkan_buffer;

typedef struct vulkan_swapchain_support_info{

VkSurfaceCapabilitiesKHR capabilities;

u32 format_count;

VkSurfaceFormatKHR* formats;

u32 present_mode_count;

VkPresentModeKHR* present_modes;

}vulkan_swapchain_support_info;

typedef struct vulkan_device{

VkPhysicalDevice physical_device;

VkDevice logical_device;

vulkan_swapchain_support_info swapchain_support;

i32 graphics_queue_index;

i32 present_queue_index;

i32 transfer_queue_index;

VkQueue graphics_queue;

VkQueue present_queue;

VkQueue transfer_queue;

VkCommandPool graphics_command_pool;

VkPhysicalDeviceProperties properties;

VkPhysicalDeviceFeatures features;

VkPhysicalDeviceMemoryProperties memory;

VkFormat depth_format;

}vulkan_device;

typedef struct vulkan_image{

VkImage handle;

VkDeviceMemory memory;

VkImageView view;

u32 width;

u32 height;

}vulkan_image;

typedef enum vulkan_render_pass_state{

READY,

RECORDING,

IN_RENDER_PASS,

RECORDING_ENDED,

SUBMITTED,

NOT_ALLOCATED

}vulkan_render_pass_state;

typedef struct vulkan_renderpass{

VkRenderPass handle;

f32 x,y,w,h;

f32 r,g,b,a;

f32 depth;

u32 stencil;

vulkan_render_pass_state state;

}vulkan_renderpass;

typedef struct vulkan_framebuffer{

VkFramebuffer handle;

u32 attachment_count;

VkImageView* attachments;

vulkan_renderpass* renderpass;

}vulkan_framebuffer;

typedef struct vulkan_swapchain{

VkSurfaceFormatKHR image_format;

u8 max_frames_in_flight;

VkSwapchainKHR handle;

u32 image_count;

VkImage* images;

VkImageView* views;

vulkan_image depth_attachment;

//framebuffers used for on-screen rendering

vulkan_framebuffer* framebuffers;

}vulkan_swapchain;

typedef enum vulkan_command_buffer_state{

COMMAND_BUFFER_STATE_READY,

COMMAND_BUFFER_STATE_RECORDING,

COMMAND_BUFFER_STATE_IN_RENDER_PASS,

COMMAND_BUFFER_STATE_RECORDING_ENDED,

COMMAND_BUFFER_STATE_SUBMITTED,

COMMAND_BUFFER_STATE_NOT_ALLOCATED

}vulkan_command_buffer_state;

typedef struct vulkan_command_buffer{

VkCommandBuffer handle;

vulkan_command_buffer_state state;

}vulkan_command_buffer;

typedef struct vulkan_shader_stage{

VkShaderModuleCreateInfo create_info;

VkShaderModule handle;

VkPipelineShaderStageCreateInfo shader_stage_create_info;

}vulkan_shader_stage;

typedef struct vulkan_pipeline{

VkPipeline handle;

VkPipelineLayout pipeline_layout;

}vulkan_pipeline;

#define OBJECT_SHADER_STAGE_COUNT 2

typedef struct vulkan_object_shader{

vulkan_shader_stage stages[OBJECT_SHADER_STAGE_COUNT];

VkDescriptorPool global_descriptor_pool;

VkDescriptorSetLayout global_descriptor_set_layout;

VkDescriptorSet global_descriptor_sets[3];

//b8 descriptor_updated[3];

global_uniform_object global_ubo;

vulkan_buffer global_uniform_buffer;

vulkan_pipeline pipeline;

}vulkan_object_shader;

typedef struct vulkan_fence{

VkFence handle;

b8 is_signaled;

}vulkan_fence;

typedef struct vulkan_context{

u32 framebuffer_width;

u32 framebuffer_height;

u64 framebuffer_size_generation;

u64 framebuffer_size_last_generation;

VkInstance instance;

VkAllocationCallbacks* allocator;

VkSurfaceKHR surface;

#if defined(_DEBUG)

VkDebugUtilsMessengerEXT debug_messenger;

//PFN_vkSetDebugUtilsObjectNameEXT pfnSetDebugUtilsObjectNameEXT;

/** @brief The function pointer to set free-form debug object tag data. */

#endif

vulkan_device device;

b8 validation_enabled;

vulkan_swapchain swapchain;

vulkan_renderpass main_renderpass;

vulkan_buffer object_vertex_buffer;

vulkan_buffer object_index_buffer;

//darray

vulkan_command_buffer* graphics_command_buffers;

//darray

VkSemaphore* image_available_semaphores;

//darray

VkSemaphore* queue_complete_semaphores;

u32 in_flight_fence_count;

vulkan_fence* in_flight_fences;

//Holds pointers to fences which exist and are owned elsewhere

vulkan_fence** images_in_flight;

u32 image_index;

u32 current_frame;

b8 recreating_swapchain;

vulkan_object_shader object_shader;

u64 geometry_vertex_offset;

u64 geometry_index_offset;

i32 (*find_memory_index)(u32 type_filter,u32 property_flags);

}vulkan_context;

typedef struct vulkan_texture_data{

vulkan_image image;

VkSampler sampler;

}vulkan_texture_data;

相关推荐
张人玉1 小时前
WinForm之ListBox 控件
服务器·windows·microsoft
我不吃饼干3 小时前
在 React 中实现倒计时功能会有什么坑
前端·react.js
小小小小宇3 小时前
前端PerformanceObserver
前端
人生匆匆3 小时前
linux ext4缩容home,扩容根目录
linux·运维·服务器
王者鳜錸3 小时前
PYTHON从入门到实践-18Django从零开始构建Web应用
前端·python·sqlite
拾光拾趣录3 小时前
ES6到HTTPS全链路连环拷问,99%人第3题就翻车?
前端·面试
haaaaaaarry4 小时前
Element Plus常见基础组件(二)
开发语言·前端·javascript
xyphf_和派孔明4 小时前
关于echarts的性能优化考虑
前端·性能优化·echarts
PyHaVolask4 小时前
HTML 表单进阶:用户体验优化与实战应用
前端·javascript·html·用户体验
A了LONE5 小时前
cv弹窗,退款确认弹窗
java·服务器·前端