wip: convert from include style to module import style :D
Some checks reported errors
continuous-integration/drone/push Build was killed

This commit is contained in:
light7734 2025-11-10 23:16:03 +03:30
parent 1df42cf30d
commit 2f60b837c9
Signed by: light7734
GPG key ID: 8C30176798F1A6BA
4 changed files with 198 additions and 68 deletions

View file

@ -150,6 +150,7 @@ add_library_module(
NAME NAME
renderer renderer
INTERFACES INTERFACES
data.cppm
frontends.cppm frontends.cppm
factory.cppm factory.cppm
vk/api_wrapper.cppm vk/api_wrapper.cppm

View file

@ -1,6 +1,7 @@
export module renderer.data; export module renderer.data;
#include <math/mat4.hpp> import math.mat4;
namespace lt::renderer { namespace lt::renderer {

View file

@ -36,6 +36,7 @@ struct overloads: Ts...
export namespace lt::renderer::vk { export namespace lt::renderer::vk {
using Bool32 = VkBool32; using Bool32 = VkBool32;
using Flags = VkFlags;
namespace constants { namespace constants {
@ -1826,6 +1827,105 @@ private:
VkShaderModule m_shader_module {}; VkShaderModule m_shader_module {};
}; };
class DescriptorPool
{
};
class DescriptorSet
{
public:
enum class Type : std::underlying_type_t<VkDescriptorType>
{
sampler = VK_DESCRIPTOR_TYPE_SAMPLER,
combined_image_sampler = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
sampled_image = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,
storage_image = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
uniform_texel_buffer = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
storage_texel_buffer = VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
uniform_buffer = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
storage_buffer = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
uniform_buffer_dynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
storage_buffer_dynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
input_attachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
inline_uniform_block = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK,
acceleration_structure = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR,
acceleration_structure_nv = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV,
sample_weight_image_qcom = VK_DESCRIPTOR_TYPE_SAMPLE_WEIGHT_IMAGE_QCOM,
block_match_image_qcom = VK_DESCRIPTOR_TYPE_BLOCK_MATCH_IMAGE_QCOM,
tensor_arm = VK_DESCRIPTOR_TYPE_TENSOR_ARM,
_mutable = VK_DESCRIPTOR_TYPE_MUTABLE_EXT,
partitioned_acceleration_structure_nv
= VK_DESCRIPTOR_TYPE_PARTITIONED_ACCELERATION_STRUCTURE_NV,
};
};
class DescriptorSetLayout
{
public:
static constexpr auto object_type = VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT;
struct Binding
{
enum FlagBits : std::underlying_type_t<VkDescriptorBindingFlagBits>
{
update_after_bind = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT,
update_unused_while_pending = VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT,
partially_bound = VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT,
variable_descriptor_count = VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT,
};
Flags flags;
std::uint32_t idx;
std::uint32_t count;
DescriptorSet::Type type;
ShaderStageFlags::T shader_stages;
};
struct CreateInfo
{
enum FlagBits : std::underlying_type_t<VkDescriptorSetLayoutCreateFlagBits>
{
update_after_bind_pool = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT,
push_descriptor = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT,
descriptor_buffer = VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT,
embedded_immutable_samplers
= VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,
indirect_bindable_nv = VK_DESCRIPTOR_SET_LAYOUT_CREATE_INDIRECT_BINDABLE_BIT_NV,
host_only_pool = VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_EXT,
per_stage_nv = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PER_STAGE_BIT_NV,
};
Flags flags;
std::vector<Binding> bindings;
};
DescriptorSetLayout() = default;
DescriptorSetLayout(Device &device, CreateInfo info);
DescriptorSetLayout(DescriptorSetLayout &&) = default;
DescriptorSetLayout(const DescriptorSetLayout &) = delete;
auto operator=(DescriptorSetLayout &&) -> DescriptorSetLayout & = default;
auto operator=(const DescriptorSetLayout &) -> DescriptorSetLayout & = delete;
~DescriptorSetLayout();
private:
memory::NullOnMove<VkDevice> m_device;
VkDescriptorSetLayout m_layout;
};
class Pipeline class Pipeline
{ {
public: public:
@ -1955,8 +2055,18 @@ public:
static constexpr auto object_type = VK_OBJECT_TYPE_PIPELINE_LAYOUT; static constexpr auto object_type = VK_OBJECT_TYPE_PIPELINE_LAYOUT;
struct PushConstantRange
{
ShaderStageFlags::T shader_stages;
std::uint32_t offset;
std::uint32_t size;
};
struct CreateInfo struct CreateInfo
{ {
std::vector<DescriptorSetLayout *> descriptor_set_layouts;
std::vector<PushConstantRange> push_constant_ranges;
}; };
PipelineLayout() = default; PipelineLayout() = default;
@ -1973,7 +2083,6 @@ public:
~PipelineLayout(); ~PipelineLayout();
private: private:
[[nodiscard]] auto get_vk_handle() -> VkPipelineLayout [[nodiscard]] auto get_vk_handle() -> VkPipelineLayout
{ {
@ -1985,17 +2094,6 @@ private:
VkPipelineLayout m_layout {}; VkPipelineLayout m_layout {};
}; };
class DescriptorPool
{
};
class DescriptorSetLayout
{
};
class DescriptorSet
{
};
} // namespace lt::renderer::vk } // namespace lt::renderer::vk
@ -3670,3 +3768,35 @@ auto enumerate_instance_extension_properties() -> std::vector<VkExtensionPropert
return extensions; return extensions;
} }
// auto binding = VkDescriptorSetLayoutBinding {
// .binding = 0,
// .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
// .descriptorCount = 1'000,
// .stageFlags = VK_SHADER_STAGE_VERTEX_BIT,
// };
//
// const auto descriptor_binding_flags = VkDescriptorBindingFlagsEXT {
// VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
// | VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
// | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
// | VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT,
// };
//
// constexpr auto descriptor_count = uint32_t { 1'000 };
//
// auto descriptor_binding_flags_info = VkDescriptorSetLayoutBindingFlagsCreateInfoEXT {
// .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT,
// .bindingCount = 1,
// .pBindingFlags = &descriptor_binding_flags,
// };
// m_vertices_descriptor_set_layout = m_device->create_descriptor_set_layout(
// {
// .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
// .pNext = &descriptor_binding_flags_info,
// .flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT,
// .bindingCount = 1u,
// .pBindings = &binding,
//
// }
// );

View file

@ -1,5 +1,6 @@
export module renderer.vk.pass; export module renderer.vk.pass;
import renderer.data;
import renderer.backend.vk.library_wrapper; import renderer.backend.vk.library_wrapper;
import renderer.backend.vk.device; import renderer.backend.vk.device;
import renderer.backend.vk.swapchain; import renderer.backend.vk.swapchain;
@ -33,15 +34,15 @@ public:
private: private:
Device *m_device {}; Device *m_device {};
vk::PipelineLayout m_layout; vk::DescriptorSetLayout m_descriptor_set_layout;
vk::Pipeline m_pipeline;
vk::DescriptorPool m_descriptor_pool; vk::DescriptorPool m_descriptor_pool;
vk::DescriptorSetLayout m_vertices_descriptor_set_layout;
vk::DescriptorSet m_vertices_descriptor_set; vk::DescriptorSet m_vertices_descriptor_set;
vk::PipelineLayout m_layout;
vk::Pipeline m_pipeline;
}; };
} // namespace lt::renderer::vkb } // namespace lt::renderer::vkb
@ -57,41 +58,54 @@ Pass::Pass(
const lt::assets::ShaderAsset &fragment_shader const lt::assets::ShaderAsset &fragment_shader
) )
: m_device(static_cast<Device *>(device)) : m_device(static_cast<Device *>(device))
{ {
// auto binding = VkDescriptorSetLayoutBinding { using enum vk::DescriptorSetLayout::Binding::FlagBits;
// .binding = 0, auto bindings = std::vector<vk::DescriptorSetLayout::Binding> {
// .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, {
// .descriptorCount = 1'000, .flags = variable_descriptor_count | partially_bound | update_after_bind
// .stageFlags = VK_SHADER_STAGE_VERTEX_BIT, | update_unused_while_pending,
// }; .idx = 0u,
// .count = 1'000u,
// const auto descriptor_binding_flags = VkDescriptorBindingFlagsEXT { .type = vk::DescriptorSet::Type::storage_buffer,
// VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT .shader_stages = vk::ShaderStageFlags::vertex_bit,
// | VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT },
// | VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT };
// | VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT,
// }; using enum vk::DescriptorSetLayout::CreateInfo::FlagBits;
// m_descriptor_set_layout = vk::DescriptorSetLayout(
// constexpr auto descriptor_count = uint32_t { 1'000 }; m_device->vk(),
// vk::DescriptorSetLayout::CreateInfo {
// auto descriptor_binding_flags_info = VkDescriptorSetLayoutBindingFlagsCreateInfoEXT { .flags = update_after_bind_pool,
// .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT, .bindings = {
// .bindingCount = 1, vk::DescriptorSetLayout::Binding {
// .pBindingFlags = &descriptor_binding_flags, .flags = variable_descriptor_count | partially_bound | update_after_bind | update_unused_while_pending,
// }; .idx = 0u,
// .count = 1'000u,
// .type = vk::DescriptorSet::Type::storage_buffer,
// m_vertices_descriptor_set_layout = m_device->create_descriptor_set_layout( .shader_stages = vk::ShaderStageFlags::vertex_bit,
// { },
// .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO, },
// .pNext = &descriptor_binding_flags_info, }
// .flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT, );
// .bindingCount = 1u,
// .pBindings = &binding, auto push_constant_ranges = std::vector<vk::PipelineLayout::PushConstantRange> {
// {
// } .shader_stages = vk::ShaderStageFlags::vertex_bit,
// ); .offset = 0u,
// .size = sizeof(FrameConstants),
},
};
m_layout = vk::PipelineLayout(
m_device->vk(),
vk::PipelineLayout::CreateInfo {
.descriptor_set_layouts = {
&m_descriptor_set_layout,
},
.push_constant_ranges = push_constant_ranges,
}
);
// auto pool_size = VkDescriptorPoolSize { // auto pool_size = VkDescriptorPoolSize {
// .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, // .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
// .descriptorCount = descriptor_count, // .descriptorCount = descriptor_count,
@ -122,22 +136,6 @@ Pass::Pass(
// } // }
// ); // );
m_layout = vk::PipelineLayout(
m_device->vk(),
vk::PipelineLayout::CreateInfo {
// std::vector<VkDescriptorSetLayout> {
// m_vertices_descriptor_set_layout,
// },
//
// std::vector<VkPushConstantRange> {
// VkPushConstantRange {
// .stageFlags = VK_SHADER_STAGE_VERTEX_BIT,
// .offset = 0u,
// .size = sizeof(FrameConstants),
// },
// },
}
);
auto shaders = std::vector<std::pair<vk::ShaderModule, vk::ShaderStageFlags::T>> {}; auto shaders = std::vector<std::pair<vk::ShaderModule, vk::ShaderStageFlags::T>> {};
shaders.emplace_back( shaders.emplace_back(