Skip to content

Commit 35f327c

Browse files
authored
Updated Vulkan.rs with even more modification
1 parent f46dd10 commit 35f327c

File tree

1 file changed

+51
-65
lines changed

1 file changed

+51
-65
lines changed

src/frame/vulkan.rs

+51-65
Original file line numberDiff line numberDiff line change
@@ -293,49 +293,42 @@ impl Vulkan {
293293
frame: &Object,
294294
) -> Result<(vk::Image, vk::DeviceMemory), Box<dyn Error>> {
295295
// External memory info
296-
let frame_image_memory_info = vk::ExternalMemoryImageCreateInfo {
297-
handle_types: vk::ExternalMemoryHandleTypeFlags::DMA_BUF_EXT,
298-
..Default::default()
299-
};
296+
let mut frame_image_memory_info = vk::ExternalMemoryImageCreateInfo::default()
297+
.handle_types(vk::ExternalMemoryHandleTypeFlags::DMA_BUF_EXT);
300298

301299
// Image create info
302-
let frame_image_create_info = vk::ImageCreateInfo {
303-
p_next: &frame_image_memory_info as *const _ as *const std::ffi::c_void,
304-
image_type: vk::ImageType::TYPE_2D,
305-
format: vk::Format::R8G8B8A8_UNORM,
306-
extent: vk::Extent3D {
300+
let frame_image_create_info = vk::ImageCreateInfo::default()
301+
.push_next(&mut frame_image_memory_info)
302+
.image_type(vk::ImageType::TYPE_2D)
303+
.format(vk::Format::R8G8B8A8_UNORM)
304+
.extent(vk::Extent3D {
307305
width: frame.width,
308306
height: frame.height,
309307
depth: 1,
310-
},
311-
mip_levels: 1,
312-
array_layers: 1,
313-
tiling: vk::ImageTiling::OPTIMAL,
314-
initial_layout: vk::ImageLayout::UNDEFINED,
315-
samples: vk::SampleCountFlags::TYPE_1,
316-
usage: vk::ImageUsageFlags::TRANSFER_SRC,
317-
sharing_mode: vk::SharingMode::EXCLUSIVE,
318-
..Default::default()
319-
};
308+
})
309+
.mip_levels(1)
310+
.array_layers(1)
311+
.tiling(vk::ImageTiling::OPTIMAL)
312+
.initial_layout(vk::ImageLayout::UNDEFINED)
313+
.samples(vk::SampleCountFlags::TYPE_1)
314+
.usage(vk::ImageUsageFlags::TRANSFER_SRC)
315+
.sharing_mode(vk::SharingMode::EXCLUSIVE);
320316

321317
let frame_image = unsafe {
322318
self.device
323319
.create_image(&frame_image_create_info, None)
324-
.map_err(anyhow::Error::msg)?
320+
.expect("Failed to create image")
325321
};
326322

327323
// Memory requirements info
328-
let frame_image_memory_req_info = vk::ImageMemoryRequirementsInfo2 {
329-
image: frame_image,
330-
..Default::default()
331-
};
324+
let frame_image_memory_req_info =
325+
vk::ImageMemoryRequirementsInfo2::default().image(frame_image);
332326

333327
// Memory requirements
334328
let mut frame_image_mem_dedicated_req = vk::MemoryDedicatedRequirements::default();
335-
let mut frame_image_mem_req = vk::MemoryRequirements2 {
336-
p_next: &mut frame_image_mem_dedicated_req as *mut _ as *mut std::ffi::c_void,
337-
..Default::default()
338-
};
329+
330+
let mut frame_image_mem_req =
331+
vk::MemoryRequirements2::default().push_next(&mut frame_image_mem_dedicated_req);
339332

340333
unsafe {
341334
self.device.get_image_memory_requirements2(
@@ -350,50 +343,45 @@ impl Vulkan {
350343
.memory_type_bits
351344
.trailing_zeros();
352345

353-
// Import memory info
354-
let frame_import_memory_info = vk::ImportMemoryFdInfoKHR {
355-
handle_type: vk::ExternalMemoryHandleTypeFlags::DMA_BUF_EXT,
356-
fd: frame.fds[0],
357-
..Default::default()
358-
};
346+
// Import memory app_info
347+
// Construct the memory alloctation info according to the requirements
348+
// If the image needs dedicated memory, add MemoryDedicatedAllocateInfo to the info chain
349+
let mut frame_import_memory_info = vk::ImportMemoryFdInfoKHR::default()
350+
.handle_type(vk::ExternalMemoryHandleTypeFlags::DMA_BUF_EXT)
351+
.fd(frame.fds[0]);
359352

360-
// Dedicated allocation info
361-
let frame_image_memory_dedicated_info = vk::MemoryDedicatedAllocateInfo {
362-
image: frame_image,
363-
..Default::default()
364-
};
353+
// dedicated allocation info
354+
let mut frame_image_memory_dedicated_info =
355+
vk::MemoryDedicatedAllocateInfo::default().image(frame_image);
365356

366357
// Memory allocate info
367-
let mut frame_image_allocate_info = vk::MemoryAllocateInfo {
368-
p_next: &frame_import_memory_info as *const _ as *const std::ffi::c_void,
369-
allocation_size: frame_image_mem_req.memory_requirements.size,
370-
memory_type_index,
371-
..Default::default()
372-
};
358+
let mut frame_image_allocate_info = vk::MemoryAllocateInfo::default()
359+
.push_next(&mut frame_import_memory_info)
360+
.allocation_size(frame_image_mem_req.memory_requirements.size)
361+
.memory_type_index(memory_type_index);
373362

374363
if frame_image_mem_dedicated_req.prefers_dedicated_allocation == vk::TRUE {
375-
frame_image_allocate_info.p_next =
376-
&frame_image_memory_dedicated_info as *const _ as *const std::ffi::c_void;
364+
frame_image_allocate_info =
365+
frame_image_allocate_info.push_next(&mut frame_image_memory_dedicated_info);
377366
}
378367

379368
// Allocate memory and bind it to the image
380369
let frame_image_memory = unsafe {
381370
self.device
382371
.allocate_memory(&frame_image_allocate_info, None)
383-
.map_err(anyhow::Error::msg)?
372+
.expect("Failed to allocate memory")
384373
};
385374

386375
unsafe {
387376
self.device
388377
.bind_image_memory(frame_image, frame_image_memory, 0)
389-
.map_err(anyhow::Error::msg)?
378+
.expect("Failed to bind image memory");
390379
};
391380

392381
Ok((frame_image, frame_image_memory))
393382
}
394383

395384
#[allow(clippy::too_many_arguments)]
396-
397385
fn add_barrier(
398386
&self,
399387
image: &vk::Image,
@@ -405,21 +393,19 @@ impl Vulkan {
405393
dst_access_mask: vk::AccessFlags,
406394
src_stage_mask: vk::PipelineStageFlags,
407395
) {
408-
let image_barrier = vk::ImageMemoryBarrier {
409-
old_layout,
410-
new_layout,
411-
image: *image,
412-
subresource_range: vk::ImageSubresourceRange {
413-
aspect_mask: vk::ImageAspectFlags::COLOR,
414-
base_mip_level,
415-
level_count: mip_levels,
416-
layer_count: 1,
417-
..Default::default()
418-
},
419-
src_access_mask,
420-
dst_access_mask,
421-
..Default::default()
422-
};
396+
let image_barrier = vk::ImageMemoryBarrier::default()
397+
.old_layout(old_layout)
398+
.new_layout(new_layout)
399+
.image(*image)
400+
.subresource_range(
401+
vk::ImageSubresourceRange::default()
402+
.aspect_mask(vk::ImageAspectFlags::COLOR)
403+
.base_mip_level(base_mip_level)
404+
.level_count(mip_levels)
405+
.layer_count(1),
406+
)
407+
.src_access_mask(src_access_mask)
408+
.dst_access_mask(dst_access_mask);
423409

424410
unsafe {
425411
self.device.cmd_pipeline_barrier(

0 commit comments

Comments
 (0)