+isosurf with vertex program exhibits some missing triangles (probably
+when recycling the vertex buffer for long prims).
+
+
+
+Porting Info
+------------
+
+If you're porting a DRI or other driver from Mesa 4.0.x to Mesa 4.1 here
+are some things to change:
+
+1. ctx->Texture._ReallyEnabled is obsolete.
+
+ Since there are now 5 texture targets (1D, 2D, 3D, cube and rect) that
+ left room for only 6 units (6*5 < 32) in this field.
+ This field is being replaced by ctx->Texture._EnabledUnits which has one
+ bit per texture unit. If the bit k of _EnabledUnits is set, that means
+ ctx->Texture.Unit[k]._ReallyEnabled is non-zero. You'll have to look at
+ ctx->Texture.Unit[k]._ReallyEnabled to learn if the 1D, 2D, 3D, cube or
+ rect texture is enabled for unit k.
+
+ This also means that the constants TEXTURE1_*, TEXTURE2_*, etc are
+ obsolete.
+
+ The tokens TEXTURE0_* have been replaced as well (since there's no
+ significance to the "0" part:
+
+ old token new token
+ TEXTURE0_1D TEXTURE_1D_BIT
+ TEXTURE0_2D TEXTURE_2D_BIT
+ TEXTURE0_3D TEXTURE_3D_BIT
+ TEXTURE0_CUBE TEXTURE_CUBE_BIT
+ <none> TEXTURE_RECT_BIT
+
+ These tokens are only used for the ctx->Texture.Unit[i].Enabled and
+ ctx->Texture.Unit[i]._ReallyEnabled fields. Exactly 0 or 1 bits will
+ be set in _ReallyEnabled at any time!
+
+ Q: "What's the purpose of Unit[i].Enabled vs Unit[i]._ReallyEnabled?"
+ A: The user can enable GL_TEXTURE_1D, GL_TEXTURE_2D, etc for any
+ texure unit all at once (an unusual thing to do).
+ OpenGL defines priorities that basically say GL_TEXTURE_2D has
+ higher priority than GL_TEXTURE_1D, etc. Also, just because a
+ texture target is enabled by the user doesn't mean we'll actually
+ use that texture! If a texture object is incomplete (missing mip-
+ map levels, etc) it's as if texturing is disabled for that target.
+ The _ReallyEnabled field will have a bit set ONLY if the texture
+ target is enabled and complete. This spares the driver writer from
+ examining a _lot_ of GL state to determine which texture target is
+ to be used.
+
+
+2. Tnl tokens changes
+
+ During the implementation of GL_NV_vertex_program some of the vertex
+ buffer code was changed. Specifically, the VERT_* bits defined in
+ tnl/t_context.h have been renamed to better match the conventions of
+ GL_NV_vertex_program. The old names are still present but obsolete.
+ Drivers should use the newer names.
+
+ For example: VERT_RGBA is now VERT_BIT_COLOR0 and
+ VERT_SPEC_RGB is now VERT_BIT_COLOR1.
+
+
+
+3. Read/Draw Buffer changes
+
+ The business of setting the current read/draw buffers in Mesa 4.0.x
+ was complicated. It's much simpler now in Mesa 4.1.
+
+ Here are the changes:
+
+ - Renamed ctx->Color.DrawDestMask to ctx->Color._DrawDestMask
+ - Removed ctx->Color.DriverDrawBuffer
+ - Removed ctx->Pixel.DriverReadBuffer
+ - Removed ctx->Color.MultiDrawBuffer
+ - Removed ctx->Driver.SetDrawBuffer()
+ - Removed swrast->Driver.SetReadBuffer().
+ - Added ctx->Color._DrawDestMask - a bitmask of FRONT/BACK_LEFT/RIGHT_BIT
+ values to indicate the current draw buffers.
+ - Added ctx->Pixel._ReadSrcMask to indicate the source for pixel reading.
+ The value is _one_ of the FRONT/BACK_LEFT/RIGHT_BIT values.
+ - Added ctx->Driver.DrawBuffer() and ctx->Driver.ReadBuffer().
+ These functions exactly correspond to glDrawBuffer and glReadBuffer calls.
+ Many drivers will set ctx->Driver.DrawBuffer = _swrast_DrawBuffer and
+ leave ctx->Draw.ReadBuffer NULL.
+ DRI drivers should implement their own function for ctx->Driver.DrawBuffer
+ and use it to set the current hardware drawing buffer. You'll probably
+ also want to check for GL_FRONT_AND_BACK mode and fall back to software.
+ Call _swrast_DrawBuffer() too, to update the swrast state.
+ - Added swrast->Driver.SetBuffer().
+ This function should be implemented by all device drivers that use swrast.
+ Mesa will call it to specify the buffer to use for span reading AND
+ writing and point/line/triangle rendering.
+ There should be no confusion between current read or draw buffer anymore.
+ - Added swrast->CurrentBuffer to indicate which color buffer to read/draw.
+ Will be FRONT_LEFT_BIT, BACK_LEFT_BIT, FRONT_RIGHT_BIT or BACK_RIGHT_BIT.
+ This value is usually passed to swrast->Driver.SetBuffer().
+
+
+4. _mesa_create_context() changes. This function now takes a pointer to
+ a __GLimports object. The __GLimports structure contains function
+ pointers to system functions like fprintf(), malloc(), etc.
+ The _mesa_init_default_imports() function can be used to initialize
+ a __GLimports object. Most device drivers (like the DRI drivers)
+ should use this.
+
+
+5. In tnl's struct vertex_buffer, the field "ProjectedClipCoords"
+ has been replaced by "NdcPtr" to better match the OpenGL spec's
+ terminology.
+
+
+6. Since GL_EXT_stencil_two_side has been implemented, many of the
+ ctx->Stencil fields are now 2-element arrays. For example,
+ "GLenum Ref" is now "GLenum Ref[2]" The [0] elements are the front-face
+ values and the [1] elements are the back-face values.
+ ctx->Stencil.ActiveFace is 0 or 1 to indicate the current face for
+ the glStencilOp/Func/Mask() functions.
+ ctx->Stencil.TestTwoSide controls whether or not 1 or 2-sided stenciling
+ is enabled.
+
+
+7. Removed ctx->Polygon._OffsetAny. Removed ctx->Polygon.OffsetMRD.
+
+
+8. GLfloat / GLchan changes:
+
+ - Changed ctx->Driver.ClearColor() to take GLfloat[4] instead of GLchan[4].
+ ctx->Color.ClearColor is now GLfloat[4] too.
+ - Changed ctx->Driver.AlphaRef() to take GLfloat instead of GLchan.
+ - ctx->Color.AlphaRef is now GLfloat.
+ - texObj->BorderColor is now GLfloat[4]. texObj->_BorderChan is GLchan[4].