Skip to content

Commit

Permalink
Added AccelStructBuildRange
Browse files Browse the repository at this point in the history
  • Loading branch information
corporateshark committed Sep 8, 2024
1 parent ad35571 commit 0af37bb
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
11 changes: 9 additions & 2 deletions lvk/LVK.h
Original file line number Diff line number Diff line change
Expand Up @@ -808,20 +808,27 @@ enum AccelStructGeometryFlagBits : uint8_t {
AccelStructGeometryFlagBits_NoDuplicateAnyHit = 1 << 1,
};

struct AccelStructBuildRange {
uint32_t primitiveCount = 0;
uint32_t primitiveOffset = 0;
uint32_t firstVertex = 0;
uint32_t transformOffset = 0;
};

struct AccelStructDesc {
AccelStructType type = AccelStructType_Invalid;
AccelStructGeomType geometryType = AccelStructGeomType_Triangles;
uint8_t geometryFlags = AccelStructGeometryFlagBits_Opaque;
uint8_t buildFlags = AccelStructBuildFlagBits_PreferFastTrace;

VertexFormat vertexFormat = VertexFormat::Invalid;
BufferHandle vertexBuffer;
uint32_t vertexStride = 0; // zero means the size of `vertexFormat`
uint32_t numVertices = 0;
IndexFormat indexFormat = IndexFormat_UI32;
BufferHandle indexBuffer;
uint32_t numIndices = 0;
BufferHandle transformBuffer;
AccelStructBuildRange buildRange = {};
uint8_t buildFlags = AccelStructBuildFlagBits_PreferFastTrace;
const char* debugName = "";
};

Expand Down
15 changes: 6 additions & 9 deletions lvk/vulkan/VulkanClasses.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3615,12 +3615,11 @@ lvk::Holder<lvk::TextureHandle> lvk::VulkanContext::createTexture(const TextureD
lvk::AccelStructHandle lvk::VulkanContext::createBLAS(const AccelStructDesc& desc, Result* outResult) {
LVK_ASSERT(desc.type == AccelStructType_BLAS);
LVK_ASSERT(desc.geometryType == AccelStructGeomType_Triangles);
LVK_ASSERT(desc.numIndices);
LVK_ASSERT(desc.numIndices % 3 == 0);
LVK_ASSERT(desc.numVertices);
LVK_ASSERT(desc.indexBuffer.valid());
LVK_ASSERT(desc.vertexBuffer.valid());
LVK_ASSERT(desc.transformBuffer.valid());
LVK_ASSERT(desc.buildRange.primitiveCount);

VkGeometryFlagsKHR geometryFlags = 0;

Expand Down Expand Up @@ -3659,15 +3658,13 @@ lvk::AccelStructHandle lvk::VulkanContext::createBLAS(const AccelStructDesc& des
.pGeometries = &accelerationStructureGeometry,
};

const uint32_t numTriangles = desc.numIndices / 3;

VkAccelerationStructureBuildSizesInfoKHR accelerationStructureBuildSizesInfo = {
.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR,
};
vkGetAccelerationStructureBuildSizesKHR(vkDevice_,
VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
&accelerationStructureBuildGeometryInfo,
&numTriangles,
&desc.buildRange.primitiveCount,
&accelerationStructureBuildSizesInfo);
char debugNameBuffer[256] = {0};
if (desc.debugName) {
Expand Down Expand Up @@ -3730,10 +3727,10 @@ lvk::AccelStructHandle lvk::VulkanContext::createBLAS(const AccelStructDesc& des
};

const VkAccelerationStructureBuildRangeInfoKHR accelerationStructureBuildRangeInfo = {
.primitiveCount = numTriangles,
.primitiveOffset = 0,
.firstVertex = 0,
.transformOffset = 0,
.primitiveCount = desc.buildRange.primitiveCount,
.primitiveOffset = desc.buildRange.primitiveOffset,
.firstVertex = desc.buildRange.firstVertex,
.transformOffset = desc.buildRange.transformOffset,
};
const VkAccelerationStructureBuildRangeInfoKHR* accelerationBuildStructureRangeInfos[] = {&accelerationStructureBuildRangeInfo};

Expand Down

0 comments on commit 0af37bb

Please sign in to comment.