Mesa (master): glx: implement __glXQueryServerString using XCB

Brian Paul brianp at kemper.freedesktop.org
Wed Nov 26 17:03:58 UTC 2008


Module: Mesa
Branch: master
Commit: 5444424562781a0a40559db40dfe9b97286dc9da
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=5444424562781a0a40559db40dfe9b97286dc9da

Author: RALOVICH, Kristóf <tade60 at freemail.hu>
Date:   Sat Oct 18 16:53:08 2008 +0200

glx: implement __glXQueryServerString using XCB

---

 src/glx/x11/glx_query.c |   31 +++++++++++++++++++++++++++++++
 src/glx/x11/glxclient.h |    4 ++++
 2 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/glx/x11/glx_query.c b/src/glx/x11/glx_query.c
index 56f3495..ef33f7c 100644
--- a/src/glx/x11/glx_query.c
+++ b/src/glx/x11/glx_query.c
@@ -31,6 +31,12 @@
 
 #include "glxclient.h"
 
+#if defined(USE_XCB)
+# include <X11/Xlib-xcb.h>
+# include <xcb/xcb.h>
+# include <xcb/glx.h>
+#endif
+
 /**
  * GLX protocol structure for the ficticious "GXLGenericGetString" request.
  * 
@@ -101,3 +107,28 @@ __glXGetStringFromServer(Display * dpy, int opcode, CARD32 glxCode,
 
    return buf;
 }
+
+#ifdef USE_XCB
+char *
+__glXQueryServerString(Display* dpy,
+                       CARD32 screen,
+                       CARD32 name)
+{
+   xcb_connection_t *c = XGetXCBConnection(dpy);
+   xcb_glx_query_server_string_reply_t* reply =
+      xcb_glx_query_server_string_reply(c,
+                                        xcb_glx_query_server_string(c,
+                                                                    screen,
+                                                                    name),
+                                        NULL);
+
+   /* The spec doesn't mention this, but the Xorg server replies with
+    * a string already terminated with '\0'. */
+   uint32_t len = xcb_glx_query_server_string_string_length(reply);
+   char* buf = Xmalloc(len);
+   memcpy(buf, xcb_glx_query_server_string_string(reply), len);
+   free(reply);
+
+   return buf;
+}
+#endif /* USE_XCB */
diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h
index 02e8750..8f1e691 100644
--- a/src/glx/x11/glxclient.h
+++ b/src/glx/x11/glxclient.h
@@ -742,6 +742,10 @@ extern void __glXInitializeVisualConfigFromTags( __GLcontextModes *config,
 extern char * __glXGetStringFromServer( Display * dpy, int opcode,
     CARD32 glxCode, CARD32 for_whom, CARD32 name );
 
+#ifdef USE_XCB
+extern char * __glXQueryServerString(Display* dpy, CARD32 screen, CARD32 name);
+#endif
+
 extern char *__glXstrdup(const char *str);
 
 




More information about the mesa-commit mailing list