-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup_cmd_buf.rs
More file actions
39 lines (34 loc) · 1.13 KB
/
setup_cmd_buf.rs
File metadata and controls
39 lines (34 loc) · 1.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use ash;
use ash::vk;
pub trait WithSetupCmdBuffer {
fn with_setup_cb(&self, callback: impl FnOnce(&ash::Device, vk::CommandBuffer));
}
pub unsafe fn execute_setup_cmd_buf(
device: &ash::Device,
queue: vk::Queue,
cmd_buf: vk::CommandBuffer,
callback: impl FnOnce(&ash::Device, vk::CommandBuffer),
) {
// begin setup
let cmd_buf_begin_info = vk::CommandBufferBeginInfo::builder()
.flags(vk::CommandBufferUsageFlags::ONE_TIME_SUBMIT)
.build();
device
.begin_command_buffer(cmd_buf, &cmd_buf_begin_info)
// also resets command buffer
.expect("Failed - with_setup_cb:begin_command_buffer");
// execute
callback(device, cmd_buf);
// end+submit
device
.end_command_buffer(cmd_buf)
.expect("Failed - with_setup_cb:end_command_buffer()");
let submit_info = vk::SubmitInfo::builder().command_buffers(std::slice::from_ref(&cmd_buf));
device
.queue_submit(queue, &[submit_info.build()], vk::Fence::null())
.expect("Failed with_setup_cb:queue_submit()");
// log::trace!("with_setup_cb: device_wait_idle");
device
.device_wait_idle()
.expect("Failed with_setup_cb:device_wait_idle()");
}