From 001547dbc2d1ab10d484a9ff1e3c2477a9a2868d Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Wed, 27 Nov 2024 20:48:34 +0100 Subject: [PATCH 1/2] vulkan: Rename name mistake to handle --- src/vulkan/vk_graphics_pipeline.rs | 4 ++-- src/vulkan/vk_render_context.rs | 2 +- src/vulkan/vk_shader_module.rs | 4 ++-- src/vulkan/vk_surface.rs | 16 ++++++++-------- src/vulkan/vk_swapchain.rs | 18 +++++++++--------- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/vulkan/vk_graphics_pipeline.rs b/src/vulkan/vk_graphics_pipeline.rs index 9e7d0ed..11335ab 100644 --- a/src/vulkan/vk_graphics_pipeline.rs +++ b/src/vulkan/vk_graphics_pipeline.rs @@ -22,7 +22,7 @@ impl VkGraphicsPipeline { let shader_entry_name = CStr::from_bytes_with_nul(b"main\0")?; let vert_shader_module = - VkShaderModule::from_spv_file(device.clone(), "res/shaders/main.vert.spv")?; + VkShaderModule::from_spv_file(device, "res/shaders/main.vert.spv")?; let vert_shader_info = vk::PipelineShaderStageCreateInfo::default() .module(vert_shader_module.handle) @@ -30,7 +30,7 @@ impl VkGraphicsPipeline { .stage(vk::ShaderStageFlags::VERTEX); let frag_shader_module = - VkShaderModule::from_spv_file(device.clone(), "res/shaders/main.frag.spv")?; + VkShaderModule::from_spv_file(device, "res/shaders/main.frag.spv")?; let frag_shader_info = vk::PipelineShaderStageCreateInfo::default() .module(frag_shader_module.handle) diff --git a/src/vulkan/vk_render_context.rs b/src/vulkan/vk_render_context.rs index e4a22f5..0fc7d8c 100644 --- a/src/vulkan/vk_render_context.rs +++ b/src/vulkan/vk_render_context.rs @@ -187,7 +187,7 @@ impl VkRenderContext { .queue_submit(*queue, &[submit_info], self.in_flight_fence.handle)? }; - let swapchains = [self.swapchain.swapchain.unwrap()]; + let swapchains = [self.swapchain.handle.unwrap()]; let indices = [index]; let present_info = vk::PresentInfoKHR::default() .wait_semaphores(&signal_semaphores) diff --git a/src/vulkan/vk_shader_module.rs b/src/vulkan/vk_shader_module.rs index 02f934b..0ed5f5b 100644 --- a/src/vulkan/vk_shader_module.rs +++ b/src/vulkan/vk_shader_module.rs @@ -10,7 +10,7 @@ pub struct VkShaderModule { } impl VkShaderModule { - pub fn from_spv_file>(device: Arc, path: P) -> anyhow::Result { + pub fn from_spv_file>(device: &Arc, path: P) -> anyhow::Result { let mut file = std::fs::File::open(&path)?; let frag_shader_str = ash::util::read_spv(&mut file)?; @@ -26,7 +26,7 @@ impl VkShaderModule { ); Ok(Self { - device, + device: device.clone(), handle: shader_module, }) } diff --git a/src/vulkan/vk_surface.rs b/src/vulkan/vk_surface.rs index 4a5a9bc..a1d35da 100644 --- a/src/vulkan/vk_surface.rs +++ b/src/vulkan/vk_surface.rs @@ -13,7 +13,7 @@ pub struct SwapchainSupportDetails( pub struct VkSurface { instance: Arc, - pub(super) surface: vk::SurfaceKHR, + pub(super) handle: vk::SurfaceKHR, } impl VkSurface { @@ -34,7 +34,7 @@ impl VkSurface { log::debug!("Surface created ({:?})", surface); - Ok(Self { instance, surface }) + Ok(Self { instance, handle: surface }) } pub fn physical_device_queue_supported( @@ -48,7 +48,7 @@ impl VkSurface { .get_physical_device_surface_support( physical_device.handle, queue_index, - self.surface, + self.handle, ) } } @@ -61,17 +61,17 @@ impl VkSurface { let formats = self .instance .surface_loader - .get_physical_device_surface_formats(physical_device.handle, self.surface)?; + .get_physical_device_surface_formats(physical_device.handle, self.handle)?; let capabilities = self .instance .surface_loader - .get_physical_device_surface_capabilities(physical_device.handle, self.surface)?; + .get_physical_device_surface_capabilities(physical_device.handle, self.handle)?; let present_modes = self .instance .surface_loader - .get_physical_device_surface_present_modes(physical_device.handle, self.surface)?; + .get_physical_device_surface_present_modes(physical_device.handle, self.handle)?; Ok(SwapchainSupportDetails( formats, @@ -87,8 +87,8 @@ impl Drop for VkSurface { unsafe { self.instance .surface_loader - .destroy_surface(self.surface, None); + .destroy_surface(self.handle, None); } - log::debug!("Surface destroyed ({:?})", self.surface); + log::debug!("Surface destroyed ({:?})", self.handle); } } diff --git a/src/vulkan/vk_swapchain.rs b/src/vulkan/vk_swapchain.rs index b60f1ed..3241b35 100644 --- a/src/vulkan/vk_swapchain.rs +++ b/src/vulkan/vk_swapchain.rs @@ -11,7 +11,7 @@ pub struct VkSwapchain { surface: Arc, device: Arc, - pub(super) swapchain: Option, + pub(super) handle: Option, swapchain_support_details: SwapchainSupportDetails, pub(super) desired_image_count: u32, @@ -64,7 +64,7 @@ impl VkSwapchain { surface: surface.clone(), device: device.clone(), - swapchain: None, + handle: None, new_requested_surface_resolution: None, swapchain_support_details, desired_image_count, @@ -89,7 +89,7 @@ impl VkSwapchain { let mut swapchain_create_info = self.create_swapchain_info(&self.surface); - if let Some(old_swapchain) = self.swapchain { + if let Some(old_swapchain) = self.handle { swapchain_create_info.old_swapchain = old_swapchain; } @@ -114,14 +114,14 @@ impl VkSwapchain { .collect::>(); if log::log_enabled!(log::Level::Debug) { - let label = match self.swapchain { + let label = match self.handle { None => "Swapchain created", Some(_) => "Swapchain updated", }; log::debug!("{label} ({swapchain:?}) : {swapchain_create_info:#?}"); } - self.swapchain = Some(swapchain); + self.handle = Some(swapchain); self.present_image_views = Some(present_images_view); self.present_images = Some(present_images); @@ -177,7 +177,7 @@ impl VkSwapchain { pub(super) fn acquire_next_image(&self, semaphore: &VkSemaphore) -> VkResult<(u32, bool)> { unsafe { self.device.swapchain_loader.acquire_next_image( - self.swapchain.unwrap(), + self.handle.unwrap(), u64::MAX, semaphore.handle, vk::Fence::null(), @@ -191,7 +191,7 @@ impl VkSwapchain { fn create_swapchain_info(&self, surface: &VkSurface) -> vk::SwapchainCreateInfoKHR { vk::SwapchainCreateInfoKHR::default() - .surface(surface.surface) + .surface(surface.handle) .min_image_count(self.desired_image_count) .image_color_space(self.surface_format.color_space) .image_format(self.surface_format.format) @@ -287,13 +287,13 @@ impl VkSwapchain { impl Drop for VkSwapchain { fn drop(&mut self) { - if let Some(swapchain) = self.swapchain { + if let Some(swapchain) = self.handle { unsafe { self.device .swapchain_loader .destroy_swapchain(swapchain, None); } - self.swapchain = None; + self.handle = None; log::debug!("Swapchain destroyed ({swapchain:?})"); } } From a6692474062361480e889d977a48943a4c2df2f6 Mon Sep 17 00:00:00 2001 From: Florian RICHER Date: Wed, 27 Nov 2024 20:59:39 +0100 Subject: [PATCH 2/2] vulkan: Move to renderer module --- src/display/app.rs | 2 +- src/main.rs | 2 +- src/renderer/mod.rs | 1 + src/renderer/vulkan/mod.rs | 41 +++++++++++++++++++ src/{ => renderer}/vulkan/utils/layers.rs | 0 src/{ => renderer}/vulkan/utils/mod.rs | 0 src/{ => renderer}/vulkan/vertex.rs | 0 src/{ => renderer}/vulkan/vk_command_pool.rs | 2 +- src/{ => renderer}/vulkan/vk_device.rs | 2 +- src/{ => renderer}/vulkan/vk_fence.rs | 2 +- src/{ => renderer}/vulkan/vk_framebuffer.rs | 3 +- .../vulkan/vk_graphics_pipeline.rs | 3 +- src/{ => renderer}/vulkan/vk_instance.rs | 8 ++-- .../vulkan/vk_physical_device.rs | 2 +- .../vulkan/vk_render_context.rs | 2 +- src/{ => renderer}/vulkan/vk_render_pass.rs | 2 +- src/{ => renderer}/vulkan/vk_semaphore.rs | 2 +- src/{ => renderer}/vulkan/vk_shader_module.rs | 2 +- src/{ => renderer}/vulkan/vk_surface.rs | 2 +- src/{ => renderer}/vulkan/vk_swapchain.rs | 5 +-- src/vulkan/mod.rs | 41 ------------------- 21 files changed, 61 insertions(+), 63 deletions(-) create mode 100644 src/renderer/mod.rs create mode 100644 src/renderer/vulkan/mod.rs rename src/{ => renderer}/vulkan/utils/layers.rs (100%) rename src/{ => renderer}/vulkan/utils/mod.rs (100%) rename src/{ => renderer}/vulkan/vertex.rs (100%) rename src/{ => renderer}/vulkan/vk_command_pool.rs (97%) rename src/{ => renderer}/vulkan/vk_device.rs (98%) rename src/{ => renderer}/vulkan/vk_fence.rs (96%) rename src/{ => renderer}/vulkan/vk_framebuffer.rs (92%) rename src/{ => renderer}/vulkan/vk_graphics_pipeline.rs (97%) rename src/{ => renderer}/vulkan/vk_instance.rs (96%) rename src/{ => renderer}/vulkan/vk_physical_device.rs (98%) rename src/{ => renderer}/vulkan/vk_render_context.rs (99%) rename src/{ => renderer}/vulkan/vk_render_pass.rs (97%) rename src/{ => renderer}/vulkan/vk_semaphore.rs (96%) rename src/{ => renderer}/vulkan/vk_shader_module.rs (97%) rename src/{ => renderer}/vulkan/vk_surface.rs (98%) rename src/{ => renderer}/vulkan/vk_swapchain.rs (97%) delete mode 100644 src/vulkan/mod.rs diff --git a/src/display/app.rs b/src/display/app.rs index 8eb5023..c233f83 100644 --- a/src/display/app.rs +++ b/src/display/app.rs @@ -1,5 +1,5 @@ use crate::display::window::Window; -use crate::vulkan::VkRenderContext; +use crate::renderer::vulkan::VkRenderContext; use winit::application::ApplicationHandler; use winit::event::WindowEvent; use winit::event_loop::ActiveEventLoop; diff --git a/src/main.rs b/src/main.rs index 007aef4..f75f835 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ use winit::event_loop::{ControlFlow, EventLoop}; mod display; -mod vulkan; +mod renderer; fn main() { env_logger::init(); diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs new file mode 100644 index 0000000..8c19109 --- /dev/null +++ b/src/renderer/mod.rs @@ -0,0 +1 @@ +pub mod vulkan; \ No newline at end of file diff --git a/src/renderer/vulkan/mod.rs b/src/renderer/vulkan/mod.rs new file mode 100644 index 0000000..a8ceee9 --- /dev/null +++ b/src/renderer/vulkan/mod.rs @@ -0,0 +1,41 @@ +mod vk_render_context; +pub use vk_render_context::VkRenderContext; + +mod vk_instance; +pub use vk_instance::VkInstance; + +mod vk_surface; +pub use vk_surface::{SwapchainSupportDetails, VkSurface}; + +mod vk_physical_device; +pub use vk_physical_device::VkPhysicalDevice; + +mod vk_device; +pub use vk_device::VkDevice; + +mod vk_swapchain; +pub use vk_swapchain::VkSwapchain; + +mod vk_shader_module; +pub use vk_shader_module::VkShaderModule; + +mod vk_graphics_pipeline; +pub use vk_graphics_pipeline::VkGraphicsPipeline; + +mod vk_render_pass; +pub use vk_render_pass::VkRenderPass; + +mod vk_semaphore; +pub use vk_semaphore::VkSemaphore; + +mod vk_command_pool; +pub use vk_command_pool::VkCommandPool; + +mod vk_framebuffer; +pub use vk_framebuffer::VkFramebuffer; + +mod vk_fence; +pub use vk_fence::VkFence; + +mod utils; +mod vertex; diff --git a/src/vulkan/utils/layers.rs b/src/renderer/vulkan/utils/layers.rs similarity index 100% rename from src/vulkan/utils/layers.rs rename to src/renderer/vulkan/utils/layers.rs diff --git a/src/vulkan/utils/mod.rs b/src/renderer/vulkan/utils/mod.rs similarity index 100% rename from src/vulkan/utils/mod.rs rename to src/renderer/vulkan/utils/mod.rs diff --git a/src/vulkan/vertex.rs b/src/renderer/vulkan/vertex.rs similarity index 100% rename from src/vulkan/vertex.rs rename to src/renderer/vulkan/vertex.rs diff --git a/src/vulkan/vk_command_pool.rs b/src/renderer/vulkan/vk_command_pool.rs similarity index 97% rename from src/vulkan/vk_command_pool.rs rename to src/renderer/vulkan/vk_command_pool.rs index e0a662a..b48b635 100644 --- a/src/vulkan/vk_command_pool.rs +++ b/src/renderer/vulkan/vk_command_pool.rs @@ -1,4 +1,4 @@ -use crate::vulkan::VkDevice; +use super::VkDevice; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; diff --git a/src/vulkan/vk_device.rs b/src/renderer/vulkan/vk_device.rs similarity index 98% rename from src/vulkan/vk_device.rs rename to src/renderer/vulkan/vk_device.rs index fd79033..ffcabcf 100644 --- a/src/vulkan/vk_device.rs +++ b/src/renderer/vulkan/vk_device.rs @@ -1,4 +1,4 @@ -use crate::vulkan::{VkInstance, VkPhysicalDevice}; +use super::{VkInstance, VkPhysicalDevice}; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; diff --git a/src/vulkan/vk_fence.rs b/src/renderer/vulkan/vk_fence.rs similarity index 96% rename from src/vulkan/vk_fence.rs rename to src/renderer/vulkan/vk_fence.rs index 9d8ac52..5bbc52e 100644 --- a/src/vulkan/vk_fence.rs +++ b/src/renderer/vulkan/vk_fence.rs @@ -1,4 +1,4 @@ -use crate::vulkan::VkDevice; +use super::VkDevice; use ash::vk; use std::sync::Arc; diff --git a/src/vulkan/vk_framebuffer.rs b/src/renderer/vulkan/vk_framebuffer.rs similarity index 92% rename from src/vulkan/vk_framebuffer.rs rename to src/renderer/vulkan/vk_framebuffer.rs index c4dedb6..21d2c4f 100644 --- a/src/vulkan/vk_framebuffer.rs +++ b/src/renderer/vulkan/vk_framebuffer.rs @@ -1,5 +1,4 @@ -use crate::vulkan::vk_render_pass::VkRenderPass; -use crate::vulkan::{VkDevice, VkSwapchain}; +use super::{VkDevice, VkRenderPass, VkSwapchain}; use ash::vk; use std::sync::Arc; diff --git a/src/vulkan/vk_graphics_pipeline.rs b/src/renderer/vulkan/vk_graphics_pipeline.rs similarity index 97% rename from src/vulkan/vk_graphics_pipeline.rs rename to src/renderer/vulkan/vk_graphics_pipeline.rs index 11335ab..a979a2e 100644 --- a/src/vulkan/vk_graphics_pipeline.rs +++ b/src/renderer/vulkan/vk_graphics_pipeline.rs @@ -1,5 +1,4 @@ -use crate::vulkan::vk_render_pass::VkRenderPass; -use crate::vulkan::{VkDevice, VkShaderModule, VkSwapchain}; +use super::{VkDevice, VkRenderPass, VkShaderModule, VkSwapchain}; use ash::vk; use std::ffi::CStr; use std::sync::Arc; diff --git a/src/vulkan/vk_instance.rs b/src/renderer/vulkan/vk_instance.rs similarity index 96% rename from src/vulkan/vk_instance.rs rename to src/renderer/vulkan/vk_instance.rs index b813c9e..ddf520b 100644 --- a/src/vulkan/vk_instance.rs +++ b/src/renderer/vulkan/vk_instance.rs @@ -1,5 +1,7 @@ -use crate::vulkan::utils::layers::{use_layers, LayersSelector}; -use crate::vulkan::VkPhysicalDevice; +use crate::renderer::vulkan::{ + utils::layers::{use_layers, LayersSelector}, + VkPhysicalDevice, +}; use ash::khr::surface; use ash::{vk, Entry, Instance}; use std::ffi::{c_char, CStr, CString}; @@ -26,7 +28,7 @@ impl VkInstance { layer_property.layer_name_as_c_str().ok(), ) } - .unwrap_or_default(); + .unwrap_or_default(); log::debug!("{layer_property:#?} {layer_extensions:#?}"); } } diff --git a/src/vulkan/vk_physical_device.rs b/src/renderer/vulkan/vk_physical_device.rs similarity index 98% rename from src/vulkan/vk_physical_device.rs rename to src/renderer/vulkan/vk_physical_device.rs index e8c0ceb..e2a9d56 100644 --- a/src/vulkan/vk_physical_device.rs +++ b/src/renderer/vulkan/vk_physical_device.rs @@ -1,4 +1,4 @@ -use crate::vulkan::vk_surface::VkSurface; +use super::VkSurface; use ash::vk; pub struct VkPhysicalDevice { diff --git a/src/vulkan/vk_render_context.rs b/src/renderer/vulkan/vk_render_context.rs similarity index 99% rename from src/vulkan/vk_render_context.rs rename to src/renderer/vulkan/vk_render_context.rs index 0fc7d8c..f417809 100644 --- a/src/vulkan/vk_render_context.rs +++ b/src/renderer/vulkan/vk_render_context.rs @@ -1,4 +1,4 @@ -use crate::vulkan::{ +use super::{ VkCommandPool, VkDevice, VkFence, VkFramebuffer, VkGraphicsPipeline, VkInstance, VkPhysicalDevice, VkRenderPass, VkSemaphore, VkSurface, VkSwapchain, }; diff --git a/src/vulkan/vk_render_pass.rs b/src/renderer/vulkan/vk_render_pass.rs similarity index 97% rename from src/vulkan/vk_render_pass.rs rename to src/renderer/vulkan/vk_render_pass.rs index b450865..a37ab8c 100644 --- a/src/vulkan/vk_render_pass.rs +++ b/src/renderer/vulkan/vk_render_pass.rs @@ -1,4 +1,4 @@ -use crate::vulkan::{VkDevice, VkSwapchain}; +use super::{VkDevice, VkSwapchain}; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; diff --git a/src/vulkan/vk_semaphore.rs b/src/renderer/vulkan/vk_semaphore.rs similarity index 96% rename from src/vulkan/vk_semaphore.rs rename to src/renderer/vulkan/vk_semaphore.rs index 60f4b95..df5896f 100644 --- a/src/vulkan/vk_semaphore.rs +++ b/src/renderer/vulkan/vk_semaphore.rs @@ -1,4 +1,4 @@ -use crate::vulkan::VkDevice; +use super::VkDevice; use ash::vk; use std::sync::Arc; diff --git a/src/vulkan/vk_shader_module.rs b/src/renderer/vulkan/vk_shader_module.rs similarity index 97% rename from src/vulkan/vk_shader_module.rs rename to src/renderer/vulkan/vk_shader_module.rs index 0ed5f5b..11e927a 100644 --- a/src/vulkan/vk_shader_module.rs +++ b/src/renderer/vulkan/vk_shader_module.rs @@ -1,4 +1,4 @@ -use crate::vulkan::VkDevice; +use super::VkDevice; use ash::vk; use std::path::Path; use std::sync::Arc; diff --git a/src/vulkan/vk_surface.rs b/src/renderer/vulkan/vk_surface.rs similarity index 98% rename from src/vulkan/vk_surface.rs rename to src/renderer/vulkan/vk_surface.rs index a1d35da..788311a 100644 --- a/src/vulkan/vk_surface.rs +++ b/src/renderer/vulkan/vk_surface.rs @@ -1,4 +1,4 @@ -use crate::vulkan::{VkInstance, VkPhysicalDevice}; +use super::{VkInstance, VkPhysicalDevice}; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; diff --git a/src/vulkan/vk_swapchain.rs b/src/renderer/vulkan/vk_swapchain.rs similarity index 97% rename from src/vulkan/vk_swapchain.rs rename to src/renderer/vulkan/vk_swapchain.rs index 3241b35..e578d98 100644 --- a/src/vulkan/vk_swapchain.rs +++ b/src/renderer/vulkan/vk_swapchain.rs @@ -1,8 +1,5 @@ +use super::{SwapchainSupportDetails, VkDevice, VkFramebuffer, VkPhysicalDevice, VkRenderPass, VkSemaphore, VkSurface}; use crate::display::Window; -use crate::vulkan::vk_render_pass::VkRenderPass; -use crate::vulkan::vk_semaphore::VkSemaphore; -use crate::vulkan::vk_surface::SwapchainSupportDetails; -use crate::vulkan::{VkDevice, VkFramebuffer, VkPhysicalDevice, VkSurface}; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; diff --git a/src/vulkan/mod.rs b/src/vulkan/mod.rs deleted file mode 100644 index 5043262..0000000 --- a/src/vulkan/mod.rs +++ /dev/null @@ -1,41 +0,0 @@ -pub(self) mod vk_render_context; -pub use vk_render_context::VkRenderContext; - -pub(self) mod vk_instance; -pub use vk_instance::VkInstance; - -pub(self) mod vk_surface; -pub use vk_surface::VkSurface; - -pub(self) mod vk_physical_device; -pub use vk_physical_device::VkPhysicalDevice; - -pub(self) mod vk_device; -pub use vk_device::VkDevice; - -pub(self) mod vk_swapchain; -pub use vk_swapchain::VkSwapchain; - -pub(self) mod vk_shader_module; -pub use vk_shader_module::VkShaderModule; - -pub(self) mod vk_graphics_pipeline; -pub use vk_graphics_pipeline::VkGraphicsPipeline; - -mod vk_render_pass; -pub(self) use vk_render_pass::VkRenderPass; - -mod vk_semaphore; -pub(self) use vk_semaphore::VkSemaphore; - -mod vk_command_pool; -pub(self) use vk_command_pool::VkCommandPool; - -mod vk_framebuffer; -pub(self) use vk_framebuffer::VkFramebuffer; - -mod vk_fence; -pub(self) use vk_fence::VkFence; - -mod utils; -mod vertex;