Waffle
Chad Versace
XDC 2012,
- Problems in testing Mesa
- Piglit is Mesa's testsuite for OpenGL, OpenCL, EGL, and GLX.
- (We'll restrict our attention to the GL tests in this talk).
- Problem Descriptions
- GLUT
- (We'll mainly focus on fixing the GLUT problem in this talk).
- Piglit uses GLUT for GL tests.
- GLUT is no longer sufficient.
- On Linux, GLUT supports only GLX and legacy GL contexts.
- Unwelcome consequences:
! Impossible to write Piglit tests for GL core profile.
! Piglit contains nearly no GLES tests.
- Piglit GL tests do not run on X/EGL, Wayland, Android.
- GLEW
- Piglit uses GLEW for wrangling GL extensions and dynamic function resolution (dlsym, glXGetProcAddress).
- GLEW is no longer sufficient.
- GLEW does not manage GL >= 3.0 well.
! GLEW does not support GLES, and cannot easily be extended.
- Solution
- Qualities of an ideal solution:
1. Able to build each test once, then run it on any Linux window
system (GLX, X/EGL, Wayland).
2. Able to multiplex some tests over GL API's.
- That is, for a subset of tests, build each test once, then run
it under each of GL, GLES2, GLES3, etc.
- I'm not aware of anyone attemtping this before.
3. Beneficial to projects other than Piglit.
- Requires implementing the solution in a Piglit-independent library.
- Status
- Solution for #1 is complete, uses libwaffle.
- Solution for #2 is under development.
- Support for GL core profile tests arriving before mid-October.
- Waffle
- Description (What does it do today?)
- A cross-platform C library that allows GL applications to defer choice
of window system until runtime.
- Its API closely resembles EGL.
- Contains additional functions...
- for window creation.
- for dlsym'ing libGL, libGLES1, libGLES2 in a cross-platform way.
- for getting at the underlying native objects.
- This allows clients to implement behavior, such as input, that
is outside of Waffle's scope.
- Supported platforms:
- Linux: GLX, X/EGL, Wayland (complete)
- Android (experimental)
- Apple (experimental)
- No MS Windows yet
- Demo
- Focus and Purpose
- Waffle is not GLUT, is not SDL.
- (see video)
- Examples
- Simple GL rendering:
- http://people.freedesktop.org/~chadversary/waffle/examples/simple-x11-egl.html
- Getting at native objects:
// Assume we've initialized the Waffle with X/EGL.
struct waffle_window *window = waffle_window_create(...);
struct waffle_x11_egl_window *n_window = waffle_window_get_native(window)->x11_egl;
Display *xlib_dpy = n_window->display.xlib_display;
EGLDisplay *egl_dpy = n_window->display.egl_display;
Window xlib_window = n_window->xlib_window;
EGLSurface egl_surface = n_window->egl_surface;
- Future Direction
- KMS backend with libgbm.
- Will allow testing Piglit on headless servers in QA infrastructure.
- On new Intel hardware, will allow Intel Linux OpenGL team to
test GL drivers on new hardware before the display is fully
working.
- GL dispatch
- A dynamic dispatch mechanism for all GL API's that handles GL extensions.
- A modern replacement for GLEW.
waffle
最新推荐文章于 2024-05-10 09:35:41 发布