From 6db256b8eb4cc45c5296070ae7353e65398d121d Mon Sep 17 00:00:00 2001 From: ladevieq Date: Tue, 18 Aug 2026 00:43:03 +0200 Subject: Finished descriptor heaps implementation --- include/scene.hpp | 12 ++++++------ include/vk-bindless.hpp | 49 ------------------------------------------------- include/vk-device.hpp | 26 -------------------------- 3 files changed, 6 insertions(+), 81 deletions(-) delete mode 100644 include/vk-bindless.hpp (limited to 'include') diff --git a/include/scene.hpp b/include/scene.hpp index a1c76e2..5cda832 100644 --- a/include/scene.hpp +++ b/include/scene.hpp @@ -38,12 +38,12 @@ public: handle bvh_buffer_handle; handle materials_buffer_handle; - uint64_t indices_buffer_address() { return vkdevice::get().get_buffer(indices_buffer_handle).device_address; }; - uint64_t positions_buffer_address() { return vkdevice::get().get_buffer(positions_buffer_handle).device_address; }; - uint64_t normals_buffer_address() { return vkdevice::get().get_buffer(normals_buffer_handle).device_address; }; - uint64_t uvs_buffer_address() { return vkdevice::get().get_buffer(uvs_buffer_handle).device_address; }; - uint64_t bvh_buffer_address() { return vkdevice::get().get_buffer(bvh_buffer_handle).device_address; }; - uint64_t materials_buffer_address() { return vkdevice::get().get_buffer(materials_buffer_handle).device_address; }; + uint64_t indices_buffer_address() { return vkdevice::get().get_buffer(indices_buffer_handle)->device_address; }; + uint64_t positions_buffer_address() { return vkdevice::get().get_buffer(positions_buffer_handle)->device_address; }; + uint64_t normals_buffer_address() { return vkdevice::get().get_buffer(normals_buffer_handle)->device_address; }; + uint64_t uvs_buffer_address() { return vkdevice::get().get_buffer(uvs_buffer_handle)->device_address; }; + uint64_t bvh_buffer_address() { return vkdevice::get().get_buffer(bvh_buffer_handle)->device_address; }; + uint64_t materials_buffer_address() { return vkdevice::get().get_buffer(materials_buffer_handle)->device_address; }; }; #endif // !__SCENE_HPP_ diff --git a/include/vk-bindless.hpp b/include/vk-bindless.hpp deleted file mode 100644 index be076b8..0000000 --- a/include/vk-bindless.hpp +++ /dev/null @@ -1,49 +0,0 @@ -#pragma once - -#include - -#include "handle.hpp" - -enum UniformTypes : uint32_t { - GLOBAL, - PASS, - DRAW, - MAX, -}; - -enum SamplerType : uint32_t { - NEAREST, - LINEAR, - MAX_SAMPLER, -}; - -struct device_buffer; - -struct bindless_model { - [[nodiscard]] device_buffer* get_uniform_buffer(enum UniformTypes type) const; - - void init(); - - void deinit(); - - VkPipelineLayout global_layout; - VkDescriptorSet global_set; - -public: - static constexpr size_t push_constant_slot_size = sizeof(uintptr_t); - static constexpr size_t push_constant_slots = 3U; - -private: - VkDescriptorSetLayout global_set_layout; - VkDescriptorPool descriptor_pool; - handle uniform_buffers[UniformTypes::MAX]; - - static constexpr size_t descriptor_pool_allocable_sets_count = 64U; - static constexpr uint32_t set_descriptors_count = 1024U; - - VkSampler samplers[SamplerType::MAX_SAMPLER]; - - static constexpr size_t globals_uniform_buffer_size = 64 * KB; - static constexpr size_t passes_uniform_buffer_size = 64 * KB; - static constexpr size_t draws_uniform_buffer_size = 64 * KB; -}; diff --git a/include/vk-device.hpp b/include/vk-device.hpp index 84a1a36..913a28b 100644 --- a/include/vk-device.hpp +++ b/include/vk-device.hpp @@ -1,7 +1,6 @@ #pragma once #include "freelist.hpp" -#include "vk-bindless.hpp" #include "vk-command-buffer.hpp" using VmaAllocator = struct VmaAllocator_T*; @@ -72,14 +71,6 @@ class vkdevice { return &surfaces[handle]; } - inline VmaAllocator get_allocator() const { - return gpu_allocator; - } - - inline VkDevice get_device() const { - return device; - } - // uint64_t submit(std::span buffers, handle wait_handle, handle signal_handle, handle fence_handle); uint32_t acquire_image_index(handle surface_handle); uint64_t submit_before_present(handle surface_handle, command_buffer* buffers, uint32_t count); @@ -104,27 +95,10 @@ class vkdevice { void create_device(); - void create_heaps(VkPhysicalDeviceDescriptorHeapPropertiesEXT& descriptor_heap_props); - bool device_support_features(VkPhysicalDevice physical_dev); queue queues[static_cast(QueueType::MAX)]; - VkInstance instance; - VkPhysicalDevice physical_device; - VkPhysicalDeviceProperties2 physical_device_props; - VkDevice device; - - handle image_heap; // TODO: Dont use handle for internally used resources - handle sampler_heap; - - static constexpr size_t max_images_count = UINT16_MAX; - static constexpr size_t max_samplers_count = 16U; - - static size_t - - VmaAllocator gpu_allocator; - static constexpr size_t max_allocable_command_buffers = 16; static constexpr size_t max_submitable_command_buffers = 16; -- cgit v1.3