X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fx11%2Fxm_api.c;h=89c219ec7aaab729961df33057c04e2e83b299b9;hb=bfcdb843830bba0190e00e35e3c5c18c4bdb5de1;hp=6696f70f5b8698647681ce56082a3011e3510c1f;hpb=33bb8c051df3f2561c7b4a5ad7abefa3fce99d37;p=mesa.git diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c index 6696f70f5b8..89c219ec7aa 100644 --- a/src/mesa/drivers/x11/xm_api.c +++ b/src/mesa/drivers/x11/xm_api.c @@ -1,6 +1,5 @@ /* * Mesa 3-D graphics library - * Version: 7.1 * * Copyright (C) 1999-2007 Brian Paul All Rights Reserved. * @@ -17,9 +16,10 @@ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN - * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. */ /** @@ -64,6 +64,7 @@ #include "glxheader.h" #include "xmesaP.h" +#include "main/api_exec.h" #include "main/context.h" #include "main/extensions.h" #include "main/framebuffer.h" @@ -71,7 +72,8 @@ #include "main/macros.h" #include "main/renderbuffer.h" #include "main/teximage.h" -#include "glapi/glthread.h" +#include "main/version.h" +#include "main/vtxfmt.h" #include "swrast/swrast.h" #include "swrast/s_renderbuffer.h" #include "swrast_setup/swrast_setup.h" @@ -85,7 +87,7 @@ /** * Global X driver lock */ -_glthread_Mutex _xmesa_lock; +mtx_t _xmesa_lock; @@ -171,7 +173,7 @@ bits_per_pixel( XMesaVisual xmv ) /* Create a temporary XImage */ img = XCreateImage( dpy, visinfo->visual, visinfo->depth, ZPixmap, 0, /*format, offset*/ - (char*) malloc(8), /*data*/ + malloc(8), /*data*/ 1, 1, /*width, height*/ 32, /*bitmap_pad*/ 0 /*bytes_per_line*/ @@ -245,10 +247,10 @@ xmesa_get_window_size(XMesaDisplay *dpy, XMesaBuffer b, { Status stat; - _glthread_LOCK_MUTEX(_xmesa_lock); + mtx_lock(&_xmesa_lock); XSync(b->xm_visual->display, 0); /* added for Chromium */ stat = get_drawable_size(dpy, b->frontxrb->pixmap, width, height); - _glthread_UNLOCK_MUTEX(_xmesa_lock); + mtx_unlock(&_xmesa_lock); if (!stat) { /* probably querying a window that's recently been destroyed */ @@ -283,7 +285,7 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type, { XMesaBuffer b; - ASSERT(type == WINDOW || type == PIXMAP || type == PBUFFER); + assert(type == WINDOW || type == PIXMAP || type == PBUFFER); b = (XMesaBuffer) CALLOC_STRUCT(xmesa_buffer); if (!b) @@ -562,7 +564,7 @@ initialize_visual_and_buffer(XMesaVisual v, XMesaBuffer b, const int xclass = v->visualType; - ASSERT(!b || b->xm_visual == v); + assert(!b || b->xm_visual == v); /* Save true bits/pixel */ v->BitsPerPixel = bits_per_pixel(v); @@ -580,7 +582,7 @@ initialize_visual_and_buffer(XMesaVisual v, XMesaBuffer b, } v->mesa_visual.indexBits = 0; - if (_mesa_getenv("MESA_NO_DITHER")) { + if (getenv("MESA_NO_DITHER")) { v->dithered_pf = v->undithered_pf; } @@ -590,7 +592,7 @@ initialize_visual_and_buffer(XMesaVisual v, XMesaBuffer b, * which can help Brian figure out what's going on when a user * reports bugs. */ - if (_mesa_getenv("MESA_INFO")) { + if (getenv("MESA_INFO")) { printf("X/Mesa visual = %p\n", (void *) v); printf("X/Mesa dithered pf = %u\n", v->dithered_pf); printf("X/Mesa undithered pf = %u\n", v->undithered_pf); @@ -603,8 +605,8 @@ initialize_visual_and_buffer(XMesaVisual v, XMesaBuffer b, /* Do window-specific initializations */ /* these should have been set in create_xmesa_buffer */ - ASSERT(b->frontxrb->drawable == window); - ASSERT(b->frontxrb->pixmap == (XMesaPixmap) window); + assert(b->frontxrb->drawable == window); + assert(b->frontxrb->pixmap == (XMesaPixmap) window); /* Setup for single/double buffering */ if (v->mesa_visual.doubleBufferMode) { @@ -758,7 +760,7 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display, GLint red_bits, green_bits, blue_bits, alpha_bits; /* For debugging only */ - if (_mesa_getenv("MESA_XSYNC")) { + if (getenv("MESA_XSYNC")) { /* This makes debugging X easier. * In your debugger, set a breakpoint on _XError to stop when an * X protocol error is generated. @@ -781,7 +783,7 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display, * the struct but we may need some of the information contained in it * at a later time. */ - v->visinfo = (XVisualInfo *) malloc(sizeof(*visinfo)); + v->visinfo = malloc(sizeof(*visinfo)); if(!v->visinfo) { free(v); return NULL; @@ -789,7 +791,7 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display, memcpy(v->visinfo, visinfo, sizeof(*visinfo)); /* check for MESA_GAMMA environment variable */ - gamma = _mesa_getenv("MESA_GAMMA"); + gamma = getenv("MESA_GAMMA"); if (gamma) { v->RedGamma = v->GreenGamma = v->BlueGamma = 0.0; sscanf( gamma, "%f %f %f", &v->RedGamma, &v->GreenGamma, &v->BlueGamma ); @@ -844,15 +846,18 @@ XMesaVisual XMesaCreateVisual( XMesaDisplay *display, alpha_bits = v->mesa_visual.alphaBits; } - _mesa_initialize_visual( &v->mesa_visual, - db_flag, stereo_flag, - red_bits, green_bits, - blue_bits, alpha_bits, - depth_size, - stencil_size, - accum_red_size, accum_green_size, - accum_blue_size, accum_alpha_size, - 0 ); + if (!_mesa_initialize_visual(&v->mesa_visual, + db_flag, stereo_flag, + red_bits, green_bits, + blue_bits, alpha_bits, + depth_size, + stencil_size, + accum_red_size, accum_green_size, + accum_blue_size, accum_alpha_size, + 0)) { + free(v); + return NULL; + } /* XXX minor hack */ v->mesa_visual.level = level; @@ -886,7 +891,7 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list ) TNLcontext *tnl; if (firstTime) { - _glthread_INIT_MUTEX(_xmesa_lock); + mtx_init(&_xmesa_lock, mtx_plain); firstTime = GL_FALSE; } @@ -900,9 +905,9 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list ) /* initialize with default driver functions, then plug in XMesa funcs */ _mesa_init_driver_functions(&functions); xmesa_init_driver_functions(v, &functions); - if (!_mesa_initialize_context(mesaCtx, API_OPENGL, &v->mesa_visual, + if (!_mesa_initialize_context(mesaCtx, API_OPENGL_COMPAT, &v->mesa_visual, share_list ? &(share_list->mesa) : (struct gl_context *) NULL, - &functions, (void *) c)) { + &functions)) { free(c); return NULL; } @@ -916,22 +921,14 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list ) } _mesa_enable_sw_extensions(mesaCtx); - _mesa_enable_1_3_extensions(mesaCtx); - _mesa_enable_1_4_extensions(mesaCtx); - _mesa_enable_1_5_extensions(mesaCtx); - _mesa_enable_2_0_extensions(mesaCtx); - _mesa_enable_2_1_extensions(mesaCtx); - if (mesaCtx->Mesa_DXTn) { - _mesa_enable_extension(mesaCtx, "GL_EXT_texture_compression_s3tc"); - _mesa_enable_extension(mesaCtx, "GL_S3_s3tc"); - } - _mesa_enable_extension(mesaCtx, "GL_3DFX_texture_compression_FXT1"); + #if ENABLE_EXT_timer_query - _mesa_enable_extension(mesaCtx, "GL_EXT_timer_query"); + mesaCtx->Extensions.EXT_timer_query = GL_TRUE; #endif /* finish up xmesa context initializations */ + c->direct = GL_TRUE; c->swapbytes = CHECK_BYTE_ORDER(v) ? GL_FALSE : GL_TRUE; c->xm_visual = v; c->xm_buffer = NULL; /* set later by XMesaMakeCurrent */ @@ -958,6 +955,12 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list ) _mesa_meta_init(mesaCtx); + _mesa_compute_version(mesaCtx); + + /* Exec table initialization requires the version to be computed */ + _mesa_initialize_dispatch_tables(mesaCtx); + _mesa_initialize_vbo_vtxfmt(mesaCtx); + return c; } @@ -1181,7 +1184,6 @@ xmesa_check_and_update_buffer_size(XMesaContext xmctx, XMesaBuffer drawBuffer) struct gl_context *ctx = xmctx ? &xmctx->mesa : NULL; _mesa_resize_framebuffer(ctx, &(drawBuffer->mesa_buffer), width, height); } - drawBuffer->mesa_buffer.Initialized = GL_TRUE; /* XXX TEMPORARY? */ } @@ -1334,28 +1336,28 @@ void XMesaSwapBuffers( XMesaBuffer b ) /* Copy Ximage (back buf) from client memory to server window */ #if defined(USE_XSHM) if (b->shm) { - /*_glthread_LOCK_MUTEX(_xmesa_lock);*/ + /*mtx_lock(&_xmesa_lock);*/ XShmPutImage( b->xm_visual->display, b->frontxrb->drawable, b->swapgc, b->backxrb->ximage, 0, 0, 0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height, False ); - /*_glthread_UNLOCK_MUTEX(_xmesa_lock);*/ + /*mtx_unlock(&_xmesa_lock);*/ } else #endif { - /*_glthread_LOCK_MUTEX(_xmesa_lock);*/ + /*mtx_lock(&_xmesa_lock);*/ XMesaPutImage( b->xm_visual->display, b->frontxrb->drawable, b->swapgc, b->backxrb->ximage, 0, 0, 0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height ); - /*_glthread_UNLOCK_MUTEX(_xmesa_lock);*/ + /*mtx_unlock(&_xmesa_lock);*/ } } else if (b->backxrb->pixmap) { /* Copy pixmap (back buf) to window (front buf) on server */ - /*_glthread_LOCK_MUTEX(_xmesa_lock);*/ + /*mtx_lock(&_xmesa_lock);*/ XMesaCopyArea( b->xm_visual->display, b->backxrb->pixmap, /* source drawable */ b->frontxrb->drawable, /* dest. drawable */ @@ -1363,7 +1365,7 @@ void XMesaSwapBuffers( XMesaBuffer b ) 0, 0, b->mesa_buffer.Width, b->mesa_buffer.Height, 0, 0 /* dest region */ ); - /*_glthread_UNLOCK_MUTEX(_xmesa_lock);*/ + /*mtx_unlock(&_xmesa_lock);*/ } } XSync( b->xm_visual->display, False );