Skip to main content

Image

Struct Image 

Source
pub struct Image {
    pub device: Device,
    pub handle: Image,
    pub info: ImageInfo,
    pub name: Option<String>,
    /* private fields */
}
Expand description

Smart pointer handle to an image object.

Also contains information about the object.

let fmt = vk::Format::R8G8B8A8_UNORM;
let usage = vk::ImageUsageFlags::SAMPLED;
let info = ImageInfo::image_2d(320, 200, fmt, usage);
let my_img = Image::create(&device, info)?;

assert_eq!(my_img.info, info);
assert_ne!(my_img.handle, vk::Image::null());

Fields§

§device: Device

The device which owns this image resource.

Note: This field is read-only.

§handle: Image

The native Vulkan resource handle of this image.

Note: This field is read-only.

§info: ImageInfo

Information used to create this resource.

Note: This field is read-only.

§name: Option<String>

A name for debugging purposes.

Implementations§

Source§

impl Image

Source

pub fn create( device: &Device, info: impl Into<ImageInfo>, ) -> Result<Self, DriverError>

Creates a new image on the given device.

§Examples

Basic usage:

let info = ImageInfo::image_2d(
    32,
    32,
    vk::Format::R8G8B8A8_UNORM,
    vk::ImageUsageFlags::SAMPLED,
);
let image = Image::create(&device, info)?;

assert_ne!(image.handle, vk::Image::null());
assert_eq!(image.info.width, 32);
assert_eq!(image.info.height, 32);
Source

pub fn access( &self, access: AccessType, access_range: ImageSubresourceRange, ) -> impl Iterator<Item = (AccessType, ImageSubresourceRange)> + '_

Keeps track of some next access which affects a range this image.

Returns the previous access for which a pipeline barrier should be used to prevent data corruption.

§Note

Used to maintain object state when passing a vk-graph-created vk::Image handle to external code such as Ash or Erupt bindings.

§Examples

Basic usage:

// Initially we want to "Read Other"
let next = AccessType::AnyShaderReadOther;
let mut prev = Image::access(&my_image, next, my_subresource_range);
assert_eq!(prev.next().unwrap().0, AccessType::Nothing);

// External code may now "Read Other"; no barrier required

// Subsequently we want to "Write"
let next = AccessType::FragmentShaderWrite;
let mut prev = Image::access(&my_image, next, my_subresource_range);
assert_eq!(prev.next().unwrap().0, AccessType::AnyShaderReadOther);

// A barrier on "Read Other" before "Write" is required!
Source

pub fn debug_name(self, name: impl Into<String>) -> Self

Sets the debugging name assigned to this image.

Source

pub fn from_raw( device: &Device, handle: Image, info: impl Into<ImageInfo>, ) -> Self

Consumes a Vulkan image created by some other library.

The image is not destroyed automatically on drop, unlike images created through the Image::create function.

Source

pub unsafe fn to_detached(&self) -> Self

Produces a new Image sharing the same Vulkan handle with independent access tracking.

The returned image retains the handle, device, and debug name of self but starts with no prior access history (AccessType::Nothing) and does not claim ownership of the image’s memory backing. Internal caches are moved out of self so they are not duplicated.

This is used to create separate tracking instances for swapchain images that may be used concurrently across different graph executions.

§Safety

The caller must ensure the Vulkan image handle remains valid for the lifetime of the returned Image. This function should only be called on swapchain images or other platform or extension images.

Trait Implementations§

Source§

impl Debug for Image

Source§

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

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

impl Drop for Image

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

fn pin_drop(self: Pin<&mut Self>)

🔬This is a nightly-only experimental API. (pin_ergonomics)
Execute the destructor for this type, but different to Drop::drop, it requires self to be pinned. Read more
Source§

impl PartialEq for Image

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Pool<ImageInfo, Image> for FifoPool

Source§

fn resource(&mut self, info: ImageInfo) -> Result<Lease<Image>, DriverError>

Request a resource.
Source§

impl Pool<ImageInfo, Image> for HashPool

Source§

fn resource(&mut self, info: ImageInfo) -> Result<Lease<Image>, DriverError>

Request a resource.
Source§

impl Pool<ImageInfo, Image> for LazyPool

Source§

fn resource(&mut self, info: ImageInfo) -> Result<Lease<Image>, DriverError>

Request a resource.
Source§

impl Resource for Image

Source§

type Node = ImageNode

The resource handle type.
Source§

impl Eq for Image

Auto Trait Implementations§

§

impl !Freeze for Image

§

impl !RefUnwindSafe for Image

§

impl Send for Image

§

impl Sync for Image

§

impl Unpin for Image

§

impl UnsafeUnpin for Image

§

impl !UnwindSafe for Image

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> 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> Pool<ImageInfoBuilder, Image> for T
where T: Pool<ImageInfo, Image>,

Source§

fn resource( &mut self, builder: ImageInfoBuilder, ) -> Result<Lease<Image>, DriverError>

Request a resource.
Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
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.