From f82fad411fb7ebf8bc3bb36cc28b302cc13c60ec Mon Sep 17 00:00:00 2001 From: hodasemi Date: Sat, 21 Jan 2023 11:45:08 +0100 Subject: [PATCH] Make queue optional --- vulkan-rs/src/render_target/sub_pass.rs | 28 +++++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/vulkan-rs/src/render_target/sub_pass.rs b/vulkan-rs/src/render_target/sub_pass.rs index d58af88..e1cae49 100644 --- a/vulkan-rs/src/render_target/sub_pass.rs +++ b/vulkan-rs/src/render_target/sub_pass.rs @@ -168,6 +168,8 @@ pub struct SubPassBuilder<'a> { height: u32, sample_count: VkSampleCountFlags, + queue: Option>>, + target_infos: Vec, input_info: Option, @@ -227,8 +229,14 @@ impl<'a> SubPassBuilder<'a> { self } - pub fn build(self, device: &Arc, queue: &Arc>) -> Result { - let attachments = self.create_images(device, queue)?; + pub fn use_queue(mut self, queue: Arc>) -> Self { + self.queue = Some(queue); + + self + } + + pub fn build(self, device: &Arc) -> Result { + let attachments = self.create_images(device)?; Ok(SubPass { extent: VkExtent2D { @@ -244,11 +252,7 @@ impl<'a> SubPassBuilder<'a> { } #[inline] - fn create_images( - &self, - device: &Arc, - queue: &Arc>, - ) -> Result> { + fn create_images(&self, device: &Arc) -> Result> { // check for correct sample count let checked_sample_count = device.max_supported_sample_count(self.sample_count); @@ -262,7 +266,9 @@ impl<'a> SubPassBuilder<'a> { for target_info in self.target_infos.iter() { attachment_infos.push(target_info.to_attachment_info( device, - queue, + self.queue.as_ref().ok_or(anyhow::anyhow!( + "Using custom targets requires a queue to be attached!" + ))?, self.width, self.height, self.sample_count, @@ -301,7 +307,9 @@ impl<'a> SubPassBuilder<'a> { ResolveTarget::CustomTarget(custom_target) => { let mut attachment_info = custom_target.to_attachment_info( device, - queue, + self.queue.as_ref().ok_or(anyhow::anyhow!( + "Using custom targets requires a queue to be attached!" + ))?, self.width, self.height, VK_SAMPLE_COUNT_1_BIT, @@ -409,6 +417,8 @@ impl SubPass { height, sample_count: VK_SAMPLE_COUNT_1_BIT, + queue: None, + input_info: None, target_infos: Vec::new(),