Skip to content
Snippets Groups Projects
Verified Commit 404685d6 authored by Tobias Frisch's avatar Tobias Frisch
Browse files

Allow building acceleration structures from multiple geometry data elements

parent 2e977ce7
No related branches found
No related tags found
1 merge request!112Resolve "Raytracing module improvements"
......@@ -131,7 +131,6 @@ namespace vkcv::scene {
for (auto& part : m_parts) {
if (part.m_geometry.isValid()) {
geometryData.push_back(part.m_geometry);
break; // TODO: Ensure safe support of multiple geometry data structures to build bottom-level acceleration structures first! Avoid crashes!
}
}
......
......@@ -199,18 +199,33 @@ namespace vkcv {
cmdStream,
[&geometryInfos, &pRangeInfos, &dynamicDispatch](
const vk::CommandBuffer &cmdBuffer) {
cmdBuffer.buildAccelerationStructuresKHR(
static_cast<uint32_t>(geometryInfos.size()),
geometryInfos.data(),
pRangeInfos.data(),
dynamicDispatch
const vk::MemoryBarrier barrier (
vk::AccessFlagBits::eAccelerationStructureWriteKHR,
vk::AccessFlagBits::eAccelerationStructureReadKHR
);
for (size_t i = 0; i < geometryInfos.size(); i++) {
cmdBuffer.buildAccelerationStructuresKHR(
1,
&(geometryInfos[i]),
&(pRangeInfos[i]),
dynamicDispatch
);
cmdBuffer.pipelineBarrier(
vk::PipelineStageFlagBits::eAccelerationStructureBuildKHR,
vk::PipelineStageFlagBits::eAccelerationStructureBuildKHR,
vk::DependencyFlags(),
barrier,
nullptr,
nullptr
);
}
},
nullptr
);
core.submitCommandStream(cmdStream, false);
core.getContext().getDevice().waitIdle(); // TODO: Fix that mess!
return {
accelerationStructure,
......@@ -262,7 +277,6 @@ namespace vkcv {
const auto vertexCount = (vertexBufferSize / vertexStride);
const vk::Format vertexFormat = getVertexFormat(data.getGeometryVertexType());
const vk::IndexType indexType = getIndexType(data.getIndexBitCount());
const vk::AccelerationStructureGeometryTrianglesDataKHR asTrianglesData (
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment