workaround for crash-upon-exit in verbose mode
authorDaniel Borca <dborca@users.sourceforge.net>
Tue, 2 Mar 2004 08:15:24 +0000 (08:15 +0000)
committerDaniel Borca <dborca@users.sourceforge.net>
Tue, 2 Mar 2004 08:15:24 +0000 (08:15 +0000)
fxMesa now uses grQueryResolution
minor fixes to X11 and DOS drivers

docs/README.3DFX
src/mesa/Makefile.DJ
src/mesa/Makefile.mgw
src/mesa/Makefile.wfx
src/mesa/drivers/dos/dmesa.c
src/mesa/drivers/glide/fxapi.c
src/mesa/drivers/glide/fxwgl.c
src/mesa/drivers/x11/xm_api.c

index 4b8e13fb9cc612670804873c95115ddbf5add94b..3169d298e2e925381c7f36c67a44d79a30aa6a12 100644 (file)
@@ -6,9 +6,9 @@
 Mesa-6.0 release notes:
 -----------------------
 
-1) Glide2 support has been ceased; in order to keep Voodoo Graphics
-   and Voodoo Rush compatibility, please visit the Glide SourceForge
-   and help us to fix Glide3 for those cards.
+1) Glide2 support has been ceased; in order to keep Voodoo Rush
+   compatibility, please visit the Glide SourceForge and help us
+   to fix Glide3 for those cards.
 2) The current release is a WIP; among other things, the Linux build works
    only to some extent. Any help will be appreciated.
 3) Glide3 can be found at http://sourceforge.net/projects/glide/
index f01c9b1e4c1b21148b1e9219b2f57158ec9c570e..ee14aa6c5af7d5d56932174f9eca0f9d150b77a7 100644 (file)
@@ -73,7 +73,7 @@ export LD_LIBRARY_PATH := $(LD_LIBRARY_PATH);$(LIBDIR);$(GLIDE)/lib
 CC = gcc
 CFLAGS += -I$(TOP)/include -I. -Imain -Iglapi
 ifeq ($(FX),1)
-CFLAGS += -D__DOS__ -DH3
+CFLAGS += -D__DOS__
 CFLAGS += -I$(GLIDE)/include -DFX
 LIBNAME = "Mesa/FX DJGPP"
 else
index 7db07bc1766672852ddf2f67a39163af40e2cf13..31b57959f92351c0b3f0f2fb4dfff353b6c04fb4 100644 (file)
@@ -74,7 +74,6 @@ CC = mingw32-gcc
 CFLAGS += -DBUILD_GL32 -D_OPENGL32_ -D_MSC_VER
 CFLAGS += -I$(TOP)/include -I. -Imain -Iglapi
 ifeq ($(FX),1)
-CFLAGS += -DH3
 CFLAGS += -I$(GLIDE)/include -DFX
 LDLIBS += -L$(GLIDE)/lib -lglide3x
 GL_DEF = drivers/glide/fxopengl.def
index 0a8b8c3b0e826ea2405355402ff9a3db5c1de63c..543dcfad0c9eef79a9912c3d30e154e710363c2e 100644 (file)
@@ -59,7 +59,7 @@ HAVE_3DNOW = 1
 ##################################
 # build flags
 ##################################
-FLAGS = -DH3 -DFX -DBUILD_GL32
+FLAGS = -DFX -DBUILD_GL32
 
 !if "$(USE_IEEE)"=="1"
 FLAGS = $(FLAGS) -D__i386__
index 752f13e909d3dd86292c5b3af78f58245a8fb596..f6ff5eb50bbb6b06223686cd834334f1eca03adf 100644 (file)
@@ -1360,44 +1360,7 @@ int DMesaGetIntegerv (GLenum pname, GLint *params)
              #ifndef FX
              return vl_get(VL_GET_VIDEO_MODES, params);
              #else
-             {
-              /* `vmode' struct must be sync'ed with `internal.h' (vl_mode)
-               * `vmode' list must be sync'ed with `fxapi.c'
-               * `hw >= 6' means Napalm and can do 32bit rendering
-               * TODO: we should take an envvar for `fxMesaSelectCurrentBoard'
-               */
-              static struct {
-                     int width, height;
-                     int bpp;
-              } vmode[] = {
-                     { 320,  200, 16 },
-                     { 320,  240, 16 },
-                     { 512,  384, 16 },
-                     { 640,  400, 16 },
-                     { 640,  480, 16 },
-                     { 800,  600, 16 },
-                     {1024,  768, 16 },
-
-                     { 320,  200, 32 },
-                     { 320,  240, 32 },
-                     { 512,  384, 32 },
-                     { 640,  400, 32 },
-                     { 640,  480, 32 },
-                     { 800,  600, 32 },
-                     {1024,  768, 32 }
-              };
-              int hw = fxMesaSelectCurrentBoard(0);
-              int i, n = sizeof(vmode) / sizeof(vmode[0]);
-              if (hw < 6) {
-                 n /= 2;
-              }
-              if (params) {
-                 for (i = 0; i < n; i++) {
-                     params[i] = (GLint)(&vmode[i]);
-                 }
-              }
-              return n;
-             }
+             return -1; /* TODO */
              #endif
         case DMESA_GET_BUFFER_ADDR:
              #ifndef FX
