Commit graph

23 commits

Author SHA1 Message Date
Brian Nguyen 226d3a8a24 [GLX] Implement loading vendor libraries
This implements __glXLookupVendorByName(), which is responsible for
checking a hash table for existing loaded vendors with the given name,
and loading the vendor with that name if no existing vendors are found.
This also implements __glXGetGLXDispatchAddress(), which iterates
through this hash table checking whether each loaded vendor supports
dispatching to the given GLX entrypoint.
2013-08-26 11:03:41 -07:00
Brian Nguyen d89a8ee8cf [GLX] Implement __glXLookupVendorByScreen()
This function, which looks up a vendor given a screen number, is used
by several helper functions which look up core GL and GLX dispatch
tables given a screen number, and directly by the API library's make
curent proc. This relies on the (still unimplemented) function
__glXLookupVendorByName().
2013-08-26 11:03:41 -07:00
Brian Nguyen 4c68d3cc1b Add lkdhash.h
This is a simple wrapper around uthash which simplifies read/write
locking around hashtables used by libGLX.
2013-08-26 11:03:41 -07:00
Brian Nguyen cbe7587997 [GLX] Implement caching proc addresses in glXGetProcAddress()
This also doubles as a way to store addresses of locally-exported GLX
functions; we use a pthread_once() callback to initialize the table
with these addresses.
2013-08-26 11:03:41 -07:00
Brian Nguyen 93bb43c5e7 Add uthash commit 2c8cd98e0be93d38ff3340a0fbce300bc6739b08 to src/util
uthash's hashtable implementation will be used by libGLX for storing
various mappings needed for correct dispatching.
2013-08-26 11:03:41 -07:00
Brian Nguyen f0aa610a3d [GLX] Include libglxmapping.c and libglxnoop.h in build
libglxmapping.c implements functions needed for libGLX to map function
calls to vendors for dispatching.

libglxnoop.h contains a pointer to a no-op dispatch table.

These will be re-implemented in a later change.
2013-08-26 11:03:41 -07:00
Brian Nguyen fff1fcc0c0 [GLX] Hook up glvnd_pthread
This sets up GLX to use the glvnd_pthread wrapper library, and
implements real locking around the glXGetClientString() implementation.
2013-08-26 11:03:41 -07:00
Brian Nguyen 8dad6e57f8 Implement glvnd_pthread
This is a wrapper library around libpthread which implements
single-threaded fallbacks in case the API library is loaded in an
application which does not link against pthreads.
2013-08-26 11:03:41 -07:00
Brian Nguyen c51b191aef [GLX] Implement MakeContextCurrentInternal()
This does the work of glXMake{,Context}Current().
2013-08-26 11:03:41 -07:00
Brian Nguyen ec9be3bfac [GLX] Implement glXQueryVersion()
This function directly packs protocol to get the version from
server-side GLX.
2013-08-26 11:03:41 -07:00
Brian Nguyen 8ec20e11d5 [GLX] Implement glXGetClientString()
This takes the "union" (concatenation) of the vendor libraries' client
strings.
2013-08-26 11:03:41 -07:00
Brian Nguyen 3db1e19fcf [GLX] Begin implementing glXMake{,Context}Current()
This makes use of a (still unimplemented) helper function called
MakeContextCurrentInternal() to actually perform the required API
library work for make current.
2013-08-26 11:03:41 -07:00
Brian Nguyen 4ee8d21ae6 Implement tracing
This implements a small tracing convenience library for debugging
purposess.
2013-08-26 11:03:41 -07:00
Brian Nguyen 31817fbb9b [GLX] Define internal APIs needed for looking up mappings, getting current state
- libglxabipriv.h: This is a simple wrapper around libglxabi.h which
  defines the static dispatch table to be the same as the set of
  functions exported by the vendor (they could potentially differ).

- libglxcurrent.h: This defines a current "API state" struct which
  encapsulates the API library's knowledge of the current display,
  read/draw drawables, dispatch tables, and vendor (owning the current
  context).  The glXGetCurrent*() functions are implemented by
  retrieving various fields from this API state.

- libglxmapping.h: This defines a "vendor info" struct which contains
  information about a loaded vendor. It also provides accessor functions
  for retrieving the dispatch table given a screen, and functions for
  adding/removing mappings from various keys (Context, FBConfig,
  Drawable) to screens.

- libglx.c: Replace the dummy GetStaticDispatch() function with calls to
  the API in libglxmapping.h to retrieve the right dispatch table.
2013-08-26 11:03:41 -07:00
Brian Nguyen ac7b7054a5 Add a header file for various utility functions 2013-08-26 11:03:41 -07:00
Brian Nguyen a72dfae91a [GLX] First pass at implementing libGLX.so
Add a makefile to build libGLX.

Update dispatch functions for each of the GLX 1.4 entrypoints
as well as stubs for glXGetProcAddress() and glXMake{Context,}Current()
to use the new vendor library ABI.
2013-08-26 11:03:41 -07:00
Brian Nguyen 99d433e7d1 [GLX] Re-define the libGLX vendor library ABI
This adds additional functionality for interacting with vendor
libraries, required for dispatch table management, GetProcAddress,
and MakeCurrent.
2013-08-26 10:29:08 -07:00
Andy Ritger d85ec3427d Add initial libGLX implementation 2013-08-26 10:29:08 -07:00
Brian Nguyen 492fec0668 Add glvnd_list.h
This is a copy of list.h from xserver commit
74469895e39fa38337f59edd64c4031ab9bb51d8, modified to prevent namespace
clashes with list.h.
2013-08-26 10:29:08 -07:00
Brian Nguyen 3d045c28bc Add mesa GL headers from git commit fa7829c36b78b8ecc42238cbc0a02d1059320c77 2013-08-26 10:29:08 -07:00
Brian Nguyen 05e64e91cb Add autotools infrastructure for libglvnd 2013-08-26 10:29:08 -07:00
Brian Nguyen 843eba20e8 Add placeholder directories for the libglvnd component libraries 2013-08-12 13:12:09 -07:00
Brian Nguyen 1d545f656d Initial commit 2013-08-12 13:11:45 -07:00