Merge branch 'mesa_7_7_branch'
[mesa.git] / src / mesa / drivers / glide / fxapi.c
index 47aa0464eb678e89a55906cce1864781ac80a2eb..238f491599591cad425ac50aa37db5b12bd708bb 100644 (file)
 #include "fxdrv.h"
 
 #include "drivers/common/driverfuncs.h"
+#include "main/framebuffer.h"
 
 #ifndef TDFX_DEBUG
-int TDFX_DEBUG = (0 
+int TDFX_DEBUG = (0
 /*               | VERBOSE_VARRAY */
 /*               | VERBOSE_TEXTURE */
 /*               | VERBOSE_IMMEDIATE */
@@ -356,11 +357,7 @@ fxMesaCreateContext(GLuint win,
  }
 
  grSstSelect(glbCurrentBoard);
- /*grEnable(GR_OPENGL_MODE_EXT);*/ /* ZZZ: trick to make GL happy.
-                                  Glide3 will unmap memory for card when grSstWinClose is called.
-                                  This also forces the SLI band height to be 32 (above 1024x768) or 16
-                                  and disables the splash screen due to y-origin swapping.
-                                  Note: We only want the former. */
+ /*grEnable(GR_OPENGL_MODE_EXT);*/ /* [koolsmoky] */
  voodoo = &glbHWConfig.SSTs[glbCurrentBoard];
 
  fxMesa = (fxMesaContext)CALLOC_STRUCT(tfxMesaContext);
@@ -393,7 +390,7 @@ fxMesaCreateContext(GLuint win,
         case GR_SSTTYPE_SST96:
         case GR_SSTTYPE_Banshee:
              fxMesa->bgrOrder = GL_TRUE;
-             fxMesa->snapVertices = GL_TRUE;
+             fxMesa->snapVertices = (getenv("MESA_FX_NOSNAP") == NULL);
              break;
         case GR_SSTTYPE_Voodoo2:
              fxMesa->bgrOrder = GL_TRUE;
@@ -411,7 +408,7 @@ fxMesaCreateContext(GLuint win,
              fxMesa->snapVertices = GL_FALSE;
              break;
  }
- /* ZZZ TO DO: Add the old SLI/AA settings for Napalm. */
+ /* XXX todo - Add the old SLI/AA settings for Napalm. */
  switch(voodoo->numChips) {
  case 4: /* 4 chips */
    switch(sliaa) {
@@ -526,8 +523,6 @@ fxMesaCreateContext(GLuint win,
      goto errorhandler;
  }
 
- /* ZZZ TODO: check if there is enough fbRam */
-
  /* Tips:
   * 1. we don't bother setting/checking AUX for stencil, because we'll decide
   *    later whether we have HW stencil, based on depth buffer (thus AUX is
@@ -567,8 +562,8 @@ fxMesaCreateContext(GLuint win,
 
  if ((str = Glide->grGetRegistryOrEnvironmentStringExt("FX_GLIDE_SWAPPENDINGCOUNT"))) {
     fxMesa->maxPendingSwapBuffers = atoi(str);
-    if (fxMesa->maxPendingSwapBuffers > 3) {
-       fxMesa->maxPendingSwapBuffers = 3;
+    if (fxMesa->maxPendingSwapBuffers > 6) {
+       fxMesa->maxPendingSwapBuffers = 6;
     } else if (fxMesa->maxPendingSwapBuffers < 0) {
        fxMesa->maxPendingSwapBuffers = 0;
     }
@@ -644,9 +639,8 @@ fxMesaCreateContext(GLuint win,
                       fxMesa->snapVertices ? "" : "no ");
    }
 
-  sprintf(fxMesa->rendererString, "Mesa %s v0.61 %s%s%s",
+  sprintf(fxMesa->rendererString, "Mesa %s v0.6%s%s",
           grGetString(GR_RENDERER),
-          getenv("MESA_3DFX_STRING") ? "3dfx " : "",
           grGetString(GR_HARDWARE),
           ((fxMesa->type < GR_SSTTYPE_Voodoo4) && (voodoo->numChips > 1)) ? " SLI" : "");
 
@@ -685,11 +679,17 @@ fxMesaCreateContext(GLuint win,
    }
 
 
-   fxMesa->glBuffer = _mesa_create_framebuffer(fxMesa->glVis,
+   fxMesa->glBuffer = _mesa_create_framebuffer(fxMesa->glVis);
+#if 0
+/* XXX this is a complete mess :(
+ *     _mesa_add_soft_renderbuffers
+ *     driNewRenderbuffer
+ */
                                               GL_FALSE,        /* no software depth */
                                               stencilSize && !fxMesa->haveHwStencil,
                                               fxMesa->glVis->accumRedBits > 0,
                                               alphaSize && !fxMesa->haveHwAlpha);
+#endif
    if (!fxMesa->glBuffer) {
       str = "_mesa_create_framebuffer";
       goto errorhandler;
@@ -700,7 +700,7 @@ fxMesaCreateContext(GLuint win,
    /* install signal handlers */
 #if defined(__linux__)
    /* Only install if environment var. is not set. */
-   if (fxMesa->glCtx->CatchSignals && !getenv("MESA_FX_NO_SIGNALS")) {
+   if (!getenv("MESA_FX_NO_SIGNALS")) {
       signal(SIGINT, cleangraphics_handler);
       signal(SIGHUP, cleangraphics_handler);
       signal(SIGPIPE, cleangraphics_handler);
@@ -728,7 +728,7 @@ errorhandler:
        FREE(fxMesa->fogTable);
     }
     if (fxMesa->glBuffer) {
-       _mesa_destroy_framebuffer(fxMesa->glBuffer);
+       _mesa_reference_framebuffer(&fxMesa->glBuffer, NULL);
     }
     if (fxMesa->glVis) {
        _mesa_destroy_visual(fxMesa->glVis);
@@ -819,21 +819,17 @@ fxMesaDestroyContext(fxMesaContext fxMesa)
               (unsigned) st.pixelsOut);
    }
 
-   /* [dBorca]
-    * close the hardware first, so we can debug
-    * atexit problems (memory leaks, etc).
-    * NB: fxDDDestroyFxMesaContext must be called
-    * before _mesa_destroy_context; which must be
-    * called before fxTMClose!
+   /* close the hardware first,
+    * so we can debug atexit problems (memory leaks, etc).
     */
    grSstWinClose(fxMesa->glideContext);
    fxCloseHardware();
 
-   fxDDDestroyFxMesaContext(fxMesa);
+   fxDDDestroyFxMesaContext(fxMesa); /* must be before _mesa_destroy_context */
    _mesa_destroy_visual(fxMesa->glVis);
    _mesa_destroy_context(fxMesa->glCtx);
-   _mesa_destroy_framebuffer(fxMesa->glBuffer);
-   fxTMClose(fxMesa);
+   _mesa_reference_framebuffer(&fxMesa->glBuffer, NULL);
+   fxTMClose(fxMesa); /* must be after _mesa_destroy_context */
 
    FREE(fxMesa);
 
@@ -849,7 +845,7 @@ void GLAPIENTRY
 fxMesaMakeCurrent(fxMesaContext fxMesa)
 {
    if (!fxMesa) {
-      _mesa_make_current(NULL, NULL);
+      _mesa_make_current(NULL, NULL, NULL);
       fxMesaCurrentCtx = NULL;
 
       if (TDFX_DEBUG & VERBOSE_DRIVER) {
@@ -881,13 +877,9 @@ fxMesaMakeCurrent(fxMesaContext fxMesa)
    grSstSelect(fxMesa->board);
    grGlideSetState((GrState *) fxMesa->state);
 
-   _mesa_make_current(fxMesa->glCtx, fxMesa->glBuffer);
+   _mesa_make_current(fxMesa->glCtx, fxMesa->glBuffer, fxMesa->glBuffer);
 
    fxSetupDDPointers(fxMesa->glCtx);
-
-   /* The first time we call MakeCurrent we set the initial viewport size */
-   if (fxMesa->glCtx->Viewport.Width == 0)
-      _mesa_set_viewport(fxMesa->glCtx, 0, 0, fxMesa->width, fxMesa->height);
 }