ROI optimizes the compositing by limiting the readback region to the area which has been updated, thus reducing the numbers of pixels to be transferred, compressed and send over a network. I finally got around to implement ROI compositing in eqPly, the Equalizer example application.
How does it work?
First, each resource tracks the region it updated during its draw operation by projecting each bounding box of each rendered chunk of geometry into screen space. All screen-space bounding boxes are merged to calculate the updated region.
Secondly, during a readback this region is intersected with the requested readback area. This intersected area is then read back.
Third, and this is the important part for parallel compositing, during assembly the resource region is updated to the union of the existing (draw) region and the regions of all input frames.
The corresponding commit is 448af149cd, in case you want to implement something similar. Eventually we will move this code to Equalizer, where we will also use the ROI information for load_equalizer optimization!
On the right you can see a screenshot of a four-way sort-last decomposition with streaming compositing. The ROI is rendered to demonstrate the feature. As a reminder, below is a video on streaming compositing for database decomposition: