vulkan: move fence to core
This commit is contained in:
parent
7e6facf4e3
commit
3ecee1b17f
9 changed files with 89 additions and 91 deletions
|
|
@ -14,7 +14,8 @@ use {
|
|||
gbm::{GBM_BO_USE_RENDERING, GbmDevice},
|
||||
},
|
||||
vulkan_core::{
|
||||
ApiVersionDisplay, Extensions, VULKAN_API_VERSION, map_extension_properties,
|
||||
ApiVersionDisplay, Extensions, VULKAN_API_VERSION, device::VulkanDeviceInf,
|
||||
map_extension_properties,
|
||||
},
|
||||
},
|
||||
ahash::AHashMap,
|
||||
|
|
@ -639,3 +640,13 @@ fn log_device(
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl VulkanDeviceInf for VulkanDevice {
|
||||
fn device(&self) -> &Device {
|
||||
&self.device
|
||||
}
|
||||
|
||||
fn external_fence_fd(&self) -> &external_fence_fd::Device {
|
||||
&self.external_fence_fd
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,56 +0,0 @@
|
|||
use {
|
||||
crate::{
|
||||
gfx_api::SyncFile,
|
||||
gfx_apis::vulkan::{VulkanError, device::VulkanDevice},
|
||||
},
|
||||
ash::vk::{
|
||||
ExportFenceCreateInfo, ExternalFenceHandleTypeFlags, Fence, FenceCreateInfo,
|
||||
FenceGetFdInfoKHR,
|
||||
},
|
||||
std::rc::Rc,
|
||||
uapi::OwnedFd,
|
||||
};
|
||||
|
||||
pub struct VulkanFence {
|
||||
pub(super) device: Rc<VulkanDevice>,
|
||||
pub(super) fence: Fence,
|
||||
}
|
||||
|
||||
impl Drop for VulkanFence {
|
||||
fn drop(&mut self) {
|
||||
unsafe {
|
||||
self.device.device.destroy_fence(self.fence, None);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl VulkanDevice {
|
||||
pub fn create_fence(self: &Rc<Self>) -> Result<Rc<VulkanFence>, VulkanError> {
|
||||
let fence = {
|
||||
let mut export_info = ExportFenceCreateInfo::default()
|
||||
.handle_types(ExternalFenceHandleTypeFlags::SYNC_FD);
|
||||
let create_info = FenceCreateInfo::default().push_next(&mut export_info);
|
||||
let fence = unsafe { self.device.create_fence(&create_info, None) };
|
||||
fence.map_err(VulkanError::CreateFence)?
|
||||
};
|
||||
Ok(Rc::new(VulkanFence {
|
||||
device: self.clone(),
|
||||
fence,
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
impl VulkanFence {
|
||||
pub fn export_sync_file(&self) -> Result<Option<SyncFile>, VulkanError> {
|
||||
let info = FenceGetFdInfoKHR::default()
|
||||
.fence(self.fence)
|
||||
.handle_type(ExternalFenceHandleTypeFlags::SYNC_FD);
|
||||
let res = unsafe { self.device.external_fence_fd.get_fence_fd(&info) };
|
||||
let fd = res.map_err(VulkanError::ExportSyncFile)?;
|
||||
if fd == -1 {
|
||||
Ok(None)
|
||||
} else {
|
||||
Ok(Some(SyncFile(Rc::new(OwnedFd::new(fd)))))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -12,7 +12,7 @@ use {
|
|||
GfxFormat, GfxTexture, GfxWriteModifier, ReleaseSync, SyncFile,
|
||||
},
|
||||
gfx_apis::vulkan::{
|
||||
VulkanError,
|
||||
VulkanError, VulkanFence,
|
||||
allocator::{VulkanAllocator, VulkanThreadedAllocator},
|
||||
buffer_cache::{GenericBufferWriter, VulkanBuffer, VulkanBufferCache},
|
||||
command::{VulkanCommandBuffer, VulkanCommandPool},
|
||||
|
|
@ -20,7 +20,6 @@ use {
|
|||
descriptor_buffer::VulkanDescriptorBufferWriter,
|
||||
device::VulkanDevice,
|
||||
eotfs::{EOTF_LINEAR, EotfExt, VulkanEotf},
|
||||
fence::VulkanFence,
|
||||
image::{QueueFamily, QueueState, QueueTransfer, VulkanImage, VulkanImageMemory},
|
||||
pipeline::{PipelineCreateInfo, VulkanPipeline},
|
||||
sampler::VulkanSampler,
|
||||
|
|
@ -40,6 +39,7 @@ use {
|
|||
stack::Stack,
|
||||
},
|
||||
video::dmabuf::{DMA_BUF_SYNC_READ, DMA_BUF_SYNC_WRITE, dma_buf_export_sync_file},
|
||||
vulkan_core::fence::VulkanDeviceFenceExt,
|
||||
},
|
||||
ahash::AHashMap,
|
||||
arrayvec::ArrayVec,
|
||||
|
|
|
|||
|
|
@ -4,10 +4,9 @@ use {
|
|||
format::Format,
|
||||
gfx_api::SyncFile,
|
||||
gfx_apis::vulkan::{
|
||||
VulkanError,
|
||||
VulkanError, VulkanFence,
|
||||
allocator::VulkanAllocation,
|
||||
command::VulkanCommandBuffer,
|
||||
fence::VulkanFence,
|
||||
image::{QueueFamily, QueueState, VulkanImage, VulkanImageMemory},
|
||||
renderer::{VulkanRenderer, image_barrier},
|
||||
staging::VulkanStagingBuffer,
|
||||
|
|
@ -15,6 +14,7 @@ use {
|
|||
},
|
||||
rect::Rect,
|
||||
utils::errorfmt::ErrorFmt,
|
||||
vulkan_core::fence::VulkanDeviceFenceExt,
|
||||
},
|
||||
ash::vk::{
|
||||
AccessFlags2, Buffer, BufferImageCopy2, BufferMemoryBarrier2, CommandBufferBeginInfo,
|
||||
|
|
|
|||
|
|
@ -11,10 +11,9 @@ use {
|
|||
AsyncShmGfxTextureCallback, PendingShmTransfer, ShmMemory, ShmMemoryBacking, SyncFile,
|
||||
},
|
||||
gfx_apis::vulkan::{
|
||||
VulkanError,
|
||||
VulkanError, VulkanFence,
|
||||
command::VulkanCommandBuffer,
|
||||
dmabuf_buffer::{TRANSFER_QUEUE_BUFFER_ALIGNMENT, VulkanDmabufBuffer},
|
||||
fence::VulkanFence,
|
||||
image::{QueueFamily, QueueState, QueueTransfer, VulkanImage, VulkanImageMemory},
|
||||
renderer::image_barrier,
|
||||
shm_image::VulkanShmImage,
|
||||
|
|
@ -22,6 +21,7 @@ use {
|
|||
},
|
||||
rect::{Rect, Region},
|
||||
utils::{clonecell::CloneCell, errorfmt::ErrorFmt},
|
||||
vulkan_core::fence::VulkanDeviceFenceExt,
|
||||
},
|
||||
arrayvec::ArrayVec,
|
||||
ash::vk::{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue