Skip to content

Commit d53f6f3

Browse files
committed
Stage geometry nodes to device
1 parent c5c7398 commit d53f6f3

File tree

1 file changed

+16
-8
lines changed

1 file changed

+16
-8
lines changed

examples/raytracinggltf/raytracinggltf.cpp

+16-8
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,6 @@ class VulkanExample : public VulkanRaytracingSample
188188
geometryNode.indexBufferDeviceAddress = indexBufferDeviceAddress.deviceAddress;
189189
geometryNode.textureIndexBaseColor = primitive->material.baseColorTexture->index;
190190
geometryNode.textureIndexOcclusion = primitive->material.occlusionTexture ? primitive->material.occlusionTexture->index : -1;
191-
// @todo: map material id to global texture array
192191
geometryNodes.push_back(geometryNode);
193192
}
194193
}
@@ -198,14 +197,25 @@ class VulkanExample : public VulkanRaytracingSample
198197
pBuildRangeInfos.push_back(&rangeInfo);
199198
}
200199

201-
// @todo: stage to device
200+
vks::Buffer stagingBuffer;
201+
202202
VK_CHECK_RESULT(vulkanDevice->createBuffer(
203-
VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
203+
VK_BUFFER_USAGE_TRANSFER_SRC_BIT,
204204
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
205-
&geometryNodesBuffer,
205+
&stagingBuffer,
206206
static_cast<uint32_t>(geometryNodes.size()) * sizeof(GeometryNode),
207207
geometryNodes.data()));
208-
208+
209+
VK_CHECK_RESULT(vulkanDevice->createBuffer(
210+
VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,
211+
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,
212+
&geometryNodesBuffer,
213+
static_cast<uint32_t>(geometryNodes.size()) * sizeof(GeometryNode)));
214+
215+
vulkanDevice->copyBuffer(&stagingBuffer, &geometryNodesBuffer, queue);
216+
217+
stagingBuffer.destroy();
218+
209219
// Get size info
210220
VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfo{};
211221
accelerationStructureBuildGeometryInfo.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
@@ -408,9 +418,7 @@ class VulkanExample : public VulkanRaytracingSample
408418
*/
409419
void createRayTracingPipeline()
410420
{
411-
// @todo:
412-
uint32_t imageCount{ 0 };
413-
imageCount = static_cast<uint32_t>(model.textures.size());
421+
const uint32_t imageCount = static_cast<uint32_t>(model.textures.size());
414422

415423
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
416424
// Binding 0: Top level acceleration structure

0 commit comments

Comments
 (0)