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
renderer
INTERFACES
data.cppm
frontends.cppm
factory.cppm
vk/api_wrapper.cppm

View file

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

View file

@ -36,6 +36,7 @@ struct overloads: Ts...
export namespace lt::renderer::vk {
using Bool32 = VkBool32;
using Flags = VkFlags;
namespace constants {
@ -1826,6 +1827,105 @@ private:
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
{
public:
@ -1955,8 +2055,18 @@ public:
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
{
std::vector<DescriptorSetLayout *> descriptor_set_layouts;
std::vector<PushConstantRange> push_constant_ranges;
};
PipelineLayout() = default;
@ -1973,7 +2083,6 @@ public:
~PipelineLayout();
private:
[[nodiscard]] auto get_vk_handle() -> VkPipelineLayout
{
@ -1985,17 +2094,6 @@ private:
VkPipelineLayout m_layout {};
};
class DescriptorPool
{
};
class DescriptorSetLayout
{
};
class DescriptorSet
{
};
} // namespace lt::renderer::vk
@ -3670,3 +3768,35 @@ auto enumerate_instance_extension_properties() -> std::vector<VkExtensionPropert
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;
import renderer.data;
import renderer.backend.vk.library_wrapper;
import renderer.backend.vk.device;
import renderer.backend.vk.swapchain;
@ -33,15 +34,15 @@ public:
private:
Device *m_device {};
vk::PipelineLayout m_layout;
vk::Pipeline m_pipeline;
vk::DescriptorSetLayout m_descriptor_set_layout;
vk::DescriptorPool m_descriptor_pool;
vk::DescriptorSetLayout m_vertices_descriptor_set_layout;
vk::DescriptorSet m_vertices_descriptor_set;
vk::PipelineLayout m_layout;
vk::Pipeline m_pipeline;
};
} // namespace lt::renderer::vkb
@ -57,41 +58,54 @@ Pass::Pass(
const lt::assets::ShaderAsset &fragment_shader
)
: m_device(static_cast<Device *>(device))
{
// 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,
//
// }
// );
//
using enum vk::DescriptorSetLayout::Binding::FlagBits;
auto bindings = std::vector<vk::DescriptorSetLayout::Binding> {
{
.flags = variable_descriptor_count | partially_bound | update_after_bind
| update_unused_while_pending,
.idx = 0u,
.count = 1'000u,
.type = vk::DescriptorSet::Type::storage_buffer,
.shader_stages = vk::ShaderStageFlags::vertex_bit,
},
};
using enum vk::DescriptorSetLayout::CreateInfo::FlagBits;
m_descriptor_set_layout = vk::DescriptorSetLayout(
m_device->vk(),
vk::DescriptorSetLayout::CreateInfo {
.flags = update_after_bind_pool,
.bindings = {
vk::DescriptorSetLayout::Binding {
.flags = variable_descriptor_count | partially_bound | update_after_bind | update_unused_while_pending,
.idx = 0u,
.count = 1'000u,
.type = vk::DescriptorSet::Type::storage_buffer,
.shader_stages = vk::ShaderStageFlags::vertex_bit,
},
},
}
);
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 {
// .type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
// .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>> {};
shaders.emplace_back(