On Sat, May 5, 2018 at 6:34 AM, Bas Nieuwenhuizen <b...@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-sta...@lists.freedesktop.org> > CC: Abel Garcia Dorta <mercuri...@gmail.com> > CC: Daniel Stone <dani...@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@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev >
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev