diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index e5ebf562e..dee4291f9 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -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 diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 7f7e9bb6c..fc1b2a840 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -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); diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 44e51d427..b8c4df080 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -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, diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index 3e4630972..d145d49fe 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -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); }; diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 0f4e16600..16aae5323 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -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(); \ diff --git a/renderdoc/driver/vulkan/vk_next_chains.cpp b/renderdoc/driver/vulkan/vk_next_chains.cpp index 04d924b44..8f9926f84 100644 --- a/renderdoc/driver/vulkan/vk_next_chains.cpp +++ b/renderdoc/driver/vulkan/vk_next_chains.cpp @@ -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: \ diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index 3bd6ce608..3da17ec81 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -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 +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 void DoSerialise(SerialiserType &ser, VkPhysicalDevicePresentIdFeaturesKHR &el) { @@ -7523,6 +7544,37 @@ void Deserialise(const VkPhysicalDevicePresentIdFeaturesKHR &el) DeserialiseNext(el.pNext); } +template +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 +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 void DoSerialise(SerialiserType &ser, VkPhysicalDevicePresentModeFifoLatestReadyFeaturesKHR &el) { @@ -7555,6 +7607,53 @@ void Deserialise(const VkPhysicalDevicePresentWaitFeaturesKHR &el) DeserialiseNext(el.pNext); } +template +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 +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 +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 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); diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 38378830a..db3448879 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -191,7 +191,8 @@ static void StripUnwantedExtensions(rdcarray &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) diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index 83b5e8792..e318f0dfc 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -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) {