@ -38,13 +38,13 @@ bool DmaPusher::Step() {
const auto address = gpu . MemoryManager ( ) . GpuToCpuAddress ( dma_get ) ;
const auto address = gpu . MemoryManager ( ) . GpuToCpuAddress ( dma_get ) ;
ASSERT_MSG ( address , " Invalid GPU address " ) ;
ASSERT_MSG ( address , " Invalid GPU address " ) ;
const CommandHeader command_header { Memory : : Read32 ( * address ) } ;
GPUVAddr size = dma_put - dma_get ;
ASSERT_MSG ( size % sizeof ( CommandHeader ) = = 0 , " Invalid aligned GPU addresses " ) ;
command_headers . resize ( size / sizeof ( CommandHeader ) ) ;
dma_get + = sizeof ( u32 ) ;
Memory: : ReadBlock ( * address , command_headers . data ( ) , size ) ;
if ( ! non_main ) {
for ( const CommandHeader & command_header : command_headers ) {
dma_mget = dma_get ;
}
// now, see if we're in the middle of a command
// now, see if we're in the middle of a command
if ( dma_state . length_pending ) {
if ( dma_state . length_pending ) {
@ -91,6 +91,14 @@ bool DmaPusher::Step() {
break ;
break ;
}
}
}
}
}
dma_get = dma_put ;
if ( ! non_main ) {
// TODO (degasus): This is dead code, as dma_mget is never read.
dma_mget = dma_get ;
}
} else if ( ib_enable & & ! dma_pushbuffer . empty ( ) ) {
} else if ( ib_enable & & ! dma_pushbuffer . empty ( ) ) {
// Current pushbuffer empty, but we have more IB entries to read
// Current pushbuffer empty, but we have more IB entries to read
const CommandList & command_list { dma_pushbuffer . front ( ) } ;
const CommandList & command_list { dma_pushbuffer . front ( ) } ;