diff --git a/renderdoc/driver/vulkan/extension_support.md b/renderdoc/driver/vulkan/extension_support.md index 70af52e1b..f2c7e4ab8 100644 --- a/renderdoc/driver/vulkan/extension_support.md +++ b/renderdoc/driver/vulkan/extension_support.md @@ -24,6 +24,7 @@ Maintainers can update this file by updating vk.xml in this folder and running ` * `VK_AMD_texture_gather_bias_lod` * `VK_ANDROID_external_memory_android_hardware_buffer` * `VK_EXT_4444_formats` +* `VK_EXT_acquire_drm_display` * `VK_EXT_acquire_xlib_display` * `VK_EXT_astc_decode_mode` * `VK_EXT_attachment_feedback_loop_layout` @@ -238,7 +239,6 @@ Ray tracing extensions are now standard and will likely be supported at some poi ## EXT Extensions -* `VK_EXT_acquire_drm_display` * `VK_EXT_blend_operation_advanced` * `VK_EXT_border_color_swizzle` * `VK_EXT_depth_clamp_zero_one` diff --git a/renderdoc/driver/vulkan/vk_core.cpp b/renderdoc/driver/vulkan/vk_core.cpp index b431d434e..306e98c87 100644 --- a/renderdoc/driver/vulkan/vk_core.cpp +++ b/renderdoc/driver/vulkan/vk_core.cpp @@ -888,6 +888,9 @@ static const VkExtensionProperties supportedExtensions[] = { { VK_EXT_4444_FORMATS_EXTENSION_NAME, VK_EXT_4444_FORMATS_SPEC_VERSION, }, + { + VK_EXT_ACQUIRE_DRM_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_DRM_DISPLAY_SPEC_VERSION, + }, #ifdef VK_EXT_acquire_xlib_display { VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME, VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION, diff --git a/renderdoc/driver/vulkan/vk_core.h b/renderdoc/driver/vulkan/vk_core.h index c1c71e4ed..f7c4037a5 100644 --- a/renderdoc/driver/vulkan/vk_core.h +++ b/renderdoc/driver/vulkan/vk_core.h @@ -2601,4 +2601,11 @@ public: IMPLEMENT_FUNCTION_SERIALISED(void, vkSetDeviceMemoryPriorityEXT, VkDevice device, VkDeviceMemory memory, float priority); + + // VK_EXT_acquire_drm_display + VkResult vkAcquireDrmDisplayEXT(VkPhysicalDevice physicalDevice, int32_t drmFd, + VkDisplayKHR display); + + VkResult vkGetDrmDisplayEXT(VkPhysicalDevice physicalDevice, int32_t drmFd, uint32_t connectorId, + VkDisplayKHR *display); }; diff --git a/renderdoc/driver/vulkan/vk_hookset_defs.h b/renderdoc/driver/vulkan/vk_hookset_defs.h index 794e3d1f9..9bfb24ccf 100644 --- a/renderdoc/driver/vulkan/vk_hookset_defs.h +++ b/renderdoc/driver/vulkan/vk_hookset_defs.h @@ -464,6 +464,7 @@ DeclExt(EXT_headless_surface); \ DeclExt(EXT_metal_surface); \ DeclExt(KHR_wayland_surface); \ + DeclExt(EXT_acquire_drm_display); \ /* device extensions */ \ DeclExt(EXT_debug_marker); \ DeclExt(GGP_frame_token); \ @@ -578,7 +579,8 @@ CheckExt(EXT_metal_surface, VKXX); \ CheckExt(KHR_wayland_surface, VKXX); \ CheckExt(KHR_performance_query, VKXX); \ - CheckExt(KHR_fragment_shading_rate, VKXX); + CheckExt(KHR_fragment_shading_rate, VKXX); \ + CheckExt(EXT_acquire_drm_display, VKXX); #define CheckDeviceExts() \ CheckExt(EXT_debug_marker, VKXX); \ @@ -706,6 +708,8 @@ HookInitExtension(KHR_performance_query, GetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR); \ HookInitPromotedExtension(EXT_tooling_info, GetPhysicalDeviceToolProperties, EXT); \ HookInitExtension(KHR_fragment_shading_rate, GetPhysicalDeviceFragmentShadingRatesKHR); \ + HookInitExtension(EXT_acquire_drm_display, AcquireDrmDisplayEXT); \ + HookInitExtension(EXT_acquire_drm_display, GetDrmDisplayEXT); \ HookInitExtension_PhysDev_Win32(); \ HookInitExtension_PhysDev_Linux(); \ HookInitExtension_PhysDev_GGP(); \ @@ -1638,6 +1642,10 @@ VkPhysicalDeviceFragmentShadingRateKHR *, pFragmentShadingRates); \ HookDefine3(void, vkSetDeviceMemoryPriorityEXT, VkDevice, device, VkDeviceMemory, memory, float, \ priority); \ + HookDefine3(VkResult, vkAcquireDrmDisplayEXT, VkPhysicalDevice, physicalDevice, int32_t, drmFd, \ + VkDisplayKHR, display); \ + HookDefine4(VkResult, vkGetDrmDisplayEXT, VkPhysicalDevice, physicalDevice, int32_t, drmFd, \ + uint32_t, connectorId, VkDisplayKHR *, display); \ HookDefine_Win32(); \ HookDefine_Linux(); \ HookDefine_GGP(); \ diff --git a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp index 84a9ac897..f4f837d73 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_device_funcs.cpp @@ -162,7 +162,8 @@ static void StripUnwantedExtensions(rdcarray &Extensions) // remove direct display extensions if(ext == "VK_KHR_display" || ext == "VK_EXT_direct_mode_display" || - ext == "VK_EXT_acquire_xlib_display" || ext == "VK_EXT_display_surface_counter") + ext == "VK_EXT_acquire_xlib_display" || ext == "VK_EXT_display_surface_counter" || + ext == "VK_EXT_acquire_drm_display") { return true; } diff --git a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp index fe7a9e639..f7b32704e 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_wsi_funcs.cpp @@ -1286,6 +1286,19 @@ VkResult WrappedVulkan::vkReleaseDisplayEXT(VkPhysicalDevice physicalDevice, VkD return ObjDisp(physicalDevice)->ReleaseDisplayEXT(Unwrap(physicalDevice), display); } +VkResult WrappedVulkan::vkAcquireDrmDisplayEXT(VkPhysicalDevice physicalDevice, int32_t drmFd, + VkDisplayKHR display) +{ + return ObjDisp(physicalDevice)->AcquireDrmDisplayEXT(Unwrap(physicalDevice), drmFd, display); +} + +VkResult WrappedVulkan::vkGetDrmDisplayEXT(VkPhysicalDevice physicalDevice, int32_t drmFd, + uint32_t connectorId, VkDisplayKHR *display) +{ + // displays are not wrapped + return ObjDisp(physicalDevice)->GetDrmDisplayEXT(Unwrap(physicalDevice), drmFd, connectorId, display); +} + VkResult WrappedVulkan::vkGetDeviceGroupPresentCapabilitiesKHR( VkDevice device, VkDeviceGroupPresentCapabilitiesKHR *pDeviceGroupPresentCapabilities) {