[Mesa-dev] [PATCH 2/3] egl/x11: set EGL_BAD_NATIVE_(PIXMAP|WINDOW) for invalid pixmaps/windows
Emil Velikov
emil.l.velikov at gmail.com
Mon Aug 3 05:28:58 PDT 2015
On 31 July 2015 at 11:02, Frank Binns <frank.binns at imgtec.com> wrote:
> Both eglCreatePixmapSurface and eglCreateWindowSurface were incorrectly
> setting the EGL error to be EGL_BAD_ALLOC when an invalid native drawable
> handle was being passed in. The EGL spec states the following for
> eglCreatePixmapSurface:
>
> "If pixmap is not a valid native pixmap handle, then an EGL_BAD_-
> NATIVE_PIXMAP error should be generated."
>
> (eglCreateWindowSurface has similar text)
>
> Correctly set the EGL error value based on xcb_get_geometry_reply returning
> an error structure.
>
> Signed-off-by: Frank Binns <frank.binns at imgtec.com>
> ---
> src/egl/drivers/dri2/platform_x11.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c
> index eb8d185..d35e9e2 100644
> --- a/src/egl/drivers/dri2/platform_x11.c
> +++ b/src/egl/drivers/dri2/platform_x11.c
> @@ -265,10 +265,16 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
> if (type != EGL_PBUFFER_BIT) {
> cookie = xcb_get_geometry (dri2_dpy->conn, dri2_surf->drawable);
> reply = xcb_get_geometry_reply (dri2_dpy->conn, cookie, &error);
> - if (reply == NULL || error != NULL) {
> - _eglError(EGL_BAD_ALLOC, "xcb_get_geometry");
> - free(error);
> - goto cleanup_dri_drawable;
> + if (error != NULL) {
> + if (type == EGL_WINDOW_BIT)
> + _eglError(EGL_BAD_NATIVE_WINDOW, "xcb_get_geometry");
> + else
> + _eglError(EGL_BAD_NATIVE_PIXMAP, "xcb_get_geometry");
Obviously in most cases xcb_get_geometry_reply will fail due to the
above two reasons, but won't these trigger even if we fail due to
ENOMEM ? The xcb documentation does not explicitly mention if error
will be non-NULL in the latter case, although common sense seems to
hint that way.
-Emil
More information about the mesa-dev
mailing list