Voodoo2 happiness
authorDaniel Borca <dborca@users.sourceforge.net>
Mon, 3 Nov 2003 12:01:03 +0000 (12:01 +0000)
committerDaniel Borca <dborca@users.sourceforge.net>
Mon, 3 Nov 2003 12:01:03 +0000 (12:01 +0000)
src/mesa/drivers/glide/fxapi.c
src/mesa/drivers/glide/fxdd.c
src/mesa/drivers/glide/fxddspan.c
src/mesa/drivers/glide/fxddtex.c
src/mesa/drivers/glide/fxdrv.h
src/mesa/drivers/glide/fxglidew.c
src/mesa/drivers/glide/fxsetup.c

index b726240cba9789bdf436079c0c889a84fe29a322..57d5034557f3c7bf499a0d3f8addd042c17a839e 100644 (file)
@@ -555,19 +555,19 @@ fxMesaCreateContext(GLuint win,
     grGet(GR_MEMORY_TMU, 4, &result);
     tmuRam = result / (1024 * 1024);
     grGet(GR_MEMORY_FB, 4, &result);
-    fbRam = result / 1024;
+    fbRam = result / (1024 * 1024);
   }
   END_BOARD_LOCK();
 
-  sprintf(fxMesa->rendererString, "Mesa %s v0.51 %s %dkB FB, %dMB TM, %d TMU, %s",
+  sprintf(fxMesa->rendererString, "Mesa %s v0.51 %s %dMB FB, %dMB TM, %d TMU, %s",
                            grGetString(GR_RENDERER),
                            grGetString(GR_HARDWARE),
                            fbRam,
                            tmuRam * voodoo->nTexelfx,
                            voodoo->nTexelfx,
                            (voodoo->numChips > 1) ? "SLI" : "NOSLI");
-  
-   fxInitPixelTables(fxMesa, useBGR);
+
+  fxMesa->bgrOrder = useBGR;
 
    /* screen */
    fxMesa->screen_width = FX_grSstScreenWidth();
index 895271fcbacb54fb0b5fbfc2086fa9d3aa131000..8743148b491be3943ff3a7204cbe187af70f6877 100644 (file)
 
 
 
-/* These lookup table are used to extract RGB values in [0,255] from
- * 16-bit pixel values.
- */
-GLubyte FX_PixelToR[0x10000];
-GLubyte FX_PixelToG[0x10000];
-GLubyte FX_PixelToB[0x10000];
-
 /* lookup table for scaling 4 bit colors up to 8 bits */
 GLuint FX_rgb_scale_4[16] = {
    0,   17,  34,  51,  68,  85,  102, 119,
@@ -92,39 +85,6 @@ GLuint FX_rgb_scale_6[64] = {
 };
 
 
-/*
- * Initialize the FX_PixelTo{RGB} arrays.
- * Input: bgrOrder - if TRUE, pixels are in BGR order, else RGB order.
- */
-void
-fxInitPixelTables(fxMesaContext fxMesa, GLboolean bgrOrder)
-{
-   GLuint pixel;
-
-   fxMesa->bgrOrder = bgrOrder;
-   for (pixel = 0; pixel <= 0xffff; pixel++) {
-      GLuint r, g, b;
-      if (bgrOrder) {
-        r = (pixel & 0x001F) << 3;
-        g = (pixel & 0x07E0) >> 3;
-        b = (pixel & 0xF800) >> 8;
-      }
-      else {
-        r = (pixel & 0xF800) >> 8;
-        g = (pixel & 0x07E0) >> 3;
-        b = (pixel & 0x001F) << 3;
-      }
-      /* fill in low-order bits with proper rounding */
-      r = (GLuint)(((double)r * 255. / 0xF8) + 0.5);
-      g = (GLuint)(((double)g * 255. / 0xFC) + 0.5);
-      b = (GLuint)(((double)b * 255. / 0xF8) + 0.5);
-      FX_PixelToR[pixel] = r;
-      FX_PixelToG[pixel] = g;
-      FX_PixelToB[pixel] = b;
-   }
-}
-
-
 /*
  * Disable color by masking out R, G, B, A
  */
@@ -577,27 +537,13 @@ fxDDDrawBitmap2 (GLcontext *ctx, GLint px, GLint py,
       GLint g = (GLint) (ctx->Current.RasterColor[GCOMP] * 255.0f);
       GLint b = (GLint) (ctx->Current.RasterColor[BCOMP] * 255.0f);
       GLint a = (GLint) (ctx->Current.RasterColor[ACOMP] * 255.0f);
-#if 0
-      /* [dBorca]
-       * who uses bgr, anyway? Expecting the V2 from HM... :D
-       */
-      if (fxMesa->bgrOrder)
-        color = (FxU16)
-           (((FxU16) 0xf8 & b) << (11 - 3)) |
-           (((FxU16) 0xfc & g) << (5 - 3 + 1)) | (((FxU16) 0xf8 & r) >> 3);
-      else
-        color = (FxU16)
-           (((FxU16) 0xf8 & r) << (11 - 3)) |
-           (((FxU16) 0xfc & g) << (5 - 3 + 1)) | (((FxU16) 0xf8 & b) >> 3);
-#else
       if (fxMesa->colDepth == 15) {
          color = TDFXPACKCOLOR1555(b, g, r, a);
          mode = GR_LFBWRITEMODE_1555;
       } else {
-         color = TDFXPACKCOLOR565(b, g, r);
+         color = fxMesa->bgrOrder ? TDFXPACKCOLOR565(r, g, b) : TDFXPACKCOLOR565(b, g, r);
          mode = GR_LFBWRITEMODE_565;
       }
-#endif
    }
 
    info.size = sizeof(info);
@@ -755,21 +701,7 @@ fxDDDrawBitmap4 (GLcontext *ctx, GLint px, GLint py,
       GLint g = (GLint) (ctx->Current.RasterColor[GCOMP] * 255.0f);
       GLint b = (GLint) (ctx->Current.RasterColor[BCOMP] * 255.0f);
       GLint a = (GLint) (ctx->Current.RasterColor[ACOMP] * 255.0f);
-#if 0
-      /* [dBorca]
-       * who uses bgr, anyway? Expecting the V2 from HM... :D
-       */
-      if (fxMesa->bgrOrder)
-        color = (FxU16)
-           (((FxU16) 0xf8 & b) << (11 - 3)) |
-           (((FxU16) 0xfc & g) << (5 - 3 + 1)) | (((FxU16) 0xf8 & r) >> 3);
-      else
-        color = (FxU16)
-           (((FxU16) 0xf8 & r) << (11 - 3)) |
-           (((FxU16) 0xfc & g) << (5 - 3 + 1)) | (((FxU16) 0xf8 & b) >> 3);
-#else
       color = TDFXPACKCOLOR8888(b, g, r, a);
-#endif
    }
 
    info.size = sizeof(info);
@@ -889,20 +821,18 @@ fxDDReadPixels565 (GLcontext * ctx,
               GLubyte *d = dst;
               for (col = 0; col < halfWidth; col++) {
                  const GLuint pixel = ((const GLuint *) src)[col];
-                 const GLint pixel0 = pixel & 0xffff;
-                 const GLint pixel1 = pixel >> 16;
-                 *d++ = FX_PixelToR[pixel0];
-                 *d++ = FX_PixelToG[pixel0];
-                 *d++ = FX_PixelToB[pixel0];
-                 *d++ = FX_PixelToR[pixel1];
-                 *d++ = FX_PixelToG[pixel1];
-                 *d++ = FX_PixelToB[pixel1];
+                  *d++ = FX_rgb_scale_5[(pixel >> 11) & 0x1f];
+                  *d++ = FX_rgb_scale_6[(pixel >> 5)  & 0x3f];
+                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 27) & 0x1f];
+                  *d++ = FX_rgb_scale_6[(pixel >> 21) & 0x3f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
               }
               if (extraPixel) {
                  GLushort pixel = src[width - 1];
-                 *d++ = FX_PixelToR[pixel];
-                 *d++ = FX_PixelToG[pixel];
-                 *d++ = FX_PixelToB[pixel];
+                  *d++ = FX_rgb_scale_5[(pixel >> 11) & 0x1f];
+                  *d++ = FX_rgb_scale_6[(pixel >> 5)  & 0x3f];
+                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
               }
               dst += dstStride;
               src -= srcStride;
@@ -917,22 +847,20 @@ fxDDReadPixels565 (GLcontext * ctx,
               GLubyte *d = dst;
               for (col = 0; col < halfWidth; col++) {
                  const GLuint pixel = ((const GLuint *) src)[col];
-                 const GLint pixel0 = pixel & 0xffff;
-                 const GLint pixel1 = pixel >> 16;
-                 *d++ = FX_PixelToR[pixel0];
-                 *d++ = FX_PixelToG[pixel0];
-                 *d++ = FX_PixelToB[pixel0];
+                  *d++ = FX_rgb_scale_5[(pixel >> 11) & 0x1f];
+                  *d++ = FX_rgb_scale_6[(pixel >> 5)  & 0x3f];
+                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
                  *d++ = 255;
-                 *d++ = FX_PixelToR[pixel1];
-                 *d++ = FX_PixelToG[pixel1];
-                 *d++ = FX_PixelToB[pixel1];
+                  *d++ = FX_rgb_scale_5[(pixel >> 27) & 0x1f];
+                  *d++ = FX_rgb_scale_6[(pixel >> 21) & 0x3f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
                  *d++ = 255;
               }
               if (extraPixel) {
                  const GLushort pixel = src[width - 1];
-                 *d++ = FX_PixelToR[pixel];
-                 *d++ = FX_PixelToG[pixel];
-                 *d++ = FX_PixelToB[pixel];
+                  *d++ = FX_rgb_scale_5[(pixel >> 11) & 0x1f];
+                  *d++ = FX_rgb_scale_6[(pixel >> 5)  & 0x3f];
+                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
                  *d++ = 255;
               }
               dst += dstStride;
@@ -1005,18 +933,18 @@ fxDDReadPixels555 (GLcontext * ctx,
               GLubyte *d = dst;
               for (col = 0; col < halfWidth; col++) {
                  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 5)  & 0x1f];
                   *d++ = FX_rgb_scale_5[(pixel >> 10) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 21) & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 5)  & 0x1f];
+                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
                   *d++ = FX_rgb_scale_5[(pixel >> 26) & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 21) & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
               }
               if (extraPixel) {
                  GLushort pixel = src[width - 1];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 5)  & 0x1f];
                   *d++ = FX_rgb_scale_5[(pixel >> 10) & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 5)  & 0x1f];