index 10d572a9e0cd6781b7960f056f7bec3117a25c28..930534fcd89363f9c0dc62bc7696015aebc192eb 100644 (file)
@@ -203,34 +203,65 @@ gl3DfxSetPaletteEXT(GLuint * pal)
 
 static GrScreenResolution_t fxBestResolution (int width, int height)
 {
- static int resolutions[][5] = {
-#if 1 /* Voodoo^2 can't fullscreen these, because of Glide */
-        { 320,  200, GR_RESOLUTION_320x200  },
-        { 320,  240, GR_RESOLUTION_320x240  },
-#endif
-        { 512,  384, GR_RESOLUTION_512x384  },
-        { 640,  400, GR_RESOLUTION_640x400  },
-        { 640,  480, GR_RESOLUTION_640x480  },
-        { 800,  600, GR_RESOLUTION_800x600  },
-        {1024,  768, GR_RESOLUTION_1024x768 },
-        {1280, 1024, GR_RESOLUTION_1280x1024},
-        {1600, 1200, GR_RESOLUTION_1600x1200},
+ static int resolutions[][3] = {
+        { GR_RESOLUTION_320x200,    320,  200 },
+        { GR_RESOLUTION_320x240,    320,  240 },
+        { GR_RESOLUTION_400x256,    400,  256 },
+        { GR_RESOLUTION_512x384,    512,  384 },
+        { GR_RESOLUTION_640x200,    640,  200 },
+        { GR_RESOLUTION_640x350,    640,  350 },
+        { GR_RESOLUTION_640x400,    640,  400 },
+        { GR_RESOLUTION_640x480,    640,  480 },
+        { GR_RESOLUTION_800x600,    800,  600 },
+        { GR_RESOLUTION_960x720,    960,  720 },
+        { GR_RESOLUTION_856x480,    856,  480 },
+        { GR_RESOLUTION_512x256,    512,  256 },
+        { GR_RESOLUTION_1024x768,  1024,  768 },
+        { GR_RESOLUTION_1280x1024, 1280, 1024 },
+        { GR_RESOLUTION_1600x1200, 1600, 1200 },
+        { GR_RESOLUTION_400x300,    400,  300 },
+        { GR_RESOLUTION_1152x864,  1152,  864 },
+        { GR_RESOLUTION_1280x960,  1280,  960 },
+        { GR_RESOLUTION_1600x1024, 1600, 1024 },
+        { GR_RESOLUTION_1792x1344, 1792, 1344 },
+        { GR_RESOLUTION_1856x1392, 1856, 1392 },
+        { GR_RESOLUTION_1920x1440, 1920, 1440 },
+        { GR_RESOLUTION_2048x1536, 2048, 1536 },
+        { GR_RESOLUTION_2048x2048, 2048, 2048 }
  };
 
- int i, NUM_RESOLUTIONS = sizeof(resolutions) / sizeof(resolutions[0]);
- int lastvalidres = 4;  /* set default to GR_RESOLUTION_640x480 */
+ int i, size;
+ int lastvalidres = GR_RESOLUTION_640x480;
  int min = 2048 * 2048; /* max is GR_RESOLUTION_2048x2048 */
-
- for (i = 0; i < NUM_RESOLUTIONS; i++) {
-     if ((width <= resolutions[i][0]) && (height <= resolutions[i][1])) {
-        if (min > (resolutions[i][0] * resolutions[i][1])) {
-           min = resolutions[i][0] * resolutions[i][1];
-           lastvalidres = i;
+ GrResolution resTemplate = {
+              GR_QUERY_ANY,
+              GR_QUERY_ANY,
+              2 /*GR_QUERY_ANY */,
+              GR_QUERY_ANY
+ };
+ GrResolution *presSupported;
+
+ fxQueryHardware();
+
+ size = grQueryResolutions(&resTemplate, NULL);
+ presSupported = malloc(size);
+        
+ size /= sizeof(GrResolution);
+ grQueryResolutions(&resTemplate, presSupported);
+
+ for (i = 0; i < size; i++) {
+     int r = presSupported[i].resolution;
+     if ((width <= resolutions[r][1]) && (height <= resolutions[r][2])) {
+        if (min > (resolutions[r][1] * resolutions[r][2])) {
+           min = resolutions[r][1] * resolutions[r][2];
+           lastvalidres = r;
         }
      }
  }
 
- return resolutions[lastvalidres][2];
+ free(presSupported);
+
+ return resolutions[lastvalidres][0];
 }
 
 
@@ -770,6 +801,25 @@ fxMesaDestroyContext(fxMesaContext fxMesa)
 
    glbTotNumCtx--;
 
+   if (!glbTotNumCtx && getenv("MESA_FX_INFO")) {
+      GrSstPerfStats_t st;
+
+      FX_grSstPerfStats(&st);
+
+      fprintf(stderr, "Pixels Stats:\n");
+      fprintf(stderr, "  # pixels processed (minus buffer clears): %u\n",
+              (unsigned) st.pixelsIn);
+      fprintf(stderr, "  # pixels not drawn due to chroma key test failure: %u\n",
+              (unsigned) st.chromaFail);
+      fprintf(stderr, "  # pixels not drawn due to depth test failure: %u\n",
+              (unsigned) st.zFuncFail);
+      fprintf(stderr,
+              "  # pixels not drawn due to alpha test failure: %u\n",
+              (unsigned) st.aFuncFail);
+      fprintf(stderr, "  # pixels drawn (including buffer clears and LFB writes): %u\n",
+              (unsigned) st.pixelsOut);
+   }
+
    /* [dBorca]
     * close the hardware first, so we can debug
     * atexit problems (memory leaks, etc).
@@ -886,27 +936,6 @@ void GLAPIENTRY
 fxCloseHardware(void)
 {
    if (glbGlideInitialized) {
-      if (getenv("MESA_FX_INFO")) {
-        GrSstPerfStats_t st;
-
-        FX_grSstPerfStats(&st);
-        fprintf(stderr, "Pixels Stats:\n");
-        fprintf(stderr, "  # pixels processed (minus buffer clears): %u\n",
-                (unsigned) st.pixelsIn);
-        fprintf(stderr,
-                "  # pixels not drawn due to chroma key test failure: %u\n",
-                (unsigned) st.chromaFail);
-        fprintf(stderr,
-                "  # pixels not drawn due to depth test failure: %u\n",
-                (unsigned) st.zFuncFail);
-        fprintf(stderr,
-                "  # pixels not drawn due to alpha test failure: %u\n",
-                (unsigned) st.aFuncFail);
-        fprintf(stderr,
-                "  # pixels drawn (including buffer clears and LFB writes): %u\n",
-                (unsigned) st.pixelsOut);
-      }
-
       if (glbTotNumCtx == 0) {
         grGlideShutdown();
         glbGlideInitialized = 0;
index 3abb1a0c85d2b0f0b2e0520538636b50b741c38f..3a581ef66a252f3e53b019f39c3a2f7875257c79 100644 (file)
@@ -746,8 +746,10 @@ wglChoosePixelFormat(HDC hdc, const PIXELFORMATDESCRIPTOR * ppfd)
       if (pfd.cAlphaBits > 0 && pix[i].pfd.cAlphaBits == 0)
         continue;              /* need alpha buffer */
 
+#if 0 /* [dBorca] regression bug? */
       if (pfd.cStencilBits > 0 && pix[i].pfd.cStencilBits == 0)
         continue;              /* need stencil buffer */
+#endif
 
       if (pfd.iPixelType == pix[i].pfd.iPixelType) {
         best = i + 1;
index 16963ab71c798ba4909dd76dc5c7c9247807072f..c36c9c9c6a2427f798a8a6f8fcbd5fecb80f4538 100644 (file)
@@ -1830,15 +1830,19 @@ XMesaBuffer XMesaCreateWindowBuffer2( XMesaVisual v, XMesaWindow w,
        }
        attribs[numAttribs++] = FXMESA_NONE;
 
-       /* [dBorca]  we should take an envvar for `fxMesaSelectCurrentBoard'!!! */
-       if ((hw = fxMesaSelectCurrentBoard(0))==GR_SSTTYPE_VOODOO) {
+       /* [dBorca] we should take an envvar for `fxMesaSelectCurrentBoard'!!! */
+       hw = fxMesaSelectCurrentBoard(0);
+       if ((hw == GR_SSTTYPE_VOODOO) || (hw == GR_SSTTYPE_Voodoo2)) {
          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
+          if (b->FXctx && (fxEnvVar[0]=='w' || fxEnvVar[0]=='W')) {
+            b->FXwindowHack = GL_TRUE;
+            FX_grSstControl(GR_CONTROL_DEACTIVATE);
+          }
+           else {
             b->FXwindowHack = GL_FALSE;
+          }
          }
        }
        else {
@@ -2210,6 +2214,10 @@ GLboolean XMesaSetFXmode( GLint mode )
          return GL_FALSE;
       }
       if (ctx) {
+         /* [dBorca] Hack alert: 
+         * oh, this is sooo wrong: ctx above is
+         * really an fxMesaContext, not an XMesaContext
+         */
          XMesaContext xmesa = XMESA_CONTEXT(ctx);
          if (mode == XMESA_FX_WINDOW) {
            if (xmesa->xm_draw_buffer->FXisHackUsable) {
@@ -2269,10 +2277,7 @@ static void FXgetImage( XMesaBuffer b )
       xmesa_alloc_back_buffer( b );
    }
 
-   /* [dBorca]
-    * not needed for Voodoo2 anymore.
-    * should we test fxMesa->bgrOrder?
-    */
+   /* [dBorca] we're always in the right GR_COLORFORMAT... aren't we? */
    /* grLfbWriteColorFormat(GR_COLORFORMAT_ARGB); */
    if (b->xm_visual->undithered_pf==PF_5R6G5B) {
       /* Special case: 16bpp RGB */