Skip to main content

Fence

Enum Fence 

Source
pub enum Fence {
    TimelineSemaphore(Semaphore),
    FencePool(RwLock<FencePool>),
}
Available on vulkan only.
Expand description

The Api::Fence type for vulkan::Api.

This is an enum because there are two possible implementations of wgpu-hal fences on Vulkan: Vulkan fences, which work on any version of Vulkan, and Vulkan timeline semaphores, which are easier and cheaper but require non-1.0 features.

Device::create_fence returns a TimelineSemaphore if VK_KHR_timeline_semaphore is available and enabled, and a FencePool otherwise.

Variants§

§

TimelineSemaphore(Semaphore)

A Vulkan timeline semaphore.

These are simpler to use than Vulkan fences, since timeline semaphores work exactly the way wpgu_hal::Api::Fence is specified to work.

§

FencePool(RwLock<FencePool>)

A collection of Vulkan fences, each associated with a FenceValue.

The effective FenceValue of this variant is the greater of last_completed and the maximum value associated with a signalled fence in active.

Fences are available in all versions of Vulkan, but since they only have two states, “signaled” and “unsignaled”, we need to use a separate fence for each queue submission we might want to wait for, and remember which FenceValue each one represents.

One should keep the fence pool read while there are any references to the fences inside of them. This ensures there are no race conditions when resetting the fences

Trait Implementations§

Source§

impl Debug for Fence

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl DynFence for Fence

Source§

impl DynResource for Fence

Source§

fn as_any(&self) -> &dyn Any

Source§

fn as_any_mut(&mut self) -> &mut dyn Any

Auto Trait Implementations§

§

impl !Freeze for Fence

§

impl !RefUnwindSafe for Fence

§

impl Send for Fence

§

impl Sync for Fence

§

impl Unpin for Fence

§

impl UnsafeUnpin for Fence

§

impl UnwindSafe for Fence

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast<T> for T

Source§

fn downcast(&self) -> &T

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> Upcast<T> for T

Source§

fn upcast(&self) -> Option<&T>

Source§

impl<T> WasmNotSend for T
where T: Send,

Source§

impl<T> WasmNotSendSync for T

Source§

impl<T> WasmNotSync for T
where T: Sync,