mirror of
https://gitlab.freedesktop.org/mesa/drm.git
synced 2025-12-20 18:40:09 +01:00
Slighty more optimized DMA emulation C code. Support for waiting for
checking empty FIFO - but disabled for now.
This commit is contained in:
parent
31a6440465
commit
95dba10bc0
1 changed files with 28 additions and 15 deletions
|
|
@ -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--;
|
||||||
|
|
||||||
|
count = (reg >> 16) + 1;
|
||||||
|
reg = reg & 0xffff;
|
||||||
|
reg = MMSELECT( reg );
|
||||||
|
|
||||||
while(count && used)
|
while ( count && used ) {
|
||||||
{
|
#if 0
|
||||||
u32 data;
|
/* FIXME: this lowers significantly the frame rate */
|
||||||
|
if ( !fifo ) {
|
||||||
|
u32 t = 0;
|
||||||
|
|
||||||
data = *p;
|
while ( MACH64_READ( MACH64_GUI_STAT ) & MACH64_GUI_ACTIVE ) {
|
||||||
|
if ( ++t > 1000000 ) {
|
||||||
MACH64_WRITE( reg, data );
|
DRM_ERROR( "timeout writing register\n" );
|
||||||
reg += 4;
|
return;
|
||||||
p++;
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fifo = 16;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
--fifo;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
MACH64_WRITE( reg, *p++ );
|
||||||
used--;
|
used--;
|
||||||
|
|
||||||
|
reg += 4;
|
||||||
count--;
|
count--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue