summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Kallweit <64953474+skallweitNV@users.noreply.github.com>2024-10-04 19:30:09 +0200
committerGitHub <noreply@github.com>2024-10-04 10:30:09 -0700
commit82c05f4858b67a0879680a51cb6577ba73a81763 (patch)
treefbb6b25f6c4177c4488af384923a31fcfd5f88bc
parentf521c2002e6b664944c6c39bab767dca1802887a (diff)
update slang-rhi (#5208)
m---------external/slang-rhi0
-rw-r--r--tools/render-test/render-test-main.cpp122
2 files changed, 42 insertions, 80 deletions
diff --git a/external/slang-rhi b/external/slang-rhi
-Subproject d0795a9db3e82314eb8c00352cc7e9ecb4fdcf8
+Subproject 61c3b5ccdefc258d52cb69829d08ff078325695
diff --git a/tools/render-test/render-test-main.cpp b/tools/render-test/render-test-main.cpp
index 5f0e51da3..9e1d60155 100644
--- a/tools/render-test/render-test-main.cpp
+++ b/tools/render-test/render-test-main.cpp
@@ -707,67 +707,50 @@ void RenderTestApp::_initializeAccelerationStructure()
// Build bottom level acceleration structure.
{
- IAccelerationStructure::BuildInputs accelerationStructureBuildInputs = {};
- IAccelerationStructure::PrebuildInfo accelerationStructurePrebuildInfo = {};
- accelerationStructureBuildInputs.descCount = 1;
- accelerationStructureBuildInputs.kind = IAccelerationStructure::Kind::BottomLevel;
- accelerationStructureBuildInputs.flags =
- IAccelerationStructure::BuildFlags::AllowCompaction;
- IAccelerationStructure::GeometryDesc geomDesc = {};
- geomDesc.flags = IAccelerationStructure::GeometryFlags::Opaque;
- geomDesc.type = IAccelerationStructure::GeometryType::Triangles;
- geomDesc.content.triangles.indexCount = 0;
- geomDesc.content.triangles.indexData = 0;
- geomDesc.content.triangles.indexFormat = Format::Unknown;
- geomDesc.content.triangles.vertexCount = kVertexCount;
- geomDesc.content.triangles.vertexData = vertexBuffer->getDeviceAddress();
- geomDesc.content.triangles.vertexFormat = Format::R32G32B32_FLOAT;
- geomDesc.content.triangles.vertexStride = sizeof(Vertex);
- geomDesc.content.triangles.transform3x4 = transformBuffer->getDeviceAddress();
- accelerationStructureBuildInputs.geometryDescs = &geomDesc;
+ AccelerationStructureBuildInputTriangles triangles = {};
+ BufferWithOffset vertexBufferWithOffset = vertexBuffer;
+ triangles.vertexBuffers = &vertexBufferWithOffset;
+ triangles.vertexBufferCount = 1;
+ triangles.vertexFormat = Format::R32G32B32_FLOAT;
+ triangles.vertexCount = kVertexCount;
+ triangles.vertexStride = sizeof(Vertex);
+ triangles.preTransformBuffer = transformBuffer;
+ triangles.flags = AccelerationStructureGeometryFlags::Opaque;
+ AccelerationStructureBuildDesc buildDesc = {};
+ buildDesc.inputs = &triangles;
+ buildDesc.inputCount = 1;
+ buildDesc.flags = AccelerationStructureBuildFlags::AllowCompaction;
// Query buffer size for acceleration structure build.
- m_device->getAccelerationStructurePrebuildInfo(
- accelerationStructureBuildInputs, &accelerationStructurePrebuildInfo);
- // Allocate buffers for acceleration structure.
- BufferDesc asDraftBufferDesc = {};
- asDraftBufferDesc.usage = BufferUsage::AccelerationStructure;
- asDraftBufferDesc.defaultState = ResourceState::AccelerationStructure;
- asDraftBufferDesc.size = accelerationStructurePrebuildInfo.resultDataMaxSize;
- ComPtr<IBuffer> draftBuffer = m_device->createBuffer(asDraftBufferDesc);
+ AccelerationStructureSizes accelerationStructureSizes = {};
+ m_device->getAccelerationStructureSizes(buildDesc, &accelerationStructureSizes);
+
BufferDesc scratchBufferDesc = {};
scratchBufferDesc.usage = BufferUsage::UnorderedAccess;
scratchBufferDesc.defaultState = ResourceState::UnorderedAccess;
- scratchBufferDesc.size = accelerationStructurePrebuildInfo.scratchDataSize;
+ scratchBufferDesc.size = accelerationStructureSizes.scratchSize;
ComPtr<IBuffer> scratchBuffer = m_device->createBuffer(scratchBufferDesc);
- // Build acceleration structure.
ComPtr<IQueryPool> compactedSizeQuery;
QueryPoolDesc queryPoolDesc = {};
queryPoolDesc.count = 1;
queryPoolDesc.type = QueryType::AccelerationStructureCompactedSize;
m_device->createQueryPool(queryPoolDesc, compactedSizeQuery.writeRef());
+ // Build acceleration structure.
ComPtr<IAccelerationStructure> draftAS;
- IAccelerationStructure::CreateDesc draftCreateDesc = {};
- draftCreateDesc.buffer = draftBuffer;
- draftCreateDesc.kind = IAccelerationStructure::Kind::BottomLevel;
- draftCreateDesc.offset = 0;
- draftCreateDesc.size = accelerationStructurePrebuildInfo.resultDataMaxSize;
- m_device->createAccelerationStructure(draftCreateDesc, draftAS.writeRef());
+ AccelerationStructureDesc draftDesc = {};
+ draftDesc.size = accelerationStructureSizes.accelerationStructureSize;
+ m_device->createAccelerationStructure(draftDesc, draftAS.writeRef());
compactedSizeQuery->reset();
auto commandBuffer = m_transientHeap->createCommandBuffer();
auto encoder = commandBuffer->encodeRayTracingCommands();
- IAccelerationStructure::BuildDesc buildDesc = {};
- buildDesc.dest = draftAS;
- buildDesc.inputs = accelerationStructureBuildInputs;
- buildDesc.scratchData = scratchBuffer->getDeviceAddress();
AccelerationStructureQueryDesc compactedSizeQueryDesc = {};
compactedSizeQueryDesc.queryPool = compactedSizeQuery;
compactedSizeQueryDesc.queryType = QueryType::AccelerationStructureCompactedSize;
- encoder->buildAccelerationStructure(buildDesc, 1, &compactedSizeQueryDesc);
+ encoder->buildAccelerationStructure(buildDesc, draftAS, nullptr, scratchBuffer, 1, &compactedSizeQueryDesc);
encoder->endEncoding();
commandBuffer->close();
m_queue->executeCommandBuffer(commandBuffer);
@@ -775,17 +758,9 @@ void RenderTestApp::_initializeAccelerationStructure()
uint64_t compactedSize = 0;
compactedSizeQuery->getResult(0, 1, &compactedSize);
- BufferDesc asBufferDesc = {};
- asBufferDesc.usage = BufferUsage::AccelerationStructure;
- asBufferDesc.defaultState = ResourceState::AccelerationStructure;
- asBufferDesc.size = (Size)compactedSize;
- m_blasBuffer = m_device->createBuffer(asBufferDesc);
- IAccelerationStructure::CreateDesc createDesc;
- createDesc.buffer = m_blasBuffer;
- createDesc.kind = IAccelerationStructure::Kind::BottomLevel;
- createDesc.offset = 0;
- createDesc.size = (Size)compactedSize;
- m_device->createAccelerationStructure(createDesc, m_bottomLevelAccelerationStructure.writeRef());
+ AccelerationStructureDesc finalDesc;
+ finalDesc.size = compactedSize;
+ m_device->createAccelerationStructure(finalDesc, m_bottomLevelAccelerationStructure.writeRef());
commandBuffer = m_transientHeap->createCommandBuffer();
encoder = commandBuffer->encodeRayTracingCommands();
@@ -799,12 +774,10 @@ void RenderTestApp::_initializeAccelerationStructure()
// Build top level acceleration structure.
{
- List<IAccelerationStructure::InstanceDesc> instanceDescs;
+ List<AccelerationStructureInstanceDesc> instanceDescs;
instanceDescs.setCount(1);
- instanceDescs[0].accelerationStructure =
- m_bottomLevelAccelerationStructure->getDeviceAddress();
- instanceDescs[0].flags =
- IAccelerationStructure::GeometryInstanceFlags::TriangleFacingCullDisable;
+ instanceDescs[0].accelerationStructure = m_bottomLevelAccelerationStructure->getHandle();
+ instanceDescs[0].flags = AccelerationStructureInstanceFlags::TriangleFacingCullDisable;
instanceDescs[0].instanceContributionToHitGroupIndex = 0;
instanceDescs[0].instanceID = 0;
instanceDescs[0].instanceMask = 0xFF;
@@ -814,49 +787,38 @@ void RenderTestApp::_initializeAccelerationStructure()
BufferDesc instanceBufferDesc = {};
instanceBufferDesc.size =
- instanceDescs.getCount() * sizeof(IAccelerationStructure::InstanceDesc);
+ instanceDescs.getCount() * sizeof(AccelerationStructureInstanceDesc);
instanceBufferDesc.usage = BufferUsage::AccelerationStructureBuildInput;
instanceBufferDesc.defaultState = ResourceState::AccelerationStructureBuildInput;
ComPtr<IBuffer> instanceBuffer =
m_device->createBuffer(instanceBufferDesc, instanceDescs.getBuffer());
- IAccelerationStructure::BuildInputs accelerationStructureBuildInputs = {};
- IAccelerationStructure::PrebuildInfo accelerationStructurePrebuildInfo = {};
- accelerationStructureBuildInputs.descCount = 1;
- accelerationStructureBuildInputs.kind = IAccelerationStructure::Kind::TopLevel;
- accelerationStructureBuildInputs.instanceDescs = instanceBuffer->getDeviceAddress();
+ AccelerationStructureBuildInputInstances instances = {};
+ instances.instanceBuffer = instanceBuffer;
+ instances.instanceCount = 1;
+ instances.instanceStride = sizeof(AccelerationStructureInstanceDesc);
+ AccelerationStructureBuildDesc buildDesc = {};
+ buildDesc.inputs = &instances;
+ buildDesc.inputCount = 1;
// Query buffer size for acceleration structure build.
- m_device->getAccelerationStructurePrebuildInfo(
- accelerationStructureBuildInputs, &accelerationStructurePrebuildInfo);
-
- BufferDesc asBufferDesc = {};
- asBufferDesc.usage = BufferUsage::AccelerationStructure;
- asBufferDesc.defaultState = ResourceState::AccelerationStructure;
- asBufferDesc.size = (size_t)accelerationStructurePrebuildInfo.resultDataMaxSize;
- m_tlasBuffer = m_device->createBuffer(asBufferDesc);
+ AccelerationStructureSizes accelerationStructureSizes = {};
+ m_device->getAccelerationStructureSizes(buildDesc, &accelerationStructureSizes);
BufferDesc scratchBufferDesc = {};
scratchBufferDesc.usage = BufferUsage::UnorderedAccess;
scratchBufferDesc.defaultState = ResourceState::UnorderedAccess;
- scratchBufferDesc.size = (size_t)accelerationStructurePrebuildInfo.scratchDataSize;
+ scratchBufferDesc.size = (size_t)accelerationStructureSizes.scratchSize;
ComPtr<IBuffer> scratchBuffer = m_device->createBuffer(scratchBufferDesc);
- IAccelerationStructure::CreateDesc createDesc = {};
- createDesc.buffer = m_tlasBuffer;
- createDesc.kind = IAccelerationStructure::Kind::TopLevel;
- createDesc.offset = 0;
- createDesc.size = accelerationStructurePrebuildInfo.resultDataMaxSize;
+ AccelerationStructureDesc createDesc = {};
+ createDesc.size = accelerationStructureSizes.accelerationStructureSize;
m_device->createAccelerationStructure(
createDesc, m_topLevelAccelerationStructure.writeRef());
auto commandBuffer = m_transientHeap->createCommandBuffer();
auto encoder = commandBuffer->encodeRayTracingCommands();
- IAccelerationStructure::BuildDesc buildDesc = {};
- buildDesc.dest = m_topLevelAccelerationStructure;
- buildDesc.inputs = accelerationStructureBuildInputs;
- buildDesc.scratchData = scratchBuffer->getDeviceAddress();
- encoder->buildAccelerationStructure(buildDesc, 0, nullptr);
+ encoder->buildAccelerationStructure(buildDesc, m_topLevelAccelerationStructure, nullptr, scratchBuffer, 0, nullptr);
encoder->endEncoding();
commandBuffer->close();
m_queue->executeCommandBuffer(commandBuffer);