1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 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, }