#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 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, 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