diff --git a/src/backend/vulkan/Cargo.toml b/src/backend/vulkan/Cargo.toml index b08d8f55b5..0ba16514ac 100644 --- a/src/backend/vulkan/Cargo.toml +++ b/src/backend/vulkan/Cargo.toml @@ -24,7 +24,7 @@ arrayvec = "0.5" byteorder = "1" log = "0.4" libc = { version = "0.2", optional = true } -ash = "0.32" +ash = "0.33.1" hal = { path = "../../hal", version = "0.9", package = "gfx-hal" } parking_lot = "0.11" smallvec = "1.0" diff --git a/src/backend/vulkan/src/command.rs b/src/backend/vulkan/src/command.rs index e7ab354b1b..f7d7eb0225 100644 --- a/src/backend/vulkan/src/command.rs +++ b/src/backend/vulkan/src/command.rs @@ -1,7 +1,4 @@ -use ash::{ - version::{DeviceV1_0, DeviceV1_2}, - vk, -}; +use ash::vk; use smallvec::SmallVec; use std::{collections::hash_map::Entry, ffi::CString, mem, ops::Range, slice, sync::Arc}; diff --git a/src/backend/vulkan/src/device.rs b/src/backend/vulkan/src/device.rs index e012826859..8e10c85771 100644 --- a/src/backend/vulkan/src/device.rs +++ b/src/backend/vulkan/src/device.rs @@ -1,5 +1,5 @@ use arrayvec::ArrayVec; -use ash::{extensions::khr, version::DeviceV1_0, vk}; +use ash::{extensions::khr, vk}; use inplace_it::inplace_or_alloc_from_iter; use smallvec::SmallVec; @@ -1982,8 +1982,7 @@ impl d::Device for super::Device { sparse: hal::memory::SparseFlags, type_mask: u32, size: u64, - ) -> Result<(n::Buffer, n::Memory), hal::external_memory::ExternalResourceError> - { + ) -> Result<(n::Buffer, n::Memory), hal::external_memory::ExternalResourceError> { if self.shared.extension_fns.external_memory.is_none() { panic!( "This function rely on `Feature::EXTERNAL_MEMORY`, but the feature is not enabled" @@ -2013,9 +2012,7 @@ impl d::Device for super::Device { return Err(d::OutOfMemory::Device.into()) } Err(vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR) => { - return Err( - hal::external_memory::ExternalResourceError::InvalidExternalHandle, - ) + return Err(hal::external_memory::ExternalResourceError::InvalidExternalHandle) } _ => unreachable!(), }; @@ -2173,8 +2170,8 @@ impl d::Device for super::Device { Err(vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR) => { error!("Failed to get memory fd properties"); return Err( - hal::external_memory::ExternalResourceError::InvalidExternalHandle, - ); + hal::external_memory::ExternalResourceError::InvalidExternalHandle, + ); } err => { panic!("Unexpected error: {:#?}", err); @@ -2187,7 +2184,11 @@ impl d::Device for super::Device { .find(|id| buffer_req.type_mask & type_mask & (1 << id) & vk_memory_bits != 0) { Some(id) => id.into(), - None => return Err(hal::external_memory::ExternalResourceError::NoValidMemoryTypeId), + None => { + return Err( + hal::external_memory::ExternalResourceError::NoValidMemoryTypeId, + ) + } }; let mut import_memory_info = vk::ImportMemoryFdInfoKHR::builder() @@ -2212,34 +2213,39 @@ impl d::Device for super::Device { let handle = external_memory.handle().unwrap(); let external_memory_extension = self.shared.extension_fns.external_memory_win32.as_ref().expect("This function rely on `Feature::EXTERNAL_MEMORY`, but the feature is not enabled"); - let vk_memory_bits = { - use std::os::windows::io::AsRawHandle; - let mut memory_handle_properties = - vk::MemoryWin32HandlePropertiesKHR::builder().build(); - match external_memory_extension.get_memory_win32_handle_properties_khr( - self.shared.raw.handle(), - vk_external_memory_type, - handle.as_raw_handle(), - &mut memory_handle_properties, - ) { - vk::Result::SUCCESS => (), - vk::Result::ERROR_OUT_OF_HOST_MEMORY => { - return Err(d::OutOfMemory::Host.into()) - } - vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR => return Err( - hal::external_memory::ExternalResourceError::InvalidExternalHandle, - ), - _ => unreachable!(), + let vk_memory_bits = + { + use std::os::windows::io::AsRawHandle; + let mut memory_handle_properties = + vk::MemoryWin32HandlePropertiesKHR::builder().build(); + match external_memory_extension.get_memory_win32_handle_properties_khr( + self.shared.raw.handle(), + vk_external_memory_type, + handle.as_raw_handle(), + &mut memory_handle_properties, + ) { + vk::Result::SUCCESS => (), + vk::Result::ERROR_OUT_OF_HOST_MEMORY => { + return Err(d::OutOfMemory::Host.into()) + } + vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR => return Err( + hal::external_memory::ExternalResourceError::InvalidExternalHandle, + ), + _ => unreachable!(), + }; + memory_handle_properties.memory_type_bits }; - memory_handle_properties.memory_type_bits - }; let mem_type = match (0..32) .into_iter() .find(|id| buffer_req.type_mask & type_mask & (1 << id) & vk_memory_bits != 0) { Some(id) => id.into(), - None => return Err(hal::external_memory::ExternalResourceError::NoValidMemoryTypeId), + None => { + return Err( + hal::external_memory::ExternalResourceError::NoValidMemoryTypeId, + ) + } }; let mut import_memory_info = vk::ImportMemoryWin32HandleInfoKHR::builder() @@ -2263,35 +2269,40 @@ impl d::Device for super::Device { let ptr = external_memory.ptr().unwrap(); let external_memory_extension = self.shared.extension_fns.external_memory_host.as_ref().expect("This function rely on `Feature::EXTERNAL_MEMORY`, but the feature is not enabled"); - let vk_memory_bits = { - let mut memory_ptr_properties = - vk::MemoryHostPointerPropertiesEXT::builder().build(); - match external_memory_extension.get_memory_host_pointer_properties_ext( - self.shared.raw.handle(), - vk_external_memory_type, - ptr.as_raw_ptr(), - &mut memory_ptr_properties, - ) { - vk::Result::SUCCESS => (), - vk::Result::ERROR_OUT_OF_HOST_MEMORY => { - return Err(d::OutOfMemory::Host.into()) - } - vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR => return Err( - hal::external_memory::ExternalResourceError::InvalidExternalHandle, - ), - err => { - panic!("Unexpected error: {:#?}", err); - } + let vk_memory_bits = + { + let mut memory_ptr_properties = + vk::MemoryHostPointerPropertiesEXT::builder().build(); + match external_memory_extension.get_memory_host_pointer_properties_ext( + self.shared.raw.handle(), + vk_external_memory_type, + ptr.as_raw_ptr(), + &mut memory_ptr_properties, + ) { + vk::Result::SUCCESS => (), + vk::Result::ERROR_OUT_OF_HOST_MEMORY => { + return Err(d::OutOfMemory::Host.into()) + } + vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR => return Err( + hal::external_memory::ExternalResourceError::InvalidExternalHandle, + ), + err => { + panic!("Unexpected error: {:#?}", err); + } + }; + memory_ptr_properties.memory_type_bits }; - memory_ptr_properties.memory_type_bits - }; let mem_type = match (0..32) .into_iter() .find(|id| buffer_req.type_mask & type_mask & (1 << id) & vk_memory_bits != 0) { Some(id) => id.into(), - None => return Err(hal::external_memory::ExternalResourceError::NoValidMemoryTypeId), + None => { + return Err( + hal::external_memory::ExternalResourceError::NoValidMemoryTypeId, + ) + } }; let mut import_memory_info = vk::ImportMemoryHostPointerInfoEXT::builder() @@ -2400,8 +2411,9 @@ impl d::Device for super::Device { if let hal::external_memory::ExternalImageMemoryType::DmaBuf(dma_modifiers) = external_memory_type { - if dma_modifiers.is_empty() {(None, None)} - else { + if dma_modifiers.is_empty() { + (None, None) + } else { let drm_modifier_list: Vec = dma_modifiers .iter() .filter_map(|drm_modifier| { @@ -2415,10 +2427,11 @@ impl d::Device for super::Device { } }) .collect(); - let image_format_modifier_list = vk::ImageDrmFormatModifierListCreateInfoEXT::builder() + let image_format_modifier_list = + vk::ImageDrmFormatModifierListCreateInfoEXT::builder() .drm_format_modifiers(drm_modifier_list.as_slice()) .build(); - (Some(image_format_modifier_list),Some(drm_modifier_list),) + (Some(image_format_modifier_list), Some(drm_modifier_list)) } } else { (None, None) @@ -2508,9 +2521,7 @@ impl d::Device for super::Device { self.destroy_image(image); match err { vk::Result::ERROR_TOO_MANY_OBJECTS => { - return Err( - hal::external_memory::ExternalResourceError::TooManyObjects, - ); + return Err(hal::external_memory::ExternalResourceError::TooManyObjects); } vk::Result::ERROR_OUT_OF_HOST_MEMORY => { return Err(d::OutOfMemory::Host.into()); @@ -2706,8 +2717,8 @@ impl d::Device for super::Device { Err(vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR) => { error!("Failed to get memory fd properties"); return Err( - hal::external_memory::ExternalResourceError::InvalidExternalHandle, - ); + hal::external_memory::ExternalResourceError::InvalidExternalHandle, + ); } unexpected_error => { panic!( @@ -2723,7 +2734,11 @@ impl d::Device for super::Device { .find(|id| image_req.type_mask & type_mask & (1 << id) & vk_memory_bits != 0) { Some(id) => id.into(), - None => return Err(hal::external_memory::ExternalResourceError::NoValidMemoryTypeId), + None => { + return Err( + hal::external_memory::ExternalResourceError::NoValidMemoryTypeId, + ) + } }; let mut import_memory_info = vk::ImportMemoryFdInfoKHR::builder() @@ -2748,45 +2763,47 @@ impl d::Device for super::Device { #[cfg(windows)] hal::external_memory::PlatformMemoryType::Handle => { let handle = external_memory.handle().unwrap(); - let external_memory_extension = match self - .shared - .extension_fns - .external_memory_win32 - { - Some(ref functor) => functor, - _ => { - panic!("External memory windows handle extension not supported"); - } - }; - - let vk_memory_bits = { - use std::os::windows::io::AsRawHandle; - let mut memory_handle_properties = - vk::MemoryWin32HandlePropertiesKHR::builder().build(); - match external_memory_extension.get_memory_win32_handle_properties_khr( - self.shared.raw.handle(), - vk_external_memory_type, - handle.as_raw_handle(), - &mut memory_handle_properties, - ) { - vk::Result::SUCCESS => (), - vk::Result::ERROR_OUT_OF_HOST_MEMORY => { - return Err(d::OutOfMemory::Host.into()) + let external_memory_extension = + match self.shared.extension_fns.external_memory_win32 { + Some(ref functor) => functor, + _ => { + panic!("External memory windows handle extension not supported"); } - vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR => return Err( - hal::external_memory::ExternalResourceError::InvalidExternalHandle, - ), - _ => unreachable!(), }; - memory_handle_properties.memory_type_bits - }; + + let vk_memory_bits = + { + use std::os::windows::io::AsRawHandle; + let mut memory_handle_properties = + vk::MemoryWin32HandlePropertiesKHR::builder().build(); + match external_memory_extension.get_memory_win32_handle_properties_khr( + self.shared.raw.handle(), + vk_external_memory_type, + handle.as_raw_handle(), + &mut memory_handle_properties, + ) { + vk::Result::SUCCESS => (), + vk::Result::ERROR_OUT_OF_HOST_MEMORY => { + return Err(d::OutOfMemory::Host.into()) + } + vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR => return Err( + hal::external_memory::ExternalResourceError::InvalidExternalHandle, + ), + _ => unreachable!(), + }; + memory_handle_properties.memory_type_bits + }; let mem_type = match (0..32) .into_iter() .find(|id| image_req.type_mask & type_mask & (1 << id) & vk_memory_bits != 0) { Some(id) => id.into(), - None => return Err(hal::external_memory::ExternalResourceError::NoValidMemoryTypeId), + None => { + return Err( + hal::external_memory::ExternalResourceError::NoValidMemoryTypeId, + ) + } }; let mut import_memory_info = vk::ImportMemoryWin32HandleInfoKHR::builder() @@ -2823,9 +2840,11 @@ impl d::Device for super::Device { vk::Result::ERROR_OUT_OF_HOST_MEMORY => { return Err(d::OutOfMemory::Host.into()) } - vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR => return Err( - hal::external_memory::ExternalResourceError::InvalidExternalHandle, - ), + vk::Result::ERROR_INVALID_EXTERNAL_HANDLE_KHR => { + return Err( + hal::external_memory::ExternalResourceError::InvalidExternalHandle, + ) + } unexpected_error => { panic!("Unexpected error on `get_memory_host_pointer_properties_ext`: {:#?}", unexpected_error); } @@ -2838,7 +2857,11 @@ impl d::Device for super::Device { .find(|id| image_req.type_mask & type_mask & (1 << id) & vk_memory_bits != 0) { Some(id) => id.into(), - None => return Err(hal::external_memory::ExternalResourceError::NoValidMemoryTypeId), + None => { + return Err( + hal::external_memory::ExternalResourceError::NoValidMemoryTypeId, + ) + } }; let mut import_memory_info = vk::ImportMemoryHostPointerInfoEXT::builder() diff --git a/src/backend/vulkan/src/lib.rs b/src/backend/vulkan/src/lib.rs index f1a06b58de..5a04dce086 100644 --- a/src/backend/vulkan/src/lib.rs +++ b/src/backend/vulkan/src/lib.rs @@ -32,7 +32,6 @@ use ash::Entry; type Entry = ash::EntryCustom<()>; use ash::{ extensions::{ext, khr, nv::MeshShader}, - version::{DeviceV1_0, EntryV1_0, InstanceV1_0}, vk, }; @@ -594,7 +593,7 @@ impl hal::Instance for Instance { libc::dlsym(libc::RTLD_NEXT, name.as_ptr()) }); - let driver_api_version = match entry.try_enumerate_instance_version() { + let driver_api_version = match entry?.try_enumerate_instance_version() { // Vulkan 1.1+ Ok(Some(version)) => version.into(), diff --git a/src/backend/vulkan/src/native.rs b/src/backend/vulkan/src/native.rs index e2520a6b8b..e9ce68e7f5 100644 --- a/src/backend/vulkan/src/native.rs +++ b/src/backend/vulkan/src/native.rs @@ -1,10 +1,10 @@ use crate::{Backend, RawDevice, ROUGH_MAX_ATTACHMENT_COUNT}; -use ash::{version::DeviceV1_0, vk}; use hal::{ device::OutOfMemory, image::{Extent, SubresourceRange}, pso, }; +use ash::vk; use inplace_it::inplace_or_alloc_from_iter; use parking_lot::Mutex; use smallvec::SmallVec; diff --git a/src/backend/vulkan/src/physical_device.rs b/src/backend/vulkan/src/physical_device.rs index e6db021308..3b27b0c5c9 100644 --- a/src/backend/vulkan/src/physical_device.rs +++ b/src/backend/vulkan/src/physical_device.rs @@ -1,6 +1,5 @@ use ash::{ extensions::{khr::DrawIndirectCount, khr::Swapchain, nv::MeshShader}, - version::{DeviceV1_0, InstanceV1_0}, vk, }; @@ -681,7 +680,6 @@ impl PhysicalDeviceInfo { match get_device_properties { ExtensionFn::Promoted => { - use ash::version::InstanceV1_1; unsafe { instance .inner @@ -1249,7 +1247,8 @@ impl adapter::PhysicalDevice for PhysicalDevice { (format_properties, Vec::new()) } Some(ref extension) => { - let mut raw_format_modifiers: Vec = Vec::new(); + let mut raw_format_modifiers: Vec = + Vec::new(); let mut drm_format_properties = vk::DrmFormatModifierPropertiesListEXT::builder().build(); let mut format_properties2 = vk::FormatProperties2::builder() @@ -1258,20 +1257,23 @@ impl adapter::PhysicalDevice for PhysicalDevice { // Ash does not implement the "double call" behaviour for this function, so it is implemented here. match extension { ExtensionFn::Promoted => { - use ash::version::InstanceV1_1; self.instance.inner.get_physical_device_format_properties2( self.handle, format.map_or(vk::Format::UNDEFINED, conv::map_format), &mut format_properties2, ); - raw_format_modifiers.reserve_exact(drm_format_properties.drm_format_modifier_count as usize); - drm_format_properties.p_drm_format_modifier_properties = raw_format_modifiers.as_mut_ptr(); + raw_format_modifiers.reserve_exact( + drm_format_properties.drm_format_modifier_count as usize, + ); + drm_format_properties.p_drm_format_modifier_properties = + raw_format_modifiers.as_mut_ptr(); self.instance.inner.get_physical_device_format_properties2( self.handle, format.map_or(vk::Format::UNDEFINED, conv::map_format), &mut format_properties2, ); - raw_format_modifiers.set_len(drm_format_properties.drm_format_modifier_count as usize); + raw_format_modifiers + .set_len(drm_format_properties.drm_format_modifier_count as usize); } ExtensionFn::Extension(extension) => { extension.get_physical_device_format_properties2_khr( @@ -1279,14 +1281,18 @@ impl adapter::PhysicalDevice for PhysicalDevice { format.map_or(vk::Format::UNDEFINED, conv::map_format), &mut format_properties2, ); - raw_format_modifiers.reserve_exact(drm_format_properties.drm_format_modifier_count as usize); - drm_format_properties.p_drm_format_modifier_properties = raw_format_modifiers.as_mut_ptr(); + raw_format_modifiers.reserve_exact( + drm_format_properties.drm_format_modifier_count as usize, + ); + drm_format_properties.p_drm_format_modifier_properties = + raw_format_modifiers.as_mut_ptr(); extension.get_physical_device_format_properties2_khr( self.handle, format.map_or(vk::Format::UNDEFINED, conv::map_format), &mut format_properties2, ); - raw_format_modifiers.set_len(drm_format_properties.drm_format_modifier_count as usize); + raw_format_modifiers + .set_len(drm_format_properties.drm_format_modifier_count as usize); } } @@ -1450,7 +1456,6 @@ impl adapter::PhysicalDevice for PhysicalDevice { external_buffer_properties.external_memory_properties } Some(ExtensionFn::Promoted) => { - use ash::version::InstanceV1_1; let mut external_buffer_properties = vk::ExternalBufferProperties::builder().build(); unsafe { @@ -1503,15 +1508,16 @@ impl adapter::PhysicalDevice for PhysicalDevice { usage: image::Usage, view_caps: image::ViewCapabilities, external_memory_type: external_memory::ExternalMemoryType, - ) -> Result - { + ) -> Result< + external_memory::ExternalMemoryProperties, + external_memory::ExternalImagePropertiesError, + > { if self.instance.external_memory_capabilities.is_none() { panic!( "This function rely on `Feature::EXTERNAL_MEMORY`, but the feature is not enabled" ); } - use ash::version::InstanceV1_1; let external_memory_type_flags: hal::external_memory::ExternalMemoryTypeFlags = external_memory_type.into(); let vk_external_memory_type = @@ -1730,15 +1736,12 @@ impl adapter::PhysicalDevice for PhysicalDevice { .build(); match get_physical_device_properties { - ExtensionFn::Promoted => { - use ash::version::InstanceV1_1; - unsafe { - self.instance.inner.get_physical_device_properties2( - self.handle, - &mut physical_device_properties2, - ); - } - } + ExtensionFn::Promoted => unsafe { + self.instance.inner.get_physical_device_properties2( + self.handle, + &mut physical_device_properties2, + ); + }, ExtensionFn::Extension(get_physical_device_properties) => unsafe { get_physical_device_properties.get_physical_device_properties2_khr( self.handle, diff --git a/src/backend/vulkan/src/pool.rs b/src/backend/vulkan/src/pool.rs index 26a1fd41b1..2f2bde4a3e 100644 --- a/src/backend/vulkan/src/pool.rs +++ b/src/backend/vulkan/src/pool.rs @@ -1,7 +1,7 @@ use crate::{command::CommandBuffer, conv, Backend, RawDevice}; use hal::{command, pool}; -use ash::{version::DeviceV1_0, vk}; +use ash::vk; use inplace_it::inplace_or_alloc_from_iter; use std::sync::Arc; diff --git a/src/backend/vulkan/src/window.rs b/src/backend/vulkan/src/window.rs index 9e35e79374..ea57c3997e 100644 --- a/src/backend/vulkan/src/window.rs +++ b/src/backend/vulkan/src/window.rs @@ -1,6 +1,6 @@ use std::{borrow::Borrow, fmt, os::raw::c_void, sync::Arc, time::Instant}; -use ash::{extensions::khr, version::DeviceV1_0 as _, vk}; +use ash::{extensions::khr, vk}; use hal::{format::Format, window as w}; use crate::{ @@ -205,7 +205,7 @@ impl Instance { unsafe { mac_os_loader - .create_mac_os_surface_mvk(&info, None) + .create_mac_os_surface(&info, None) .expect("Unable to create macOS surface") } };