MCPcopy Create free account
hub / github.com/NVIDIA-RTX/RTXPT / Finalize

Method Finalize

Rtxpt/OpacityMicroMap/OmmBuildQueue.cpp:422–463  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

420}
421
422void OmmBuildQueue::Finalize(nvrhi::ICommandList& commandList, BuildTask& task)
423{
424 std::unique_ptr<MeshDebugData> debugData = std::make_unique<MeshDebugData>();
425 debugData->ommArrayDataBuffer = task.buffers.ommArrayDataBuffer;
426 debugData->ommDescBuffer = task.buffers.ommDescBuffer;
427 debugData->ommIndexBuffer = task.buffers.ommIndexBuffer;
428
429 debugData->ommArrayDataBufferDescriptor =
430 std::make_shared<donut::engine::DescriptorHandle>(m_descriptorTable->CreateDescriptorHandle(nvrhi::BindingSetItem::RawBuffer_SRV(0, task.buffers.ommArrayDataBuffer)));
431 debugData->ommDescBufferDescriptor =
432 std::make_shared<donut::engine::DescriptorHandle>(m_descriptorTable->CreateDescriptorHandle(nvrhi::BindingSetItem::RawBuffer_SRV(0, task.buffers.ommDescBuffer)));
433 debugData->ommIndexBufferDescriptor =
434 std::make_shared<donut::engine::DescriptorHandle>(m_descriptorTable->CreateDescriptorHandle(nvrhi::BindingSetItem::RawBuffer_SRV(0, task.buffers.ommIndexBuffer)));
435
436 auto mesh = std::static_pointer_cast<MeshInfoEx>(task.input.mesh);
437 assert(!mesh->DebugData);
438 mesh->DebugData = std::move(debugData);
439 mesh->DebugDataDirty = true;
440
441 void* pReadbackData = m_device->mapBuffer(task.buffers.ommReadbackBuffer, nvrhi::CpuAccessMode::Read);
442 for (uint32_t i = 0; i < task.input.geometries.size(); ++i)
443 {
444 // Get debug info
445 BufferInfo& bufferInfo = task.bufferInfos[i];
446 omm::GpuBakeNvrhi::PostDispatchInfo postDispatchInfo;
447 m_baker->ReadPostDispatchInfo((uint8_t*)pReadbackData + bufferInfo.ommPostDispatchInfoReadbackOffset, sizeof(postDispatchInfo), postDispatchInfo);
448
449 const OmmBuildQueue::BuildInput::Geometry& geom = task.input.geometries[i];
450 MeshGeometryEx* meshGeometry = static_cast<MeshGeometryEx*>(task.input.mesh->geometries[geom.geometryIndexInMesh].get());
451
452 meshGeometry->DebugData.ommArrayDataOffset = (uint32_t)bufferInfo.ommArrayDataOffset;
453 meshGeometry->DebugData.ommDescBufferOffset = (uint32_t)bufferInfo.ommDescArrayOffset;
454 meshGeometry->DebugData.ommIndexBufferOffset = (uint32_t)bufferInfo.ommIndexOffset;
455 meshGeometry->DebugData.ommIndexBufferFormat = bufferInfo.ommIndexFormat;
456 meshGeometry->DebugData.ommStatsTotalKnown = postDispatchInfo.ommTotalOpaqueCount + postDispatchInfo.ommTotalTransparentCount;
457 meshGeometry->DebugData.ommStatsTotalUnknown = postDispatchInfo.ommTotalUnknownCount;
458 }
459 m_device->unmapBuffer(task.buffers.ommReadbackBuffer);
460
461 task.buffers.ommReadbackBuffer = nullptr;
462 m_baker->Clear();
463}
464
465void OmmBuildQueue::BuildTask::Reset()
466{

Callers

nothing calls this directly

Calls 1

ClearMethod · 0.45

Tested by

no test coverage detected