Add support for VK_KHR_present_id/wait2

This commit is contained in:
baldurk
2025-08-12 17:36:36 +01:00
parent f1672e976b
commit f0cc6a059a
9 changed files with 178 additions and 20 deletions
+2 -2
View File
@@ -192,8 +192,10 @@ Maintainers can update this file by updating vk.xml in this folder and running `
* `VK_KHR_pipeline_executable_properties`
* `VK_KHR_pipeline_library`
* `VK_KHR_present_id`
* `VK_KHR_present_id2`
* `VK_KHR_present_mode_fifo_latest_ready`
* `VK_KHR_present_wait`
* `VK_KHR_present_wait2`
* `VK_KHR_push_descriptor`
* `VK_KHR_ray_query`
* `VK_KHR_ray_tracing_maintenance1`
@@ -274,8 +276,6 @@ KHR extensions will definitely be implemented at some point, though KHR extensio
* `VK_KHR_maintenance8`
* `VK_KHR_maintenance9`
* `VK_KHR_pipeline_binary`
* `VK_KHR_present_id2`
* `VK_KHR_present_wait2`
## KHR Portability
+12
View File
@@ -1734,8 +1734,10 @@ DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePerformanceQueryPropertiesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineCreationCacheControlFeatures);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePointClippingProperties);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentId2FeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentIdFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentWait2FeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePresentWaitFeaturesKHR);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT);
DECLARE_REFLECTION_STRUCT(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT);
@@ -1851,11 +1853,13 @@ DECLARE_REFLECTION_STRUCT(VkPipelineVertexInputDivisorStateCreateInfo);
DECLARE_REFLECTION_STRUCT(VkPipelineVertexInputStateCreateInfo);
DECLARE_REFLECTION_STRUCT(VkPipelineViewportDepthClipControlCreateInfoEXT);
DECLARE_REFLECTION_STRUCT(VkPipelineViewportStateCreateInfo);
DECLARE_REFLECTION_STRUCT(VkPresentId2KHR);
DECLARE_REFLECTION_STRUCT(VkPresentIdKHR);
DECLARE_REFLECTION_STRUCT(VkPresentInfoKHR);
DECLARE_REFLECTION_STRUCT(VkPresentRegionsKHR);
DECLARE_REFLECTION_STRUCT(VkPresentTimeGOOGLE);
DECLARE_REFLECTION_STRUCT(VkPresentTimesInfoGOOGLE);
DECLARE_REFLECTION_STRUCT(VkPresentWait2InfoKHR);
DECLARE_REFLECTION_STRUCT(VkPrivateDataSlotCreateInfo);
DECLARE_REFLECTION_STRUCT(VkProtectedSubmitInfo);
DECLARE_REFLECTION_STRUCT(VkQueryPoolCreateInfo);
@@ -1918,6 +1922,8 @@ DECLARE_REFLECTION_STRUCT(VkSubresourceHostMemcpySize);
DECLARE_REFLECTION_STRUCT(VkSubresourceLayout2);
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2EXT);
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2KHR);
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilitiesPresentId2KHR);
DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilitiesPresentWait2KHR);
DECLARE_REFLECTION_STRUCT(VkSurfaceFormat2KHR);
DECLARE_REFLECTION_STRUCT(VkSurfacePresentModeCompatibilityKHR);
DECLARE_REFLECTION_STRUCT(VkSurfacePresentModeKHR);
@@ -2227,8 +2233,10 @@ DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeatures);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePointClippingProperties);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentId2FeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentIdFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentWait2FeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePresentWaitFeaturesKHR);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePrimitivesGeneratedQueryFeaturesEXT);
DECLARE_DESERIALISE_TYPE(VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT);
@@ -2344,10 +2352,12 @@ DECLARE_DESERIALISE_TYPE(VkPipelineVertexInputDivisorStateCreateInfo);
DECLARE_DESERIALISE_TYPE(VkPipelineVertexInputStateCreateInfo);
DECLARE_DESERIALISE_TYPE(VkPipelineViewportDepthClipControlCreateInfoEXT);
DECLARE_DESERIALISE_TYPE(VkPipelineViewportStateCreateInfo);
DECLARE_DESERIALISE_TYPE(VkPresentId2KHR);
DECLARE_DESERIALISE_TYPE(VkPresentIdKHR);
DECLARE_DESERIALISE_TYPE(VkPresentInfoKHR);
DECLARE_DESERIALISE_TYPE(VkPresentRegionsKHR);
DECLARE_DESERIALISE_TYPE(VkPresentTimesInfoGOOGLE);
DECLARE_DESERIALISE_TYPE(VkPresentWait2InfoKHR);
DECLARE_DESERIALISE_TYPE(VkPrivateDataSlotCreateInfo);
DECLARE_DESERIALISE_TYPE(VkProtectedSubmitInfo);
DECLARE_DESERIALISE_TYPE(VkQueryPoolCreateInfo);
@@ -2408,6 +2418,8 @@ DECLARE_DESERIALISE_TYPE(VkSubresourceHostMemcpySize);
DECLARE_DESERIALISE_TYPE(VkSubresourceLayout2);
DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2EXT);
DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2KHR);
DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilitiesPresentId2KHR);
DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilitiesPresentWait2KHR);
DECLARE_DESERIALISE_TYPE(VkSurfaceFormat2KHR);
DECLARE_DESERIALISE_TYPE(VkSurfacePresentModeCompatibilityKHR);
DECLARE_DESERIALISE_TYPE(VkSurfacePresentModeKHR);
+8
View File
@@ -1710,6 +1710,10 @@ static const VkExtensionProperties supportedExtensions[] = {
VK_KHR_PRESENT_ID_EXTENSION_NAME,
VK_KHR_PRESENT_ID_SPEC_VERSION,
},
{
VK_KHR_PRESENT_ID_2_EXTENSION_NAME,
VK_KHR_PRESENT_ID_2_SPEC_VERSION,
},
{
VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_EXTENSION_NAME,
VK_KHR_PRESENT_MODE_FIFO_LATEST_READY_SPEC_VERSION,
@@ -1718,6 +1722,10 @@ static const VkExtensionProperties supportedExtensions[] = {
VK_KHR_PRESENT_WAIT_EXTENSION_NAME,
VK_KHR_PRESENT_WAIT_SPEC_VERSION,
},
{
VK_KHR_PRESENT_WAIT_2_EXTENSION_NAME,
VK_KHR_PRESENT_WAIT_2_SPEC_VERSION,
},
{
VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME,
VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION,
+6
View File
@@ -3267,4 +3267,10 @@ public:
const VkMemoryMapInfo *pMemoryMapInfo, void **ppData);
IMPLEMENT_FUNCTION_SERIALISED(void, vkUnmapMemory2KHR, VkDevice device,
const VkMemoryUnmapInfo *pMemoryUnmapInfo);
// VK_KHR_present_wait2
IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkWaitForPresent2KHR, VkDevice device,
VkSwapchainKHR swapchain,
const VkPresentWait2InfoKHR *pPresentWait2Info);
};
+7 -2
View File
@@ -552,7 +552,8 @@
DeclExt(EXT_image_compression_control); \
DeclExt(EXT_image_compression_control_swapchain); \
DeclExt(EXT_descriptor_buffer); \
DeclExt(KHR_map_memory2);
DeclExt(KHR_map_memory2); \
DeclExt(KHR_present_wait2);
// for simplicity and since the check itself is platform agnostic,
// these aren't protected in platform defines
@@ -694,7 +695,8 @@
CheckExt(EXT_image_compression_control, VKXX); \
CheckExt(EXT_image_compression_control_swapchain, VKXX); \
CheckExt(EXT_descriptor_buffer, VKXX); \
CheckExt(KHR_map_memory2, VKXX);
CheckExt(KHR_map_memory2, VKXX); \
CheckExt(KHR_present_wait2, VKXX);
#define HookInitVulkanInstanceExts_PhysDev() \
HookInitExtension(KHR_surface, GetPhysicalDeviceSurfaceSupportKHR); \
@@ -1086,6 +1088,7 @@
HookInitExtension(EXT_descriptor_buffer, GetAccelerationStructureOpaqueCaptureDescriptorDataEXT); \
HookInitExtension(KHR_map_memory2, MapMemory2KHR); \
HookInitExtension(KHR_map_memory2, UnmapMemory2KHR); \
HookInitExtension(KHR_present_wait, WaitForPresent2KHR); \
HookInitExtension_Device_Win32(); \
HookInitExtension_Device_Linux(); \
HookInitExtension_Device_Android(); \
@@ -2040,6 +2043,8 @@
pMemoryMapInfo, void **, ppData); \
HookDefine2(void, vkUnmapMemory2KHR, VkDevice, device, const VkMemoryUnmapInfo *, \
pMemoryUnmapInfo); \
HookDefine3(VkResult, vkWaitForPresent2KHR, VkDevice, device, VkSwapchainKHR, swapchain, \
const VkPresentWait2InfoKHR *, pPresentWait2Info); \
HookDefine_Win32(); \
HookDefine_Linux(); \
HookDefine_Android(); \
+9 -5
View File
@@ -424,10 +424,14 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
VkPhysicalDevicePointClippingProperties); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, \
VkPhysicalDevicePresentIdFeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR, \
VkPhysicalDevicePresentId2FeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR, \
VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, \
VkPhysicalDevicePresentWaitFeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR, \
VkPhysicalDevicePresentWait2FeaturesKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT, \
VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT) \
COPY_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVES_GENERATED_QUERY_FEATURES_EXT, \
@@ -640,6 +644,7 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
COPY_STRUCT(VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, \
VkPipelineViewportStateCreateInfo); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_ID_KHR, VkPresentIdKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR, VkPresentId2KHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR, VkPresentRegionsKHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE, VkPresentTimesInfoGOOGLE) \
COPY_STRUCT(VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO, VkPrivateDataSlotCreateInfo) \
@@ -695,6 +700,10 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
COPY_STRUCT(VK_STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2, VkSubresourceLayout2); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT, VkSurfaceCapabilities2EXT); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR, VkSurfaceCapabilities2KHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR, \
VkSurfaceCapabilitiesPresentId2KHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR, \
VkSurfaceCapabilitiesPresentWait2KHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR, VkSurfaceFormat2KHR); \
COPY_STRUCT(VK_STRUCTURE_TYPE_SURFACE_PRESENT_MODE_COMPATIBILITY_KHR, \
VkSurfacePresentModeCompatibilityKHR) \
@@ -1206,8 +1215,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_FEATURES: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_ROBUSTNESS_PROPERTIES: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_BARRIER_FEATURES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_QUEUE_FAMILY_DATA_GRAPH_PROCESSING_ENGINE_INFO_ARM: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAW_ACCESS_CHAINS_FEATURES_NV: \
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_INVOCATION_REORDER_FEATURES_NV: \
@@ -1288,7 +1295,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV: \
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV: \
case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP: \
case VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR: \
case VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR: \
case VK_STRUCTURE_TYPE_PUSH_CONSTANTS_INFO: \
case VK_STRUCTURE_TYPE_PUSH_DESCRIPTOR_SET_INFO: \
@@ -1329,8 +1335,6 @@ static void AppendModifiedChainedStruct(byte *&tempMem, VkStruct *outputStruct,
case VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP: \
case VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI: \
case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_BARRIER_NV: \
case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR: \
case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR: \
case VK_STRUCTURE_TYPE_SWAPCHAIN_LATENCY_CREATE_INFO_NV: \
case VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_BARRIER_CREATE_INFO_NV: \
case VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA: \
+114 -10
View File
@@ -1335,6 +1335,13 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR, \
VkPhysicalDevicePresentIdFeaturesKHR) \
\
/* VK_KHR_present_id2 */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR, \
VkSurfaceCapabilitiesPresentId2KHR) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR, VkPresentId2KHR) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR, \
VkPhysicalDevicePresentId2FeaturesKHR) \
\
/* VK_KHR_present_mode_fifo_latest_ready */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR, \
VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR) \
@@ -1343,6 +1350,13 @@ SERIALISE_VK_HANDLES();
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR, \
VkPhysicalDevicePresentWaitFeaturesKHR) \
\
/* VK_KHR_present_wait2 */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR, \
VkPhysicalDevicePresentWait2FeaturesKHR) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR, \
VkSurfaceCapabilitiesPresentWait2KHR) \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR, VkPresentWait2InfoKHR) \
\
/* VK_KHR_push_descriptor */ \
PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES, \
VkPhysicalDevicePushDescriptorProperties) \
@@ -1910,16 +1924,6 @@ SERIALISE_VK_HANDLES();
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_KHR) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_KHR) \
\
/* VK_KHR_present_id2 */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR) \
\
/* VK_KHR_present_wait2 */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR) \
\
/* VK_KHR_maintenance6 */ \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_FEATURES) \
PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_6_PROPERTIES) \
@@ -7508,6 +7512,23 @@ void Deserialise(const VkPresentIdKHR &el)
delete[] el.pPresentIds;
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPresentId2KHR &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(swapchainCount);
SERIALISE_MEMBER_ARRAY(pPresentIds, swapchainCount);
}
template <>
void Deserialise(const VkPresentId2KHR &el)
{
DeserialiseNext(el.pNext);
delete[] el.pPresentIds;
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDevicePresentIdFeaturesKHR &el)
{
@@ -7523,6 +7544,37 @@ void Deserialise(const VkPhysicalDevicePresentIdFeaturesKHR &el)
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSurfaceCapabilitiesPresentId2KHR &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_ID_2_KHR);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(presentId2Supported);
}
template <>
void Deserialise(const VkSurfaceCapabilitiesPresentId2KHR &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDevicePresentId2FeaturesKHR &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(presentId2);
}
template <>
void Deserialise(const VkPhysicalDevicePresentId2FeaturesKHR &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR &el)
{
@@ -7555,6 +7607,53 @@ void Deserialise(const VkPhysicalDevicePresentWaitFeaturesKHR &el)
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDevicePresentWait2FeaturesKHR &el)
{
RDCASSERT(ser.IsReading() ||
el.sType == VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(presentWait2);
}
template <>
void Deserialise(const VkPhysicalDevicePresentWait2FeaturesKHR &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkSurfaceCapabilitiesPresentWait2KHR &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_PRESENT_WAIT_2_KHR);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(presentWait2Supported);
}
template <>
void Deserialise(const VkSurfaceCapabilitiesPresentWait2KHR &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPresentWait2InfoKHR &el)
{
RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_PRESENT_WAIT_2_INFO_KHR);
SerialiseNext(ser, el.sType, el.pNext);
SERIALISE_MEMBER(presentId);
SERIALISE_MEMBER(timeout);
}
template <>
void Deserialise(const VkPresentWait2InfoKHR &el)
{
DeserialiseNext(el.pNext);
}
template <typename SerialiserType>
void DoSerialise(SerialiserType &ser, VkPhysicalDevicePushDescriptorProperties &el)
{
@@ -14156,6 +14255,7 @@ INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePerformanceQueryPropertiesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineCreationCacheControlFeatures);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePointClippingProperties);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePresentId2FeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePresentIdFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR);
INSTANTIATE_SERIALISE_TYPE(VkPhysicalDevicePresentWaitFeaturesKHR);
@@ -14273,11 +14373,13 @@ INSTANTIATE_SERIALISE_TYPE(VkPipelineVertexInputDivisorStateCreateInfo);
INSTANTIATE_SERIALISE_TYPE(VkPipelineVertexInputStateCreateInfo);
INSTANTIATE_SERIALISE_TYPE(VkPipelineViewportDepthClipControlCreateInfoEXT);
INSTANTIATE_SERIALISE_TYPE(VkPipelineViewportStateCreateInfo);
INSTANTIATE_SERIALISE_TYPE(VkPresentId2KHR);
INSTANTIATE_SERIALISE_TYPE(VkPresentIdKHR);
INSTANTIATE_SERIALISE_TYPE(VkPresentInfoKHR);
INSTANTIATE_SERIALISE_TYPE(VkPresentRegionsKHR);
INSTANTIATE_SERIALISE_TYPE(VkPresentTimeGOOGLE);
INSTANTIATE_SERIALISE_TYPE(VkPresentTimesInfoGOOGLE);
INSTANTIATE_SERIALISE_TYPE(VkPresentWait2InfoKHR);
INSTANTIATE_SERIALISE_TYPE(VkPrivateDataSlotCreateInfo);
INSTANTIATE_SERIALISE_TYPE(VkProtectedSubmitInfo);
INSTANTIATE_SERIALISE_TYPE(VkQueryPoolCreateInfo);
@@ -14340,6 +14442,8 @@ INSTANTIATE_SERIALISE_TYPE(VkSubresourceHostMemcpySize);
INSTANTIATE_SERIALISE_TYPE(VkSubresourceLayout2);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilities2EXT);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilities2KHR);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilitiesPresentId2KHR);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilitiesPresentWait2KHR);
INSTANTIATE_SERIALISE_TYPE(VkSurfaceFormat2KHR);
INSTANTIATE_SERIALISE_TYPE(VkSurfacePresentModeCompatibilityKHR);
INSTANTIATE_SERIALISE_TYPE(VkSurfacePresentModeKHR);
@@ -191,7 +191,8 @@ static void StripUnwantedExtensions(rdcarray<rdcstr> &Extensions)
// remove WSI-only extensions
if(ext == "VK_GOOGLE_display_timing" || ext == "VK_KHR_display_swapchain" ||
ext == "VK_EXT_display_control" || ext == "VK_KHR_present_id" ||
ext == "VK_KHR_present_wait" || ext == "VK_KHR_present_mode_fifo_latest_ready" ||
ext == "VK_KHR_present_id2" || ext == "VK_KHR_present_wait" ||
ext == "VK_KHR_present_wait2" || ext == "VK_KHR_present_mode_fifo_latest_ready" ||
ext == "VK_EXT_present_mode_fifo_latest_ready" || ext == "VK_EXT_surface_maintenance1" ||
ext == "VK_EXT_swapchain_maintenance1" || ext == "VK_EXT_hdr_metadata" ||
ext == "VK_KHR_get_display_properties2")
@@ -2248,6 +2249,10 @@ bool WrappedVulkan::Serialise_vkCreateDevice(SerialiserType &ser, VkPhysicalDevi
RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR);
present_exts |=
RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR);
present_exts |=
RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_2_FEATURES_KHR);
present_exts |=
RemoveNextStruct(&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_2_FEATURES_KHR);
present_exts |= RemoveNextStruct(
&createInfo, VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_MODE_FIFO_LATEST_READY_FEATURES_KHR);
if(present_exts)
@@ -1015,6 +1015,7 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
next->sType != VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR &&
next->sType != VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE &&
next->sType != VK_STRUCTURE_TYPE_PRESENT_ID_KHR &&
next->sType != VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR &&
next->sType != VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR &&
next->sType != VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_MODE_INFO_KHR)
{
@@ -1069,6 +1070,11 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
if(ids)
ids->swapchainCount = 1;
VkPresentId2KHR *ids2 =
(VkPresentId2KHR *)FindNextStruct(&mutableInfo, VK_STRUCTURE_TYPE_PRESENT_ID_2_KHR);
if(ids2)
ids2->swapchainCount = 1;
VkSwapchainPresentFenceInfoKHR *fences = (VkSwapchainPresentFenceInfoKHR *)FindNextStruct(
&mutableInfo, VK_STRUCTURE_TYPE_SWAPCHAIN_PRESENT_FENCE_INFO_KHR);
if(fences)
@@ -1092,6 +1098,8 @@ VkResult WrappedVulkan::vkQueuePresentKHR(VkQueue queue, const VkPresentInfoKHR
regions->pRegions++;
if(ids)
ids->pPresentIds++;
if(ids2)
ids2->pPresentIds++;
if(times)
times->pTimes++;
if(fences)
@@ -1793,6 +1801,12 @@ VkResult WrappedVulkan::vkWaitForPresentKHR(VkDevice device, VkSwapchainKHR swap
return ObjDisp(device)->WaitForPresentKHR(Unwrap(device), Unwrap(swapchain), presentId, timeout);
}
VkResult WrappedVulkan::vkWaitForPresent2KHR(VkDevice device, VkSwapchainKHR swapchain,
const VkPresentWait2InfoKHR *pPresentWait2Info)
{
return ObjDisp(device)->WaitForPresent2KHR(Unwrap(device), Unwrap(swapchain), pPresentWait2Info);
}
VkResult WrappedVulkan::vkReleaseSwapchainImagesKHR(VkDevice device,
const VkReleaseSwapchainImagesInfoKHR *pReleaseInfo)
{