accomodate newtexstore
authorDaniel Borca <dborca@users.sourceforge.net>
Mon, 26 Apr 2004 14:23:33 +0000 (14:23 +0000)
committerDaniel Borca <dborca@users.sourceforge.net>
Mon, 26 Apr 2004 14:23:33 +0000 (14:23 +0000)
fixed wgl interface for fxMesa

src/mesa/drivers/glide/fxddtex.c
src/mesa/drivers/glide/fxsetup.c
src/mesa/drivers/glide/fxwgl.c
src/mesa/main/texutil.c

index b8e5d8140584abdf1eda80c8291f2ca2ed9e0f35..6f7c9252f3491206a4868dc625adee21b7a2fab1 100644 (file)
@@ -1320,6 +1320,7 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
          return;
       }
       /* unpack image, apply transfer ops and store in tempImage */
+#if !NEWTEXSTORE
       _mesa_transfer_teximage(ctx, 2, texImage->Format,
                               _final_texImage_TexFormat,
                               tempImage,
@@ -1327,6 +1328,15 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
                               width * texelBytes, /* dstRowStride */
                               0, /* dstImageStride */
                               format, type, pixels, packing);
+#else
+      texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
+                                      _final_texImage_TexFormat, tempImage,
+                                      0, 0, 0, /* dstX/Y/Zoffset */
+                                      width * texelBytes, /* dstRowStride */
+                                      0, /* dstImageStride */
+                                      width, height, 1,
+                                      format, type, pixels, packing);
+#endif
       _mesa_rescale_teximage2d(texelBytes,
                                mml->width * texelBytes, /* dst stride */
                                width, height, /* src */
@@ -1337,12 +1347,22 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
    else {
       /* no rescaling needed */
       /* unpack image, apply transfer ops and store in texImage->Data */
+#if !NEWTEXSTORE
       _mesa_transfer_teximage(ctx, 2, texImage->Format,
                               _final_texImage_TexFormat, _final_texImage_Data,
                               width, height, 1, 0, 0, 0,
                               mml->width * texelBytes,
                               0, /* dstImageStride */
                               format, type, pixels, packing);
+#else
+      texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
+                                      _final_texImage_TexFormat, _final_texImage_Data,
+                                      0, 0, 0, /* dstX/Y/Zoffset */
+                                      mml->width * texelBytes, /* dstRowStride */
+                                      0, /* dstImageStride */
+                                      width, height, 1,
+                                      format, type, pixels, packing);
+#endif
    }
 
    /* now compress */
@@ -1431,6 +1451,7 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
          return;
       }
 
+#if !NEWTEXSTORE
       _mesa_transfer_teximage(ctx, 2, texImage->Format,/* Tex int format */
                               texImage->TexFormat,     /* dest format */
                               (GLubyte *) tempImage,   /* dest */
@@ -1439,6 +1460,15 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
                               width * texelBytes,      /* dest row stride */
                               0,                       /* dst image stride */
                               format, type, pixels, packing);
+#else
+      texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
+                                      texImage->TexFormat, tempImage,
+                                      0, 0, 0, /* dstX/Y/Zoffset */
+                                      width * texelBytes, /* dstRowStride */
+                                      0, /* dstImageStride */
+                                      width, height, 1,
+                                      format, type, pixels, packing);
+#endif
 
       /* now rescale */
       /* compute address of dest subimage within the overal tex image */
