diff options
| author | Quentin LADEVIE <qladevie@wanadev.fr> | 2022-03-03 17:49:03 +0100 |
|---|---|---|
| committer | Quentin LADEVIE <qladevie@wanadev.fr> | 2022-03-03 17:49:03 +0100 |
| commit | bdd35fc2af40496b4cff9121ea5a3a364259642d (patch) | |
| tree | 3286b7bad9a6daa3b85e1957c44a70c0e6569f55 /include/vk-api.hpp | |
| parent | 6d98e9d8b07d5c8aa0358780c38f29ffddfbf45f (diff) | |
Primitive renderpass api & use handle for low level api resources
Diffstat (limited to 'include/vk-api.hpp')
| -rw-r--r-- | include/vk-api.hpp | 71 |
1 files changed, 42 insertions, 29 deletions
diff --git a/include/vk-api.hpp b/include/vk-api.hpp index 1b9f51f..0f1431a 100644 --- a/include/vk-api.hpp +++ b/include/vk-api.hpp @@ -1,6 +1,7 @@ #ifndef __VK_API_HPP_ #define __VK_API_HPP_ +#include <stdint.h> #include <vector> #include <map> #include <iostream> @@ -22,6 +23,7 @@ struct pipeline { }; using bindless_index = uint32_t; +using handle = uint32_t; struct image { VkImage handle; @@ -31,6 +33,7 @@ struct image { VkImageSubresourceRange subresource_range; VkFormat format; VkExtent3D size; + VkImageUsageFlags usages; bindless_index bindless_storage_index; bindless_index bindless_sampled_index; @@ -40,13 +43,18 @@ struct image { }; struct swapchain { - size_t image_count; - std::vector<image> images; + uint32_t image_count; + std::vector<handle> images; VkSwapchainKHR handle; VkSurfaceFormatKHR surface_format; VkExtent2D extent; }; +struct framebuffer { + VkFramebuffer handle; + VkExtent2D size; +}; + struct sampler { VkSampler handle; bindless_index bindless_index; @@ -101,16 +109,16 @@ class vkapi { vkapi(); ~vkapi(); - buffer create_buffer(size_t data_size, VkBufferUsageFlags buffer_usage, VmaMemoryUsage mem_usage); - void copy_buffer(VkCommandBuffer cmd_buf, buffer src, buffer dst, size_t size); - void copy_buffer(VkCommandBuffer cmd_buf, buffer src, image dst); - void destroy_buffer(buffer& buffer); + handle create_buffer(size_t data_size, VkBufferUsageFlags buffer_usage, VmaMemoryUsage mem_usage); + void copy_buffer(VkCommandBuffer cmd_buf, handle src, handle dst, size_t size); + void copy_buffer(VkCommandBuffer cmd_buf, handle src, handle dst); + void destroy_buffer(handle buffer); - image create_image(VkExtent3D size, VkFormat format, VkImageUsageFlags usages); - void destroy_image(image &image); - std::vector<image> create_images(VkExtent3D size, VkFormat format, VkImageUsageFlags usages, size_t image_count); - void destroy_images(std::vector<image> &images); + handle create_image(VkExtent3D size, VkFormat format, VkImageUsageFlags usages); + void destroy_image(handle image); + std::vector<handle> create_images(VkExtent3D size, VkFormat format, VkImageUsageFlags usages, size_t image_count); + void destroy_images(std::vector<handle>& images); VkFence create_fence(); @@ -124,8 +132,8 @@ class vkapi { std::vector<VkSemaphore> create_semaphores(size_t semaphores_count); void destroy_semaphores(std::vector<VkSemaphore> &semaphores); - sampler create_sampler(VkFilter filter, VkSamplerAddressMode address_mode); - void destroy_sampler(sampler sampler); + handle create_sampler(VkFilter filter, VkSamplerAddressMode address_mode); + void destroy_sampler(handle sampler); std::vector<VkCommandBuffer> create_command_buffers(size_t command_buffers_count); @@ -137,10 +145,10 @@ class vkapi { void destroy_render_pass(VkRenderPass render_pass); - VkFramebuffer create_framebuffer(VkRenderPass render_pass, std::vector<image>& images, VkExtent2D size); - std::vector<VkFramebuffer> create_framebuffers(VkRenderPass render_pass, std::vector<image>& images, VkExtent2D size, uint32_t framebuffer_count); - void destroy_framebuffer(VkFramebuffer framebuffer); - void destroy_framebuffers(std::vector<VkFramebuffer>& framebuffers); + framebuffer create_framebuffer(VkRenderPass render_pass, std::vector<VkFormat>& formats, VkExtent2D size); + std::vector<framebuffer> create_framebuffers(VkRenderPass render_pass, std::vector<VkFormat>& formats, VkExtent2D size, uint32_t framebuffer_count); + void destroy_framebuffer(framebuffer framebuffer); + void destroy_framebuffers(std::vector<framebuffer>& framebuffers); pipeline create_compute_pipeline(const char* shader_name); @@ -159,27 +167,27 @@ class vkapi { swapchain create_swapchain(VkSurfaceKHR surface, size_t min_image_count, VkImageUsageFlags usages, VkSwapchainKHR old_swapchain); void destroy_swapchain(swapchain& swapchain); - void update_descriptor_image(image &img, VkDescriptorType type); - void update_descriptor_images(std::vector<image> &images, VkDescriptorType type); - void update_descriptor_sampler(sampler &sampler); - void update_descriptor_samplers(std::vector<sampler> &samplers); + void update_descriptor_image(handle img, VkDescriptorType type); + void update_descriptor_images(std::vector<handle> &images, VkDescriptorType type); + void update_descriptor_sampler(handle sampler); + void update_descriptor_samplers(std::vector<handle> &samplers); void update_constants(VkCommandBuffer command_buffer, VkShaderStageFlagBits shader_stage, off_t offset, size_t size, void* data); void start_record(VkCommandBuffer command_buffer); - void image_barrier(VkCommandBuffer command_buffer, VkImageLayout dst_layout, VkPipelineStageFlagBits dst_stage, VkAccessFlags dst_access, image& image); + void image_barrier(VkCommandBuffer command_buffer, VkImageLayout dst_layout, VkPipelineStageFlagBits dst_stage, VkAccessFlags dst_access, handle image); - void begin_render_pass(VkCommandBuffer command_buffer, VkRenderPass render_pass, VkFramebuffer framebuffer, VkExtent2D size, pipeline& pipeline); + void begin_render_pass(VkCommandBuffer command_buffer, VkRenderPass render_pass, std::vector<VkImageView>& attachments, framebuffer framebuffer, VkExtent2D size); void end_render_pass(VkCommandBuffer command_buffer); void run_compute_pipeline(VkCommandBuffer command_buffer, pipeline& pipeline, size_t group_count_x, size_t group_count_y, size_t group_count_z); void draw(VkCommandBuffer command_buffer, pipeline& pipeline, uint32_t vertex_count, uint32_t vertex_offset); - void draw(VkCommandBuffer command_buffer, pipeline& pipeline, buffer& index_buffer, uint32_t primitive_count, uint32_t indices_offset, uint32_t vertices_offset); + void draw(VkCommandBuffer command_buffer, pipeline& pipeline, handle index_buffer, uint32_t primitive_count, uint32_t indices_offset, uint32_t vertices_offset); - void blit_full(VkCommandBuffer command_buffer, image& src_image, image& dst_image); + void blit_full(VkCommandBuffer command_buffer, handle src_image, handle dst_image); void end_record(VkCommandBuffer command_buffer); @@ -187,6 +195,10 @@ class vkapi { VkResult present(swapchain& swapchain, uint32_t image_index, VkSemaphore wait_semaphore); + const buffer& get_buffer(handle buffer_handle) { return *buffers[buffer_handle]; }; + const image& get_image(handle image_handle) { return *images[image_handle]; }; + const sampler& get_sampler(handle sampler_handle) { return *samplers[sampler_handle]; }; + vkcontext context; private: @@ -195,12 +207,13 @@ class vkapi { const char* shader_stage_extension(VkShaderStageFlags shader_stage); - std::map<VkBuffer, buffer> buffers; - std::map<VkImage, image> images; - std::map<VkSampler, sampler>samplers; + // TODO: Use freelists instead + std::vector<buffer*> buffers; + std::vector<image*> images; + std::vector<sampler*> samplers; - VkCommandPool command_pool; - VkDescriptorPool descriptor_pool; + VkCommandPool command_pool; + VkDescriptorPool descriptor_pool; }; |
