[Mesa-dev] [PATCH v2] egl/glvnd: correctly report errors when vendor cannot be found

Kyle Brenneman kyle.brenneman at gmail.com
Tue Nov 6 14:51:47 UTC 2018


On 11/05/2018 10:00 AM, Emil Velikov wrote:
> From: Emil Velikov <emil.velikov at collabora.com>
>
> If the user provides an invalid display or device the ToVendor lookup
> will fail.
>
> In this case, the local [Mesa vendor] error code will be set. Thus on
> sequential eglGetError(), the error will be EGL_SUCCESS.
>
> To be more specific, GLVND remembers the last vendor and calls back
> into it's eglGetError, although there's no guarantee to ever have had
> one.
>
> v2:
>   - Add _eglError call, so the debug callback is executed (Kyle)
>   - Drop XXX comment.
>
> Piglit: tests/egl/spec/egl_ext_device_query
> Fixes: ce562f9e3fa ("EGL: Implement the libglvnd interface for EGL (v3)")
> Cc: Kyle Brenneman <kbrenneman at nvidia.com>
> Cc: Eric Engestrom <eric at engestrom.ch>
> Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
> ---
>   src/egl/main/egldispatchstubs.c | 5 +++++
>   1 file changed, 5 insertions(+)
>
> diff --git a/src/egl/main/egldispatchstubs.c b/src/egl/main/egldispatchstubs.c
> index bfc3195c779..96708aeb0dc 100644
> --- a/src/egl/main/egldispatchstubs.c
> +++ b/src/egl/main/egldispatchstubs.c
> @@ -59,6 +59,11 @@ static __eglMustCastToProperFunctionPointerType FetchVendorFunc(__EGLvendorInfo
>       }
>       if (func == NULL) {
>           if (errorCode != EGL_SUCCESS) {
> +            // Since we have no vendor, the follow-up eglGetError() call will
> +            // end up using the GLVND error code. Set it here.
> +            if (vendor == NULL) {
> +                exports->setEGLError(errorCode);
> +            }
>               _eglError(errorCode, __EGL_DISPATCH_FUNC_NAMES[index]);
>           }
>           return NULL;

That looks right to me.

-Kyle



More information about the mesa-dev mailing list