renderer: thread-local commandpools

This commit is contained in:
Janis 2025-01-28 02:30:50 +01:00
parent 4cbf1f053b
commit 2b09a2c4f8
7 changed files with 690 additions and 314 deletions

View file

@ -22,12 +22,14 @@ tracing-subscriber = {version ="0.3.18", features = ["env-filter"]}
glam = {version = "0.29.0", features = ["bytemuck"]}
rand = "0.8.5"
bitflags = "2.6"
thread_local = "1.1.8"
ash = "0.38.0"
ash-window = "0.13.0"
vk-mem = "0.4.0"
vk-sync = "0.1.6"
arrayvec = "0.7.6"
tinyvec = "1.8"
indexmap = "2"
petgraph = "0.7"

View file

@ -5,6 +5,7 @@ edition = "2021"
[dependencies]
tinyvec = { workspace = true }
arrayvec = { workspace = true }
indexmap = { workspace = true }
petgraph = { workspace = true }
itertools = { workspace = true }
@ -13,6 +14,7 @@ rand = { workspace = true }
parking_lot = { workspace = true }
glam = { workspace = true }
bitflags = { workspace = true }
thread_local = {workspace = true}
thiserror = { workspace = true }
anyhow = { workspace = true }

File diff suppressed because it is too large Load diff

View file

@ -26,6 +26,7 @@ pub struct DeviceQueueFamilies {
pub(crate) present: (u32, u32),
pub(crate) async_compute: (u32, u32),
pub(crate) transfer: (u32, u32),
pub(crate) properties: Box<[vk::QueueFamilyProperties]>,
}
impl DeviceQueueFamilies {
@ -78,12 +79,12 @@ bitflags::bitflags! {
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct QueueFlags: u32 {
const GRAPHICS = 1 << 0;
const PRESENT = 1 << 1;
const ASYNC_COMPUTE = 1 << 2;
const TRANSFER = 1 << 3;
const ASYNC_COMPUTE = 1 << 1;
const TRANSFER = 1 << 2;
const PRESENT = 1 << 3;
const NONE = 0;
const PRESENT_GRAPHICS = 1 << 0 | 1 << 1;
const PRESENT_GRAPHICS = 1 << 0 | 1 << 2;
}
}
@ -256,7 +257,7 @@ impl DeviceBuilder {
display_handle: Option<RawDisplayHandle>,
pdev: vk::PhysicalDevice,
) -> DeviceQueueFamilies {
let queue_families = unsafe {
let queue_familiy_properties = unsafe {
instance
.instance
.get_physical_device_queue_family_properties(pdev)
@ -318,7 +319,7 @@ impl DeviceBuilder {
}
let mut queue_families = QueueFamilies(
queue_families
queue_familiy_properties
.iter()
.enumerate()
.map(|(i, family)| {
@ -416,6 +417,7 @@ impl DeviceBuilder {
async_compute,
transfer,
present,
properties: queue_familiy_properties.into_boxed_slice(),
};
queues
@ -887,7 +889,7 @@ impl Device {
pub fn physical_device(&self) -> &PhysicalDevice {
&self.0.physical
}
pub fn graphics_queue(&self) -> &Queue {
pub fn main_queue(&self) -> &Queue {
&self.0.main_queue
}
pub fn transfer_queue(&self) -> &Queue {

View file

@ -5,6 +5,7 @@ use indexmap::IndexMap;
use crate::{
buffers::{Buffer, BufferDesc},
commands::traits::CommandBufferExt,
device::{self, DeviceOwned},
images::{Image, ImageDesc, ImageViewDesc},
render_graph::{

View file

@ -8,7 +8,8 @@ use std::{
use crate::{
buffers::{Buffer, BufferDesc},
commands, def_monotonic_id,
commands::{self, traits::CommandBufferExt},
def_monotonic_id,
device::{self, DeviceOwned},
images::{self, Image, ImageDesc},
util::{self, Rgba, WithLifetime},
@ -489,7 +490,7 @@ impl RenderGraph {
})?;
let pool =
commands::SingleUseCommandPool::new(device.clone(), device.graphics_queue().clone())?;
commands::SingleUseCommandPool::new(device.clone(), device.main_queue().clone())?;
let resources = &self.resources;
let cmds = topo

View file

@ -7,7 +7,7 @@ pub use crate::egui_pass::{egui_pass, egui_pre_pass};
use crate::{
buffers::{Buffer, BufferDesc},
commands,
commands::{self, traits::CommandBufferExt},
device::{Device, DeviceOwned},
images::ImageViewDesc,
pipeline,
@ -97,7 +97,7 @@ impl Wireframe {
},
)?;
let pool = commands::SingleUseCommandPool::new(dev.clone(), dev.graphics_queue().clone())?;
let pool = commands::SingleUseCommandPool::new(dev.clone(), dev.main_queue().clone())?;
let cmd = pool.alloc()?;