Am Sonntag, 29. August 2004 17:48 schrieb Dieter N�tzel:
> Am Sonntag, 29. August 2004 16:54 schrieben Sie:
> > I'm happy to see this go in. It is probably excessively cautious to keep
> > it out & it's certainly not getting any testing out of the tree.
>
> /opt/Mesa> cd src/mesa/drivers/dri/r200/
> dri/r200> patch -p0 -E -N < ~/Dokumente/DRI-Mesa/r200-maybe-flush-less.diff
> patching file r200_tcl.c
> Hunk #1 FAILED at 140.
> 1 out of 1 hunk FAILED -- saving rejects to file r200_tcl.c.rej
OK,
here is mine.
Compiling, now.
-Dieter
--- r200_tcl.c.orig 2004-08-19 21:30:27.000000000 +0200
+++ r200_tcl.c 2004-08-29 17:58:33.779578646 +0200
@@ -140,21 +140,37 @@
static GLushort *r200AllocElts( r200ContextPtr rmesa, GLuint nr )
{
- if (rmesa->dma.flush)
- rmesa->dma.flush( rmesa );
+ if (rmesa->dma.flush == r200FlushElts &&
+ rmesa->store.cmd_used + nr*2 < R200_CMD_BUF_SZ) {
r200EnsureCmdBufSpace( rmesa, AOS_BUFSZ(rmesa->tcl.nr_aos_components) +
rmesa->hw.max_state_size + ELTS_BUFSZ(nr) );
- r200EmitAOS( rmesa,
- rmesa->tcl.aos_components,
- rmesa->tcl.nr_aos_components, 0 );
+ GLushort *dest = (GLushort *)(rmesa->store.cmd_buf +
+ rmesa->store.cmd_used);
+
+ rmesa->store.cmd_used += nr*2;
- return r200AllocEltsOpenEnded( rmesa, rmesa->tcl.hw_primitive, nr );
+ return dest;
+ }
+ else {
+ if (rmesa->dma.flush)
+ rmesa->dma.flush( rmesa );
+
+ r200EmitAOS( rmesa,
+ rmesa->tcl.aos_components,
+ rmesa->tcl.nr_aos_components, 0 );
+
+ return r200AllocEltsOpenEnded( rmesa, rmesa->tcl.hw_primitive, nr );
+ }
}
-#define CLOSE_ELTS() R200_NEWPRIM( rmesa )
+#define CLOSE_ELTS() \
+do { \
+ if (0) R200_NEWPRIM( rmesa ); \
+} \
+while (0)
/* TODO: Try to extend existing primitive if both are identical,