void Window::_updateSwap( const uint32_t frameNumber ) { if( _maxFPS < std::numeric_limits< float >::max( )) { WindowThrottleFramerate packetThrottle; packetThrottle.minFrameTime = 1000.0f / _maxFPS; send( packetThrottle ); EQLOG( LOG_TASKS ) << "TASK Throttle framerate " << &packetThrottle << std::endl; _maxFPS = std::numeric_limits< float >::max(); } for( std::vector<co::Barrier*>::iterator i = _swapBarriers.begin(); i != _swapBarriers.end(); ++i ) { const co::Barrier* barrier = *i; if( barrier->getHeight() <= 1 ) { EQINFO << "Ignoring swap barrier of height " << barrier->getHeight() << std::endl; continue; } WindowBarrierPacket packet; packet.barrier = barrier; send( packet ); EQLOG( LOG_TASKS ) << "TASK barrier " << &packet << std::endl; } if( _nvNetBarrier ) { if( _nvNetBarrier->getHeight() <= 1 ) { EQWARN << "Ignoring NV swap barrier of height " << _nvNetBarrier->getHeight() << std::endl; } else { EQASSERT( _nvSwapBarrier ); EQASSERT( _nvSwapBarrier->isNvSwapBarrier( )); // Entering the NV_swap_group. The _nvNetBarrier is also part of // _swapBarriers, which means that the pre-join was already sync'ed // with a barrier. // Now enter the swap group and post-sync with the barrier again. WindowNVBarrierPacket packet; packet.barrier = _nvSwapBarrier->getNVSwapBarrier(); packet.group = _nvSwapBarrier->getNVSwapGroup(); packet.netBarrier = _nvNetBarrier; send( packet ); } } _resetSwapBarriers(); if( _swap ) { WindowSwapPacket packet; send( packet ); EQLOG( LOG_TASKS ) << "TASK swap " << &packet << std::endl; } }
void Window::_updateSwap( const uint32_t frameNumber ) { if( _swapFinish ) { send( fabric::CMD_WINDOW_FINISH ); LBLOG( LOG_TASKS ) << "TASK finish " << frameNumber << std::endl; _swapFinish = false; } if( _maxFPS < std::numeric_limits< float >::max( )) { const float minFrameTime = 1000.0f / _maxFPS; send( fabric::CMD_WINDOW_THROTTLE_FRAMERATE ) << minFrameTime; LBLOG( LOG_TASKS ) << "TASK Throttle framerate " << minFrameTime << std::endl; _maxFPS = std::numeric_limits< float >::max(); } for( co::BarriersCIter i = _swapBarriers.begin(); i != _swapBarriers.end(); ++i ) { const co::Barrier* barrier = *i; if( barrier->getHeight() <= 1 ) { LBVERB << "Ignoring swap barrier of height " << barrier->getHeight() << std::endl; continue; } send( fabric::CMD_WINDOW_BARRIER ) << co::ObjectVersion( barrier ); LBLOG( LOG_TASKS ) << "TASK barrier barrier " << co::ObjectVersion( barrier ) << std::endl; } if( _nvNetBarrier ) { if( _nvNetBarrier->getHeight() <= 1 ) { LBWARN << "Ignoring NV swap barrier of height " << _nvNetBarrier->getHeight() << std::endl; } else { LBASSERT( _nvSwapBarrier ); LBASSERT( _nvSwapBarrier->isNvSwapBarrier( )); // Entering the NV_swap_group. The _nvNetBarrier is also part of // _swapBarriers, which means that the pre-join was already sync'ed // with a barrier. // Now enter the swap group and post-sync with the barrier again. send( fabric::CMD_WINDOW_NV_BARRIER ) << co::ObjectVersion( _nvNetBarrier ) << _nvSwapBarrier->getNVSwapGroup() << _nvSwapBarrier->getNVSwapBarrier(); } } _resetSwapBarriers(); if( _swap ) { send( fabric::CMD_WINDOW_SWAP ); LBLOG( LOG_TASKS ) << "TASK swap " << frameNumber << std::endl; } }