Does Mir have to pretend to be SurfaceFlinger?
Kevin DuBois
kevin.dubois at canonical.com
Fri Sep 9 11:33:03 UTC 2016
On Thu, Sep 8, 2016 at 8:13 PM, Christopher James Halse Rogers <
chris at cooperteam.net> wrote:
> On Fri, Sep 9, 2016 at 4:18 AM, Cemil Azizoglu <
> cemil.azizoglu at canonical.com> wrote:
>
>>
>>> We quite literally cast MirRenderSurface* to EGLNativeWindowSurface in
>>> the current WIP:
>>> http://bazaar.launchpad.net/%7Ecemil-azizoglu/mir/mir-render
>>> -surface-v3/view/head:/playground/eglflash_render_surface.c#L112
>>>
>>
>> Perhaps, I should point out that our EGLNativeWindowType is not (and
>> cannot be) 'MirRenderSurface'. It's void*. This is because we (have to)
>> pretend to be other platforms (Android).
>>
>
> Hm, this got me thinking.
>
> *Does* Mir need to pretend to be SurfaceFlinger?
>
> As I understand it, the only relevant constraint is that we need to be
> able to bring up Unity8 and USC using unmodified Android drivers.
> - This means we need to use Android libEGL at *some* point in the stack.
> - We (as in Ubuntu) control what libEGL.so.1 resolves to.
> + This does *not* have to be Android's libEGL - indeed, it's currently
> *not* Android's libEGL, it's libhybris' wrapper.
> - This means we have the opportunity to interpose code between EGL-using
> clients and Android's EGL.
>
> I looked at the code in platforms/android/client, and there doesn't appear
> to be any code there that can *only* be implemented inside a platform
> module. Indeed, it looks like the NBS API was basically designed to allow
> code linking against libmirclient to do exactly what is done inside the
> EGLNativeWindow producing bits of the Android platform.
>
Right. EGL windowing support can be built on top of NBS, and so can
multimedia, vulkan, nested passthrough, software rendering.
> So I think we *could* #define EGLNativeWindowType MirRenderSurface* (and
> likewise #define EGLNativeDisplayType MirConnection*) without a great deal
> of effort required. Mostly this would require moving code from
> platforms/android/client into a new libEGL that implements eglGetDisplay()
> and eglCreateWindowSurface() and links to the hybris libEGL to satisfy all
> other EGL symbols.
>
> This would make Mir look like all other EGL platforms. To create an
> EGLDisplay you'd eglGetDisplay(connection); to create an EGLSurface you'd
> eglCreateWindowSurface(render_surface, ...).
>
> I'm not sure if this is worth doing, but it does not appear that it would
> be terribly difficult to do.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.ubuntu.com/archives/mir-devel/attachments/20160909/3ce69f22/attachment.html>
More information about the Mir-devel
mailing list