MCPcopy Create free account
hub / github.com/RenderKit/ospray / process

Method process

modules/mpi/ospray/render/WriteMultipleTileOperation.cpp:58–142  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

56}
57
58void LiveWriteMultipleTile::process(const ispc::Tile &tile)
59{
60 if (writeOnceTile) {
61 finished.region = tile.region;
62 finished.fbSize = tile.fbSize;
63 finished.rcp_fbSize = tile.rcp_fbSize;
64 accumulate(tile);
65 tileIsFinished();
66 return;
67 }
68
69 bool done = false;
70 if (tile.accumID == 0) {
71 finished.region = tile.region;
72 finished.fbSize = tile.fbSize;
73 finished.rcp_fbSize = tile.rcp_fbSize;
74
75 const auto bytes = tile.region.size().y * (TILE_SIZE * sizeof(float));
76 memcpy(accum.z, tile.z, bytes);
77 memcpy(finished.z, tile.z, bytes);
78 }
79
80 {
81 std::lock_guard<std::mutex> lock(mutex);
82 maxAccumID = std::max(maxAccumID, tile.accumID);
83 if (!tileBuffered && (tile.accumID & 1) == 0) {
84 memcpy(&bufferedTile, &tile, sizeof(ispc::Tile));
85 tileBuffered = true;
86 } else {
87 ispc::DFB_accumulateTileSimple((const ispc::VaryingTile *)&tile,
88 (ispc::VaryingTile *)&accum,
89 (ispc::VaryingTile *)&variance);
90
91 if (dfb->hasNormalBuf() || dfb->hasAlbedoBuf()) {
92 ispc::DFB_accumulateAuxTile((const ispc::VaryingTile *)&tile,
93 (ispc::Tile *)&finished,
94 (ispc::VaryingTile *)&accum);
95 }
96 }
97 done = --instances == 0;
98 }
99
100 if (done) {
101 auto sz = tile.region.size();
102 if ((maxAccumID & 1) == 0) {
103 // if maxAccumID is even, variance buffer is one accumulated tile
104 // short, which leads to vast over-estimation of variance; thus
105 // estimate variance now, when accum buffer is also one (the buffered)
106 // tile short
107 const float prevErr = DFB_computeErrorForTile(sz,
108 (ispc::VaryingTile *)&accum,
109 (ispc::VaryingTile *)&variance,
110 maxAccumID - 1);
111 // use maxAccumID for correct normalization
112 // this is OK, because both accumIDs are even
113 bufferedTile.accumID = maxAccumID;
114 accumulate(bufferedTile);
115 error = prevErr;

Callers 2

processMessageMethod · 0.45
setTileMethod · 0.45

Calls 4

hasNormalBufMethod · 0.80
hasAlbedoBufMethod · 0.80
doAccumulationMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected