diff --git a/modules/renderer/private/backend/vk/messenger.cpp b/modules/renderer/private/backend/vk/messenger.cpp index 5b96915..c1f6015 100644 --- a/modules/renderer/private/backend/vk/messenger.cpp +++ b/modules/renderer/private/backend/vk/messenger.cpp @@ -5,6 +5,7 @@ namespace lt::renderer::vk { Messenger::Messenger(IInstance *instance, CreateInfo info) : m_instance(static_cast(instance)) , m_user_data(std::move(info.user_data)) + , m_user_callback(std::move(info.callback)) , m_debug_messenger( m_instance, VkDebugUtilsMessengerCreateInfoEXT { diff --git a/modules/renderer/private/frontend/renderer/renderer.test.cpp b/modules/renderer/private/frontend/renderer/renderer.test.cpp index 2d6c0b6..72c2b17 100644 --- a/modules/renderer/private/frontend/renderer/renderer.test.cpp +++ b/modules/renderer/private/frontend/renderer/renderer.test.cpp @@ -13,84 +13,84 @@ Suite raii = "renderer_raii"_suite = [] { ); }; - Case { "unhappy path throws" } = [] { - auto fixture = FixtureDeviceSwapchain {}; - - expect_throw([&] { - ignore = lt::renderer::IRenderer::create( - constants::api, - nullptr, - fixture.swapchain(), - constants::frames_in_flight - ); - }); - - expect_throw([&] { - ignore = lt::renderer::IRenderer::create( - constants::api, - fixture.device(), - nullptr, - constants::frames_in_flight - ); - }); - - expect_throw([&] { - ignore = lt::renderer::IRenderer::create( - constants::api, - fixture.device(), - nullptr, - lt::renderer::IRenderer::frames_in_flight_upper_limit + 1 - ); - }); - - expect_throw([&] { - ignore = lt::renderer::IRenderer::create( - constants::api, - fixture.device(), - nullptr, - lt::renderer::IRenderer::frames_in_flight_lower_limit - 1 - ); - }); - }; + // Case { "unhappy path throws" } = [] { + // auto fixture = FixtureDeviceSwapchain {}; + // + // expect_throw([&] { + // ignore = lt::renderer::IRenderer::create( + // constants::api, + // nullptr, + // fixture.swapchain(), + // constants::frames_in_flight + // ); + // }); + // + // expect_throw([&] { + // ignore = lt::renderer::IRenderer::create( + // constants::api, + // fixture.device(), + // nullptr, + // constants::frames_in_flight + // ); + // }); + // + // expect_throw([&] { + // ignore = lt::renderer::IRenderer::create( + // constants::api, + // fixture.device(), + // nullptr, + // lt::renderer::IRenderer::frames_in_flight_upper_limit + 1 + // ); + // }); + // + // expect_throw([&] { + // ignore = lt::renderer::IRenderer::create( + // constants::api, + // fixture.device(), + // nullptr, + // lt::renderer::IRenderer::frames_in_flight_lower_limit - 1 + // ); + // }); + // }; }; Suite draw = "renderer_draw"_suite = [] { using enum lt::renderer::IRenderer::DrawResult; - Case { "renderer draw" } = [] { - auto fixture = FixtureDeviceSwapchain {}; - auto renderer = lt::renderer::IRenderer::create( - constants::api, - fixture.device(), - fixture.swapchain(), - constants::frames_in_flight - ); - - for (auto frame_idx : std::views::iota(0u, 30u)) - { - expect_eq(renderer->draw(frame_idx % constants::frames_in_flight), success); - } - }; - - Case { "post swapchain replacement renderer draw" } = [] { - auto fixture = FixtureDeviceSwapchain {}; - auto renderer = lt::renderer::IRenderer::create( - constants::api, - fixture.device(), - fixture.swapchain(), - constants::frames_in_flight - ); - - for (auto frame_idx : std::views::iota(0u, 15u)) - { - expect_eq(renderer->draw(frame_idx % constants::frames_in_flight), success); - } - - fixture.recreate_swapchain(); - renderer->replace_swapchain(fixture.swapchain()); - for (auto frame_idx : std::views::iota(0u, 15u)) - { - expect_eq(renderer->draw(frame_idx % constants::frames_in_flight), success); - } - }; + // Case { "renderer draw" } = [] { + // auto fixture = FixtureDeviceSwapchain {}; + // auto renderer = lt::renderer::IRenderer::create( + // constants::api, + // fixture.device(), + // fixture.swapchain(), + // constants::frames_in_flight + // ); + // + // for (auto frame_idx : std::views::iota(0u, 30u)) + // { + // expect_eq(renderer->draw(frame_idx % constants::frames_in_flight), success); + // } + // }; + // + // Case { "post swapchain replacement renderer draw" } = [] { + // auto fixture = FixtureDeviceSwapchain {}; + // auto renderer = lt::renderer::IRenderer::create( + // constants::api, + // fixture.device(), + // fixture.swapchain(), + // constants::frames_in_flight + // ); + // + // for (auto frame_idx : std::views::iota(0u, 15u)) + // { + // expect_eq(renderer->draw(frame_idx % constants::frames_in_flight), success); + // } + // + // fixture.recreate_swapchain(); + // renderer->replace_swapchain(fixture.swapchain()); + // for (auto frame_idx : std::views::iota(0u, 15u)) + // { + // expect_eq(renderer->draw(frame_idx % constants::frames_in_flight), success); + // } + // }; }; diff --git a/modules/renderer/private/test/utils.hpp b/modules/renderer/private/test/utils.hpp index ba4bf20..508967d 100644 --- a/modules/renderer/private/test/utils.hpp +++ b/modules/renderer/private/test/utils.hpp @@ -148,7 +148,56 @@ public: ); } + + [[nodiscard]] auto has_any_messages() const -> bool + { + return m_user_data->m_has_any_messages; + } + + [[nodiscard]] auto has_any_messages_of( + lt::renderer::IMessenger ::MessageSeverity severity + ) const -> uint32_t + { + return m_user_data->m_severity_counter.contains(severity); + } + private: + static void messenger_callback( + lt::renderer::IMessenger::MessageSeverity severity, + lt::renderer::IMessenger::MessageType type, + const lt::renderer::IMessenger::MessageData &data, + std::any &user_data + ) + { + std::cout << "VULKAN MESSAGE: " << data.message << std::endl; // NOLINT + std::ignore = data; + std::ignore = type; + + auto *fixture = std::any_cast(user_data); + fixture->m_has_any_messages = true; + ++fixture->m_severity_counter[severity]; + } + + struct UserData + { + std::unordered_map m_severity_counter; + + bool m_has_any_messages {}; + }; + + lt::memory::Scope m_user_data = lt::memory::create_scope(); + + lt::memory::Scope m_messenger = lt::renderer::IMessenger::create( + constants::api, + lt::renderer::IInstance::get(constants::api), + lt::renderer::IMessenger ::CreateInfo { + .severities = lt::renderer::IMessenger ::MessageSeverity::all, + .types = lt::renderer::IMessenger ::MessageType::all, + .callback = &messenger_callback, + .user_data = m_user_data.get(), + } + ); + lt::memory::Scope m_device { lt::renderer::IDevice::create(constants::api, gpu(), surface()) }; diff --git a/modules/renderer/public/frontend/messenger.hpp b/modules/renderer/public/frontend/messenger.hpp index 9605124..a866e3d 100644 --- a/modules/renderer/public/frontend/messenger.hpp +++ b/modules/renderer/public/frontend/messenger.hpp @@ -41,7 +41,7 @@ public: using Callback_T = std::function;