This release introduces the EGL back end, a feature that required many
hundreds of hours of labor over the past five years as well as financial
sponsorship from four different organizations.
As most of you know, VirtualGL intercepts GLX, OpenGL, X11, and XCB
function calls made by 3D applications. VGL primarily does this in
order to:
1. redirect OpenGL rendering from X windows into corresponding
GPU-resident off-screen buffers, which
a. prevents OpenGL commands and data from traversing the network
when using a client-side X server
b. prevents OpenGL commands and data from being rendered by an
unaccelerated OpenGL implementation when using a server-side X proxy
c. allows a GPU to be simultaneously shared by multiple users
2. determine when a rendered frame should be read back from the GPU and
transported to the 2D X server.
Historically, it was necessary for VGL to modify the GLX function calls
made by 3D applications on the front end and redirect them, mostly on a
1:1 basis, to a GPU-attached X server (the "3D X server") on the back
end. This was necessary because going through such an X server was the
only way that VirtualGL could create and redirect OpenGL rendering into
GPU-resident off-screen buffers. However, with the advent of the EGL
API and the EGL_EXT_platform_device extension, it is now possible to
create and redirect OpenGL rendering into GPU-resident off-screen
buffers using a DRI device, so a 3D X server is no longer necessary.
Some caveats:
- Because EGL does not support multi-buffered Pbuffer surfaces, it was
necessary for the new EGL back end to emulate multi-buffered Pbuffers
using OpenGL renderbuffer objects (RBOs), which necessitated emulating
other GLX features (FB configs, buffer swapping, etc.) Thus, the EGL
back end is much more complex than the GLX back end, which increases the
likelihood of application compatibility issues. Although the EGL back
end has been tested extensively in the lab, it has not been tested with
very many real-world applications. Please test it with your favorite
OpenGL application and file a bug report if you encounter any issues:
https://github.com/VirtualGL/virtualgl/issues/new
- The EGL back end does not yet support all of the GLX extensions
supported by the GLX back end
(
https://github.com/VirtualGL/virtualgl/issues/134), nor does it yet
support all of the named framebuffer functions in OpenGL 4.5
(
https://github.com/VirtualGL/virtualgl/issues/136). Funding is needed
in order to complete those features.
- The EGL back end does not support glXCopyContext(), accumulation
buffers, aux buffers, and indirect OpenGL contexts. These are all
obsolete features, but some applications may still require them.
The GLX back end will continue to be maintained for backward
compatibility purposes, but it is my hope that it can eventually be
relegated for use only with legacy applications.
How to help:
- Completing this release required borrowing against most of the
2021/2022 VirtualGL General Fund, so I have no further funding to work
on new VirtualGL features (including the aforementioned EGL back end
improvements) for the next year. If you or your organization would like
to donate money toward the current funding deficit, which will greatly
improve my ability to continue moving VirtualGL forward over the next
year, or if you would like to fund some of the aforementioned
enhancements, then please contact me.
- Individual donations can be made through PayPal
(
https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=information%40virtualgl%2eorg&lc=US&item_name=The%20VirtualGL%20General%20Fund&no_note=0¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHostedGuest)
or Venmo (@dcommander) and are always appreciated. Every dollar goes
toward developing VirtualGL.
- Anything you can do to help test the GLX/OpenGL conformance of the EGL
back end will be greatly appreciated. I have tried to bring up the
Khronos OpenGL conformance suite and Piglit, but so far I have been
unsuccessful at getting either to run on any of my machines.
Official binaries and source tarball are here:
https://sourceforge.net/projects/virtualgl/files/2.6.90%20%283.0beta1%29/
Change log is here:
https://github.com/VirtualGL/virtualgl/releases/tag/3.0beta1