<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p>Hi Eric,<br>
    </p>
    <br>
    <div class="moz-cite-prefix">On 24.07.18 18:43, Eric Engestrom
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:20180724154336.GA2244@intel.com">
      <pre wrap="">On Friday, 2018-07-13 16:57:34 +0300, Danylo Piliaiev wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">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.
</pre>
      </blockquote>
      <pre wrap="">
You're changing 3 unrelated things here; please send 3 patches :)

</pre>
    </blockquote>
    Ok, I'll separate patches this time: <br>
    1) xcb-randr check<br>
    2) Bumping libdrm for vulkan<br>
    3) Removal checks of DRM_EVENT_CONTEXT_VERSION as suggested by Emil.<br>
    <blockquote type="cite" cite="mid:20180724154336.GA2244@intel.com">
      <blockquote type="cite">
        <pre wrap="">
Bugzilla: <a class="moz-txt-link-freetext" href="https://bugs.freedesktop.org/show_bug.cgi?id=107170">https://bugs.freedesktop.org/show_bug.cgi?id=107170</a>
          <a class="moz-txt-link-freetext" href="https://bugs.freedesktop.org/show_bug.cgi?id=106972">https://bugs.freedesktop.org/show_bug.cgi?id=106972</a>
          <a class="moz-txt-link-freetext" href="https://bugs.freedesktop.org/show_bug.cgi?id=107176">https://bugs.freedesktop.org/show_bug.cgi?id=107176</a>

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 <a class="moz-txt-link-rfc2396E" href="mailto:danylo.piliaiev@globallogic.com"><danylo.piliaiev@globallogic.com></a>
---
 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
</pre>
      </blockquote>
      <pre wrap="">
I agree with everyone else here: just bump the libdrm version required
for vulkan :)
</pre>
    </blockquote>
    Making sure I got it right: <br>
    Since it's vulkan only issue LIBDRM_REQUIRED=2.4.75 should be left
    intact and<br>
    new variable like LIBDRM_VULKAN_REQUIRED=2.4.89 be introduced <br>
    which will be checked when vulkan is enabled. <br>
    <blockquote type="cite" cite="mid:20180724154336.GA2244@intel.com">
      <pre wrap="">
libdrm is absolutely trivial to update; any system that can update its
mesa can also update its libdrm.

</pre>
    </blockquote>
    Didn't notice that it's easy to update, thanks.<br>
    <blockquote type="cite" cite="mid:20180724154336.GA2244@intel.com">
      <blockquote type="cite">
        <pre wrap="">+
 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
</pre>
      </blockquote>
      <pre wrap="">
Don't do that, you're breaking all your own #ifdef checks :)
</pre>
    </blockquote>
    It happens in .c file so it cannot escape anywhere and there is
    similar <span id="result_box" class="short_text" lang="en"><span
        class="">constructions</span></span> nearby with same purpose,<br>
    also since we are bumping lidrm version this fortunately won't be
    necessary because it looks ugly for me too.<br>
    <blockquote type="cite" cite="mid:20180724154336.GA2244@intel.com">
      <pre wrap="">
</pre>
      <blockquote type="cite">
        <pre wrap="">+
 #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
<a class="moz-txt-link-abbreviated" href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a>
</pre>
      </blockquote>
    </blockquote>
    <br>
  </body>
</html>