Переглянути джерело

revert XMesaCreateContext changes

tags/mesa_3_5
Keith Whitwell 24 роки тому
джерело
коміт
7a1f3a37a1
2 змінених файлів з 85 додано та 90 видалено
  1. 21
    25
      src/mesa/drivers/x11/fakeglx.c
  2. 64
    65
      src/mesa/drivers/x11/xm_api.c

+ 21
- 25
src/mesa/drivers/x11/fakeglx.c Переглянути файл

@@ -1,4 +1,4 @@
/* $Id: fakeglx.c,v 1.43 2001/01/08 04:06:20 keithw Exp $ */
/* $Id: fakeglx.c,v 1.44 2001/01/08 04:55:22 keithw Exp $ */

/*
* Mesa 3-D graphics library
@@ -1090,7 +1090,7 @@ Fake_glXCreateContext( Display *dpy, XVisualInfo *visinfo,
GLXContext share_list, Bool direct )
{
XMesaVisual glxvis;
struct __GLcontextRec *ctx;
XMesaContext xmctx;

/* deallocate unused windows/buffers */
XMesaGarbageCollect();
@@ -1105,13 +1105,12 @@ Fake_glXCreateContext( Display *dpy, XVisualInfo *visinfo,
}
}

ctx = XMesaCreateContext( glxvis, (struct __GLcontextRec *) share_list );
if (ctx) {
XMesaContext xmctx = (XMesaContext)(ctx->DriverCtx);
xmctx = XMesaCreateContext( glxvis, (XMesaContext) share_list );
if (xmctx) {
/* set the direct/indirect flag */
xmctx->direct = direct;
}
return (GLXContext) ctx;
return (GLXContext) xmctx;
}


