fixed the private purview of modules not resolving interfaces when linked
Some checks reported errors
continuous-integration/drone/push Build was killed

This commit is contained in:
light7734 2025-11-16 07:05:55 +03:30
parent 7d6ec52830
commit e5467124e1
16 changed files with 200 additions and 129 deletions

View file

@ -209,6 +209,7 @@ add_module(
INTERFACES
system.cppm
DEPENDENCIES
memory
app
time
input

View file

@ -77,7 +77,7 @@ private:
#define lt_profile_end_session() ::lt::Instrumentor::end_session()
module :private;
using namespace lt::debug;
namespace lt::debug {
void Instrumentor::begin_session_impl(const std::string &outputPath)
{
@ -143,3 +143,4 @@ InstrumentorTimer::~InstrumentorTimer()
Instrumentor::submit_scope_profile(m_result);
}
} // namespace lt::debug

View file

@ -59,7 +59,7 @@ private:
module :private;
using namespace lt::input;
namespace lt::input {
template<class... Ts>
struct overloads: Ts...
@ -158,10 +158,8 @@ void System::on_key_press(const lt::surface::KeyPressedEvent &event)
{
if (event.get_key() > m_keys.size())
{
log::debug(
"Key code larger than key container size, implement platform-dependant "
"key-code-mapping!"
);
log::debug("Key code larger than key container size, implement platform-dependant "
"key-code-mapping!");
return;
}
@ -173,10 +171,8 @@ void System::on_key_release(const lt::surface::KeyReleasedEvent &event)
{
if (event.get_key() > m_keys.size())
{
log::debug(
"Key code larger than key container size, implement platform-dependant "
"key-code-mapping!"
);
log::debug("Key code larger than key container size, implement platform-dependant "
"key-code-mapping!");
return;
}
@ -198,3 +194,5 @@ void System::on_button_release(const lt::surface::ButtonReleasedEvent &event)
{
m_buttons[event.get_button()] = false;
}
} // namespace lt::input

View file

@ -54,8 +54,7 @@ export namespace lt::renderer {
} // namespace lt::renderer
module :private;
using namespace lt;
using namespace lt::renderer;
namespace lt::renderer {
[[nodiscard]] auto get_instance(Api target_api) -> IInstance *
{
@ -239,3 +238,5 @@ using namespace lt::renderer;
std::unreachable();
}
} // namespace lt::renderer

View file

@ -114,7 +114,7 @@ private:
} // namespace lt::renderer
module :private;
using namespace lt::renderer;
namespace lt::renderer {
System::System(CreateInfo info)
: m_surface_entity(info.surface_entity)
@ -225,3 +225,5 @@ void System::recreate_swapchain()
m_swapchain = create_swapchain(m_api, m_surface.get(), m_gpu.get(), m_device.get());
m_renderer->replace_swapchain(m_swapchain.get());
}
} // namespace lt::renderer

View file

@ -732,7 +732,10 @@ public:
auto operator=(const Instance &) = delete;
~Instance();
~Instance()
{
// WIP;
}
void load_functions();
@ -1117,7 +1120,10 @@ public:
auto operator=(const Gpu &) -> Gpu & = default;
~Gpu();
~Gpu()
{
// WIP;
}
[[nodiscard]] auto get_features() const -> Features;
@ -1693,7 +1699,10 @@ public:
auto operator=(const ImageView &) -> ImageView & = delete;
~ImageView();
~ImageView()
{
// WIP;
}
private:
[[nodiscard]] auto get_vk_handle() -> VkImageView
@ -1718,9 +1727,15 @@ public:
ShaderModule() = default;
ShaderModule(Device &device, CreateInfo info);
ShaderModule(Device &device, CreateInfo info)
{
// WIP
}
~ShaderModule();
~ShaderModule()
{
// WIP
}
ShaderModule(ShaderModule &&) = default;
@ -1820,7 +1835,10 @@ public:
DescriptorSetLayout() = default;
DescriptorSetLayout(Device &device, CreateInfo info);
DescriptorSetLayout(Device &device, CreateInfo info)
{
// WIP
}
DescriptorSetLayout(DescriptorSetLayout &&) = default;
@ -1830,8 +1848,10 @@ public:
auto operator=(const DescriptorSetLayout &) -> DescriptorSetLayout & = delete;
~DescriptorSetLayout();
~DescriptorSetLayout()
{
// WIP
}
private:
memory::NullOnMove<VkDevice> m_device;
@ -1992,7 +2012,10 @@ public:
PipelineLayout() = default;
PipelineLayout(Device &device, CreateInfo info);
PipelineLayout(Device &device, CreateInfo info)
{
// WIP
}
PipelineLayout(PipelineLayout &&) = default;
@ -2002,7 +2025,10 @@ public:
auto operator=(const PipelineLayout &) -> PipelineLayout & = delete;
~PipelineLayout();
~PipelineLayout()
{
// WIP
}
private:
[[nodiscard]] auto get_vk_handle() -> VkPipelineLayout
@ -2167,23 +2193,51 @@ public:
std::uint32_t first_instance;
};
void begin(BeginInfo info = {});
CommandBuffer() = default; // WIP
void end();
CommandBuffer(CommandBuffer &&) = default;
void copy(BufferCopyInfo info);
CommandBuffer(const CommandBuffer &) = delete;
void push_constants(PushConstantsInfo info);
auto operator=(CommandBuffer &&) -> CommandBuffer & = default;
void image_barrier(ImageBarrierInfo info);
auto operator=(const CommandBuffer &) -> CommandBuffer & = delete;
void begin_rendering(RenderingInfo info);
void begin(BeginInfo info = {})
{
}
void end_rendering();
void end()
{
}
void bind_pipeline(Pipeline &pipeline, Pipeline::BindPoint bind_point);
void copy(BufferCopyInfo info)
{
}
void draw(DrawInfo info);
void push_constants(PushConstantsInfo info)
{
}
void image_barrier(ImageBarrierInfo info)
{
}
void begin_rendering(RenderingInfo info)
{
}
void end_rendering()
{
}
void bind_pipeline(Pipeline &pipeline, Pipeline::BindPoint bind_point)
{
}
void draw(DrawInfo info)
{
}
private:
[[nodiscard]] auto get_vk_handle() -> VkCommandBuffer
@ -2222,9 +2276,15 @@ public:
CommandPool() = default;
CommandPool(Device &device, CreateInfo info);
CommandPool(Device &device, CreateInfo info)
{
// WIP
}
~CommandPool();
~CommandPool()
{
// WIP
}
CommandPool(CommandPool &&) = default;
@ -2234,7 +2294,11 @@ public:
auto operator=(const CommandPool &) -> CommandPool & = delete;
[[nodiscard]] auto allocate(uint32_t count, BufferLevel level) -> std::vector<CommandBuffer>;
[[nodiscard]] auto allocate(uint32_t count, BufferLevel level) -> std::vector<CommandBuffer>
{
// WIP
return {};
}
private:
VkDevice m_device {};
@ -2487,14 +2551,17 @@ private:
/** ================================ **/
/** Private Template Implementations **/
/** ================================ **/
using namespace lt::renderer::vk;
namespace lt::renderer::vk {
// This is the only api function that needs to be inside the "header" part of the module,
// since it's used in a template that does std::format magic.
//
// ...And the template implementation needs to be visible by the compiler on the calling site to
// generate the templated code
namespace api {
PFN_vkSetDebugUtilsObjectNameEXT set_debug_object_name {}; // NOLINT
}
namespace lt::renderer::vk {
void vkc(VkResult result)
{
if (result)
@ -2534,8 +2601,9 @@ void Device::name(T &object, const char *name)
} // namespace lt::renderer::vk
module :private;
using namespace lt::renderer::vk;
namespace lt::renderer::vk {
namespace api {
// global functions
@ -4286,3 +4354,5 @@ auto enumerate_instance_extension_properties() -> std::vector<VkExtensionPropert
//
// }
// );
} // namespace lt::renderer::vk

View file

@ -37,8 +37,7 @@ private:
} // namespace lt::renderer::vkb
module :private;
using namespace lt::renderer;
using namespace lt::renderer::vkb;
namespace lt::renderer::vkb {
[[nodiscard]] auto to_native_severity(IDebugger::MessageSeverity severity) -> vk::Flags
{
@ -190,3 +189,5 @@ Debugger::Debugger(IInstance *instance, CreateInfo info)
)
{
}
} // namespace lt::renderer::vkb

View file

@ -9,7 +9,6 @@ import renderer.vk.gpu;
import renderer.vk.surface;
import std;
namespace lt::renderer::vkb {
export class Device: public IDevice
@ -65,9 +64,7 @@ private:
module :private;
using namespace lt::renderer;
using namespace lt::renderer::vkb;
namespace lt::renderer::vkb {
Device::Device(IGpu *gpu, ISurface *surface)
: m_gpu(static_cast<Gpu *>(gpu))
@ -153,3 +150,5 @@ void Device::initialize_queue_indices()
"Failed to find presentation queue family"
);
}
} // namespace lt::renderer::vkb

View file

@ -64,7 +64,7 @@ private:
module :private;
using namespace lt::renderer::vkb;
namespace lt::renderer::vkb {
Gpu::Gpu(IInstance *instance)
{
@ -129,3 +129,5 @@ Gpu::Gpu(IInstance *instance)
// vkc(vk_create_device(m_gpu, &info, nullptr, &device));
// return device;
// }
} // namespace lt::renderer::vkb

View file

@ -57,7 +57,7 @@ private:
} // namespace lt::renderer::vkb
module :private;
using namespace lt::renderer::vkb;
namespace lt::renderer::vkb {
Instance::Instance()
{
@ -146,3 +146,5 @@ Instance::Instance()
// {
// vk_destroy_debug_messenger(m_instance, messenger, m_allocator);
// }
} // namespace lt::renderer::vkb

View file

@ -49,7 +49,7 @@ private:
std::uint32_t m_max_frames_in_flight {};
Device * m_device {};
Device *m_device {};
Swapchain *m_swapchain {};
@ -85,8 +85,7 @@ private:
} // namespace lt::renderer::vkb
module :private;
using namespace lt::renderer;
using namespace lt::renderer::vkb;
namespace lt::renderer::vkb {
Renderer::Renderer(
IGpu *gpu,
@ -117,13 +116,11 @@ Renderer::Renderer(
.debug_name = "staging buffer",
}
)
, m_pass(
memory::create_ref<Pass>(
, m_pass(memory::create_ref<Pass>(
m_device,
assets::ShaderAsset { "./data/test_assets/sprite.vert.asset" },
assets::ShaderAsset { "./data/test_assets/triangle.frag.asset" }
)
)
))
, m_pool(
m_device->vk(),
{
@ -170,23 +167,19 @@ Renderer::Renderer(
record_cmd(cmd, image_idx);
auto &submit_semaphore = m_submit_semaphores[image_idx];
m_device->graphics_queue().submit(
vk::Queue::SubmitInfo {
m_device->graphics_queue().submit(vk::Queue::SubmitInfo {
.command_buffer = &cmd,
.wait_stages = vk::PipelineStageFlags::color_attachment_output_bit,
.wait_semaphore = &acquire_semaphore,
.signal_semaphore = &submit_semaphore,
.signal_fence = &frame_fence,
}
);
});
m_device->present_queue().present(
vk::Queue::PresentInfo {
m_device->present_queue().present(vk::Queue::PresentInfo {
.wait_semaphore = &submit_semaphore,
.swapchain = &m_swapchain->vk(),
.image_idx = image_idx,
}
);
});
return Result::success;
}
@ -321,28 +314,23 @@ void Renderer::record_cmd(vk::CommandBuffer &cmd, std::uint32_t image_idx)
cmd.begin({});
m_staging_buffer.unmap();
cmd.copy(
{
cmd.copy({
.src_buffer = &m_staging_buffer.vk(),
.dst_buffer = &m_vertex_buffer.vk(),
.src_offset = m_staging_offset,
.dst_offset = m_staging_offset,
.size = m_current_sprite_idx * sizeof(components::Sprite::Vertex),
}
);
cmd.push_constants(
{
});
cmd.push_constants({
.layout = &m_pass->get_layout(),
.shader_stages = vk::ShaderStageFlags::vertex_bit,
.offset = 0u,
.size = sizeof(FrameConstants),
.data = &m_frame_constants,
}
);
});
using AccessFlagBits = vk::CommandBuffer::ImageBarrierInfo::AccessFlagBits;
cmd.image_barrier(
{
cmd.image_barrier({
.image = &m_swapchain->get_image(image_idx),
.range = vk::Image::full_color_range,
.src_stages = vk::PipelineStageFlags::color_attachment_output_bit,
@ -351,8 +339,7 @@ void Renderer::record_cmd(vk::CommandBuffer &cmd, std::uint32_t image_idx)
.dst_accesses = AccessFlagBits::color_attachment_write,
.src_layout = vk::Image::Layout::undefined,
.dst_layout = vk::Image::Layout::color_attachment_optimal,
}
);
});
using Attachment = vk::CommandBuffer::RenderingInfo::AttachmentInfo;
cmd.begin_rendering(
@ -373,18 +360,15 @@ void Renderer::record_cmd(vk::CommandBuffer &cmd, std::uint32_t image_idx)
cmd.bind_pipeline(m_pass->get_pipeline(), vk::Pipeline::BindPoint::graphics);
// cmd.set_viewport();
// cmd.set_scissors();
cmd.draw(
{
cmd.draw({
.vertex_count = static_cast<std::uint32_t>(m_current_sprite_idx),
.instance_count = 1u,
.first_vertex = 0u,
.first_instance = 0u,
}
);
});
cmd.end_rendering();
cmd.image_barrier(
{
cmd.image_barrier({
.image = &m_swapchain->get_image(image_idx),
.src_stages = vk::PipelineStageFlags::color_attachment_output_bit,
.dst_stages = vk::PipelineStageFlags::bottom_of_pipe_bit,
@ -394,8 +378,7 @@ void Renderer::record_cmd(vk::CommandBuffer &cmd, std::uint32_t image_idx)
.src_layout = vk::Image::Layout::color_attachment_optimal,
.dst_layout = vk::Image::Layout::present_src,
}
);
});
cmd.end();
}
@ -439,3 +422,5 @@ void Renderer::submit_sprite(
.color = sprite.color,
};
}
} // namespace lt::renderer::vkb

View file

@ -32,7 +32,7 @@ private:
} // namespace lt::renderer::vkb
module :private;
using namespace lt::renderer::vkb;
namespace lt::renderer::vkb {
Surface::Surface(IInstance *instance, const ecs::Entity &surface_entity)
: m_surface_entity(surface_entity)
@ -81,3 +81,5 @@ Surface::Surface(IInstance *instance, const ecs::Entity &surface_entity)
{
return m_surface_entity.get<surface::SurfaceComponent>().get_resolution();
}
} // namespace lt::renderer::vkb

View file

@ -74,8 +74,7 @@ private:
module :private;
using namespace lt::renderer;
using namespace lt::renderer::vkb;
namespace lt::renderer::vkb {
Swapchain::Swapchain(ISurface *surface, IGpu *gpu, IDevice *device)
: m_surface(static_cast<Surface *>(surface))
@ -168,3 +167,5 @@ Swapchain::Swapchain(ISurface *surface, IGpu *gpu, IDevice *device)
// Fall-back to min_image_count
return min_image_count;
}
} // namespace lt::renderer::vkb

View file

@ -112,7 +112,7 @@ private:
// -------* IMPLEMENTATION *------- //
/////////////////////////////////////
module :private;
using namespace lt::test;
namespace lt::test {
/* static */ void Registry::register_suite(SuiteFunction suite)
{
@ -309,3 +309,5 @@ Registry::Registry()
static auto registry = Registry {};
return registry;
}
} // namespace lt::test

View file

@ -118,8 +118,10 @@ auto operator""_suite(const char *name, std::size_t size) -> TestSuite
// -------* IMPLEMENTATION *------- //
/////////////////////////////////////
module :private;
using namespace lt::test;
namespace lt::test {
TestCase::TestCase(std::string_view name): m_name(name)
{
}
} // namespace lt::test

View file

@ -26,7 +26,7 @@ private:
} // namespace lt::time
module :private;
using namespace lt::time;
namespace lt::time {
Timer::Timer(Timepoint start): m_start(start)
{
@ -41,3 +41,5 @@ void Timer::reset(Timepoint start)
{
return { std::chrono::steady_clock::now() - m_start };
}
} // namespace lt::time