| 247 | } |
| 248 | |
| 249 | bool PixelDebug::copyDataToCPU() |
| 250 | { |
| 251 | FALCOR_ASSERT(!mRunning); |
| 252 | if (mWaitingForData) |
| 253 | { |
| 254 | // Wait for signal. |
| 255 | mpFence->wait(); |
| 256 | mWaitingForData = false; |
| 257 | |
| 258 | if (mEnabled) |
| 259 | { |
| 260 | // Copy data from readback buffer to CPU buffers. |
| 261 | const uint8_t* data = reinterpret_cast<const uint8_t*>(mpReadbackBuffer->map()); |
| 262 | const uint32_t* counterData = reinterpret_cast<const uint32_t*>(data); |
| 263 | data += mpCounterBuffer->getSize(); |
| 264 | const PrintRecord* printData = reinterpret_cast<const PrintRecord*>(data); |
| 265 | data += mpPrintBuffer->getSize(); |
| 266 | const AssertRecord* assertData = reinterpret_cast<const AssertRecord*>(data); |
| 267 | |
| 268 | const uint32_t printCount = std::min(mpPrintBuffer->getElementCount(), counterData[0]); |
| 269 | const uint32_t assertCount = std::min(mpAssertBuffer->getElementCount(), counterData[1]); |
| 270 | |
| 271 | mPrintData.assign(printData, printData + printCount); |
| 272 | mAssertData.assign(assertData, assertData + assertCount); |
| 273 | |
| 274 | mpReadbackBuffer->unmap(); |
| 275 | mDataValid = true; |
| 276 | return true; |
| 277 | } |
| 278 | } |
| 279 | |
| 280 | return false; |
| 281 | } |
| 282 | |
| 283 | } // namespace Falcor |