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