-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I'm seeking feedback on an EGL extension that I'm drafting. The ideas have already been discussed at Khronos meetings to a good reception, but I want feedback from Mesa developers too.
Summary - ------- The extension, tentatively named EGL_EXT_platform_display, enables EGL clients to specify to which platform (X11, Wayland, gbm, etc) an EGL resource (EGLDisplay, EGLSurface, etc) belongs when the resource is derived from a platform-native type. As a corollary, the extension enables the creation of EGL resources from different platforms within a single process. Feedback - -------- I'd like to hear feeback about the details below. Do you see any potential problems? Is it lacking a feature that you believe should be present? Details - ------- The draft extension defines the following new functions: // This is the extenion's key function. // EGLDisplay eglGetPlatformDisplayEXT(EGLenum platform, void *native_display); // The two eglCreate functions below differ from their core counterparts // only in their signature. The EGLNative types are replaced with void*. // This makes the signature agnostic to which platform the native resource // belongs. EGLSurface eglCreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list); EGLSurface eglCreatePlatformPixmapSurface(EGLDisplay dpy, EGLConfig config, void *native_pixmap, const EGLint *attrib_list); Valid values for `platform` are defined by layered extensions. For example, EGL_EXT_platform_x11 defines EGL_PLATFORM_X11, and EGL_EXT_platform_wayland defines EGL_PLATFORM_WAYLAND. Also, the layered extensions specify which native types should be passed as the native parameters. For example, EGL_EXT_platform_wayland specifies that, when calling eglCreatePlatformWindowSurfaceEXT with a display that was derived from a Wayland display, then the native_window parameter must be `struct wl_egl_window*`. Analogously, EGL_EXT_platform_x11 specifies that native_window must be `Window*`. Example Code for X11 - -------------------- // The internal representation of the egl_dpy, created below, remembers that // it was derived from an Xlib display. Display *xlib_dpy = XOpenDisplay(NULL); EGLDisplay *egl_dpy = eglGetPlatformDisplayEXT(EGL_PLATFORM_X11, xlib_dpy); EGLConfig config; eglChooseConfig(egl_dpy, &config, ...); // Since egl_dpy remembers that it was derived from an Xlib display, when // creating the EGLSurface below libEGL internally casts the // `(void*) &xlib_win` to `Window*`. Window xlib_win = XCreateWindow(xlib_dpy, ...); EGLSurface egl_surface = eglCreatePlatformWindowSurfaceEXT(egl_dpy, config, (void*) &xlib_win, NULL); Example Code for Wayland - ------------------------ // The internal representation of the egl_dpy, created below, remembers that // it was derived from a Wayland display. struct wl_display *wl_dpy = wl_display_connect(NULL); EGLDisplay *egl_dpy = eglGetPlatformDisplay(EGL_PLATFORM_WAYLAND, wl_dpy); EGLConfig config; eglChooseConfig(egl_dpy, &config, ...); // Since egl_dpy remembers that it was derived from an Wayland display, when // creating the EGLSurface below libEGL internally casts the // `(void*) wl_win` to `struct wl_egl_window*`. struct wl_egl_window *wl_win = wl_egl_window_create(...); EGLSurface egl_surface = eglCreateWindowSurface(egl_dpy, config, (void*) wl_win, NULL); -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iQIcBAEBAgAGBQJRI6ZfAAoJEAIvNt057x8iIiEP/0ikLSoTa7sy7bAi5lRasFUZ /fKhktZbf062K6PNETS+kS5xiKcEnaJ7FnEjnga/ao2Lbp+7+7ArI0v8vKEpekS0 Ln9oQs7fXzp9dD5+YZT0ICpB7oanZsVy7VDBEq5GcH5zuHGVL1PwiPNKT4OEUi5R 7+j2UZ0kCWVGQS0vB0onoLHeSwud6mVURSvvOghhza3f32QgUDuw3XsEdrmpx0Bw WMROUDgcpYFBJ8lQ5GO+yFkPPnWytwspECveMQXUg/M63s+UADfWFvEuOE92yddb SMviKzlKzbG+ZZffvOBy4lt99NCO1oZ+FeR0Uc5m9wT3dpF0GDILR+sH+eemAbxn JicvhPycgd9mfjtsG47+Y1atkdkh7nBIbk5qrkCq4eMxVVSeQLQ8PdBUJUQA1JI+ YIM4/+E4iFi8ynCIcWKXccnFnV+POHizIDPwxQHp7cbuOXvI8tQhxf0H83Qm3Gl+ amfRgJWj1nUGtz4UQK5DEq6KfxRIy84/OvrWd9fw610sFAALXiSZC2b0wmz0Alv4 bkQ3LxIJtN9Nyabcm2B1eXtl1SYFRwx24P0T+2IL4INCvUFPJVtzfORo8pWLIMYm kA8p+0DSgrEkBE0D6bgluGhTjsWejyHoqoNG95YIcEGPnNJf12cS36oJSOttvnz2 BXfyGn39yyRGUIrRgpUR =MP7i -----END PGP SIGNATURE----- _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev