aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorladevieq <ladevie.quentin@gmail.com>2021-08-08 23:01:44 +0200
committerladevieq <ladevie.quentin@gmail.com>2021-08-08 23:01:44 +0200
commit03fdcb0341d35bb99fccb2e155ee967f932c9961 (patch)
treee318a2e755556b299009dd84230705a3f4432efc /include
parentdb6adfebe08027a49c6b2204683a2b9f3527cd64 (diff)
Bindless compute pipelines
Diffstat (limited to 'include')
-rw-r--r--include/scene.hpp4
-rw-r--r--include/vk-api.hpp37
-rw-r--r--include/vk-renderer.hpp4
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;