From 03fdcb0341d35bb99fccb2e155ee967f932c9961 Mon Sep 17 00:00:00 2001 From: ladevieq Date: Sun, 8 Aug 2021 23:01:44 +0200 Subject: Bindless compute pipelines --- include/scene.hpp | 4 ++-- include/vk-api.hpp | 37 ++++++++++++++++++++++++++++--------- include/vk-renderer.hpp | 4 ---- 3 files changed, 30 insertions(+), 15 deletions(-) (limited to 'include') 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 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 images; - VkSwapchainKHR handle; - VkSurfaceFormatKHR surface_format; - VkExtent2D extent; + size_t image_count; + std::vector images; + VkSwapchainKHR handle; + VkSurfaceFormatKHR surface_format; + VkExtent2D extent; +}; + +struct global_descriptor { + VkDescriptorSetLayout set_layout; + VkPipelineLayout pipeline_layout; + VkDescriptorSet set; + + std::vector 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& framebuffers); - Pipeline create_compute_pipeline(const char* shader_name, std::vector& bindings); + Pipeline create_compute_pipeline(const char* shader_name); Pipeline create_graphics_pipeline(const char* shader_name, std::vector& bindings, VkShaderStageFlagBits shader_stages, VkRenderPass render_pass, std::vector 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 &images, std::vector &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 command_buffers; - std::vector compute_sets_bindings; - std::vector compute_shader_sets; Pipeline compute_pipeline; Buffer scene_buffer; @@ -59,8 +57,6 @@ class vkrenderer { Buffer bvh_buffer; - std::vector tonemapping_sets_bindings; - std::vector tonemapping_shader_sets; Pipeline tonemapping_pipeline; std::vector ui_sets_bindings; -- cgit v1.3