Commit 302c5694 authored by Keith Whitwell's avatar Keith Whitwell

Push a number of global variables into the viaContext struct.

Remove the bogus 'current_vmesa' pointer.
parent 1d270840
......@@ -65,7 +65,6 @@
#include "vblank.h"
#include "utils.h"
viaContextPtr current_mesa;
#ifdef DEBUG
GLuint VIA_DEBUG = 0;
#endif
......@@ -78,7 +77,6 @@ GLuint idle = 0;
hash_element hash_table[HASH_TABLE_SIZE][HASH_TABLE_DEPTH];
#endif
/*=* John Sheng [2003.5.31] agp tex *=*/
extern GLuint agpFullCount;
static GLboolean
AllocateBuffer(viaContextPtr vmesa)
......@@ -204,7 +202,8 @@ calculate_buffer_parameters( viaContextPtr vmesa )
+ extra;
vmesa->back.size = vmesa->back.pitch * vmesa->driDrawable->h;
if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent backbuffer: w = %d h = %d bpp = %d sizs = %d\n",
if (VIA_DEBUG) fprintf(stderr, "%s backbuffer: w = %d h = %d bpp = %d sizs = %d\n",
__FUNCTION__,
vmesa->back.pitch,
vmesa->driDrawable->h,
8 << shift,
......@@ -224,7 +223,8 @@ calculate_buffer_parameters( viaContextPtr vmesa )
(void) memset( & vmesa->depth, 0, sizeof( vmesa->depth ) );
}
if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent depthbuffer: w = %d h = %d bpp = %d sizs = %d\n",
if (VIA_DEBUG) fprintf(stderr, "%s depthbuffer: w = %d h = %d bpp = %d sizs = %d\n",
__FUNCTION__,
vmesa->depth.pitch,
vmesa->driDrawable->h,
vmesa->depth.bpp,
......@@ -254,10 +254,9 @@ calculate_buffer_parameters( viaContextPtr vmesa )
void viaReAllocateBuffers(GLframebuffer *drawbuffer)
{
GLcontext *ctx;
viaContextPtr vmesa = current_mesa;
GET_CURRENT_CONTEXT(ctx);
viaContextPtr vmesa = VIA_CONTEXT(ctx);
ctx = vmesa->glCtx;
ctx->DrawBuffer->Width = drawbuffer->Width;
ctx->DrawBuffer->Height = drawbuffer->Height;
......@@ -273,11 +272,11 @@ void viaReAllocateBuffers(GLframebuffer *drawbuffer)
if (VIA_DEBUG) fprintf(stderr, "%s - out\n", __FUNCTION__);
}
static void viaBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height)
{
/* MESA5.0 */
viaContextPtr vmesa = current_mesa;
static void viaBufferSize(GLframebuffer *buffer, GLuint *width, GLuint *height)
{
GET_CURRENT_CONTEXT(ctx);
viaContextPtr vmesa = VIA_CONTEXT(ctx);
*width = vmesa->driDrawable->w;
*height = vmesa->driDrawable->h;
}
......@@ -406,7 +405,6 @@ viaCreateContext(const __GLcontextModes *mesaVis,
driParseConfigFiles (&vmesa->optionCache, &viaScreen->optionCache,
sPriv->myNum, "via");
current_mesa = vmesa;
/* pick back buffer */
if (mesaVis->doubleBufferMode) {
vmesa->hasBack = GL_TRUE;
......@@ -657,12 +655,12 @@ viaDestroyContext(__DRIcontextPrivate *driContextPriv)
viaContextPtr vmesa = (viaContextPtr)driContextPriv->driverPrivate;
if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
assert(vmesa); /* should never be null */
viaFlushPrimsLocked(vmesa);
/* viaFlushPrimsLocked(vmesa); */
WAIT_IDLE
if (vmesa) {
/*=* John Sheng [2003.5.31] agp tex *=*/
if(VIA_DEBUG) fprintf(stderr, "agpFullCount = %d\n", agpFullCount);
if(VIA_DEBUG) fprintf(stderr, "agpFullCount = %d\n", vmesa->agpFullCount);
_swsetup_DestroyContext(vmesa->glCtx);
_tnl_DestroyContext(vmesa->glCtx);
......@@ -927,8 +925,6 @@ viaMakeCurrent(__DRIcontextPrivate *driContextPriv,
if (driContextPriv) {
viaContextPtr vmesa = (viaContextPtr)driContextPriv->driverPrivate;
current_mesa = vmesa;
if (VIA_DEBUG) fprintf(stderr, "viaMakeCurrent: w = %d\n", vmesa->driDrawable->w);
if ( vmesa->driDrawable != driDrawPriv ) {
......@@ -963,8 +959,13 @@ void viaGetLock(viaContextPtr vmesa, GLuint flags)
__DRIscreenPrivate *psp;
pdp = dPriv;
psp = sPriv;
if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
if (VIA_DEBUG) fprintf(stderr, "drmGetLock - in\n");
if (VIA_DEBUG) {
fprintf(stderr, "%s - in\n", __FUNCTION__);
fprintf(stderr, "is: %x non-contend: %x want: %x\n",
*(GLuint *)vmesa->driHwLock, vmesa->hHWContext,
(DRM_LOCK_HELD|vmesa->hHWContext));
}
drmGetLock(vmesa->driFd, vmesa->hHWContext, flags);
DRI_VALIDATE_DRAWABLE_INFO( sPriv, dPriv );
......@@ -972,11 +973,7 @@ void viaGetLock(viaContextPtr vmesa, GLuint flags)
if (sarea->ctxOwner != me) {
vmesa->uploadCliprects = GL_TRUE;
sarea->ctxOwner = me;
vmesa->dirty |= (VIA_UPLOAD_CTX |
VIA_UPLOAD_BUFFERS |
VIA_UPLOAD_TEX0 |
VIA_UPLOAD_TEX1 |
VIA_UPLOAD_CLIPRECTS);
vmesa->needUploadAllState = 1;
}
viaXMesaWindowMoved(vmesa);
......
......@@ -292,6 +292,9 @@ struct via_context_t {
GLuint* agpBase;
GLuint drawType;
GLuint nDoneFirstFlip;
GLuint agpFullCount;
/* Configuration cache
*/
driOptionCache optionCache;
......
......@@ -77,11 +77,7 @@ v * copy of this software and associated documentation files (the "Software"),
typedef enum {VIABLIT_TRANSCOPY, VIABLIT_COPY, VIABLIT_FILL} ViaBlitOps;
GLuint FrameCount = 0;
GLuint dmaLow = 0;
/*=* John Sheng [2003.5.31] flip *=*/
GLuint nFirstSwap = GL_TRUE;
GLuint nFirstFlip = GL_TRUE;
#define SetReg2DAGP(nReg, nData) { \
*((GLuint *)(vb)) = ((nReg) >> 2) | 0xF0000000; \
*((GLuint *)(vb) + 1) = (nData); \
......@@ -475,10 +471,10 @@ void viaPageFlip(const __DRIdrawablePrivate *dPriv)
}
SetReg2DAGP(0x214, nBackBase);
viaFlushPrimsLocked(vmesa);*/
if (nFirstFlip) {
if (!vmesa->nDoneFirstFlip) {
*((volatile GLuint *)((GLuint)vmesa->regMMIOBase + 0x43c)) = 0x00fe0000;
*((volatile GLuint *)((GLuint)vmesa->regMMIOBase + 0x440)) = 0x00001004;
nFirstFlip = GL_FALSE;
vmesa->nDoneFirstFlip = GL_TRUE;
}
*((GLuint *)((GLuint)vmesa->regMMIOBase + 0x214)) = nBackBase;
}
......@@ -486,14 +482,14 @@ void viaPageFlip(const __DRIdrawablePrivate *dPriv)
else {
viaFlushPrimsLocked(vmesa);
vb = viaCheckDma(vmesa, 8 * 4);
if (nFirstFlip) {
if (!vmesa->nDoneFirstFlip) {
*vb++ = HALCYON_HEADER2;
*vb++ = 0x00fe0000;
*vb++ = 0x0000000e;
*vb++ = 0x0000000e;
vmesa->dmaLow += 16;
nFirstFlip = GL_FALSE;
vmesa->nDoneFirstFlip = GL_FALSE;
}
nBackBase = (vmesa->back.offset );
......@@ -580,6 +576,10 @@ void viaFlushPrimsLocked(viaContextPtr vmesa)
GLuint *vb = viaCheckDma(vmesa, 0);
int i;
if (*(GLuint *)vmesa->driHwLock != (DRM_LOCK_HELD|vmesa->hHWContext) &&
*(GLuint *)vmesa->driHwLock != (DRM_LOCK_HELD|DRM_LOCK_CONT|vmesa->hHWContext))
fprintf(stderr, "%s called without lock held\n", __FUNCTION__);
if (vmesa->dmaLow == DMA_OFFSET) {
return;
}
......@@ -635,20 +635,7 @@ void viaFlushPrimsLocked(viaContextPtr vmesa)
else if (nbox > VIA_NR_SAREA_CLIPRECTS) {
vmesa->uploadCliprects = GL_TRUE;
}
/*=* John Sheng [2003.5.31] flip *=*/
/*
if (VIA_DEBUG) {
GLuint i;
GLuint *data = (GLuint *)vmesa->dmaAddr;
for (i = 0; i < vmesa->dmaLow; i += 16) {
fprintf(stderr, "%08x ", *data++);
fprintf(stderr, "%08x ", *data++);
fprintf(stderr, "%08x ", *data++);
fprintf(stderr, "%08x\n", *data++);
}
fprintf(stderr, "******************************************\n");
}
*/
if (!nbox || !vmesa->uploadCliprects) {
if (nbox == 1)
sarea->nbox = 0;
......@@ -1294,7 +1281,6 @@ void viaDoSwapPBuffers(viaContextPtr vmesa)
#define VIA_CMDBUF_MAX_LAG 50000
int flush_sys(viaContextPtr vmesa, drm_via_flush_sys_t* buf)
{
GLuint *pnBuf;
GLuint *pnEnd;
......@@ -1372,15 +1358,24 @@ int flush_sys(viaContextPtr vmesa, drm_via_flush_sys_t* buf)
bSiz.size = VIA_CMDBUF_MAX_LAG;
while ( -EAGAIN == (ret = drmCommandWriteRead(vmesa->driFd, DRM_VIA_CMDBUF_SIZE,
&bSiz, sizeof(bSiz))));
if (ret)
_mesa_error(vmesa->glCtx, GL_INVALID_OPERATION, "viaCommandBufferLag");
if (ret) {
_mesa_error(vmesa->glCtx, GL_INVALID_OPERATION, __FUNCTION__);
abort();
}
while ( -EAGAIN == (ret = drmCommandWrite(vmesa->driFd, DRM_VIA_CMDBUFFER,
&bufI, sizeof(bufI))));
if (ret) {
abort();
}
}
if (ret) {
if (vmesa->useAgp) WAIT_IDLE;
/* for (i = 0; */
if (drmCommandWrite(vmesa->driFd, DRM_VIA_PCICMD, &bufI, sizeof(bufI))) {
_mesa_error(vmesa->glCtx, GL_INVALID_OPERATION, "viaCommandBufferFlush");
_mesa_error(vmesa->glCtx, GL_INVALID_OPERATION, __FUNCTION__);
abort();
}
}
}
......@@ -1450,16 +1445,22 @@ int flush_sys(viaContextPtr vmesa, drm_via_flush_sys_t* buf)
bSiz.size = VIA_CMDBUF_MAX_LAG;
while ( -EAGAIN == (ret = drmCommandWriteRead(vmesa->driFd, DRM_VIA_CMDBUF_SIZE,
&bSiz, sizeof(bSiz))));
if (ret)
_mesa_error(vmesa->glCtx, GL_INVALID_OPERATION, "viaCommandBufferLag");
while ( -EAGAIN == (ret = drmCommandWrite(vmesa->driFd, DRM_VIA_CMDBUFFER,
&bufI, sizeof(bufI))));
if (ret) {
_mesa_error(vmesa->glCtx, GL_INVALID_OPERATION, __FUNCTION__);
abort();
}
while ( -EAGAIN == (ret = drmCommandWrite(vmesa->driFd, DRM_VIA_CMDBUFFER,
&bufI, sizeof(bufI))));
if (ret) {
abort();
}
}
if (ret) {
if (vmesa->useAgp) WAIT_IDLE;
if (drmCommandWrite(vmesa->driFd, DRM_VIA_PCICMD, &bufI, sizeof(bufI))) {
_mesa_error(vmesa->glCtx, GL_INVALID_OPERATION, "viaCommandBufferFlush");
_mesa_error(vmesa->glCtx, GL_INVALID_OPERATION, __FUNCTION__);
abort();
}
}
......
......@@ -60,8 +60,6 @@ DRI_CONF_END;
static const GLuint __driNConfigOptions = 3;
extern viaContextPtr current_mesa;
#ifdef USE_NEW_INTERFACE
static PFNGLXCREATECONTEXTMODES create_context_modes = NULL;
#endif /* USE_NEW_INTERFACE */
......@@ -221,10 +219,17 @@ viaCreateBuffer(__DRIscreenPrivate *driScrnPriv,
const __GLcontextModes *mesaVis,
GLboolean isPixmap)
{
viaContextPtr vmesa = current_mesa;
/* KW: Bogus: Do this sort of thing in MakeCurrent or similar.
*/
viaContextPtr vmesa;
GET_CURRENT_CONTEXT(ctx);
if (ctx)
vmesa = VIA_CONTEXT(ctx);
if (VIA_DEBUG) fprintf(stderr, "%s - in\n", __FUNCTION__);
/*=* John Sheng [2003.7.2] for visual config & patch viewperf *=*/
if (mesaVis->depthBits == 32 && vmesa->depthBits == 16) {
if (vmesa && mesaVis->depthBits == 32 && vmesa->depthBits == 16) {
vmesa->depthBits = mesaVis->depthBits;
vmesa->depth.size *= 2;
vmesa->depth.pitch *= 2;
......
......@@ -40,7 +40,6 @@
#include "via_ioctl.h"
#include "via_fb.h"
/*=* John Sheng [2003.5.31] agp tex *=*/
GLuint agpFullCount = 0;
void viaDestroyTexObj(viaContextPtr vmesa, viaTextureObjectPtr t)
{
......@@ -410,7 +409,7 @@ void viaUploadTexImages(viaContextPtr vmesa, viaTextureObjectPtr t)
if (via_alloc_texture(vmesa, t))
break;
agpFullCount++;
vmesa->agpFullCount++;
if (vmesa->TexObjList.prev == vmesa->CurrentTexObj[0] ||
vmesa->TexObjList.prev == vmesa->CurrentTexObj[1]) {
if (VIA_DEBUG) fprintf(stderr, "Hit bound texture in upload\n");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment