From e5467124e124d840cc9fc041d9d11284a80ebf5c Mon Sep 17 00:00:00 2001 From: light7734 Date: Sun, 16 Nov 2025 07:05:55 +0330 Subject: [PATCH] fixed the private purview of modules not resolving interfaces when linked --- modules/CMakeLists.txt | 1 + modules/debug/instrumentor.cppm | 3 +- modules/input/system.cppm | 16 ++-- modules/renderer/factory.cppm | 5 +- modules/renderer/system.cppm | 4 +- modules/renderer/vk/api_wrapper.cppm | 122 +++++++++++++++++++----- modules/renderer/vk/debugger.cppm | 5 +- modules/renderer/vk/device.cppm | 7 +- modules/renderer/vk/gpu.cppm | 4 +- modules/renderer/vk/instance.cppm | 4 +- modules/renderer/vk/renderer.cppm | 137 ++++++++++++--------------- modules/renderer/vk/surface.cppm | 4 +- modules/renderer/vk/swapchain.cppm | 5 +- modules/test/registry.cppm | 4 +- modules/test/test.cppm | 4 +- modules/time/timer.cppm | 4 +- 16 files changed, 200 insertions(+), 129 deletions(-) diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 41cca87..9ece596 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -209,6 +209,7 @@ add_module( INTERFACES system.cppm DEPENDENCIES + memory app time input diff --git a/modules/debug/instrumentor.cppm b/modules/debug/instrumentor.cppm index 0f946df..8978a58 100644 --- a/modules/debug/instrumentor.cppm +++ b/modules/debug/instrumentor.cppm @@ -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 diff --git a/modules/input/system.cppm b/modules/input/system.cppm index 19baca6..8aa57a7 100644 --- a/modules/input/system.cppm +++ b/modules/input/system.cppm @@ -59,7 +59,7 @@ private: module :private; -using namespace lt::input; +namespace lt::input { template 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 diff --git a/modules/renderer/factory.cppm b/modules/renderer/factory.cppm index 49f661e..f2d05ad 100644 --- a/modules/renderer/factory.cppm +++ b/modules/renderer/factory.cppm @@ -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 diff --git a/modules/renderer/system.cppm b/modules/renderer/system.cppm index 9eab995..f3bce25 100644 --- a/modules/renderer/system.cppm +++ b/modules/renderer/system.cppm @@ -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 diff --git a/modules/renderer/vk/api_wrapper.cppm b/modules/renderer/vk/api_wrapper.cppm index 1326dd3..1e3db76 100644 --- a/modules/renderer/vk/api_wrapper.cppm +++ b/modules/renderer/vk/api_wrapper.cppm @@ -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 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; + [[nodiscard]] auto allocate(uint32_t count, BufferLevel level) -> std::vector + { + // 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 vk::Flags { @@ -190,3 +189,5 @@ Debugger::Debugger(IInstance *instance, CreateInfo info) ) { } + +} // namespace lt::renderer::vkb diff --git a/modules/renderer/vk/device.cppm b/modules/renderer/vk/device.cppm index 84ca75b..58c99a4 100644 --- a/modules/renderer/vk/device.cppm +++ b/modules/renderer/vk/device.cppm @@ -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)) @@ -153,3 +150,5 @@ void Device::initialize_queue_indices() "Failed to find presentation queue family" ); } + +} // namespace lt::renderer::vkb diff --git a/modules/renderer/vk/gpu.cppm b/modules/renderer/vk/gpu.cppm index dae457e..ad2e53f 100644 --- a/modules/renderer/vk/gpu.cppm +++ b/modules/renderer/vk/gpu.cppm @@ -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 diff --git a/modules/renderer/vk/instance.cppm b/modules/renderer/vk/instance.cppm index acabfd3..2e739f5 100644 --- a/modules/renderer/vk/instance.cppm +++ b/modules/renderer/vk/instance.cppm @@ -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 diff --git a/modules/renderer/vk/renderer.cppm b/modules/renderer/vk/renderer.cppm index 1566318..4a217c5 100644 --- a/modules/renderer/vk/renderer.cppm +++ b/modules/renderer/vk/renderer.cppm @@ -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( - m_device, - assets::ShaderAsset { "./data/test_assets/sprite.vert.asset" }, - assets::ShaderAsset { "./data/test_assets/triangle.frag.asset" } - ) - ) + , m_pass(memory::create_ref( + 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 { - .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->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 { - .wait_semaphore = &submit_semaphore, - .swapchain = &m_swapchain->vk(), - .image_idx = image_idx, - } - ); + m_device->present_queue().present(vk::Queue::PresentInfo { + .wait_semaphore = &submit_semaphore, + .swapchain = &m_swapchain->vk(), + .image_idx = image_idx, + }); return Result::success; } @@ -321,38 +314,32 @@ void Renderer::record_cmd(vk::CommandBuffer &cmd, std::uint32_t image_idx) cmd.begin({}); m_staging_buffer.unmap(); - 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( - { - .layout = &m_pass->get_layout(), - .shader_stages = vk::ShaderStageFlags::vertex_bit, - .offset = 0u, - .size = sizeof(FrameConstants), - .data = &m_frame_constants, - } - ); + 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({ + .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( - { - .image = &m_swapchain->get_image(image_idx), - .range = vk::Image::full_color_range, - .src_stages = vk::PipelineStageFlags::color_attachment_output_bit, - .dst_stages = vk::PipelineStageFlags::color_attachment_output_bit, - .src_accesses = AccessFlagBits::none, - .dst_accesses = AccessFlagBits::color_attachment_write, - .src_layout = vk::Image::Layout::undefined, - .dst_layout = vk::Image::Layout::color_attachment_optimal, - } - ); + cmd.image_barrier({ + .image = &m_swapchain->get_image(image_idx), + .range = vk::Image::full_color_range, + .src_stages = vk::PipelineStageFlags::color_attachment_output_bit, + .dst_stages = vk::PipelineStageFlags::color_attachment_output_bit, + .src_accesses = AccessFlagBits::none, + .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,29 +360,25 @@ 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( - { - .vertex_count = static_cast(m_current_sprite_idx), - .instance_count = 1u, - .first_vertex = 0u, - .first_instance = 0u, - } - ); + cmd.draw({ + .vertex_count = static_cast(m_current_sprite_idx), + .instance_count = 1u, + .first_vertex = 0u, + .first_instance = 0u, + }); cmd.end_rendering(); - 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, - .src_accesses = AccessFlagBits::color_attachment_read - | AccessFlagBits::color_attachment_write, - .dst_accesses = {}, - .src_layout = vk::Image::Layout::color_attachment_optimal, - .dst_layout = vk::Image::Layout::present_src, + 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, + .src_accesses = AccessFlagBits::color_attachment_read + | AccessFlagBits::color_attachment_write, + .dst_accesses = {}, + .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 diff --git a/modules/renderer/vk/surface.cppm b/modules/renderer/vk/surface.cppm index 7fa5f9a..d83056f 100644 --- a/modules/renderer/vk/surface.cppm +++ b/modules/renderer/vk/surface.cppm @@ -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().get_resolution(); } + +} // namespace lt::renderer::vkb diff --git a/modules/renderer/vk/swapchain.cppm b/modules/renderer/vk/swapchain.cppm index 34144ce..50b038b 100644 --- a/modules/renderer/vk/swapchain.cppm +++ b/modules/renderer/vk/swapchain.cppm @@ -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)) @@ -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 diff --git a/modules/test/registry.cppm b/modules/test/registry.cppm index aa01ae4..efd4f0f 100644 --- a/modules/test/registry.cppm +++ b/modules/test/registry.cppm @@ -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 diff --git a/modules/test/test.cppm b/modules/test/test.cppm index 1ca83ef..6d0c96b 100644 --- a/modules/test/test.cppm +++ b/modules/test/test.cppm @@ -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 diff --git a/modules/time/timer.cppm b/modules/time/timer.cppm index 7cea1fe..18d8dd2 100644 --- a/modules/time/timer.cppm +++ b/modules/time/timer.cppm @@ -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