New wayland backend for threaded EGL/GLSL emulator

Jonas Kulla nyocurio at gmail.com
Sun Feb 17 09:54:00 PST 2013


2013/2/17 Scott Moreau <oreaus at gmail.com>

> Hi,
>
> For the past week, I've been working on porting Dolphin (the gamecube
> emulator)
> to run as a wayland client. I am pleased to announce the code is now in a
> working
> state. There are a few issues but fairly minor, considering this is a
> threaded
> EGL/GLSL application that works as an X client or a Wayland client. The
> same
> binary can be run in X or Weston, selectable at runtime.
>
> Since dolphin is a threaded application, timing is critical.
> I suspect this is related to the bug I ran into, outlined here
> https://bugs.freedesktop.org/show_bug.cgi?id=60942
> For now, the wayland mainloop seems to be relatively stable using
> roundtrips and
> usleep. Hopefully I can track down what's going on there so it can
> dispatch as intended.
>
> This is quite possibly the first real world application to run as a
> threaded
> wayland-egl client. It is also possibly the first standalone client to
> support
> X and Wayland platforms simultaneously.
>
>
> Following is a summary of the current status of the Wayland client
> features:
>
> What works:
>
> Build time configuration switches for X and Wayland support
> Run time platform switch configurable with environment variable
>
> Core Functionality:
> Video output
> Audio output
> Keyboard input
> Joystick input
>
> UI Functionality:
> Toggle Fullscreen
> Pause/Resume Emulation
> Save/Load State
> Screenshot
> Esc to Exit
>
>
> What doesn't work:
>
> Mouse input
> Resizing the window
>
>
>
> More Information:
>
> Keys:
>
> Exit:                   Esc
> Toggle Fullscreen:      'f' or Alt+Enter
> Pause:                  'p'
> Save State:             Shift+F1-8
> Load State:             F1-8
>
>
> Testing:
>
> 1) Dolphin has high system requirements for cpu and gpu. It is recommended
> to first
>    install Dolphin from the official channels configured with wxWidgets
> frontend in X.
>    This will let you get familiarized and see if it works at all with your
> system.
>
> 2) Grab the code from https://github.com/soreau/dolphin-emu wayland-egl
> branch and build it.
>
> prefix=$HOME/wayland
>
> export PKG_CONFIG_PATH=$prefix/lib/pkgconfig
>
>
> git checkout git://github.com/soreau/dolphin-emu.git -b wayland-egl
> cd dolphin-emu
> mkdir build
> cd build
>
> cmake ..                \
>     -DCMAKE_INSTALL_PREFIX=$prefix    \
>     -DCMAKE_PREFIX_PATH=$prefix    \
>     -DUSE_EGL=1 -DDISABLE_WX=1    \
>     -DUSE_X11=1 -DUSE_WAYLAND=1    \
>     -DCMAKE_BUILD_TYPE=Debug    \
>     -DCMAKE_VERBOSE_MAKEFILE=0    \
>
> make
> make install
>
> 3) Run it:
>
> LD_LIBRARY_PATH=$prefix/lib $prefix/bin/dolphin-emu-nogui -e /path/to/gcm
>
>
> Notes:
>
> The platform may be selected by setting the environment variable
> DOLPHIN_EGL_PLATFORM to "x11" or "wayland".
> If this environment variable is not set, it will attempt to select an
> appropriate platform automatically.
> Gamepad devices with force feedback capabilities work when Dolphin is
> built against SDL2.
> Resizing shouldn't be too difficult to implement.
> This is a first attempt and WIP so the code isn't perfect and there may be
> some bugs.
>
> Issues:
>
> Dolphin seems to produce invalid image files for screenshots, though
> weston screenshooter works fine even when in fullscreen.
> The emulator segfaults on exit in wayland, after a hack to work around
> stalling on exit.
> There is a bug in mesa with GLSL using UBO's that affects Sandybridge. It
> causes relatively minor rendering artifacts and does not inhibit
> performance.
>
> Video Clip:
>
> http://www.youtube.com/watch?v=3ZdXu1VM_VQ&feature=youtu.be
>
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
>
Wow, nice work!! Are you using SDL for joystick input?
Something I've been wondering for some time now is wether wayland
can support native joystick events, as there is an evdev driver for it.

In SFML for example, if it wasn't for joystick input, the input thread could
just sleep waiting for new events to come in, but it has to continually poll
the joystick state. This could be solved very elegantly I think by just
having
a "joystick" or "gaming" protocol extension with native events.

 - Jonas
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20130217/f80dbb37/attachment-0001.html>


More information about the wayland-devel mailing list