Enum wgpu_hal::vulkan::Fence

source ·
pub enum Fence {
    TimelineSemaphore(Semaphore),
    FencePool {
        last_completed: FenceValue,
        active: Vec<(FenceValue, Fence)>,
        free: Vec<Fence>,
    },
}
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

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.

Fields

§last_completed: FenceValue
§active: Vec<(FenceValue, Fence)>

The pending fence values have to be ascending.

§free: Vec<Fence>

Implementations§

source§

impl Fence

source

fn check_active( device: &Device, last_completed: FenceValue, active: &[(FenceValue, Fence)], ) -> Result<FenceValue, DeviceError>

Return the highest FenceValue among the signalled fences in active.

As an optimization, assume that we already know that the fence has reached last_completed, and don’t bother checking fences whose values are less than that: those fences remain in the active array only because we haven’t called maintain yet to clean them up.

source

fn get_latest( &self, device: &Device, extension: Option<&ExtensionFn<Device>>, ) -> Result<FenceValue, DeviceError>

Return the highest signalled FenceValue for self.

source

fn maintain(&mut self, device: &Device) -> Result<(), DeviceError>

Trim the internal state of this Fence.

This function has no externally visible effect, but you should call it periodically to keep this fence’s resource consumption under control.

For fences using the FencePool implementation, this function recycles fences that have been signaled. If you don’t call this, Queue::submit will just keep allocating a new Vulkan fence every time it’s called.

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 DynResource for Fence

source§

fn as_any(&self) -> &dyn Any

source§

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

source§

impl DynFence for Fence

Auto Trait Implementations§

§

impl Freeze for Fence

§

impl RefUnwindSafe for Fence

§

impl Send for Fence

§

impl Sync for Fence

§

impl Unpin 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<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, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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,