diff --git a/src/display/app.rs b/src/display/app.rs index c233f83..8eb5023 100644 --- a/src/display/app.rs +++ b/src/display/app.rs @@ -1,5 +1,5 @@ use crate::display::window::Window; -use crate::renderer::vulkan::VkRenderContext; +use crate::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 f75f835..007aef4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ use winit::event_loop::{ControlFlow, EventLoop}; mod display; -mod renderer; +mod vulkan; fn main() { env_logger::init(); diff --git a/src/renderer/mod.rs b/src/renderer/mod.rs deleted file mode 100644 index 8c19109..0000000 --- a/src/renderer/mod.rs +++ /dev/null @@ -1 +0,0 @@ -pub mod vulkan; \ No newline at end of file diff --git a/src/renderer/vulkan/mod.rs b/src/renderer/vulkan/mod.rs deleted file mode 100644 index a8ceee9..0000000 --- a/src/renderer/vulkan/mod.rs +++ /dev/null @@ -1,41 +0,0 @@ -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/mod.rs b/src/vulkan/mod.rs new file mode 100644 index 0000000..5043262 --- /dev/null +++ b/src/vulkan/mod.rs @@ -0,0 +1,41 @@ +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; diff --git a/src/renderer/vulkan/utils/layers.rs b/src/vulkan/utils/layers.rs similarity index 100% rename from src/renderer/vulkan/utils/layers.rs rename to src/vulkan/utils/layers.rs diff --git a/src/renderer/vulkan/utils/mod.rs b/src/vulkan/utils/mod.rs similarity index 100% rename from src/renderer/vulkan/utils/mod.rs rename to src/vulkan/utils/mod.rs diff --git a/src/renderer/vulkan/vertex.rs b/src/vulkan/vertex.rs similarity index 100% rename from src/renderer/vulkan/vertex.rs rename to src/vulkan/vertex.rs diff --git a/src/renderer/vulkan/vk_command_pool.rs b/src/vulkan/vk_command_pool.rs similarity index 97% rename from src/renderer/vulkan/vk_command_pool.rs rename to src/vulkan/vk_command_pool.rs index b48b635..e0a662a 100644 --- a/src/renderer/vulkan/vk_command_pool.rs +++ b/src/vulkan/vk_command_pool.rs @@ -1,4 +1,4 @@ -use super::VkDevice; +use crate::vulkan::VkDevice; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; diff --git a/src/renderer/vulkan/vk_device.rs b/src/vulkan/vk_device.rs similarity index 98% rename from src/renderer/vulkan/vk_device.rs rename to src/vulkan/vk_device.rs index ffcabcf..fd79033 100644 --- a/src/renderer/vulkan/vk_device.rs +++ b/src/vulkan/vk_device.rs @@ -1,4 +1,4 @@ -use super::{VkInstance, VkPhysicalDevice}; +use crate::vulkan::{VkInstance, VkPhysicalDevice}; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; diff --git a/src/renderer/vulkan/vk_fence.rs b/src/vulkan/vk_fence.rs similarity index 96% rename from src/renderer/vulkan/vk_fence.rs rename to src/vulkan/vk_fence.rs index 5bbc52e..9d8ac52 100644 --- a/src/renderer/vulkan/vk_fence.rs +++ b/src/vulkan/vk_fence.rs @@ -1,4 +1,4 @@ -use super::VkDevice; +use crate::vulkan::VkDevice; use ash::vk; use std::sync::Arc; diff --git a/src/renderer/vulkan/vk_framebuffer.rs b/src/vulkan/vk_framebuffer.rs similarity index 92% rename from src/renderer/vulkan/vk_framebuffer.rs rename to src/vulkan/vk_framebuffer.rs index 21d2c4f..c4dedb6 100644 --- a/src/renderer/vulkan/vk_framebuffer.rs +++ b/src/vulkan/vk_framebuffer.rs @@ -1,4 +1,5 @@ -use super::{VkDevice, VkRenderPass, VkSwapchain}; +use crate::vulkan::vk_render_pass::VkRenderPass; +use crate::vulkan::{VkDevice, VkSwapchain}; use ash::vk; use std::sync::Arc; diff --git a/src/renderer/vulkan/vk_graphics_pipeline.rs b/src/vulkan/vk_graphics_pipeline.rs similarity index 93% rename from src/renderer/vulkan/vk_graphics_pipeline.rs rename to src/vulkan/vk_graphics_pipeline.rs index a979a2e..9e7d0ed 100644 --- a/src/renderer/vulkan/vk_graphics_pipeline.rs +++ b/src/vulkan/vk_graphics_pipeline.rs @@ -1,4 +1,5 @@ -use super::{VkDevice, VkRenderPass, VkShaderModule, VkSwapchain}; +use crate::vulkan::vk_render_pass::VkRenderPass; +use crate::vulkan::{VkDevice, VkShaderModule, VkSwapchain}; use ash::vk; use std::ffi::CStr; use std::sync::Arc; @@ -21,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, "res/shaders/main.vert.spv")?; + VkShaderModule::from_spv_file(device.clone(), "res/shaders/main.vert.spv")?; let vert_shader_info = vk::PipelineShaderStageCreateInfo::default() .module(vert_shader_module.handle) @@ -29,7 +30,7 @@ impl VkGraphicsPipeline { .stage(vk::ShaderStageFlags::VERTEX); let frag_shader_module = - VkShaderModule::from_spv_file(device, "res/shaders/main.frag.spv")?; + VkShaderModule::from_spv_file(device.clone(), "res/shaders/main.frag.spv")?; let frag_shader_info = vk::PipelineShaderStageCreateInfo::default() .module(frag_shader_module.handle) diff --git a/src/renderer/vulkan/vk_instance.rs b/src/vulkan/vk_instance.rs similarity index 96% rename from src/renderer/vulkan/vk_instance.rs rename to src/vulkan/vk_instance.rs index ddf520b..b813c9e 100644 --- a/src/renderer/vulkan/vk_instance.rs +++ b/src/vulkan/vk_instance.rs @@ -1,7 +1,5 @@ -use crate::renderer::vulkan::{ - utils::layers::{use_layers, LayersSelector}, - VkPhysicalDevice, -}; +use crate::vulkan::utils::layers::{use_layers, LayersSelector}; +use crate::vulkan::VkPhysicalDevice; use ash::khr::surface; use ash::{vk, Entry, Instance}; use std::ffi::{c_char, CStr, CString}; @@ -28,7 +26,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/renderer/vulkan/vk_physical_device.rs b/src/vulkan/vk_physical_device.rs similarity index 98% rename from src/renderer/vulkan/vk_physical_device.rs rename to src/vulkan/vk_physical_device.rs index e2a9d56..e8c0ceb 100644 --- a/src/renderer/vulkan/vk_physical_device.rs +++ b/src/vulkan/vk_physical_device.rs @@ -1,4 +1,4 @@ -use super::VkSurface; +use crate::vulkan::vk_surface::VkSurface; use ash::vk; pub struct VkPhysicalDevice { diff --git a/src/renderer/vulkan/vk_render_context.rs b/src/vulkan/vk_render_context.rs similarity index 98% rename from src/renderer/vulkan/vk_render_context.rs rename to src/vulkan/vk_render_context.rs index f417809..e4a22f5 100644 --- a/src/renderer/vulkan/vk_render_context.rs +++ b/src/vulkan/vk_render_context.rs @@ -1,4 +1,4 @@ -use super::{ +use crate::vulkan::{ VkCommandPool, VkDevice, VkFence, VkFramebuffer, VkGraphicsPipeline, VkInstance, VkPhysicalDevice, VkRenderPass, VkSemaphore, VkSurface, VkSwapchain, }; @@ -187,7 +187,7 @@ impl VkRenderContext { .queue_submit(*queue, &[submit_info], self.in_flight_fence.handle)? }; - let swapchains = [self.swapchain.handle.unwrap()]; + let swapchains = [self.swapchain.swapchain.unwrap()]; let indices = [index]; let present_info = vk::PresentInfoKHR::default() .wait_semaphores(&signal_semaphores) diff --git a/src/renderer/vulkan/vk_render_pass.rs b/src/vulkan/vk_render_pass.rs similarity index 97% rename from src/renderer/vulkan/vk_render_pass.rs rename to src/vulkan/vk_render_pass.rs index a37ab8c..b450865 100644 --- a/src/renderer/vulkan/vk_render_pass.rs +++ b/src/vulkan/vk_render_pass.rs @@ -1,4 +1,4 @@ -use super::{VkDevice, VkSwapchain}; +use crate::vulkan::{VkDevice, VkSwapchain}; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; diff --git a/src/renderer/vulkan/vk_semaphore.rs b/src/vulkan/vk_semaphore.rs similarity index 96% rename from src/renderer/vulkan/vk_semaphore.rs rename to src/vulkan/vk_semaphore.rs index df5896f..60f4b95 100644 --- a/src/renderer/vulkan/vk_semaphore.rs +++ b/src/vulkan/vk_semaphore.rs @@ -1,4 +1,4 @@ -use super::VkDevice; +use crate::vulkan::VkDevice; use ash::vk; use std::sync::Arc; diff --git a/src/renderer/vulkan/vk_shader_module.rs b/src/vulkan/vk_shader_module.rs similarity index 86% rename from src/renderer/vulkan/vk_shader_module.rs rename to src/vulkan/vk_shader_module.rs index 11e927a..02f934b 100644 --- a/src/renderer/vulkan/vk_shader_module.rs +++ b/src/vulkan/vk_shader_module.rs @@ -1,4 +1,4 @@ -use super::VkDevice; +use crate::vulkan::VkDevice; use ash::vk; use std::path::Path; use std::sync::Arc; @@ -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.clone(), + device, handle: shader_module, }) } diff --git a/src/renderer/vulkan/vk_surface.rs b/src/vulkan/vk_surface.rs similarity index 85% rename from src/renderer/vulkan/vk_surface.rs rename to src/vulkan/vk_surface.rs index 788311a..4a5a9bc 100644 --- a/src/renderer/vulkan/vk_surface.rs +++ b/src/vulkan/vk_surface.rs @@ -1,4 +1,4 @@ -use super::{VkInstance, VkPhysicalDevice}; +use crate::vulkan::{VkInstance, VkPhysicalDevice}; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; @@ -13,7 +13,7 @@ pub struct SwapchainSupportDetails( pub struct VkSurface { instance: Arc, - pub(super) handle: vk::SurfaceKHR, + pub(super) surface: vk::SurfaceKHR, } impl VkSurface { @@ -34,7 +34,7 @@ impl VkSurface { log::debug!("Surface created ({:?})", surface); - Ok(Self { instance, handle: surface }) + Ok(Self { instance, surface }) } pub fn physical_device_queue_supported( @@ -48,7 +48,7 @@ impl VkSurface { .get_physical_device_surface_support( physical_device.handle, queue_index, - self.handle, + self.surface, ) } } @@ -61,17 +61,17 @@ impl VkSurface { let formats = self .instance .surface_loader - .get_physical_device_surface_formats(physical_device.handle, self.handle)?; + .get_physical_device_surface_formats(physical_device.handle, self.surface)?; let capabilities = self .instance .surface_loader - .get_physical_device_surface_capabilities(physical_device.handle, self.handle)?; + .get_physical_device_surface_capabilities(physical_device.handle, self.surface)?; let present_modes = self .instance .surface_loader - .get_physical_device_surface_present_modes(physical_device.handle, self.handle)?; + .get_physical_device_surface_present_modes(physical_device.handle, self.surface)?; Ok(SwapchainSupportDetails( formats, @@ -87,8 +87,8 @@ impl Drop for VkSurface { unsafe { self.instance .surface_loader - .destroy_surface(self.handle, None); + .destroy_surface(self.surface, None); } - log::debug!("Surface destroyed ({:?})", self.handle); + log::debug!("Surface destroyed ({:?})", self.surface); } } diff --git a/src/renderer/vulkan/vk_swapchain.rs b/src/vulkan/vk_swapchain.rs similarity index 94% rename from src/renderer/vulkan/vk_swapchain.rs rename to src/vulkan/vk_swapchain.rs index e578d98..b60f1ed 100644 --- a/src/renderer/vulkan/vk_swapchain.rs +++ b/src/vulkan/vk_swapchain.rs @@ -1,5 +1,8 @@ -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; @@ -8,7 +11,7 @@ pub struct VkSwapchain { surface: Arc, device: Arc, - pub(super) handle: Option, + pub(super) swapchain: Option, swapchain_support_details: SwapchainSupportDetails, pub(super) desired_image_count: u32, @@ -61,7 +64,7 @@ impl VkSwapchain { surface: surface.clone(), device: device.clone(), - handle: None, + swapchain: None, new_requested_surface_resolution: None, swapchain_support_details, desired_image_count, @@ -86,7 +89,7 @@ impl VkSwapchain { let mut swapchain_create_info = self.create_swapchain_info(&self.surface); - if let Some(old_swapchain) = self.handle { + if let Some(old_swapchain) = self.swapchain { swapchain_create_info.old_swapchain = old_swapchain; } @@ -111,14 +114,14 @@ impl VkSwapchain { .collect::>(); if log::log_enabled!(log::Level::Debug) { - let label = match self.handle { + let label = match self.swapchain { None => "Swapchain created", Some(_) => "Swapchain updated", }; log::debug!("{label} ({swapchain:?}) : {swapchain_create_info:#?}"); } - self.handle = Some(swapchain); + self.swapchain = Some(swapchain); self.present_image_views = Some(present_images_view); self.present_images = Some(present_images); @@ -174,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.handle.unwrap(), + self.swapchain.unwrap(), u64::MAX, semaphore.handle, vk::Fence::null(), @@ -188,7 +191,7 @@ impl VkSwapchain { fn create_swapchain_info(&self, surface: &VkSurface) -> vk::SwapchainCreateInfoKHR { vk::SwapchainCreateInfoKHR::default() - .surface(surface.handle) + .surface(surface.surface) .min_image_count(self.desired_image_count) .image_color_space(self.surface_format.color_space) .image_format(self.surface_format.format) @@ -284,13 +287,13 @@ impl VkSwapchain { impl Drop for VkSwapchain { fn drop(&mut self) { - if let Some(swapchain) = self.handle { + if let Some(swapchain) = self.swapchain { unsafe { self.device .swapchain_loader .destroy_swapchain(swapchain, None); } - self.handle = None; + self.swapchain = None; log::debug!("Swapchain destroyed ({swapchain:?})"); } }