egl_dri2: Fix initialization with EGL_DEFAULT_DISPLAY
[mesa.git] / src / glx / x11 / glx_query.c
index ef33f7c403b71cdcfd5d83344552f7321f3513f7..efad13d376e817e1f77b63954337561bdaedd200 100644 (file)
@@ -25,7 +25,7 @@
 /**
  * \file glx_query.c
  * Generic utility functions to query internal data from the server.
- * 
+ *
  * \author Ian Romanick <idr@us.ibm.com>
  */
 
 # include <xcb/glx.h>
 #endif
 
+#ifdef USE_XCB
+
+/**
+ * Exchange a protocol request for glXQueryServerString.
+ */
+char *
+__glXQueryServerString(Display * dpy, int opcode, 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;
+}
+
+/**
+ * Exchange a protocol request for glGetString.
+ */
+char *
+__glXGetString(Display * dpy, int opcode, CARD32 contextTag, CARD32 name)
+{
+   xcb_connection_t *c = XGetXCBConnection(dpy);
+   xcb_glx_get_string_reply_t *reply = xcb_glx_get_string_reply(c,
+                                                                xcb_glx_get_string
+                                                                (c,
+                                                                 contextTag,
+                                                                 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_get_string_string_length(reply);
+   char *buf = Xmalloc(len);
+   memcpy(buf, xcb_glx_get_string_string(reply), len);
+   free(reply);
+
+   return buf;
+}
+
+#else
+
 /**
  * GLX protocol structure for the ficticious "GXLGenericGetString" request.
- * 
+ *
  * This is a non-existant protocol packet.  It just so happens that all of
  * the real protocol packets used to request a string from the server have
  * an identical binary layout.  The only difference between them is the
@@ -63,7 +115,7 @@ typedef struct GLXGenericGetString
  * Query the Server GLX string.
  * This routine will allocate the necessay space for the string.
  */
-char *
+static char *
 __glXGetStringFromServer(Display * dpy, int opcode, CARD32 glxCode,
                          CARD32 for_whom, CARD32 name)
 {
@@ -108,27 +160,18 @@ __glXGetStringFromServer(Display * dpy, int opcode, CARD32 glxCode,
    return buf;
 }
 
-#ifdef USE_XCB
 char *
-__glXQueryServerString(Display* dpy,
-                       CARD32 screen,
-                       CARD32 name)
+__glXQueryServerString(Display * dpy, int opcode, 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 __glXGetStringFromServer(dpy, opcode,
+                                   X_GLXQueryServerString, screen, name);
+}
 
-   return buf;
+char *
+__glXGetString(Display * dpy, int opcode, CARD32 contextTag, CARD32 name)
+{
+   return __glXGetStringFromServer(dpy, opcode, X_GLsop_GetString,
+                                   contextTag, name);
 }
+
 #endif /* USE_XCB */