+                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
               }
               dst += dstStride;
               src -= srcStride;
@@ -1031,20 +959,20 @@ fxDDReadPixels555 (GLcontext * ctx,
               GLubyte *d = dst;
               for (col = 0; col < halfWidth; col++) {
                  const GLuint pixel = ((const GLuint *) src)[col];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >>  5) & 0x1f];
                   *d++ = FX_rgb_scale_5[(pixel >> 10) & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >>  5) & 0x1f];
+                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
                  *d++ =  (pixel & 0x8000) ? 255 : 0;
-                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >> 21) & 0x1f];
                   *d++ = FX_rgb_scale_5[(pixel >> 26) & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 21) & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >> 16) & 0x1f];
                  *d++ =  (pixel & 0x80000000) ? 255 : 0;
               }
               if (extraPixel) {
                  const GLushort pixel = src[width - 1];
-                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
-                  *d++ = FX_rgb_scale_5[(pixel >>  5) & 0x1f];
                   *d++ = FX_rgb_scale_5[(pixel >> 10) & 0x1f];
+                  *d++ = FX_rgb_scale_5[(pixel >>  5) & 0x1f];
+                  *d++ = FX_rgb_scale_5[ pixel        & 0x1f];
                  *d++ =  (pixel & 0x8000) ? 255 : 0;
               }
               dst += dstStride;
