Enum vulkano::image::ImageLayout
source · #[non_exhaustive]#[repr(i32)]pub enum ImageLayout {
Show 16 variants
Undefined = 0,
General = 1,
ColorAttachmentOptimal = 2,
DepthStencilAttachmentOptimal = 3,
DepthStencilReadOnlyOptimal = 4,
ShaderReadOnlyOptimal = 5,
TransferSrcOptimal = 6,
TransferDstOptimal = 7,
Preinitialized = 8,
DepthReadOnlyStencilAttachmentOptimal = 1_000_117_000,
DepthAttachmentStencilReadOnlyOptimal = 1_000_117_001,
DepthAttachmentOptimal = 1_000_241_000,
DepthReadOnlyOptimal = 1_000_241_001,
StencilAttachmentOptimal = 1_000_241_002,
StencilReadOnlyOptimal = 1_000_241_003,
PresentSrc = 1_000_001_002,
}
Expand description
In-memory layout of the pixel data of an image.
The pixel data of a Vulkan image is arranged in a particular way, which is called its layout. Each image subresource (mipmap level and array layer) in an image can have a different layout, but usually the whole image has its data in the same layout. Layouts are abstract in the sense that the user does not know the specific details of each layout; the device driver is free to implement each layout in the way it sees fit.
The layout of a newly created image is either Undefined
or Preinitialized
. Every
operation that can be performed on an image is only possible with specific layouts, so
before the operation is performed, the user must perform a layout transition on the
image. This rearranges the pixel data from one layout into another. Layout transitions are
performed as part of pipeline barriers in a command buffer.
The General
layout is compatible with any operation, so layout transitions are never
needed. However, the other layouts, while more restricted, are usually better optimised for
a particular type of operation than General
, so they are usually preferred.
Vulkan does not keep track of layouts itself, so it is the responsibility of the user to keep track of this information. When performing a layout transition, the previous layout must be specified as well. Some operations allow for different layouts, but require the user to specify which one. Vulkano helps with this by providing sensible defaults, automatically tracking the layout of each image when creating a command buffer, and adding layout transitions where needed.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Undefined = 0
The layout of the data is unknown, and the image is treated as containing no valid data.
Transitioning from Undefined
will discard any existing pixel data.
General = 1
A general-purpose layout that can be used for any operation. Some operations may only allow
General
, such as storage images, but many have a more specific layout that is better
optimized for that purpose.
ColorAttachmentOptimal = 2
For a color image used as a color or resolve attachment in a framebuffer. Images that are
transitioned into this layout must have the color_attachment
usage enabled.
DepthStencilAttachmentOptimal = 3
A combination of DepthAttachmentOptimal
for the depth aspect of the image,
and StencilAttachmentOptimal
for the stencil aspect of the image.
DepthStencilReadOnlyOptimal = 4
A combination of DepthReadOnlyOptimal
for the depth aspect of the image,
and StencilReadOnlyOptimal
for the stencil aspect of the image.
ShaderReadOnlyOptimal = 5
For a color image used as a (combined) sampled image or input attachment in a shader.
Images that are transitioned into this layout must have the sampled
or input_attachment
usages enabled.
TransferSrcOptimal = 6
For operations that transfer data from an image (copy, blit).
TransferDstOptimal = 7
For operations that transfer data to an image (copy, blit, clear).
Preinitialized = 8
When creating an image, this specifies that the initial data is going to be directly
written to from the CPU. Unlike Undefined
, the image is assumed to contain valid data when
transitioning from this layout. However, this only works right when the image has linear
tiling, optimal tiling gives undefined results.
DepthReadOnlyStencilAttachmentOptimal = 1_000_117_000
A combination of DepthReadOnlyOptimal
for the depth aspect of the image,
and StencilAttachmentOptimal
for the stencil aspect of the image.
DepthAttachmentStencilReadOnlyOptimal = 1_000_117_001
A combination of DepthAttachmentOptimal
for the depth aspect of the image,
and StencilReadOnlyOptimal
for the stencil aspect of the image.
DepthAttachmentOptimal = 1_000_241_000
For a depth image used as a depth attachment in a framebuffer.
DepthReadOnlyOptimal = 1_000_241_001
For a depth image used as a read-only depth attachment in a framebuffer, or as a (combined) sampled image or input attachment in a shader.
StencilAttachmentOptimal = 1_000_241_002
For a stencil image used as a stencil attachment in a framebuffer.
StencilReadOnlyOptimal = 1_000_241_003
For a stencil image used as a read-only stencil attachment in a framebuffer, or as a (combined) sampled image or input attachment in a shader.
PresentSrc = 1_000_001_002
The layout of images that are held in a swapchain. Images are in this layout when they are acquired from the swapchain, and must be transitioned back into this layout before presenting them.
Implementations§
source§impl ImageLayout
impl ImageLayout
sourcepub fn is_writable(self, aspect: ImageAspect) -> bool
pub fn is_writable(self, aspect: ImageAspect) -> bool
If the layout can be used for aspect
, returns whether aspect
can be written to if an
image is in that layout.
Trait Implementations§
source§impl Clone for ImageLayout
impl Clone for ImageLayout
source§fn clone(&self) -> ImageLayout
fn clone(&self) -> ImageLayout
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for ImageLayout
impl Debug for ImageLayout
source§impl Default for ImageLayout
impl Default for ImageLayout
source§impl From<ImageLayout> for ImageLayout
impl From<ImageLayout> for ImageLayout
source§fn from(val: ImageLayout) -> Self
fn from(val: ImageLayout) -> Self
source§impl Hash for ImageLayout
impl Hash for ImageLayout
source§impl PartialEq for ImageLayout
impl PartialEq for ImageLayout
source§fn eq(&self, other: &ImageLayout) -> bool
fn eq(&self, other: &ImageLayout) -> bool
self
and other
values to be equal, and is used
by ==
.