mesa: querying dma_buf_modifiers for specific formats

mesa wl_drm protocol is the backend for wayland server side which requires
the dmabuf modifiers for some DRM formats on specific devices like RPI. 
Currently there is no support of giving any dmabuf modifiers on wl_drm protocol.
This dma_buf modifiers allows EGL implementations to add extra attributes
to drm_fourcc format.

Upstream-Status: Pending 

Signed-off-by: Balaji Velmurugan <balaji.velmurugan@ltts.com>

--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1366,14 +1366,28 @@ dri2_from_planar(__DRIimage *image, int
    return img;
 }
 
+static boolean
+dri2_query_dma_buf_modifiers(__DRIscreen *_screen, int fourcc, int max,
+                             uint64_t *modifiers, unsigned int *external_only,
+                             int *count);
 static __DRIimage *
 dri2_from_fds(__DRIscreen *screen, int width, int height, int fourcc,
               int *fds, int num_fds, int *strides, int *offsets,
               void *loaderPrivate)
 {
+   uint64_t modifier= DRM_FORMAT_MOD_INVALID;
+   unsigned int external_only= 0;
+   int count= 0;
+   boolean result;
+   result= dri2_query_dma_buf_modifiers( screen, fourcc, 1, &modifier, &external_only, &count);
+   return dri2_create_image_from_fd(screen, width, height, fourcc,
+                                   modifier, fds, num_fds,
+                                   strides, offsets, NULL, loaderPrivate);
+   #if 0
    return dri2_create_image_from_fd(screen, width, height, fourcc,
                                    DRM_FORMAT_MOD_INVALID, fds, num_fds,
                                    strides, offsets, NULL, loaderPrivate);
+   #endif
 }
 
 static boolean
