@@ -188,7 +188,6 @@ class VulkanExample : public VulkanRaytracingSample
188
188
geometryNode.indexBufferDeviceAddress = indexBufferDeviceAddress.deviceAddress ;
189
189
geometryNode.textureIndexBaseColor = primitive->material .baseColorTexture ->index ;
190
190
geometryNode.textureIndexOcclusion = primitive->material .occlusionTexture ? primitive->material .occlusionTexture ->index : -1 ;
191
- // @todo: map material id to global texture array
192
191
geometryNodes.push_back (geometryNode);
193
192
}
194
193
}
@@ -198,14 +197,25 @@ class VulkanExample : public VulkanRaytracingSample
198
197
pBuildRangeInfos.push_back (&rangeInfo);
199
198
}
200
199
201
- // @todo: stage to device
200
+ vks::Buffer stagingBuffer;
201
+
202
202
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 ,
204
204
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,
205
- &geometryNodesBuffer ,
205
+ &stagingBuffer ,
206
206
static_cast <uint32_t >(geometryNodes.size ()) * sizeof (GeometryNode),
207
207
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
+
209
219
// Get size info
210
220
VkAccelerationStructureBuildGeometryInfoKHR accelerationStructureBuildGeometryInfo{};
211
221
accelerationStructureBuildGeometryInfo.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
@@ -408,9 +418,7 @@ class VulkanExample : public VulkanRaytracingSample
408
418
*/
409
419
void createRayTracingPipeline ()
410
420
{
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 ());
414
422
415
423
std::vector<VkDescriptorSetLayoutBinding> setLayoutBindings = {
416
424
// Binding 0: Top level acceleration structure
0 commit comments