Fix platform display retrieval. We were checking if the attrib_list was NULL to verify that no unsupported attributes are provides, but a single EGL_NONE attribute should also be allowed. Also use operator& to avoid confusing implicit conversion to a pointer. Change-Id: I3c30968fddfd4d1dfbdff9c4ff291abb258e304c Reviewed-on: https://swiftshader-review.googlesource.com/20148 Tested-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/OpenGL/libEGL/libEGL.cpp b/src/OpenGL/libEGL/libEGL.cpp index c76f52b..fa8a529 100644 --- a/src/OpenGL/libEGL/libEGL.cpp +++ b/src/OpenGL/libEGL/libEGL.cpp
@@ -115,7 +115,7 @@ attrib.push_back(EGL_NONE); } - operator const EGLAttrib*() const + const EGLAttrib *operator&() const { return &attrib[0]; } @@ -356,7 +356,7 @@ "const EGLint *attrib_list = %p)", dpy, config, native_window, attrib_list); EGLAttribs attribs(attrib_list); - return CreatePlatformWindowSurface(dpy, config, native_window, attribs); + return CreatePlatformWindowSurface(dpy, config, native_window, &attribs); } EGLSurface CreateWindowSurface(EGLDisplay dpy, EGLConfig config, EGLNativeWindowType window, const EGLint *attrib_list) @@ -365,7 +365,7 @@ "const EGLint *attrib_list = %p)", dpy, config, window, attrib_list); EGLAttribs attribs(attrib_list); - return CreatePlatformWindowSurface(dpy, config, (void*)window, attribs); + return CreatePlatformWindowSurface(dpy, config, (void*)window, &attribs); } EGLSurface CreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list) @@ -406,7 +406,7 @@ "const EGLint *attrib_list = %p)", dpy, config, native_pixmap, attrib_list); EGLAttribs attribs(attrib_list); - return CreatePlatformPixmapSurface(dpy, config, native_pixmap, attribs); + return CreatePlatformPixmapSurface(dpy, config, native_pixmap, &attribs); } EGLSurface CreatePixmapSurface(EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, const EGLint *attrib_list) @@ -415,7 +415,7 @@ "const EGLint *attrib_list = %p)", dpy, config, pixmap, attrib_list); EGLAttribs attribs(attrib_list); - return CreatePlatformPixmapSurface(dpy, config, (void*)pixmap, attribs); + return CreatePlatformPixmapSurface(dpy, config, (void*)pixmap, &attribs); } EGLBoolean DestroySurface(EGLDisplay dpy, EGLSurface surface) @@ -1219,7 +1219,7 @@ TRACE("(EGLDisplay dpy = %p, EGLContext ctx = %p, EGLenum target = 0x%X, buffer = %p, const EGLint attrib_list = %p)", dpy, ctx, target, buffer, attrib_list); EGLAttribs attribs(attrib_list); - return CreateImage(dpy, ctx, target, buffer, attribs); + return CreateImage(dpy, ctx, target, buffer, &attribs); } EGLBoolean DestroyImageKHR(EGLDisplay dpy, EGLImageKHR image) @@ -1259,17 +1259,27 @@ { if(!libX11) { - return error(EGL_BAD_ATTRIBUTE, EGL_NO_DISPLAY); + return error(EGL_BAD_PARAMETER, EGL_NO_DISPLAY); } - if(native_display != (void*)EGL_DEFAULT_DISPLAY || attrib_list != NULL) + if(native_display != (void*)EGL_DEFAULT_DISPLAY) + { + return error(EGL_BAD_PARAMETER, EGL_NO_DISPLAY); // Unimplemented + } + + if(attrib_list && attrib_list[0] != EGL_NONE) { return error(EGL_BAD_ATTRIBUTE, EGL_NO_DISPLAY); // Unimplemented } } else if(platform == EGL_PLATFORM_GBM_KHR) { - if(native_display != (void*)EGL_DEFAULT_DISPLAY || attrib_list != NULL) + if(native_display != (void*)EGL_DEFAULT_DISPLAY) + { + return error(EGL_BAD_PARAMETER, EGL_NO_DISPLAY); // Unimplemented + } + + if(attrib_list && attrib_list[0] != EGL_NONE) { return error(EGL_BAD_ATTRIBUTE, EGL_NO_DISPLAY); // Unimplemented } @@ -1288,7 +1298,7 @@ TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list); EGLAttribs attribs(attrib_list); - return GetPlatformDisplay(platform, native_display, attribs); + return GetPlatformDisplay(platform, native_display, &attribs); } EGLSync CreateSync(EGLDisplay dpy, EGLenum type, const EGLAttrib *attrib_list) @@ -1329,7 +1339,7 @@ TRACE("(EGLDisplay dpy = %p, EGLunum type = %x, EGLint *attrib_list=%p)", dpy, type, attrib_list); EGLAttribs attribs(attrib_list); - return CreateSync(dpy, type, attribs); + return CreateSync(dpy, type, &attribs); } EGLBoolean DestroySyncKHR(EGLDisplay dpy, EGLSyncKHR sync)