@@ -1377,7 +1305,9 @@ fxDDInitFxMesaContext(fxMesaContext fxMesa)
    if (fxMesa->haveZBuffer)
       grDepthBufferMode(GR_DEPTHBUFFER_ZBUFFER);
 
-   grLfbWriteColorFormat(GR_COLORFORMAT_ABGR);
+   if (!fxMesa->bgrOrder) {
+      grLfbWriteColorFormat(GR_COLORFORMAT_ABGR);
+   }
 
    fxMesa->textureAlign = FX_grGetInteger(GR_TEXTURE_ALIGN);
    /* [koolsmoky] */
index 3e242f9bd7b6c7e320c54d4767b900e2a0f0bba1..158e34e08e1650b6e08e6c794fe020be302c0727 100644 (file)
@@ -406,18 +406,6 @@ static void fxReadRGBASpan_RGB565 (const GLcontext * ctx,
 
     for (i = j = 0; i < n; i += 2, j++) {
         GLuint pixel = data32[j];
-#if 0
-        GLuint pixel0 = pixel & 0xffff;
-        GLuint pixel1 = pixel >> 16;
-        rgba[i][RCOMP] = FX_PixelToR[pixel0];
-        rgba[i][GCOMP] = FX_PixelToG[pixel0];
-        rgba[i][BCOMP] = FX_PixelToB[pixel0];
-        rgba[i][ACOMP] = 255;
-        rgba[i + 1][RCOMP] = FX_PixelToR[pixel1];
-        rgba[i + 1][GCOMP] = FX_PixelToG[pixel1];
-        rgba[i + 1][BCOMP] = FX_PixelToB[pixel1];
-        rgba[i + 1][ACOMP] = 255;
-#else
        rgba[i][0] = FX_rgb_scale_5[(pixel >> 11) & 0x1F];
        rgba[i][1] = FX_rgb_scale_6[(pixel >> 5)  & 0x3F];
        rgba[i][2] = FX_rgb_scale_5[ pixel        & 0x1F];
@@ -426,21 +414,13 @@ static void fxReadRGBASpan_RGB565 (const GLcontext * ctx,
        rgba[i+1][1] = FX_rgb_scale_6[(pixel >> 21) & 0x3F];
        rgba[i+1][2] = FX_rgb_scale_5[(pixel >> 16) & 0x1F];
        rgba[i+1][3] = 255;
-#endif
     }
     if (extraPixel) {
        GLushort pixel = data16[n];
-#if 0
-       rgba[n][RCOMP] = FX_PixelToR[pixel];
-       rgba[n][GCOMP] = FX_PixelToG[pixel];
-       rgba[n][BCOMP] = FX_PixelToB[pixel];
-       rgba[n][ACOMP] = 255;
-#else
        rgba[n][0] = FX_rgb_scale_5[(pixel >> 11) & 0x1F];
        rgba[n][1] = FX_rgb_scale_6[(pixel >> 5)  & 0x3F];
        rgba[n][2] = FX_rgb_scale_5[ pixel        & 0x1F];
        rgba[n][3] = 255;
-#endif
     }
 
     grLfbUnlock(GR_LFB_READ_ONLY, fxMesa->currentFB);
index c425549d9cbecf7cd4938b303778380821915197..16710bd232c7fac647ebb837b5b325cdbfcf2246 100644 (file)
@@ -864,8 +864,8 @@ GLboolean fxDDIsCompressedFormat ( GLcontext *ctx, GLenum internalFormat )
 
 /* [dBorca]
  * we are handling differently the above formats from the generic
- * GL_COMPRESSED_RGB[A]. For this, we will always separately
- * check for the ones below!
+ * GL_COMPRESSED_RGB[A]. For this, we will always have to separately
+ * check the below formats...
  */
 
 #if FX_TC_NCC || FX_TC_NAPALM
@@ -1495,7 +1495,7 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
    /* choose the texture format */
    assert(ctx->Driver.ChooseTextureFormat);
    texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
-                                          internalFormat, format, type);
+                                          internalFormat, -1/*format*/, -1/*type*/);
    assert(texImage->TexFormat);
 
    /* Determine the appropriate Glide texel format,
@@ -1542,11 +1542,12 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
    }
 #endif
 
+   ti->info.format = mml->glideFormat;
+   texImage->FetchTexel = fxFetchFunction(texImage->TexFormat->MesaFormat);
+
    /* [dBorca] Hack alert:
     * what about different size/texel? other anomalies? SW rescaling?
     */
