diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2021-08-08 23:01:44 +0200 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2021-08-08 23:01:44 +0200 |
| commit | 03fdcb0341d35bb99fccb2e155ee967f932c9961 (patch) | |
| tree | e318a2e755556b299009dd84230705a3f4432efc /include | |
| parent | db6adfebe08027a49c6b2204683a2b9f3527cd64 (diff) | |
Bindless compute pipelines
Diffstat (limited to 'include')
| -rw-r--r-- | include/scene.hpp | 4 | ||||
| -rw-r--r-- | include/vk-api.hpp | 37 | ||||
| -rw-r--r-- | include/vk-renderer.hpp | 4 |
3 files changed, 30 insertions, 15 deletions
diff --git a/include/scene.hpp b/include/scene.hpp index 3346282..3c69425 100644 --- a/include/scene.hpp +++ b/include/scene.hpp @@ -13,7 +13,7 @@ class scene { camera cam;
// uint32_t max_bounce = 50;
- uint32_t max_bounce = 4;
+ uint32_t max_bounce = 3;
// Output image resolution
uint32_t width;
@@ -25,7 +25,7 @@ class scene { uint32_t triangles_count = 0;
uint32_t enable_dof = false;
uint32_t debug_bvh = false;
- uint32_t padding;
+ uint32_t downscale_factor = 4;
metadata(camera cam, uint32_t width, uint32_t height)
: cam(cam), width(width), height(height) {}
diff --git a/include/vk-api.hpp b/include/vk-api.hpp index 28173f9..8e4b342 100644 --- a/include/vk-api.hpp +++ b/include/vk-api.hpp @@ -15,6 +15,7 @@ struct Buffer { struct Pipeline { std::vector<VkShaderModule> shader_modules; + // TODO: Remove once all pipelines use bindless layout VkDescriptorSetLayout descriptor_set_layout; VkPipelineLayout layout; VkPipeline handle; @@ -29,14 +30,29 @@ struct Image { VkImageSubresourceRange subresource_range; VkFormat format; VkExtent3D size; + uint32_t bindless_index; }; struct Swapchain { - size_t image_count; - std::vector<Image> images; - VkSwapchainKHR handle; - VkSurfaceFormatKHR surface_format; - VkExtent2D extent; + size_t image_count; + std::vector<Image> images; + VkSwapchainKHR handle; + VkSurfaceFormatKHR surface_format; + VkExtent2D extent; +}; + +struct global_descriptor { + VkDescriptorSetLayout set_layout; + VkPipelineLayout pipeline_layout; + VkDescriptorSet set; + + std::vector<uint32_t> indices; + + global_descriptor() { + for (size_t index = 0; index < 1024; index++) { + indices.push_back(index); + } + } }; class window; @@ -89,7 +105,7 @@ class vkapi { void destroy_framebuffers(std::vector<VkFramebuffer>& framebuffers); - Pipeline create_compute_pipeline(const char* shader_name, std::vector<VkDescriptorSetLayoutBinding>& bindings); + Pipeline create_compute_pipeline(const char* shader_name); Pipeline create_graphics_pipeline(const char* shader_name, std::vector<VkDescriptorSetLayoutBinding>& bindings, VkShaderStageFlagBits shader_stages, VkRenderPass render_pass, std::vector<VkDynamicState> dynamic_states); void destroy_pipeline(Pipeline &pipeline); @@ -108,6 +124,7 @@ class vkapi { void update_descriptor_set_buffer(VkDescriptorSet set, VkDescriptorSetLayoutBinding binding, Buffer& buffer); void update_descriptor_set_buffer(VkDescriptorSet set, VkDescriptorSetLayoutBinding binding, Buffer& buffer, VkDeviceSize offset, VkDeviceSize range); void update_descriptor_set_image(VkDescriptorSet set, VkDescriptorSetLayoutBinding binding, VkImageView view, VkSampler sampler); + void update_bindless_descriptor_set_images(std::vector<Image> &images, std::vector<VkSampler> &samplers); void start_record(VkCommandBuffer command_buffer); @@ -117,7 +134,7 @@ class vkapi { void begin_render_pass(VkCommandBuffer command_buffer, VkRenderPass render_pass, VkFramebuffer framebuffer, VkExtent2D size, Pipeline pipeline); void end_render_pass(VkCommandBuffer command_buffer); - void run_compute_pipeline(VkCommandBuffer command_buffer, Pipeline pipeline, VkDescriptorSet set, size_t group_count_x, size_t group_count_y, size_t group_count_z); + 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, VkDescriptorSet set, uint32_t vertex_count, uint32_t vertex_offset); void draw(VkCommandBuffer command_buffer, Pipeline pipeline, VkDescriptorSet set, Buffer index_buffer, uint32_t primitive_count, uint32_t indices_offset, uint32_t vertices_offset); @@ -133,12 +150,14 @@ class vkapi { vkcontext context; + global_descriptor bindless_descriptor; + private: const char* shader_stage_extension(VkShaderStageFlags shader_stage); - VkCommandPool command_pool; - VkDescriptorPool descriptor_pool; + VkCommandPool command_pool; + VkDescriptorPool descriptor_pool; }; diff --git a/include/vk-renderer.hpp b/include/vk-renderer.hpp index f0a21f6..6b256d3 100644 --- a/include/vk-renderer.hpp +++ b/include/vk-renderer.hpp @@ -50,8 +50,6 @@ class vkrenderer { std::vector<VkCommandBuffer> command_buffers; - std::vector<VkDescriptorSetLayoutBinding> compute_sets_bindings; - std::vector<VkDescriptorSet> compute_shader_sets; Pipeline compute_pipeline; Buffer scene_buffer; @@ -59,8 +57,6 @@ class vkrenderer { Buffer bvh_buffer; - std::vector<VkDescriptorSetLayoutBinding> tonemapping_sets_bindings; - std::vector<VkDescriptorSet> tonemapping_shader_sets; Pipeline tonemapping_pipeline; std::vector<VkDescriptorSetLayoutBinding> ui_sets_bindings; |
