{-# language Strict #-} {-# language CPP #-} {-# language GeneralizedNewtypeDeriving #-} {-# language PatternSynonyms #-} {-# language DataKinds #-} {-# language TypeOperators #-} {-# language DuplicateRecordFields #-} module Graphics.Vulkan.Core10.ImageView ( VkComponentSwizzle(..) , pattern VK_COMPONENT_SWIZZLE_IDENTITY , pattern VK_COMPONENT_SWIZZLE_ZERO , pattern VK_COMPONENT_SWIZZLE_ONE , pattern VK_COMPONENT_SWIZZLE_R , pattern VK_COMPONENT_SWIZZLE_G , pattern VK_COMPONENT_SWIZZLE_B , pattern VK_COMPONENT_SWIZZLE_A , VkImageViewType(..) , pattern VK_IMAGE_VIEW_TYPE_1D , pattern VK_IMAGE_VIEW_TYPE_2D , pattern VK_IMAGE_VIEW_TYPE_3D , pattern VK_IMAGE_VIEW_TYPE_CUBE , pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY , pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY , pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY , VkImageViewCreateFlags(..) , VkImageView , vkCreateImageView , vkDestroyImageView , VkComponentMapping(..) , VkImageSubresourceRange(..) , VkImageViewCreateInfo(..) ) where import Data.Bits ( Bits , FiniteBits ) import Data.Int ( Int32 ) import Data.Word ( Word32 ) import Foreign.Ptr ( Ptr , plusPtr ) import Foreign.Storable ( Storable , Storable(..) ) import GHC.Read ( choose , expectP ) import Graphics.Vulkan.NamedType ( (:::) ) import Text.ParserCombinators.ReadPrec ( (+++) , prec , step ) import Text.Read ( Read(..) , parens ) import Text.Read.Lex ( Lexeme(Ident) ) import Graphics.Vulkan.Core10.Core ( VkFormat(..) , VkResult(..) , VkStructureType(..) , VkFlags ) import Graphics.Vulkan.Core10.DeviceInitialization ( VkAllocationCallbacks(..) , VkDevice ) import Graphics.Vulkan.Core10.MemoryManagement ( VkImage ) import Graphics.Vulkan.Core10.SparseResourceMemoryManagement ( VkImageAspectFlags ) -- ** VkComponentSwizzle -- | VkComponentSwizzle - Specify how a component is swizzled -- -- = Description -- -- - @VK_COMPONENT_SWIZZLE_IDENTITY@ specifies that the component is set -- to the identity swizzle. -- -- - @VK_COMPONENT_SWIZZLE_ZERO@ specifies that the component is set to -- zero. -- -- - @VK_COMPONENT_SWIZZLE_ONE@ specifies that the component is set to -- either 1 or 1.0, depending on whether the type of the image view -- format is integer or floating-point respectively, as determined by -- the [Format -- Definition](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-definition) -- section for each 'Graphics.Vulkan.Core10.Core.VkFormat'. -- -- - @VK_COMPONENT_SWIZZLE_R@ specifies that the component is set to the -- value of the R component of the image. -- -- - @VK_COMPONENT_SWIZZLE_G@ specifies that the component is set to the -- value of the G component of the image. -- -- - @VK_COMPONENT_SWIZZLE_B@ specifies that the component is set to the -- value of the B component of the image. -- -- - @VK_COMPONENT_SWIZZLE_A@ specifies that the component is set to the -- value of the A component of the image. -- -- Setting the identity swizzle on a component is equivalent to setting the -- identity mapping on that component. That is: -- -- +-----------------------------------+-----------------------------------+ -- | Component | Identity Mapping | -- +===================================+===================================+ -- | @components.r@ | @VK_COMPONENT_SWIZZLE_R@ | -- +-----------------------------------+-----------------------------------+ -- | @components.g@ | @VK_COMPONENT_SWIZZLE_G@ | -- +-----------------------------------+-----------------------------------+ -- | @components.b@ | @VK_COMPONENT_SWIZZLE_B@ | -- +-----------------------------------+-----------------------------------+ -- | @components.a@ | @VK_COMPONENT_SWIZZLE_A@ | -- +-----------------------------------+-----------------------------------+ -- -- Component Mappings Equivalent To @VK_COMPONENT_SWIZZLE_IDENTITY@ -- -- = See Also -- -- 'VkComponentMapping' newtype VkComponentSwizzle = VkComponentSwizzle Int32 deriving (Eq, Ord, Storable) instance Show VkComponentSwizzle where showsPrec _ VK_COMPONENT_SWIZZLE_IDENTITY = showString "VK_COMPONENT_SWIZZLE_IDENTITY" showsPrec _ VK_COMPONENT_SWIZZLE_ZERO = showString "VK_COMPONENT_SWIZZLE_ZERO" showsPrec _ VK_COMPONENT_SWIZZLE_ONE = showString "VK_COMPONENT_SWIZZLE_ONE" showsPrec _ VK_COMPONENT_SWIZZLE_R = showString "VK_COMPONENT_SWIZZLE_R" showsPrec _ VK_COMPONENT_SWIZZLE_G = showString "VK_COMPONENT_SWIZZLE_G" showsPrec _ VK_COMPONENT_SWIZZLE_B = showString "VK_COMPONENT_SWIZZLE_B" showsPrec _ VK_COMPONENT_SWIZZLE_A = showString "VK_COMPONENT_SWIZZLE_A" showsPrec p (VkComponentSwizzle x) = showParen (p >= 11) (showString "VkComponentSwizzle " . showsPrec 11 x) instance Read VkComponentSwizzle where readPrec = parens ( choose [ ("VK_COMPONENT_SWIZZLE_IDENTITY", pure VK_COMPONENT_SWIZZLE_IDENTITY) , ("VK_COMPONENT_SWIZZLE_ZERO", pure VK_COMPONENT_SWIZZLE_ZERO) , ("VK_COMPONENT_SWIZZLE_ONE", pure VK_COMPONENT_SWIZZLE_ONE) , ("VK_COMPONENT_SWIZZLE_R", pure VK_COMPONENT_SWIZZLE_R) , ("VK_COMPONENT_SWIZZLE_G", pure VK_COMPONENT_SWIZZLE_G) , ("VK_COMPONENT_SWIZZLE_B", pure VK_COMPONENT_SWIZZLE_B) , ("VK_COMPONENT_SWIZZLE_A", pure VK_COMPONENT_SWIZZLE_A) ] +++ prec 10 (do expectP (Ident "VkComponentSwizzle") v <- step readPrec pure (VkComponentSwizzle v) ) ) -- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_IDENTITY" pattern VK_COMPONENT_SWIZZLE_IDENTITY :: VkComponentSwizzle pattern VK_COMPONENT_SWIZZLE_IDENTITY = VkComponentSwizzle 0 -- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_ZERO" pattern VK_COMPONENT_SWIZZLE_ZERO :: VkComponentSwizzle pattern VK_COMPONENT_SWIZZLE_ZERO = VkComponentSwizzle 1 -- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_ONE" pattern VK_COMPONENT_SWIZZLE_ONE :: VkComponentSwizzle pattern VK_COMPONENT_SWIZZLE_ONE = VkComponentSwizzle 2 -- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_R" pattern VK_COMPONENT_SWIZZLE_R :: VkComponentSwizzle pattern VK_COMPONENT_SWIZZLE_R = VkComponentSwizzle 3 -- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_G" pattern VK_COMPONENT_SWIZZLE_G :: VkComponentSwizzle pattern VK_COMPONENT_SWIZZLE_G = VkComponentSwizzle 4 -- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_B" pattern VK_COMPONENT_SWIZZLE_B :: VkComponentSwizzle pattern VK_COMPONENT_SWIZZLE_B = VkComponentSwizzle 5 -- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_A" pattern VK_COMPONENT_SWIZZLE_A :: VkComponentSwizzle pattern VK_COMPONENT_SWIZZLE_A = VkComponentSwizzle 6 -- ** VkImageViewType -- | VkImageViewType - Image view types -- -- = Description -- -- The exact image view type is partially implicit, based on the image’s -- type and sample count, as well as the view creation parameters as -- described in the [image view compatibility -- table](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views-compatibility) -- for 'vkCreateImageView'. This table also shows which SPIR-V -- @OpTypeImage@ @Dim@ and @Arrayed@ parameters correspond to each image -- view type. -- -- = See Also -- -- 'VkImageViewCreateInfo' newtype VkImageViewType = VkImageViewType Int32 deriving (Eq, Ord, Storable) instance Show VkImageViewType where showsPrec _ VK_IMAGE_VIEW_TYPE_1D = showString "VK_IMAGE_VIEW_TYPE_1D" showsPrec _ VK_IMAGE_VIEW_TYPE_2D = showString "VK_IMAGE_VIEW_TYPE_2D" showsPrec _ VK_IMAGE_VIEW_TYPE_3D = showString "VK_IMAGE_VIEW_TYPE_3D" showsPrec _ VK_IMAGE_VIEW_TYPE_CUBE = showString "VK_IMAGE_VIEW_TYPE_CUBE" showsPrec _ VK_IMAGE_VIEW_TYPE_1D_ARRAY = showString "VK_IMAGE_VIEW_TYPE_1D_ARRAY" showsPrec _ VK_IMAGE_VIEW_TYPE_2D_ARRAY = showString "VK_IMAGE_VIEW_TYPE_2D_ARRAY" showsPrec _ VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = showString "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY" showsPrec p (VkImageViewType x) = showParen (p >= 11) (showString "VkImageViewType " . showsPrec 11 x) instance Read VkImageViewType where readPrec = parens ( choose [ ("VK_IMAGE_VIEW_TYPE_1D", pure VK_IMAGE_VIEW_TYPE_1D) , ("VK_IMAGE_VIEW_TYPE_2D", pure VK_IMAGE_VIEW_TYPE_2D) , ("VK_IMAGE_VIEW_TYPE_3D", pure VK_IMAGE_VIEW_TYPE_3D) , ("VK_IMAGE_VIEW_TYPE_CUBE", pure VK_IMAGE_VIEW_TYPE_CUBE) , ("VK_IMAGE_VIEW_TYPE_1D_ARRAY", pure VK_IMAGE_VIEW_TYPE_1D_ARRAY) , ("VK_IMAGE_VIEW_TYPE_2D_ARRAY", pure VK_IMAGE_VIEW_TYPE_2D_ARRAY) , ("VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", pure VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) ] +++ prec 10 (do expectP (Ident "VkImageViewType") v <- step readPrec pure (VkImageViewType v) ) ) -- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_1D" pattern VK_IMAGE_VIEW_TYPE_1D :: VkImageViewType pattern VK_IMAGE_VIEW_TYPE_1D = VkImageViewType 0 -- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_2D" pattern VK_IMAGE_VIEW_TYPE_2D :: VkImageViewType pattern VK_IMAGE_VIEW_TYPE_2D = VkImageViewType 1 -- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_3D" pattern VK_IMAGE_VIEW_TYPE_3D :: VkImageViewType pattern VK_IMAGE_VIEW_TYPE_3D = VkImageViewType 2 -- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_CUBE" pattern VK_IMAGE_VIEW_TYPE_CUBE :: VkImageViewType pattern VK_IMAGE_VIEW_TYPE_CUBE = VkImageViewType 3 -- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_1D_ARRAY" pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY :: VkImageViewType pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY = VkImageViewType 4 -- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_2D_ARRAY" pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY :: VkImageViewType pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY = VkImageViewType 5 -- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY" pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY :: VkImageViewType pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = VkImageViewType 6 -- ** VkImageViewCreateFlags -- | VkImageViewCreateFlags - Reserved for future use -- -- = Description -- -- @VkImageViewCreateFlags@ is a bitmask type for setting a mask, but is -- currently reserved for future use. -- -- = See Also -- -- 'VkImageViewCreateInfo' newtype VkImageViewCreateFlags = VkImageViewCreateFlags VkFlags deriving (Eq, Ord, Storable, Bits, FiniteBits) instance Show VkImageViewCreateFlags where showsPrec p (VkImageViewCreateFlags x) = showParen (p >= 11) (showString "VkImageViewCreateFlags " . showsPrec 11 x) instance Read VkImageViewCreateFlags where readPrec = parens ( choose [ ] +++ prec 10 (do expectP (Ident "VkImageViewCreateFlags") v <- step readPrec pure (VkImageViewCreateFlags v) ) ) -- | Dummy data to tag the 'Ptr' with data VkImageView_T -- | VkImageView - Opaque handle to a image view object -- -- = See Also -- -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorImageInfo', -- 'Graphics.Vulkan.Core10.Pass.VkFramebufferCreateInfo', -- 'vkCreateImageView', 'vkDestroyImageView' type VkImageView = Ptr VkImageView_T -- | vkCreateImageView - Create an image view from an existing image -- -- = Parameters -- -- - @device@ is the logical device that creates the image view. -- -- - @pCreateInfo@ is a pointer to an instance of the -- @VkImageViewCreateInfo@ structure containing parameters to be used -- to create the image view. -- -- - @pAllocator@ controls host memory allocation as described in the -- [Memory -- Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation) -- chapter. -- -- - @pView@ points to a @VkImageView@ handle in which the resulting -- image view object is returned. -- -- = Description -- -- Some of the image creation parameters are inherited by the view. In -- particular, image view creation inherits the implicit parameter @usage@ -- specifying the allowed usages of the image view that, by default, takes -- the value of the corresponding @usage@ parameter specified in -- @VkImageCreateInfo@ at image creation time. This implicit parameter -- /can/ be overriden by chaining a -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkImageViewUsageCreateInfo' -- structure through the @pNext@ member to @VkImageViewCreateInfo@ as -- described later in this section. -- -- The remaining parameters are contained in the @pCreateInfo@. -- -- == Valid Usage (Implicit) -- -- - @device@ /must/ be a valid @VkDevice@ handle -- -- - @pCreateInfo@ /must/ be a valid pointer to a valid -- @VkImageViewCreateInfo@ structure -- -- - If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid -- pointer to a valid @VkAllocationCallbacks@ structure -- -- - @pView@ /must/ be a valid pointer to a @VkImageView@ handle -- -- == Return Codes -- -- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)] -- - @VK_SUCCESS@ -- -- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)] -- - @VK_ERROR_OUT_OF_HOST_MEMORY@ -- -- - @VK_ERROR_OUT_OF_DEVICE_MEMORY@ -- -- = See Also -- -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks', -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkImageView', -- 'VkImageViewCreateInfo' foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "vkCreateImageView" vkCreateImageView :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkImageViewCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pView" ::: Ptr VkImageView) -> IO VkResult -- | vkDestroyImageView - Destroy an image view object -- -- = Parameters -- -- - @device@ is the logical device that destroys the image view. -- -- - @imageView@ is the image view to destroy. -- -- - @pAllocator@ controls host memory allocation as described in the -- [Memory -- Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation) -- chapter. -- -- == Valid Usage -- -- - All submitted commands that refer to @imageView@ /must/ have -- completed execution -- -- - If @VkAllocationCallbacks@ were provided when @imageView@ was -- created, a compatible set of callbacks /must/ be provided here -- -- - If no @VkAllocationCallbacks@ were provided when @imageView@ was -- created, @pAllocator@ /must/ be @NULL@ -- -- == Valid Usage (Implicit) -- -- - @device@ /must/ be a valid @VkDevice@ handle -- -- - If @imageView@ is not -- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @imageView@ -- /must/ be a valid @VkImageView@ handle -- -- - If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid -- pointer to a valid @VkAllocationCallbacks@ structure -- -- - If @imageView@ is a valid handle, it /must/ have been created, -- allocated, or retrieved from @device@ -- -- == Host Synchronization -- -- - Host access to @imageView@ /must/ be externally synchronized -- -- = See Also -- -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks', -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkImageView' foreign import ccall #if !defined(SAFE_FOREIGN_CALLS) unsafe #endif "vkDestroyImageView" vkDestroyImageView :: ("device" ::: VkDevice) -> ("imageView" ::: VkImageView) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO () -- | VkComponentMapping - Structure specifying a color component mapping -- -- == Valid Usage (Implicit) -- -- - @r@ /must/ be a valid 'VkComponentSwizzle' value -- -- - @g@ /must/ be a valid 'VkComponentSwizzle' value -- -- - @b@ /must/ be a valid 'VkComponentSwizzle' value -- -- - @a@ /must/ be a valid 'VkComponentSwizzle' value -- -- = See Also -- -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID', -- 'VkComponentSwizzle', 'VkImageViewCreateInfo', -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo' data VkComponentMapping = VkComponentMapping { -- | @r@ is a 'VkComponentSwizzle' specifying the component value placed in -- the R component of the output vector. vkR :: VkComponentSwizzle , -- | @g@ is a 'VkComponentSwizzle' specifying the component value placed in -- the G component of the output vector. vkG :: VkComponentSwizzle , -- | @b@ is a 'VkComponentSwizzle' specifying the component value placed in -- the B component of the output vector. vkB :: VkComponentSwizzle , -- | @a@ is a 'VkComponentSwizzle' specifying the component value placed in -- the A component of the output vector. vkA :: VkComponentSwizzle } deriving (Eq, Show) instance Storable VkComponentMapping where sizeOf ~_ = 16 alignment ~_ = 4 peek ptr = VkComponentMapping <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 12) poke ptr poked = poke (ptr `plusPtr` 0) (vkR (poked :: VkComponentMapping)) *> poke (ptr `plusPtr` 4) (vkG (poked :: VkComponentMapping)) *> poke (ptr `plusPtr` 8) (vkB (poked :: VkComponentMapping)) *> poke (ptr `plusPtr` 12) (vkA (poked :: VkComponentMapping)) -- | VkImageSubresourceRange - Structure specifying a image subresource range -- -- = Description -- -- The number of mipmap levels and array layers /must/ be a subset of the -- image subresources in the image. If an application wants to use all mip -- levels or layers in an image after the @baseMipLevel@ or -- @baseArrayLayer@, it /can/ set @levelCount@ and @layerCount@ to the -- special values @VK_REMAINING_MIP_LEVELS@ and @VK_REMAINING_ARRAY_LAYERS@ -- without knowing the exact number of mip levels or layers. -- -- For cube and cube array image views, the layers of the image view -- starting at @baseArrayLayer@ correspond to faces in the order +X, -X, -- +Y, -Y, +Z, -Z. For cube arrays, each set of six sequential layers is a -- single cube, so the number of cube maps in a cube map array view is -- /@layerCount@ \/ 6/, and image array layer (@baseArrayLayer@ + i) is -- face index (i mod 6) of cube /i \/ 6/. If the number of layers in the -- view, whether set explicitly in @layerCount@ or implied by -- @VK_REMAINING_ARRAY_LAYERS@, is not a multiple of 6, behavior when -- indexing the last cube is undefined. -- -- @aspectMask@ /must/ be only @VK_IMAGE_ASPECT_COLOR_BIT@, -- @VK_IMAGE_ASPECT_DEPTH_BIT@ or @VK_IMAGE_ASPECT_STENCIL_BIT@ if @format@ -- is a color, depth-only or stencil-only format, respectively, except if -- @format@ is a [multi-planar -- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion). -- If using a depth\/stencil format with both depth and stencil components, -- @aspectMask@ /must/ include at least one of @VK_IMAGE_ASPECT_DEPTH_BIT@ -- and @VK_IMAGE_ASPECT_STENCIL_BIT@, and /can/ include both. -- -- When the @VkImageSubresourceRange@ structure is used to select a subset -- of the slices of a 3D image’s mip level in order to create a 2D or 2D -- array image view of a 3D image created with -- @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@, @baseArrayLayer@ and -- @layerCount@ specify the first slice index and the number of slices to -- include in the created image view. Such an image view /can/ be used as a -- framebuffer attachment that refers only to the specified range of slices -- of the selected mip level. However, any layout transitions performed on -- such an attachment view during a render pass instance still apply to the -- entire subresource referenced which includes all the slices of the -- selected mip level. -- -- When using an imageView of a depth\/stencil image to populate a -- descriptor set (e.g. for sampling in the shader, or for use as an input -- attachment), the @aspectMask@ /must/ only include one bit and selects -- whether the imageView is used for depth reads (i.e. using a -- floating-point sampler or input attachment in the shader) or stencil -- reads (i.e. using an unsigned integer sampler or input attachment in the -- shader). When an imageView of a depth\/stencil image is used as a -- depth\/stencil framebuffer attachment, the @aspectMask@ is ignored and -- both depth and stencil image subresources are used. -- -- The @components@ member is of type 'VkComponentMapping', and describes a -- remapping from components of the image to components of the vector -- returned by shader image instructions. This remapping /must/ be identity -- for storage image descriptors, input attachment descriptors, framebuffer -- attachments, and any @VkImageView@ used with a combined image sampler -- that enables [sampler Y’CBCR -- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion). -- -- When creating a @VkImageView@, if [sampler Y’CBCR -- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion) -- is enabled in the sampler, the @aspectMask@ of a @subresourceRange@ used -- by the @VkImageView@ /must/ be @VK_IMAGE_ASPECT_COLOR_BIT@. -- -- When creating a @VkImageView@, if sampler Y’CBCR conversion is not -- enabled in the sampler and the image @format@ is -- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion), -- the image /must/ have been created with -- @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@, and the @aspectMask@ of the -- @VkImageView@’s @subresourceRange@ /must/ be -- @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@ or -- @VK_IMAGE_ASPECT_PLANE_2_BIT@. -- -- == Valid Usage -- -- - If @levelCount@ is not @VK_REMAINING_MIP_LEVELS@, it /must/ be -- greater than @0@ -- -- - If @layerCount@ is not @VK_REMAINING_ARRAY_LAYERS@, it /must/ be -- greater than @0@ -- -- - If @aspectMask@ includes @VK_IMAGE_ASPECT_COLOR_BIT@, then it /must/ -- not include any of @VK_IMAGE_ASPECT_PLANE_0_BIT@, -- @VK_IMAGE_ASPECT_PLANE_1_BIT@, or @VK_IMAGE_ASPECT_PLANE_2_BIT@ -- -- == Valid Usage (Implicit) -- -- - @aspectMask@ /must/ be a valid combination of -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits' -- values -- -- - @aspectMask@ /must/ not be @0@ -- -- = See Also -- -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier', -- 'VkImageViewCreateInfo', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearColorImage', -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearDepthStencilImage' data VkImageSubresourceRange = VkImageSubresourceRange { -- | @aspectMask@ is a bitmask of -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits' -- specifying which aspect(s) of the image are included in the view. vkAspectMask :: VkImageAspectFlags , -- | @baseMipLevel@ is the first mipmap level accessible to the view. vkBaseMipLevel :: Word32 , -- | @levelCount@ is the number of mipmap levels (starting from -- @baseMipLevel@) accessible to the view. vkLevelCount :: Word32 , -- | @baseArrayLayer@ is the first array layer accessible to the view. vkBaseArrayLayer :: Word32 , -- | @layerCount@ is the number of array layers (starting from -- @baseArrayLayer@) accessible to the view. vkLayerCount :: Word32 } deriving (Eq, Show) instance Storable VkImageSubresourceRange where sizeOf ~_ = 20 alignment ~_ = 4 peek ptr = VkImageSubresourceRange <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 4) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 12) <*> peek (ptr `plusPtr` 16) poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceRange)) *> poke (ptr `plusPtr` 4) (vkBaseMipLevel (poked :: VkImageSubresourceRange)) *> poke (ptr `plusPtr` 8) (vkLevelCount (poked :: VkImageSubresourceRange)) *> poke (ptr `plusPtr` 12) (vkBaseArrayLayer (poked :: VkImageSubresourceRange)) *> poke (ptr `plusPtr` 16) (vkLayerCount (poked :: VkImageSubresourceRange)) -- | VkImageViewCreateInfo - Structure specifying parameters of a newly -- created image view -- -- = Description -- -- If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ -- flag, and if the @format@ of the image is not -- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion), -- @format@ /can/ be different from the image’s format, but if @image@ was -- created without the @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ -- flag and they are not equal they /must/ be /compatible/. Image format -- compatibility is defined in the [Format Compatibility -- Classes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatibility-classes) -- section. Views of compatible formats will have the same mapping between -- texel coordinates and memory locations irrespective of the @format@, -- with only the interpretation of the bit pattern changing. -- -- __Note__ -- -- Values intended to be used with one view format /may/ not be exactly -- preserved when written or read through a different format. For example, -- an integer value that happens to have the bit pattern of a floating -- point denorm or NaN /may/ be flushed or canonicalized when written or -- read through a view with a floating point format. Similarly, a value -- written through a signed normalized format that has a bit pattern -- exactly equal to -2b /may/ be changed to -2b + 1 as described in -- [Conversion from Normalized Fixed-Point to -- Floating-Point](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-fixedfpconv). -- -- If @image@ was created with the -- @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ flag, @format@ /must/ -- be /compatible/ with the image’s format as described above, or /must/ be -- an uncompressed format in which case it /must/ be /size-compatible/ with -- the image’s format, as defined for [copying data between -- images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies-images-format-size-compatibility) -- In this case the resulting image view’s texel dimensions equal the -- dimensions of the selected mip level divided by the compressed texel -- block size and rounded up. -- -- If the image view is to be used with a sampler which supports [sampler -- Y’CBCR -- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion), -- an /identically defined object/ of type -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversion' -- to that used to create the sampler /must/ be passed to -- 'vkCreateImageView' in a -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionInfo' -- added to the @pNext@ chain of 'VkImageViewCreateInfo'. -- -- If the image has a -- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion) -- @format@ and @subresourceRange.aspectMask@ is -- @VK_IMAGE_ASPECT_COLOR_BIT@, @format@ /must/ be identical to the image -- @format@, and the sampler to be used with the image view /must/ enable -- [sampler Y’CBCR -- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion). -- -- If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ and -- the image has a -- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion) -- @format@, and if @subresourceRange.aspectMask@ is -- @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or -- @VK_IMAGE_ASPECT_PLANE_2_BIT@, @format@ /must/ be -- [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes) -- with the corresponding plane of the image, and the sampler to be used -- with the image view /must/ not enable [sampler Y’CBCR -- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion). -- The @width@ and @height@ of the single-plane image view /must/ be -- derived from the multi-planar image’s dimensions in the manner listed -- for [plane -- compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes) -- for the plane. -- -- Any view of an image plane will have the same mapping between texel -- coordinates and memory locations as used by the channels of the color -- aspect, subject to the formulae relating texel coordinates to -- lower-resolution planes as described in [Chroma -- Reconstruction](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-chroma-reconstruction). -- That is, if an R or B plane has a reduced resolution relative to the G -- plane of the multi-planar image, the image view operates using the -- (/uplane/, /vplane/) unnormalized coordinates of the reduced-resolution -- plane, and these coordinates access the same memory locations as the -- (/ucolor/, /vcolor/) unnormalized coordinates of the color aspect for -- which chroma reconstruction operations operate on the same (/uplane/, -- /vplane/) or (/iplane/, /jplane/) coordinates. -- -- +----------+--------------------------------------------------+-----------------------------------+ -- | Dim, | Image parameters | View parameters | -- | Arrayed, | | | -- | MS | | | -- +==========+==================================================+===================================+ -- | | @imageType@ = ci.@imageType@ | @baseArrayLayer@, @layerCount@, | -- | | @width@ = ci.@extent.width@ | and @levelCount@ are members of | -- | | @height@ = ci.@extent.height@ | the @subresourceRange@ member. | -- | | @depth@ = ci.@extent.depth@ | | -- | | @arrayLayers@ = ci.@arrayLayers@ | | -- | | @samples@ = ci.@samples@ | | -- | | @flags@ = ci.@flags@ | | -- | | where ci is the | | -- | | 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' | | -- | | used to create @image@. | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __1D, 0, | @imageType@ = @VK_IMAGE_TYPE_1D@ | @viewType@ = | -- | 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_1D@ | -- | | @height@ = 1 | @baseArrayLayer@ ≥ 0 | -- | | @depth@ = 1 | @layerCount@ = 1 | -- | | @arrayLayers@ ≥ 1 | | -- | | @samples@ = 1 | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __1D, 1, | @imageType@ = @VK_IMAGE_TYPE_1D@ | @viewType@ = | -- | 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_1D_ARRAY@ | -- | | @height@ = 1 | @baseArrayLayer@ ≥ 0 | -- | | @depth@ = 1 | @layerCount@ ≥ 1 | -- | | @arrayLayers@ ≥ 1 | | -- | | @samples@ = 1 | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __2D, 0, | @imageType@ = @VK_IMAGE_TYPE_2D@ | @viewType@ = | -- | 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_2D@ | -- | | @height@ ≥ 1 | @baseArrayLayer@ ≥ 0 | -- | | @depth@ = 1 | @layerCount@ = 1 | -- | | @arrayLayers@ ≥ 1 | | -- | | @samples@ = 1 | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __2D, 1, | @imageType@ = @VK_IMAGE_TYPE_2D@ | @viewType@ = | -- | 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ | -- | | @height@ ≥ 1 | @baseArrayLayer@ ≥ 0 | -- | | @depth@ = 1 | @layerCount@ ≥ 1 | -- | | @arrayLayers@ ≥ 1 | | -- | | @samples@ = 1 | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __2D, 0, | @imageType@ = @VK_IMAGE_TYPE_2D@ | @viewType@ = | -- | 1__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_2D@ | -- | | @height@ ≥ 1 | @baseArrayLayer@ ≥ 0 | -- | | @depth@ = 1 | @layerCount@ = 1 | -- | | @arrayLayers@ ≥ 1 | | -- | | @samples@ > 1 | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __2D, 1, | @imageType@ = @VK_IMAGE_TYPE_2D@ | @viewType@ = | -- | 1__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ | -- | | @height@ ≥ 1 | @baseArrayLayer@ ≥ 0 | -- | | @depth@ = 1 | @layerCount@ ≥ 1 | -- | | @arrayLayers@ ≥ 1 | | -- | | @samples@ > 1 | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __CUBE, | @imageType@ = @VK_IMAGE_TYPE_2D@ | @viewType@ = | -- | 0, 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_CUBE@ | -- | | @height@ = @width@ | @baseArrayLayer@ ≥ 0 | -- | | @depth@ = 1 | @layerCount@ = 6 | -- | | @arrayLayers@ ≥ 6 | | -- | | @samples@ = 1 | | -- | | @flags@ includes | | -- | | @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __CUBE, | @imageType@ = @VK_IMAGE_TYPE_2D@ | @viewType@ = | -- | 1, 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@ | -- | | @height@ = width | @baseArrayLayer@ ≥ 0 | -- | | @depth@ = 1 | @layerCount@ = 6 × /N/, /N/ ≥ 1 | -- | | /N/ ≥ 1 | | -- | | @arrayLayers@ ≥ 6 × /N/ | | -- | | @samples@ = 1 | | -- | | @flags@ includes | | -- | | @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __3D, 0, | @imageType@ = @VK_IMAGE_TYPE_3D@ | @viewType@ = | -- | 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_3D@ | -- | | @height@ ≥ 1 | @baseArrayLayer@ = 0 | -- | | @depth@ ≥ 1 | @layerCount@ = 1 | -- | | @arrayLayers@ = 1 | | -- | | @samples@ = 1 | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __3D, 0, | @imageType@ = @VK_IMAGE_TYPE_3D@ | @viewType@ = | -- | 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_2D@ | -- | | @height@ ≥ 1 | @levelCount@ = 1 | -- | | @depth@ ≥ 1 | @baseArrayLayer@ ≥ 0 | -- | | @arrayLayers@ = 1 | @layerCount@ = 1 | -- | | @samples@ = 1 | | -- | | @flags@ includes | | -- | | @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ | | -- | | @flags@ does not include | | -- | | @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@, | | -- | | @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@, and | | -- | | @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ | | -- +----------+--------------------------------------------------+-----------------------------------+ -- | __3D, 0, | @imageType@ = @VK_IMAGE_TYPE_3D@ | @viewType@ = | -- | 0__ | @width@ ≥ 1 | @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ | -- | | @height@ ≥ 1 | @levelCount@ = 1 | -- | | @depth@ ≥ 1 | @baseArrayLayer@ ≥ 0 | -- | | @arrayLayers@ = 1 | @layerCount@ ≥ 1 | -- | | @samples@ = 1 | | -- | | @flags@ includes | | -- | | @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ | | -- | | @flags@ does not include | | -- | | @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@, | | -- | | @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@, and | | -- | | @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ | | -- +----------+--------------------------------------------------+-----------------------------------+ -- -- Image and image view parameter compatibility requirements -- -- == Valid Usage -- -- - If @image@ was not created with -- @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ then @viewType@ /must/ not be -- @VK_IMAGE_VIEW_TYPE_CUBE@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@ -- -- - If the [image cubemap -- arrays](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-imageCubeArray) -- feature is not enabled, @viewType@ /must/ not be -- @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@ -- -- - If @image@ was created with @VK_IMAGE_TYPE_3D@ but without -- @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set then @viewType@ /must/ -- not be @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ -- -- - If @image@ was created with @VK_IMAGE_TILING_LINEAR@, @format@ -- /must/ be format that has at least one supported feature bit present -- in the value of @VkFormatProperties@::@linearTilingFeatures@ -- returned by @vkGetPhysicalDeviceFormatProperties@ with the same -- value of @format@ -- -- - @image@ /must/ have been created with a @usage@ value containing at -- least one of @VK_IMAGE_USAGE_SAMPLED_BIT@, -- @VK_IMAGE_USAGE_STORAGE_BIT@, @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@, -- @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@, or -- @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ -- -- - If @image@ was created with @VK_IMAGE_TILING_LINEAR@ and @usage@ -- contains @VK_IMAGE_USAGE_SAMPLED_BIT@, @format@ /must/ be supported -- for sampled images, as specified by the -- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ flag in -- @VkFormatProperties@::@linearTilingFeatures@ returned by -- @vkGetPhysicalDeviceFormatProperties@ with the same value of -- @format@ -- -- - If @image@ was created with @VK_IMAGE_TILING_LINEAR@ and @usage@ -- contains @VK_IMAGE_USAGE_STORAGE_BIT@, @format@ /must/ be supported -- for storage images, as specified by the -- @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@ flag in -- @VkFormatProperties@::@linearTilingFeatures@ returned by -- @vkGetPhysicalDeviceFormatProperties@ with the same value of -- @format@ -- -- - If @image@ was created with @VK_IMAGE_TILING_LINEAR@ and @usage@ -- contains @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@, @format@ /must/ be -- supported for color attachments, as specified by the -- @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in -- @VkFormatProperties@::@linearTilingFeatures@ returned by -- @vkGetPhysicalDeviceFormatProperties@ with the same value of -- @format@ -- -- - If @image@ was created with @VK_IMAGE_TILING_LINEAR@ and @usage@ -- contains @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@, @format@ -- /must/ be supported for depth\/stencil attachments, as specified by -- the @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@ flag in -- @VkFormatProperties@::@linearTilingFeatures@ returned by -- @vkGetPhysicalDeviceFormatProperties@ with the same value of -- @format@ -- -- - If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@, @format@ -- /must/ be format that has at least one supported feature bit present -- in the value of @VkFormatProperties@::@optimalTilingFeatures@ -- returned by @vkGetPhysicalDeviceFormatProperties@ with the same -- value of @format@ -- -- - If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@ and @usage@ -- contains @VK_IMAGE_USAGE_SAMPLED_BIT@, @format@ /must/ be supported -- for sampled images, as specified by the -- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ flag in -- @VkFormatProperties@::@optimalTilingFeatures@ returned by -- @vkGetPhysicalDeviceFormatProperties@ with the same value of -- @format@ -- -- - If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@ and @usage@ -- contains @VK_IMAGE_USAGE_STORAGE_BIT@, @format@ /must/ be supported -- for storage images, as specified by the -- @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@ flag in -- @VkFormatProperties@::@optimalTilingFeatures@ returned by -- @vkGetPhysicalDeviceFormatProperties@ with the same value of -- @format@ -- -- - If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@ and @usage@ -- contains @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@, @format@ /must/ be -- supported for color attachments, as specified by the -- @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in -- @VkFormatProperties@::@optimalTilingFeatures@ returned by -- @vkGetPhysicalDeviceFormatProperties@ with the same value of -- @format@ -- -- - If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@ and @usage@ -- contains @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@, @format@ -- /must/ be supported for depth\/stencil attachments, as specified by -- the @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@ flag in -- @VkFormatProperties@::@optimalTilingFeatures@ returned by -- @vkGetPhysicalDeviceFormatProperties@ with the same value of -- @format@ -- -- - @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@ -- specified in 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when -- @image@ was created -- -- - If @subresourceRange.levelCount@ is not @VK_REMAINING_MIP_LEVELS@, -- @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@ -- /must/ be less than or equal to the @mipLevels@ specified in -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was -- created -- -- - If @image@ is not a 3D image created with -- @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set, or @viewType@ is not -- @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@, -- @subresourceRange@::@baseArrayLayer@ /must/ be less than the -- @arrayLayers@ specified in -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was -- created -- -- - If @subresourceRange@::@layerCount@ is not -- @VK_REMAINING_ARRAY_LAYERS@, @image@ is not a 3D image created with -- @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set, or @viewType@ is not -- @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@, -- @subresourceRange@::@layerCount@ /must/ be non-zero and -- @subresourceRange@::@baseArrayLayer@ + -- @subresourceRange@::@layerCount@ /must/ be less than or equal to the -- @arrayLayers@ specified in -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was -- created -- -- - If @image@ is a 3D image created with -- @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set, and @viewType@ is -- @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@, -- @subresourceRange@::@baseArrayLayer@ /must/ be less than the -- @extent.depth@ specified in -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was -- created -- -- - If @subresourceRange@::@layerCount@ is not -- @VK_REMAINING_ARRAY_LAYERS@, @image@ is a 3D image created with -- @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set, and @viewType@ is -- @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@, -- @subresourceRange@::@layerCount@ /must/ be non-zero and -- @subresourceRange@::@baseArrayLayer@ + -- @subresourceRange@::@layerCount@ /must/ be less than or equal to the -- @extent.depth@ specified in -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was -- created -- -- - If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ -- flag, @format@ /must/ be compatible with the @format@ used to create -- @image@, as defined in [Format Compatibility -- Classes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatibility-classes) -- -- - If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ -- flag, but without the -- @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ flag, and if the -- @format@ of the @image@ is not a -- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion) -- format, @format@ /must/ be compatible with the @format@ used to -- create @image@, as defined in [Format Compatibility -- Classes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatibility-classes) -- -- - If @image@ was created with the -- @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ flag, @format@ -- /must/ be compatible with, or /must/ be an uncompressed format that -- is size-compatible with, the @format@ used to create @image@. -- -- - If @image@ was created with the -- @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ flag, the -- @levelCount@ and @layerCount@ members of @subresourceRange@ /must/ -- both be @1@. -- -- - If a @VkImageFormatListCreateInfoKHR@ structure was included in the -- @pNext@ chain of the @VkImageCreateInfo@ struct used when creating -- @image@ and the @viewFormatCount@ field of -- @VkImageFormatListCreateInfoKHR@ is not zero then @format@ /must/ be -- one of the formats in -- @VkImageFormatListCreateInfoKHR@::@pViewFormats@. -- -- - If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ -- flag, if the @format@ of the @image@ is a -- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion) -- format, and if @subresourceRange.aspectMask@ is one of -- @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or -- @VK_IMAGE_ASPECT_PLANE_2_BIT@, then @format@ /must/ be compatible -- with the 'Graphics.Vulkan.Core10.Core.VkFormat' for the plane of the -- @image@ @format@ indicated by @subresourceRange.aspectMask@, as -- defined in -- [{html_spec_relative}#features-formats-compatible-planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes) -- -- - If @image@ was not created with the -- @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ flag, or if the @format@ of the -- @image@ is a -- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion) -- format and if @subresourceRange.aspectMask@ is -- @VK_IMAGE_ASPECT_COLOR_BIT@, @format@ /must/ be identical to the -- @format@ used to create @image@ -- -- - If @image@ is non-sparse then it /must/ be bound completely and -- contiguously to a single @VkDeviceMemory@ object -- -- - @subresourceRange@ and @viewType@ /must/ be compatible with the -- image, as described in the [compatibility -- table](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views-compatibility) -- -- - If @image@ has an [external -- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats): -- -- - @format@ must be @VK_FORMAT_UNDEFINED@ -- -- - The @pNext@ chain must contain an instance of -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionInfo' -- with a @conversion@ object created with the same external format -- as @image@ -- -- - All members of @components@ must be -- @VK_COMPONENT_SWIZZLE_IDENTITY@ -- -- == Valid Usage (Implicit) -- -- - @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO@ -- -- - Each @pNext@ member of any structure (including this one) in the -- @pNext@ chain /must/ be either @NULL@ or a pointer to a valid -- instance of -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkImageViewUsageCreateInfo' -- or -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionInfo' -- -- - Each @sType@ member in the @pNext@ chain /must/ be unique -- -- - @flags@ /must/ be @0@ -- -- - @image@ /must/ be a valid @VkImage@ handle -- -- - @viewType@ /must/ be a valid 'VkImageViewType' value -- -- - @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat' -- value -- -- - @components@ /must/ be a valid @VkComponentMapping@ structure -- -- - @subresourceRange@ /must/ be a valid @VkImageSubresourceRange@ -- structure -- -- = See Also -- -- 'VkComponentMapping', 'Graphics.Vulkan.Core10.Core.VkFormat', -- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', -- 'VkImageSubresourceRange', 'VkImageViewCreateFlags', 'VkImageViewType', -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateImageView' data VkImageViewCreateInfo = VkImageViewCreateInfo { -- | @sType@ is the type of this structure. vkSType :: VkStructureType , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. vkPNext :: Ptr () , -- | @flags@ is reserved for future use. vkFlags :: VkImageViewCreateFlags , -- | @image@ is a @VkImage@ on which the view will be created. vkImage :: VkImage , -- | @viewType@ is an 'VkImageViewType' value specifying the type of the -- image view. vkViewType :: VkImageViewType , -- | @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' describing the -- format and type used to interpret data elements in the image. vkFormat :: VkFormat , -- | @components@ is a 'VkComponentMapping' specifies a remapping of color -- components (or of depth or stencil components after they have been -- converted into color components). vkComponents :: VkComponentMapping , -- | @subresourceRange@ is a 'VkImageSubresourceRange' selecting the set of -- mipmap levels and array layers to be accessible to the view. vkSubresourceRange :: VkImageSubresourceRange } deriving (Eq, Show) instance Storable VkImageViewCreateInfo where sizeOf ~_ = 80 alignment ~_ = 8 peek ptr = VkImageViewCreateInfo <$> peek (ptr `plusPtr` 0) <*> peek (ptr `plusPtr` 8) <*> peek (ptr `plusPtr` 16) <*> peek (ptr `plusPtr` 24) <*> peek (ptr `plusPtr` 32) <*> peek (ptr `plusPtr` 36) <*> peek (ptr `plusPtr` 40) <*> peek (ptr `plusPtr` 56) poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageViewCreateInfo)) *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageViewCreateInfo)) *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageViewCreateInfo)) *> poke (ptr `plusPtr` 24) (vkImage (poked :: VkImageViewCreateInfo)) *> poke (ptr `plusPtr` 32) (vkViewType (poked :: VkImageViewCreateInfo)) *> poke (ptr `plusPtr` 36) (vkFormat (poked :: VkImageViewCreateInfo)) *> poke (ptr `plusPtr` 40) (vkComponents (poked :: VkImageViewCreateInfo)) *> poke (ptr `plusPtr` 56) (vkSubresourceRange (poked :: VkImageViewCreateInfo))