Add support for VK_EXT_acquire_drm_display. Closes #2664

This commit is contained in:
baldurk
2023-01-16 16:20:21 +00:00
parent fe4a79054f
commit a9d445d779
6 changed files with 35 additions and 3 deletions
+1 -1
View File
@@ -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`
+3
View File
@@ -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,
+7
View File
@@ -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);
};
+9 -1
View File
@@ -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(); \
@@ -162,7 +162,8 @@ static void StripUnwantedExtensions(rdcarray<rdcstr> &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;
}
@@ -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)
{