diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/dri/r200/r200_context.c | 23 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r200/r200_context.h | 1 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r200/r200_lock.c | 14 | ||||
| -rw-r--r-- | src/mesa/drivers/dri/r200/r200_state.c | 35 | 
4 files changed, 44 insertions, 29 deletions
| diff --git a/src/mesa/drivers/dri/r200/r200_context.c b/src/mesa/drivers/dri/r200/r200_context.c index 06b2a152d9..bb7a16c932 100644 --- a/src/mesa/drivers/dri/r200/r200_context.c +++ b/src/mesa/drivers/dri/r200/r200_context.c @@ -87,21 +87,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  int R200_DEBUG = (0);  #endif - -/* Return the width and height of the given buffer. - */ -static void r200GetBufferSize( GLframebuffer *buffer, -			       GLuint *width, GLuint *height ) -{ -   GET_CURRENT_CONTEXT(ctx); -   r200ContextPtr rmesa = R200_CONTEXT(ctx); - -   LOCK_HARDWARE( rmesa ); -   *width  = rmesa->dri.drawable->w; -   *height = rmesa->dri.drawable->h; -   UNLOCK_HARDWARE( rmesa ); -} -  /* Return various strings for glGetString().   */  static const GLubyte *r200GetString( GLcontext *ctx, GLenum name ) @@ -233,7 +218,7 @@ static const struct tnl_pipeline_stage *r200_pipeline[] = {   */  static void r200InitDriverFuncs( struct dd_function_table *functions )  { -    functions->GetBufferSize		= r200GetBufferSize; +    functions->GetBufferSize		= NULL; /* OBSOLETE */      functions->GetString		= r200GetString;  } @@ -700,7 +685,13 @@ r200MakeCurrent( __DRIcontextPrivate *driContextPriv,        if ( newCtx->dri.drawable != driDrawPriv ) {  	 driDrawableInitVBlank( driDrawPriv, newCtx->vblank_flags,  				&newCtx->vbl_seq ); +      } + +      if ( newCtx->dri.drawable != driDrawPriv || +           newCtx->dri.readable != driReadPriv ) {  	 newCtx->dri.drawable = driDrawPriv; +	 newCtx->dri.readable = driReadPriv; +  	 r200UpdateWindow( newCtx->glCtx );  	 r200UpdateViewportOffset( newCtx->glCtx );        } diff --git a/src/mesa/drivers/dri/r200/r200_context.h b/src/mesa/drivers/dri/r200/r200_context.h index c6910f5238..9f109e07ff 100644 --- a/src/mesa/drivers/dri/r200/r200_context.h +++ b/src/mesa/drivers/dri/r200/r200_context.h @@ -699,6 +699,7 @@ struct r200_dri_mirror {     __DRIcontextPrivate	*context;	/* DRI context */     __DRIscreenPrivate	*screen;	/* DRI screen */     __DRIdrawablePrivate	*drawable;	/* DRI drawable bound to this ctx */ +   __DRIdrawablePrivate	*readable;	/* DRI readable bound to this ctx */     drm_context_t hwContext;     drm_hw_lock_t *hwLock; diff --git a/src/mesa/drivers/dri/r200/r200_lock.c b/src/mesa/drivers/dri/r200/r200_lock.c index 66bb075864..bcc0c91639 100644 --- a/src/mesa/drivers/dri/r200/r200_lock.c +++ b/src/mesa/drivers/dri/r200/r200_lock.c @@ -69,7 +69,8 @@ r200UpdatePageFlipping( r200ContextPtr rmesa )   */  void r200GetLock( r200ContextPtr rmesa, GLuint flags )  { -   __DRIdrawablePrivate *dPriv = rmesa->dri.drawable; +   __DRIdrawablePrivate *drawable = rmesa->dri.drawable; +   __DRIdrawablePrivate *readable = rmesa->dri.readable;     __DRIscreenPrivate *sPriv = rmesa->dri.screen;     drm_radeon_sarea_t *sarea = rmesa->sarea;     int i; @@ -84,17 +85,20 @@ void r200GetLock( r200ContextPtr rmesa, GLuint flags )      * Since the hardware state depends on having the latest drawable      * clip rects, all state checking must be done _after_ this call.      */ -   DRI_VALIDATE_DRAWABLE_INFO( sPriv, dPriv ); +   DRI_VALIDATE_DRAWABLE_INFO( sPriv, drawable ); +   if (drawable != readable) { +      DRI_VALIDATE_DRAWABLE_INFO( sPriv, readable ); +   } -   if ( rmesa->lastStamp != dPriv->lastStamp ) { +   if ( rmesa->lastStamp != drawable->lastStamp ) {        r200UpdatePageFlipping( rmesa );        if (rmesa->glCtx->DrawBuffer->_ColorDrawBufferMask[0] == BUFFER_BIT_BACK_LEFT)           r200SetCliprects( rmesa, GL_BACK_LEFT );        else           r200SetCliprects( rmesa, GL_FRONT_LEFT );        r200UpdateViewportOffset( rmesa->glCtx ); -      driUpdateFramebufferSize(rmesa->glCtx, dPriv); -      rmesa->lastStamp = dPriv->lastStamp; +      driUpdateFramebufferSize(rmesa->glCtx, drawable); +      rmesa->lastStamp = drawable->lastStamp;     }     R200_STATECHANGE( rmesa, ctx ); diff --git a/src/mesa/drivers/dri/r200/r200_state.c b/src/mesa/drivers/dri/r200/r200_state.c index 097fbc868a..dc1fbef72e 100644 --- a/src/mesa/drivers/dri/r200/r200_state.c +++ b/src/mesa/drivers/dri/r200/r200_state.c @@ -40,6 +40,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.  #include "enums.h"  #include "colormac.h"  #include "light.h" +#include "framebuffer.h"  #include "swrast/swrast.h"  #include "array_cache/acache.h" @@ -1845,23 +1846,26 @@ static void r200LogicOpCode( GLcontext *ctx, GLenum opcode )  void r200SetCliprects( r200ContextPtr rmesa, GLenum mode )  { -   __DRIdrawablePrivate *dPriv = rmesa->dri.drawable; +   __DRIdrawablePrivate *const drawable = rmesa->dri.drawable; +   __DRIdrawablePrivate *const readable = rmesa->dri.readable; +   GLframebuffer *const draw_fb = (GLframebuffer*) drawable->driverPrivate; +   GLframebuffer *const read_fb = (GLframebuffer*) readable->driverPrivate;     switch ( mode ) {     case GL_FRONT_LEFT: -      rmesa->numClipRects = dPriv->numClipRects; -      rmesa->pClipRects = dPriv->pClipRects; +      rmesa->numClipRects = drawable->numClipRects; +      rmesa->pClipRects = drawable->pClipRects;        break;     case GL_BACK_LEFT:        /* Can't ignore 2d windows if we are page flipping.         */ -      if ( dPriv->numBackClipRects == 0 || rmesa->doPageFlip ) { -	 rmesa->numClipRects = dPriv->numClipRects; -	 rmesa->pClipRects = dPriv->pClipRects; +      if ( drawable->numBackClipRects == 0 || rmesa->doPageFlip ) { +         rmesa->numClipRects = drawable->numClipRects; +         rmesa->pClipRects = drawable->pClipRects;        }        else { -	 rmesa->numClipRects = dPriv->numBackClipRects; -	 rmesa->pClipRects = dPriv->pBackClipRects; +         rmesa->numClipRects = drawable->numBackClipRects; +         rmesa->pClipRects = drawable->pBackClipRects;        }        break;     default: @@ -1869,6 +1873,21 @@ void r200SetCliprects( r200ContextPtr rmesa, GLenum mode )        return;     } +   if ((draw_fb->Width != drawable->w) || (draw_fb->Height != drawable->h)) { +      _mesa_resize_framebuffer(rmesa->glCtx, draw_fb, +			       drawable->w, drawable->h); +      draw_fb->Initialized = GL_TRUE; +   } + +   if (drawable != readable) { +      if ((read_fb->Width != readable->w) || +	  (read_fb->Height != readable->h)) { +	 _mesa_resize_framebuffer(rmesa->glCtx, read_fb, +				  readable->w, readable->h); +	 read_fb->Initialized = GL_TRUE; +      } +   } +     if (rmesa->state.scissor.enabled)        r200RecalcScissorRects( rmesa );  } | 
