Mesa 6.5.2 Release Notes / December 2, 2006
===========================================

Mesa 6.5.2 is a 6.5 follow-on development release with a few new
features but mostly consisting of bug fixes.

MD5 checksums
-------------

::

   11a033b078e090b3caaeb467234fe299  MesaLib-6.5.2.tar.gz
   e4d894181f1859651658b3704633e10d  MesaLib-6.5.2.tar.bz2
   63bf1d444fa738cca52ce1043e284021  MesaLib-6.5.2.zip
   2b8f1375d16bda5f5a2304174cd5bcf7  MesaDemos-6.5.2.tar.gz
   e870efe98d3a50be01ab211b9b2e25d9  MesaDemos-6.5.2.tar.bz2
   d92cc6f5fee5ca75af0be04f9f4908f0  MesaDemos-6.5.2.zip
   8d4d77e3a7132f4217bbc7c1ab157030  MesaGLUT-6.5.2.tar.gz
   e84edbb11c69c8e408dfadd2ed08e95b  MesaGLUT-6.5.2.tar.bz2
   c6d7134843ed5faf11f6686ecb5d2a2e  MesaGLUT-6.5.2.zip

New features
------------

-  New DRI memory manager system. Currently used by the i915tex driver.
   Other DRI drivers will be updated to use the new memory manager in
   coming months.

   To use the new driver you'll need the most recent DRM library and
   drivers (version 2.2 or later) and a recent xf86-video-intel driver
   module from X.org.

   New features resulting from this work include:

   -  EXT_framebuffer_objects, render to texture
   -  ARB_pixel_buffer_objects
   -  Accelerated CopyTexSubimage, DrawPixels, ReadPixels, CopyPixels
   -  Accelerated texture uploads from pixel buffer objects
   -  Potentially texturing directly from the pixel buffer object (zero
      copy texturing).

-  New Intel i965 DRI driver
-  New ``minstall`` script to replace normal install program
-  Faster fragment program execution in software
-  Added (or fixed) support for
   `GLX_SGI_make_current_read <https://www.khronos.org/registry/OpenGL/extensions/SGI/GLX_SGI_make_current_read.txt>`__
   to the following drivers:

   -  radeon
   -  savage
   -  mga
   -  tdfx

-  Added support for ARB_occlusion_query to the tdfx driver (Ian
   Romanick).

Bug fixes
---------

-  fixed invalid memory read while rendering textured points (bug 8320)
-  fixed problems with freebsd-dri configuration (bug 8344)
-  Mesa's fake glxGetCurrentContext() wasn't thread-aware
-  OPTION NV_position_invariant didn't work in NV vertex programs
-  glDrawPixels into a user-created framebuffer object could crash Xlib
   driver
-  Line clipping was broken in some circumstances
-  fragment.fogcoord register didn't always contain the correct value
-  RGBA logicops didn't work reliably in some DRI drivers
-  Fixed broken RGBA LogicOps in Intel DRI drivers
-  Fixed some fragment program bugs in Intel i915 DRI driver
-  Fixed glGetVertexAttribfvARB bug 8883
-  Implemented glGetUniform[fi]vARB() functions
-  Fixed glDrawPixels(GL_COLOR_INDEX, GL_BITMAP) segfault (bug 9044)
-  Fixed some gluBuild2DMipmaps() bugs (Greg McGarragh)
-  Fixed broken "mgl" name mangling
-  Indirect rending was broken for glMap\* functions (bug 8899)

Internal code changes
---------------------

-  The device driver functions ResizeBuffers and GetBufferSize have been
   decprecated.
-  OpenGL 2.0 and 2.1 support is nearly done. We need to do quite a bit
   more testing of the shading language functions.

To Do (someday) items
---------------------

-  Switch to freeglut
-  Increase MAX_DRAWBUFFERS
-  Fix linux-glide target/driver.
-  Improved lambda and derivative calculation for frag progs.

Driver Status
-------------

::

   Driver         Status
   ----------------------  ----------------------
   DRI drivers     varies with the driver
   XMesa/GLX (on Xlib) implements OpenGL 1.5
   OSMesa (off-screen) implements OpenGL 1.5
   Glide (3dfx Voodoo1/2)  implements OpenGL 1.3
   SVGA            implements OpenGL 1.3
   Wind River UGL      implements OpenGL 1.3
   Windows/Win32       implements OpenGL 1.5
   DJGPP           implements OpenGL 1.5
   GGI         implements OpenGL 1.3
   BeOS            implements OpenGL 1.5
   Allegro         needs updating
   D3D         needs updating
