aboutsummaryrefslogtreecommitdiff
path: root/src/image/layout.rs
diff options
context:
space:
mode:
authorJason Macnak <natsu@google.com>2021-09-08 17:34:26 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-09-08 17:34:26 +0000
commit15721e363ddf230eb45281365a43d0235a28950d (patch)
tree3c7a84d825c70fcf8bfe8d1d0d29be91c32bd737 /src/image/layout.rs
parentd7fde7d22818ce4ba369b5da19ba9953b76cce48 (diff)
parentbadf994436f0a0dcd313d61988172ecac5ad4acc (diff)
downloadvulkano-15721e363ddf230eb45281365a43d0235a28950d.tar.gz
Import vulkano rust crate (attempt #2) am: 08bdde554c am: 7f5097d6a2 am: badf994436
Original change: https://android-review.googlesource.com/c/platform/external/rust/crates/vulkano/+/1818913 Change-Id: Iee62c85b489f55475d4ad6d30f9cc58eb864779e
Diffstat (limited to 'src/image/layout.rs')
-rw-r--r--src/image/layout.rs60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/image/layout.rs b/src/image/layout.rs
new file mode 100644
index 0000000..2e29f58
--- /dev/null
+++ b/src/image/layout.rs
@@ -0,0 +1,60 @@
+// Copyright (c) 2016 The vulkano developers
+// Licensed under the Apache License, Version 2.0
+// <LICENSE-APACHE or
+// https://www.apache.org/licenses/LICENSE-2.0> or the MIT
+// license <LICENSE-MIT or https://opensource.org/licenses/MIT>,
+// at your option. All files in the project carrying such
+// notice may not be copied, modified, or distributed except
+// according to those terms.
+
+/// Layout of an image.
+///
+/// > **Note**: In vulkano, image layouts are mostly a low-level detail. You can ignore them,
+/// > unless you use an unsafe function that states in its documentation that you must take care of
+/// > an image's layout.
+///
+/// In the Vulkan API, each mipmap level of each array layer is in one of the layouts of this enum.
+///
+/// Unless you use some sort of high-level shortcut function, an image always starts in either
+/// the `Undefined` or the `Preinitialized` layout.
+/// Before you can use an image for a given purpose, you must ensure that the image in question is
+/// in the layout required for that purpose. For example if you want to write data to an image, you
+/// must first transition the image to the `TransferDstOptimal` layout. The `General` layout can
+/// also be used as a general-purpose fit-all layout, but using it will result in slower operations.
+///
+/// Transitioning between layouts can only be done through a GPU-side operation that is part of
+/// a command buffer.
+#[derive(Debug, Copy, Clone, PartialEq, Eq)]
+#[repr(i32)]
+pub enum ImageLayout {
+ Undefined = ash::vk::ImageLayout::UNDEFINED.as_raw(),
+ General = ash::vk::ImageLayout::GENERAL.as_raw(),
+ ColorAttachmentOptimal = ash::vk::ImageLayout::COLOR_ATTACHMENT_OPTIMAL.as_raw(),
+ DepthStencilAttachmentOptimal = ash::vk::ImageLayout::DEPTH_STENCIL_ATTACHMENT_OPTIMAL.as_raw(),
+ DepthStencilReadOnlyOptimal = ash::vk::ImageLayout::DEPTH_STENCIL_READ_ONLY_OPTIMAL.as_raw(),
+ ShaderReadOnlyOptimal = ash::vk::ImageLayout::SHADER_READ_ONLY_OPTIMAL.as_raw(),
+ TransferSrcOptimal = ash::vk::ImageLayout::TRANSFER_SRC_OPTIMAL.as_raw(),
+ TransferDstOptimal = ash::vk::ImageLayout::TRANSFER_DST_OPTIMAL.as_raw(),
+ Preinitialized = ash::vk::ImageLayout::PREINITIALIZED.as_raw(),
+ PresentSrc = ash::vk::ImageLayout::PRESENT_SRC_KHR.as_raw(),
+}
+
+impl From<ImageLayout> for ash::vk::ImageLayout {
+ #[inline]
+ fn from(val: ImageLayout) -> Self {
+ Self::from_raw(val as i32)
+ }
+}
+
+/// The set of layouts to use for an image when used in descriptor of various kinds.
+#[derive(Clone, Copy, Debug, PartialEq, Eq)]
+pub struct ImageDescriptorLayouts {
+ /// The image layout to use in a descriptor as a storage image.
+ pub storage_image: ImageLayout,
+ /// The image layout to use in a descriptor as a combined image sampler.
+ pub combined_image_sampler: ImageLayout,
+ /// The image layout to use in a descriptor as a sampled image.
+ pub sampled_image: ImageLayout,
+ /// The image layout to use in a descriptor as an input attachment.
+ pub input_attachment: ImageLayout,
+}