Skip to content
Stefan Eilemann edited this page Oct 19, 2010 · 5 revisions

Capabilities

Author: Carsten Rohn

State: Implemented in svn

Overview

This feature allows Equalizer to disable rendering resources automatically when they don't support given and dynamically changing requirements.

Requirements

  • The application can define supported capabilities of each channel at the start of the client
  • The application can define required capabilities for a view at runtime
  • Equalizer has to handle sufficient or insufficient capabilities automatically
  • Equalizer has to disable or freeze channels which do not support the required capabilities
  • Equalizer has to enable or unfreeze clients when required capabilities change and client supports them

Design

The application can define a set of supported capabilities for each channel by using the new Channel::setCapabilities( const uint64_t bitmask ). The given bitmask defines the capabilities of this channel. If the application sets the supported capabilities on a client channel, Equalizer has to use the (de)serialization mechanisms to propagate the change to the appropriate server channel.

Additionally, the application can set minimum and maximum capabilities in a view, using the new View::setMinimumCapabilites( const uint64_t bitmask ) and setMaximumCapabilities anytime at runtime. The given bitmask defines the required and desired capabilities of the view.

When the application changes the required capabilities of the view, the number of channels rendering is likely to have changed, so the load and view equalizers have to consider this when balancing the new frame. The load equalizer and view equalizer will exclude non-capable channels when balancing resources by asking the Compound::isRunning() function, which now compares the channels capability with those of its view and considers this when returning the compounds running state. Furthermore, in Compound::_updateInheritData, the draw tasks of those channels which do not fulfill the View's requirement are set to none.

In addition to the required capabilities the application can define a set of desired capabilities in the view. Equalizer computes the union of desired capabilities of all channels for this view supporting the minimum capabilities. This can be used to unify the rendering output of all channels of a view with different capabilities. The capability consensus can be retrieved by the new View::getCapabilities() function.

API

New functions:

void eq::Channel::setCapabilities( const uin64t_t bitmask )
uint64_t eq::Channel::getCapabilities() const
void eq::View::setMinimumCapabilites( const uint64_t bitmask )
uint64_t eq::View::getMinimumCapabilities() const 
void eq::View::setMaximumCapabilities( const uint64_t bitmask )
uint64_t eq::View::getMaximumCapabilities() const
uint64_t eq::View::getCapabilities() const

File Format

No changes.

Restrictions

If no channel is capable of fulfilling the required capabilities of the view, the view will not be updates. It is in the responsibility of the application to avoid this state. If a static decomposition is used, the regions updated by disabled channels will not be updated.