roleplay/client/include/pipeline.h

132 lines
3.0 KiB
C

#ifndef PIPELINE_H
#define PIPELINE_H
#include "vulkan/vulkan_core.h"
#include "cglm/types.h"
#include "vk_mem_alloc.h"
#include "command.h"
typedef struct ComputePipelineStruct {
VkPipelineLayout layout;
VkPipeline pipeline;
} ComputePipeline;
typedef struct GraphicsPipelineStruct {
VkPipelineLayout layout;
VkPipeline pipeline;
} GraphicsPipeline;
typedef struct ColoredRectStruct {
vec3 pos;
vec2 size;
vec4 color;
} ColoredRect;
typedef struct UIUniformStruct {
mat4 screen;
} UIUniform;
typedef struct TextStruct {
vec3 pos;
vec2 size;
vec4 color;
uint32_t length;
uint32_t offset;
} Text;
typedef struct DrawCommandStruct {
uint32_t vertex_count;
uint32_t instance_count;
uint32_t first_vertex;
uint32_t first_instance;
} DrawCommand;
typedef struct TextPointersStruct {
VkDeviceAddress strings;
VkDeviceAddress codes;
VkDeviceAddress characters;
VkDeviceAddress draw;
} TextPointers;
typedef struct CharStruct {
vec3 pos;
vec4 color;
float size;
uint32_t code;
} Char;
typedef struct FontUniformStruct {
uint32_t num_symbols;
uint32_t width;
uint32_t height;
uint32_t space_width;
VkDeviceAddress symbol_list;
} FontUniform;
typedef struct SymbolInfoStruct {
uint32_t x;
uint32_t top;
uint32_t width;
} SymbolInfo;
typedef struct FontDataStruct {
FontUniform info;
uint16_t* codes;
} FontData;
typedef struct FontDescriptorStruct {
VmaAllocation symbol_memory;
VmaAllocation uniform_memory;
VmaAllocation image_memory;
VkBuffer symbols;
VkBuffer uniform;
VkImage image;
VkImageView view;
VkSampler sampler;
VkDescriptorSet set;
} FontDescriptor;
typedef struct UILayerStruct {
VkBuffer colored_rects;
uint32_t colored_rect_count;
VkBuffer textured_rects;
uint32_t textured_rect_count;
VkDescriptorSet textured_rect_descriptor;
VkDeviceAddress texts_address;
VkBuffer texts;
uint32_t text_count;
FontDescriptor font;
} UILayer;
struct RectBuffer {
VkBuffer vertex;
VkBuffer index;
VmaAllocation vertex_memory;
VmaAllocation index_memory;
};
typedef struct UIContextStruct {
VkBuffer ui_descriptor_buffer;
VmaAllocation ui_descriptor_memory;
VkDescriptorSetLayout ui_descriptor_layout;
VkDescriptorPool ui_descriptor_pool;
VkDescriptorSet ui_descriptor_set;
VkDescriptorPool font_pool;
VkDescriptorSetLayout font_layout;
struct RectBuffer ui_rect;
GraphicsPipeline ui_pipeline_rect;
GraphicsPipeline ui_pipeline_text;
ComputePipeline ui_compute_text;
} UIContext;
VkResult init_pipelines(VkDevice device, VmaAllocator allocator, VkExtent2D swapchain_extent, vec2 window_scale, VkRenderPass render_pass, Queue transfer_queue, VkCommandPool transfer_pool, UIContext* context);
VkResult create_text_descriptor(VkDevice device, VmaAllocator allocator, VkDescriptorSetLayout layout, VkDescriptorPool pool, FontData* font, SymbolInfo* symbols, uint32_t* atlas, VkCommandPool transfer_pool, Queue transfer_queue, FontDescriptor* descriptor);
#endif