Slighty more optimized DMA emulation C code. Support for waiting for

checking empty FIFO - but disabled for now.
This commit is contained in:
Jose Fonseca 2002-04-21 14:32:28 +00:00
parent 31a6440465
commit 95dba10bc0

View file

@ -435,28 +435,41 @@ static void mach64_dma_dispatch_vertex( drm_device_t *dev,
{ {
u32 *p = (u32 *)((char *)dev_priv->buffers->handle + buf->offset); u32 *p = (u32 *)((char *)dev_priv->buffers->handle + buf->offset);
u32 used = buf->used >> 2; u32 used = buf->used >> 2;
u32 fifo = 0;
while(used) while ( used ) {
{
u32 reg, count; u32 reg, count;
reg = *p & 0xffff; reg = *p++;
reg = MMSELECT( reg );
count = (*p >> 16) + 1;
p++;
used--; used--;
while(count && used) count = (reg >> 16) + 1;
{ reg = reg & 0xffff;
u32 data; reg = MMSELECT( reg );
data = *p; while ( count && used ) {
#if 0
/* FIXME: this lowers significantly the frame rate */
if ( !fifo ) {
u32 t = 0;
MACH64_WRITE( reg, data ); while ( MACH64_READ( MACH64_GUI_STAT ) & MACH64_GUI_ACTIVE ) {
reg += 4; if ( ++t > 1000000 ) {
p++; DRM_ERROR( "timeout writing register\n" );
return;
}
}
fifo = 16;
}
else
--fifo;
#endif
MACH64_WRITE( reg, *p++ );
used--; used--;
reg += 4;
count--; count--;
} }
} }