1f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/*
2f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Copyright (c) 2009 Apple Inc.
3f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
4f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Permission is hereby granted, free of charge, to any person
5f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org obtaining a copy of this software and associated documentation files
6f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org (the "Software"), to deal in the Software without restriction,
7f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org including without limitation the rights to use, copy, modify, merge,
8f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org publish, distribute, sublicense, and/or sell copies of the Software,
9f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org and to permit persons to whom the Software is furnished to do so,
10f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org subject to the following conditions:
11f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
12f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org The above copyright notice and this permission notice shall be
13f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org included in all copies or substantial portions of the Software.
14f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
15f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org NONINFRINGEMENT.  IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
19f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org DEALINGS IN THE SOFTWARE.
23f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
24f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org Except as contained in this notice, the name(s) of the above
25f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org copyright holders shall not be used in advertising or otherwise to
26f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org promote the sale, use or other dealings in this Software without
27f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org prior written authorization.
28f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org*/
29f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
30f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdio.h>
31f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <stdlib.h>
32f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <pthread.h>
33f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <fcntl.h>
34f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <sys/types.h>
35f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <sys/mman.h>
36f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <unistd.h>
37f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include <assert.h>
38f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "apple_glx.h"
39f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "apple_cgl.h"
40f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "apple_visual.h"
41f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "apple_glx_drawable.h"
42f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "appledri.h"
43f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org#include "glxconfig.h"
44f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
45f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic bool pixmap_make_current(struct apple_glx_context *ac,
46f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                struct apple_glx_drawable *d);
47f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
48f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void pixmap_destroy(Display * dpy, struct apple_glx_drawable *d);
49f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
50f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic struct apple_glx_drawable_callbacks callbacks = {
51f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   .type = APPLE_GLX_DRAWABLE_PIXMAP,
52f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   .make_current = pixmap_make_current,
53f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   .destroy = pixmap_destroy
54f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org};
55f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
56f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic bool
57f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpixmap_make_current(struct apple_glx_context *ac,
58f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    struct apple_glx_drawable *d)
59f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
60f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   CGLError cglerr;
61f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct apple_glx_pixmap *p = &d->types.pixmap;
62f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
63f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   assert(APPLE_GLX_DRAWABLE_PIXMAP == d->type);
64f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
65f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   cglerr = apple_cgl.set_current_context(p->context_obj);
66f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
67f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (kCGLNoError != cglerr) {
68f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      fprintf(stderr, "set current context: %s\n",
69f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org              apple_cgl.error_string(cglerr));
70f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return true;
71f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
72f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
73f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   cglerr = apple_cgl.set_off_screen(p->context_obj, p->width, p->height,
74f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                     p->pitch, p->buffer);
75f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
76f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (kCGLNoError != cglerr) {
77f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      fprintf(stderr, "set off screen: %s\n", apple_cgl.error_string(cglerr));
78f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
79f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return true;
80f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
81f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
82f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!ac->made_current) {
83f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      apple_glapi_oglfw_viewport_scissor(0, 0, p->width, p->height);
84f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      ac->made_current = true;
85f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
86f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
87f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return false;
88f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
89f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
90f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgstatic void
91f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgpixmap_destroy(Display * dpy, struct apple_glx_drawable *d)
92f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
93f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct apple_glx_pixmap *p = &d->types.pixmap;
94f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
95f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (p->pixel_format_obj)
96f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      (void) apple_cgl.destroy_pixel_format(p->pixel_format_obj);
97f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
98f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (p->context_obj)
99f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      (void) apple_cgl.destroy_context(p->context_obj);
100f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
101f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   XAppleDRIDestroyPixmap(dpy, p->xpixmap);
102f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
103f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (p->buffer) {
104f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (munmap(p->buffer, p->size))
105f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         perror("munmap");
106f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
107f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (-1 == close(p->fd))
108f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         perror("close");
109f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
110f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      if (shm_unlink(p->path))
111f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         perror("shm_unlink");
112f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
113f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
114f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   apple_glx_diagnostic("destroyed pixmap buffer for: 0x%lx\n", d->drawable);
115f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
116f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
117f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Return true if an error occurred. */
118f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool
119f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgapple_glx_pixmap_create(Display * dpy, int screen, Pixmap pixmap,
120f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                        const void *mode)
121f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
122f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct apple_glx_drawable *d;
123f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct apple_glx_pixmap *p;
124f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   bool double_buffered;
125f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   bool uses_stereo;
126f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   CGLError error;
127f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   const struct glx_config *cmodes = mode;
128f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
129f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (apple_glx_drawable_create(dpy, screen, pixmap, &d, &callbacks))
130f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return true;
131f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
132f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   /* d is locked and referenced at this point. */
133f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
134f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p = &d->types.pixmap;
135f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
136f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p->xpixmap = pixmap;
137f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p->buffer = NULL;
138f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
139f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (!XAppleDRICreatePixmap(dpy, screen, pixmap,
140f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              &p->width, &p->height, &p->pitch, &p->bpp,
141f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                              &p->size, p->path, PATH_MAX)) {
142f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->unlock(d);
143f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->destroy(d);
144f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return true;
145f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
146f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
147f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p->fd = shm_open(p->path, O_RDWR, 0);
148f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
149f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (p->fd < 0) {
150f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      perror("shm_open");
151f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->unlock(d);
152f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->destroy(d);
153f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return true;
154f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
155f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
156f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p->buffer = mmap(NULL, p->size, PROT_READ | PROT_WRITE,
157f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                    MAP_FILE | MAP_SHARED, p->fd, 0);
158f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
159f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (MAP_FAILED == p->buffer) {
160f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      perror("mmap");
161f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->unlock(d);
162f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->destroy(d);
163f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return true;
164f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
165f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
166f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   apple_visual_create_pfobj(&p->pixel_format_obj, mode, &double_buffered,
167f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                             &uses_stereo, /*offscreen */ true);
168f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
169f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   error = apple_cgl.create_context(p->pixel_format_obj, NULL,
170f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                    &p->context_obj);
171f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
172f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (kCGLNoError != error) {
173f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->unlock(d);
174f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->destroy(d);
175f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      return true;
176f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
177f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
178f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   p->fbconfigID = cmodes->fbconfigID;
179f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
180f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   d->unlock(d);
181f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
182f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   apple_glx_diagnostic("created: pixmap buffer for 0x%lx\n", d->drawable);
183f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
184f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return false;
185f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
186f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
187f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool
188f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgapple_glx_pixmap_query(GLXPixmap pixmap, int attr, unsigned int *value)
189f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
190f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct apple_glx_drawable *d;
191f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   struct apple_glx_pixmap *p;
192f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   bool result = false;
193f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
194f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   d = apple_glx_drawable_find_by_type(pixmap, APPLE_GLX_DRAWABLE_PIXMAP,
195f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                       APPLE_GLX_DRAWABLE_LOCK);
196f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
197f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   if (d) {
198f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      p = &d->types.pixmap;
199f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
200f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      switch (attr) {
201f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GLX_WIDTH:
202f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *value = p->width;
203f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         result = true;
204f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
205f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
206f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GLX_HEIGHT:
207f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *value = p->height;
208f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         result = true;
209f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
210f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
211f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      case GLX_FBCONFIG_ID:
212f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         *value = p->fbconfigID;
213f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         result = true;
214f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org         break;
215f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      }
216f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
217f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org      d->unlock(d);
218f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   }
219f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
220f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return result;
221f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
222f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org
223f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org/* Return true if the type is valid for pixmap. */
224f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgbool
225f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.orgapple_glx_pixmap_destroy(Display * dpy, GLXPixmap pixmap)
226f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org{
227f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org   return !apple_glx_drawable_destroy_by_type(dpy, pixmap,
228f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org                                              APPLE_GLX_DRAWABLE_PIXMAP);
229f2ba7591b1407a7ee9209f842c50696914dc2dedkbr@chromium.org}
230