X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmesa%2Fdrivers%2Fx11%2Fxm_dd.c;h=3c576c7cd8bad91c247640a9e990b4b05c5e8d80;hb=bb84fa146f2252f22999205a2904d8a948bffd3b;hp=12004ba71df5db9a029fe9ba61a5334682868d3d;hpb=bb4c5d72d7c7cb1d9e7016e2c07c36875f30011a;p=mesa.git diff --git a/src/mesa/drivers/x11/xm_dd.c b/src/mesa/drivers/x11/xm_dd.c index 12004ba71df..3c576c7cd8b 100644 --- a/src/mesa/drivers/x11/xm_dd.c +++ b/src/mesa/drivers/x11/xm_dd.c @@ -1,6 +1,5 @@ /* * Mesa 3-D graphics library - * Version: 6.5.2 * * Copyright (C) 1999-2006 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. */ @@ -33,7 +33,9 @@ #include "main/context.h" #include "main/colormac.h" #include "main/fbobject.h" +#include "main/framebuffer.h" #include "main/macros.h" +#include "main/mipmap.h" #include "main/image.h" #include "main/imports.h" #include "main/mtypes.h" @@ -53,9 +55,9 @@ finish_or_flush( struct gl_context *ctx ) { const XMesaContext xmesa = XMESA_CONTEXT(ctx); if (xmesa) { - _glthread_LOCK_MUTEX(_xmesa_lock); + mtx_lock(&_xmesa_lock); XSync( xmesa->display, False ); - _glthread_UNLOCK_MUTEX(_xmesa_lock); + mtx_unlock(&_xmesa_lock); } } @@ -243,7 +245,6 @@ clear_buffers(struct gl_context *ctx, GLbitfield buffers) { if (_mesa_is_winsys_fbo(ctx->DrawBuffer)) { /* this is a window system framebuffer */ - const GLuint *colorMask = (GLuint *) &ctx->Color.ColorMask[0]; const XMesaContext xmesa = XMESA_CONTEXT(ctx); XMesaBuffer b = XMESA_BUFFER(ctx->DrawBuffer); const GLint x = ctx->DrawBuffer->_Xmin; @@ -262,7 +263,8 @@ clear_buffers(struct gl_context *ctx, GLbitfield buffers) XMesaSetForeground(xmesa->display, b->cleargc, xmesa->clearpixel); /* we can't handle color or index masking */ - if (*colorMask == 0xffffffff && ctx->Color.IndexMask == 0xffffffff) { + if (GET_COLORMASK(ctx->Color.ColorMask, 0) == 0xf && + ctx->Color.IndexMask == 0xffffffff) { if (buffers & BUFFER_BIT_FRONT_LEFT) { /* clear front color buffer */ struct gl_renderbuffer *frontRb @@ -365,12 +367,10 @@ xmesa_DrawPixels_8R8G8B( struct gl_context *ctx, buf = (GLubyte *) ctx->Driver.MapBufferRange(ctx, 0, unpack->BufferObj->Size, GL_MAP_READ_BIT, - unpack->BufferObj); + unpack->BufferObj, + MAP_INTERNAL); if (!buf) { - /* buffer is already mapped - that's an error */ - _mesa_error(ctx, GL_INVALID_OPERATION, - "glDrawPixels(PBO is mapped)"); - return; + return; /* error */ } pixels = ADD_POINTERS(buf, pixels); } @@ -387,10 +387,10 @@ xmesa_DrawPixels_8R8G8B( struct gl_context *ctx, const int rowLength = clippedUnpack.RowLength; XMesaImage ximage; - ASSERT(xmesa->xm_visual->dithered_pf == PF_8R8G8B); - ASSERT(xmesa->xm_visual->undithered_pf == PF_8R8G8B); - ASSERT(dpy); - ASSERT(gc); + assert(xmesa->xm_visual->dithered_pf == PF_8R8G8B); + assert(xmesa->xm_visual->undithered_pf == PF_8R8G8B); + assert(dpy); + assert(gc); /* This is a little tricky since all coordinates up to now have * been in the OpenGL bottom-to-top orientation. X is top-to-bottom @@ -416,7 +416,7 @@ xmesa_DrawPixels_8R8G8B( struct gl_context *ctx, } if (_mesa_is_bufferobj(unpack->BufferObj)) { - ctx->Driver.UnmapBuffer(ctx, unpack->BufferObj); + ctx->Driver.UnmapBuffer(ctx, unpack->BufferObj, MAP_INTERNAL); } } else { @@ -499,12 +499,10 @@ xmesa_DrawPixels_5R6G5B( struct gl_context *ctx, buf = (GLubyte *) ctx->Driver.MapBufferRange(ctx, 0, unpack->BufferObj->Size, GL_MAP_READ_BIT, - unpack->BufferObj); + unpack->BufferObj, + MAP_INTERNAL); if (!buf) { - /* buffer is already mapped - that's an error */ - _mesa_error(ctx, GL_INVALID_OPERATION, - "glDrawPixels(PBO is mapped)"); - return; + return; /* error */ } pixels = ADD_POINTERS(buf, pixels); } @@ -521,9 +519,9 @@ xmesa_DrawPixels_5R6G5B( struct gl_context *ctx, const int rowLength = clippedUnpack.RowLength; XMesaImage ximage; - ASSERT(xmesa->xm_visual->undithered_pf == PF_5R6G5B); - ASSERT(dpy); - ASSERT(gc); + assert(xmesa->xm_visual->undithered_pf == PF_5R6G5B); + assert(dpy); + assert(gc); /* This is a little tricky since all coordinates up to now have * been in the OpenGL bottom-to-top orientation. X is top-to-bottom @@ -549,7 +547,7 @@ xmesa_DrawPixels_5R6G5B( struct gl_context *ctx, } if (unpack->BufferObj->Name) { - ctx->Driver.UnmapBuffer(ctx, unpack->BufferObj); + ctx->Driver.UnmapBuffer(ctx, unpack->BufferObj, MAP_INTERNAL); } } else { @@ -617,8 +615,8 @@ xmesa_CopyPixels( struct gl_context *ctx, struct xmesa_renderbuffer *dstXrb = xmesa_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[0]); - ASSERT(dpy); - ASSERT(gc); + assert(dpy); + assert(gc); /* Note: we don't do any special clipping work here. We could, * but X will do it for us. @@ -681,17 +679,20 @@ enable( struct gl_context *ctx, GLenum pname, GLboolean state ) * Called when the driver should update its state, based on the new_state * flags. */ -void -xmesa_update_state( struct gl_context *ctx, GLbitfield new_state ) +static void +xmesa_update_state(struct gl_context *ctx) { + GLbitfield new_state = ctx->NewState; const XMesaContext xmesa = XMESA_CONTEXT(ctx); + if (new_state & (_NEW_SCISSOR | _NEW_BUFFERS | _NEW_VIEWPORT)) + _mesa_update_draw_buffer_bounds(ctx, ctx->DrawBuffer); + /* Propagate statechange information to swrast and swrast_setup * modules. The X11 driver has no internal GL-dependent state. */ _swrast_InvalidateState( ctx, new_state ); _tnl_InvalidateState( ctx, new_state ); - _vbo_InvalidateState( ctx, new_state ); _swsetup_InvalidateState( ctx, new_state ); if (_mesa_is_user_fbo(ctx->DrawBuffer)) @@ -737,25 +738,6 @@ xmesa_update_state( struct gl_context *ctx, GLbitfield new_state ) } - -/** - * In SW, we don't really compress GL_COMPRESSED_RGB[A] textures! - */ -static gl_format -choose_tex_format( struct gl_context *ctx, GLint internalFormat, - GLenum format, GLenum type ) -{ - switch (internalFormat) { - case GL_COMPRESSED_RGB_ARB: - return MESA_FORMAT_RGB888; - case GL_COMPRESSED_RGBA_ARB: - return MESA_FORMAT_RGBA8888; - default: - return _mesa_choose_tex_format(ctx, internalFormat, format, type); - } -} - - /** * Called by glViewport. * This is a good time for us to poll the current X window size and adjust @@ -768,17 +750,13 @@ choose_tex_format( struct gl_context *ctx, GLint internalFormat, * That problem led to the GLX_MESA_resize_buffers extension. */ static void -xmesa_viewport(struct gl_context *ctx, GLint x, GLint y, GLsizei w, GLsizei h) +xmesa_viewport(struct gl_context *ctx) { XMesaContext xmctx = XMESA_CONTEXT(ctx); XMesaBuffer xmdrawbuf = XMESA_BUFFER(ctx->WinSysDrawBuffer); XMesaBuffer xmreadbuf = XMESA_BUFFER(ctx->WinSysReadBuffer); xmesa_check_and_update_buffer_size(xmctx, xmdrawbuf); xmesa_check_and_update_buffer_size(xmctx, xmreadbuf); - (void) x; - (void) y; - (void) w; - (void) h; } @@ -822,9 +800,6 @@ xmesa_begin_query(struct gl_context *ctx, struct gl_query_object *q) /** * Return the difference between the two given times in microseconds. */ -#ifdef __VMS -#define suseconds_t unsigned int -#endif static GLuint64EXT time_diff(const struct timeval *t0, const struct timeval *t1) { @@ -862,7 +837,6 @@ xmesa_init_driver_functions( XMesaVisual xmvisual, { driver->GetString = get_string; driver->UpdateState = xmesa_update_state; - driver->GetBufferSize = NULL; /* OBSOLETE */ driver->Flush = finish_or_flush; driver->Finish = finish_or_flush; driver->ColorMask = color_mask; @@ -871,7 +845,7 @@ xmesa_init_driver_functions( XMesaVisual xmvisual, if (TEST_META_FUNCS) { driver->Clear = _mesa_meta_Clear; driver->CopyPixels = _mesa_meta_CopyPixels; - driver->BlitFramebuffer = _mesa_meta_BlitFramebuffer; + driver->BlitFramebuffer = _mesa_meta_and_swrast_BlitFramebuffer; driver->DrawPixels = _mesa_meta_DrawPixels; driver->Bitmap = _mesa_meta_Bitmap; } @@ -891,11 +865,7 @@ xmesa_init_driver_functions( XMesaVisual xmvisual, driver->MapRenderbuffer = xmesa_MapRenderbuffer; driver->UnmapRenderbuffer = xmesa_UnmapRenderbuffer; -#if ENABLE_EXT_texure_compression_s3tc - driver->ChooseTextureFormat = choose_tex_format; -#else - (void) choose_tex_format; -#endif + driver->GenerateMipmap = _mesa_generate_mipmap; #if ENABLE_EXT_timer_query driver->NewQueryObject = xmesa_new_query_object;