buffers aren't in arcs by default

This commit is contained in:
Janis 2025-01-04 02:16:15 +01:00
parent 0627556051
commit dea08cd123
2 changed files with 18 additions and 27 deletions

View file

@ -74,7 +74,7 @@ define_device_owned_handle! {
} }
impl Buffer { impl Buffer {
pub fn new(device: Device, desc: BufferDesc) -> VkResult<Arc<Self>> { pub fn new(device: Device, desc: BufferDesc) -> VkResult<Self> {
let queue_families = device.queue_families().family_indices(desc.queue_families); let queue_families = device.queue_families().family_indices(desc.queue_families);
let sharing_mode = if queue_families.len() > 1 { let sharing_mode = if queue_families.len() > 1 {
@ -98,11 +98,12 @@ impl Buffer {
)? )?
}; };
Ok(Arc::new(Self::construct( Ok(Self::construct(
device, buffer, desc.name, allocation, desc.size, device, buffer, desc.name, allocation, desc.size,
)?)) )?)
} }
#[allow(dead_code)]
pub fn map_arc(self: &mut Arc<Self>) -> VkResult<MappedBuffer<'_>> { pub fn map_arc(self: &mut Arc<Self>) -> VkResult<MappedBuffer<'_>> {
Arc::get_mut(self).map(Self::map).unwrap() Arc::get_mut(self).map(Self::map).unwrap()
} }

View file

@ -1778,10 +1778,10 @@ pub struct EguiState {
#[derive(Debug)] #[derive(Debug)]
struct EguiRenderState { struct EguiRenderState {
vertices: Arc<buffers::Buffer>, vertices: buffers::Buffer,
indices: Arc<buffers::Buffer>, indices: buffers::Buffer,
draw_calls: Arc<buffers::Buffer>, draw_calls: buffers::Buffer,
texture_ids: Arc<buffers::Buffer>, texture_ids: buffers::Buffer,
textures_to_free: Vec<texture::TextureId>, textures_to_free: Vec<texture::TextureId>,
num_draw_calls: usize, num_draw_calls: usize,
} }
@ -2067,10 +2067,7 @@ impl<W> Renderer<W> {
) )
.expect("staging buffer"); .expect("staging buffer");
{ {
let mut mem = Arc::get_mut(&mut staging) let mut mem = staging.map().expect("mapping staging buffer");
.unwrap()
.map()
.expect("mapping staging buffer");
match &delta.image { match &delta.image {
egui::ImageData::Color(arc) => { egui::ImageData::Color(arc) => {
let slice = unsafe { let slice = unsafe {
@ -2164,13 +2161,7 @@ impl<W> Renderer<W> {
if let Some(pos) = delta.pos { if let Some(pos) = delta.pos {
// SAFETY: must exist because image is not whole. // SAFETY: must exist because image is not whole.
let existing_texture = self let existing_texture = self.texture_handler.textures.get(&id).cloned().unwrap();
.texture_handler
.textures
.get(&id)
.cloned()
.unwrap()
.image();
cmd.image_barrier( cmd.image_barrier(
texture.image(), texture.image(),
@ -2184,7 +2175,7 @@ impl<W> Renderer<W> {
None, None,
); );
cmd.image_barrier( cmd.image_barrier(
existing_texture.image(), existing_texture.handle(),
vk::ImageAspectFlags::COLOR, vk::ImageAspectFlags::COLOR,
vk::PipelineStageFlags2::empty(), vk::PipelineStageFlags2::empty(),
vk::AccessFlags2::empty(), vk::AccessFlags2::empty(),
@ -2204,7 +2195,7 @@ impl<W> Renderer<W> {
), ),
); );
cmd.image_barrier( cmd.image_barrier(
existing_texture.image(), existing_texture.handle(),
vk::ImageAspectFlags::COLOR, vk::ImageAspectFlags::COLOR,
vk::PipelineStageFlags2::TRANSFER, vk::PipelineStageFlags2::TRANSFER,
vk::AccessFlags2::TRANSFER_WRITE, vk::AccessFlags2::TRANSFER_WRITE,
@ -2216,7 +2207,7 @@ impl<W> Renderer<W> {
); );
} else { } else {
cmd.image_barrier( cmd.image_barrier(
texture.image(), texture.handle(),
vk::ImageAspectFlags::COLOR, vk::ImageAspectFlags::COLOR,
vk::PipelineStageFlags2::TRANSFER, vk::PipelineStageFlags2::TRANSFER,
vk::AccessFlags2::TRANSFER_WRITE, vk::AccessFlags2::TRANSFER_WRITE,
@ -2313,7 +2304,7 @@ impl<W> Renderer<W> {
)?; )?;
{ {
let mut map = staging.map_arc()?; let mut map = staging.map()?;
let (st_vertices, rest) = map.split_at_mut(vertices_size); let (st_vertices, rest) = map.split_at_mut(vertices_size);
let (st_indices, st_drawcalls) = rest.split_at_mut(indices_size); let (st_indices, st_drawcalls) = rest.split_at_mut(indices_size);
@ -2394,7 +2385,7 @@ impl<W> Renderer<W> {
}, },
)?; )?;
{ {
let mut map = texture_ids.map_arc()?; let mut map = texture_ids.map()?;
map.copy_from_slice(bytemuck::cast_slice(&textures_indices)); map.copy_from_slice(bytemuck::cast_slice(&textures_indices));
} }
@ -2412,16 +2403,15 @@ impl<W> Renderer<W> {
.get_sampler(entry.into_sampler_desc()) .get_sampler(entry.into_sampler_desc())
.unwrap(), .unwrap(),
image_view: texture image_view: texture
.view(images::ImageViewDesc { .get_view(images::ImageViewDesc {
kind: vk::ImageViewType::TYPE_2D, kind: vk::ImageViewType::TYPE_2D,
format: texture.image().format(), format: texture.format(),
aspect: vk::ImageAspectFlags::COLOR, aspect: vk::ImageAspectFlags::COLOR,
mip_range: (0..1).into(), mip_range: (0..1).into(),
layer_range: (0..1).into(), layer_range: (0..1).into(),
..Default::default() ..Default::default()
}) })
.unwrap() .unwrap(),
.handle(),
image_layout: vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL, image_layout: vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL,
}; };