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 { ...@@ -131,7 +131,6 @@ namespace vkcv::scene {
for (auto& part : m_parts) { for (auto& part : m_parts) {
if (part.m_geometry.isValid()) { if (part.m_geometry.isValid()) {
geometryData.push_back(part.m_geometry); 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 { ...@@ -199,18 +199,33 @@ namespace vkcv {
cmdStream, cmdStream,
[&geometryInfos, &pRangeInfos, &dynamicDispatch]( [&geometryInfos, &pRangeInfos, &dynamicDispatch](
const vk::CommandBuffer &cmdBuffer) { const vk::CommandBuffer &cmdBuffer) {
cmdBuffer.buildAccelerationStructuresKHR( const vk::MemoryBarrier barrier (
static_cast<uint32_t>(geometryInfos.size()), vk::AccessFlagBits::eAccelerationStructureWriteKHR,
geometryInfos.data(), vk::AccessFlagBits::eAccelerationStructureReadKHR
pRangeInfos.data(),
dynamicDispatch
); );
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 nullptr
); );
core.submitCommandStream(cmdStream, false); core.submitCommandStream(cmdStream, false);
core.getContext().getDevice().waitIdle(); // TODO: Fix that mess!
return { return {
accelerationStructure, accelerationStructure,
...@@ -262,7 +277,6 @@ namespace vkcv { ...@@ -262,7 +277,6 @@ namespace vkcv {
const auto vertexCount = (vertexBufferSize / vertexStride); const auto vertexCount = (vertexBufferSize / vertexStride);
const vk::Format vertexFormat = getVertexFormat(data.getGeometryVertexType()); const vk::Format vertexFormat = getVertexFormat(data.getGeometryVertexType());
const vk::IndexType indexType = getIndexType(data.getIndexBitCount()); const vk::IndexType indexType = getIndexType(data.getIndexBitCount());
const vk::AccelerationStructureGeometryTrianglesDataKHR asTrianglesData ( const vk::AccelerationStructureGeometryTrianglesDataKHR asTrianglesData (
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment