message: Improve filtering of tiles in list we do parallel rendering over
  not queuing the extra tiles which we then just early exit from should
  let TBB get a better actual utilization of threads, since we only
  run the parallel for on work we actually need to do.
diff: @@ -335,8 +335,26 @@ namespace ospray {
  std::sort(tilesForFrame.begin(), tilesForFrame.end());
  {
  + // Filter out any duplicate tiles, e.g. we double-count the background
  + // tile we have to render as the owner and our data projects to the
  + // same tile.
  auto end = std::unique(tilesForFrame.begin(), tilesForFrame.end());
  tilesForFrame.erase(end, tilesForFrame.end());
  +
  + if (errorThreshold > 0.0) {
  + // Filter any tiles which are finished due to reaching the
  + // error threshold. This should let TBB better allocate threads only
  + // to tiles that actually need work.
  + const uint32_t numTiles_x = static_cast<uint32_t>(fb->getNumTiles().x);
  + end = std::partition(tilesForFrame.begin(), tilesForFrame.end(),
  + [&](const int &i){
  + const uint32_t tile_y = i / numTiles_x;
  + const uint32_t tile_x = i - tile_y*numTiles_x;
  + const vec2i tileID(tile_x, tile_y);
  + return dfb->tileError(tileID) > errorThreshold;
  + });
  + tilesForFrame.erase(end, tilesForFrame.end());
  + }
  }
  tasking::parallel_for(tilesForFrame.size(), [&](size_t taskIndex) {
  @@ -350,10 +368,6 @@ namespace ospray {
  const bool tileOwner = (tileIndex % numGlobalRanks()) == globalRank();
  const int NUM_JOBS = (TILE_SIZE * TILE_SIZE) / RENDERTILE_PIXELS_PER_JOB;
  - if (dfb->tileError(tileID) <= errorThreshold) {
  - return;
  - }
  -
  Tile __aligned(64) bgtile(tileID, dfb->size, accumID);
  RegionInfo regionInfo;
  