From: Emil Velikov <emil.veli...@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. Piglit: tests/egl/spec/egl_ext_device_query Fixes: ce562f9e3fa ("EGL: Implement the libglvnd interface for EGL (v3)") Cc: Kyle Brenneman <kbrenne...@nvidia.com> Cc: Eric Engestrom <e...@engestrom.ch> Signed-off-by: Emil Velikov <emil.veli...@collabora.com> --- src/egl/main/egldispatchstubs.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/egl/main/egldispatchstubs.c b/src/egl/main/egldispatchstubs.c index bfc3195c779..e39fd6197a6 100644 --- a/src/egl/main/egldispatchstubs.c +++ b/src/egl/main/egldispatchstubs.c @@ -54,9 +54,17 @@ static __eglMustCastToProperFunctionPointerType FetchVendorFunc(__EGLvendorInfo { __eglMustCastToProperFunctionPointerType func = NULL; - if (vendor != NULL) { - func = exports->fetchDispatchEntry(vendor, __EGL_DISPATCH_FUNC_INDICES[index]); + if (vendor == NULL) { + // XXX: How can we end here with EGL_SUCCESS? + 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. + exports->setEGLError(errorCode); + } + return NULL; } + + func = exports->fetchDispatchEntry(vendor, __EGL_DISPATCH_FUNC_INDICES[index]); if (func == NULL) { if (errorCode != EGL_SUCCESS) { _eglError(errorCode, __EGL_DISPATCH_FUNC_NAMES[index]); -- 2.19.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev