This is an alternative to !179 (closed). This MR provides the same basic functionality, but doesn't make any breaking changes to the GLXVND ABI.
The first part is the same: It adds a separate (screen -> vendor) mapping for each client. It defaults to using the existing global mapping, and there's a new function in
GlxServerExports that lets a driver change the mapping for a particular client.
To dispatch a request based on a normal window XID (the only XID's that GLX has to deal with but aren't defined through GLX requests), it'll still use the vendor mapping from the client that sent the request. Since
GlxServerExports::getXIDMap doesn't take a ClientPtr argument, though, it has to store the ClientPtr in a global variable instead.
This also doesn't include a new GLX extension, so any driver that wants to use this would need to define its own protocol.