diff options
author | Tapani Pälli <[email protected]> | 2019-04-09 10:43:59 +0300 |
---|---|---|
committer | Tapani Pälli <[email protected]> | 2019-04-11 10:16:03 +0300 |
commit | ef923088d2c72863eff8f184e1576e20e85b9d05 (patch) | |
tree | 51ecf8927cde45f1bac1aa1e895ede75a054d54d /src/egl/drivers/dri2 | |
parent | 4122f55574f1184e73962135123be1899b1739db (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.c | 12 |
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, |