mirror of
https://gitlab.freedesktop.org/mesa/vulkan-wsi-layer.git
synced 2026-02-09 01:20:26 +01:00
Merge 'Release VK_EXT_present_timing' into 'main'
See merge request mesa/vulkan-wsi-layer!231
This commit is contained in:
commit
115a565ddf
30 changed files with 97 additions and 180 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2019-2025 Arm Limited.
|
||||
# Copyright (c) 2019-2026 Arm Limited.
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
#
|
||||
|
|
@ -152,17 +152,14 @@ if(BUILD_WSI_WAYLAND)
|
|||
wsi/wayland/surface_properties.cpp
|
||||
wsi/wayland/surface.cpp
|
||||
wsi/wayland/wl_helpers.cpp
|
||||
wsi/wayland/swapchain.cpp
|
||||
wsi/wayland/present_id_wayland.cpp
|
||||
wsi/wayland/present_timing_handler.cpp
|
||||
wsi/wayland/present_wait_wayland.cpp
|
||||
wsi/wayland/swapchain.cpp
|
||||
wsi/wayland/wp_presentation_feedback.cpp
|
||||
wsi/extensions/external_memory_extension.cpp
|
||||
wsi/image_backing_memory_external.cpp)
|
||||
|
||||
if(VULKAN_WSI_LAYER_EXPERIMENTAL)
|
||||
target_sources(wayland_wsi PRIVATE wsi/wayland/present_id_wayland.cpp)
|
||||
target_sources(wayland_wsi PRIVATE wsi/wayland/present_timing_handler.cpp)
|
||||
target_sources(wayland_wsi PRIVATE wsi/wayland/wp_presentation_feedback.cpp)
|
||||
endif()
|
||||
|
||||
pkg_check_modules(WAYLAND_CLIENT REQUIRED wayland-client)
|
||||
message(STATUS "Using Wayland client include directories: ${WAYLAND_CLIENT_INCLUDE_DIRS}")
|
||||
message(STATUS "Using Wayland client cflags: ${WAYLAND_CLIENT_CFLAGS}")
|
||||
|
|
@ -243,13 +240,10 @@ if(BUILD_WSI_HEADLESS)
|
|||
wsi/headless/surface_properties.cpp
|
||||
wsi/headless/surface.cpp
|
||||
wsi/headless/swapchain.cpp
|
||||
wsi/headless/present_timing_handler.cpp
|
||||
wsi/headless/present_wait_headless.cpp
|
||||
wsi/image_backing_memory_device.cpp)
|
||||
|
||||
if(VULKAN_WSI_LAYER_EXPERIMENTAL)
|
||||
target_sources(wsi_headless PRIVATE wsi/headless/present_timing_handler.cpp)
|
||||
endif()
|
||||
|
||||
target_include_directories(wsi_headless PRIVATE
|
||||
${PROJECT_SOURCE_DIR}
|
||||
${VULKAN_CXX_INCLUDE}
|
||||
|
|
@ -307,6 +301,7 @@ add_library(${PROJECT_NAME} SHARED
|
|||
layer/surface_api.cpp
|
||||
layer/swapchain_api.cpp
|
||||
layer/swapchain_maintenance_api.cpp
|
||||
layer/present_timing_api.cpp
|
||||
layer/present_wait_api.cpp
|
||||
util/timed_semaphore.cpp
|
||||
util/custom_allocator.cpp
|
||||
|
|
@ -320,6 +315,7 @@ add_library(${PROJECT_NAME} SHARED
|
|||
wsi/extensions/present_wait.cpp
|
||||
wsi/extensions/frame_boundary.cpp
|
||||
wsi/extensions/mutable_format_extension.cpp
|
||||
wsi/extensions/present_timing.cpp
|
||||
util/wsi_extension.cpp
|
||||
wsi/extensions/swapchain_maintenance.cpp
|
||||
wsi/surface_properties.cpp
|
||||
|
|
@ -329,16 +325,13 @@ add_library(${PROJECT_NAME} SHARED
|
|||
wsi/vulkan_image_handle_creator.cpp
|
||||
wsi/swapchain_image_factory.cpp
|
||||
wsi/swapchain_image.cpp)
|
||||
|
||||
if (VULKAN_WSI_LAYER_EXPERIMENTAL)
|
||||
target_sources(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/layer/present_timing_api.cpp)
|
||||
target_sources(${PROJECT_NAME} PUBLIC ${PROJECT_SOURCE_DIR}/wsi/extensions/present_timing.cpp)
|
||||
add_definitions("-DVULKAN_WSI_LAYER_EXPERIMENTAL=1")
|
||||
else()
|
||||
list(APPEND JSON_COMMANDS COMMAND sed -Ei '/VK_EXT_present_timing/d' ${CMAKE_CURRENT_BINARY_DIR}/VkLayer_window_system_integration.json)
|
||||
add_definitions("-DVULKAN_WSI_LAYER_EXPERIMENTAL=0")
|
||||
endif()
|
||||
|
||||
|
||||
if((CMAKE_BUILD_TYPE MATCHES "^[Dd]ebug$") OR (CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo"))
|
||||
target_sources(${PROJECT_NAME} PUBLIC util/debug.cpp)
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Arm Limited.
|
||||
* Copyright (c) 2025-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -31,7 +31,6 @@
|
|||
#include <wsi/extensions/present_timing.hpp>
|
||||
#include <wsi/swapchain_base.hpp>
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetCalibratedTimestampsKHR(VkDevice device, uint32_t timestampCount,
|
||||
const VkCalibratedTimestampInfoKHR *pTimestampInfos, uint64_t *pTimestamps,
|
||||
|
|
@ -173,4 +172,3 @@ wsi_layer_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(VkPhysicalDevice physic
|
|||
{
|
||||
return wsi_layer_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(physicalDevice, pTimeDomainCount, pTimeDomains);
|
||||
}
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Arm Limited.
|
||||
* Copyright (c) 2025-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -32,7 +32,6 @@
|
|||
#pragma once
|
||||
#include "util/macros.hpp"
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetCalibratedTimestampsEXT(VkDevice device, uint32_t timestampCount,
|
||||
const VkCalibratedTimestampInfoKHR *pTimestampInfos, uint64_t *pTimestamps,
|
||||
|
|
@ -49,4 +48,3 @@ wsi_layer_vkGetPhysicalDeviceCalibrateableTimeDomainsKHR(VkPhysicalDevice physic
|
|||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(VkPhysicalDevice physicalDevice, uint32_t *pTimeDomainCount,
|
||||
VkTimeDomainEXT *pTimeDomains) VWL_API_POST;
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2025 Arm Limited.
|
||||
* Copyright (c) 2016-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -31,8 +31,8 @@
|
|||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include "layer/calibrated_timestamps_api.hpp"
|
||||
#include "present_timing_api.hpp"
|
||||
#include "present_wait_api.hpp"
|
||||
#include "wsi_layer_experimental.hpp"
|
||||
#include "private_data.hpp"
|
||||
#include "surface_api.hpp"
|
||||
#include "swapchain_api.hpp"
|
||||
|
|
@ -246,16 +246,13 @@ VKAPI_ATTR VkResult create_device(VkPhysicalDevice physicalDevice, const VkDevic
|
|||
util::vector<const char *> modified_enabled_extensions{ allocator };
|
||||
util::extension_list enabled_extensions{ allocator };
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VkPhysicalDeviceMaintenance9FeaturesKHR maintenance9_features = {};
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
const util::wsi_platform_set &enabled_platforms = inst_data.get_enabled_platforms();
|
||||
if (!enabled_platforms.empty())
|
||||
{
|
||||
TRY_LOG_CALL(enabled_extensions.add(pCreateInfo->ppEnabledExtensionNames, pCreateInfo->enabledExtensionCount));
|
||||
TRY_LOG_CALL(wsi::add_device_extensions_required_by_layer(physicalDevice, enabled_platforms, enabled_extensions,
|
||||
inst_data.api_version));
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
auto present_timing_supported = wsi::present_timing_dependencies_supported(physicalDevice);
|
||||
if (std::holds_alternative<VkResult>(present_timing_supported))
|
||||
{
|
||||
|
|
@ -286,7 +283,6 @@ VKAPI_ATTR VkResult create_device(VkPhysicalDevice physicalDevice, const VkDevic
|
|||
modified_info.pNext = &maintenance9_features;
|
||||
}
|
||||
}
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
|
||||
TRY_LOG_CALL(enabled_extensions.get_extension_strings(modified_enabled_extensions));
|
||||
|
||||
|
|
@ -598,7 +594,6 @@ wsi_layer_vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physical_device,
|
|||
}
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
auto *present_timing_features = util::find_extension<VkPhysicalDevicePresentTimingFeaturesEXT>(
|
||||
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT, pFeatures->pNext);
|
||||
if (present_timing_features != nullptr)
|
||||
|
|
@ -615,7 +610,6 @@ wsi_layer_vkGetPhysicalDeviceFeatures2(VkPhysicalDevice physical_device,
|
|||
present_timing_features->presentAtAbsoluteTime = VK_TRUE;
|
||||
present_timing_features->presentAtRelativeTime = VK_TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
auto *present_mode_fifo_latest_ready_features =
|
||||
util::find_extension<VkPhysicalDevicePresentModeFifoLatestReadyFeaturesEXT>(
|
||||
|
|
@ -679,7 +673,7 @@ wsi_layer_vkGetDeviceProcAddr(VkDevice device, const char *funcName) VWL_API_POS
|
|||
{
|
||||
GET_PROC_ADDR(vkGetSwapchainStatusKHR);
|
||||
}
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
|
||||
if (device_data.is_device_extension_enabled(VK_EXT_PRESENT_TIMING_EXTENSION_NAME))
|
||||
{
|
||||
GET_PROC_ADDR(vkSetSwapchainPresentTimingQueueSizeEXT);
|
||||
|
|
@ -692,7 +686,7 @@ wsi_layer_vkGetDeviceProcAddr(VkDevice device, const char *funcName) VWL_API_POS
|
|||
GET_PROC_ADDR(vkGetCalibratedTimestampsEXT);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
GET_PROC_ADDR(vkDestroyDevice);
|
||||
GET_PROC_ADDR(vkCreateImage);
|
||||
|
||||
|
|
@ -809,10 +803,9 @@ wsi_layer_vkGetInstanceProcAddr(VkInstance instance, const char *funcName) VWL_A
|
|||
GET_PROC_ADDR(vkGetPhysicalDeviceSurfaceCapabilities2KHR);
|
||||
GET_PROC_ADDR(vkGetPhysicalDeviceSurfaceFormats2KHR);
|
||||
}
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
|
||||
GET_PROC_ADDR(vkGetPhysicalDeviceCalibrateableTimeDomainsKHR);
|
||||
GET_PROC_ADDR(vkGetPhysicalDeviceCalibrateableTimeDomainsEXT);
|
||||
#endif
|
||||
|
||||
if (instance_data.is_instance_extension_enabled(VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2024-2025 Arm Limited.
|
||||
* Copyright (c) 2024-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -28,13 +28,12 @@
|
|||
* @brief Contains the Vulkan entrypoints for the present timing.
|
||||
*/
|
||||
#include <cassert>
|
||||
#include "wsi_layer_experimental.hpp"
|
||||
|
||||
#include "present_timing_api.hpp"
|
||||
#include <wsi/extensions/present_timing.hpp>
|
||||
#include <wsi/swapchain_base.hpp>
|
||||
#include "util/macros.hpp"
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
/**
|
||||
* @brief Implements vkSetSwapchainPresentTimingQueueSizeEXT Vulkan entrypoint.
|
||||
*/
|
||||
|
|
@ -119,4 +118,3 @@ wsi_layer_vkGetPastPresentationTimingEXT(
|
|||
auto *ext = sc->get_swapchain_extension<wsi::wsi_ext_present_timing>(true);
|
||||
return ext->get_past_presentation_results(pPastPresentationTimingProperties, pPastPresentationTimingInfo->flags);
|
||||
}
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
|
|
|
|||
51
layer/present_timing_api.hpp
Normal file
51
layer/present_timing_api.hpp
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
/*
|
||||
* Copyright (c) 2024-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to
|
||||
* deal in the Software without restriction, including without limitation the
|
||||
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
* sell copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file present_timing_api.hpp
|
||||
*
|
||||
* @brief Contains the declarations of the structures and entry point APIs of experimental extensions.
|
||||
*
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
#include "util/macros.hpp"
|
||||
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkSetSwapchainPresentTimingQueueSizeEXT(VkDevice device, VkSwapchainKHR swapchain,
|
||||
uint32_t size) VWL_API_POST;
|
||||
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetSwapchainTimingPropertiesEXT(VkDevice device, VkSwapchainKHR swapchain,
|
||||
VkSwapchainTimingPropertiesEXT *pSwapchainTimingProperties,
|
||||
uint64_t *pSwapchainTimingPropertiesCounter) VWL_API_POST;
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetSwapchainTimeDomainPropertiesEXT(VkDevice device, VkSwapchainKHR swapchain,
|
||||
VkSwapchainTimeDomainPropertiesEXT *pSwapchainTimeDomainProperties,
|
||||
uint64_t *pTimeDomainsCounter) VWL_API_POST;
|
||||
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetPastPresentationTimingEXT(
|
||||
VkDevice device, const VkPastPresentationTimingInfoEXT *pPastPresentationTimingInfo,
|
||||
VkPastPresentationTimingPropertiesEXT *pPastPresentationTimingProperties) VWL_API_POST;
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2025 Arm Limited.
|
||||
* Copyright (c) 2018-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -472,9 +472,7 @@ device_private_data::device_private_data(instance_private_data &inst_data, VkPhy
|
|||
, compression_control_enabled{ false }
|
||||
, present_id_enabled { false }
|
||||
, swapchain_maintenance1_enabled{ false }
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
, present_timing_enabled { true }
|
||||
#endif
|
||||
, present_wait2_enabled { false }
|
||||
, present_id2_enabled { false }
|
||||
, present_mode_fifo_latest_ready_enabled { false }
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018-2025 Arm Limited.
|
||||
* Copyright (c) 2018-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <layer/wsi_layer_experimental.hpp>
|
||||
#include <layer/present_timing_api.hpp>
|
||||
|
||||
#include <util/platform_set.hpp>
|
||||
#include <util/custom_allocator.hpp>
|
||||
|
|
@ -379,15 +379,7 @@ private:
|
|||
* alias: Name of the promoted entrypoint alias if different to entrypoint_name.
|
||||
*/
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
#define DEVICE_ENTRYPOINTS_LIST_EXPERIMENTAL(EP) \
|
||||
EP(GetSwapchainTimeDomainPropertiesEXT, VK_EXT_PRESENT_TIMING_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
EP(GetSwapchainTimingPropertiesEXT, VK_EXT_PRESENT_TIMING_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
EP(SetSwapchainPresentTimingQueueSizeEXT, VK_EXT_PRESENT_TIMING_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
EP(GetPastPresentationTimingEXT, VK_EXT_PRESENT_TIMING_EXTENSION_NAME, API_VERSION_MAX, false, )
|
||||
#else
|
||||
#define DEVICE_ENTRYPOINTS_LIST_EXPERIMENTAL(EP)
|
||||
#endif
|
||||
|
||||
/* Define a list of custom entrypoints that might rely on preprocessor conditions and similar */
|
||||
#define DEVICE_ENTRYPOINTS_LIST_EXPANSION(EP) DEVICE_ENTRYPOINTS_LIST_EXPERIMENTAL(EP)
|
||||
|
|
@ -481,6 +473,10 @@ private:
|
|||
EP(WaitForPresentKHR, VK_KHR_PRESENT_WAIT_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
/* VK_KHR_present_wait2 */ \
|
||||
EP(WaitForPresent2KHR, VK_KHR_PRESENT_WAIT_2_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
EP(GetSwapchainTimeDomainPropertiesEXT, VK_EXT_PRESENT_TIMING_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
EP(GetSwapchainTimingPropertiesEXT, VK_EXT_PRESENT_TIMING_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
EP(SetSwapchainPresentTimingQueueSizeEXT, VK_EXT_PRESENT_TIMING_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
EP(GetPastPresentationTimingEXT, VK_EXT_PRESENT_TIMING_EXTENSION_NAME, API_VERSION_MAX, false, ) \
|
||||
/* Custom entrypoints */ \
|
||||
DEVICE_ENTRYPOINTS_LIST_EXPANSION(EP)
|
||||
|
||||
|
|
@ -1099,12 +1095,10 @@ private:
|
|||
*/
|
||||
bool present_wait_enabled{ false };
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
/**
|
||||
* @brief Stores whether the device has enabled support for the present timing features.
|
||||
*/
|
||||
bool present_timing_enabled{ false };
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief Stores whether the device supports the present wait2 feature.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016-2017, 2019, 2021-2022, 2024-2025 Arm Limited.
|
||||
* Copyright (c) 2016-2017, 2019, 2021-2022, 2024-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -119,14 +119,12 @@ wsi_layer_vkGetPhysicalDeviceSurfaceCapabilities2KHR(VkPhysicalDevice physicalDe
|
|||
wsi::surface_properties *props = wsi::get_surface_properties(instance, pSurfaceInfo->surface);
|
||||
assert(props != nullptr);
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
auto *surf_caps_ext = util::find_extension<VkPresentTimingSurfaceCapabilitiesEXT>(
|
||||
VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT, pSurfaceCapabilities);
|
||||
if (surf_caps_ext != nullptr)
|
||||
{
|
||||
TRY_LOG_CALL(props->get_present_timing_surface_caps(physicalDevice, surf_caps_ext));
|
||||
}
|
||||
#endif
|
||||
|
||||
auto shared_present_surface_cap_struct = util::find_extension<VkSharedPresentSurfaceCapabilitiesKHR>(
|
||||
VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR, pSurfaceCapabilities);
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017, 2019, 2021-2025 Arm Limited.
|
||||
* Copyright (c) 2017, 2019, 2021-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -218,14 +218,13 @@ wsi_layer_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo)
|
|||
VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_EXT, present_info->pNext);
|
||||
const auto swapchain_present_mode_info = util::find_extension<VkSwapchainPresentModeInfoEXT>(
|
||||
VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_EXT, present_info->pNext);
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
const auto present_timings_info =
|
||||
util::find_extension<VkPresentTimingsInfoEXT>(VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT, present_info->pNext);
|
||||
if (present_timings_info)
|
||||
{
|
||||
assert(present_timings_info->swapchainCount == pPresentInfo->swapchainCount);
|
||||
}
|
||||
#endif
|
||||
|
||||
for (uint32_t i = 0; i < pPresentInfo->swapchainCount; ++i)
|
||||
{
|
||||
VkSwapchainKHR swapc = pPresentInfo->pSwapchains[i];
|
||||
|
|
@ -260,13 +259,11 @@ wsi_layer_vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo)
|
|||
present_params.use_image_present_semaphore = use_image_present_semaphore;
|
||||
present_params.handle_present_frame_boundary_event = frame_boundary_event_handled;
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
if (present_timings_info)
|
||||
{
|
||||
present_params.m_present_timing_info = present_timings_info->pTimingInfos[i];
|
||||
present_params.m_present_timing_info.pNext = nullptr;
|
||||
}
|
||||
#endif
|
||||
VkResult res = sc->queue_present(queue, present_info, present_params);
|
||||
if (pPresentInfo->pResults != nullptr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -34,22 +34,4 @@
|
|||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkSetSwapchainPresentTimingQueueSizeEXT(VkDevice device, VkSwapchainKHR swapchain,
|
||||
uint32_t size) VWL_API_POST;
|
||||
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetSwapchainTimingPropertiesEXT(VkDevice device, VkSwapchainKHR swapchain,
|
||||
VkSwapchainTimingPropertiesEXT *pSwapchainTimingProperties,
|
||||
uint64_t *pSwapchainTimingPropertiesCounter) VWL_API_POST;
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetSwapchainTimeDomainPropertiesEXT(VkDevice device, VkSwapchainKHR swapchain,
|
||||
VkSwapchainTimeDomainPropertiesEXT *pSwapchainTimeDomainProperties,
|
||||
uint64_t *pTimeDomainsCounter) VWL_API_POST;
|
||||
|
||||
VWL_VKAPI_CALL(VkResult)
|
||||
wsi_layer_vkGetPastPresentationTimingEXT(
|
||||
VkDevice device, const VkPastPresentationTimingInfoEXT *pPastPresentationTimingInfo,
|
||||
VkPastPresentationTimingPropertiesEXT *pPastPresentationTimingProperties) VWL_API_POST;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -566,7 +566,6 @@ bool surface_properties::is_surface_extension_enabled(const layer::instance_priv
|
|||
return instance_data.is_instance_extension_enabled(VK_KHR_SURFACE_EXTENSION_NAME);
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VkResult surface_properties::get_present_timing_surface_caps_internal(
|
||||
VkPhysicalDevice, VkPresentTimingSurfaceCapabilitiesEXT *present_timing_surface_caps)
|
||||
{
|
||||
|
|
@ -577,7 +576,6 @@ VkResult surface_properties::get_present_timing_surface_caps_internal(
|
|||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
surface_properties &surface_properties::get_instance()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2024-2025 Arm Limited.
|
||||
* Copyright (c) 2024-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -82,10 +82,8 @@ private:
|
|||
void get_surface_present_scaling_and_gravity(VkSurfacePresentScalingCapabilitiesEXT *scaling_capabilities) override;
|
||||
void populate_present_mode_compatibilities() override;
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VkResult get_present_timing_surface_caps_internal(
|
||||
VkPhysicalDevice physical_device, VkPresentTimingSurfaceCapabilitiesEXT *present_timing_surface_caps) override;
|
||||
#endif
|
||||
};
|
||||
|
||||
} /* namespace display */
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@
|
|||
|
||||
#include "present_timing.hpp"
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
namespace wsi
|
||||
{
|
||||
/* VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT,
|
||||
|
|
@ -732,5 +731,3 @@ std::variant<bool, VkResult> present_timing_dependencies_supported(VkPhysicalDev
|
|||
return maintenance9.maintenance9 != VK_FALSE;
|
||||
}
|
||||
} /* namespace wsi */
|
||||
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2024-2025 Arm Limited.
|
||||
* Copyright (c) 2024-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -42,15 +42,14 @@
|
|||
#include <variant>
|
||||
#include <cmath>
|
||||
|
||||
#include <layer/wsi_layer_experimental.hpp>
|
||||
#include <layer/private_data.hpp>
|
||||
#include <layer/present_timing_api.hpp>
|
||||
#include <util/custom_allocator.hpp>
|
||||
#include <util/custom_mutex.hpp>
|
||||
#include <util/macros.hpp>
|
||||
#include <util/wsi_extension.hpp>
|
||||
#include <wsi/swapchain_base.hpp>
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
namespace wsi
|
||||
{
|
||||
|
||||
|
|
@ -846,4 +845,3 @@ inline uint64_t ticks_to_ns(uint64_t ticks, const float ×tamp_period)
|
|||
}
|
||||
|
||||
} /* namespace wsi */
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Arm Limited.
|
||||
* Copyright (c) 2025-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -27,7 +27,6 @@
|
|||
*
|
||||
* @brief Contains the functionality to implement features for present timing extension.
|
||||
*/
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
#include <cstdint>
|
||||
#include <array>
|
||||
#include <algorithm>
|
||||
|
|
@ -183,5 +182,3 @@ VkPresentStageFlagsEXT wsi_ext_present_timing_headless::stages_supported()
|
|||
}
|
||||
return stages;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Arm Limited.
|
||||
* Copyright (c) 2025-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -29,8 +29,6 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
|
||||
#include <wsi/extensions/present_timing.hpp>
|
||||
#include <wsi/swapchain_base.hpp>
|
||||
|
||||
|
|
@ -109,5 +107,3 @@ private:
|
|||
*/
|
||||
bool m_is_swapchain_using_shared_present_mode;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -34,15 +34,11 @@
|
|||
#include <vulkan/vulkan.h>
|
||||
|
||||
#include <layer/private_data.hpp>
|
||||
|
||||
#include "present_timing_handler.hpp"
|
||||
#include "surface_properties.hpp"
|
||||
#include "surface.hpp"
|
||||
#include "util/macros.hpp"
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
#include "present_timing_handler.hpp"
|
||||
#endif
|
||||
|
||||
namespace wsi
|
||||
{
|
||||
namespace headless
|
||||
|
|
@ -249,7 +245,6 @@ bool surface_properties::is_compatible_present_modes(VkPresentModeKHR present_mo
|
|||
return m_compatible_present_modes.is_compatible_present_modes(present_mode_a, present_mode_b);
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VkResult surface_properties::get_present_timing_surface_caps_internal(
|
||||
VkPhysicalDevice physical_device, VkPresentTimingSurfaceCapabilitiesEXT *present_timing_surface_caps)
|
||||
{
|
||||
|
|
@ -280,7 +275,6 @@ VkResult surface_properties::get_present_timing_surface_caps_internal(
|
|||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
} /* namespace headless */
|
||||
} /* namespace wsi */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2019, 2022-2025 Arm Limited.
|
||||
* Copyright (c) 2017-2019, 2022-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -75,10 +75,8 @@ private:
|
|||
|
||||
void get_surface_present_scaling_and_gravity(VkSurfacePresentScalingCapabilitiesEXT *scaling_capabilities) override;
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VkResult get_present_timing_surface_caps_internal(
|
||||
VkPhysicalDevice physical_device, VkPresentTimingSurfaceCapabilitiesEXT *present_timing_surface_caps) override;
|
||||
#endif
|
||||
};
|
||||
|
||||
} /* namespace headless */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2025 Arm Limited.
|
||||
* Copyright (c) 2017-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -99,7 +99,6 @@ VkResult swapchain::add_required_extensions(VkDevice device, const VkSwapchainCr
|
|||
}
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
bool swapchain_support_enabled = swapchain_create_info->flags & VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT;
|
||||
if (swapchain_support_enabled)
|
||||
{
|
||||
|
|
@ -109,7 +108,6 @@ VkResult swapchain::add_required_extensions(VkDevice device, const VkSwapchainCr
|
|||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
bool present_wait2;
|
||||
constexpr VkSwapchainCreateFlagsKHR present_wait2_mask =
|
||||
|
|
@ -176,7 +174,6 @@ VkResult swapchain::allocate_and_bind_swapchain_image(swapchain_image &image)
|
|||
|
||||
void swapchain::present_image(const pending_present_request &pending_present)
|
||||
{
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
auto *ext_present_timing = get_swapchain_extension<wsi_ext_present_timing_headless>();
|
||||
if (ext_present_timing)
|
||||
{
|
||||
|
|
@ -215,7 +212,6 @@ void swapchain::present_image(const pending_present_request &pending_present)
|
|||
|
||||
ext_present_timing->remove_presentation_target_entry(pending_present.image_index);
|
||||
}
|
||||
#endif
|
||||
|
||||
auto *ext = get_swapchain_extension<wsi_ext_present_id>();
|
||||
if (ext != nullptr)
|
||||
|
|
@ -223,7 +219,6 @@ void swapchain::present_image(const pending_present_request &pending_present)
|
|||
ext->mark_delivered(pending_present.present_id);
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
if (ext_present_timing && ext_present_timing->get_monotonic_domain().has_value())
|
||||
{
|
||||
auto current_time = ext_present_timing->get_current_clock_time_ns();
|
||||
|
|
@ -244,8 +239,6 @@ void swapchain::present_image(const pending_present_request &pending_present)
|
|||
ext_present_timing->set_pending_stage_time(pending_present.image_index, stage, *current_time);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
unpresent_image(pending_present.image_index);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -141,7 +141,6 @@ void get_surface_capabilities_common(VkPhysicalDevice physical_device, VkSurface
|
|||
VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT;
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
/**
|
||||
* @brief Get the present timing surface capabilities for the specific VkSurface type.
|
||||
*/
|
||||
|
|
@ -163,6 +162,5 @@ VkResult surface_properties::get_present_timing_surface_caps(
|
|||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
|
||||
} /* namespace wsi */
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
#pragma once
|
||||
|
||||
#include <vulkan/vulkan.h>
|
||||
#include "layer/wsi_layer_experimental.hpp"
|
||||
#include "layer/present_timing_api.hpp"
|
||||
#include "layer/private_data.hpp"
|
||||
#include "util/custom_allocator.hpp"
|
||||
#include "util/drm/drm_utils.hpp"
|
||||
|
|
@ -119,13 +119,11 @@ public:
|
|||
|
||||
virtual bool is_compatible_present_modes(VkPresentModeKHR present_mode_a, VkPresentModeKHR present_mode_b) = 0;
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
/**
|
||||
* @brief Get the present timing surface capabilities for the specific VkSurface type.
|
||||
*/
|
||||
VkResult get_present_timing_surface_caps(VkPhysicalDevice physical_device,
|
||||
VkPresentTimingSurfaceCapabilitiesEXT *present_timing_surface_caps);
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
|
||||
/**
|
||||
* @brief Virtual destructor.
|
||||
|
|
@ -138,13 +136,11 @@ private:
|
|||
*/
|
||||
virtual void populate_present_mode_compatibilities() = 0;
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
/**
|
||||
* @brief Get the present timing surface capabilities for the specific VkSurface type.
|
||||
*/
|
||||
virtual VkResult get_present_timing_surface_caps_internal(
|
||||
VkPhysicalDevice physical_device, VkPresentTimingSurfaceCapabilitiesEXT *present_timing_surface_caps) = 0;
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
};
|
||||
|
||||
class surface_format_properties
|
||||
|
|
|
|||
|
|
@ -581,7 +581,6 @@ VkResult swapchain_base::notify_presentation_engine(const pending_present_reques
|
|||
VkResult swapchain_base::queue_present(VkQueue queue, const VkPresentInfoKHR *present_info,
|
||||
const swapchain_presentation_parameters &submit_info)
|
||||
{
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
const VkPresentTimingInfoEXT *present_timing_info = nullptr;
|
||||
const auto *present_timings_info =
|
||||
util::find_extension<VkPresentTimingsInfoEXT>(VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT, present_info->pNext);
|
||||
|
|
@ -595,7 +594,7 @@ VkResult swapchain_base::queue_present(VkQueue queue, const VkPresentInfoKHR *pr
|
|||
TRY(ext_present_timing->queue_has_space());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (submit_info.switch_presentation_mode)
|
||||
{
|
||||
/* Assert when a presentation mode switch is requested and the swapchain_maintenance1 extension which implements this is not available */
|
||||
|
|
@ -636,7 +635,6 @@ VkResult swapchain_base::queue_present(VkQueue queue, const VkPresentInfoKHR *pr
|
|||
signal_semaphores[count_signal_semaphores++] =
|
||||
m_swapchain_images[submit_info.pending_present.image_index].get_present_fence_wait_semaphore();
|
||||
}
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
if ((present_timing_info != nullptr) &&
|
||||
(present_timing_info->presentStageQueries & VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT))
|
||||
{
|
||||
|
|
@ -647,7 +645,7 @@ VkResult swapchain_base::queue_present(VkQueue queue, const VkPresentInfoKHR *pr
|
|||
ext_present_timing->get_image_present_semaphore(submit_info.pending_present.image_index);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
queue_submit_semaphores semaphores = {
|
||||
wait_semaphores,
|
||||
sem_count,
|
||||
|
|
@ -669,14 +667,12 @@ VkResult swapchain_base::queue_present(VkQueue queue, const VkPresentInfoKHR *pr
|
|||
TRY(sync_queue_submit(m_device_data, queue, submit_info.present_fence, present_fence_semaphores));
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
if (present_timing_info != nullptr)
|
||||
{
|
||||
auto *ext_present_timing = get_swapchain_extension<wsi::wsi_ext_present_timing>(true);
|
||||
TRY_LOG_CALL(ext_present_timing->add_presentation_entry(
|
||||
queue, submit_info.pending_present.present_id, submit_info.pending_present.image_index, *present_timing_info));
|
||||
}
|
||||
#endif
|
||||
TRY(notify_presentation_engine(submit_info.pending_present));
|
||||
|
||||
return VK_SUCCESS;
|
||||
|
|
|
|||
|
|
@ -100,20 +100,16 @@ struct swapchain_presentation_parameters
|
|||
*/
|
||||
VkBool32 handle_present_frame_boundary_event{ true };
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
/**
|
||||
* The present timing info.
|
||||
*/
|
||||
VkPresentTimingInfoEXT m_present_timing_info;
|
||||
#endif
|
||||
};
|
||||
|
||||
enum signal_semaphores_type
|
||||
{
|
||||
SIGNAL_SEMAPHORE_PRESENT_FENCE,
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
SIGNAL_SEMAPHORE_PRESENT_TIMING,
|
||||
#endif
|
||||
SIGNAL_SEMAPHORE_MAX_NUM,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Arm Limited.
|
||||
* Copyright (c) 2025-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -27,7 +27,6 @@
|
|||
*
|
||||
* @brief Contains the functionality to implement Wayland specific features for present ID extension.
|
||||
*/
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
|
||||
#include <util/custom_mutex.hpp>
|
||||
#include "present_id_wayland.hpp"
|
||||
|
|
@ -105,5 +104,3 @@ void wsi_ext_present_id_wayland::remove_from_pending_present_feedback_list(uint6
|
|||
|
||||
} // namespace wayland
|
||||
} // namespace wsi
|
||||
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Arm Limited.
|
||||
* Copyright (c) 2025-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -29,8 +29,6 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
|
||||
#include <wsi/extensions/present_id.hpp>
|
||||
#include <util/ring_buffer.hpp>
|
||||
#include "surface_properties.hpp"
|
||||
|
|
@ -97,5 +95,3 @@ private:
|
|||
|
||||
} // namespace wayland
|
||||
} // namespace wsi
|
||||
|
||||
#endif /* VULKAN_WSI_LAYER_EXPERIMENTAL */
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2025 Arm Limited.
|
||||
* Copyright (c) 2025-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -29,8 +29,6 @@
|
|||
*/
|
||||
#pragma once
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
|
||||
#include <optional>
|
||||
#include <array>
|
||||
|
||||
|
|
@ -178,5 +176,3 @@ private:
|
|||
|
||||
} // namespace wayland
|
||||
} // namespace wsi
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include <algorithm>
|
||||
#include <array>
|
||||
#include <cstring>
|
||||
#include "present_timing_handler.hpp"
|
||||
#include "surface_properties.hpp"
|
||||
#include "surface.hpp"
|
||||
#include "layer/private_data.hpp"
|
||||
|
|
@ -46,10 +47,6 @@
|
|||
#include "util/macros.hpp"
|
||||
#include "util/helpers.hpp"
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
#include "present_timing_handler.hpp"
|
||||
#endif
|
||||
|
||||
namespace wsi
|
||||
{
|
||||
namespace wayland
|
||||
|
|
@ -454,7 +451,6 @@ bool surface_properties::is_compatible_present_modes(VkPresentModeKHR present_mo
|
|||
return m_compatible_present_modes.is_compatible_present_modes(present_mode_a, present_mode_b);
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VkResult surface_properties::get_present_timing_surface_caps_internal(
|
||||
VkPhysicalDevice physical_device, VkPresentTimingSurfaceCapabilitiesEXT *present_timing_surface_caps)
|
||||
{
|
||||
|
|
@ -503,7 +499,6 @@ VkResult surface_properties::get_present_timing_surface_caps_internal(
|
|||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
} // namespace wayland
|
||||
} // namespace wsi
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2019, 2021-2025 Arm Limited.
|
||||
* Copyright (c) 2017-2019, 2021-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -95,10 +95,8 @@ private:
|
|||
|
||||
void get_surface_present_scaling_and_gravity(VkSurfacePresentScalingCapabilitiesEXT *scaling_capabilities) override;
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
VkResult get_present_timing_surface_caps_internal(
|
||||
VkPhysicalDevice physical_device, VkPresentTimingSurfaceCapabilitiesEXT *present_timing_surface_caps) override;
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace wayland
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2017-2025 Arm Limited.
|
||||
* Copyright (c) 2017-2026 Arm Limited.
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
|
|
@ -123,11 +123,7 @@ VkResult swapchain::add_required_extensions(VkDevice device, const VkSwapchainCr
|
|||
if (m_device_data.is_present_id_enabled() ||
|
||||
(swapchain_create_info->flags & VK_SWAPCHAIN_CREATE_PRESENT_ID_2_BIT_KHR))
|
||||
{
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
if (!add_swapchain_extension(m_allocator.make_unique<wsi_ext_present_id_wayland>()))
|
||||
#else
|
||||
if (!add_swapchain_extension(m_allocator.make_unique<wsi_ext_present_id>()))
|
||||
#endif
|
||||
{
|
||||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
|
|
@ -163,7 +159,6 @@ VkResult swapchain::add_required_extensions(VkDevice device, const VkSwapchainCr
|
|||
}
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
bool swapchain_support_enabled = swapchain_create_info->flags & VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT;
|
||||
if (swapchain_support_enabled)
|
||||
{
|
||||
|
|
@ -187,8 +182,6 @@ VkResult swapchain::add_required_extensions(VkDevice device, const VkSwapchainCr
|
|||
return VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
@ -225,13 +218,12 @@ VkResult swapchain::init_platform(VkDevice device, const VkSwapchainCreateInfoKH
|
|||
{
|
||||
present_wait->set_wayland_dispatcher(m_display, m_buffer_queue);
|
||||
}
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
|
||||
auto *present_timing_ext = get_swapchain_extension<wsi_ext_present_timing_wayland>();
|
||||
if (present_timing_ext != nullptr)
|
||||
{
|
||||
present_timing_ext->init(m_display, m_buffer_queue);
|
||||
}
|
||||
#endif
|
||||
|
||||
auto wsi_allocator = swapchain_wsialloc_allocator::create();
|
||||
if (!wsi_allocator.has_value())
|
||||
|
|
@ -304,7 +296,6 @@ void swapchain::release_buffer(struct wl_buffer *wayl_buffer)
|
|||
auto data = m_swapchain_images[i].get_data<wayland_image_data>();
|
||||
if (data && data->get_buffer() == wayl_buffer)
|
||||
{
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
/* Some compositors might not deliver wp_presentation_feedback events if the images are pushed to compositor quick enough
|
||||
* in presentation modes that allow it (mailbox). If that happens, double check if these images were submitted for feedback
|
||||
* and handle it as a 'image discarded' event. */
|
||||
|
|
@ -318,8 +309,6 @@ void swapchain::release_buffer(struct wl_buffer *wayl_buffer)
|
|||
{
|
||||
present_id_ext->mark_buffer_release(i);
|
||||
}
|
||||
#endif
|
||||
|
||||
unpresent_image(i);
|
||||
break;
|
||||
}
|
||||
|
|
@ -433,7 +422,6 @@ void swapchain::present_image(const pending_present_request &pending_present)
|
|||
}
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
auto *present_id_ext = get_swapchain_extension<wsi_ext_present_id_wayland>();
|
||||
if (present_id_ext != nullptr)
|
||||
{
|
||||
|
|
@ -474,7 +462,6 @@ void swapchain::present_image(const pending_present_request &pending_present)
|
|||
register_wp_presentation_feedback_listener(feedback, feedback_obj);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
wl_surface_commit(m_surface);
|
||||
int res = wl_display_flush(m_display);
|
||||
|
|
@ -485,21 +472,14 @@ void swapchain::present_image(const pending_present_request &pending_present)
|
|||
set_error_state(VK_ERROR_SURFACE_LOST_KHR);
|
||||
}
|
||||
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
auto *ext = get_swapchain_extension<wsi_ext_present_id_wayland>();
|
||||
if (ext != nullptr)
|
||||
{
|
||||
if (m_wsi_surface->get_presentation_time_interface() == nullptr)
|
||||
#else
|
||||
auto *ext = get_swapchain_extension<wsi_ext_present_id>();
|
||||
if (ext != nullptr)
|
||||
#endif
|
||||
{
|
||||
ext->mark_delivered(pending_present.present_id);
|
||||
}
|
||||
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
bool swapchain::free_image_found()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue