| 300 | } |
| 301 | |
| 302 | void 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 | |
| 345 | std::vector<bvh::OmmAttachment> OmmBuildQueue::BuildOMMAttachments(nvrhi::ICommandList& commandList, BuildTask& task) |
| 346 | { |
nothing calls this directly
no test coverage detected