2024-08-02 16:56:30 +01:00
|
|
|
/*
|
2024-11-28 06:36:17 +00:00
|
|
|
* Copyright (c) 2024-2025 Arm Limited.
|
2024-08-02 16:56:30 +01:00
|
|
|
*
|
|
|
|
|
* 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 wsi_layer_experimental.hpp
|
|
|
|
|
*
|
2024-11-28 06:36:17 +00:00
|
|
|
* @brief Contains the declarations of the structures and entry point APIs of experimental extensions.
|
|
|
|
|
*
|
2024-08-02 16:56:30 +01:00
|
|
|
*/
|
|
|
|
|
|
2024-11-28 06:36:17 +00:00
|
|
|
#pragma once
|
2024-08-02 16:56:30 +01:00
|
|
|
#include "util/macros.hpp"
|
|
|
|
|
|
|
|
|
|
#if VULKAN_WSI_LAYER_EXPERIMENTAL
|
2024-11-28 06:36:17 +00:00
|
|
|
|
2024-11-15 12:49:31 +00:00
|
|
|
#define VK_EXT_present_timing 1
|
|
|
|
|
#define VK_EXT_PRESENT_TIMING_SPEC_VERSION 1
|
2024-11-28 06:36:17 +00:00
|
|
|
#define VK_EXT_PRESENT_TIMING_EXTENSION_NAME "VK_EXT_present_timing"
|
2024-08-02 16:56:30 +01:00
|
|
|
#define VK_ERROR_PRESENT_TIMING_QUEUE_FULL_EXT ((VkResult)(-1000208000))
|
|
|
|
|
#define VK_TIME_DOMAIN_PRESENT_STAGE_LOCAL_EXT ((VkTimeDomainEXT)(1000208000))
|
|
|
|
|
#define VK_TIME_DOMAIN_SWAPCHAIN_LOCAL_EXT ((VkTimeDomainEXT)(1000208001))
|
|
|
|
|
#define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_TIMING_FEATURES_EXT ((VkStructureType)1000208002)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_PRESENT_TIMING_SURFACE_CAPABILITIES_EXT ((VkStructureType)1000208003)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_SWAPCHAIN_TIMING_PROPERTIES_EXT ((VkStructureType)1000208004)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_SWAPCHAIN_TIME_DOMAIN_PROPERTIES_EXT ((VkStructureType)1000208005)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_SWAPCHAIN_CALIBRATED_TIMESTAMP_INFO_EXT ((VkStructureType)1000208006)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_EXT ((VkStructureType)1000208007)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_PROPERTIES_EXT ((VkStructureType)1000208008)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_PAST_PRESENTATION_TIMING_INFO_EXT ((VkStructureType)1000208009)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_PRESENT_TIMING_INFO_EXT ((VkStructureType)1000208010)
|
|
|
|
|
#define VK_STRUCTURE_TYPE_PRESENT_TIMINGS_INFO_EXT ((VkStructureType)1000208011)
|
|
|
|
|
|
2024-11-28 06:36:17 +00:00
|
|
|
/* Placeholder. Need to get the real value. */
|
|
|
|
|
#define VK_SWAPCHAIN_CREATE_PRESENT_TIMING_BIT_EXT ((VkSwapchainCreateFlagsKHR)0x00010000)
|
|
|
|
|
|
2024-08-21 12:59:49 +01:00
|
|
|
typedef VkFlags VkPresentStageFlagsEXT;
|
2025-09-04 16:48:10 +00:00
|
|
|
typedef VkFlags VkPresentTimingInfoFlagsEXT;
|
2024-08-21 12:59:49 +01:00
|
|
|
|
2024-08-02 16:56:30 +01:00
|
|
|
typedef struct VkPhysicalDevicePresentTimingFeaturesEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
void *pNext;
|
|
|
|
|
VkBool32 presentTiming;
|
|
|
|
|
VkBool32 presentAtAbsoluteTime;
|
|
|
|
|
VkBool32 presentAtRelativeTime;
|
|
|
|
|
} VkPhysicalDevicePresentTimingFeaturesEXT;
|
|
|
|
|
typedef struct VkPresentTimingSurfaceCapabilitiesEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
void *pNext;
|
|
|
|
|
VkBool32 presentTimingSupported;
|
|
|
|
|
VkBool32 presentAtAbsoluteTimeSupported;
|
|
|
|
|
VkBool32 presentAtRelativeTimeSupported;
|
|
|
|
|
VkPresentStageFlagsEXT presentStageQueries;
|
|
|
|
|
} VkPresentTimingSurfaceCapabilitiesEXT;
|
|
|
|
|
|
|
|
|
|
typedef enum VkPresentStageFlagBitsEXT
|
|
|
|
|
{
|
|
|
|
|
VK_PRESENT_STAGE_QUEUE_OPERATIONS_END_BIT_EXT = 0x00000001,
|
2025-09-04 16:48:10 +00:00
|
|
|
VK_PRESENT_STAGE_REQUEST_DEQUEUED_BIT_EXT = 0x00000002,
|
2024-08-02 16:56:30 +01:00
|
|
|
VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_OUT_BIT_EXT = 0x00000004,
|
|
|
|
|
VK_PRESENT_STAGE_IMAGE_FIRST_PIXEL_VISIBLE_BIT_EXT = 0x00000008,
|
|
|
|
|
} VkPresentStageFlagBitsEXT;
|
|
|
|
|
|
|
|
|
|
typedef struct VkSwapchainTimingPropertiesEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
const void *pNext;
|
|
|
|
|
uint64_t refreshDuration;
|
2025-09-04 16:48:10 +00:00
|
|
|
uint64_t refreshInterval;
|
2024-08-02 16:56:30 +01:00
|
|
|
} VkSwapchainTimingPropertiesEXT;
|
|
|
|
|
|
|
|
|
|
typedef struct VkSwapchainTimeDomainPropertiesEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
void *pNext;
|
|
|
|
|
uint32_t timeDomainCount;
|
|
|
|
|
VkTimeDomainEXT *pTimeDomains;
|
|
|
|
|
uint64_t *pTimeDomainIds;
|
|
|
|
|
} VkSwapchainTimeDomainPropertiesEXT;
|
|
|
|
|
|
|
|
|
|
typedef struct VkSwapchainCalibratedTimestampInfoEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
const void *pNext;
|
|
|
|
|
VkSwapchainKHR swapchain;
|
|
|
|
|
VkPresentStageFlagsEXT presentStage;
|
|
|
|
|
uint64_t timeDomainId;
|
|
|
|
|
} VkSwapchainCalibratedTimestampInfoEXT;
|
|
|
|
|
|
|
|
|
|
typedef struct VkPresentStageTimeEXT
|
|
|
|
|
{
|
|
|
|
|
VkPresentStageFlagsEXT stage;
|
|
|
|
|
uint64_t time;
|
|
|
|
|
} VkPresentStageTimeEXT;
|
|
|
|
|
|
|
|
|
|
typedef struct VkPastPresentationTimingEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
2025-09-04 16:48:10 +00:00
|
|
|
void *pNext;
|
2024-08-02 16:56:30 +01:00
|
|
|
uint64_t presentId;
|
2025-09-04 16:48:10 +00:00
|
|
|
uint64_t targetTime;
|
2024-08-02 16:56:30 +01:00
|
|
|
uint32_t presentStageCount;
|
|
|
|
|
VkPresentStageTimeEXT *pPresentStages;
|
2025-09-04 16:48:10 +00:00
|
|
|
VkTimeDomainKHR timeDomain;
|
2024-08-02 16:56:30 +01:00
|
|
|
uint64_t timeDomainId;
|
|
|
|
|
VkBool32 reportComplete;
|
|
|
|
|
} VkPastPresentationTimingEXT;
|
|
|
|
|
|
|
|
|
|
typedef struct VkPastPresentationTimingPropertiesEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
const void *pNext;
|
|
|
|
|
uint64_t timingPropertiesCounter;
|
|
|
|
|
uint64_t timeDomainsCounter;
|
|
|
|
|
uint32_t presentationTimingCount;
|
|
|
|
|
VkPastPresentationTimingEXT *pPresentationTimings;
|
2024-08-21 12:59:49 +01:00
|
|
|
} VkPastPresentationTimingPropertiesEXT;
|
2024-08-02 16:56:30 +01:00
|
|
|
|
2025-07-02 16:08:46 +01:00
|
|
|
typedef VkFlags VkPastPresentationTimingFlagsEXT;
|
|
|
|
|
|
|
|
|
|
typedef enum VkPastPresentationTimingFlagBitsEXT
|
|
|
|
|
{
|
|
|
|
|
VK_PAST_PRESENTATION_TIMING_ALLOW_PARTIAL_RESULTS_BIT_EXT = 0x00000001,
|
|
|
|
|
VK_PAST_PRESENTATION_TIMING_ALLOW_OUT_OF_ORDER_RESULTS_BIT_EXT = 0x00000002,
|
|
|
|
|
} VkPastPresentationTimingFlagBitsEXT;
|
|
|
|
|
|
2025-09-04 16:48:10 +00:00
|
|
|
typedef enum VkPresentTimingInfoFlagBitsEXT
|
|
|
|
|
{
|
|
|
|
|
VK_PRESENT_TIMING_INFO_PRESENT_AT_RELATIVE_TIME_BIT_EXT = 0x00000001,
|
|
|
|
|
VK_PRESENT_TIMING_INFO_PRESENT_AT_NEAREST_REFRESH_CYCLE_BIT_EXT = 0x00000002,
|
|
|
|
|
} VkPresentTimingInfoFlagBitsEXT;
|
|
|
|
|
|
2024-08-02 16:56:30 +01:00
|
|
|
typedef struct VkPastPresentationTimingInfoEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
const void *pNext;
|
2025-07-02 16:08:46 +01:00
|
|
|
VkPastPresentationTimingFlagsEXT flags;
|
2024-08-02 16:56:30 +01:00
|
|
|
VkSwapchainKHR swapchain;
|
2024-08-21 12:59:49 +01:00
|
|
|
} VkPastPresentationTimingInfoEXT;
|
2024-08-02 16:56:30 +01:00
|
|
|
|
|
|
|
|
typedef struct VkPresentTimingInfoEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
const void *pNext;
|
2025-09-04 16:48:10 +00:00
|
|
|
VkPresentTimingInfoFlagsEXT flags;
|
|
|
|
|
uint64_t targetTime;
|
2024-08-02 16:56:30 +01:00
|
|
|
uint64_t timeDomainId;
|
|
|
|
|
VkPresentStageFlagsEXT presentStageQueries;
|
|
|
|
|
} VkPresentTimingInfoEXT;
|
|
|
|
|
|
|
|
|
|
typedef struct VkPresentTimingsInfoEXT
|
|
|
|
|
{
|
|
|
|
|
VkStructureType sType;
|
|
|
|
|
const void *pNext;
|
|
|
|
|
uint32_t swapchainCount;
|
|
|
|
|
const VkPresentTimingInfoEXT *pTimingInfos;
|
|
|
|
|
} VkPresentTimingsInfoEXT;
|
|
|
|
|
|
2024-11-15 12:49:31 +00:00
|
|
|
typedef VkResult(VKAPI_PTR *PFN_vkGetSwapchainTimeDomainPropertiesEXT)(
|
2025-09-04 16:48:10 +00:00
|
|
|
VkDevice device, VkSwapchainKHR swapchain, VkSwapchainTimeDomainPropertiesEXT *pSwapchainTimeDomainProperties,
|
|
|
|
|
uint64_t *pTimeDomainsCounter);
|
2024-11-15 12:49:31 +00:00
|
|
|
|
2024-11-29 17:22:59 +00:00
|
|
|
typedef VkResult(VKAPI_PTR *PFN_vkGetSwapchainTimingPropertiesEXT)(
|
2025-09-04 16:48:10 +00:00
|
|
|
VkDevice device, VkSwapchainKHR swapchain, VkSwapchainTimingPropertiesEXT *pSwapchainTimingProperties,
|
|
|
|
|
uint64_t *pSwapchainTimingPropertiesCounter);
|
2024-11-29 17:22:59 +00:00
|
|
|
|
|
|
|
|
typedef VkResult(VKAPI_PTR *PFN_vkSetSwapchainPresentTimingQueueSizeEXT)(VkDevice device, VkSwapchainKHR swapchain,
|
|
|
|
|
uint32_t size);
|
|
|
|
|
|
2025-05-28 15:59:16 +00:00
|
|
|
typedef VkResult(VKAPI_PTR *PFN_vkGetPastPresentationTimingEXT)(
|
|
|
|
|
VkDevice device, const VkPastPresentationTimingInfoEXT *pPastPresentationTimingInfo,
|
|
|
|
|
VkPastPresentationTimingPropertiesEXT *pPastPresentationTimingProperties);
|
|
|
|
|
|
2024-08-02 16:56:30 +01:00
|
|
|
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,
|
2025-09-04 16:48:10 +00:00
|
|
|
VkSwapchainTimingPropertiesEXT *pSwapchainTimingProperties,
|
|
|
|
|
uint64_t *pSwapchainTimingPropertiesCounter) VWL_API_POST;
|
2024-08-02 16:56:30 +01:00
|
|
|
VWL_VKAPI_CALL(VkResult)
|
2025-09-04 16:48:10 +00:00
|
|
|
wsi_layer_vkGetSwapchainTimeDomainPropertiesEXT(VkDevice device, VkSwapchainKHR swapchain,
|
|
|
|
|
VkSwapchainTimeDomainPropertiesEXT *pSwapchainTimeDomainProperties,
|
|
|
|
|
uint64_t *pTimeDomainsCounter) VWL_API_POST;
|
2024-08-02 16:56:30 +01:00
|
|
|
|
|
|
|
|
VWL_VKAPI_CALL(VkResult)
|
|
|
|
|
wsi_layer_vkGetPastPresentationTimingEXT(
|
|
|
|
|
VkDevice device, const VkPastPresentationTimingInfoEXT *pPastPresentationTimingInfo,
|
|
|
|
|
VkPastPresentationTimingPropertiesEXT *pPastPresentationTimingProperties) VWL_API_POST;
|
2024-11-28 06:36:17 +00:00
|
|
|
|
|
|
|
|
#endif
|