summaryrefslogtreecommitdiffstats
path: root/src/egl/drivers/dri2
diff options
context:
space:
mode:
authorTapani Pälli <[email protected]>2019-04-09 10:43:59 +0300
committerTapani Pälli <[email protected]>2019-04-11 10:16:03 +0300
commitef923088d2c72863eff8f184e1576e20e85b9d05 (patch)
tree51ecf8927cde45f1bac1aa1e895ede75a054d54d /src/egl/drivers/dri2
parent4122f55574f1184e73962135123be1899b1739db (diff)
egl: setup fds array correctly when exporting dmabuf
For formats with multiple planes, application will pass a num_planes sized fds array which should be initialized properly in case fds amount utilized by the driver is less than the number of planes. Signed-off-by: Tapani Pälli <[email protected]> Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/egl/drivers/dri2')
-rw-r--r--src/egl/drivers/dri2/egl_dri2.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 6acc99aa62a..9d8a4d9cf71 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -2652,12 +2652,24 @@ dri2_export_dma_buf_image_mesa(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *im
{
struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
struct dri2_egl_image *dri2_img = dri2_egl_image(img);
+ EGLint nplanes;
(void) drv;
if (!dri2_can_export_dma_buf_image(disp, img))
return EGL_FALSE;
+ /* EGL_MESA_image_dma_buf_export spec says:
+ * "If the number of fds is less than the number of planes, then
+ * subsequent fd slots should contain -1."
+ */
+ if (fds) {
+ /* Query nplanes so that we know how big the given array is. */
+ dri2_dpy->image->queryImage(dri2_img->dri_image,
+ __DRI_IMAGE_ATTRIB_NUM_PLANES, &nplanes);
+ memset(fds, -1, nplanes * sizeof(int));
+ }
+
/* rework later to provide multiple fds/strides/offsets */
if (fds)
dri2_dpy->image->queryImage(dri2_img->dri_image,