-   ti->info.format = mml->glideFormat;
-   texImage->FetchTexel = fxFetchFunction(texImage->TexFormat->MesaFormat);
 
    /* [dBorca]
     * Hack alert: unsure...
index 46b53574a99cbffc238df1e153853144bc4bfb40..c109f22f1e8cfe2e1f3a3a657e05a1c9aeef3301 100644 (file)
@@ -409,13 +409,6 @@ tfxUnitsState;
                                _NEW_COLOR)     \
 
 
-/* These lookup table are used to extract RGB values in [0,255] from
- * 16-bit pixel values.
- */
-extern GLubyte FX_PixelToR[0x10000];
-extern GLubyte FX_PixelToG[0x10000];
-extern GLubyte FX_PixelToB[0x10000];
-
 /* lookup table for scaling y bit colors up to 8 bits */
 extern GLuint FX_rgb_scale_4[16];
 extern GLuint FX_rgb_scale_5[32];
@@ -688,7 +681,6 @@ extern void fxDDDestroyFxMesaContext(fxMesaContext fxMesa);
 extern void fxSetScissorValues(GLcontext * ctx);
 extern void fxTMMoveInTM_NoLock(fxMesaContext fxMesa,
                                struct gl_texture_object *tObj, GLint where);
-extern void fxInitPixelTables(fxMesaContext fxMesa, GLboolean bgrOrder);
 
 extern void fxCheckIsInHardware(GLcontext *ctx);
 
index ff4454d9a8fae64fec75f8a182d6f04ba5bbc90b..76df0286937f660041f0ceafaff66503566a95a2 100644 (file)
@@ -194,7 +194,9 @@ FX_grSstQueryHardware(GrHwConfiguration * config)
       grSstSelect(i);
 
       extension = grGetString(GR_HARDWARE);
