debug: timing things

This commit is contained in:
Janis 2025-01-14 23:10:10 +01:00
parent 7640cf053b
commit 9802bec8b0
2 changed files with 73 additions and 61 deletions

View file

@ -1851,56 +1851,61 @@ impl EguiState {
const TEXTURE_BINDING: u32 = 0;
const UNIFORM_BINDING: u32 = 1;
fn new(device: Device) -> Result<Self> {
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(),

View file

@ -426,6 +426,7 @@ impl RenderGraph {
.iter()
.map(|(rid, access)| (*rid, *access))
.collect::<Vec<_>>();
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())?;