idk man...

This commit is contained in:
Janis 2024-12-21 22:18:18 +01:00
parent 7b7badd4d4
commit d29b121aca
4 changed files with 68 additions and 37 deletions

View file

@ -16,6 +16,10 @@ struct WindowState {
egui_platform: egui_winit_platform::Platform,
}
struct EguiRenderState {
textures: BTreeMap<u64, ()>,
}
struct WinitState {
last_resize_events: BTreeMap<WindowId, PhysicalSize<u32>>,
window_attrs: WindowAttributes,
@ -77,7 +81,11 @@ impl WinitState {
// rendering
self.renderer
.debug_draw(&window_id, || window.window.pre_present_notify())
.debug_draw(
&window_id,
|| { // window.window.pre_present_notify()
},
)
.expect("drawing");
window.window.request_redraw();
}

View file

@ -1,19 +1,31 @@
use super::{Device, Queue, VkAllocator};
use std::sync::Arc;
use super::{Device, Queue};
use ash::{prelude::*, vk};
use vk_mem::Alloc;
pub struct Image2D {
alloc: VkAllocator,
image: vk::Image,
device: Device,
size: vk::Extent2D,
mip_levels: u32,
format: vk::Format,
image: vk::Image,
allocation: vk_mem::Allocation,
}
impl Drop for Image2D {
fn drop(&mut self) {
unsafe {
self.device
.alloc()
.destroy_image(self.image, &mut self.allocation);
}
}
}
impl Image2D {
pub fn new_exclusive(
alloc: VkAllocator,
device: &Device,
extent: vk::Extent2D,
mip_levels: u32,
array_layers: u32,
@ -22,7 +34,7 @@ impl Image2D {
usage: vk::ImageUsageFlags,
memory_usage: vk_mem::MemoryUsage,
alloc_flags: vk_mem::AllocationCreateFlags,
) -> VkResult<Image2D> {
) -> VkResult<Arc<Self>> {
let create_info = vk::ImageCreateInfo::default()
.array_layers(array_layers)
.mip_levels(mip_levels)
@ -46,25 +58,25 @@ impl Image2D {
};
let (image, allocation) =
unsafe { alloc.create_image(&create_info, &alloc_info)? };
unsafe { device.alloc().create_image(&create_info, &alloc_info)? };
Ok(Self {
alloc,
image,
Ok(Arc::new(Self {
size: extent,
mip_levels,
format,
device: device.clone(),
image,
allocation,
})
}))
}
pub fn view(
&self,
self: &Arc<Self>,
device: &Device,
aspect: vk::ImageAspectFlags,
) -> VkResult<vk::ImageView> {
) -> VkResult<Arc<ImageView2D>> {
let create_info = vk::ImageViewCreateInfo::default()
.image(self.image)
.image(self.image())
.view_type(vk::ImageViewType::TYPE_2D)
.format(self.format)
.components(vk::ComponentMapping::default())
@ -80,7 +92,11 @@ impl Image2D {
let view =
unsafe { device.dev().create_image_view(&create_info, None)? };
Ok(view)
Ok(Arc::new(ImageView2D {
view,
image: self.clone(),
aspect,
}))
}
pub fn image(&self) -> vk::Image {
@ -88,14 +104,22 @@ impl Image2D {
}
}
impl Drop for Image2D {
pub struct ImageView2D {
view: vk::ImageView,
aspect: vk::ImageAspectFlags,
image: Arc<Image2D>,
}
impl Drop for ImageView2D {
fn drop(&mut self) {
unsafe {
self.alloc.destroy_image(self.image, &mut self.allocation);
self.image.device.dev().destroy_image_view(self.view, None);
}
}
}
impl ImageView2D {}
pub struct QueueOwnership {
src: u32,
dst: u32,

View file

@ -36,9 +36,8 @@ use tracing::info;
mod commands;
mod images;
mod render_graph;
mod sync;
type VkAllocator = Arc<vk_mem::Allocator>;
mod sync;
#[derive(Debug, thiserror::Error)]
pub enum Error {
@ -470,6 +469,7 @@ impl DeviceQueueFamilies {
struct DeviceInner {
instance: Arc<Instance>,
physical: PhysicalDevice,
alloc: vk_mem::Allocator,
device: ash::Device,
swapchain: khr::swapchain::Device,
debug_utils: ash::ext::debug_utils::Device,
@ -505,6 +505,9 @@ impl Device {
fn weak(&self) -> WeakDevice {
Arc::downgrade(&self.0)
}
fn alloc(&self) -> &vk_mem::Allocator {
&self.0.alloc
}
fn dev(&self) -> &ash::Device {
&self.0.device
}
@ -1194,7 +1197,6 @@ impl Drop for Surface {
pub struct Vulkan {
instance: Arc<Instance>,
device: Device,
alloc: VkAllocator,
}
impl Drop for Vulkan {
@ -1393,19 +1395,7 @@ impl Vulkan {
let device =
Self::create_device(instance.clone(), pdev, &mut features)?;
let alloc_info = vk_mem::AllocatorCreateInfo::new(
&instance.instance,
device.dev(),
device.phy(),
);
let alloc = Arc::new(unsafe { vk_mem::Allocator::new(alloc_info)? });
Ok(Self {
instance,
device,
alloc,
})
Ok(Self { instance, device })
}
fn queue_family_supports_presentation(
@ -1693,6 +1683,14 @@ impl Vulkan {
.map(get_queue)
.unwrap_or(compute_queue.clone());
let alloc_info = vk_mem::AllocatorCreateInfo::new(
&instance.instance,
&device,
pdev.pdev,
);
let alloc = unsafe { vk_mem::Allocator::new(alloc_info)? };
Device::new(DeviceInner {
device: device.clone(),
physical: pdev,
@ -1705,6 +1703,7 @@ impl Vulkan {
&device,
),
instance,
alloc,
allocated_queues,
main_queue,
present_queue,

View file

@ -1,6 +1,6 @@
use ash::vk;
struct Rgba([f32;4]);
struct Rgba([f32; 4]);
enum LoadOp {
Clear(Rgba),
@ -9,7 +9,8 @@ enum LoadOp {
}
enum StoreOp {
DontCare,Store,
DontCare,
Store,
}
struct AttachmentInfo {
@ -23,5 +24,4 @@ struct Texture {
texture: vk::Image,
}
pub struct RenderGraph {
}
pub struct RenderGraph {}