Update part of BLAS.
156 {
158
159
160 VkAccelerationStructureBuildGeometryInfoKHR buildInfos{};
161 buildInfos.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
162 buildInfos.flags = flags;
163 buildInfos.geometryCount = static_cast<uint32_t>(blas.asGeometry.size());
164 buildInfos.pGeometries = blas.asGeometry.data();
165 buildInfos.mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_UPDATE_KHR;
166 buildInfos.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR;
167
168
169
170
171 std::vector<uint32_t> maxPrimCount(blas.asBuildOffsetInfo.size());
172
173 for (auto tt = 0; tt < blas.asBuildOffsetInfo.size(); tt++)
174 {
175 maxPrimCount[tt] = blas.asBuildOffsetInfo[tt].primitiveCount;
176 }
177
178 VkAccelerationStructureBuildSizesInfoKHR sizeInfo{};
179 sizeInfo.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
180
183 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
184 &buildInfos,
185 maxPrimCount.data(),
186 &sizeInfo
187 );
188
189
190 VulkanBuffer scratchBuffer(
192 "ScratchBuffer",
193 sizeInfo.buildScratchSize,
194 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
195 VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT,
196 0
197 );
198
199 VkBufferDeviceAddressInfo bufferInfo{};
200 bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO;
201 bufferInfo.buffer = scratchBuffer.Get();
202 buildInfos.scratchData.deviceAddress = vkGetBufferDeviceAddress(
m_VulkanState.
m_Device, &bufferInfo);
203
204 std::vector<const VkAccelerationStructureBuildRangeInfoKHR*> pBuildOffset(blas.asBuildOffsetInfo.size());
205 for (size_t i = 0; i < blas.asBuildOffsetInfo.size(); i++)
206 {
207 pBuildOffset[i] = &blas.asBuildOffsetInfo[i];
208 }
209
210
212
213
214 m_VulkanState.
m_VkFunc.vkCmdBuildAccelerationStructuresKHR(commandBuffer, 1, &buildInfos, pBuildOffset.data());
215 });
216 }
#define SPICES_PROFILE_ZONE
static void CustomGraphicCmd(VulkanState &vulkanState, T func)
Create a new command buffer and record custom cmd, submit to graphic queue, execute it immediately.
VulkanState & m_VulkanState
The global VulkanState Referenced from VulkanRenderBackend.