@@ -1124,16 +1123,15 @@ static XMesaBuffer MakeCurrent_PrevReadBuffer = 0;
/* GLX 1.3 and later */
static Bool
Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
GLXDrawable read, GLXContext glxctx )
GLXDrawable read, GLXContext ctx )
{
if (glxctx && draw && read) {
if (ctx && draw && read) {
XMesaBuffer drawBuffer, readBuffer;
GLcontext *ctx = (GLcontext *) glxctx;
XMesaContext xmctx = (XMesaContext)(ctx->DriverCtx);
XMesaContext xmctx = (XMesaContext) ctx;

/* Find the XMesaBuffer which corresponds to the GLXDrawable 'draw' */
if (glxctx == MakeCurrent_PrevContext &&
draw == MakeCurrent_PrevDrawable) {
if (ctx == MakeCurrent_PrevContext
&& draw == MakeCurrent_PrevDrawable) {
drawBuffer = MakeCurrent_PrevDrawBuffer;
}
else {
@@ -1141,7 +1139,7 @@ Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
}
if (!drawBuffer) {
/* drawable must be a new window! */
drawBuffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, draw, xmctx );
drawBuffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, draw, (XMesaContext) ctx );
if (!drawBuffer) {
/* Out of memory, or context/drawable depth mismatch */
return False;
@@ -1149,7 +1147,7 @@ Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
}

/* Find the XMesaBuffer which corresponds to the GLXDrawable 'read' */
if (glxctx == MakeCurrent_PrevContext
if (ctx == MakeCurrent_PrevContext
&& read == MakeCurrent_PrevReadable) {
readBuffer = MakeCurrent_PrevReadBuffer;
}
@@ -1158,23 +1156,23 @@ Fake_glXMakeContextCurrent( Display *dpy, GLXDrawable draw,
}
if (!readBuffer) {
/* drawable must be a new window! */
readBuffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, read, xmctx );
readBuffer = XMesaCreateWindowBuffer2( xmctx->xm_visual, read, (XMesaContext) ctx );
if (!readBuffer) {
/* Out of memory, or context/drawable depth mismatch */
return False;
}
}

MakeCurrent_PrevContext = glxctx;
MakeCurrent_PrevContext = ctx;
MakeCurrent_PrevDrawable = draw;
MakeCurrent_PrevReadable = read;
MakeCurrent_PrevDrawBuffer = drawBuffer;
MakeCurrent_PrevReadBuffer = readBuffer;

/* Now make current! */
return (Bool) XMesaMakeCurrent2(xmctx, drawBuffer, readBuffer);
return (Bool) XMesaMakeCurrent2((XMesaContext) ctx, drawBuffer, readBuffer);
}
else if (!glxctx && !draw && !read) {
else if (!ctx && !draw && !read) {
/* release current context w/out assigning new one. */
XMesaMakeCurrent( NULL, NULL );
MakeCurrent_PrevContext = 0;
@@ -1269,10 +1267,10 @@ static void
Fake_glXCopyContext( Display *dpy, GLXContext src, GLXContext dst,
unsigned long mask )
{
struct __GLcontextRec *csrc = (struct __GLcontextRec *) src;
struct __GLcontextRec *cdst = (struct __GLcontextRec *) dst;
XMesaContext xm_src = (XMesaContext) src;
XMesaContext xm_dst = (XMesaContext) dst;
(void) dpy;
_mesa_copy_context( csrc, cdst, (GLuint) mask );
_mesa_copy_context( xm_src->gl_ctx, xm_dst->gl_ctx, (GLuint) mask );
}


@@ -1299,14 +1297,13 @@ void _kw_ungrab_all( Display *dpy )
static void
Fake_glXDestroyContext( Display *dpy, GLXContext ctx )
{
XMesaContext xmctx = (XMesaContext)(((GLcontext *)ctx)->DriverCtx);
(void) dpy;
MakeCurrent_PrevContext = 0;
MakeCurrent_PrevDrawable = 0;
MakeCurrent_PrevReadable = 0;
MakeCurrent_PrevDrawBuffer = 0;
MakeCurrent_PrevReadBuffer = 0;
XMesaDestroyContext( xmctx );
XMesaDestroyContext( (XMesaContext) ctx );
XMesaGarbageCollect();
}

@@ -1315,9 +1312,8 @@ Fake_glXDestroyContext( Display *dpy, GLXContext ctx )
static Bool
Fake_glXIsDirect( Display *dpy, GLXContext ctx )
{
XMesaContext xmctx = (XMesaContext)(((GLcontext *)ctx)->DriverCtx);
(void) dpy;
return xmctx->direct;
return ((XMesaContext) ctx)->direct;
}



+ 64
- 65
src/mesa/drivers/x11/xm_api.c Переглянути файл

@@ -1,4 +1,4 @@
/* $Id: xm_api.c,v 1.14 2001/01/08 04:06:20 keithw Exp $ */
/* $Id: xm_api.c,v 1.15 2001/01/08 04:55:22 keithw Exp $ */

/*
* Mesa 3-D graphics library
@@ -1613,8 +1613,7 @@ void XMesaDestroyVisual( XMesaVisual v )
* lists or NULL if no sharing is wanted.
* Return: an XMesaContext or NULL if error.
*/
struct __GLcontextRec *XMesaCreateContext( XMesaVisual v,
struct __GLcontextRec *share_list )
XMesaContext XMesaCreateContext( XMesaVisual v, XMesaContext share_list )
{
XMesaContext c;
GLcontext *ctx;
@@ -1633,9 +1632,8 @@ struct __GLcontextRec *XMesaCreateContext( XMesaVisual v,
}

ctx = c->gl_ctx = _mesa_create_context( v->gl_visual,
share_list,
(void *) c,
direct );
share_list ? share_list->gl_ctx : (GLcontext *) NULL,
(void *) c, direct );
if (!c->gl_ctx) {
FREE(c);
return NULL;
@@ -1678,7 +1676,8 @@ struct __GLcontextRec *XMesaCreateContext( XMesaVisual v,
*/
_mesa_context_initialize( ctx );

return ctx;

return c;
}


@@ -1760,12 +1759,12 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
assert(v);

#ifdef XFree86Server
if (GET_VISUAL_DEPTH(v) != ((XMesaDrawable)w)->depth)
if (GET_VISUAL_DEPTH(v) != ((XMesaDrawable)w)->depth) {
#else
XGetWindowAttributes( v->display, w, &attr );
if (GET_VISUAL_DEPTH(v) != attr.depth)
XGetWindowAttributes( v->display, w, &attr );

if (GET_VISUAL_DEPTH(v) != attr.depth) {
#endif
{
if (getenv("MESA_DEBUG")) {
fprintf(stderr, "XMesaCreateWindowBuffer: depth mismatch between visual and window!\n");
}
@@ -1826,61 +1825,61 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
#ifdef FX
fxEnvVar = getenv("MESA_GLX_FX");
if (fxEnvVar) {
if (fxEnvVar[0]!='d') {
int attribs[100];
int numAttribs = 0;
int hw;
if (v->gl_visual->DepthBits > 0) {
attribs[numAttribs++] = FXMESA_DEPTH_SIZE;
attribs[numAttribs++] = 1;
}
if (v->gl_visual->DBflag) {
attribs[numAttribs++] = FXMESA_DOUBLEBUFFER;
}
if (v->gl_visual->AccumRedBits > 0) {
attribs[numAttribs++] = FXMESA_ACCUM_SIZE;
attribs[numAttribs++] = v->gl_visual->AccumRedBits;
}
if (v->gl_visual->StencilBits > 0) {
attribs[numAttribs++] = FXMESA_STENCIL_SIZE;
attribs[numAttribs++] = v->gl_visual->StencilBits;
}
if (v->gl_visual->AlphaBits > 0) {
attribs[numAttribs++] = FXMESA_ALPHA_SIZE;
attribs[numAttribs++] = 1;
}
if (c->gl_ctx) {
if (fxEnvVar[0]!='d') {
int attribs[100];
int numAttribs = 0;
int hw;
if (v->gl_visual->DepthBits > 0) {
attribs[numAttribs++] = FXMESA_DEPTH_SIZE;
attribs[numAttribs++] = 1;
}
if (v->gl_visual->DBflag) {
attribs[numAttribs++] = FXMESA_DOUBLEBUFFER;
}
if (v->gl_visual->AccumRedBits > 0) {
attribs[numAttribs++] = FXMESA_ACCUM_SIZE;
attribs[numAttribs++] = v->gl_visual->AccumRedBits;
}
if (v->gl_visual->StencilBits > 0) {
attribs[numAttribs++] = FXMESA_STENCIL_SIZE;
attribs[numAttribs++] = v->gl_visual->StencilBits;
}
if (v->gl_visual->AlphaBits > 0) {
attribs[numAttribs++] = FXMESA_ALPHA_SIZE;
attribs[numAttribs++] = 1;
}
if (c->gl_ctx) {
#define FXMESA_SHARE_CONTEXT 990099 /* keep in sync with fxapi.c! */
attribs[numAttribs++] = FXMESA_SHARE_CONTEXT;
attribs[numAttribs++] = (int) c->gl_ctx;
}
attribs[numAttribs++] = FXMESA_NONE;
if ((hw = fxQueryHardware())==GR_SSTTYPE_VOODOO) {
b->FXctx = fxMesaCreateBestContext(0, b->width, b->height, attribs);
if ((v->undithered_pf!=PF_INDEX) && (b->backimage)) {
b->FXisHackUsable = b->FXctx ? GL_TRUE : GL_FALSE;
if (fxEnvVar[0]=='w' || fxEnvVar[0]=='W')
b->FXwindowHack = b->FXctx ? GL_TRUE : GL_FALSE;
else
b->FXwindowHack = GL_FALSE;
}
}
else {
if (fxEnvVar[0]=='w' || fxEnvVar[0]=='W')
b->FXctx = fxMesaCreateContext(w, GR_RESOLUTION_NONE,
GR_REFRESH_75Hz, attribs);
else
b->FXctx = fxMesaCreateBestContext(0, b->width, b->height, attribs);
b->FXisHackUsable = GL_FALSE;
b->FXwindowHack = GL_FALSE;
}
/*
fprintf(stderr,
"voodoo %d, wid %d height %d hack: usable %d active %d\n",
hw, b->width, b->height, b->FXisHackUsable, b->FXwindowHack);
*/
}
attribs[numAttribs++] = FXMESA_SHARE_CONTEXT;
attribs[numAttribs++] = (int) c->gl_ctx;
}
attribs[numAttribs++] = FXMESA_NONE;
if ((hw = fxQueryHardware())==GR_SSTTYPE_VOODOO) {
b->FXctx = fxMesaCreateBestContext(0, b->width, b->height, attribs);
if ((v->undithered_pf!=PF_INDEX) && (b->backimage)) {
b->FXisHackUsable = b->FXctx ? GL_TRUE : GL_FALSE;
if (fxEnvVar[0]=='w' || fxEnvVar[0]=='W')
b->FXwindowHack = b->FXctx ? GL_TRUE : GL_FALSE;
else
b->FXwindowHack = GL_FALSE;
}
}
else {
if (fxEnvVar[0]=='w' || fxEnvVar[0]=='W')
b->FXctx = fxMesaCreateContext(w, GR_RESOLUTION_NONE,
GR_REFRESH_75Hz, attribs);
else
b->FXctx = fxMesaCreateBestContext(0, b->width, b->height, attribs);
b->FXisHackUsable = GL_FALSE;
b->FXwindowHack = GL_FALSE;
}
/*
fprintf(stderr,
"voodoo %d, wid %d height %d hack: usable %d active %d\n",
hw, b->width, b->height, b->FXisHackUsable, b->FXwindowHack);
*/
}
}
else {
fprintf(stderr,"WARNING: This Mesa Library includes the Glide driver but\n");

Завантаження…
Відмінити
Зберегти