From: Louis-Francis Ratté-Boulianne Date: Thu, 28 Sep 2017 07:18:33 +0000 (-0400) Subject: dri: fromPlanar() can return NULL as a valid result X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a34715ad9c84c4209de4c16fdf40655181350bd9;p=mesa.git dri: fromPlanar() can return NULL as a valid result It was assumed that fromPlanar() could return NULL to mean that the planar image is the same as the parent DRI image. That assumption wasn't made everywhere though. Let's fix things and make sure that all callers understand a NULL result Signed-off-by: Louis-Francis Ratté-Boulianne Reviewed-by: Jason Ekstrand Reviewed-by: Daniel Stone --- diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index e9b556ec5f7..17b646e7ede 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -1966,7 +1966,8 @@ dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx, } dri_image = dri2_dpy->image->fromPlanar(buffer->driver_buffer, plane, NULL); - + if (dri_image == NULL && plane == 0) + dri_image = dri2_dpy->image->dupImage(buffer->driver_buffer, NULL); if (dri_image == NULL) { _eglError(EGL_BAD_PARAMETER, "dri2_create_image_wayland_wl_buffer"); return NULL; diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index f91baded877..5b8bec901b0 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -814,13 +814,10 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy, int stride, offset; int fd = -1; - if (i == 0) - p_image = image; - else - p_image = dri2_dpy->image->fromPlanar(image, i, NULL); + p_image = dri2_dpy->image->fromPlanar(image, i, NULL); if (!p_image) { - zwp_linux_buffer_params_v1_destroy(params); - return NULL; + assert(i == 0); + p_image = image; } query = dri2_dpy->image->queryImage(p_image, diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index 0d088bd62b6..ed64ad61bf0 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -849,6 +849,7 @@ gbm_dri_bo_get_offset(struct gbm_bo *_bo, int plane) dri->image->queryImage(image, __DRI_IMAGE_ATTRIB_OFFSET, &offset); dri->image->destroyImage(image); } else { + assert(plane == 0); dri->image->queryImage(bo->image, __DRI_IMAGE_ATTRIB_OFFSET, &offset); } diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index fbda3d635c7..2912bb6749b 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -1288,7 +1288,10 @@ loader_dri3_create_image(xcb_connection_t *c, ret = image->fromPlanar(image_planar, 0, loaderPrivate); - image->destroyImage(image_planar); + if (!ret) + ret = image_planar; + else + image->destroyImage(image_planar); return ret; }