[Mesa-dev] RFC - libglvnd and GLXVND vendor enumeration to facilitate GLX multi-vendor PRIME GPU offload

Adam Jackson ajax at nwnk.net
Fri Feb 8 20:01:33 UTC 2019

On Fri, 2019-02-08 at 10:19 -0800, Andy Ritger wrote:

> (1) If configured for PRIME GPU offloading (environment variable or
>     application profile), client-side libglvnd could load the possible
>     libGLX_${vendor}.so libraries it finds, and call into each to
>     find which vendor (and possibly which GPU) matches the specified
>     string. Once a vendor is selected, the vendor library could optionally
>     tell the X server which GLX vendor to use server-side for this
>     client connection.

I'm not a huge fan of the "dlopen everything" approach, if it can be
avoided. I think I'd rather have a new enum for GLXQueryServerString
that elaborates on GLX_VENDOR_NAMES_EXT (perhaps GLX_VENDOR_MAP_EXT),
with the returned string a space-delimited list of <profile>:<vendor>.
libGL could accept either a profile or a vendor name in the environment
variable, and the profile can be either semantic like
performance/battery, or a hardware selector, or whatever else.

This would probably be a layered extension, call it GLX_EXT_libglvnd2,
which you'd check for in the (already per-screen) server extension
string before trying to actually use.

> At the other extreme, the server could do nearly all the work of
> generating the possible __GLX_VENDOR_LIBRARY_NAME strings (with the
> practical downside of each server-side GLX vendor needing to enumerate
> the GPUs it can drive, in order to generate the hardware-specific
> identifiers).

I don't think this downside is much of a burden? If you're registering
a provider other than Xorg's you're already doing it from the DDX
driver (I think? Are y'all doing that from your libglx instead?), and
when that initializes it already knows which device it's driving.

- ajax

More information about the xorg-devel mailing list