blob: 2ab387fa27d3ebbfcd95f4697324d563ff4c4f10 [file] [log] [blame]
/* $XFree86: xc/lib/GL/mesa/src/drv/gamma/gamma_lock.c,v 1.4 2002/11/05 17:46:07 tsi Exp $ */
#include "gamma_context.h"
#include "gamma_lock.h"
#include "drirenderbuffer.h"
#ifdef DEBUG_LOCKING
char *prevLockFile = NULL;
int prevLockLine = 0;
#endif
/* Update the hardware state. This is called if another context has
* grabbed the hardware lock, which includes the X server. This
* function also updates the driver's window state after the X server
* moves, resizes or restacks a window -- the change will be reflected
* in the drawable position and clip rects. Since the X server grabs
* the hardware lock when it changes the window state, this routine will
* automatically be called after such a change.
*/
void gammaGetLock( gammaContextPtr gmesa, GLuint flags )
{
__DRIdrawablePrivate *dPriv = gmesa->driDrawable;
__DRIscreenPrivate *sPriv = gmesa->driScreen;
drmGetLock( gmesa->driFd, gmesa->hHWContext, flags );
/* The window might have moved, so we might need to get new clip
* rects.
*
* NOTE: This releases and regrabs the hw lock to allow the X server
* to respond to the DRI protocol request for new drawable info.
* 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 );
if ( gmesa->lastStamp != dPriv->lastStamp ) {
driUpdateFramebufferSize(gmesa->glCtx, dPriv);
gmesa->lastStamp = dPriv->lastStamp;
gmesa->new_state |= GAMMA_NEW_WINDOW | GAMMA_NEW_CLIP;
}
gmesa->numClipRects = dPriv->numClipRects;
gmesa->pClipRects = dPriv->pClipRects;
#if 0
gmesa->dirty = ~0;
if ( sarea->ctxOwner != gmesa->hHWContext ) {
sarea->ctxOwner = gmesa->hHWContext;
gmesa->dirty = GAMMA_UPLOAD_ALL;
}
for ( i = 0 ; i < gmesa->lastTexHeap ; i++ ) {
if ( sarea->texAge[i] != gmesa->lastTexAge[i] ) {
gammaAgeTextures( gmesa, i );
}
}
#endif
}