On Fri, Sep 9, 2016 at 9:25 PM, Kevin DuBois
<kevin.dub...@canonical.com> wrote:
I'm glad that the topic of EGL platforming was split off, its a
different question than the one I was raising in the "What is a
MirRenderSurface?"
So really the question here is "should Mir have its own
EGL_KHR_platform_mir". I'm not opposed to this in general.
This goes back to the charter that we were given at the start of Mir,
which is to accept drivers as they come to us, especially if they
come to use in binary form with no intention from the driver authors
to change anything about their drivers. The notable example of this
is the Android platform, but the wider intention is to stay flexible
for closed-source binary drivers that have been coming our way.
So if we re-examine that question and decide that we're our own
platform, then we can bolt other technologies on top via the use of
shims and such. It is a bit more work for 'non-mir' platforms,
especially when we have to deal with hybris and creating shim
libraries and such to wrangle things into a mir-platform-interface
(which at this point we don't define).
Mir is *already* our own platform. There are Mir things that you pass
to eglGetDisplay to get an EGLDisplay and Mir things you pass to
eglCreateWindowSurface to get an EGLSurface. We cannot support EGL and
*not* be a platform.
The fact that you can sometimes cast the result of
mir_buffer_stream_get_egl_native_window() to an ANativeWindow* and
sometimes not doesn't change the fact that the return type of
mir_buffer_stream_get_egl_native_window() is Mir's EGLNativeWindowType.
2) Android is really, really special. Android drivers are the only
binary drivers we're *ever* going to be able to use without vendor
support, and that's only because the Android platform was specifically
designed to be plugged into without vendor support.
Closed-source binary drivers have to support *some* platform, and the
set of platforms they can support is {Android, Windows, OS X, X11,
Wayland}. Of those, there's exactly one we could use - Android.
Not being a platform doesn't make it easier for us to support
non-Android closed source drivers. It makes it harder for closed-source
drivers to support *us*.
I'd rather just continue saying that Mir is a WindowManager that can
take plugins to different platforms, as opposed to saying Mir is a
WindowManager and NativeWindowType, and non-mir platforms have to be
adapted to the mir platform. It also is 'staying the course' as far
as the story that we've been promulgating to driver developers.
I don't think it's relevant for driver developers, with, again, the
exception of Android. It's just not possible for us to take a, say,
Xorg-targetting binary driver and support it in Mir without
implementing Xorg; we can't take a Windows-targetting binary driver
without implementing a bunch of the Windows kernel, and we can't take a
Wayland-targetting binary driver without implementing a Wayland
server¹.
Having MirRenderSurface* as our native window type doesn't constrain
driver developers; their existing EGL was going to take an X11 Window*,
or a wl_surface, or a HWND, and there's no way they're going to want to
fake an X11 connection, a Wayland connection, or the Windows kernel
inside their Mir client platform. They'll use Mir API², because
there's literally nothing else they could more easily do.
That only works for Android because it's fundamentally designed for it
- and because Android is fundamentally designed for it, it's no easier
to do in the client platform than in a libEGL.
IMHO, The decision to define our own windowing type is something that
will affect more than just the mir team (it has to do a bit with
strategy), so would be good to get input from a wider audience.
On Thu, Sep 8, 2016 at 10:26 PM, Christopher James Halse Rogers
<ch...@cooperteam.net> wrote:
Thinking about this further, I think we'll *have* to implement a
shim libEGL in the not-too-distant future. We can't propose or use
EGL_KHR_platform_mir unless we implement it on the Android stack.
(And we want to, because it's useful in certain cases).
So I therefore think we *should*:
#define EGLNativeWindowType MirRenderSurface*
#define EGLNativeDisplayType MirConnection*
implement our libEGL shim providing the Mir platform on Android, and
deprecate mir_connection_get_egl_native_display() and not implement
mir_render_surface_get_egl_native_surface().
¹: However much of a good or bad idea that might be ☺.
²: It would be nice if we could give them a fully featured extension
mechanism to use, rather than our current emaciated
mir_platform_operation pseudo-extension mechanism.
--
Mir-devel mailing list
Mir-devel@lists.ubuntu.com
Modify settings or unsubscribe at:
https://lists.ubuntu.com/mailman/listinfo/mir-devel