summaryrefslogtreecommitdiff
path: root/src/egl
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2019-07-14 14:48:11 -0400
committerDaniel Stone <daniel@fooishbar.org>2019-07-25 05:14:36 +0000
commit08f1cefecd84f851da6d90200bd7af0ecf5bf855 (patch)
tree9471616e1bc118db2fb3d452468f27f18b53d195 /src/egl
parent488692426266bc14138410bc98f6e3a6390e3788 (diff)
downloadmesa-08f1cefecd84f851da6d90200bd7af0ecf5bf855.tar.gz
egl: Also query modifiers when exporting DMABuf
This fixes eglExportDMABUFImageQueryMESA() so it will report the modififers of the underlying image. Without this information, re-importing will likely be broken as it is rare these days that no modifiers are used. Reviewed-by: Eric Engestrom <eric@engestrom.ch> Reviewed-by: Daniel Stone <daniels@collabora.com> Fixes: 8f7338f284cdb1fef64c ("egl: add initial EGL_MESA_image_dma_buf_export v2.4")
Diffstat (limited to 'src/egl')
-rw-r--r--src/egl/drivers/dri2/egl_dri2.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index ee4faaab34f..03ea66f170f 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -2656,21 +2656,39 @@ dri2_export_dma_buf_image_query_mesa(_EGLDriver *drv, _EGLDisplay *disp,
{
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
struct dri2_egl_image *dri2_img = dri2_egl_image(img);
+ int num_planes;
(void) drv;
if (!dri2_can_export_dma_buf_image(disp, img))
return EGL_FALSE;
+ dri2_dpy->image->queryImage(dri2_img->dri_image,
+ __DRI_IMAGE_ATTRIB_NUM_PLANES, &num_planes);
if (nplanes)
- dri2_dpy->image->queryImage(dri2_img->dri_image,
- __DRI_IMAGE_ATTRIB_NUM_PLANES, nplanes);
+ *nplanes = num_planes;
+
if (fourcc)
dri2_dpy->image->queryImage(dri2_img->dri_image,
__DRI_IMAGE_ATTRIB_FOURCC, fourcc);
- if (modifiers)
- *modifiers = 0;
+ if (modifiers) {
+ int mod_hi, mod_lo;
+ uint64_t modifier = DRM_FORMAT_MOD_INVALID;
+ bool query;
+
+ query = dri2_dpy->image->queryImage(dri2_img->dri_image,
+ __DRI_IMAGE_ATTRIB_MODIFIER_UPPER,
+ &mod_hi);
+ query &= dri2_dpy->image->queryImage(dri2_img->dri_image,
+ __DRI_IMAGE_ATTRIB_MODIFIER_LOWER,
+ &mod_lo);
+ if (query)
+ modifier = combine_u32_into_u64 (mod_hi, mod_lo);
+
+ for (int i = 0; i < num_planes; i++)
+ modifiers[i] = modifier;
+ }
return EGL_TRUE;
}