1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * (C) Copyright IBM Corporation 2004
3*61046927SAndroid Build Coastguard Worker * All Rights Reserved.
4*61046927SAndroid Build Coastguard Worker *
5*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
6*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
7*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
8*61046927SAndroid Build Coastguard Worker * on the rights to use, copy, modify, merge, publish, distribute, sub
9*61046927SAndroid Build Coastguard Worker * license, and/or sell copies of the Software, and to permit persons to whom
10*61046927SAndroid Build Coastguard Worker * the Software is furnished to do so, subject to the following conditions:
11*61046927SAndroid Build Coastguard Worker *
12*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next
13*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the
14*61046927SAndroid Build Coastguard Worker * Software.
15*61046927SAndroid Build Coastguard Worker *
16*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
19*61046927SAndroid Build Coastguard Worker * IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22*61046927SAndroid Build Coastguard Worker * DEALINGS IN THE SOFTWARE.
23*61046927SAndroid Build Coastguard Worker */
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Worker /**
26*61046927SAndroid Build Coastguard Worker * \file glx_query.c
27*61046927SAndroid Build Coastguard Worker * Generic utility functions to query internal data from the server.
28*61046927SAndroid Build Coastguard Worker *
29*61046927SAndroid Build Coastguard Worker * \author Ian Romanick <[email protected]>
30*61046927SAndroid Build Coastguard Worker */
31*61046927SAndroid Build Coastguard Worker
32*61046927SAndroid Build Coastguard Worker #include "glxclient.h"
33*61046927SAndroid Build Coastguard Worker
34*61046927SAndroid Build Coastguard Worker # include <X11/Xlib-xcb.h>
35*61046927SAndroid Build Coastguard Worker # include <xcb/xcb.h>
36*61046927SAndroid Build Coastguard Worker # include <xcb/glx.h>
37*61046927SAndroid Build Coastguard Worker
38*61046927SAndroid Build Coastguard Worker
39*61046927SAndroid Build Coastguard Worker /**
40*61046927SAndroid Build Coastguard Worker * Exchange a protocol request for glXQueryServerString.
41*61046927SAndroid Build Coastguard Worker */
42*61046927SAndroid Build Coastguard Worker char *
__glXQueryServerString(Display * dpy,CARD32 screen,CARD32 name)43*61046927SAndroid Build Coastguard Worker __glXQueryServerString(Display * dpy, CARD32 screen, CARD32 name)
44*61046927SAndroid Build Coastguard Worker {
45*61046927SAndroid Build Coastguard Worker xcb_connection_t *c = XGetXCBConnection(dpy);
46*61046927SAndroid Build Coastguard Worker xcb_glx_query_server_string_reply_t *reply =
47*61046927SAndroid Build Coastguard Worker xcb_glx_query_server_string_reply(c,
48*61046927SAndroid Build Coastguard Worker xcb_glx_query_server_string(c,
49*61046927SAndroid Build Coastguard Worker screen,
50*61046927SAndroid Build Coastguard Worker name),
51*61046927SAndroid Build Coastguard Worker NULL);
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker if (!reply)
54*61046927SAndroid Build Coastguard Worker return NULL;
55*61046927SAndroid Build Coastguard Worker
56*61046927SAndroid Build Coastguard Worker /* The spec doesn't mention this, but the Xorg server replies with
57*61046927SAndroid Build Coastguard Worker * a string already terminated with '\0'. */
58*61046927SAndroid Build Coastguard Worker uint32_t len = xcb_glx_query_server_string_string_length(reply);
59*61046927SAndroid Build Coastguard Worker char *buf = malloc(len);
60*61046927SAndroid Build Coastguard Worker memcpy(buf, xcb_glx_query_server_string_string(reply), len);
61*61046927SAndroid Build Coastguard Worker free(reply);
62*61046927SAndroid Build Coastguard Worker
63*61046927SAndroid Build Coastguard Worker return buf;
64*61046927SAndroid Build Coastguard Worker }
65*61046927SAndroid Build Coastguard Worker
66*61046927SAndroid Build Coastguard Worker /**
67*61046927SAndroid Build Coastguard Worker * Exchange a protocol request for glGetString.
68*61046927SAndroid Build Coastguard Worker */
69*61046927SAndroid Build Coastguard Worker char *
__glXGetString(Display * dpy,CARD32 contextTag,CARD32 name)70*61046927SAndroid Build Coastguard Worker __glXGetString(Display * dpy, CARD32 contextTag, CARD32 name)
71*61046927SAndroid Build Coastguard Worker {
72*61046927SAndroid Build Coastguard Worker xcb_connection_t *c = XGetXCBConnection(dpy);
73*61046927SAndroid Build Coastguard Worker xcb_glx_get_string_reply_t *reply = xcb_glx_get_string_reply(c,
74*61046927SAndroid Build Coastguard Worker xcb_glx_get_string
75*61046927SAndroid Build Coastguard Worker (c,
76*61046927SAndroid Build Coastguard Worker contextTag,
77*61046927SAndroid Build Coastguard Worker name),
78*61046927SAndroid Build Coastguard Worker NULL);
79*61046927SAndroid Build Coastguard Worker
80*61046927SAndroid Build Coastguard Worker if (!reply)
81*61046927SAndroid Build Coastguard Worker return NULL;
82*61046927SAndroid Build Coastguard Worker
83*61046927SAndroid Build Coastguard Worker /* The spec doesn't mention this, but the Xorg server replies with
84*61046927SAndroid Build Coastguard Worker * a string already terminated with '\0'. */
85*61046927SAndroid Build Coastguard Worker uint32_t len = xcb_glx_get_string_string_length(reply);
86*61046927SAndroid Build Coastguard Worker char *buf = malloc(len);
87*61046927SAndroid Build Coastguard Worker memcpy(buf, xcb_glx_get_string_string(reply), len);
88*61046927SAndroid Build Coastguard Worker free(reply);
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker return buf;
91*61046927SAndroid Build Coastguard Worker }
92*61046927SAndroid Build Coastguard Worker
93