@@ -38,24 +38,28 @@ Opt<TLAS::Staged> TLAS::make(Arc<Device_Memory, Alloc> memory, Buffer instances,
3838
3939 // Compute necessary sizes for the buffers
4040
41- VkAccelerationStructureGeometryKHR geom = {};
42- geom.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
43- geom.geometryType = VK_GEOMETRY_TYPE_INSTANCES_KHR;
44- geom.flags = VK_GEOMETRY_OPAQUE_BIT_KHR;
45- geom.geometry .instances .sType =
46- VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR;
47- geom.geometry .instances .arrayOfPointers = VK_FALSE;
48-
49- VkAccelerationStructureBuildGeometryInfoKHR build_info = {};
50- build_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
51- build_info.flags = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR;
52- build_info.geometryCount = 1 ;
53- build_info.pGeometries = &geom;
54- build_info.mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR;
55- build_info.type = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR;
56-
57- VkAccelerationStructureBuildSizesInfoKHR build_sizes = {};
58- build_sizes.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
41+ VkAccelerationStructureGeometryKHR geom = {
42+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR,
43+ .geometryType = VK_GEOMETRY_TYPE_INSTANCES_KHR,
44+ .geometry =
45+ {.instances = {.sType =
46+ VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR,
47+ .arrayOfPointers = VK_FALSE}},
48+ .flags = VK_GEOMETRY_OPAQUE_BIT_KHR,
49+ };
50+
51+ VkAccelerationStructureBuildGeometryInfoKHR build_info = {
52+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR,
53+ .type = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
54+ .flags = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR,
55+ .mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR,
56+ .geometryCount = 1 ,
57+ .pGeometries = &geom,
58+ };
59+
60+ VkAccelerationStructureBuildSizesInfoKHR build_sizes = {
61+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR,
62+ };
5963
6064 vkGetAccelerationStructureBuildSizesKHR (*memory->device ,
6165 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
@@ -88,42 +92,46 @@ TLAS TLAS::build(Commands& cmds, Staged buffers) {
8892
8993 VkAccelerationStructureKHR acceleration_structure = null;
9094
91- VkAccelerationStructureCreateInfoKHR create_info = {};
92- create_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR;
93- create_info.type = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR;
94- create_info.size = buffers.result_size ;
95- create_info.buffer = buffers.result ;
95+ VkAccelerationStructureCreateInfoKHR create_info = {
96+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR,
97+ .buffer = buffers.result ,
98+ .size = buffers.result_size ,
99+ .type = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
100+ };
96101
97102 RVK_CHECK (vkCreateAccelerationStructureKHR (*buffers.memory ->device , &create_info, null,
98103 &acceleration_structure));
99104
100105 // Build
101106
102- VkAccelerationStructureGeometryKHR geom = {};
103- geom.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
104- geom.geometryType = VK_GEOMETRY_TYPE_INSTANCES_KHR;
105- geom.flags = VK_GEOMETRY_OPAQUE_BIT_KHR;
106-
107- geom.geometry .instances .sType =
108- VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR;
109- geom.geometry .instances .arrayOfPointers = VK_FALSE;
110- geom.geometry .instances .data .deviceAddress = buffers.instances .gpu_address ();
111-
112- VkAccelerationStructureBuildGeometryInfoKHR build_info = {};
113- build_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
114- build_info.flags = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR;
115- build_info.geometryCount = 1 ;
116- build_info.pGeometries = &geom;
117- build_info.mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR;
118- build_info.type = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR;
119- build_info.scratchData .deviceAddress = buffers.scratch .gpu_address ();
120- build_info.dstAccelerationStructure = acceleration_structure;
107+ VkAccelerationStructureGeometryKHR geom = {
108+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR,
109+ .geometryType = VK_GEOMETRY_TYPE_INSTANCES_KHR,
110+ .geometry =
111+ {.instances = {.sType =
112+ VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_INSTANCES_DATA_KHR,
113+ .arrayOfPointers = VK_FALSE,
114+ .data = {.deviceAddress = buffers.instances .gpu_address ()}}},
115+ .flags = VK_GEOMETRY_OPAQUE_BIT_KHR,
116+ };
117+
118+ VkAccelerationStructureBuildGeometryInfoKHR build_info = {
119+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR,
120+ .type = VK_ACCELERATION_STRUCTURE_TYPE_TOP_LEVEL_KHR,
121+ .flags = VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR,
122+ .mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR,
123+ .dstAccelerationStructure = acceleration_structure,
124+ .geometryCount = 1 ,
125+ .pGeometries = &geom,
126+ .scratchData = {.deviceAddress = buffers.scratch .gpu_address ()},
127+ };
121128
122129 cmds.attach (move (buffers.scratch ));
123130 cmds.attach (move (buffers.instances ));
124131
125- VkAccelerationStructureBuildRangeInfoKHR offset = {};
126- offset.primitiveCount = buffers.n_instances ;
132+ VkAccelerationStructureBuildRangeInfoKHR offset = {
133+ .primitiveCount = buffers.n_instances ,
134+ };
127135
128136 Array<VkAccelerationStructureBuildRangeInfoKHR*, 1 > offsets{&offset};
129137
@@ -159,9 +167,10 @@ BLAS& BLAS::operator=(BLAS&& src) {
159167
160168u64 BLAS::gpu_address () {
161169 if (!acceleration_structure) return 0 ;
162- VkAccelerationStructureDeviceAddressInfoKHR info = {};
163- info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR;
164- info.accelerationStructure = acceleration_structure;
170+ VkAccelerationStructureDeviceAddressInfoKHR info = {
171+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_DEVICE_ADDRESS_INFO_KHR,
172+ .accelerationStructure = acceleration_structure,
173+ };
165174 return vkGetAccelerationStructureDeviceAddressKHR (*memory->device , &info);
166175}
167176
@@ -180,37 +189,40 @@ Opt<BLAS::Staged> BLAS::make(Arc<Device_Memory, Alloc> memory, Buffer data,
180189
181190 for (auto & offset : offsets) {
182191
183- VkAccelerationStructureGeometryKHR geom = {};
184- geom.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
185- geom.geometryType = VK_GEOMETRY_TYPE_TRIANGLES_KHR;
186- geom.flags = VK_GEOMETRY_OPAQUE_BIT_KHR;
187- geom.geometry .triangles .sType =
188- VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR;
189- geom.geometry .triangles .vertexFormat = VK_FORMAT_R32G32B32_SFLOAT;
190- geom.geometry .triangles .vertexStride = 3 * sizeof (f32 );
191- geom.geometry .triangles .indexType = VK_INDEX_TYPE_UINT32;
192-
193- if (offset.transform .ok ()) {
194- geom.geometry .triangles .transformData .deviceAddress = 1 ;
195- } else {
196- geom.geometry .triangles .transformData .deviceAddress = 0 ;
197- }
198- geom.geometry .triangles .maxVertex = static_cast <u32 >(offset.n_vertices - 1 );
192+ VkAccelerationStructureGeometryKHR geom = {
193+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR,
194+ .geometryType = VK_GEOMETRY_TYPE_TRIANGLES_KHR,
195+ .geometry =
196+ {.triangles =
197+ {
198+ .sType =
199+ VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR,
200+ .vertexFormat = VK_FORMAT_R32G32B32_SFLOAT,
201+ .vertexStride = 3 * sizeof (f32 ),
202+ .maxVertex = static_cast <u32 >(offset.n_vertices - 1 ),
203+ .indexType = VK_INDEX_TYPE_UINT32,
204+ .transformData = {.deviceAddress = offset.transform .ok () ? 1u : 0u },
205+ }},
206+ .flags = VK_GEOMETRY_OPAQUE_BIT_KHR,
207+ };
208+
199209 geometries.push (geom);
200210 triangle_counts.push (static_cast <u32 >(offset.n_indices / 3 ));
201211 }
202212
203- VkAccelerationStructureBuildGeometryInfoKHR build_info = {};
204- build_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
205- build_info.flags = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR |
206- VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR;
207- build_info.geometryCount = static_cast <u32 >(geometries.length ());
208- build_info.pGeometries = geometries.data ();
209- build_info.mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR;
210- build_info.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR;
213+ VkAccelerationStructureBuildGeometryInfoKHR build_info = {
214+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR,
215+ .type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR,
216+ .flags = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR |
217+ VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR,
218+ .mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR,
219+ .geometryCount = static_cast <u32 >(geometries.length ()),
220+ .pGeometries = geometries.data (),
221+ };
211222
212- VkAccelerationStructureBuildSizesInfoKHR build_sizes = {};
213- build_sizes.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR;
223+ VkAccelerationStructureBuildSizesInfoKHR build_sizes = {
224+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_SIZES_INFO_KHR,
225+ };
214226
215227 vkGetAccelerationStructureBuildSizesKHR (*memory->device ,
216228 VK_ACCELERATION_STRUCTURE_BUILD_TYPE_DEVICE_KHR,
@@ -236,7 +248,7 @@ Opt<BLAS::Staged> BLAS::make(Arc<Device_Memory, Alloc> memory, Buffer data,
236248 return Opt{Staged{move (*structure_buf), move (*scratch), move (data),
237249 build_sizes.accelerationStructureSize , move (offsets), move (memory)}};
238250 }
239- }
251+ } // namespace rvk::impl
240252
241253BLAS BLAS::build (Commands& cmds, Staged buffers) {
242254
@@ -248,11 +260,12 @@ BLAS BLAS::build(Commands& cmds, Staged buffers) {
248260
249261 VkAccelerationStructureKHR acceleration_structure = null;
250262
251- VkAccelerationStructureCreateInfoKHR create_info = {};
252- create_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR;
253- create_info.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR;
254- create_info.size = buffers.result_size ;
255- create_info.buffer = buffers.result ;
263+ VkAccelerationStructureCreateInfoKHR create_info = {
264+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_CREATE_INFO_KHR,
265+ .buffer = buffers.result ,
266+ .size = buffers.result_size ,
267+ .type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR,
268+ };
256269
257270 vkCreateAccelerationStructureKHR (*buffers.memory ->device , &create_info, null,
258271 &acceleration_structure);
@@ -267,42 +280,44 @@ BLAS BLAS::build(Commands& cmds, Staged buffers) {
267280 u64 base_data = buffers.geometry .gpu_address ();
268281
269282 for (auto & offset : buffers.offsets ) {
270- VkAccelerationStructureGeometryKHR geom = {};
271- geom.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR;
272- geom.geometryType = VK_GEOMETRY_TYPE_TRIANGLES_KHR;
273- geom.flags = VK_GEOMETRY_OPAQUE_BIT_KHR;
274- geom.geometry .triangles .sType =
275- VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR;
276- geom.geometry .triangles .vertexFormat = VK_FORMAT_R32G32B32_SFLOAT;
277- geom.geometry .triangles .vertexStride = 3 * sizeof (f32 );
278- geom.geometry .triangles .indexType = VK_INDEX_TYPE_UINT32;
279-
280- VkAccelerationStructureBuildRangeInfoKHR range = {};
281-
282- geom.geometry .triangles .vertexData .deviceAddress = base_data + offset.vertex ;
283- geom.geometry .triangles .indexData .deviceAddress = base_data + offset.index ;
284- if (offset.transform .ok ()) {
285- geom.geometry .triangles .transformData .deviceAddress = base_data + *offset.transform ;
286- } else {
287- geom.geometry .triangles .transformData .deviceAddress = 0 ;
288- }
289- geom.geometry .triangles .maxVertex = static_cast <u32 >(offset.n_vertices - 1 );
283+ VkAccelerationStructureGeometryKHR geom = {
284+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_KHR,
285+ .geometryType = VK_GEOMETRY_TYPE_TRIANGLES_KHR,
286+ .geometry =
287+ {.triangles =
288+ {.sType =
289+ VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_GEOMETRY_TRIANGLES_DATA_KHR,
290+ .vertexFormat = VK_FORMAT_R32G32B32_SFLOAT,
291+ .vertexData = {.deviceAddress = base_data + offset.vertex },
292+ .vertexStride = 3 * sizeof (f32 ),
293+ .maxVertex = static_cast <u32 >(offset.n_vertices - 1 ),
294+ .indexType = VK_INDEX_TYPE_UINT32,
295+ .indexData = {.deviceAddress = base_data + offset.index },
296+ .transformData = {.deviceAddress = offset.transform .ok ()
297+ ? base_data + *offset.transform
298+ : 0u }}},
299+ .flags = VK_GEOMETRY_OPAQUE_BIT_KHR,
300+ };
301+
290302 geometries.push (geom);
291303
292- range.primitiveCount = static_cast <u32 >(offset.n_indices / 3 );
304+ VkAccelerationStructureBuildRangeInfoKHR range = {
305+ .primitiveCount = static_cast <u32 >(offset.n_indices / 3 ),
306+ };
293307 ranges.push (range);
294308 }
295309
296- VkAccelerationStructureBuildGeometryInfoKHR build_info = {};
297- build_info.sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR;
298- build_info.flags = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR |
299- VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR;
300- build_info.geometryCount = static_cast <u32 >(geometries.length ());
301- build_info.pGeometries = geometries.data ();
302- build_info.mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR;
303- build_info.type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR;
304- build_info.scratchData .deviceAddress = buffers.scratch .gpu_address ();
305- build_info.dstAccelerationStructure = acceleration_structure;
310+ VkAccelerationStructureBuildGeometryInfoKHR build_info = {
311+ .sType = VK_STRUCTURE_TYPE_ACCELERATION_STRUCTURE_BUILD_GEOMETRY_INFO_KHR,
312+ .type = VK_ACCELERATION_STRUCTURE_TYPE_BOTTOM_LEVEL_KHR,
313+ .flags = VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_DATA_ACCESS_KHR |
314+ VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR,
315+ .mode = VK_BUILD_ACCELERATION_STRUCTURE_MODE_BUILD_KHR,
316+ .dstAccelerationStructure = acceleration_structure,
317+ .geometryCount = static_cast <u32 >(geometries.length ()),
318+ .pGeometries = geometries.data (),
319+ .scratchData = {.deviceAddress = buffers.scratch .gpu_address ()},
320+ };
306321
307322 cmds.attach (move (buffers.scratch ));
308323 cmds.attach (move (buffers.geometry ));
0 commit comments