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

Method BakeOmmArrayData

Rtxpt/OpacityMicroMap/OmmBuildQueue.cpp:302–343  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

300}
301
302void OmmBuildQueue::BakeOmmArrayData(nvrhi::ICommandList& commandList, BuildTask& task)
303{
304 commandList.beginTrackingBufferState(task.buffers.ommIndexBuffer, nvrhi::ResourceStates::Common);
305 commandList.beginTrackingBufferState(task.buffers.ommDescBuffer, nvrhi::ResourceStates::Common);
306 commandList.beginTrackingBufferState(task.buffers.ommDescArrayHistogramBuffer, nvrhi::ResourceStates::Common);
307 commandList.beginTrackingBufferState(task.buffers.ommIndexArrayHistogramBuffer, nvrhi::ResourceStates::Common);
308 commandList.beginTrackingBufferState(task.buffers.ommPostDispatchInfoBuffer, nvrhi::ResourceStates::Common);
309 commandList.beginTrackingBufferState(task.buffers.ommArrayDataBuffer, nvrhi::ResourceStates::Common);
310
311 commandList.clearBufferUInt(task.buffers.ommArrayDataBuffer, 0);
312
313 std::shared_ptr < donut::engine::MeshInfo > mesh = task.input.mesh;
314
315 for (uint32_t i = 0; i < task.input.geometries.size(); ++i)
316 {
317 const BufferInfo& bufferInfo = task.bufferInfos[i];
318 const OmmBuildQueue::BuildInput::Geometry& geom = task.input.geometries[i];
319
320 omm::GpuBakeNvrhi::Input input = GetBakeInput(omm::GpuBakeNvrhi::Operation::Bake, *mesh.get(), geom);
321
322 omm::GpuBakeNvrhi::Buffers output;
323 output.ommArrayBuffer = task.buffers.ommArrayDataBuffer;
324 output.ommArrayBufferOffset = (uint32_t)bufferInfo.ommArrayDataOffset;
325 output.ommDescBuffer = task.buffers.ommDescBuffer;
326 output.ommDescBufferOffset = (uint32_t)bufferInfo.ommDescArrayOffset;
327 output.ommIndexBuffer = task.buffers.ommIndexBuffer;
328 output.ommIndexBufferOffset = (uint32_t)bufferInfo.ommIndexOffset;
329 output.ommDescArrayHistogramBuffer = task.buffers.ommDescArrayHistogramBuffer;
330 output.ommDescArrayHistogramBufferOffset = (uint32_t)bufferInfo.ommDescArrayHistogramOffset;
331 output.ommIndexHistogramBuffer = task.buffers.ommIndexArrayHistogramBuffer;
332 output.ommIndexHistogramBufferOffset = (uint32_t)bufferInfo.ommIndexHistogramOffset;
333 output.ommPostDispatchInfoBuffer = task.buffers.ommPostDispatchInfoBuffer;
334 output.ommPostDispatchInfoBufferOffset = (uint32_t)bufferInfo.ommPostDispatchInfoOffset;
335
336 m_baker->Dispatch(&commandList, input, output);
337
338 omm::GpuBakeNvrhi::PreDispatchInfo setupInfo;
339 m_baker->GetPreDispatchInfo(input, setupInfo);
340
341 commandList.copyBuffer(task.buffers.ommReadbackBuffer, bufferInfo.ommPostDispatchInfoReadbackOffset, task.buffers.ommPostDispatchInfoBuffer, bufferInfo.ommPostDispatchInfoOffset, setupInfo.ommPostDispatchInfoBufferSize);
342 }
343}
344
345std::vector<bvh::OmmAttachment> OmmBuildQueue::BuildOMMAttachments(nvrhi::ICommandList& commandList, BuildTask& task)
346{

Callers

nothing calls this directly

Calls 1

GetBakeInputFunction · 0.85

Tested by

no test coverage detected