[Mesa-dev] [PATCH v3] vulkan: Fix compilation on older platforms

Danylo Piliaiev danylo.piliaiev at gmail.com
Wed Jul 25 08:35:41 UTC 2018


Hi Eric,


On 24.07.18 18:43, Eric Engestrom wrote:
> On Friday, 2018-07-13 16:57:34 +0300, Danylo Piliaiev wrote:
>> 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.
> You're changing 3 unrelated things here; please send 3 patches :)
>
Ok, I'll separate patches this time:
1) xcb-randr check
2) Bumping libdrm for vulkan
3) Removal checks of DRM_EVENT_CONTEXT_VERSION as suggested by Emil.
>> 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.piliaiev at 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
> I agree with everyone else here: just bump the libdrm version required
> for vulkan :)
Making sure I got it right:
Since it's vulkan only issue LIBDRM_REQUIRED=2.4.75 should be left 
intact and
new variable like LIBDRM_VULKAN_REQUIRED=2.4.89 be introduced
which will be checked when vulkan is enabled.
> libdrm is absolutely trivial to update; any system that can update its
> mesa can also update its libdrm.
>
Didn't notice that it's easy to update, thanks.
>> +
>>   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
> Don't do that, you're breaking all your own #ifdef checks :)
It happens in .c file so it cannot escape anywhere and there is similar 
constructions nearby with same purpose,
also since we are bumping lidrm version this fortunately won't be 
necessary because it looks ugly for me too.
>> +
>>   #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 at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180725/ae62b2a6/attachment-0001.html>


More information about the mesa-dev mailing list