@ -66,19 +66,20 @@ const DmaPusher& GPU::DmaPusher() const {
return * dma_pusher ;
return * dma_pusher ;
}
}
void GPU : : WaitFence ( u32 syncpoint_id , u32 value ) const {
void GPU : : WaitFence ( u32 syncpoint_id , u32 value ) {
// Synced GPU, is always in sync
// Synced GPU, is always in sync
if ( ! is_async ) {
if ( ! is_async ) {
return ;
return ;
}
}
MICROPROFILE_SCOPE ( GPU_wait ) ;
MICROPROFILE_SCOPE ( GPU_wait ) ;
while ( syncpoints [ syncpoint_id ] . load ( std : : memory_order_relaxed ) < value ) {
std : : unique_lock lock { sync_mutex } ;
}
sync_cv . wait ( lock , [ = ] ( ) { return syncpoints [ syncpoint_id ] . load ( ) > = value ; } ) ;
}
}
void GPU : : IncrementSyncPoint ( const u32 syncpoint_id ) {
void GPU : : IncrementSyncPoint ( const u32 syncpoint_id ) {
syncpoints [ syncpoint_id ] + + ;
syncpoints [ syncpoint_id ] + + ;
std : : lock_guard lock { sync_mutex } ;
std : : lock_guard lock { sync_mutex } ;
sync_cv . notify_all ( ) ;
if ( ! syncpt_interrupts [ syncpoint_id ] . empty ( ) ) {
if ( ! syncpt_interrupts [ syncpoint_id ] . empty ( ) ) {
u32 value = syncpoints [ syncpoint_id ] . load ( ) ;
u32 value = syncpoints [ syncpoint_id ] . load ( ) ;
auto it = syncpt_interrupts [ syncpoint_id ] . begin ( ) ;
auto it = syncpt_interrupts [ syncpoint_id ] . begin ( ) ;