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 <tapani.palli@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Tapani Pälli 2019-04-09 10:43:59 +03:00
parent 4122f55574
commit ef923088d2
1 changed files with 12 additions and 0 deletions

View File

@ -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,