[snip errors]
I get this with current Mesa CVS and DRI CVS for r200:
Sorry, a correct patch is attached. Note that to try it, you need :
- to draw less than 64KB of pixels (that is ~16000 RGBA8 pixels)
- to specify glPixelZoom(1.F,-1.F);
- to use the correct pixel format : glDrawPixels(width,height,GL_BGRA,GL_UNSIGNED_INT_8_8_8_8_REV,mem);
The problem I have is that everything seems to work fine (dma memory is allocated/deallocated withouth error, emitblit seems to work) but no pixels happen to be drawn.
Stephane
? depend
Index: r200_pixel.c
===================================================================
RCS file: /cvs/mesa/Mesa/src/mesa/drivers/dri/r200/r200_pixel.c,v
retrieving revision 1.6
diff -u -r1.6 r200_pixel.c
--- r200_pixel.c 27 Apr 2004 18:37:13 -0000 1.6
+++ r200_pixel.c 2 May 2004 14:01:47 -0000
@@ -287,7 +287,7 @@
static void do_draw_pix( GLcontext *ctx,
GLint x, GLint y, GLsizei width, GLsizei height,
GLint pitch,
- const void *pixels,
+ int src_offset,
GLuint planemask)
{
r200ContextPtr rmesa = R200_CONTEXT(ctx);
@@ -297,7 +297,6 @@
int i;
int blit_format;
int size;
- int src_offset = r200GartOffsetFromVirtual( rmesa, pixels );
int src_pitch = pitch * rmesa->r200Screen->cpp;
if (R200_DEBUG & DEBUG_PIXEL)
@@ -429,14 +428,20 @@
do_draw_pix( ctx, x, y, width, height, pitch, pixels, planemask );
return GL_TRUE;
}
- else if (0)
+ else
{
/* Pixels is in regular memory -- get dma buffers and perform
* upload through them.
*/
+ struct r200_dma_region region;
+ memset(®ion, 0, sizeof(region));
+ r200AllocDmaRegion( rmesa, ®ion, size, 1024 );
+ memcpy(region.address + region.start, pixels, size);
+
+ do_draw_pix( ctx, x, y, width, height, pitch, GET_START(®ion), planemask );
+
+ r200ReleaseDmaRegion(rmesa,®ion,__FUNCTION__);
}
- else
- return GL_FALSE;
}
static void
