xf86drmMode: set FB_MODIFIERS flag when modifiers are supplied
authorSimon Ser <contact@emersion.fr>
Fri, 5 Mar 2021 15:07:58 +0000 (16:07 +0100)
committerSimon Ser <contact@emersion.fr>
Tue, 6 Apr 2021 08:37:03 +0000 (10:37 +0200)
The kernel will always return EINVAL if modifiers are supplied but
the flag DRM_MODE_FB_MODIFIERS isn't set. That's a pretty nice
footgun.

Be a little more helpful and set the flag if the user has supplied
a modifier array.

Signed-off-by: Simon Ser <contact@emersion.fr>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
xf86drmMode.c

index c3920b9..dc17724 100644 (file)
@@ -289,8 +289,10 @@ drm_public int drmModeAddFB2WithModifiers(int fd, uint32_t width,
        memcpy(f.handles, bo_handles, 4 * sizeof(bo_handles[0]));
        memcpy(f.pitches, pitches, 4 * sizeof(pitches[0]));
        memcpy(f.offsets, offsets, 4 * sizeof(offsets[0]));
-       if (modifier)
+       if (modifier) {
+               f.flags |= DRM_MODE_FB_MODIFIERS;
                memcpy(f.modifier, modifier, 4 * sizeof(modifier[0]));
+       }
 
        if ((ret = DRM_IOCTL(fd, DRM_IOCTL_MODE_ADDFB2, &f)))
                return ret;