From 9802bec8b00b910bc957a5f726ec7cb49b916a78 Mon Sep 17 00:00:00 2001 From: Janis Date: Tue, 14 Jan 2025 23:10:10 +0100 Subject: [PATCH] debug: timing things --- crates/renderer/src/lib.rs | 99 +++++++++++++++-------------- crates/renderer/src/render_graph.rs | 35 ++++++---- 2 files changed, 73 insertions(+), 61 deletions(-) diff --git a/crates/renderer/src/lib.rs b/crates/renderer/src/lib.rs index 3a395e4..c0f382b 100644 --- a/crates/renderer/src/lib.rs +++ b/crates/renderer/src/lib.rs @@ -1851,56 +1851,61 @@ impl EguiState { const TEXTURE_BINDING: u32 = 0; const UNIFORM_BINDING: u32 = 1; fn new(device: Device) -> Result { - let descriptor_pool = pipeline::DescriptorPool::new( - device.clone(), - pipeline::DescriptorPoolDesc { - flags: vk::DescriptorPoolCreateFlags::UPDATE_AFTER_BIND, - name: Some("egui-descriptorpool".into()), - sizes: &[ - vk::DescriptorPoolSize { - ty: vk::DescriptorType::COMBINED_IMAGE_SAMPLER, - descriptor_count: 10, + let (descriptor_pool, descriptor_layout, sets) = + util::timed("Create Descriptor Set", || { + let descriptor_pool = pipeline::DescriptorPool::new( + device.clone(), + pipeline::DescriptorPoolDesc { + flags: vk::DescriptorPoolCreateFlags::UPDATE_AFTER_BIND, + name: Some("egui-descriptorpool".into()), + sizes: &[ + vk::DescriptorPoolSize { + ty: vk::DescriptorType::COMBINED_IMAGE_SAMPLER, + descriptor_count: 10, + }, + vk::DescriptorPoolSize { + ty: vk::DescriptorType::STORAGE_BUFFER, + descriptor_count: 1, + }, + ], + max_sets: 1, + ..Default::default() }, - vk::DescriptorPoolSize { - ty: vk::DescriptorType::STORAGE_BUFFER, - descriptor_count: 1, + )?; + let descriptor_layout = pipeline::DescriptorSetLayout::new( + device.clone(), + pipeline::DescriptorSetLayoutDesc { + flags: vk::DescriptorSetLayoutCreateFlags::UPDATE_AFTER_BIND_POOL, + name: Some("egui-descriptor-layout".into()), + bindings: &[ + pipeline::DescriptorSetLayoutBindingDesc { + binding: Self::TEXTURE_BINDING, + count: 10, + kind: vk::DescriptorType::COMBINED_IMAGE_SAMPLER, + stage: vk::ShaderStageFlags::FRAGMENT, + flags: Some( + vk::DescriptorBindingFlags::PARTIALLY_BOUND + | vk::DescriptorBindingFlags::UPDATE_AFTER_BIND, + ), + }, + pipeline::DescriptorSetLayoutBindingDesc { + binding: Self::UNIFORM_BINDING, + count: 1, + kind: vk::DescriptorType::STORAGE_BUFFER, + stage: vk::ShaderStageFlags::FRAGMENT, + flags: None, + }, + ], }, - ], - max_sets: 1, - ..Default::default() - }, - )?; - let descriptor_layout = pipeline::DescriptorSetLayout::new( - device.clone(), - pipeline::DescriptorSetLayoutDesc { - flags: vk::DescriptorSetLayoutCreateFlags::UPDATE_AFTER_BIND_POOL, - name: Some("egui-descriptor-layout".into()), - bindings: &[ - pipeline::DescriptorSetLayoutBindingDesc { - binding: Self::TEXTURE_BINDING, - count: 10, - kind: vk::DescriptorType::COMBINED_IMAGE_SAMPLER, - stage: vk::ShaderStageFlags::FRAGMENT, - flags: Some( - vk::DescriptorBindingFlags::PARTIALLY_BOUND - | vk::DescriptorBindingFlags::UPDATE_AFTER_BIND, - ), - }, - pipeline::DescriptorSetLayoutBindingDesc { - binding: Self::UNIFORM_BINDING, - count: 1, - kind: vk::DescriptorType::STORAGE_BUFFER, - stage: vk::ShaderStageFlags::FRAGMENT, - flags: None, - }, - ], - }, - )?; + )?; - let sets = descriptor_pool.allocate(&[pipeline::DescriptorSetAllocDesc { - name: None, - layout: &descriptor_layout, - }])?; + let sets = descriptor_pool.allocate(&[pipeline::DescriptorSetAllocDesc { + name: None, + layout: &descriptor_layout, + }])?; + + Result::Ok((descriptor_pool, descriptor_layout, sets)) + })?; let pipeline_layout = pipeline::PipelineLayout::new( device.clone(), diff --git a/crates/renderer/src/render_graph.rs b/crates/renderer/src/render_graph.rs index bec05b1..ad45ddc 100644 --- a/crates/renderer/src/render_graph.rs +++ b/crates/renderer/src/render_graph.rs @@ -426,6 +426,7 @@ impl RenderGraph { .iter() .map(|(rid, access)| (*rid, *access)) .collect::>(); + self.add_pass(PassDesc { reads: output_reads, writes: vec![], @@ -444,22 +445,28 @@ impl RenderGraph { }); // create internal resources: - for (i, res) in self.resources.iter_mut().enumerate() { - match res { - GraphResource::ImageDesc(image_desc) => { - tracing::trace!("creating resource #{i:?} with {image_desc:?}"); - *res = GraphResource::Image(Arc::new(Image::new( - device.clone(), - image_desc.clone(), - )?)); + util::timed("Create internal RenderGraph resources:", || { + for (i, res) in self.resources.iter_mut().enumerate() { + match res { + GraphResource::ImageDesc(image_desc) => { + tracing::trace!("creating resource #{i:?} with {image_desc:?}"); + *res = GraphResource::Image(Arc::new(Image::new( + device.clone(), + image_desc.clone(), + )?)); + } + GraphResource::BufferDesc(buffer_desc) => { + tracing::trace!("creating resource #{i:?} with {buffer_desc:?}"); + *res = GraphResource::Buffer(Buffer::new( + device.clone(), + buffer_desc.clone(), + )?); + } + _ => {} } - GraphResource::BufferDesc(buffer_desc) => { - tracing::trace!("creating resource #{i:?} with {buffer_desc:?}"); - *res = GraphResource::Buffer(Buffer::new(device.clone(), buffer_desc.clone())?); - } - _ => {} } - } + ash::prelude::VkResult::Ok(()) + })?; let pool = commands::SingleUseCommandPool::new(device.clone(), device.graphics_queue().clone())?;