Make xlease automatically enabled only if xcb-randr >= 1.13, check its version if manually enabled.
Enable VK_EXT_display_control only when libdrm >= 2.4.89 Check for DRM_EVENT_CONTEXT_VERSION >= 4 to use sequence_handler. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=107170 https://bugs.freedesktop.org/show_bug.cgi?id=106972 https://bugs.freedesktop.org/show_bug.cgi?id=107176 v2: - Add 'protect="VK_USE_DISPLAY_CONTROL"' attribute to VK_EXT_display_control in vk.xml - Add support for 'protect' attribute to anv_entrypoints_gen (copied from radv_entrypoints_gen) - Turn #if into #ifdef - Remove unnecessary pkg-config call from meson build (Dylan Baker) v3: by Dylan Baker - Remove previously added changes to vk.xml and entrypoints generation because vk.xml is meant to be pulled from the external source. Signed-off-by: Danylo Piliaiev <danylo.pilia...@globallogic.com> --- configure.ac | 29 +++++++++++++------------- meson.build | 10 ++++++++- src/amd/vulkan/radv_extensions.py | 9 +++++++- src/amd/vulkan/radv_wsi_display.c | 5 ++--- src/intel/vulkan/anv_extensions.py | 2 +- src/intel/vulkan/anv_extensions_gen.py | 7 +++++++ src/intel/vulkan/anv_wsi_display.c | 4 ++-- src/vulkan/wsi/wsi_common_display.c | 8 +++++-- src/vulkan/wsi/wsi_common_display.h | 3 ++- 9 files changed, 51 insertions(+), 26 deletions(-) diff --git a/configure.ac b/configure.ac index f135d05736..0b04525014 100644 --- a/configure.ac +++ b/configure.ac @@ -82,6 +82,8 @@ LIBDRM_FREEDRENO_REQUIRED=2.4.92 LIBDRM_ETNAVIV_REQUIRED=2.4.89 LIBDRM_VC4_REQUIRED=2.4.89 +LIBDRM_CRT_SEQUENCE_REQUIRED=2.4.89 + dnl Versions for external dependencies DRI2PROTO_REQUIRED=2.8 GLPROTO_REQUIRED=1.4.14 @@ -97,6 +99,7 @@ XCBDRI2_REQUIRED=1.8 XCBDRI3_MODIFIERS_REQUIRED=1.13 XCBGLX_REQUIRED=1.8.1 XCBPRESENT_MODIFIERS_REQUIRED=1.13 +XCBRANDR_XLEASE_REQUIRED=1.13 XDAMAGE_REQUIRED=1.1 XSHMFENCE_REQUIRED=1.1 XVMC_REQUIRED=1.0.6 @@ -1874,20 +1877,6 @@ if test x"$enable_dri3" = xyes; then fi fi - -if echo "$platforms" | grep -q 'x11' && echo "$platforms" | grep -q 'drm'; then - have_xlease=yes -else - have_xlease=no -fi - -if test x"$have_xlease" = xyes; then - randr_modules="x11-xcb xcb-randr" - PKG_CHECK_MODULES([XCB_RANDR], [$randr_modules]) - xlib_randr_modules="xrandr" - PKG_CHECK_MODULES([XLIB_RANDR], [$xlib_randr_modules]) -fi - AM_CONDITIONAL(HAVE_PLATFORM_X11, echo "$platforms" | grep -q 'x11') AM_CONDITIONAL(HAVE_PLATFORM_WAYLAND, echo "$platforms" | grep -q 'wayland') AM_CONDITIONAL(HAVE_PLATFORM_DRM, echo "$platforms" | grep -q 'drm') @@ -1905,14 +1894,24 @@ xno) ;; *) if echo "$platforms" | grep -q 'x11' && echo "$platforms" | grep -q 'drm'; then - enable_xlib_lease=yes + xlease_modules="x11-xcb xcb-randr >= $XCBRANDR_XLEASE_REQUIRED xrandr" + PKG_CHECK_EXISTS([$xlease_modules], [enable_xlib_lease=yes], [enable_xlib_lease=no]) else enable_xlib_lease=no fi esac +if test x"$enable_xlib_lease" = xyes; then + randr_modules="x11-xcb xcb-randr >= $XCBRANDR_XLEASE_REQUIRED" + PKG_CHECK_MODULES([XCB_RANDR], [$randr_modules]) + xlib_randr_modules="xrandr" + PKG_CHECK_MODULES([XLIB_RANDR], [$xlib_randr_modules]) +fi + AM_CONDITIONAL(HAVE_XLIB_LEASE, test "x$enable_xlib_lease" = xyes) +PKG_CHECK_EXISTS([libdrm >= $LIBDRM_CRT_SEQUENCE_REQUIRED], [DEFINES="${DEFINES} -DVK_USE_DISPLAY_CONTROL"], []) + dnl dnl More DRI setup dnl diff --git a/meson.build b/meson.build index 7d12af3d51..902074819c 100644 --- a/meson.build +++ b/meson.build @@ -1088,6 +1088,8 @@ _drm_freedreno_ver = '2.4.92' _drm_intel_ver = '2.4.75' _drm_ver = '2.4.75' +_drm_crt_sequence_ver = '2.4.89' + _libdrm_checks = [ ['intel', with_dri_i915 or with_gallium_i915], ['amdgpu', with_amd_vk or with_gallium_radeonsi], @@ -1361,11 +1363,17 @@ if with_platform_x11 dep_xcb_xfixes = dependency('xcb-xfixes') endif if with_xlib_lease - dep_xcb_xrandr = dependency('xcb-randr', version : '>= 1.12') + dep_xcb_xrandr = dependency('xcb-randr', version : '>= 1.13') dep_xlib_xrandr = dependency('xrandr', version : '>= 1.3') endif endif +if with_any_vk + if dep_libdrm.version().version_compare('>= ' + _drm_crt_sequence_ver) + pre_args += '-DVK_USE_DISPLAY_CONTROL' + endif +endif + if get_option('gallium-extra-hud') pre_args += '-DHAVE_GALLIUM_EXTRA_HUD=1' endif diff --git a/src/amd/vulkan/radv_extensions.py b/src/amd/vulkan/radv_extensions.py index 094ed3bce3..35b49243a3 100644 --- a/src/amd/vulkan/radv_extensions.py +++ b/src/amd/vulkan/radv_extensions.py @@ -92,7 +92,7 @@ EXTENSIONS = [ Extension('VK_EXT_direct_mode_display', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'), Extension('VK_EXT_acquire_xlib_display', 1, 'VK_USE_PLATFORM_XLIB_XRANDR_EXT'), Extension('VK_EXT_display_surface_counter', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'), - Extension('VK_EXT_display_control', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'), + Extension('VK_EXT_display_control', 1, 'VK_USE_DISPLAY_CONTROL'), Extension('VK_EXT_debug_report', 9, True), Extension('VK_EXT_depth_range_unrestricted', 1, True), Extension('VK_EXT_descriptor_indexing', 2, True), @@ -239,6 +239,13 @@ _TEMPLATE_C = Template(COPYRIGHT + """ # define ANDROID false #endif +#ifdef VK_USE_DISPLAY_CONTROL +# undef VK_USE_DISPLAY_CONTROL +# define VK_USE_DISPLAY_CONTROL true +#else +# define VK_USE_DISPLAY_CONTROL false +#endif + #define RADV_HAS_SURFACE (VK_USE_PLATFORM_WAYLAND_KHR || \\ VK_USE_PLATFORM_XCB_KHR || \\ VK_USE_PLATFORM_XLIB_KHR || \\ diff --git a/src/amd/vulkan/radv_wsi_display.c b/src/amd/vulkan/radv_wsi_display.c index d8743a06e3..a932e05ce8 100644 --- a/src/amd/vulkan/radv_wsi_display.c +++ b/src/amd/vulkan/radv_wsi_display.c @@ -252,8 +252,7 @@ radv_GetRandROutputDisplayEXT(VkPhysicalDevice physical_device, } #endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */ -/* VK_EXT_display_control */ - +#ifdef VK_USE_DISPLAY_CONTROL VkResult radv_DisplayPowerControlEXT(VkDevice _device, VkDisplayKHR display, @@ -351,4 +350,4 @@ radv_GetSwapchainCounterEXT(VkDevice _device, flag_bits, value); } - +#endif /* VK_USE_DISPLAY_CONTROL */ diff --git a/src/intel/vulkan/anv_extensions.py b/src/intel/vulkan/anv_extensions.py index adc1d75898..defd153095 100644 --- a/src/intel/vulkan/anv_extensions.py +++ b/src/intel/vulkan/anv_extensions.py @@ -116,7 +116,7 @@ EXTENSIONS = [ Extension('VK_EXT_acquire_xlib_display', 1, 'VK_USE_PLATFORM_XLIB_XRANDR_EXT'), Extension('VK_EXT_debug_report', 8, True), Extension('VK_EXT_direct_mode_display', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'), - Extension('VK_EXT_display_control', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'), + Extension('VK_EXT_display_control', 1, 'VK_USE_DISPLAY_CONTROL'), Extension('VK_EXT_display_surface_counter', 1, 'VK_USE_PLATFORM_DISPLAY_KHR'), Extension('VK_EXT_external_memory_dma_buf', 1, True), Extension('VK_EXT_global_priority', 1, diff --git a/src/intel/vulkan/anv_extensions_gen.py b/src/intel/vulkan/anv_extensions_gen.py index a140c26745..914db7bd0e 100644 --- a/src/intel/vulkan/anv_extensions_gen.py +++ b/src/intel/vulkan/anv_extensions_gen.py @@ -120,6 +120,13 @@ _TEMPLATE_C = Template(COPYRIGHT + """ # define ANDROID false #endif +#ifdef VK_USE_DISPLAY_CONTROL +# undef VK_USE_DISPLAY_CONTROL +# define VK_USE_DISPLAY_CONTROL true +#else +# define VK_USE_DISPLAY_CONTROL false +#endif + #define ANV_HAS_SURFACE (VK_USE_PLATFORM_WAYLAND_KHR || \\ VK_USE_PLATFORM_XCB_KHR || \\ VK_USE_PLATFORM_XLIB_KHR || \\ diff --git a/src/intel/vulkan/anv_wsi_display.c b/src/intel/vulkan/anv_wsi_display.c index 3212c235ba..a915e1e9f7 100644 --- a/src/intel/vulkan/anv_wsi_display.c +++ b/src/intel/vulkan/anv_wsi_display.c @@ -231,8 +231,7 @@ anv_GetRandROutputDisplayEXT(VkPhysicalDevice physical_device, } #endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */ -/* VK_EXT_display_control */ - +#ifdef VK_USE_DISPLAY_CONTROL VkResult anv_DisplayPowerControlEXT(VkDevice _device, VkDisplayKHR display, @@ -315,3 +314,4 @@ anv_GetSwapchainCounterEXT(VkDevice _device, _device, &device->instance->physicalDevice.wsi_device, swapchain, flag_bits, value); } +#endif /* VK_USE_DISPLAY_CONTROL */ diff --git a/src/vulkan/wsi/wsi_common_display.c b/src/vulkan/wsi/wsi_common_display.c index ac932d4368..91ce8706b5 100644 --- a/src/vulkan/wsi/wsi_common_display.c +++ b/src/vulkan/wsi/wsi_common_display.c @@ -1131,7 +1131,9 @@ static drmEventContext event_context = { .page_flip_handler2 = wsi_display_page_flip_handler2, #endif .vblank_handler = wsi_display_vblank_handler, +#if DRM_EVENT_CONTEXT_VERSION >= 4 .sequence_handler = wsi_display_sequence_handler, +#endif }; static void * @@ -1459,6 +1461,7 @@ static void wsi_display_fence_event_handler(struct wsi_display_fence *fence) wsi_display_fence_check_free(fence); } +#ifdef VK_USE_DISPLAY_CONTROL static void wsi_display_fence_destroy(struct wsi_fence *fence_wsi) { @@ -1551,6 +1554,7 @@ wsi_register_vblank_event(struct wsi_display_fence *fence, } } } +#endif /* VK_USE_DISPLAY_CONTROL */ /* * Check to see if the kernel has no flip queued and if there's an image @@ -2348,7 +2352,7 @@ wsi_get_randr_output_display(VkPhysicalDevice physical_device, #endif -/* VK_EXT_display_control */ +#ifdef VK_USE_DISPLAY_CONTROL VkResult wsi_display_power_control(VkDevice device, struct wsi_device *wsi_device, @@ -2459,4 +2463,4 @@ wsi_get_swapchain_counter(VkDevice device, return VK_SUCCESS; } - +#endif /* VK_USE_DISPLAY_CONTROL */ diff --git a/src/vulkan/wsi/wsi_common_display.h b/src/vulkan/wsi/wsi_common_display.h index 50d7f836a7..1b2d6c5d76 100644 --- a/src/vulkan/wsi/wsi_common_display.h +++ b/src/vulkan/wsi/wsi_common_display.h @@ -131,7 +131,7 @@ wsi_get_randr_output_display(VkPhysicalDevice physical_device, #endif /* VK_USE_PLATFORM_XLIB_XRANDR_EXT */ -/* VK_EXT_display_control */ +#ifdef VK_USE_DISPLAY_CONTROL VkResult wsi_display_power_control(VkDevice device, struct wsi_device *wsi_device, @@ -159,5 +159,6 @@ wsi_get_swapchain_counter(VkDevice device, VkSwapchainKHR swapchain, VkSurfaceCounterFlagBitsEXT flag_bits, uint64_t *value); +#endif /* VK_USE_DISPLAY_CONTROL */ #endif -- 2.17.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev