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: DeviceThe device which owns this image resource.
Note: This field is read-only.
handle: ImageThe native Vulkan resource handle of this image.
Note: This field is read-only.
info: ImageInfoInformation used to create this resource.
Note: This field is read-only.
name: Option<String>A name for debugging purposes.
Implementations§
Source§impl Image
impl Image
Sourcepub fn create(
device: &Device,
info: impl Into<ImageInfo>,
) -> Result<Self, DriverError>
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);Sourcepub fn access(
&self,
access: AccessType,
access_range: ImageSubresourceRange,
) -> impl Iterator<Item = (AccessType, ImageSubresourceRange)> + '_
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!Sourcepub fn debug_name(self, name: impl Into<String>) -> Self
pub fn debug_name(self, name: impl Into<String>) -> Self
Sets the debugging name assigned to this image.
Sourcepub fn from_raw(
device: &Device,
handle: Image,
info: impl Into<ImageInfo>,
) -> Self
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.
Sourcepub unsafe fn to_detached(&self) -> Self
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.