mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
r300: Initial work on merging radeon_lock.[ch].
This commit is contained in:
parent
0aa998b2ab
commit
98d25a5a28
4 changed files with 120 additions and 96 deletions
|
|
@ -1,10 +1,15 @@
|
|||
/*
|
||||
/**************************************************************************
|
||||
|
||||
Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
|
||||
VA Linux Systems Inc., Fremont, California.
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
The Weather Channel (TM) funded Tungsten Graphics to develop the
|
||||
initial release of the Radeon 8500 driver under the XFree86 license.
|
||||
This notice must be preserved.
|
||||
|
||||
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"), to deal in the Software without restriction, including
|
||||
|
|
@ -29,9 +34,10 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
/*
|
||||
* Authors:
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
*/
|
||||
#include <string.h>
|
||||
|
||||
#include "radeon_lock.h"
|
||||
#include "radeon_ioctl.h"
|
||||
|
|
@ -50,53 +56,57 @@ int prevLockLine = 0;
|
|||
|
||||
/* Turn on/off page flipping according to the flags in the sarea:
|
||||
*/
|
||||
void radeonUpdatePageFlipping(radeonContextPtr radeon)
|
||||
void radeonUpdatePageFlipping(radeonContextPtr rmesa)
|
||||
{
|
||||
int use_back;
|
||||
|
||||
radeon->doPageFlip = radeon->sarea->pfState;
|
||||
if (radeon->glCtx->WinSysDrawBuffer) {
|
||||
driFlipRenderbuffers(radeon->glCtx->WinSysDrawBuffer, radeon->sarea->pfCurrentPage);
|
||||
r300UpdateDrawBuffer(radeon->glCtx);
|
||||
}
|
||||
rmesa->doPageFlip = rmesa->sarea->pfState;
|
||||
if (rmesa->glCtx->WinSysDrawBuffer) {
|
||||
driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer,
|
||||
rmesa->sarea->pfCurrentPage);
|
||||
r300UpdateDrawBuffer(rmesa->glCtx);
|
||||
}
|
||||
|
||||
use_back = radeon->glCtx->DrawBuffer ?
|
||||
(radeon->glCtx->DrawBuffer->_ColorDrawBufferMask[0] ==
|
||||
BUFFER_BIT_BACK_LEFT) : 1;
|
||||
use_back ^= (radeon->sarea->pfCurrentPage == 1);
|
||||
use_back = rmesa->glCtx->DrawBuffer ?
|
||||
(rmesa->glCtx->DrawBuffer->_ColorDrawBufferMask[0] ==
|
||||
BUFFER_BIT_BACK_LEFT) : 1;
|
||||
use_back ^= (rmesa->sarea->pfCurrentPage == 1);
|
||||
|
||||
if (use_back) {
|
||||
radeon->state.color.drawOffset = radeon->radeonScreen->backOffset;
|
||||
radeon->state.color.drawPitch = radeon->radeonScreen->backPitch;
|
||||
rmesa->state.color.drawOffset =
|
||||
rmesa->radeonScreen->backOffset;
|
||||
rmesa->state.color.drawPitch = rmesa->radeonScreen->backPitch;
|
||||
} else {
|
||||
radeon->state.color.drawOffset = radeon->radeonScreen->frontOffset;
|
||||
radeon->state.color.drawPitch = radeon->radeonScreen->frontPitch;
|
||||
rmesa->state.color.drawOffset =
|
||||
rmesa->radeonScreen->frontOffset;
|
||||
rmesa->state.color.drawPitch =
|
||||
rmesa->radeonScreen->frontPitch;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called by radeonGetLock() after the lock has been obtained.
|
||||
*/
|
||||
static void r300RegainedLock(radeonContextPtr radeon)
|
||||
{
|
||||
static void r300RegainedLock(radeonContextPtr rmesa)
|
||||
{
|
||||
int i;
|
||||
__DRIdrawablePrivate *const drawable = radeon->dri.drawable;
|
||||
r300ContextPtr r300 = (r300ContextPtr)radeon;
|
||||
drm_radeon_sarea_t *sarea = radeon->sarea;
|
||||
__DRIdrawablePrivate *const drawable = rmesa->dri.drawable;
|
||||
r300ContextPtr r300 = (r300ContextPtr) rmesa;
|
||||
drm_radeon_sarea_t *sarea = rmesa->sarea;
|
||||
|
||||
if ( radeon->lastStamp != drawable->lastStamp ) {
|
||||
radeonUpdatePageFlipping(radeon);
|
||||
radeonSetCliprects(radeon);
|
||||
if (rmesa->lastStamp != drawable->lastStamp) {
|
||||
radeonUpdatePageFlipping(rmesa);
|
||||
radeonSetCliprects(rmesa);
|
||||
#if 1
|
||||
r300UpdateViewportOffset( radeon->glCtx );
|
||||
driUpdateFramebufferSize(radeon->glCtx, drawable);
|
||||
r300UpdateViewportOffset(rmesa->glCtx);
|
||||
driUpdateFramebufferSize(rmesa->glCtx, drawable);
|
||||
#else
|
||||
radeonUpdateScissor(radeon->glCtx);
|
||||
radeonUpdateScissor(rmesa->glCtx);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (sarea->ctx_owner != radeon->dri.hwContext) {
|
||||
sarea->ctx_owner = radeon->dri.hwContext;
|
||||
if (sarea->ctx_owner != rmesa->dri.hwContext) {
|
||||
sarea->ctx_owner = rmesa->dri.hwContext;
|
||||
|
||||
for (i = 0; i < r300->nr_heaps; i++) {
|
||||
DRI_AGE_TEXTURES(r300->texture_heaps[i]);
|
||||
|
|
@ -112,15 +122,15 @@ static void r300RegainedLock(radeonContextPtr radeon)
|
|||
* the hardware lock when it changes the window state, this routine will
|
||||
* automatically be called after such a change.
|
||||
*/
|
||||
void radeonGetLock(radeonContextPtr radeon, GLuint flags)
|
||||
void radeonGetLock(radeonContextPtr rmesa, GLuint flags)
|
||||
{
|
||||
__DRIdrawablePrivate *const drawable = radeon->dri.drawable;
|
||||
__DRIdrawablePrivate *const readable = radeon->dri.readable;
|
||||
__DRIscreenPrivate *sPriv = radeon->dri.screen;
|
||||
|
||||
assert (drawable != NULL);
|
||||
__DRIdrawablePrivate *const drawable = rmesa->dri.drawable;
|
||||
__DRIdrawablePrivate *const readable = rmesa->dri.readable;
|
||||
__DRIscreenPrivate *sPriv = rmesa->dri.screen;
|
||||
|
||||
drmGetLock(radeon->dri.fd, radeon->dri.hwContext, flags);
|
||||
assert(drawable != NULL);
|
||||
|
||||
drmGetLock(rmesa->dri.fd, rmesa->dri.hwContext, flags);
|
||||
|
||||
/* The window might have moved, so we might need to get new clip
|
||||
* rects.
|
||||
|
|
@ -130,13 +140,13 @@ void radeonGetLock(radeonContextPtr radeon, 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, drawable );
|
||||
DRI_VALIDATE_DRAWABLE_INFO(sPriv, drawable);
|
||||
if (drawable != readable) {
|
||||
DRI_VALIDATE_DRAWABLE_INFO( sPriv, readable );
|
||||
DRI_VALIDATE_DRAWABLE_INFO(sPriv, readable);
|
||||
}
|
||||
|
||||
if (IS_R300_CLASS(radeon->radeonScreen))
|
||||
r300RegainedLock(radeon);
|
||||
|
||||
radeon->lost_context = GL_TRUE;
|
||||
if (IS_R300_CLASS(rmesa->radeonScreen))
|
||||
r300RegainedLock(rmesa);
|
||||
|
||||
rmesa->lost_context = GL_TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,15 @@
|
|||
/*
|
||||
/**************************************************************************
|
||||
|
||||
Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
|
||||
VA Linux Systems Inc., Fremont, California.
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
The Weather Channel (TM) funded Tungsten Graphics to develop the
|
||||
initial release of the Radeon 8500 driver under the XFree86 license.
|
||||
This notice must be preserved.
|
||||
|
||||
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"), to deal in the Software without restriction, including
|
||||
|
|
@ -29,7 +34,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
/*
|
||||
* Authors:
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
*/
|
||||
|
||||
#ifndef __RADEON_LOCK_H__
|
||||
|
|
|
|||
|
|
@ -1,8 +1,12 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_lock.c,v 1.5 2002/10/30 12:51:55 alanh Exp $ */
|
||||
/**************************************************************************
|
||||
|
||||
Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
|
||||
VA Linux Systems Inc., Fremont, California.
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
The Weather Channel (TM) funded Tungsten Graphics to develop the
|
||||
initial release of the Radeon 8500 driver under the XFree86 license.
|
||||
This notice must be preserved.
|
||||
|
||||
All Rights Reserved.
|
||||
|
||||
|
|
@ -30,8 +34,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
/*
|
||||
* Authors:
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
*/
|
||||
|
||||
#include "glheader.h"
|
||||
|
|
@ -44,7 +49,6 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
#include "drirenderbuffer.h"
|
||||
|
||||
|
||||
#if DEBUG_LOCKING
|
||||
char *prevLockFile = NULL;
|
||||
int prevLockLine = 0;
|
||||
|
|
@ -52,17 +56,15 @@ int prevLockLine = 0;
|
|||
|
||||
/* Turn on/off page flipping according to the flags in the sarea:
|
||||
*/
|
||||
static void
|
||||
radeonUpdatePageFlipping( radeonContextPtr rmesa )
|
||||
static void radeonUpdatePageFlipping(radeonContextPtr rmesa)
|
||||
{
|
||||
rmesa->doPageFlip = rmesa->sarea->pfState;
|
||||
if (rmesa->glCtx->WinSysDrawBuffer) {
|
||||
driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer,
|
||||
rmesa->sarea->pfCurrentPage);
|
||||
}
|
||||
rmesa->doPageFlip = rmesa->sarea->pfState;
|
||||
if (rmesa->glCtx->WinSysDrawBuffer) {
|
||||
driFlipRenderbuffers(rmesa->glCtx->WinSysDrawBuffer,
|
||||
rmesa->sarea->pfCurrentPage);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* 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
|
||||
|
|
@ -71,51 +73,52 @@ radeonUpdatePageFlipping( radeonContextPtr rmesa )
|
|||
* the hardware lock when it changes the window state, this routine will
|
||||
* automatically be called after such a change.
|
||||
*/
|
||||
void radeonGetLock( radeonContextPtr rmesa, GLuint flags )
|
||||
void radeonGetLock(radeonContextPtr rmesa, GLuint flags)
|
||||
{
|
||||
__DRIdrawablePrivate *const drawable = rmesa->dri.drawable;
|
||||
__DRIdrawablePrivate *const readable = rmesa->dri.readable;
|
||||
__DRIscreenPrivate *sPriv = rmesa->dri.screen;
|
||||
drm_radeon_sarea_t *sarea = rmesa->sarea;
|
||||
__DRIdrawablePrivate *const drawable = rmesa->dri.drawable;
|
||||
__DRIdrawablePrivate *const readable = rmesa->dri.readable;
|
||||
__DRIscreenPrivate *sPriv = rmesa->dri.screen;
|
||||
drm_radeon_sarea_t *sarea = rmesa->sarea;
|
||||
|
||||
drmGetLock( rmesa->dri.fd, rmesa->dri.hwContext, flags );
|
||||
drmGetLock(rmesa->dri.fd, rmesa->dri.hwContext, 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, drawable );
|
||||
if (drawable != readable) {
|
||||
DRI_VALIDATE_DRAWABLE_INFO( sPriv, readable );
|
||||
}
|
||||
/* 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, drawable);
|
||||
if (drawable != readable) {
|
||||
DRI_VALIDATE_DRAWABLE_INFO(sPriv, readable);
|
||||
}
|
||||
|
||||
if ( rmesa->lastStamp != drawable->lastStamp ) {
|
||||
radeonUpdatePageFlipping( rmesa );
|
||||
radeonSetCliprects( rmesa );
|
||||
radeonUpdateViewportOffset( rmesa->glCtx );
|
||||
driUpdateFramebufferSize(rmesa->glCtx, drawable);
|
||||
}
|
||||
if (rmesa->lastStamp != drawable->lastStamp) {
|
||||
radeonUpdatePageFlipping(rmesa);
|
||||
radeonSetCliprects(rmesa);
|
||||
radeonUpdateViewportOffset(rmesa->glCtx);
|
||||
driUpdateFramebufferSize(rmesa->glCtx, drawable);
|
||||
}
|
||||
|
||||
RADEON_STATECHANGE( rmesa, ctx );
|
||||
if (rmesa->sarea->tiling_enabled) {
|
||||
rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |= RADEON_COLOR_TILE_ENABLE;
|
||||
}
|
||||
else {
|
||||
rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] &= ~RADEON_COLOR_TILE_ENABLE;
|
||||
}
|
||||
RADEON_STATECHANGE(rmesa, ctx);
|
||||
if (rmesa->sarea->tiling_enabled) {
|
||||
rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] |=
|
||||
RADEON_COLOR_TILE_ENABLE;
|
||||
} else {
|
||||
rmesa->hw.ctx.cmd[CTX_RB3D_COLORPITCH] &=
|
||||
~RADEON_COLOR_TILE_ENABLE;
|
||||
}
|
||||
|
||||
if ( sarea->ctx_owner != rmesa->dri.hwContext ) {
|
||||
int i;
|
||||
sarea->ctx_owner = rmesa->dri.hwContext;
|
||||
if (sarea->ctx_owner != rmesa->dri.hwContext) {
|
||||
int i;
|
||||
sarea->ctx_owner = rmesa->dri.hwContext;
|
||||
|
||||
for ( i = 0 ; i < rmesa->nr_heaps ; i++ ) {
|
||||
DRI_AGE_TEXTURES( rmesa->texture_heaps[ i ] );
|
||||
}
|
||||
}
|
||||
for (i = 0; i < rmesa->nr_heaps; i++) {
|
||||
DRI_AGE_TEXTURES(rmesa->texture_heaps[i]);
|
||||
}
|
||||
}
|
||||
|
||||
rmesa->lost_context = GL_TRUE;
|
||||
rmesa->lost_context = GL_TRUE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,12 @@
|
|||
/* $XFree86: xc/lib/GL/mesa/src/drv/radeon/radeon_lock.h,v 1.3 2002/10/30 12:51:55 alanh Exp $ */
|
||||
/**************************************************************************
|
||||
|
||||
Copyright 2000, 2001 ATI Technologies Inc., Ontario, Canada, and
|
||||
VA Linux Systems Inc., Fremont, California.
|
||||
Copyright (C) The Weather Channel, Inc. 2002. All Rights Reserved.
|
||||
|
||||
The Weather Channel (TM) funded Tungsten Graphics to develop the
|
||||
initial release of the Radeon 8500 driver under the XFree86 license.
|
||||
This notice must be preserved.
|
||||
|
||||
All Rights Reserved.
|
||||
|
||||
|
|
@ -30,8 +34,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
||||
/*
|
||||
* Authors:
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
* Gareth Hughes <gareth@valinux.com>
|
||||
* Keith Whitwell <keith@tungstengraphics.com>
|
||||
* Kevin E. Martin <martin@valinux.com>
|
||||
*/
|
||||
|
||||
#ifndef __RADEON_LOCK_H__
|
||||
|
|
@ -83,7 +88,6 @@ extern int prevLockLine;
|
|||
* do not do any drawing !!!
|
||||
*/
|
||||
|
||||
|
||||
/* Lock the hardware and validate our state.
|
||||
*/
|
||||
#define LOCK_HARDWARE( rmesa ) \
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue