[PATCH xserver 3/5] glx: Import glxvnd server module

Kyle Brenneman kbrenneman at nvidia.com
Wed Aug 30 19:42:06 UTC 2017



On 08/30/2017 12:58 PM, Adam Jackson wrote:
> From: Kyle Brenneman <kbrenneman at nvidia.com>
>
> This is based on an out-of-tree module written by Kyle:
>
> https://github.com/kbrenneman/libglvnd/tree/server-libglx
>
> I (ajax) did a bunch of cosmetic fixes, ported it off xfree86 API,
> added request length checks, and fixed a minor bug or two.
>
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
>   glx/meson.build          |  21 ++
>   glx/vnd_dispatch_stubs.c | 510 +++++++++++++++++++++++++++++++++++++++++++++++
>   glx/vndcmds.c            | 479 ++++++++++++++++++++++++++++++++++++++++++++
>   glx/vndext.c             | 265 ++++++++++++++++++++++++
>   glx/vndserver.h          | 117 +++++++++++
>   glx/vndservermapping.c   | 196 ++++++++++++++++++
>   glx/vndservervendor.c    |  91 +++++++++
>   glx/vndservervendor.h    |  68 +++++++
>   include/Makefile.am      |   1 +
>   include/glxvndabi.h      | 279 ++++++++++++++++++++++++++
>   include/meson.build      |   1 +
>   11 files changed, 2028 insertions(+)
>   create mode 100644 glx/vnd_dispatch_stubs.c
>   create mode 100644 glx/vndcmds.c
>   create mode 100644 glx/vndext.c
>   create mode 100644 glx/vndserver.h
>   create mode 100644 glx/vndservermapping.c
>   create mode 100644 glx/vndservervendor.c
>   create mode 100644 glx/vndservervendor.h
>   create mode 100644 include/glxvndabi.h

Note that there's a few parts of that interface that I'm still working 
on, so I wouldn't mind some feedback on what people think about it. Off 
the top of my head:

The allocateServerImports and freeServerImports functions are there to 
make it easier to extend the GlxServerImports struct later without 
breaking backward compatibility. Would it be better/easier to just give 
the expected size of the GlxServerImports struct and let the caller 
allocate it?

The getVendorForScreen function takes a ClientPtr parameter. I included 
that so that at some point in the future, it might be able to handle 
different (screen -> vendor) mappings for different clients. But, that 
means it doesn't match up with the setScreenVendor function. I'm not 
sure what the best solution is here.

Passing the vendor-private pointer in and out of 
GlxServerImports::makeCurrent as a pointer and pointer-to-pointer feels 
awkward to me, but I haven't come up with anything better yet. It also 
doesn't have any way to change the pointer before the next makeCurrent 
call, though I don't know if that's likely to be needed.

Also worth noting is that in the libglvnd tree, I've got a script to 
generate the dispatch stubs in vnd_dispatch_stubs.c.

-Kyle



More information about the xorg-devel mailing list