From 4f06af0eb3f91e282a790c739ecd00a161e0019b Mon Sep 17 00:00:00 2001 From: amhagan Date: Fri, 10 May 2019 10:06:19 -0400 Subject: [PATCH] Add HDR Extensions Add support for VK_AMD_display_native, VK_EXT_full_screen_exclusive, and VK_EXT_hdr_metadata. --- renderdoc/driver/vulkan/vk_common.h | 19 +- renderdoc/driver/vulkan/vk_core.cpp | 11 + renderdoc/driver/vulkan/vk_core.h | 27 +++ renderdoc/driver/vulkan/vk_hookset_defs.h | 37 ++- renderdoc/driver/vulkan/vk_serialise.cpp | 211 ++++++++++++++---- renderdoc/driver/vulkan/vk_stringise.cpp | 14 ++ .../driver/vulkan/wrappers/vk_misc_funcs.cpp | 14 ++ .../driver/vulkan/wrappers/vk_wsi_funcs.cpp | 32 +++ 8 files changed, 317 insertions(+), 48 deletions(-) diff --git a/renderdoc/driver/vulkan/vk_common.h b/renderdoc/driver/vulkan/vk_common.h index 0786e01cd..ac41e98b7 100644 --- a/renderdoc/driver/vulkan/vk_common.h +++ b/renderdoc/driver/vulkan/vk_common.h @@ -639,6 +639,7 @@ DECLARE_REFLECTION_STRUCT(VkDeviceQueueGlobalPriorityCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkDeviceQueueInfo2); DECLARE_REFLECTION_STRUCT(VkDisplayEventInfoEXT); DECLARE_REFLECTION_STRUCT(VkDisplayModeProperties2KHR); +DECLARE_REFLECTION_STRUCT(VkDisplayNativeHdrSurfaceCapabilitiesAMD); DECLARE_REFLECTION_STRUCT(VkDisplayPlaneCapabilities2KHR); DECLARE_REFLECTION_STRUCT(VkDisplayPlaneInfo2KHR); DECLARE_REFLECTION_STRUCT(VkDisplayPlaneProperties2KHR); @@ -662,6 +663,7 @@ DECLARE_REFLECTION_STRUCT(VkFenceGetFdInfoKHR); DECLARE_REFLECTION_STRUCT(VkFormatProperties2); DECLARE_REFLECTION_STRUCT(VkFramebufferCreateInfo); DECLARE_REFLECTION_STRUCT(VkGraphicsPipelineCreateInfo); +DECLARE_REFLECTION_STRUCT(VkHdrMetadataEXT); DECLARE_REFLECTION_STRUCT(VkImageCreateInfo); DECLARE_REFLECTION_STRUCT(VkImageFormatListCreateInfoKHR); DECLARE_REFLECTION_STRUCT(VkImageFormatProperties2); @@ -803,11 +805,13 @@ DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilities2KHR); DECLARE_REFLECTION_STRUCT(VkSurfaceFormat2KHR); DECLARE_REFLECTION_STRUCT(VkSwapchainCounterCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkSwapchainCreateInfoKHR); +DECLARE_REFLECTION_STRUCT(VkSwapchainDisplayNativeHdrCreateInfoAMD); DECLARE_REFLECTION_STRUCT(VkTextureLODGatherFormatPropertiesAMD); DECLARE_REFLECTION_STRUCT(VkValidationCacheCreateInfoEXT); DECLARE_REFLECTION_STRUCT(VkValidationFeaturesEXT); DECLARE_REFLECTION_STRUCT(VkValidationFlagsEXT); DECLARE_REFLECTION_STRUCT(VkWriteDescriptorSet); +DECLARE_REFLECTION_STRUCT(VkXYColorEXT); DECLARE_DESERIALISE_TYPE(VkAcquireNextImageInfoKHR); DECLARE_DESERIALISE_TYPE(VkApplicationInfo); @@ -869,6 +873,7 @@ DECLARE_DESERIALISE_TYPE(VkDeviceQueueGlobalPriorityCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkDeviceQueueInfo2); DECLARE_DESERIALISE_TYPE(VkDisplayEventInfoEXT); DECLARE_DESERIALISE_TYPE(VkDisplayModeProperties2KHR); +DECLARE_DESERIALISE_TYPE(VkDisplayNativeHdrSurfaceCapabilitiesAMD); DECLARE_DESERIALISE_TYPE(VkDisplayPlaneCapabilities2KHR); DECLARE_DESERIALISE_TYPE(VkDisplayPlaneInfo2KHR); DECLARE_DESERIALISE_TYPE(VkDisplayPlaneProperties2KHR); @@ -1031,6 +1036,7 @@ DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilities2KHR); DECLARE_DESERIALISE_TYPE(VkSurfaceFormat2KHR); DECLARE_DESERIALISE_TYPE(VkSwapchainCounterCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkSwapchainCreateInfoKHR); +DECLARE_DESERIALISE_TYPE(VkSwapchainDisplayNativeHdrCreateInfoAMD); DECLARE_DESERIALISE_TYPE(VkTextureLODGatherFormatPropertiesAMD); DECLARE_DESERIALISE_TYPE(VkValidationCacheCreateInfoEXT); DECLARE_DESERIALISE_TYPE(VkValidationFeaturesEXT); @@ -1135,6 +1141,9 @@ DECLARE_REFLECTION_STRUCT(VkImportSemaphoreWin32HandleInfoKHR); DECLARE_REFLECTION_STRUCT(VkMemoryGetWin32HandleInfoKHR); DECLARE_REFLECTION_STRUCT(VkMemoryWin32HandlePropertiesKHR); DECLARE_REFLECTION_STRUCT(VkSemaphoreGetWin32HandleInfoKHR); +DECLARE_REFLECTION_STRUCT(VkSurfaceCapabilitiesFullScreenExclusiveEXT); +DECLARE_REFLECTION_STRUCT(VkSurfaceFullScreenExclusiveInfoEXT); +DECLARE_REFLECTION_STRUCT(VkSurfaceFullScreenExclusiveWin32InfoEXT); DECLARE_REFLECTION_STRUCT(VkWin32KeyedMutexAcquireReleaseInfoKHR); DECLARE_REFLECTION_STRUCT(VkWin32KeyedMutexAcquireReleaseInfoNV); @@ -1151,6 +1160,9 @@ DECLARE_DESERIALISE_TYPE(VkImportSemaphoreWin32HandleInfoKHR); DECLARE_DESERIALISE_TYPE(VkMemoryGetWin32HandleInfoKHR); DECLARE_DESERIALISE_TYPE(VkMemoryWin32HandlePropertiesKHR); DECLARE_DESERIALISE_TYPE(VkSemaphoreGetWin32HandleInfoKHR); +DECLARE_DESERIALISE_TYPE(VkSurfaceCapabilitiesFullScreenExclusiveEXT) +DECLARE_DESERIALISE_TYPE(VkSurfaceFullScreenExclusiveInfoEXT); +DECLARE_DESERIALISE_TYPE(VkSurfaceFullScreenExclusiveWin32InfoEXT); DECLARE_DESERIALISE_TYPE(VkWin32KeyedMutexAcquireReleaseInfoKHR); DECLARE_DESERIALISE_TYPE(VkWin32KeyedMutexAcquireReleaseInfoNV); #endif @@ -1267,4 +1279,9 @@ DECLARE_REFLECTION_ENUM(VkTimeDomainEXT); DECLARE_REFLECTION_ENUM(VkValidationCheckEXT); DECLARE_REFLECTION_ENUM(VkValidationFeatureEnableEXT); DECLARE_REFLECTION_ENUM(VkValidationFeatureDisableEXT); -DECLARE_REFLECTION_ENUM(VkVertexInputRate); \ No newline at end of file +DECLARE_REFLECTION_ENUM(VkVertexInputRate); + +// win32 only enums +#if ENABLED(RDOC_WIN32) +DECLARE_REFLECTION_ENUM(VkFullScreenExclusiveEXT); +#endif \ No newline at end of file diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index 3245af2c8..d9cfc3567 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -589,6 +589,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_AMD_BUFFER_MARKER_EXTENSION_NAME, VK_AMD_BUFFER_MARKER_SPEC_VERSION, }, + { + VK_AMD_DISPLAY_NATIVE_HDR_EXTENSION_NAME, VK_AMD_DISPLAY_NATIVE_HDR_SPEC_VERSION, + }, { VK_AMD_GCN_SHADER_EXTENSION_NAME, VK_AMD_GCN_SHADER_SPEC_VERSION, }, @@ -681,9 +684,17 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION, }, +#ifdef VK_EXT_full_screen_exclusive + { + VK_EXT_FULL_SCREEN_EXCLUSIVE_EXTENSION_NAME, VK_EXT_FULL_SCREEN_EXCLUSIVE_SPEC_VERSION, + }, +#endif { VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME, VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION, }, + { + VK_EXT_HDR_METADATA_EXTENSION_NAME, VK_EXT_HDR_METADATA_SPEC_VERSION, + }, { VK_EXT_HOST_QUERY_RESET_EXTENSION_NAME, VK_EXT_HOST_QUERY_RESET_SPEC_VERSION, }, diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index f9b82fbf5..68e20b47f 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -2070,4 +2070,31 @@ public: // VK_EXT_buffer_device_address VkDeviceAddress vkGetBufferDeviceAddressEXT(VkDevice device, const VkBufferDeviceAddressInfoEXT *pInfo); + + // VK_EXT_hdr_metadata + + IMPLEMENT_FUNCTION_SERIALISED(void, vkSetHdrMetadataEXT, VkDevice device, uint32_t swapchainCount, + const VkSwapchainKHR *pSwapchains, const VkHdrMetadataEXT *pMetadata); + + // VK_AMD_display_native_hdr + + IMPLEMENT_FUNCTION_SERIALISED(void, vkSetLocalDimmingAMD, VkDevice device, + VkSwapchainKHR swapChain, VkBool32 localDimmingEnable); + + // VK_EXT_full_screen_exclusive + + IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkGetDeviceGroupSurfacePresentModes2EXT, VkDevice device, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR *pModes); + + IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkGetPhysicalDeviceSurfacePresentModes2EXT, + VkPhysicalDevice physicalDevice, + const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + uint32_t *pPresentModeCount, VkPresentModeKHR *pPresentModes); + + IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkAcquireFullScreenExclusiveModeEXT, VkDevice device, + VkSwapchainKHR swapchain); + + IMPLEMENT_FUNCTION_SERIALISED(VkResult, vkReleaseFullScreenExclusiveModeEXT, VkDevice device, + VkSwapchainKHR swapchain); }; diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 96101ce74..d4e916069 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -35,9 +35,10 @@ #if defined(VK_USE_PLATFORM_WIN32_KHR) -#define HookInitInstance_PlatformSpecific() \ - HookInitExtension(VK_KHR_win32_surface, CreateWin32SurfaceKHR); \ - HookInitExtension(VK_KHR_win32_surface, GetPhysicalDeviceWin32PresentationSupportKHR); +#define HookInitInstance_PlatformSpecific() \ + HookInitExtension(VK_KHR_win32_surface, CreateWin32SurfaceKHR); \ + HookInitExtension(VK_KHR_win32_surface, GetPhysicalDeviceWin32PresentationSupportKHR); \ + HookInitExtension(VK_EXT_full_screen_exclusive, GetPhysicalDeviceSurfacePresentModes2EXT); #define HookInitDevice_PlatformSpecific() \ HookInitExtension(VK_NV_win32_keyed_mutex, GetMemoryWin32HandleNV); \ @@ -68,7 +69,17 @@ HookDefine2(VkResult, vkImportFenceWin32HandleKHR, VkDevice, device, \ const VkImportFenceWin32HandleInfoKHR *, pImportFenceWin32HandleInfo); \ HookDefine3(VkResult, vkGetFenceWin32HandleKHR, VkDevice, device, \ - const VkFenceGetWin32HandleInfoKHR *, pGetWin32HandleInfo, HANDLE *, pHandle); + const VkFenceGetWin32HandleInfoKHR *, pGetWin32HandleInfo, HANDLE *, pHandle); \ + HookDefine4(VkResult, vkGetPhysicalDeviceSurfacePresentModes2EXT, VkPhysicalDevice, \ + physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *, pSurfaceInfo, uint32_t *, \ + pPresentModeCount, VkPresentModeKHR *, pPresentModes); \ + HookDefine3(VkResult, vkGetDeviceGroupSurfacePresentModes2EXT, VkDevice, device, \ + const VkPhysicalDeviceSurfaceInfo2KHR *, pSurfaceInfo, \ + VkDeviceGroupPresentModeFlagsKHR *, pModes); \ + HookDefine2(VkResult, vkAcquireFullScreenExclusiveModeEXT, VkDevice, device, VkSwapchainKHR, \ + swapchain); \ + HookDefine2(VkResult, vkReleaseFullScreenExclusiveModeEXT, VkDevice, device, VkSwapchainKHR, \ + swapchain); #elif defined(VK_USE_PLATFORM_MACOS_MVK) @@ -372,7 +383,10 @@ DeclExt(EXT_discard_rectangles); \ DeclExt(EXT_calibrated_timestamps); \ DeclExt(EXT_host_query_reset); \ - DeclExt(EXT_buffer_device_address); + DeclExt(EXT_buffer_device_address); \ + DeclExt(EXT_full_screen_exclusive); \ + DeclExt(EXT_hdr_metadata); \ + DeclExt(AMD_display_native_hdr); // for simplicity and since the check itself is platform agnostic, // these aren't protected in platform defines @@ -400,7 +414,8 @@ CheckExt(KHR_get_surface_capabilities2, VKXX); \ CheckExt(KHR_get_display_properties2, VKXX); \ CheckExt(EXT_sample_locations, VKXX); \ - CheckExt(EXT_calibrated_timestamps, VKXX); + CheckExt(EXT_calibrated_timestamps, VKXX); \ + CheckExt(EXT_full_screen_exclusive, VKXX); #define CheckDeviceExts() \ CheckExt(EXT_debug_marker, VKXX); \ @@ -446,7 +461,9 @@ CheckExt(EXT_discard_rectangles, VKXX); \ CheckExt(EXT_calibrated_timestamps, VKXX); \ CheckExt(EXT_host_query_reset, VKXX); \ - CheckExt(EXT_buffer_device_address, VKXX); + CheckExt(EXT_buffer_device_address, VKXX); \ + CheckExt(EXT_hdr_metadata, VKXX); \ + CheckExt(AMD_display_native_hdr, VKXX); #define HookInitVulkanInstanceExts() \ HookInitExtension(KHR_surface, DestroySurfaceKHR); \ @@ -582,6 +599,8 @@ HookInitExtension(EXT_calibrated_timestamps, GetCalibratedTimestampsEXT); \ HookInitExtension(EXT_host_query_reset, ResetQueryPoolEXT); \ HookInitExtension(EXT_buffer_device_address, GetBufferDeviceAddressEXT); \ + HookInitExtension(EXT_hdr_metadata, SetHdrMetadataEXT); \ + HookInitExtension(AMD_display_native_hdr, SetLocalDimmingAMD); \ HookInitDevice_PlatformSpecific() #define DefineHooks() \ @@ -1154,6 +1173,10 @@ firstQuery, uint32_t, queryCount); \ HookDefine2(VkDeviceAddress, vkGetBufferDeviceAddressEXT, VkDevice, device, \ VkBufferDeviceAddressInfoEXT *, pInfo); \ + HookDefine4(void, vkSetHdrMetadataEXT, VkDevice, device, uint32_t, swapchainCount, \ + const VkSwapchainKHR *, pSwapchains, const VkHdrMetadataEXT *, pMetadata); \ + HookDefine3(void, vkSetLocalDimmingAMD, VkDevice, device, VkSwapchainKHR, swapChain, VkBool32, \ + localDimmingEnable); \ HookDefine_PlatformSpecific() struct VkLayerInstanceDispatchTableExtended : VkLayerInstanceDispatchTable diff --git a/renderdoc/driver/vulkan/vk_serialise.cpp b/renderdoc/driver/vulkan/vk_serialise.cpp index d65b7a865..c952748f8 100644 --- a/renderdoc/driver/vulkan/vk_serialise.cpp +++ b/renderdoc/driver/vulkan/vk_serialise.cpp @@ -294,37 +294,50 @@ SERIALISE_VK_HANDLES(); /* VK_KHR_external_fence_win32 */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR, VkExportFenceWin32HandleInfoKHR) \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR, VkImportFenceWin32HandleInfoKHR) \ - PNEXT_STRUCT(VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR, VkFenceGetWin32HandleInfoKHR) + PNEXT_STRUCT(VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR, VkFenceGetWin32HandleInfoKHR) \ + \ + /* VK_EXT_full_screen_exclusive */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT, \ + VkSurfaceFullScreenExclusiveWin32InfoEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT, \ + VkSurfaceCapabilitiesFullScreenExclusiveEXT) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT, \ + VkSurfaceFullScreenExclusiveInfoEXT) #else -#define HANDLE_PNEXT_OS() \ - /* VK_NV_external_memory_win32 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV) \ - \ - /* VK_NV_win32_keyed_mutex */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV) \ - \ - /* VK_KHR_win32_keyed_mutex */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR) \ - \ - /* VK_KHR_external_memory_win32 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR) \ - \ - /* VK_KHR_external_semaphore_win32 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR) \ - \ - /* VK_KHR_external_fence_win32 */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR) +#define HANDLE_PNEXT_OS() \ + /* VK_NV_external_memory_win32 */ \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV) \ + \ + /* VK_NV_win32_keyed_mutex */ \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV) \ + \ + /* VK_KHR_win32_keyed_mutex */ \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR) \ + \ + /* VK_KHR_external_memory_win32 */ \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR) \ + \ + /* VK_KHR_external_semaphore_win32 */ \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR) \ + \ + /* VK_KHR_external_fence_win32 */ \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR) \ + \ + /* VK_EXT_full_screen_exclusive */ \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT) \ + PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT) #endif @@ -405,6 +418,12 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES, \ VkPhysicalDeviceShaderDrawParametersFeatures) \ \ + /* VK_AMD_display_native_hdr */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD, \ + VkSwapchainDisplayNativeHdrCreateInfoAMD) \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD, \ + VkDisplayNativeHdrSurfaceCapabilitiesAMD) \ + \ /* VK_AMD_shader_core_properties */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD, \ VkPhysicalDeviceShaderCorePropertiesAMD) \ @@ -505,6 +524,9 @@ SERIALISE_VK_HANDLES(); PNEXT_STRUCT(VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT, \ VkDeviceQueueGlobalPriorityCreateInfoEXT) \ \ + /* VK_EXT_hdr_metadata */ \ + PNEXT_STRUCT(VK_STRUCTURE_TYPE_HDR_METADATA_EXT, VkHdrMetadataEXT) \ + \ /* VK_EXT_host_query_reset */ \ PNEXT_STRUCT(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT, \ VkPhysicalDeviceHostQueryResetFeaturesEXT) \ @@ -827,10 +849,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR) \ \ - /* VK_AMD_display_native_hdr */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD) \ - \ /* VK_AMD_memory_overallocation_behavior */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD) \ \ @@ -855,9 +873,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT) \ \ - /* VK_EXT_hdr_metadata */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_HDR_METADATA_EXT) \ - \ /* VK_EXT_image_drm_format_modifier */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT) \ @@ -876,11 +891,6 @@ SERIALISE_VK_HANDLES(); PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT) \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT) \ \ - /* VK_EXT_full_screen_exclusive */ \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT) \ - PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT) \ - \ /* VK_GOOGLE_display_timing */ \ PNEXT_UNSUPPORTED(VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE) \ \ @@ -3114,6 +3124,22 @@ void Deserialise(const VkSwapchainCreateInfoKHR &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkSwapchainDisplayNativeHdrCreateInfoAMD &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(localDimmingEnable); +} + +template <> +void Deserialise(const VkSwapchainDisplayNativeHdrCreateInfoAMD &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkPresentInfoKHR &el) { @@ -4109,6 +4135,22 @@ void Deserialise(const VkSurfaceFormat2KHR &el) DeserialiseNext(el.pNext); } +template +void DoSerialise(SerialiserType &ser, VkDisplayNativeHdrSurfaceCapabilitiesAMD &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(localDimmingSupport); +} + +template <> +void Deserialise(const VkDisplayNativeHdrSurfaceCapabilitiesAMD &el) +{ + DeserialiseNext(el.pNext); +} + template void DoSerialise(SerialiserType &ser, VkImageFormatListCreateInfoKHR &el) { @@ -6080,6 +6122,40 @@ void Deserialise(const VkDeviceGroupRenderPassBeginInfo &el) delete[] el.pDeviceRenderAreas; } +template +void DoSerialise(SerialiserType &ser, VkHdrMetadataEXT &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_STRUCTURE_TYPE_HDR_METADATA_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(displayPrimaryRed); + SERIALISE_MEMBER(displayPrimaryGreen); + SERIALISE_MEMBER(displayPrimaryBlue); + SERIALISE_MEMBER(whitePoint); + SERIALISE_MEMBER(maxLuminance); + SERIALISE_MEMBER(minLuminance); + SERIALISE_MEMBER(maxContentLightLevel); + SERIALISE_MEMBER(maxFrameAverageLightLevel); +} + +template <> +void Deserialise(const VkHdrMetadataEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkXYColorEXT &el) +{ + SERIALISE_MEMBER(x); + SERIALISE_MEMBER(y); +} + +template <> +void Deserialise(const VkXYColorEXT &el) +{ +} + template void DoSerialise(SerialiserType &ser, VkMemoryAllocateFlagsInfo &el) { @@ -6622,6 +6698,7 @@ INSTANTIATE_SERIALISE_TYPE(VkDeviceQueueGlobalPriorityCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkDeviceQueueInfo2); INSTANTIATE_SERIALISE_TYPE(VkDisplayEventInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkDisplayModeProperties2KHR); +INSTANTIATE_SERIALISE_TYPE(VkDisplayNativeHdrSurfaceCapabilitiesAMD); INSTANTIATE_SERIALISE_TYPE(VkDisplayPlaneCapabilities2KHR); INSTANTIATE_SERIALISE_TYPE(VkDisplayPlaneInfo2KHR); INSTANTIATE_SERIALISE_TYPE(VkDisplayPlaneProperties2KHR); @@ -6645,6 +6722,7 @@ INSTANTIATE_SERIALISE_TYPE(VkFenceGetFdInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkFormatProperties2); INSTANTIATE_SERIALISE_TYPE(VkFramebufferCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkGraphicsPipelineCreateInfo); +INSTANTIATE_SERIALISE_TYPE(VkHdrMetadataEXT); INSTANTIATE_SERIALISE_TYPE(VkImageCreateInfo); INSTANTIATE_SERIALISE_TYPE(VkImageFormatListCreateInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkImageFormatProperties2); @@ -6782,6 +6860,7 @@ INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilities2KHR); INSTANTIATE_SERIALISE_TYPE(VkSurfaceFormat2KHR); INSTANTIATE_SERIALISE_TYPE(VkSwapchainCounterCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkSwapchainCreateInfoKHR); +INSTANTIATE_SERIALISE_TYPE(VkSwapchainDisplayNativeHdrCreateInfoAMD); INSTANTIATE_SERIALISE_TYPE(VkTextureLODGatherFormatPropertiesAMD); INSTANTIATE_SERIALISE_TYPE(VkValidationCacheCreateInfoEXT); INSTANTIATE_SERIALISE_TYPE(VkValidationFlagsEXT); @@ -6861,6 +6940,7 @@ INSTANTIATE_SERIALISE_TYPE(VkVertexInputAttributeDescription); INSTANTIATE_SERIALISE_TYPE(VkVertexInputBindingDescription); INSTANTIATE_SERIALISE_TYPE(VkVertexInputBindingDivisorDescriptionEXT); INSTANTIATE_SERIALISE_TYPE(VkViewport); +INSTANTIATE_SERIALISE_TYPE(VkXYColorEXT); INSTANTIATE_SERIALISE_TYPE(DescriptorSetSlot); INSTANTIATE_SERIALISE_TYPE(ImageRegionState); @@ -7284,6 +7364,54 @@ void Deserialise(const VkWin32KeyedMutexAcquireReleaseInfoKHR &el) delete[] el.pReleaseKeys; } +template +void DoSerialise(SerialiserType &ser, VkSurfaceFullScreenExclusiveInfoEXT &el) +{ + RDCASSERT(ser.IsReading() || el.sType == VK_FULL_SCREEN_EXCLUSIVE_APPLICATION_CONTROLLED_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(fullScreenExclusive); +} + +template <> +void Deserialise(const VkSurfaceFullScreenExclusiveInfoEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkSurfaceCapabilitiesFullScreenExclusiveEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + SERIALISE_MEMBER(fullScreenExclusiveSupported); +} + +template <> +void Deserialise(const VkSurfaceCapabilitiesFullScreenExclusiveEXT &el) +{ + DeserialiseNext(el.pNext); +} + +template +void DoSerialise(SerialiserType &ser, VkSurfaceFullScreenExclusiveWin32InfoEXT &el) +{ + RDCASSERT(ser.IsReading() || + el.sType == VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT); + SerialiseNext(ser, el.sType, el.pNext); + + uint64_t hmonitor = (uint64_t)el.hmonitor; + ser.Serialise("hmonitor", hmonitor); +} + +template <> +void Deserialise(const VkSurfaceFullScreenExclusiveWin32InfoEXT &el) +{ + DeserialiseNext(el.pNext); +} + INSTANTIATE_SERIALISE_TYPE(VkImportMemoryWin32HandleInfoNV); INSTANTIATE_SERIALISE_TYPE(VkExportMemoryWin32HandleInfoNV); INSTANTIATE_SERIALISE_TYPE(VkWin32KeyedMutexAcquireReleaseInfoNV); @@ -7299,4 +7427,7 @@ INSTANTIATE_SERIALISE_TYPE(VkSemaphoreGetWin32HandleInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkExportFenceWin32HandleInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkImportFenceWin32HandleInfoKHR); INSTANTIATE_SERIALISE_TYPE(VkFenceGetWin32HandleInfoKHR); +INSTANTIATE_SERIALISE_TYPE(VkSurfaceCapabilitiesFullScreenExclusiveEXT); +INSTANTIATE_SERIALISE_TYPE(VkSurfaceFullScreenExclusiveInfoEXT); +INSTANTIATE_SERIALISE_TYPE(VkSurfaceFullScreenExclusiveWin32InfoEXT); #endif \ No newline at end of file diff --git a/renderdoc/driver/vulkan/vk_stringise.cpp b/renderdoc/driver/vulkan/vk_stringise.cpp index cd7861403..530cdc1a8 100644 --- a/renderdoc/driver/vulkan/vk_stringise.cpp +++ b/renderdoc/driver/vulkan/vk_stringise.cpp @@ -2466,3 +2466,17 @@ std::string DoStringise(const VkExtent3D &el) { return StringFormat::Fmt("VkExtent3D(%u, %u, %u)", el.width, el.height, el.depth); } + +#if ENABLED(RDOC_WIN32) +template <> +std::string DoStringise(const VkFullScreenExclusiveEXT &el) +{ + BEGIN_ENUM_STRINGISE(VkFullScreenExclusiveEXT); + { + STRINGISE_ENUM(VK_FULL_SCREEN_EXCLUSIVE_DEFAULT_EXT) + STRINGISE_ENUM(VK_FULL_SCREEN_EXCLUSIVE_ALLOWED_EXT) + STRINGISE_ENUM(VK_FULL_SCREEN_EXCLUSIVE_DISALLOWED_EXT) + } + END_ENUM_STRINGISE(); +} +#endif \ No newline at end of file diff --git a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp index fe63a86c2..88c69ec46 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_misc_funcs.cpp @@ -1583,6 +1583,20 @@ void WrappedVulkan::vkDebugReportMessageEXT(VkInstance instance, VkDebugReportFl location, messageCode, pLayerPrefix, pMessage); } +void WrappedVulkan::vkSetHdrMetadataEXT(VkDevice device, uint32_t swapchainCount, + const VkSwapchainKHR *pSwapchains, + const VkHdrMetadataEXT *pMetadata) +{ + return ObjDisp(device)->SetHdrMetadataEXT(Unwrap(device), swapchainCount, + UnwrapArray(pSwapchains, swapchainCount), pMetadata); +} + +void WrappedVulkan::vkSetLocalDimmingAMD(VkDevice device, VkSwapchainKHR swapChain, + VkBool32 localDimmingEnable) +{ + return ObjDisp(device)->SetLocalDimmingAMD(Unwrap(device), Unwrap(swapChain), localDimmingEnable); +} + // we use VkObjectType as the object type since it mostly overlaps with the debug report enum so in // most cases we can upcast it. There's an overload to translate the few that might conflict. // Likewise to re-use the switch in most cases, we return both the record and the unwrapped diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index dd34baeae..928cae868 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -67,6 +67,38 @@ VkResult WrappedVulkan::vkGetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevi pPresentModeCount, pPresentModes); } +#if defined(VK_USE_PLATFORM_WIN32_KHR) + +VkResult WrappedVulkan::vkGetDeviceGroupSurfacePresentModes2EXT( + VkDevice device, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + VkDeviceGroupPresentModeFlagsKHR *pModes) +{ + return ObjDisp(device)->GetDeviceGroupSurfacePresentModes2EXT(Unwrap(device), pSurfaceInfo, pModes); +} + +VkResult WrappedVulkan::vkAcquireFullScreenExclusiveModeEXT(VkDevice device, VkSwapchainKHR swapchain) +{ + return ObjDisp(device)->AcquireFullScreenExclusiveModeEXT(Unwrap(device), swapchain); +} + +VkResult WrappedVulkan::vkReleaseFullScreenExclusiveModeEXT(VkDevice device, VkSwapchainKHR swapchain) +{ + return ObjDisp(device)->ReleaseFullScreenExclusiveModeEXT(Unwrap(device), swapchain); +} + +VkResult WrappedVulkan::vkGetPhysicalDeviceSurfacePresentModes2EXT( + VkPhysicalDevice physicalDevice, const VkPhysicalDeviceSurfaceInfo2KHR *pSurfaceInfo, + uint32_t *pPresentModeCount, VkPresentModeKHR *pPresentModes) +{ + VkPhysicalDeviceSurfaceInfo2KHR unwrapped = *pSurfaceInfo; + unwrapped.surface = Unwrap(unwrapped.surface); + + return ObjDisp(physicalDevice) + ->GetPhysicalDeviceSurfacePresentModes2EXT(Unwrap(physicalDevice), &unwrapped, + pPresentModeCount, pPresentModes); +} +#endif + VkResult WrappedVulkan::vkGetPhysicalDeviceSurfaceCapabilities2EXT( VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, VkSurfaceCapabilities2EXT *pSurfaceCapabilities)