1#[cfg(feature = "persistence")]
2use egui_winit::winit::event_loop::EventLoopWindowTarget;
3
4pub(crate) fn insert_image_memory_barrier(
5 device: &ash::Device,
6 cmd: &ash::vk::CommandBuffer,
7 image: &ash::vk::Image,
8 src_q_family_index: u32,
9 dst_q_family_index: u32,
10 src_access_mask: ash::vk::AccessFlags,
11 dst_access_mask: ash::vk::AccessFlags,
12 old_image_layout: ash::vk::ImageLayout,
13 new_image_layout: ash::vk::ImageLayout,
14 src_stage_mask: ash::vk::PipelineStageFlags,
15 dst_stage_mask: ash::vk::PipelineStageFlags,
16 subresource_range: ash::vk::ImageSubresourceRange,
17) {
18 let image_memory_barrier = ash::vk::ImageMemoryBarrier::builder()
19 .src_queue_family_index(src_q_family_index)
20 .dst_queue_family_index(dst_q_family_index)
21 .src_access_mask(src_access_mask)
22 .dst_access_mask(dst_access_mask)
23 .old_layout(old_image_layout)
24 .new_layout(new_image_layout)
25 .image(*image)
26 .subresource_range(subresource_range)
27 .build();
28 unsafe {
29 device.cmd_pipeline_barrier(
30 *cmd,
31 src_stage_mask,
32 dst_stage_mask,
33 ash::vk::DependencyFlags::BY_REGION,
34 &[],
35 &[],
36 &[image_memory_barrier],
37 );
38 }
39}
40
41#[cfg(feature = "persistence")]
42pub(crate) fn largest_monitor_point_size<E>(
43 egui_zoom_factor: f32,
44 event_loop: &EventLoopWindowTarget<E>,
45) -> egui::Vec2 {
46 let mut max_size = egui::Vec2::ZERO;
47
48 let available_monitors = { event_loop.available_monitors() };
49
50 for monitor in available_monitors {
51 let size = monitor
52 .size()
53 .to_logical::<f32>(egui_zoom_factor as f64 * monitor.scale_factor());
54 let size = egui::vec2(size.width, size.height);
55 max_size = max_size.max(size);
56 }
57
58 if max_size == egui::Vec2::ZERO {
59 egui::Vec2::splat(16000.0)
60 } else {
61 max_size
62 }
63}