-      if (strstr(extension, "Voodoo Banshee")) {
+      if (strstr(extension, "Voodoo2")) {
+         config->SSTs[i].type = GR_SSTTYPE_Voodoo2;
+      } else if (strstr(extension, "Voodoo Banshee")) {
          config->SSTs[i].type = GR_SSTTYPE_Banshee;
       } else if (strstr(extension, "Voodoo3")) {
          config->SSTs[i].type = GR_SSTTYPE_Voodoo3;
@@ -202,8 +204,8 @@ FX_grSstQueryHardware(GrHwConfiguration * config)
          config->SSTs[i].type = GR_SSTTYPE_Voodoo4;
       } else if (strstr(extension, "Voodoo5")) {
          config->SSTs[i].type = GR_SSTTYPE_Voodoo5;
-      } else { /* Voodoo1,2,rush */
-         /* ZZZ TO DO: Need to distinguish whether we have V1 or V2 or Rush. */
+      } else { /* Voodoo1,rush */
+         /* ZZZ TO DO: Need to distinguish whether we have V1 or Rush. */
          config->SSTs[i].type = GR_SSTTYPE_VOODOO;
       }
 
index 6e929257dbfb2d7210fe2df3f5fcd54efb756cfd..22c34cecaf345dbc89520187eecd69a9db28f719 100644 (file)
@@ -803,33 +803,27 @@ fxSetupDoubleTMU_NoLock(fxMesaContext fxMesa,
       }
    }
 
+   /* [dBorca] Hack alert:
+    * we put these in reverse order, so that if we can't
+    * do _REAL_ pointcast, the TMU0 table gets broadcasted
+    */
    if (!fxMesa->haveGlobalPaletteTexture) {
       /* pointcast */
-      if (ti0->info.format == GR_TEXFMT_P_8) {
-        if (TDFX_DEBUG & VERBOSE_DRIVER) {
-           fprintf(stderr, "%s: uploading texture palette for TMU0\n", __FUNCTION__);
-        }
-        fxMesa->Glide.grTexDownloadTableExt(ti0->whichTMU, ti0->paltype, &(ti0->palette));
-      }
-#if 1
-      else /* does anyone guess why is this here? :D */
-#endif
       if (ti1->info.format == GR_TEXFMT_P_8) {
         if (TDFX_DEBUG & VERBOSE_DRIVER) {
            fprintf(stderr, "%s: uploading texture palette for TMU1\n", __FUNCTION__);
         }
         fxMesa->Glide.grTexDownloadTableExt(ti1->whichTMU, ti1->paltype, &(ti1->palette));
       }
+      if (ti0->info.format == GR_TEXFMT_P_8) {
+        if (TDFX_DEBUG & VERBOSE_DRIVER) {
+           fprintf(stderr, "%s: uploading texture palette for TMU0\n", __FUNCTION__);
+        }
+        fxMesa->Glide.grTexDownloadTableExt(ti0->whichTMU, ti0->paltype, &(ti0->palette));
+      }
    }
 #if FX_TC_NCC
    /* pointcast */
-   if ((ti0->info.format == GR_TEXFMT_AYIQ_8422) ||
-       (ti0->info.format == GR_TEXFMT_YIQ_422)) {
-      if (TDFX_DEBUG & VERBOSE_DRIVER) {
-         fprintf(stderr, "%s: uploading NCC0 table for TMU0\n", __FUNCTION__);
-      }
-      fxMesa->Glide.grTexDownloadTableExt(ti0->whichTMU, GR_TEXTABLE_NCC0, &(ti0->palette));
-   }
    if ((ti1->info.format == GR_TEXFMT_AYIQ_8422) ||
        (ti1->info.format == GR_TEXFMT_YIQ_422)) {
       if (TDFX_DEBUG & VERBOSE_DRIVER) {
@@ -837,6 +831,13 @@ fxSetupDoubleTMU_NoLock(fxMesaContext fxMesa,
       }
       fxMesa->Glide.grTexDownloadTableExt(ti1->whichTMU, GR_TEXTABLE_NCC0, &(ti1->palette));
    }
+   if ((ti0->info.format == GR_TEXFMT_AYIQ_8422) ||
+       (ti0->info.format == GR_TEXFMT_YIQ_422)) {
+      if (TDFX_DEBUG & VERBOSE_DRIVER) {
+         fprintf(stderr, "%s: uploading NCC0 table for TMU0\n", __FUNCTION__);
+      }
+      fxMesa->Glide.grTexDownloadTableExt(ti0->whichTMU, GR_TEXTABLE_NCC0, &(ti0->palette));
+   }
 #endif
 
    grTexSource(tmu0, ti0->tm[tmu0]->startAddr,