@@ -1456,6 +1486,7 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
    }
    else {
       /* no rescaling needed */
+#if !NEWTEXSTORE
       _mesa_transfer_teximage(ctx, 2, texImage->Format,  /* Tex int format */
                               texImage->TexFormat,       /* dest format */
                               (GLubyte *) texImage->Data,/* dest */
@@ -1464,6 +1495,15 @@ fxDDTexSubImage2D(GLcontext * ctx, GLenum target, GLint level,
                               mml->width * texelBytes,   /* dest row stride */
                               0,                         /* dst image stride */
                               format, type, pixels, packing);
+#else
+      texImage->TexFormat->StoreImage(ctx, 2, texImage->Format,
+                                      texImage->TexFormat, (GLubyte *) texImage->Data,
+                                      xoffset, yoffset, 0, /* dstX/Y/Zoffset */
+                                      mml->width * texelBytes, /* dstRowStride */
+                                      0, /* dstImageStride */
+                                      width, height, 1,
+                                      format, type, pixels, packing);
+#endif
    }
 
    /* [dBorca]
index 12a525a1e8eb0d8270118d41381ddbc2235e5b8a..da4dc2c83c6d2f31cb051cba1d7d40838e622747 100644 (file)
@@ -67,77 +67,77 @@ fxTexValidate(GLcontext * ctx, struct gl_texture_object *tObj)
 
 #if FX_RESCALE_BIG_TEXURES_HACK
 {
-   extern void _mesa_rescale_teximage2d( GLuint bytesPerPixel,\r
-                                         GLuint dstRowStride,\r
-                                         GLint srcWidth, GLint srcHeight,\r
-                                         GLint dstWidth, GLint dstHeight,\r
-                                         const GLvoid *srcImage, GLvoid *dstImage );\r
-   fxMesaContext fxMesa = FX_CONTEXT(ctx);\r
-   /* [dBorca]\r
-    * Ooooooook! Here's a(nother) long story.\r
-    * We get here because we need to handle a texture larger\r
-    * than hardware can support. Two cases:\r
-    * 1) we have mipmaps. Then we just push up to the first supported\r
-    *    LOD. A possible drawback is that Mesa will ignore the skipped\r
-    *    LODs on further texture handling.\r
-    *    Will this interfere with GL_TEXTURE_[MIN|BASE]_LEVEL? How?\r
-    * 2) we don't have mipmaps. We need to rescale the big LOD in place.\r
-    *    The above approach is somehow dumb! we might have rescaled\r
-    *    once in TexImage2D to accomodate aspect ratio, and now we\r
-    *    are rescaling again. The thing is, in TexImage2D we don't\r
-    *    know whether we'll hit 1) or 2) by the time of validation.\r
-    * NB: we could handle mml->[wh]Scale nicely, using (biased) shifts.\r
-    *\r
-    * Which brings me to another issue. How can we handle NPOT textures?\r
-    * - rescaling NPOT to the next bigger POT (mml->[wh]Scale can't shift)\r
-    * - upping the max LOD to the next power-of-two, in fxTexGetInfo; then\r
-    *   choosing non-power-of-two values for ti->[st]Scale... Anyhow, we\r
-    *   still need to align mipmaps correctly in texture memory!\r
-    */\r
-   if ((tObj->MinFilter == GL_NEAREST) || (tObj->MinFilter == GL_LINEAR)) {\r
-      /* no mipmaps! */\r
-      struct gl_texture_image *texImage = tObj->Image[0][minl];\r
-      tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);\r
-      GLint _w, _h, maxSize = 1 << fxMesa->textureMaxLod;\r
-      if ((mml->width > maxSize) || (mml->height > maxSize)) {\r
-         /* need to rescale */\r
-         GLint texelBytes = texImage->TexFormat->TexelBytes;\r
-         GLvoid *texImage_Data = texImage->Data;\r
-         _w = MIN2(texImage->Width, maxSize);\r
-         _h = MIN2(texImage->Height, maxSize);\r
-         if (TDFX_DEBUG & VERBOSE_TEXTURE) {\r
-            fprintf(stderr, "fxTexValidate: rescaling %d x %d -> %d x %d\n",\r
-                            texImage->Width, texImage->Height, _w, _h);\r
-         }\r
-         /* we should leave these as is and... (!) */\r
-         texImage->Width = _w;\r
-         texImage->Height = _h;\r
-         fxTexGetInfo(_w, _h, NULL, NULL, NULL, NULL,\r
-                      &(mml->wScale), &(mml->hScale));\r
-         _w *= mml->wScale;\r
-         _h *= mml->hScale;\r
-         texImage->Data = MESA_PBUFFER_ALLOC(_w * _h * texelBytes);\r
-         _mesa_rescale_teximage2d(texelBytes,\r
-                                  _w * texelBytes, /* dst stride */\r
-                                  mml->width, mml->height, /* src */\r
-                                  _w, _h, /* dst */\r
-                                  texImage_Data /*src*/, texImage->Data /*dst*/ );\r
-         MESA_PBUFFER_FREE(texImage_Data);\r
-         mml->width = _w;\r
-         mml->height = _h;\r
-         /* (!) ... and set mml->wScale = _w / texImage->Width */\r
-      }\r
-   } else {\r
-      /* mipmapping */\r
-      if (maxl - minl > fxMesa->textureMaxLod) {\r
-         /* skip a certain number of LODs */\r
-         minl += maxl - fxMesa->textureMaxLod;\r
-         if (TDFX_DEBUG & VERBOSE_TEXTURE) {\r
-            fprintf(stderr, "fxTexValidate: skipping %d LODs\n", minl - ti->minLevel);\r
-         }\r
-         ti->minLevel = tObj->BaseLevel = minl;\r
-      }\r
-   }\r
+   extern void _mesa_rescale_teximage2d( GLuint bytesPerPixel,
+                                         GLuint dstRowStride,
+                                         GLint srcWidth, GLint srcHeight,
+                                         GLint dstWidth, GLint dstHeight,
+                                         const GLvoid *srcImage, GLvoid *dstImage );
+   fxMesaContext fxMesa = FX_CONTEXT(ctx);
+   /* [dBorca]
+    * Ooooooook! Here's a(nother) long story.
+    * We get here because we need to handle a texture larger
+    * than hardware can support. Two cases:
+    * 1) we have mipmaps. Then we just push up to the first supported
+    *    LOD. A possible drawback is that Mesa will ignore the skipped
+    *    LODs on further texture handling.
+    *    Will this interfere with GL_TEXTURE_[MIN|BASE]_LEVEL? How?
+    * 2) we don't have mipmaps. We need to rescale the big LOD in place.
+    *    The above approach is somehow dumb! we might have rescaled
+    *    once in TexImage2D to accomodate aspect ratio, and now we
+    *    are rescaling again. The thing is, in TexImage2D we don't
+    *    know whether we'll hit 1) or 2) by the time of validation.
+    * NB: we could handle mml->[wh]Scale nicely, using (biased) shifts.
+    *
+    * Which brings me to another issue. How can we handle NPOT textures?
+    * - rescaling NPOT to the next bigger POT (mml->[wh]Scale can't shift)
+    * - upping the max LOD to the next power-of-two, in fxTexGetInfo; then
+    *   choosing non-power-of-two values for ti->[st]Scale... Anyhow, we
+    *   still need to align mipmaps correctly in texture memory!
+    */
+   if ((tObj->MinFilter == GL_NEAREST) || (tObj->MinFilter == GL_LINEAR)) {
+      /* no mipmaps! */
+      struct gl_texture_image *texImage = tObj->Image[0][minl];
+      tfxMipMapLevel *mml = FX_MIPMAP_DATA(texImage);
+      GLint _w, _h, maxSize = 1 << fxMesa->textureMaxLod;
+      if ((mml->width > maxSize) || (mml->height > maxSize)) {
+         /* need to rescale */
+         GLint texelBytes = texImage->TexFormat->TexelBytes;
+         GLvoid *texImage_Data = texImage->Data;
+         _w = MIN2(texImage->Width, maxSize);
+         _h = MIN2(texImage->Height, maxSize);
+         if (TDFX_DEBUG & VERBOSE_TEXTURE) {
+            fprintf(stderr, "fxTexValidate: rescaling %d x %d -> %d x %d\n",
+                            texImage->Width, texImage->Height, _w, _h);
+         }
+         /* we should leave these as is and... (!) */
+         texImage->Width = _w;
+         texImage->Height = _h;
+         fxTexGetInfo(_w, _h, NULL, NULL, NULL, NULL,
+                      &(mml->wScale), &(mml->hScale));
+         _w *= mml->wScale;
+         _h *= mml->hScale;
+         texImage->Data = MESA_PBUFFER_ALLOC(_w * _h * texelBytes);
+         _mesa_rescale_teximage2d(texelBytes,
+                                  _w * texelBytes, /* dst stride */
+                                  mml->width, mml->height, /* src */
+                                  _w, _h, /* dst */
+                                  texImage_Data /*src*/, texImage->Data /*dst*/ );
+         MESA_PBUFFER_FREE(texImage_Data);
+         mml->width = _w;
+         mml->height = _h;
+         /* (!) ... and set mml->wScale = _w / texImage->Width */
+      }
+   } else {
+      /* mipmapping */
+      if (maxl - minl > fxMesa->textureMaxLod) {
+         /* skip a certain number of LODs */
+         minl += maxl - fxMesa->textureMaxLod;
+         if (TDFX_DEBUG & VERBOSE_TEXTURE) {
+            fprintf(stderr, "fxTexValidate: skipping %d LODs\n", minl - ti->minLevel);
+         }
+         ti->minLevel = tObj->BaseLevel = minl;
+      }
+   }
 }
 #endif
 
index 3a581ef66a252f3e53b019f39c3a2f7875257c79..b87f60282ce0aebe23a9636988948e243dbd9221 100644 (file)
@@ -815,7 +815,7 @@ wglDescribePixelFormat(HDC hdc, int iPixelFormat, UINT nBytes,
    if (iPixelFormat < 1 || iPixelFormat > qt_valid_pix ||
        ((nBytes != sizeof(PIXELFORMATDESCRIPTOR)) && (nBytes != 0))) {
       SetLastError(0);
-      return (0);
+      return (qt_valid_pix);
    }
 
    if (nBytes != 0)
index 7bb46481e057d5b8d1f6d7bbf83726ec5e6f65d5..0871c9ec2437066c3de15771f8dfca95d3f5e4fd 100644 (file)
@@ -968,6 +968,8 @@ _mesa_convert_texsubimage3d( GLint mesaFormat,  /* dest */
    return convert_texsubimage3d_tab[mesaFormat]( &convert );
 }
 
+#endif
+
 
 
 /* Nearest filtering only (for broken hardware that can't support
@@ -1036,5 +1038,3 @@ do {                                                                      \
       _mesa_problem(NULL,"unexpected bytes/pixel in _mesa_rescale_teximage2d");
    }
 }
-
-#endif