[Mesa-dev] [PATCH] vulkan/wsi: Only use LINEAR modifier for prime if supported.

Abel GarcĂ­a Dorta mercuriete at gmail.com
Sat May 5 21:58:41 UTC 2018


Hi, I sent a similar patch yesterday with:

+   if (chain->has_dri3_modifiers &&
+       image->base.drm_modifier != DRM_FORMAT_MOD_INVALID) {

but was rejected by bas and never got into the mail list...
If the jason's patch is going to be the good patch I would like to
have some aknowlegment in the commit message
because I found the bug and I sent a similar patch.

I will test tomorrow both patches in my computer.

Thank you for fixing it.


2018-05-05 20:07 GMT+02:00 Jason Ekstrand <jason at jlekstrand.net>:
> On Sat, May 5, 2018 at 6:34 AM, Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> wrote:
>>
>> This was setting the LINEAR modifier if neither the
>> X server nor the driver supported modifiers.
>>
>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=106180
>> Fixes: c80c08e226 "vulkan/wsi/x11: Add support for DRI3 v1.2"
>> CC: 18.1 <mesa-stable at lists.freedesktop.org>
>> CC: Abel Garcia Dorta <mercuriete at gmail.com>
>> CC: Daniel Stone <daniels at collabora.com>
>> ---
>>  src/vulkan/wsi/wsi_common.c         | 3 ++-
>>  src/vulkan/wsi/wsi_common_private.h | 1 +
>>  src/vulkan/wsi/wsi_common_x11.c     | 3 ++-
>>  3 files changed, 5 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c
>> index fe262b4968d..87e508ddf85 100644
>> --- a/src/vulkan/wsi/wsi_common.c
>> +++ b/src/vulkan/wsi/wsi_common.c
>> @@ -442,6 +442,7 @@ fail:
>>  VkResult
>>  wsi_create_prime_image(const struct wsi_swapchain *chain,
>>                         const VkSwapchainCreateInfoKHR *pCreateInfo,
>> +                       bool use_modifier,
>>                         struct wsi_image *image)
>>  {
>>     const struct wsi_device *wsi = chain->wsi;
>> @@ -626,7 +627,7 @@ wsi_create_prime_image(const struct wsi_swapchain
>> *chain,
>>     if (result != VK_SUCCESS)
>>        goto fail;
>>
>> -   image->drm_modifier = DRM_FORMAT_MOD_LINEAR;
>> +   image->drm_modifier = use_modifier ? DRM_FORMAT_MOD_LINEAR :
>> DRM_FORMAT_MOD_INVALID;
>>     image->num_planes = 1;
>>     image->sizes[0] = linear_size;
>>     image->row_pitches[0] = linear_stride;
>> diff --git a/src/vulkan/wsi/wsi_common_private.h
>> b/src/vulkan/wsi/wsi_common_private.h
>> index b608119b969..90941c8201b 100644
>> --- a/src/vulkan/wsi/wsi_common_private.h
>> +++ b/src/vulkan/wsi/wsi_common_private.h
>> @@ -89,6 +89,7 @@ wsi_create_native_image(const struct wsi_swapchain
>> *chain,
>>  VkResult
>>  wsi_create_prime_image(const struct wsi_swapchain *chain,
>>                         const VkSwapchainCreateInfoKHR *pCreateInfo,
>> +                       bool use_modifier,
>>                         struct wsi_image *image);
>>
>>  void
>> diff --git a/src/vulkan/wsi/wsi_common_x11.c
>> b/src/vulkan/wsi/wsi_common_x11.c
>> index 3a00caddfb9..62739b99125 100644
>> --- a/src/vulkan/wsi/wsi_common_x11.c
>> +++ b/src/vulkan/wsi/wsi_common_x11.c
>> @@ -1043,7 +1043,8 @@ x11_image_init(VkDevice device_h, struct
>> x11_swapchain *chain,
>>     uint32_t bpp = 32;
>>
>>     if (chain->base.use_prime_blit) {
>> -      result = wsi_create_prime_image(&chain->base, pCreateInfo,
>> &image->base);
>> +      bool use_modifier = num_tranches > 0;
>> +      result = wsi_create_prime_image(&chain->base, pCreateInfo,
>> use_modifier, &image->base);
>
>
> This confused me for a bit but I think I see what's going on.  You have an X
> server which doesn't know about modifiers but mesa is built with modifier
> support and prime is in use.  This results in the WSI code calling
> dri3_pixmap_from_buffers (plural) on an X server which doesn't support it.
>
> I'm not sure what I think about this way of solving the problem.  In my
> twisted mind, DRM_FORMAT_MOD_LINEAR should always be valid even if the
> modifier is ultimately ignored.  I'm going to send a counter-patch which
> solves it another way but I'm not sure if my solution is better.  Daniel, do
> you have any thoughts?
>
>>
>>     } else {
>>        result = wsi_create_native_image(&chain->base, pCreateInfo,
>>                                         num_tranches, num_modifiers,
>> modifiers,
>> --
>> 2.17.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>


More information about the mesa-dev mailing list