summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/glx/x11/glx_query.c87
-rw-r--r--src/glx/x11/glxclient.h6
2 files changed, 72 insertions, 21 deletions
diff --git a/src/glx/x11/glx_query.c b/src/glx/x11/glx_query.c
index ef33f7c403b..2ad2b823135 100644
--- a/src/glx/x11/glx_query.c
+++ b/src/glx/x11/glx_query.c
@@ -37,6 +37,62 @@
# include <xcb/glx.h>
#endif
+#ifdef USE_XCB
+
+/**
+ * Exchange a protocol request for glXQueryServerString.
+ */
+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;
+}
+
+/**
+ * Exchange a protocol request for glGetString.
+ */
+char *
+__glXGetString(Display* dpy,
+ 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.
*
@@ -108,27 +164,26 @@ __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);
+ GLXContext gc = __glXGetCurrentContext();
+ return __glXGetStringFromServer(dpy, gc->majorOpcode,
+ X_GLXQueryServerString,
+ screen, name);
+}
- return buf;
+char *
+__glXGetString(Display* dpy,
+ CARD32 contextTag,
+ CARD32 name)
+{
+ GLXContext gc = __glXGetCurrentContext();
+ return __glXGetStringFromServer(dpy, gc->majorOpcode, X_GLsop_GetString,
+ contextTag, name);
}
+
#endif /* USE_XCB */
+
diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h
index 8f1e69154ac..361ab70841c 100644
--- a/src/glx/x11/glxclient.h
+++ b/src/glx/x11/glxclient.h
@@ -739,12 +739,8 @@ extern void _XSend(Display*, const void*, long);
extern void __glXInitializeVisualConfigFromTags( __GLcontextModes *config,
int count, const INT32 *bp, Bool tagged_only, Bool fbconfig_style_tags );
-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 * __glXGetString(Display* dpy, CARD32 screen, CARD32 name);
extern char *__glXstrdup(const char *str);