From 36d1f19179200e5e9145cd7573aae20716117980 Mon Sep 17 00:00:00 2001 From: Manon Oomen Date: Wed, 26 Aug 2026 17:58:04 +0200 Subject: [PATCH 1/2] Mark a bunch of types and functions as pub so that other crates can use the suballocator to create a platform specific GPU allocator. --- src/allocator/dedicated_block_allocator/mod.rs | 4 ++-- src/allocator/free_list_allocator/mod.rs | 4 ++-- src/allocator/mod.rs | 16 ++++++++-------- src/lib.rs | 9 ++++++--- src/visualizer/mod.rs | 2 +- 5 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/allocator/dedicated_block_allocator/mod.rs b/src/allocator/dedicated_block_allocator/mod.rs index 02bb13df..d0989964 100644 --- a/src/allocator/dedicated_block_allocator/mod.rs +++ b/src/allocator/dedicated_block_allocator/mod.rs @@ -18,7 +18,7 @@ use super::{AllocationReport, AllocationType, SubAllocator, SubAllocatorBase}; use crate::{AllocationError, Result}; #[derive(Debug)] -pub(crate) struct DedicatedBlockAllocator { +pub struct DedicatedBlockAllocator { size: u64, allocated: u64, /// Only used if [`crate::AllocatorDebugSettings::store_stack_traces`] is [`true`] @@ -28,7 +28,7 @@ pub(crate) struct DedicatedBlockAllocator { } impl DedicatedBlockAllocator { - pub(crate) fn new(size: u64) -> Self { + pub fn new(size: u64) -> Self { Self { size, allocated: 0, diff --git a/src/allocator/free_list_allocator/mod.rs b/src/allocator/free_list_allocator/mod.rs index db969d68..35142b7d 100644 --- a/src/allocator/free_list_allocator/mod.rs +++ b/src/allocator/free_list_allocator/mod.rs @@ -46,7 +46,7 @@ pub(crate) struct MemoryChunk { } #[derive(Debug)] -pub(crate) struct FreeListAllocator { +pub struct FreeListAllocator { size: u64, allocated: u64, pub(crate) chunk_id_counter: u64, @@ -74,7 +74,7 @@ fn has_granularity_conflict(type0: AllocationType, type1: AllocationType) -> boo } impl FreeListAllocator { - pub(crate) fn new(size: u64) -> Self { + pub fn new(size: u64) -> Self { #[allow(clippy::unwrap_used)] let initial_chunk_id = core::num::NonZeroU64::new(1).unwrap(); diff --git a/src/allocator/mod.rs b/src/allocator/mod.rs index 523ebcbd..eda9a52c 100644 --- a/src/allocator/mod.rs +++ b/src/allocator/mod.rs @@ -9,15 +9,15 @@ use log::*; use crate::result::*; -pub(crate) mod dedicated_block_allocator; -pub(crate) use dedicated_block_allocator::DedicatedBlockAllocator; +pub mod dedicated_block_allocator; +pub use dedicated_block_allocator::DedicatedBlockAllocator; -pub(crate) mod free_list_allocator; -pub(crate) use free_list_allocator::FreeListAllocator; +pub mod free_list_allocator; +pub use free_list_allocator::FreeListAllocator; #[derive(PartialEq, Copy, Clone, Debug)] #[repr(u8)] -pub(crate) enum AllocationType { +pub enum AllocationType { Free, Linear, NonLinear, @@ -106,11 +106,11 @@ impl fmt::Debug for AllocatorReport { } #[cfg(feature = "visualizer")] -pub(crate) trait SubAllocatorBase: crate::visualizer::SubAllocatorVisualizer {} +pub trait SubAllocatorBase: crate::visualizer::SubAllocatorVisualizer {} #[cfg(not(feature = "visualizer"))] -pub(crate) trait SubAllocatorBase {} +pub trait SubAllocatorBase {} -pub(crate) trait SubAllocator: SubAllocatorBase + fmt::Debug + Sync + Send { +pub trait SubAllocator: SubAllocatorBase + fmt::Debug + Sync + Send { fn allocate( &mut self, size: u64, diff --git a/src/lib.rs b/src/lib.rs index 0906aabf..2eef751b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -227,9 +227,12 @@ compile_error!("Either `std` or `hashbrown` feature must be enabled"); mod result; pub use result::*; -pub(crate) mod allocator; +pub mod allocator; -pub use allocator::{AllocationReport, AllocatorReport, MemoryBlockReport}; +pub use allocator::{ + AllocationReport, AllocatorReport, DedicatedBlockAllocator, FreeListAllocator, + MemoryBlockReport, +}; #[cfg(feature = "visualizer")] pub mod visualizer; @@ -421,7 +424,7 @@ impl AllocationSizes { /// (where the requested allocation didn't fit), the larger /// the returned memory block size is going to be (up to /// `max_*_memblock_size`). - pub(crate) fn get_memblock_size(&self, is_host: bool, count: usize) -> u64 { + pub fn get_memblock_size(&self, is_host: bool, count: usize) -> u64 { let (min_size, max_size) = if is_host { (self.min_host_memblock_size, self.max_host_memblock_size) } else { diff --git a/src/visualizer/mod.rs b/src/visualizer/mod.rs index 113c8454..14fba781 100644 --- a/src/visualizer/mod.rs +++ b/src/visualizer/mod.rs @@ -39,7 +39,7 @@ impl ColorScheme { } } -pub(crate) trait SubAllocatorVisualizer { +pub trait SubAllocatorVisualizer { fn supports_visualization(&self) -> bool { false } From bbb5799065b62403e1b53872a8bed1bb7f0026ee Mon Sep 17 00:00:00 2001 From: Manon Oomen Date: Mon, 14 Sep 2026 11:04:42 +0200 Subject: [PATCH 2/2] Make clippy happy. --- .cargo/config.toml | 3 +-- src/d3d12/mod.rs | 2 +- src/metal/mod.rs | 2 +- src/metal/visualizer.rs | 2 +- src/visualizer/memory_chunks.rs | 4 ++-- src/vulkan/mod.rs | 2 +- 6 files changed, 7 insertions(+), 8 deletions(-) diff --git a/.cargo/config.toml b/.cargo/config.toml index a0c7d9d7..bdf3f43c 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -11,7 +11,7 @@ rustflags = [ "-Wclippy::dbg_macro", "-Wclippy::debug_assert_with_mut_call", "-Wclippy::doc_markdown", - "-Wclippy::empty_enum", + "-Wclippy::empty_enums", "-Wclippy::enum_glob_use", "-Wclippy::exit", "-Wclippy::expl_impl_clone_on_copy", @@ -61,7 +61,6 @@ rustflags = [ "-Wclippy::string_add_assign", "-Wclippy::string_add", "-Wclippy::string_lit_as_bytes", - "-Wclippy::string_to_string", # "-Wclippy::todo", "-Wclippy::trait_duplication_in_bounds", "-Wclippy::unimplemented", diff --git a/src/d3d12/mod.rs b/src/d3d12/mod.rs index 9cb9a0ff..6ead72c5 100644 --- a/src/d3d12/mod.rs +++ b/src/d3d12/mod.rs @@ -631,7 +631,7 @@ impl Allocator { if self.debug_settings.log_allocations { debug!( "Allocating `{}` of {} bytes with an alignment of {}.", - &desc.name, size, alignment + desc.name, size, alignment ); #[cfg(feature = "std")] if self.debug_settings.log_stack_traces { diff --git a/src/metal/mod.rs b/src/metal/mod.rs index a4ee582a..8bba86b6 100644 --- a/src/metal/mod.rs +++ b/src/metal/mod.rs @@ -499,7 +499,7 @@ impl Allocator { if self.debug_settings.log_allocations { debug!( "Allocating `{}` of {} bytes with an alignment of {}.", - &desc.name, size, alignment + desc.name, size, alignment ); #[cfg(feature = "std")] if self.debug_settings.log_stack_traces { diff --git a/src/metal/visualizer.rs b/src/metal/visualizer.rs index 26b3c135..6a277068 100644 --- a/src/metal/visualizer.rs +++ b/src/metal/visualizer.rs @@ -81,7 +81,7 @@ impl AllocatorVisualizer { "allocated: {} KiB", block.sub_allocator.allocated() / 1024 )); - ui.label(format!("Heap: {:?}", &block.heap)); + ui.label(format!("Heap: {:?}", block.heap)); block.sub_allocator.draw_base_info(ui); diff --git a/src/visualizer/memory_chunks.rs b/src/visualizer/memory_chunks.rs index 75ad3d78..bd671912 100644 --- a/src/visualizer/memory_chunks.rs +++ b/src/visualizer/memory_chunks.rs @@ -5,7 +5,7 @@ use egui::{Color32, DragValue, Rect, ScrollArea, Sense, Ui, Vec2}; use super::ColorScheme; use crate::allocator::free_list_allocator::MemoryChunk; -pub(crate) struct MemoryChunksVisualizationSettings { +pub struct MemoryChunksVisualizationSettings { pub width_in_bytes: u64, pub show_backtraces: bool, } @@ -98,7 +98,7 @@ pub(crate) fn render_memory_chunks_ui<'a>( egui::Rounding::ZERO, color_scheme .get_allocation_type_color(data[cursor_idx].allocation_type), - egui::Stroke::new(1.0, Color32::BLACK), + egui::Stroke::new(1.0_f32, Color32::BLACK), ); resp.on_hover_ui_at_pointer(|ui| { diff --git a/src/vulkan/mod.rs b/src/vulkan/mod.rs index 59572d49..93d22e26 100644 --- a/src/vulkan/mod.rs +++ b/src/vulkan/mod.rs @@ -787,7 +787,7 @@ impl Allocator { if self.debug_settings.log_allocations { debug!( "Allocating `{}` of {} bytes with an alignment of {}.", - &desc.name, size, alignment + desc.name, size, alignment ); #[cfg(feature = "std")] if self.debug_settings.log_stack_traces {