[Mesa-dev] [PATCH mesa 5/6] vulkan/wsi/display: pass image's DRM modifiers to the kernel
Jason Ekstrand
jason at jlekstrand.net
Wed Sep 26 20:46:23 UTC 2018
I have a feeling this should go before patch 3
On September 26, 2018 17:38:24 Eric Engestrom <eric.engestrom at intel.com> wrote:
> Signed-off-by: Eric Engestrom <eric.engestrom at intel.com>
> ---
> src/vulkan/wsi/wsi_common_display.c | 17 +++++++++++++++--
> 1 file changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/src/vulkan/wsi/wsi_common_display.c
> b/src/vulkan/wsi/wsi_common_display.c
> index c24b58e8c240f43ac512..0b71932bfa0939039ae3 100644
> --- a/src/vulkan/wsi/wsi_common_display.c
> +++ b/src/vulkan/wsi/wsi_common_display.c
> @@ -1082,10 +1082,14 @@ wsi_display_image_init(VkDevice device_h,
>
> memset(image->buffer, 0, sizeof (image->buffer));
>
> + /* The kernel expect a modifier for each plane for historical
> + * reasons, but they all have to be the same */
> + uint64_t drm_modifier[4] = {};
> for (unsigned int i = 0; i < image->base.num_planes; i++) {
> int ret = drmPrimeFDToHandle(wsi->fd, image->base.fds[i],
> &image->buffer[i]);
>
> + drm_modifier[i] = image->base.drm_modifier;
> close(image->base.fds[i]);
> image->base.fds[i] = -1;
> if (ret < 0)
> @@ -1096,14 +1100,23 @@ wsi_display_image_init(VkDevice device_h,
> image->state = WSI_IMAGE_IDLE;
> image->fb_id = 0;
>
> - int ret = drmModeAddFB2(wsi->fd,
> + uint64_t *fb_modifiers = NULL;
> + uint32_t fb_flags = 0;
> + if (drm_modifier[0] != DRM_FORMAT_MOD_INVALID) {
> + fb_modifiers = drm_modifier;
> + fb_flags |= DRM_MODE_FB_MODIFIERS;
> + }
> +
> + int ret = drmModeAddFB2WithModifiers(wsi->fd,
> create_info->imageExtent.width,
> create_info->imageExtent.height,
> drm_format,
> image->buffer,
> image->base.row_pitches,
> image->base.offsets,
> - &image->fb_id, 0);
> + fb_modifiers,
> + &image->fb_id,
> + fb_flags);
>
> if (ret)
> goto fail_fb;
> --
> Cheers,
> Eric
More information about the mesa-dev
mailing list