X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fmesa%2Fdrivers%2Fx11%2Fxm_api.c;h=ec2a73cb369f79714d8d5a7476e611504980baaf;hb=bcf0ce401695aa432d60730456a6779a0f58f543;hp=43a97f9eb5d233c7c4e1827ab5f9348335f74347;hpb=733dba2a08765dddc478a015439ea2a684d5f2a0;p=mesa.git diff --git a/src/mesa/drivers/x11/xm_api.c b/src/mesa/drivers/x11/xm_api.c index 43a97f9eb5d..ec2a73cb369 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. */ /** @@ -62,8 +62,10 @@ #undef __WIN32__ #endif +#include #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 +73,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 +88,7 @@ /** * Global X driver lock */ -_glthread_Mutex _xmesa_lock; +mtx_t _xmesa_lock; @@ -193,7 +196,7 @@ bits_per_pixel( XMesaVisual xmv ) * Do this by calling XGetWindowAttributes() for the window and * checking if we catch an X error. * Input: dpy - the display - * win - the window to check for existance + * win - the window to check for existence * Return: GL_TRUE - window exists * GL_FALSE - window doesn't exist */ @@ -245,10 +248,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 +286,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) @@ -308,8 +311,8 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type, b->frontxrb->Parent = b; b->frontxrb->drawable = d; b->frontxrb->pixmap = (XMesaPixmap) d; - _mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_FRONT_LEFT, - &b->frontxrb->Base.Base); + _mesa_attach_and_own_rb(&b->mesa_buffer, BUFFER_FRONT_LEFT, + &b->frontxrb->Base.Base); /* * Back renderbuffer @@ -325,8 +328,8 @@ create_xmesa_buffer(XMesaDrawable d, BufferType type, /* determine back buffer implementation */ b->db_mode = vis->ximage_flag ? BACK_XIMAGE : BACK_PIXMAP; - _mesa_add_renderbuffer(&b->mesa_buffer, BUFFER_BACK_LEFT, - &b->backxrb->Base.Base); + _mesa_attach_and_own_rb(&b->mesa_buffer, BUFFER_BACK_LEFT, + &b->backxrb->Base.Base); } /* @@ -562,7 +565,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 +583,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 +593,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 +606,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 +761,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 +784,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 +792,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 +847,19 @@ 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->visinfo); + free(v); + return NULL; + } /* XXX minor hack */ v->mesa_visual.level = level; @@ -886,7 +893,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,7 +907,7 @@ 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)) { free(c); @@ -916,22 +923,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 +957,13 @@ XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list ) _mesa_meta_init(mesaCtx); + _mesa_override_extensions(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 +1187,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? */ } @@ -1300,6 +1305,14 @@ XMesaBuffer XMesaGetCurrentReadBuffer( void ) } +Display *XMesaGetCurrentDisplay(void) +{ + GET_CURRENT_CONTEXT(ctx); + XMesaContext xmctx = XMESA_CONTEXT(ctx); + return xmctx ? xmctx->display : NULL; +} + + GLboolean XMesaSetFXmode( GLint mode ) { @@ -1334,28 +1347,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 +1376,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 );