From ee3f6c5ab9f8df5c25b40867904828e8f9b64ac1 Mon Sep 17 00:00:00 2001 From: Alex Bates Date: Wed, 17 Dec 2025 09:55:55 +0000 Subject: [PATCH] * Enables new warnings (which are made errors by -Werror) * Wshadow warns when a variable shadows another * Wconversion warns on implicit int conversions * Fixes warnings generated by them Signed-off-by: Alex Bates --- CMakeLists.txt | 4 ++- layer/layer.cpp | 4 +-- layer/private_data.cpp | 16 +++++------ layer/swapchain_api.cpp | 2 +- util/custom_allocator.hpp | 10 +++---- util/wsialloc/wsialloc_dma_buf_heaps.c | 4 +-- util/wsialloc/wsialloc_helpers.c | 12 ++++----- wsi/display/drm_display.cpp | 9 ++++--- wsi/display/surface_properties.cpp | 34 +++++++++++++----------- wsi/display/swapchain.cpp | 16 +++++------ wsi/extensions/present_timing.cpp | 5 ++-- wsi/extensions/present_timing.hpp | 6 ++--- wsi/external_memory.cpp | 3 ++- wsi/image_backing_memory_device.cpp | 8 +++--- wsi/surface_properties.hpp | 13 ++++++--- wsi/swapchain_base.cpp | 33 ++++++++++++----------- wsi/synchronization.cpp | 8 +++--- wsi/wayland/present_id_wayland.cpp | 2 +- wsi/wayland/present_wait_wayland.cpp | 9 ++++--- wsi/wayland/present_wait_wayland.hpp | 1 - wsi/wayland/swapchain.cpp | 17 +++++------- wsi/wayland/wl_object_owner.hpp | 2 +- wsi/wayland/wp_presentation_feedback.cpp | 8 +++--- 23 files changed, 116 insertions(+), 110 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ea5063..ee96bfc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,13 +35,15 @@ endif() string(APPEND CMAKE_CXX_FLAGS " -Wall -Werror -Wextra" + " -Wshadow -Wconversion" " -Wdouble-promotion -Wnon-virtual-dtor -Wdelete-non-virtual-dtor" - " -Wcast-qual -Werror=return-type -Wmissing-format-attribute" + " -Wcast-qual -Wmissing-format-attribute" " -pthread -fPIC" ) string(APPEND CMAKE_C_FLAGS " -Wall -Werror -Wextra" + " -Wshadow -Wconversion" " -Wstrict-prototypes" " -fPIC" ) diff --git a/layer/layer.cpp b/layer/layer.cpp index ee466e7..106000d 100644 --- a/layer/layer.cpp +++ b/layer/layer.cpp @@ -158,7 +158,7 @@ VKAPI_ATTR VkResult create_instance(const VkInstanceCreateInfo *pCreateInfo, con TRY_LOG_CALL(extensions.get_extension_strings(modified_enabled_extensions)); modified_info.ppEnabledExtensionNames = modified_enabled_extensions.data(); - modified_info.enabledExtensionCount = modified_enabled_extensions.size(); + modified_info.enabledExtensionCount = static_cast(modified_enabled_extensions.size()); /* Advance the link info for the next element on the chain. */ layer_link_info->u.pLayerInfo = layer_link_info->u.pLayerInfo->pNext; @@ -291,7 +291,7 @@ VKAPI_ATTR VkResult create_device(VkPhysicalDevice physicalDevice, const VkDevic TRY_LOG_CALL(enabled_extensions.get_extension_strings(modified_enabled_extensions)); modified_info.ppEnabledExtensionNames = modified_enabled_extensions.data(); - modified_info.enabledExtensionCount = modified_enabled_extensions.size(); + modified_info.enabledExtensionCount = static_cast(modified_enabled_extensions.size()); } bool should_layer_handle_frame_boundary_events = false; diff --git a/layer/private_data.cpp b/layer/private_data.cpp index 94d1365..30464ca 100644 --- a/layer/private_data.cpp +++ b/layer/private_data.cpp @@ -179,12 +179,12 @@ PFN_vkVoidFunction device_dispatch_table::get_user_enabled_entrypoint(VkDevice d } instance_private_data::instance_private_data(instance_dispatch_table table, PFN_vkSetInstanceLoaderData set_loader_data, - util::wsi_platform_set enabled_layer_platforms, const uint32_t api_version, - const util::allocator &alloc) + util::wsi_platform_set layer_platforms, + const uint32_t instance_api_version, const util::allocator &alloc) : disp{ std::move(table) } - , api_version{ api_version } + , api_version{ instance_api_version } , SetInstanceLoaderData{ set_loader_data } - , enabled_layer_platforms{ enabled_layer_platforms } + , enabled_layer_platforms{ layer_platforms } , allocator{ alloc } , surfaces{ alloc } , enabled_extensions{ allocator } @@ -205,11 +205,11 @@ static inline void *get_key(dispatchable_type dispatchable_object) VkResult instance_private_data::associate(VkInstance instance, instance_dispatch_table table, PFN_vkSetInstanceLoaderData set_loader_data, - util::wsi_platform_set enabled_layer_platforms, const uint32_t api_version, - const util::allocator &allocator) + util::wsi_platform_set enabled_layer_platforms, + const uint32_t instance_api_version, const util::allocator &allocator) { - auto instance_data = allocator.make_unique(std::move(table), set_loader_data, - enabled_layer_platforms, api_version, allocator); + auto instance_data = allocator.make_unique( + std::move(table), set_loader_data, enabled_layer_platforms, instance_api_version, allocator); if (instance_data == nullptr) { diff --git a/layer/swapchain_api.cpp b/layer/swapchain_api.cpp index 2cd00c6..2c5dbd8 100644 --- a/layer/swapchain_api.cpp +++ b/layer/swapchain_api.cpp @@ -423,7 +423,7 @@ wsi_layer_vkBindImageMemory2(VkDevice device, uint32_t bindInfoCount, if (bind_sc_info == nullptr || bind_sc_info->swapchain == VK_NULL_HANDLE || !device_data.layer_owns_swapchain(bind_sc_info->swapchain)) { - result = device_data.disp.BindImageMemory2KHR(device, 1, &pBindInfos[i]); + result = device_data.disp.BindImageMemory2KHR(device, 1u, &pBindInfos[i]); error_message = "Failed to bind image memory"; } else diff --git a/util/custom_allocator.hpp b/util/custom_allocator.hpp index 1bcc1f7..fe7579e 100644 --- a/util/custom_allocator.hpp +++ b/util/custom_allocator.hpp @@ -201,11 +201,11 @@ T *allocator::create(size_t num_objects, arg_types &&...args) const noexcept return nullptr; } - custom_allocator allocator(*this); + custom_allocator object_allocator(*this); T *ptr; try { - ptr = allocator.allocate(num_objects); + ptr = object_allocator.allocate(num_objects); } catch (...) { @@ -232,7 +232,7 @@ T *allocator::create(size_t num_objects, arg_types &&...args) const noexcept objects_constructed--; ptr[objects_constructed].~T(); } - allocator.deallocate(ptr, num_objects); + object_allocator.deallocate(ptr, num_objects); return nullptr; } return ptr; @@ -247,12 +247,12 @@ void allocator::destroy(size_t num_objects, T *objects) const noexcept return; } - custom_allocator allocator(*this); + custom_allocator object_allocator(*this); for (size_t i = 0; i < num_objects; i++) { objects[i].~T(); } - allocator.deallocate(objects, num_objects); + object_allocator.deallocate(objects, num_objects); } /** diff --git a/util/wsialloc/wsialloc_dma_buf_heaps.c b/util/wsialloc/wsialloc_dma_buf_heaps.c index a4c88f0..5339166 100644 --- a/util/wsialloc/wsialloc_dma_buf_heaps.c +++ b/util/wsialloc/wsialloc_dma_buf_heaps.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Arm Limited. + * Copyright (c) 2024-2025 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -85,7 +85,7 @@ static int allocate(int fd, uint64_t size) return -errno; } assert(heap_data.fd > 0); - return heap_data.fd; + return (int)heap_data.fd; } static int dma_allocate(const wsialloc_allocator *allocator, const wsialloc_allocate_info *info, uint64_t size) diff --git a/util/wsialloc/wsialloc_helpers.c b/util/wsialloc/wsialloc_helpers.c index ff33dde..a87c5aa 100644 --- a/util/wsialloc/wsialloc_helpers.c +++ b/util/wsialloc/wsialloc_helpers.c @@ -44,7 +44,7 @@ static uint64_t round_size_up_to_align(uint64_t size) } static wsialloc_error calculate_format_properties(const wsialloc_format_descriptor *descriptor, - const wsialloc_allocate_info *info, int *strides, int *offsets, + const wsialloc_allocate_info *info, int *strides, uint32_t *offsets, uint64_t *total_size) { assert(descriptor != NULL); @@ -76,11 +76,11 @@ static wsialloc_error calculate_format_properties(const wsialloc_format_descript assert(plane_bytes_per_pixel * 8 == bits_per_pixel[plane]); /* With large enough width, this can overflow as strides are signed. In practice, this shouldn't happen */ - strides[plane] = round_size_up_to_align(info->width * plane_bytes_per_pixel); + strides[plane] = (int)round_size_up_to_align((uint64_t)info->width * plane_bytes_per_pixel); - offsets[plane] = size; + offsets[plane] = (uint32_t)size; - size += strides[plane] * info->height; + size += (uint64_t)strides[plane] * info->height; } *total_size = size; return WSIALLOC_ERROR_NONE; @@ -138,7 +138,7 @@ wsialloc_error wsiallocp_alloc(wsialloc_allocator *allocator, wsiallocp_alloc_ca } int local_strides[WSIALLOC_MAX_PLANES]; - int local_offsets[WSIALLOC_MAX_PLANES]; + uint32_t local_offsets[WSIALLOC_MAX_PLANES]; wsialloc_error err = WSIALLOC_ERROR_NONE; wsialloc_format_descriptor selected_format_desc = {}; @@ -195,4 +195,4 @@ wsialloc_error wsiallocp_alloc(wsialloc_allocator *allocator, wsiallocp_alloc_ca result->is_disjoint = false; return WSIALLOC_ERROR_NONE; -} \ No newline at end of file +} diff --git a/wsi/display/drm_display.cpp b/wsi/display/drm_display.cpp index 4c6158a..05ca8b4 100644 --- a/wsi/display/drm_display.cpp +++ b/wsi/display/drm_display.cpp @@ -98,7 +98,7 @@ static int find_compatible_crtc(int fd, drm_resources_owner &resources, drm_conn /* Make the assumption that only one connector will be in use at a time so there is no * need to check that any other connectors are being driven by this CRTC. */ - return resources->crtcs[j]; + return static_cast(resources->crtcs[j]); } } @@ -183,7 +183,8 @@ static bool fill_supported_formats_with_modifiers(uint32_t primary_plane_index, if (!strcmp(property->name, "IN_FORMATS")) { drmModeFormatModifierIterator iter{}; - drm_property_blob_owner blob{ drmModeGetPropertyBlob(drm_fd.get(), object_properties->prop_values[i]) }; + drm_property_blob_owner blob{ drmModeGetPropertyBlob( + drm_fd.get(), static_cast(object_properties->prop_values[i])) }; if (blob == nullptr) { return false; @@ -403,8 +404,8 @@ const util::vector *drm_display::get_supported_forma bool drm_display::is_format_supported(const util::drm::drm_format_pair &format) const { auto supported_format = - std::find_if(m_supported_formats->begin(), m_supported_formats->end(), [format](const auto &supported_format) { - return format.fourcc == supported_format.fourcc && format.modifier == supported_format.modifier; + std::find_if(m_supported_formats->begin(), m_supported_formats->end(), [format](const auto &candidate) { + return format.fourcc == candidate.fourcc && format.modifier == candidate.modifier; }); return supported_format != m_supported_formats->end(); diff --git a/wsi/display/surface_properties.cpp b/wsi/display/surface_properties.cpp index f83686b..27248ac 100644 --- a/wsi/display/surface_properties.cpp +++ b/wsi/display/surface_properties.cpp @@ -215,7 +215,7 @@ CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, assert(pCreateInfo->pNext == NULL); assert(pCreateInfo->flags == 0); - drm_display *dpy = reinterpret_cast(display); + auto *dpy = reinterpret_cast(display); const VkDisplayModeParametersKHR *params = &pCreateInfo->parameters; @@ -224,9 +224,10 @@ CreateDisplayModeKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR display, return VK_ERROR_INITIALIZATION_FAILED; } - auto *mode = std::find_if(dpy->get_display_modes_begin(), dpy->get_display_modes_end(), [params](auto &mode) { - return mode.get_width() == params->visibleRegion.width && mode.get_height() == params->visibleRegion.height && - mode.get_refresh_rate() == params->refreshRate; + auto *mode = std::find_if(dpy->get_display_modes_begin(), dpy->get_display_modes_end(), [params](auto &candidate) { + return candidate.get_width() == params->visibleRegion.width && + candidate.get_height() == params->visibleRegion.height && + candidate.get_refresh_rate() == params->refreshRate; }); if (mode != dpy->get_display_modes_end()) @@ -246,7 +247,7 @@ CreateDisplayPlaneSurfaceKHR(VkInstance instance, const VkDisplaySurfaceCreateIn auto &instance_data = layer::instance_private_data::get(instance); util::allocator allocator{ instance_data.get_allocator(), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT, pAllocator }; - drm_display_mode *display_mode = reinterpret_cast(pCreateInfo->displayMode); + auto *display_mode = reinterpret_cast(pCreateInfo->displayMode); VkResult res = instance_data.disp.CreateDisplayPlaneSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); if (res == VK_SUCCESS) @@ -276,11 +277,11 @@ GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR displa assert(display != VK_NULL_HANDLE); assert(pPropertyCount != nullptr); - drm_display *dpy = reinterpret_cast(display); + auto *dpy = reinterpret_cast(display); assert(dpy != nullptr); drm_display_mode *modes{ dpy->get_display_modes_begin() }; - size_t num_modes{ dpy->get_num_display_modes() }; + auto num_modes = static_cast(dpy->get_num_display_modes()); if (pProperties == nullptr) { @@ -288,12 +289,12 @@ GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR displa return VK_SUCCESS; } - uint32_t nr_properties = std::min(*pPropertyCount, static_cast(num_modes)); + uint32_t nr_properties = std::min(*pPropertyCount, num_modes); *pPropertyCount = 0; std::for_each(modes, modes + nr_properties, [&pProperties, &pPropertyCount](auto &mode) { VkDisplayModePropertiesKHR properties = {}; - VkDisplayModeKHR display_mode = reinterpret_cast(&mode); + auto display_mode = reinterpret_cast(&mode); properties.displayMode = display_mode; VkDisplayModeParametersKHR parameters{}; @@ -305,7 +306,7 @@ GetDisplayModePropertiesKHR(VkPhysicalDevice physicalDevice, VkDisplayKHR displa *pPropertyCount += 1; }); - if (*pPropertyCount < static_cast(num_modes)) + if (*pPropertyCount < num_modes) { return VK_INCOMPLETE; } @@ -323,7 +324,7 @@ GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR assert(mode != VK_NULL_HANDLE); assert(pCapabilities != nullptr); - drm_display_mode *display_mode = reinterpret_cast(mode); + auto *display_mode = reinterpret_cast(mode); assert(display_mode != nullptr); auto &display = drm_display::get_display(); @@ -337,11 +338,12 @@ GetDisplayPlaneCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkDisplayModeKHR * images. Therefore plane index must be 0. */ assert(planeIndex == 0); - auto valid_mode = - std::find_if(display->get_display_modes_begin(), display->get_display_modes_end(), [&display_mode](auto &mode) { - return (display_mode->get_width() == mode.get_width()) && (display_mode->get_height() == mode.get_height()) && - (display_mode->get_refresh_rate() == mode.get_refresh_rate()); - }); + auto valid_mode = std::find_if(display->get_display_modes_begin(), display->get_display_modes_end(), + [&display_mode](auto &candidate) { + return (display_mode->get_width() == candidate.get_width()) && + (display_mode->get_height() == candidate.get_height()) && + (display_mode->get_refresh_rate() == candidate.get_refresh_rate()); + }); assert(valid_mode != display->get_display_modes_end()); UNUSED(valid_mode); diff --git a/wsi/display/swapchain.cpp b/wsi/display/swapchain.cpp index 5b5be73..3299036 100644 --- a/wsi/display/swapchain.cpp +++ b/wsi/display/swapchain.cpp @@ -68,7 +68,7 @@ public: } private: - uint32_t m_drm_fd; + int m_drm_fd; uint32_t m_fb_id; }; @@ -236,7 +236,7 @@ VkResult swapchain::create_framebuffer(image_backing_memory_external &image_exte for (uint32_t plane = 0; plane < ext_memory.get_num_planes(); plane++) { assert(ext_memory.get_strides()[plane] > 0); - strides[plane] = ext_memory.get_strides()[plane]; + strides[plane] = static_cast(ext_memory.get_strides()[plane]); modifiers[plane] = allocated_format.modifier; if (drmPrimeFDToHandle(display->get_drm_fd(), buffer_fds[plane], &buffer_handles[plane]) != 0) { @@ -332,8 +332,8 @@ void swapchain::present_image(const pending_present_request &pending_present) drmModeModeInfo modeInfo = m_display_mode->get_drm_mode(); uint32_t connector_id = display->get_connector_id(); - drm_res = drmModeSetCrtc(display->get_drm_fd(), display->get_crtc_id(), image_data->get_fb_id(), 0, 0, - &connector_id, 1, &modeInfo); + drm_res = drmModeSetCrtc(display->get_drm_fd(), static_cast(display->get_crtc_id()), + image_data->get_fb_id(), 0, 0, &connector_id, 1, &modeInfo); if (drm_res != 0) { @@ -348,8 +348,8 @@ void swapchain::present_image(const pending_present_request &pending_present) bool page_flip_complete = false; - drm_res = drmModePageFlip(display->get_drm_fd(), display->get_crtc_id(), image_data->get_fb_id(), - DRM_MODE_PAGE_FLIP_EVENT, (void *)&page_flip_complete); + drm_res = drmModePageFlip(display->get_drm_fd(), static_cast(display->get_crtc_id()), + image_data->get_fb_id(), DRM_MODE_PAGE_FLIP_EVENT, (void *)&page_flip_complete); if (drm_res != 0) { @@ -398,7 +398,7 @@ void swapchain::present_image(const pending_present_request &pending_present) } /* Find currently presented image */ - uint32_t presented_index = m_swapchain_images.size(); + auto presented_index = static_cast(m_swapchain_images.size()); if (!m_first_present) { for (uint32_t i = 0; i < m_swapchain_images.size(); ++i) @@ -426,8 +426,6 @@ void swapchain::present_image(const pending_present_request &pending_present) { unpresent_image(presented_index); } - - return; } std::variant> swapchain::create_image_creator( diff --git a/wsi/extensions/present_timing.cpp b/wsi/extensions/present_timing.cpp index 12c9982..6427c96 100644 --- a/wsi/extensions/present_timing.cpp +++ b/wsi/extensions/present_timing.cpp @@ -390,7 +390,8 @@ VkResult wsi_ext_present_timing::get_past_presentation_results( for (uint64_t i = 0; (i - removed_entries) < m_queue.size(); ++i) { - auto slot = m_queue.begin() + (i - removed_entries); + const auto slot_offset = static_cast(i - removed_entries); + auto slot = m_queue.begin() + slot_offset; if (!slot->has_completed_stages(allow_partial)) { @@ -419,7 +420,7 @@ VkResult wsi_ext_present_timing::get_past_presentation_results( incomplete = true; } } - past_present_timing_properties->presentationTimingCount = timing_count; + past_present_timing_properties->presentationTimingCount = static_cast(timing_count); return incomplete ? VK_INCOMPLETE : VK_SUCCESS; } diff --git a/wsi/extensions/present_timing.hpp b/wsi/extensions/present_timing.hpp index 43a0eda..37aed0e 100644 --- a/wsi/extensions/present_timing.hpp +++ b/wsi/extensions/present_timing.hpp @@ -334,8 +334,8 @@ public: { if (m_command_pool != VK_NULL_HANDLE) { - m_device.disp.FreeCommandBuffers(m_device.device, m_command_pool, m_command_buffer.size(), - m_command_buffer.data()); + m_device.disp.FreeCommandBuffers(m_device.device, m_command_pool, + static_cast(m_command_buffer.size()), m_command_buffer.data()); m_device.disp.DestroyCommandPool(m_device.device, m_command_pool, m_allocator.get_original_callbacks()); m_command_pool = VK_NULL_HANDLE; @@ -377,7 +377,7 @@ public: TRY_LOG_CALL( m_device.disp.AllocateCommandBuffers(m_device.device, &command_buffer_info, m_command_buffer.data())); VkCommandBufferBeginInfo begin_info = { VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, nullptr, 0, nullptr }; - for (size_t image_index = 0; image_index < num_images; image_index++) + for (uint32_t image_index = 0; image_index < num_images; image_index++) { TRY_LOG_CALL(m_device.disp.BeginCommandBuffer(m_command_buffer[image_index], &begin_info)); m_device.disp.CmdResetQueryPool(m_command_buffer[image_index], m_query_pool, image_index, 1); diff --git a/wsi/external_memory.cpp b/wsi/external_memory.cpp index bc44ad1..68a94d1 100644 --- a/wsi/external_memory.cpp +++ b/wsi/external_memory.cpp @@ -179,7 +179,8 @@ VkResult external_memory::bind_swapchain_image_memory(const VkImage &image) bind_img_mem_infos[plane].memoryOffset = m_offsets[plane]; } - return device_data.disp.BindImageMemory2KHR(m_device, bind_img_mem_infos.size(), bind_img_mem_infos.data()); + return device_data.disp.BindImageMemory2KHR(m_device, static_cast(bind_img_mem_infos.size()), + bind_img_mem_infos.data()); } return device_data.disp.BindImageMemory(m_device, image, m_memories[0], m_offsets[0]); diff --git a/wsi/image_backing_memory_device.cpp b/wsi/image_backing_memory_device.cpp index 757ff63..ebdbb53 100644 --- a/wsi/image_backing_memory_device.cpp +++ b/wsi/image_backing_memory_device.cpp @@ -72,18 +72,18 @@ VkResult image_backing_memory_device::allocate_and_bind(VkImage image) VkMemoryAllocateInfo mem_info = {}; mem_info.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; mem_info.allocationSize = memory_requirements.size; - mem_info.memoryTypeIndex = mem_type_idx; + mem_info.memoryTypeIndex = static_cast(mem_type_idx); TRY(disp_table.AllocateMemory(m_device_data.device, &mem_info, m_allocator.get_original_callbacks(), &m_device_memory)); - TRY(disp_table.BindImageMemory(m_device_data.device, image, m_device_memory, 0)); + TRY(disp_table.BindImageMemory(m_device_data.device, image, m_device_memory, 0ull)); return VK_SUCCESS; } VkResult image_backing_memory_device::bind(const VkBindImageMemoryInfo *bind_image_mem_info) { - return m_device_data.disp.BindImageMemory(m_device_data.device, bind_image_mem_info->image, m_device_memory, 0); + return m_device_data.disp.BindImageMemory(m_device_data.device, bind_image_mem_info->image, m_device_memory, 0ull); } uint64_t image_backing_memory_device::get_modifier() const @@ -92,4 +92,4 @@ uint64_t image_backing_memory_device::get_modifier() const return 0; } -} \ No newline at end of file +} diff --git a/wsi/surface_properties.hpp b/wsi/surface_properties.hpp index ef8d23d..1cffb4f 100644 --- a/wsi/surface_properties.hpp +++ b/wsi/surface_properties.hpp @@ -206,7 +206,9 @@ VkResult surface_properties_formats_helper(It begin, It end, uint32_t *surface_f { assert(surface_formats_count != nullptr); - const uint32_t supported_formats_count = std::distance(begin, end); + const auto distance = std::distance(begin, end); + assert(distance >= 0); + const auto supported_formats_count = static_cast(distance); if (surface_formats == nullptr && extended_surface_formats == nullptr) { *surface_formats_count = supported_formats_count; @@ -307,17 +309,20 @@ VkResult get_surface_present_modes_common(uint32_t *present_mode_count, VkPresen assert(present_mode_count != nullptr); + assert(modes.size() <= UINT32_MAX); + const auto modes_count = static_cast(modes.size()); + if (nullptr == present_modes) { - *present_mode_count = modes.size(); + *present_mode_count = modes_count; return VK_SUCCESS; } - if (modes.size() > *present_mode_count) + if (modes_count > *present_mode_count) { res = VK_INCOMPLETE; } - *present_mode_count = std::min(*present_mode_count, static_cast(modes.size())); + *present_mode_count = std::min(*present_mode_count, modes_count); for (uint32_t i = 0; i < *present_mode_count; ++i) { present_modes[i] = modes[i]; diff --git a/wsi/swapchain_base.cpp b/wsi/swapchain_base.cpp index 7435a90..2fd4805 100644 --- a/wsi/swapchain_base.cpp +++ b/wsi/swapchain_base.cpp @@ -285,7 +285,8 @@ VkResult swapchain_base::init(VkDevice device, const VkSwapchainCreateInfoKHR *s } } - if (VkResult result = m_free_image_semaphore.init(m_swapchain_images.size()); result != VK_SUCCESS) + if (VkResult result = m_free_image_semaphore.init(static_cast(m_swapchain_images.size())); + result != VK_SUCCESS) { assert(result == VK_ERROR_OUT_OF_HOST_MEMORY); return result; @@ -299,7 +300,7 @@ VkResult swapchain_base::init(VkDevice device, const VkSwapchainCreateInfoKHR *s * Vulkan spec, vkGetDeviceQueue2 should be used to get queues * that were created with non zero flags parameters. */ - m_device_data.disp.GetDeviceQueue(m_device, 0, 0, &m_queue); + m_device_data.disp.GetDeviceQueue(m_device, 0u, 0u, &m_queue); TRY_LOG_CALL(m_device_data.SetDeviceLoaderData(m_device, m_queue)); } @@ -416,24 +417,24 @@ VkResult swapchain_base::acquire_next_image(uint64_t timeout, VkSemaphore semaph return VK_ERROR_OUT_OF_HOST_MEMORY; } - size_t i; - for (i = 0; i < m_swapchain_images.size(); ++i) + size_t image_index_candidate = 0; + for (; image_index_candidate < m_swapchain_images.size(); ++image_index_candidate) { - if (m_swapchain_images[i].get_status() == swapchain_image::UNALLOCATED) + if (m_swapchain_images[image_index_candidate].get_status() == swapchain_image::UNALLOCATED) { - TRY_LOG_CALL(allocate_and_bind_swapchain_image(m_swapchain_images[i])); - m_swapchain_images[i].set_status(swapchain_image::FREE); + TRY_LOG_CALL(allocate_and_bind_swapchain_image(m_swapchain_images[image_index_candidate])); + m_swapchain_images[image_index_candidate].set_status(swapchain_image::FREE); } - if (m_swapchain_images[i].get_status() == swapchain_image::FREE) + if (m_swapchain_images[image_index_candidate].get_status() == swapchain_image::FREE) { - m_swapchain_images[i].set_status(swapchain_image::ACQUIRED); - *image_index = i; + m_swapchain_images[image_index_candidate].set_status(swapchain_image::ACQUIRED); + *image_index = static_cast(image_index_candidate); break; } } - assert(i < m_swapchain_images.size()); + assert(image_index_candidate < m_swapchain_images.size()); image_status_lock.unlock(); @@ -490,7 +491,7 @@ VkResult swapchain_base::get_swapchain_images(uint32_t *swapchain_image_count, V if (swapchain_images == nullptr) { /* Return the number of swapchain images. */ - *swapchain_image_count = m_swapchain_images.size(); + *swapchain_image_count = static_cast(m_swapchain_images.size()); return VK_SUCCESS; } @@ -508,7 +509,7 @@ VkResult swapchain_base::get_swapchain_images(uint32_t *swapchain_image_count, V current_image++; - if (current_image == m_swapchain_images.size()) + if (current_image == static_cast(m_swapchain_images.size())) { *swapchain_image_count = current_image; @@ -660,11 +661,11 @@ VkResult swapchain_base::queue_present(VkQueue queue, const VkPresentInfoKHR *pr { VkSemaphore present_fence_wait_sem = m_swapchain_images[submit_info.pending_present.image_index].get_present_fence_wait_semaphore(); - const queue_submit_semaphores wait_semaphores = { &present_fence_wait_sem, 1, nullptr, 0 }; + const queue_submit_semaphores present_fence_semaphores = { &present_fence_wait_sem, 1, nullptr, 0 }; /* - * Here we chain wait_semaphores with present_fence through present_fence_wait. + * Here we chain present_fence_semaphores with present_fence through present_fence_wait. */ - TRY(sync_queue_submit(m_device_data, queue, submit_info.present_fence, wait_semaphores)); + TRY(sync_queue_submit(m_device_data, queue, submit_info.present_fence, present_fence_semaphores)); } #if VULKAN_WSI_LAYER_EXPERIMENTAL diff --git a/wsi/synchronization.cpp b/wsi/synchronization.cpp index 30a689e..efffa34 100644 --- a/wsi/synchronization.cpp +++ b/wsi/synchronization.cpp @@ -101,7 +101,7 @@ VkResult fence_sync::wait_payload(uint64_t timeout) VkResult res = VK_SUCCESS; if (has_payload && !payload_finished) { - res = dev->disp.WaitForFences(dev->device, 1, &fence, VK_TRUE, timeout); + res = dev->disp.WaitForFences(dev->device, 1u, &fence, VK_TRUE, timeout); if (res == VK_SUCCESS) { payload_finished = true; @@ -112,7 +112,7 @@ VkResult fence_sync::wait_payload(uint64_t timeout) VkResult fence_sync::set_payload(VkQueue queue, const queue_submit_semaphores &semaphores, const void *submission_pnext) { - VkResult result = dev->disp.ResetFences(dev->device, 1, &fence); + VkResult result = dev->disp.ResetFences(dev->device, 1u, &fence); if (result != VK_SUCCESS) { return result; @@ -233,7 +233,7 @@ VkResult sync_queue_submit(const layer::device_private_data &device, VkQueue que semaphores.signal_semaphores_count, semaphores.signal_semaphores }; - TRY(device.disp.QueueSubmit(queue, 1, &submit_info, fence)); + TRY(device.disp.QueueSubmit(queue, 1u, &submit_info, fence)); return VK_SUCCESS; } @@ -257,7 +257,7 @@ VkResult sync_queue_submit(const layer::device_private_data &device, VkQueue que pipeline_stage_flags_vector.data(), command_buffer_data.m_command_buffer_count, command_buffer_data.m_command_buffers, semaphores.signal_semaphores_count, semaphores.signal_semaphores }; - TRY(device.disp.QueueSubmit(queue, 1, &submit_info, fence)); + TRY(device.disp.QueueSubmit(queue, 1u, &submit_info, fence)); return VK_SUCCESS; } } /* namespace wsi */ diff --git a/wsi/wayland/present_id_wayland.cpp b/wsi/wayland/present_id_wayland.cpp index ef5750a..0804da1 100644 --- a/wsi/wayland/present_id_wayland.cpp +++ b/wsi/wayland/present_id_wayland.cpp @@ -62,7 +62,7 @@ uint64_t wsi_ext_present_id_wayland::get_present_id_from_image_index(uint32_t im } auto feedback = m_pending_presents.find( - [image_index](const presentation_feedback &feedback) { return feedback.get_image_index() == image_index; }); + [image_index](const presentation_feedback &candidate) { return candidate.get_image_index() == image_index; }); return feedback != nullptr ? feedback->get_present_id() : 0; } diff --git a/wsi/wayland/present_wait_wayland.cpp b/wsi/wayland/present_wait_wayland.cpp index 0312b22..41f9537 100644 --- a/wsi/wayland/present_wait_wayland.cpp +++ b/wsi/wayland/present_wait_wayland.cpp @@ -73,10 +73,11 @@ VkResult wsi_ext_present_wait_wayland::wait_for_update(uint64_t present_id, uint int delay_in_ms = 0; if (timeout_in_ns != UINT64_MAX) { - uint64_t min_delay_in_ns = std::min(static_cast(5000000ULL /* 5ms */), timeout_in_ns); - timeout_in_ns -= min_delay_in_ns; + const uint64_t min_delay_in_ns = std::min(static_cast(5000000ULL /* 5ms */), timeout_in_ns); + const uint64_t min_delay_in_ms = min_delay_in_ns / 1000000ULL; - delay_in_ms = std::min(static_cast(INT_MAX), min_delay_in_ns / 1000ULL / 1000UL); + timeout_in_ns -= min_delay_in_ns; + delay_in_ms = static_cast(std::min(min_delay_in_ms, static_cast(INT_MAX))); } else { @@ -99,4 +100,4 @@ VkResult wsi_ext_present_wait_wayland::wait_for_update(uint64_t present_id, uint } } /* namespace wayland */ -} /* namespace wsi */ \ No newline at end of file +} /* namespace wsi */ diff --git a/wsi/wayland/present_wait_wayland.hpp b/wsi/wayland/present_wait_wayland.hpp index 265cbff..370fd99 100644 --- a/wsi/wayland/present_wait_wayland.hpp +++ b/wsi/wayland/present_wait_wayland.hpp @@ -77,7 +77,6 @@ private: */ VkResult wait_for_update(uint64_t present_id, uint64_t timeout_in_ns) override; -private: /** * @brief Wayland display object. */ diff --git a/wsi/wayland/swapchain.cpp b/wsi/wayland/swapchain.cpp index 473ac53..62ce5ce 100644 --- a/wsi/wayland/swapchain.cpp +++ b/wsi/wayland/swapchain.cpp @@ -341,8 +341,9 @@ wayland_owner swapchain::create_wl_buffer(image_backing_memory_extern /* create a wl_buffer using the dma_buf protocol */ zwp_linux_buffer_params_v1 *params = zwp_linux_dmabuf_v1_create_params(m_wsi_surface->get_dmabuf_interface()); - uint32_t modifier_hi = image_external_memory.get_image_create_info().selected_format.modifier >> 32; - uint32_t modifier_low = image_external_memory.get_image_create_info().selected_format.modifier & 0xFFFFFFFF; + const uint64_t modifier = image_external_memory.get_image_create_info().selected_format.modifier; + const auto modifier_hi = static_cast(modifier >> 32); + const auto modifier_low = static_cast(modifier & 0xFFFFFFFF); for (uint32_t plane = 0; plane < ext_memory.get_num_planes(); plane++) { zwp_linux_buffer_params_v1_add(params, ext_memory.get_buffer_fds()[plane], plane, ext_memory.get_offsets()[plane], @@ -516,15 +517,9 @@ bool swapchain::free_image_found() VkResult swapchain::get_free_buffer(uint64_t *timeout) { int ms_timeout, res; - - if (*timeout >= INT_MAX * 1000llu * 1000llu) - { - ms_timeout = INT_MAX; - } - else - { - ms_timeout = *timeout / 1000llu / 1000llu; - } + const uint64_t timeout_ns = *timeout; + const uint64_t timeout_ms = timeout_ns / 1000000ULL; + ms_timeout = timeout_ms > static_cast(INT_MAX) ? INT_MAX : static_cast(timeout_ms); /* The current dispatch_queue implementation will return if any * events are returned, even if no events are dispatched to the buffer diff --git a/wsi/wayland/wl_object_owner.hpp b/wsi/wayland/wl_object_owner.hpp index b75252c..a3befef 100644 --- a/wsi/wayland/wl_object_owner.hpp +++ b/wsi/wayland/wl_object_owner.hpp @@ -108,7 +108,7 @@ static std::unique_ptr> make_proxy_with_queue(T *obj wl_proxy_set_queue(reinterpret_cast(proxy), queue); } - auto delete_proxy = [](T *proxy) { wl_proxy_wrapper_destroy(reinterpret_cast(proxy)); }; + auto delete_proxy = [](T *wrapped_proxy) { wl_proxy_wrapper_destroy(reinterpret_cast(wrapped_proxy)); }; return std::unique_ptr>(proxy, delete_proxy); } diff --git a/wsi/wayland/wp_presentation_feedback.cpp b/wsi/wayland/wp_presentation_feedback.cpp index 951f3df..6a9c385 100644 --- a/wsi/wayland/wp_presentation_feedback.cpp +++ b/wsi/wayland/wp_presentation_feedback.cpp @@ -45,13 +45,13 @@ wp_presentation_feedback_presented(void *data, struct wp_presentation_feedback * if (feedback_obj->ext_present_timing() != nullptr) { uint64_t timestamp_seconds = (static_cast(tv_sec_hi) << 32) | tv_sec_lo; - double timestamp_limit = static_cast(UINT64_MAX - tv_nsec) / 1e9; - if (static_cast(timestamp_seconds) > timestamp_limit) + const uint64_t seconds_limit = (UINT64_MAX - static_cast(tv_nsec)) / 1000000000ULL; + if (timestamp_seconds > seconds_limit) { WSI_LOG_ERROR("timestamp_seconds overflow, capping to safe maximum"); - timestamp_seconds = static_cast(std::floor(timestamp_limit)); + timestamp_seconds = seconds_limit; } - uint64_t timestamp_ns = static_cast(timestamp_seconds * 1e9) + tv_nsec; + const uint64_t timestamp_ns = (timestamp_seconds * 1000000000ULL) + static_cast(tv_nsec); feedback_obj->ext_present_timing()->mark_delivered(feedback_obj->get_image_index(), timestamp_ns); } else if (feedback_obj->ext_present_id() != nullptr)