I've been wondering a bit about this code in
radeon_emit_packet3_cliprect():
do {
if ( i < cmdbuf->nbox ) {
[...]
/* FIXME The second and subsequent times round
* this loop, send a WAIT_UNTIL_3D_IDLE before
* calling emit_clip_rect(). This fixes a
* lockup on fast machines when sending
* several cliprects with a cmdbuf, as when
* waving a 2D window over a 3D
* window. Something in the commands from user
* space seems to hang the card when they're
* sent several times in a row. That would be
* the correct place to fix it but this works
* around it until I can figure that out - Tim
* Smith */
if ( i ) {
BEGIN_RING( 2 );
RADEON_WAIT_UNTIL_3D_IDLE();
ADVANCE_RING();
}
radeon_emit_clip_rect( dev_priv, &box );
}
[...]
} while ( ++i < cmdbuf->nbox );
I've still experienced the occasional lockup with multiple cliprects, so
I wonder if we shouldn't simply always do a RADEON_WAIT_UNTIL_3D_IDLE()
in radeon_emit_clip_rect() (which would also take care of older ioctls
with similar loops)?
I also wonder if that isn't the correct fix, i.e. the scissor registers
shouldn't be written to while the 3D engine is busy.
Last but not least, as Keith pointed out a rather long while ago, at
least the R200 engine (but the docs I have suggest this goes back to
Rage128 even) has three more sets of scissor registers, has anyone
played with those yet?
--
Earthling Michel DÃnzer | Debian (powerpc), X and DRI developer
Software libre enthusiast | http://svcs.affero.net/rm.php?r=daenzer
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive? Does it
help you create better code? SHARE THE LOVE, and help us help
YOU! Click Here: http://sourceforge.net/donate/
_______________________________________________
Dri-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/dri-devel