On Wed, 17 Jul 2002, Leif Delgass wrote:

> On 17 Jul 2002, Michel Dänzer wrote:
> 
> > On Wed, 2002-07-17 at 20:05, Keith Whitwell wrote:
> > > I've fixed this for drivers that use t_dd_triemit.h -- currently only radeon 
> > > and r200.
> > 
> > Great job! The clipping problems I originally reported with the
> > xscreensaver gears hack and fsv are fixed.
> 
> I've applied this fix to the mach64 FastRenderClippedPoly function and 
> reverted my previous fix.
> 
> I've tested the fix on r128 and it works there as well.  It looks like it 
> needs to be applied to all drivers with the FastRenderClippedPoly 
> function, but I can't test any of the other drivers.  
> 
> There's another fix I made to the mach64 driver that I think needs to be
> applied to all drivers, and that's setting the read buffer equal to the
> draw buffer when switching draw buffers.  This fixes software fallbacks
> when drawing on the front buffer.  I've tested it on r128 and it works.  
> Should I try my hand at combining these into a single patch for all the
> drivers?

At any rate, the patch for r128 with the read buffer + flatshade fix is 
attached.  If nobody has any objections, I can commit this.  Maybe someone 
with access to other cards would like to try making the changes for other 
drivers? 

-- 
Leif Delgass 
http://www.retinalburn.net
? r128-drawbuffer+flatshade.diff
Index: r128_state.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/r128/r128_state.c,v
retrieving revision 1.22
diff -u -r1.22 r128_state.c
--- r128_state.c        12 Jun 2002 15:50:25 -0000      1.22
+++ r128_state.c        17 Jul 2002 19:27:03 -0000
@@ -689,13 +689,13 @@
 
       switch ( mode ) {
       case GL_FRONT_LEFT:
-        rmesa->drawOffset = rmesa->r128Screen->frontOffset;
-        rmesa->drawPitch  = rmesa->r128Screen->frontPitch;
+        rmesa->drawOffset = rmesa->readOffset = rmesa->r128Screen->frontOffset;
+        rmesa->drawPitch  = rmesa->readPitch  = rmesa->r128Screen->frontPitch;
         FALLBACK( rmesa, R128_FALLBACK_DRAW_BUFFER, GL_FALSE );
         break;
       case GL_BACK_LEFT:
-        rmesa->drawOffset = rmesa->r128Screen->backOffset;
-        rmesa->drawPitch  = rmesa->r128Screen->backPitch;
+        rmesa->drawOffset = rmesa->readOffset = rmesa->r128Screen->backOffset;
+        rmesa->drawPitch  = rmesa->readPitch  = rmesa->r128Screen->backPitch;
         FALLBACK( rmesa, R128_FALLBACK_DRAW_BUFFER, GL_FALSE );
         break;
       default:
Index: r128_tris.c
===================================================================
RCS file: /cvsroot/dri/xc/xc/lib/GL/mesa/src/drv/r128/r128_tris.c,v
retrieving revision 1.17
diff -u -r1.17 r128_tris.c
--- r128_tris.c 2 Jun 2002 16:00:43 -0000       1.17
+++ r128_tris.c 17 Jul 2002 19:27:04 -0000
@@ -501,9 +501,9 @@
    rmesa->num_verts += (n-2) * 3;
 
    for (i = 2 ; i < n ; i++) {
-      COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) start );
       COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) VERT(elts[i-1]) );
       COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) VERT(elts[i]) );
+      COPY_DWORDS( j, vb, vertsize, (r128VertexPtr) start );
    }
 }
 

Reply via email to