From 569c4dc3b6109f1dcd319526092d1aa415cc8c67 Mon Sep 17 00:00:00 2001 From: light7734 Date: Wed, 17 Dec 2025 12:44:07 +0330 Subject: [PATCH] fix: compilation on marci --- modules/renderer/_tests/utils.cppm | 8 +- modules/renderer/system.cppm | 4 +- modules/renderer/vk/api_wrapper.cppm | 117 +++++++++++---------------- modules/renderer/vk/device.cppm | 2 +- modules/renderer/vk/gpu.cppm | 19 +++++ 5 files changed, 72 insertions(+), 78 deletions(-) diff --git a/modules/renderer/_tests/utils.cppm b/modules/renderer/_tests/utils.cppm index 4be9fe6..e4a8c3a 100644 --- a/modules/renderer/_tests/utils.cppm +++ b/modules/renderer/_tests/utils.cppm @@ -172,7 +172,7 @@ private: { // I know this makes the tests too verbose... // but makes it easier to figure out what the problem is when things fail on ci - lt::log::debug("vulkan: {}", data.message); + lt::log::trace("vulkan: {}", std::string { data.message }); std::ignore = data; std::ignore = type; @@ -221,10 +221,6 @@ public: return m_system; } - auto device() -> lt::renderer::IDevice & - { - } - [[nodiscard]] auto has_any_messages() const -> bool { return m_user_data->m_has_any_messages; @@ -246,7 +242,7 @@ private: { // I know this makes the tests too verbose... // but makes it easier to figure out what the problem is when things fail on ci - lt::log::trace("vulkan: {}", data.message); + lt::log::trace("vulkan: {}", std::string { data.message }); std::ignore = data; std::ignore = type; diff --git a/modules/renderer/system.cppm b/modules/renderer/system.cppm index f3bce25..c430a6f 100644 --- a/modules/renderer/system.cppm +++ b/modules/renderer/system.cppm @@ -56,7 +56,7 @@ public: System(CreateInfo info); - ~System() override; + ~System() override = default; System(System &&) = default; @@ -152,8 +152,6 @@ System::System(CreateInfo info) ) }; } -System::~System() = default; - void System::on_register() { } diff --git a/modules/renderer/vk/api_wrapper.cppm b/modules/renderer/vk/api_wrapper.cppm index 29dfc4a..cd513f3 100644 --- a/modules/renderer/vk/api_wrapper.cppm +++ b/modules/renderer/vk/api_wrapper.cppm @@ -1306,10 +1306,8 @@ public: /** de-allocation functions */ void free_memory(VkDeviceMemory memory) const; - void free_descriptor_set( - VkDescriptorPool descriptor_pool, - VkDescriptorSet descriptor_set - ) const; + void free_descriptor_set(VkDescriptorPool descriptor_pool, VkDescriptorSet descriptor_set) + const; /** destroy functions */ void destroy_swapchain(VkSwapchainKHR swapchain) const; @@ -3071,7 +3069,7 @@ Instance::Instance(CreateInfo info) layer_names.emplace_back(layer.name.c_str()); for (const auto &setting : layer.settings) { - const auto *values = (void *) { nullptr }; + const auto *values = static_cast(nullptr); if (setting.values.index() == 0) { @@ -3088,15 +3086,13 @@ Instance::Instance(CreateInfo info) debug::ensure(values, "Failed to get variant from setting.values"); - layer_settings.emplace_back( - VkLayerSettingEXT { - .pLayerName = layer.name.c_str(), - .pSettingName = setting.name.c_str(), - .type = std::visit(layer_setting_type_visitor, setting.values), - .valueCount = 1u, - .pValues = values, - } - ); + layer_settings.emplace_back(VkLayerSettingEXT { + .pLayerName = layer.name.c_str(), + .pSettingName = setting.name.c_str(), + .type = std::visit(layer_setting_type_visitor, setting.values), + .valueCount = 1u, + .pValues = values, + }); } } @@ -3108,8 +3104,8 @@ Instance::Instance(CreateInfo info) auto app_info = VkApplicationInfo { .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO, - .applicationVersion = constants::application_version, .pApplicationName = constants::engine_name, + .applicationVersion = constants::application_version, .pEngineName = constants::app_name, .apiVersion = constants::api_version, }; @@ -3118,11 +3114,11 @@ Instance::Instance(CreateInfo info) .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, .pNext = &layer_settings_create_info, .flags = {}, + .pApplicationInfo = &app_info, .enabledLayerCount = static_cast(info.layers.size()), .ppEnabledLayerNames = layer_names.data(), .enabledExtensionCount = static_cast(extension_names.size()), .ppEnabledExtensionNames = extension_names.data(), - .pApplicationInfo = &app_info, }; vkc(api::create_instance(&vk_info, nullptr, &m_instance)); @@ -3295,7 +3291,7 @@ Surface::~Surface() .shader_sampled_image_array_non_uniform_indexing =true, .shader_storage_buffer_array_non_uniform_indexing =true, .shader_storage_image_array_non_uniform_indexing =true, - .shader_input_attachment_array_non_uniform_indexing =true, + .shader_input_attachment_array_non_uniform_indexing =false, .shader_uniform_texel_buffer_array_non_uniform_indexing =true, .shader_storage_texel_buffer_array_non_uniform_indexing =true, .descriptor_binding_uniform_buffer_update_after_bind =true, @@ -3585,12 +3581,10 @@ Surface::~Surface() auto formats = std::vector {}; for (auto &vk_format : vk_formats) { - formats.emplace_back( - Surface::Format { - .format = static_cast(vk_format.format), - .color_space = static_cast(vk_format.colorSpace), - } - ); + formats.emplace_back(Surface::Format { + .format = static_cast(vk_format.format), + .color_space = static_cast(vk_format.colorSpace), + }); } return formats; @@ -3647,14 +3641,12 @@ Device::Device(const Gpu &gpu, CreateInfo info) auto vk_queue_infos = std::vector {}; for (auto queue_family : info.queue_indices) { - vk_queue_infos.emplace_back( - VkDeviceQueueCreateInfo { - .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, - .queueFamilyIndex = queue_family, - .queueCount = 1u, - .pQueuePriorities = &priorities, - } - ); + vk_queue_infos.emplace_back(VkDeviceQueueCreateInfo { + .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, + .queueFamilyIndex = queue_family, + .queueCount = 1u, + .pQueuePriorities = &priorities, + }); } auto vk_extension_names = std::vector {}; @@ -4047,10 +4039,8 @@ void Device::free_memory(VkDeviceMemory memory) const api::free_memory(m_device, memory, nullptr); } -void Device::free_descriptor_set( - VkDescriptorPool descriptor_pool, - VkDescriptorSet descriptor_set -) const +void Device::free_descriptor_set(VkDescriptorPool descriptor_pool, VkDescriptorSet descriptor_set) + const { vkc(api::free_descriptor_sets(m_device, descriptor_pool, 1, &descriptor_set)); } @@ -4454,8 +4444,8 @@ CommandPool::CommandPool(Device &device, CreateInfo info): m_device(device.get_v { auto vk_info = VkCommandPoolCreateInfo { .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, - .flags = info.flags, .pNext = {}, + .flags = info.flags, .queueFamilyIndex = {}, }; @@ -4679,15 +4669,13 @@ DescriptorSetLayout::DescriptorSetLayout(Device &device, CreateInfo info) vk_binding_flag_values.reserve(info.bindings.size()); for (auto &binding_info : info.bindings) { - vk_bindings.emplace_back( - VkDescriptorSetLayoutBinding { - .binding = binding_info.idx, - .descriptorType = static_cast(binding_info.type), - .descriptorCount = binding_info.count, - .stageFlags = binding_info.shader_stages, - .pImmutableSamplers = {}, - } - ); + vk_bindings.emplace_back(VkDescriptorSetLayoutBinding { + .binding = binding_info.idx, + .descriptorType = static_cast(binding_info.type), + .descriptorCount = binding_info.count, + .stageFlags = binding_info.shader_stages, + .pImmutableSamplers = {}, + }); vk_binding_flag_values.emplace_back(binding_info.flags); } @@ -4729,12 +4717,10 @@ DescriptorPool::DescriptorPool(Device &device, CreateInfo info): m_device(device vk_sizes.reserve(info.sizes.size()); for (auto &size : info.sizes) { - vk_sizes.emplace_back( - VkDescriptorPoolSize { - .type = static_cast(size.type), - .descriptorCount = size.count, - } - ); + vk_sizes.emplace_back(VkDescriptorPoolSize { + .type = static_cast(size.type), + .descriptorCount = size.count, + }); } auto vk_info = VkDescriptorPoolCreateInfo { @@ -4788,14 +4774,12 @@ Pipeline::Pipeline(Device &device, PipelineLayout &layout, CreateInfo info) auto shader_stages = std::vector {}; for (auto &[shader, stage] : info.shaders) { - shader_stages.emplace_back( - VkPipelineShaderStageCreateInfo { - .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, - .stage = static_cast(stage), - .module = shader.get_vk_handle(), - .pName = "main", - } - ); + shader_stages.emplace_back(VkPipelineShaderStageCreateInfo { + .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, + .stage = static_cast(stage), + .module = shader.get_vk_handle(), + .pName = "main", + }); } auto dynamic_states = std::array { @@ -4878,8 +4862,7 @@ Pipeline::Pipeline(Device &device, PipelineLayout &layout, CreateInfo info) .colorAttachmentCount = static_cast(color_attachment_formats.size()), .pColorAttachmentFormats = std::bit_cast(color_attachment_formats.data()), .depthAttachmentFormat = info.attachment_state.depth_attachment ? - static_cast( - *info.attachment_state.depth_attachment + static_cast(*info.attachment_state.depth_attachment ) : VK_FORMAT_UNDEFINED, @@ -4931,13 +4914,11 @@ PipelineLayout::PipelineLayout(Device &device, CreateInfo info): m_device(device for (const auto &range : info.push_constant_ranges) { - vk_push_constant_ranges.emplace_back( - VkPushConstantRange { - .stageFlags = range.shader_stages, - .offset = range.offset, - .size = range.size, - } - ); + vk_push_constant_ranges.emplace_back(VkPushConstantRange { + .stageFlags = range.shader_stages, + .offset = range.offset, + .size = range.size, + }); } for (const auto &layout : info.descriptor_set_layouts) diff --git a/modules/renderer/vk/device.cppm b/modules/renderer/vk/device.cppm index ac7c303..3f9d5af 100644 --- a/modules/renderer/vk/device.cppm +++ b/modules/renderer/vk/device.cppm @@ -105,9 +105,9 @@ void Device::initialize_logical_device() .features = { .geometry_shader = true, - .sampler_anisotropy = true, .multi_draw_indirect = true, .draw_indirect_first_instance = true, + .sampler_anisotropy = true, }, .dynamic_rendering_features = m_gpu->vk().get_supported_dynamic_rendering_features(), diff --git a/modules/renderer/vk/gpu.cppm b/modules/renderer/vk/gpu.cppm index ad2e53f..7319b3f 100644 --- a/modules/renderer/vk/gpu.cppm +++ b/modules/renderer/vk/gpu.cppm @@ -1,5 +1,6 @@ export module renderer.vk.gpu; import renderer.vk.api_wrapper; +import logger; import debug.assertions; import renderer.frontend; import renderer.vk.instance; @@ -75,12 +76,30 @@ Gpu::Gpu(IInstance *instance) auto properties = gpu.get_properties(); auto features = gpu.get_features(); + // GPU is dedicated, a great success! if (properties.device_type == vk::Gpu::Type::discrete_gpu && features.geometry_shader) { m_gpu = gpu; } } + if (!m_gpu) + { + for (auto &gpu : gpus) + { + auto properties = gpu.get_properties(); + auto features = gpu.get_features(); + + // GPU is integrated, fall back to anything with geometry shader support... + if (features.geometry_shader) + { + m_gpu = gpu; + log::warn("Using integrated GPU"); + } + } + } + + // No suitable GPU is fonud... debug::ensure(m_gpu, "Failed to find any suitable Vulkan physical device"); m_memory_properties = m_gpu.get_memory_properties();