Skip to content

Commit 52ac3ee

Browse files
committed
more designated initializers
1 parent da6dcf8 commit 52ac3ee

File tree

10 files changed

+827
-708
lines changed

10 files changed

+827
-708
lines changed

rvk/acceleration.cpp

Lines changed: 125 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -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

160168
u64 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

241253
BLAS 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

Comments
 (0)