diff options
| -rw-r--r-- | src/mesa/swrast/s_drawpix.c | 14 | ||||
| -rw-r--r-- | src/mesa/swrast/s_readpix.c | 20 | 
2 files changed, 25 insertions, 9 deletions
| diff --git a/src/mesa/swrast/s_drawpix.c b/src/mesa/swrast/s_drawpix.c index af1848a079..debfcde045 100644 --- a/src/mesa/swrast/s_drawpix.c +++ b/src/mesa/swrast/s_drawpix.c @@ -31,6 +31,7 @@  #include "macros.h"  #include "imports.h"  #include "pixel.h" +#include "state.h"  #include "s_context.h"  #include "s_drawpix.h" @@ -967,6 +968,11 @@ _swrast_DrawPixels( GLcontext *ctx,  {     SWcontext *swrast = SWRAST_CONTEXT(ctx); +   RENDER_START(swrast,ctx); + +   if (ctx->NewState) +      _mesa_update_state(ctx); +     if (swrast->NewState)        _swrast_validate_derived( ctx ); @@ -977,7 +983,7 @@ _swrast_DrawPixels( GLcontext *ctx,                                       format, type, pixels)) {           _mesa_error(ctx, GL_INVALID_OPERATION,                       "glDrawPixels(invalid PBO access)"); -         return; +         goto end;        }        buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_UNPACK_BUFFER_EXT,                                                GL_READ_ONLY_ARB, @@ -985,13 +991,11 @@ _swrast_DrawPixels( GLcontext *ctx,        if (!buf) {           /* buffer is already mapped - that's an error */           _mesa_error(ctx, GL_INVALID_OPERATION, "glDrawPixels(PBO is mapped)"); -         return; +         goto end;        }        pixels = ADD_POINTERS(buf, pixels);     } -   RENDER_START(swrast,ctx); -     switch (format) {     case GL_STENCIL_INDEX:        draw_stencil_pixels( ctx, x, y, width, height, type, unpack, pixels ); @@ -1027,6 +1031,8 @@ _swrast_DrawPixels( GLcontext *ctx,        /* don't return yet, clean-up */     } +end: +     RENDER_FINISH(swrast,ctx);     if (unpack->BufferObj->Name) { diff --git a/src/mesa/swrast/s_readpix.c b/src/mesa/swrast/s_readpix.c index c5a5fc8f1d..3fdd4c727a 100644 --- a/src/mesa/swrast/s_readpix.c +++ b/src/mesa/swrast/s_readpix.c @@ -2,7 +2,7 @@   * Mesa 3-D graphics library   * Version:  6.5   * - * Copyright (C) 1999-2005  Brian Paul   All Rights Reserved. + * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.   *   * Permission is hereby granted, free of charge, to any person obtaining a   * copy of this software and associated documentation files (the "Software"), @@ -33,6 +33,7 @@  #include "macros.h"  #include "imports.h"  #include "pixel.h" +#include "state.h"  #include "s_context.h"  #include "s_depth.h" @@ -509,6 +510,15 @@ _swrast_ReadPixels( GLcontext *ctx,     SWcontext *swrast = SWRAST_CONTEXT(ctx);     struct gl_pixelstore_attrib clippedPacking = *packing; +   /* Need to do RENDER_START before clipping or anything else since this +    * is where a driver may grab the hw lock and get an updated window +    * size. +    */ +   RENDER_START(swrast, ctx); + +   if (ctx->NewState) +      _mesa_update_state(ctx); +     if (swrast->NewState)        _swrast_validate_derived( ctx ); @@ -525,7 +535,7 @@ _swrast_ReadPixels( GLcontext *ctx,                                       format, type, pixels)) {           _mesa_error(ctx, GL_INVALID_OPERATION,                       "glReadPixels(invalid PBO access)"); -         return; +         goto end;        }        buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,                                                GL_WRITE_ONLY_ARB, @@ -533,13 +543,11 @@ _swrast_ReadPixels( GLcontext *ctx,        if (!buf) {           /* buffer is already mapped - that's an error */           _mesa_error(ctx, GL_INVALID_OPERATION, "glReadPixels(PBO is mapped)"); -         return; +         goto end;        }        pixels = ADD_POINTERS(buf, pixels);     } -   RENDER_START(swrast, ctx); -     switch (format) {        case GL_COLOR_INDEX:           read_index_pixels(ctx, x, y, width, height, type, pixels, @@ -576,6 +584,8 @@ _swrast_ReadPixels( GLcontext *ctx,           /* don't return yet, clean-up */     } + +end:     RENDER_FINISH(swrast, ctx);     if (clippedPacking.BufferObj->Name) { | 
