{-# language Strict #-}
{-# language CPP #-}
{-# language GeneralizedNewtypeDeriving #-}
{-# language PatternSynonyms #-}
{-# language DataKinds #-}
{-# language TypeOperators #-}
{-# language DuplicateRecordFields #-}

module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion
  ( VkSamplerYcbcrModelConversion(..)
  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY
  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY
  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
  , VkSamplerYcbcrRange(..)
  , pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL
  , pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW
  , VkChromaLocation(..)
  , pattern VK_CHROMA_LOCATION_COSITED_EVEN
  , pattern VK_CHROMA_LOCATION_MIDPOINT
  , pattern VK_FORMAT_G8B8G8R8_422_UNORM
  , pattern VK_FORMAT_B8G8R8G8_422_UNORM
  , pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
  , pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
  , pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
  , pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM
  , pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
  , pattern VK_FORMAT_R10X6_UNORM_PACK16
  , pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16
  , pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
  , pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
  , pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
  , pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
  , pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
  , pattern VK_FORMAT_R12X4_UNORM_PACK16
  , pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16
  , pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
  , pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
  , pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
  , pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
  , pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
  , pattern VK_FORMAT_G16B16G16R16_422_UNORM
  , pattern VK_FORMAT_B16G16R16G16_422_UNORM
  , pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
  , pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM
  , pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
  , pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM
  , pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO
  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO
  , pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO
  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES
  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES
  , pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION
  , pattern VK_IMAGE_CREATE_DISJOINT_BIT
  , pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
  , pattern VK_FORMAT_FEATURE_DISJOINT_BIT
  , pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
  , pattern VK_IMAGE_ASPECT_PLANE_0_BIT
  , pattern VK_IMAGE_ASPECT_PLANE_1_BIT
  , pattern VK_IMAGE_ASPECT_PLANE_2_BIT
  , VkSamplerYcbcrConversion
  , vkCreateSamplerYcbcrConversion
  , vkDestroySamplerYcbcrConversion
  , VkSamplerYcbcrConversionInfo(..)
  , VkSamplerYcbcrConversionCreateInfo(..)
  , VkBindImagePlaneMemoryInfo(..)
  , VkImagePlaneMemoryRequirementsInfo(..)
  , VkPhysicalDeviceSamplerYcbcrConversionFeatures(..)
  , VkSamplerYcbcrConversionImageFormatProperties(..)
  ) where

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
  ( VkBool32(..)
  , VkFormat(..)
  , VkObjectType(..)
  , VkResult(..)
  , VkStructureType(..)
  )
import Graphics.Vulkan.Core10.DeviceInitialization
  ( VkAllocationCallbacks(..)
  , VkFormatFeatureFlagBits(..)
  , VkImageCreateFlagBits(..)
  , VkDevice
  )
import Graphics.Vulkan.Core10.ImageView
  ( VkComponentMapping(..)
  )
import Graphics.Vulkan.Core10.Sampler
  ( VkFilter(..)
  )
import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
  ( VkImageAspectFlagBits(..)
  )


-- ** VkSamplerYcbcrModelConversion

-- | VkSamplerYcbcrModelConversion - Color model component of a color space
--
-- = Description
--
-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY@ specifies that the
--     input values to the conversion are unmodified.
--
-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY@ specifies no
--     model conversion but the inputs are range expanded as for Y’CBCR.
--
-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709@ specifies the color
--     model conversion from Y’CBCR to R’G’B\' defined in BT.709 and
--     described in the “BT.709 Y’CBCR conversion” section of the [Khronos
--     Data Format
--     Specification](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#data-format).
--
-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601@ specifies the color
--     model conversion from Y’CBCR to R’G’B\' defined in BT.601 and
--     described in the “BT.601 Y’CBCR conversion” section of the [Khronos
--     Data Format
--     Specification](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#data-format).
--
-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020@ specifies the color
--     model conversion from Y’CBCR to R’G’B\' defined in BT.2020 and
--     described in the “BT.2020 Y’CBCR conversion” section of the [Khronos
--     Data Format
--     Specification](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#data-format).
--
-- In the @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_*@ color models, for the
-- input to the sampler Y’CBCR range expansion and model conversion:
--
-- -   the Y (Y\' luma) channel corresponds to the G channel of an RGB
--     image.
--
-- -   the CB (CB or “U” blue color difference) channel corresponds to the
--     B channel of an RGB image.
--
-- -   the CR (CR or “V” red color difference) channel corresponds to the R
--     channel of an RGB image.
--
-- -   the alpha channel, if present, is not modified by color model
--     conversion.
--
-- These rules reflect the mapping of channels after the channel swizzle
-- operation (controlled by
-- 'VkSamplerYcbcrConversionCreateInfo'::@components@).
--
-- __Note__
--
-- For example, an “YUVA” 32-bit format comprising four 8-bit channels can
-- be implemented as @VK_FORMAT_R8G8B8A8_UNORM@ with a component mapping:
--
-- -   @components.a@ = @VK_COMPONENT_SWIZZLE_IDENTITY@
--
-- -   @components.r@ = @VK_COMPONENT_SWIZZLE_B@
--
-- -   @components.g@ = @VK_COMPONENT_SWIZZLE_R@
--
-- -   @components.b@ = @VK_COMPONENT_SWIZZLE_G@
--
-- = See Also
--
-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
-- 'VkSamplerYcbcrConversionCreateInfo'
newtype VkSamplerYcbcrModelConversion = VkSamplerYcbcrModelConversion Int32
  deriving (Eq, Ord, Storable)

instance Show VkSamplerYcbcrModelConversion where
  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"
  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"
  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"
  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"
  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"
  showsPrec p (VkSamplerYcbcrModelConversion x) = showParen (p >= 11) (showString "VkSamplerYcbcrModelConversion " . showsPrec 11 x)

instance Read VkSamplerYcbcrModelConversion where
  readPrec = parens ( choose [ ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY",   pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY)
                             , ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY", pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY)
                             , ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709",      pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709)
                             , ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601",      pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601)
                             , ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020",     pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkSamplerYcbcrModelConversion")
                        v <- step readPrec
                        pure (VkSamplerYcbcrModelConversion v)
                        )
                    )

-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY :: VkSamplerYcbcrModelConversion
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = VkSamplerYcbcrModelConversion 0

-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY :: VkSamplerYcbcrModelConversion
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = VkSamplerYcbcrModelConversion 1

-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 :: VkSamplerYcbcrModelConversion
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = VkSamplerYcbcrModelConversion 2

-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 :: VkSamplerYcbcrModelConversion
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = VkSamplerYcbcrModelConversion 3

-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 :: VkSamplerYcbcrModelConversion
pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = VkSamplerYcbcrModelConversion 4
-- ** VkSamplerYcbcrRange

-- | VkSamplerYcbcrRange - Range of encoded values in a color space
--
-- = Description
--
-- -   @VK_SAMPLER_YCBCR_RANGE_ITU_FULL@ specifies that the full range of
--     the encoded values are valid and interpreted according to the ITU
--     “full range” quantization rules.
--
-- -   @VK_SAMPLER_YCBCR_RANGE_ITU_NARROW@ specifies that headroom and foot
--     room are reserved in the numerical range of encoded values, and the
--     remaining values are expanded according to the ITU “narrow range”
--     quantization rules.
--
-- The formulae for these conversions is described in the [Sampler Y’CBCR
-- Range
-- Expansion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion-rangeexpand)
-- section of the [Image
-- Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures)
-- chapter.
--
-- No range modification takes place if @ycbcrModel@ is
-- @VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY@; the @ycbcrRange@ field
-- of @VkSamplerYcbcrConversionCreateInfo@ is ignored in this case.
--
-- = See Also
--
-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
-- 'VkSamplerYcbcrConversionCreateInfo'
newtype VkSamplerYcbcrRange = VkSamplerYcbcrRange Int32
  deriving (Eq, Ord, Storable)

instance Show VkSamplerYcbcrRange where
  showsPrec _ VK_SAMPLER_YCBCR_RANGE_ITU_FULL = showString "VK_SAMPLER_YCBCR_RANGE_ITU_FULL"
  showsPrec _ VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = showString "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW"
  showsPrec p (VkSamplerYcbcrRange x) = showParen (p >= 11) (showString "VkSamplerYcbcrRange " . showsPrec 11 x)

instance Read VkSamplerYcbcrRange where
  readPrec = parens ( choose [ ("VK_SAMPLER_YCBCR_RANGE_ITU_FULL",   pure VK_SAMPLER_YCBCR_RANGE_ITU_FULL)
                             , ("VK_SAMPLER_YCBCR_RANGE_ITU_NARROW", pure VK_SAMPLER_YCBCR_RANGE_ITU_NARROW)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkSamplerYcbcrRange")
                        v <- step readPrec
                        pure (VkSamplerYcbcrRange v)
                        )
                    )

-- No documentation found for Nested "VkSamplerYcbcrRange" "VK_SAMPLER_YCBCR_RANGE_ITU_FULL"
pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL :: VkSamplerYcbcrRange
pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL = VkSamplerYcbcrRange 0

-- No documentation found for Nested "VkSamplerYcbcrRange" "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW"
pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW :: VkSamplerYcbcrRange
pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = VkSamplerYcbcrRange 1
-- ** VkChromaLocation

-- | VkChromaLocation - Position of downsampled chroma samples
--
-- = See Also
--
-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
-- 'VkSamplerYcbcrConversionCreateInfo'
newtype VkChromaLocation = VkChromaLocation Int32
  deriving (Eq, Ord, Storable)

instance Show VkChromaLocation where
  showsPrec _ VK_CHROMA_LOCATION_COSITED_EVEN = showString "VK_CHROMA_LOCATION_COSITED_EVEN"
  showsPrec _ VK_CHROMA_LOCATION_MIDPOINT = showString "VK_CHROMA_LOCATION_MIDPOINT"
  showsPrec p (VkChromaLocation x) = showParen (p >= 11) (showString "VkChromaLocation " . showsPrec 11 x)

instance Read VkChromaLocation where
  readPrec = parens ( choose [ ("VK_CHROMA_LOCATION_COSITED_EVEN", pure VK_CHROMA_LOCATION_COSITED_EVEN)
                             , ("VK_CHROMA_LOCATION_MIDPOINT",     pure VK_CHROMA_LOCATION_MIDPOINT)
                             ] +++
                      prec 10 (do
                        expectP (Ident "VkChromaLocation")
                        v <- step readPrec
                        pure (VkChromaLocation v)
                        )
                    )

-- | @VK_CHROMA_LOCATION_COSITED_EVEN@ specifies that downsampled chroma
-- samples are aligned with luma samples with even coordinates.
pattern VK_CHROMA_LOCATION_COSITED_EVEN :: VkChromaLocation
pattern VK_CHROMA_LOCATION_COSITED_EVEN = VkChromaLocation 0

-- | @VK_CHROMA_LOCATION_MIDPOINT@ specifies that downsampled chroma samples
-- are located half way between each even luma sample and the nearest
-- higher odd luma sample.
pattern VK_CHROMA_LOCATION_MIDPOINT :: VkChromaLocation
pattern VK_CHROMA_LOCATION_MIDPOINT = VkChromaLocation 1
-- | @VK_FORMAT_G8B8G8R8_422_UNORM@ specifies a four-component, 32-bit format
-- containing a pair of G components, an R component, and a B component,
-- collectively encoding a 2×1 rectangle of unsigned normalized RGB texel
-- data. One G value is present at each /i/ coordinate, with the B and R
-- values shared across both G values and thus recorded at half the
-- horizontal resolution of the image. This format has an 8-bit G component
-- for the even /i/ coordinate in byte 0, an 8-bit B component in byte 1,
-- an 8-bit G component for the odd /i/ coordinate in byte 2, and an 8-bit
-- R component in byte 3. Images in this format /must/ be defined with a
-- width that is a multiple of two. For the purposes of the constraints on
-- copy extents, this format is treated as a compressed format with a 2×1
-- compressed texel block.
pattern VK_FORMAT_G8B8G8R8_422_UNORM :: VkFormat
pattern VK_FORMAT_G8B8G8R8_422_UNORM = VkFormat 1000156000
-- | @VK_FORMAT_B8G8R8G8_422_UNORM@ specifies a four-component, 32-bit format
-- containing a pair of G components, an R component, and a B component,
-- collectively encoding a 2×1 rectangle of unsigned normalized RGB texel
-- data. One G value is present at each /i/ coordinate, with the B and R
-- values shared across both G values and thus recorded at half the
-- horizontal resolution of the image. This format has an 8-bit B component
-- in byte 0, an 8-bit G component for the even /i/ coordinate in byte 1,
-- an 8-bit R component in byte 2, and an 8-bit G component for the odd /i/
-- coordinate in byte 3. Images in this format /must/ be defined with a
-- width that is a multiple of two. For the purposes of the constraints on
-- copy extents, this format is treated as a compressed format with a 2×1
-- compressed texel block.
pattern VK_FORMAT_B8G8R8G8_422_UNORM :: VkFormat
pattern VK_FORMAT_B8G8R8G8_422_UNORM = VkFormat 1000156001
-- | @VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
-- B component in plane 1, and an 8-bit R component in plane 2. The
-- horizontal and vertical dimensions of the R and B planes are halved
-- relative to the image dimensions, and each R and B component is shared
-- with the G components for which \(\lfloor i_G \times 0.5
-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
-- = j_R\). The location of each plane when this image is in linear layout
-- can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
-- /must/ be defined with a width and height that is a multiple of two.
pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM :: VkFormat
pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = VkFormat 1000156002
-- | @VK_FORMAT_G8_B8R8_2PLANE_420_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has an 8-bit G component in plane 0, and a
-- two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
-- byte 0 and an 8-bit R component in byte 1. The horizontal and vertical
-- dimensions of the BR plane is halved relative to the image dimensions,
-- and each R and B value is shared with the G components for which
-- \(\lfloor i_G \times 0.5 \rfloor =
-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
-- location of each plane when this image is in linear layout can be
-- determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
-- /must/ be defined with a width and height that is a multiple of two.
pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM :: VkFormat
pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = VkFormat 1000156003
-- | @VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
-- B component in plane 1, and an 8-bit R component in plane 2. The
-- horizontal dimension of the R and B plane is halved relative to the
-- image dimensions, and each R and B value is shared with the G components
-- for which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location
-- of each plane when this image is in linear layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
-- /must/ be defined with a width that is a multiple of two.
pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM :: VkFormat
pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = VkFormat 1000156004
-- | @VK_FORMAT_G8_B8R8_2PLANE_422_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has an 8-bit G component in plane 0, and a
-- two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
-- byte 0 and an 8-bit R component in byte 1. The horizontal dimensions of
-- the BR plane is halved relative to the image dimensions, and each R and
-- B value is shared with the G components for which
-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
-- plane when this image is in linear layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
-- /must/ be defined with a width that is a multiple of two.
pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM :: VkFormat
pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = VkFormat 1000156005
-- | @VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
-- B component in plane 1, and an 8-bit R component in plane 2. Each plane
-- has the same dimensions and each R, G and B component contributes to a
-- single texel. The location of each plane when this image is in linear
-- layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane.
pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM :: VkFormat
pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = VkFormat 1000156006
-- | @VK_FORMAT_R10X6_UNORM_PACK16@ specifies a one-component, 16-bit
-- unsigned normalized format that has a single 10-bit R component in the
-- top 10 bits of a 16-bit word, with the bottom 6 bits set to 0.
pattern VK_FORMAT_R10X6_UNORM_PACK16 :: VkFormat
pattern VK_FORMAT_R10X6_UNORM_PACK16 = VkFormat 1000156007
-- | @VK_FORMAT_R10X6G10X6_UNORM_2PACK16@ specifies a two-component, 32-bit
-- unsigned normalized format that has a 10-bit R component in the top 10
-- bits of the word in bytes 0..1, and a 10-bit G component in the top 10
-- bits of the word in bytes 2..3, with the bottom 6 bits of each word set
-- to 0.
pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16 :: VkFormat
pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = VkFormat 1000156008
-- | @VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16@ specifies a
-- four-component, 64-bit unsigned normalized format that has a 10-bit R
-- component in the top 10 bits of the word in bytes 0..1, a 10-bit G
-- component in the top 10 bits of the word in bytes 2..3, a 10-bit B
-- component in the top 10 bits of the word in bytes 4..5, and a 10-bit A
-- component in the top 10 bits of the word in bytes 6..7, with the bottom
-- 6 bits of each word set to 0.
pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 :: VkFormat
pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = VkFormat 1000156009
-- | @VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16@ specifies a
-- four-component, 64-bit format containing a pair of G components, an R
-- component, and a B component, collectively encoding a 2×1 rectangle of
-- unsigned normalized RGB texel data. One G value is present at each /i/
-- coordinate, with the B and R values shared across both G values and thus
-- recorded at half the horizontal resolution of the image. This format has
-- a 10-bit G component for the even /i/ coordinate in the top 10 bits of
-- the word in bytes 0..1, a 10-bit B component in the top 10 bits of the
-- word in bytes 2..3, a 10-bit G component for the odd /i/ coordinate in
-- the top 10 bits of the word in bytes 4..5, and a 10-bit R component in
-- the top 10 bits of the word in bytes 6..7, with the bottom 6 bits of
-- each word set to 0. Images in this format /must/ be defined with a width
-- that is a multiple of two. For the purposes of the constraints on copy
-- extents, this format is treated as a compressed format with a 2×1
-- compressed texel block.
pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 :: VkFormat
pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = VkFormat 1000156010
-- | @VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16@ specifies a
-- four-component, 64-bit format containing a pair of G components, an R
-- component, and a B component, collectively encoding a 2×1 rectangle of
-- unsigned normalized RGB texel data. One G value is present at each /i/
-- coordinate, with the B and R values shared across both G values and thus
-- recorded at half the horizontal resolution of the image. This format has
-- a 10-bit B component in the top 10 bits of the word in bytes 0..1, a
-- 10-bit G component for the even /i/ coordinate in the top 10 bits of the
-- word in bytes 2..3, a 10-bit R component in the top 10 bits of the word
-- in bytes 4..5, and a 10-bit G component for the odd /i/ coordinate in
-- the top 10 bits of the word in bytes 6..7, with the bottom 6 bits of
-- each word set to 0. Images in this format /must/ be defined with a width
-- that is a multiple of two. For the purposes of the constraints on copy
-- extents, this format is treated as a compressed format with a 2×1
-- compressed texel block.
pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 :: VkFormat
pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = VkFormat 1000156011
-- | @VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 10-bit G component
-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
-- component in the top 10 bits of each 16-bit word of plane 2, with the
-- bottom 6 bits of each word set to 0. The horizontal and vertical
-- dimensions of the R and B planes are halved relative to the image
-- dimensions, and each R and B component is shared with the G components
-- for which \(\lfloor i_G \times 0.5
-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
-- = j_R\). The location of each plane when this image is in linear layout
-- can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
-- /must/ be defined with a width and height that is a multiple of two.
pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = VkFormat 1000156012
-- | @VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 10-bit G component
-- in the top 10 bits of each 16-bit word of plane 0, and a two-component,
-- 32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
-- of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
-- of the word in bytes 2..3, the bottom 6 bits of each word set to 0. The
-- horizontal and vertical dimensions of the BR plane is halved relative to
-- the image dimensions, and each R and B value is shared with the G
-- components for which \(\lfloor i_G \times 0.5 \rfloor =
-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
-- location of each plane when this image is in linear layout can be
-- determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
-- /must/ be defined with a width and height that is a multiple of two.
pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = VkFormat 1000156013
-- | @VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 10-bit G component
-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
-- component in the top 10 bits of each 16-bit word of plane 2, with the
-- bottom 6 bits of each word set to 0. The horizontal dimension of the R
-- and B plane is halved relative to the image dimensions, and each R and B
-- value is shared with the G components for which
-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
-- plane when this image is in linear layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
-- /must/ be defined with a width that is a multiple of two.
pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = VkFormat 1000156014
-- | @VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 10-bit G component
-- in the top 10 bits of each 16-bit word of plane 0, and a two-component,
-- 32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
-- of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
-- of the word in bytes 2..3, the bottom 6 bits of each word set to 0. The
-- horizontal dimensions of the BR plane is halved relative to the image
-- dimensions, and each R and B value is shared with the G components for
-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
-- each plane when this image is in linear layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
-- /must/ be defined with a width that is a multiple of two.
pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = VkFormat 1000156015
-- | @VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 10-bit G component
-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
-- component in the top 10 bits of each 16-bit word of plane 2, with the
-- bottom 6 bits of each word set to 0. Each plane has the same dimensions
-- and each R, G and B component contributes to a single texel. The
-- location of each plane when this image is in linear layout can be
-- determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane.
pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = VkFormat 1000156016
-- | @VK_FORMAT_R12X4_UNORM_PACK16@ specifies a one-component, 16-bit
-- unsigned normalized format that has a single 12-bit R component in the
-- top 12 bits of a 16-bit word, with the bottom 4 bits set to 0.
pattern VK_FORMAT_R12X4_UNORM_PACK16 :: VkFormat
pattern VK_FORMAT_R12X4_UNORM_PACK16 = VkFormat 1000156017
-- | @VK_FORMAT_R12X4G12X4_UNORM_2PACK16@ specifies a two-component, 32-bit
-- unsigned normalized format that has a 12-bit R component in the top 12
-- bits of the word in bytes 0..1, and a 12-bit G component in the top 12
-- bits of the word in bytes 2..3, with the bottom 4 bits of each word set
-- to 0.
pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16 :: VkFormat
pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = VkFormat 1000156018
-- | @VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16@ specifies a
-- four-component, 64-bit unsigned normalized format that has a 12-bit R
-- component in the top 12 bits of the word in bytes 0..1, a 12-bit G
-- component in the top 12 bits of the word in bytes 2..3, a 12-bit B
-- component in the top 12 bits of the word in bytes 4..5, and a 12-bit A
-- component in the top 12 bits of the word in bytes 6..7, with the bottom
-- 4 bits of each word set to 0.
pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 :: VkFormat
pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = VkFormat 1000156019
-- | @VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16@ specifies a
-- four-component, 64-bit format containing a pair of G components, an R
-- component, and a B component, collectively encoding a 2×1 rectangle of
-- unsigned normalized RGB texel data. One G value is present at each /i/
-- coordinate, with the B and R values shared across both G values and thus
-- recorded at half the horizontal resolution of the image. This format has
-- a 12-bit G component for the even /i/ coordinate in the top 12 bits of
-- the word in bytes 0..1, a 12-bit B component in the top 12 bits of the
-- word in bytes 2..3, a 12-bit G component for the odd /i/ coordinate in
-- the top 12 bits of the word in bytes 4..5, and a 12-bit R component in
-- the top 12 bits of the word in bytes 6..7, with the bottom 4 bits of
-- each word set to 0. Images in this format /must/ be defined with a width
-- that is a multiple of two. For the purposes of the constraints on copy
-- extents, this format is treated as a compressed format with a 2×1
-- compressed texel block.
pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 :: VkFormat
pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = VkFormat 1000156020
-- | @VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16@ specifies a
-- four-component, 64-bit format containing a pair of G components, an R
-- component, and a B component, collectively encoding a 2×1 rectangle of
-- unsigned normalized RGB texel data. One G value is present at each /i/
-- coordinate, with the B and R values shared across both G values and thus
-- recorded at half the horizontal resolution of the image. This format has
-- a 12-bit B component in the top 12 bits of the word in bytes 0..1, a
-- 12-bit G component for the even /i/ coordinate in the top 12 bits of the
-- word in bytes 2..3, a 12-bit R component in the top 12 bits of the word
-- in bytes 4..5, and a 12-bit G component for the odd /i/ coordinate in
-- the top 12 bits of the word in bytes 6..7, with the bottom 4 bits of
-- each word set to 0. Images in this format /must/ be defined with a width
-- that is a multiple of two. For the purposes of the constraints on copy
-- extents, this format is treated as a compressed format with a 2×1
-- compressed texel block.
pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 :: VkFormat
pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = VkFormat 1000156021
-- | @VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 12-bit G component
-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
-- component in the top 12 bits of each 16-bit word of plane 2, with the
-- bottom 4 bits of each word set to 0. The horizontal and vertical
-- dimensions of the R and B planes are halved relative to the image
-- dimensions, and each R and B component is shared with the G components
-- for which \(\lfloor i_G \times 0.5
-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
-- = j_R\). The location of each plane when this image is in linear layout
-- can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
-- /must/ be defined with a width and height that is a multiple of two.
pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = VkFormat 1000156022
-- | @VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 12-bit G component
-- in the top 12 bits of each 16-bit word of plane 0, and a two-component,
-- 32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
-- of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
-- of the word in bytes 2..3, the bottom 4 bits of each word set to 0. The
-- horizontal and vertical dimensions of the BR plane is halved relative to
-- the image dimensions, and each R and B value is shared with the G
-- components for which \(\lfloor i_G \times 0.5 \rfloor =
-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
-- location of each plane when this image is in linear layout can be
-- determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
-- /must/ be defined with a width and height that is a multiple of two.
pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = VkFormat 1000156023
-- | @VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 12-bit G component
-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
-- component in the top 12 bits of each 16-bit word of plane 2, with the
-- bottom 4 bits of each word set to 0. The horizontal dimension of the R
-- and B plane is halved relative to the image dimensions, and each R and B
-- value is shared with the G components for which
-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
-- plane when this image is in linear layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
-- /must/ be defined with a width that is a multiple of two.
pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = VkFormat 1000156024
-- | @VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 12-bit G component
-- in the top 12 bits of each 16-bit word of plane 0, and a two-component,
-- 32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
-- of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
-- of the word in bytes 2..3, the bottom 4 bits of each word set to 0. The
-- horizontal dimensions of the BR plane is halved relative to the image
-- dimensions, and each R and B value is shared with the G components for
-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
-- each plane when this image is in linear layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
-- /must/ be defined with a width that is a multiple of two.
pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = VkFormat 1000156025
-- | @VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16@ specifies a
-- unsigned normalized /multi-planar format/ that has a 12-bit G component
-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
-- component in the top 12 bits of each 16-bit word of plane 2, with the
-- bottom 4 bits of each word set to 0. Each plane has the same dimensions
-- and each R, G and B component contributes to a single texel. The
-- location of each plane when this image is in linear layout can be
-- determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane.
pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 :: VkFormat
pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = VkFormat 1000156026
-- | @VK_FORMAT_G16B16G16R16_422_UNORM@ specifies a four-component, 64-bit
-- format containing a pair of G components, an R component, and a B
-- component, collectively encoding a 2×1 rectangle of unsigned normalized
-- RGB texel data. One G value is present at each /i/ coordinate, with the
-- B and R values shared across both G values and thus recorded at half the
-- horizontal resolution of the image. This format has a 16-bit G component
-- for the even /i/ coordinate in the word in bytes 0..1, a 16-bit B
-- component in the word in bytes 2..3, a 16-bit G component for the odd
-- /i/ coordinate in the word in bytes 4..5, and a 16-bit R component in
-- the word in bytes 6..7. Images in this format /must/ be defined with a
-- width that is a multiple of two. For the purposes of the constraints on
-- copy extents, this format is treated as a compressed format with a 2×1
-- compressed texel block.
pattern VK_FORMAT_G16B16G16R16_422_UNORM :: VkFormat
pattern VK_FORMAT_G16B16G16R16_422_UNORM = VkFormat 1000156027
-- | @VK_FORMAT_B16G16R16G16_422_UNORM@ specifies a four-component, 64-bit
-- format containing a pair of G components, an R component, and a B
-- component, collectively encoding a 2×1 rectangle of unsigned normalized
-- RGB texel data. One G value is present at each /i/ coordinate, with the
-- B and R values shared across both G values and thus recorded at half the
-- horizontal resolution of the image. This format has a 16-bit B component
-- in the word in bytes 0..1, a 16-bit G component for the even /i/
-- coordinate in the word in bytes 2..3, a 16-bit R component in the word
-- in bytes 4..5, and a 16-bit G component for the odd /i/ coordinate in
-- the word in bytes 6..7. Images in this format /must/ be defined with a
-- width that is a multiple of two. For the purposes of the constraints on
-- copy extents, this format is treated as a compressed format with a 2×1
-- compressed texel block.
pattern VK_FORMAT_B16G16R16G16_422_UNORM :: VkFormat
pattern VK_FORMAT_B16G16R16G16_422_UNORM = VkFormat 1000156028
-- | @VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
-- 16-bit R component in each 16-bit word of plane 2. The horizontal and
-- vertical dimensions of the R and B planes are halved relative to the
-- image dimensions, and each R and B component is shared with the G
-- components for which \(\lfloor i_G \times 0.5
-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
-- = j_R\). The location of each plane when this image is in linear layout
-- can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
-- /must/ be defined with a width and height that is a multiple of two.
pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM :: VkFormat
pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = VkFormat 1000156029
-- | @VK_FORMAT_G16_B16R16_2PLANE_420_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
-- of plane 0, and a two-component, 32-bit BR plane 1 consisting of a
-- 16-bit B component in the word in bytes 0..1, and a 16-bit R component
-- in the word in bytes 2..3. The horizontal and vertical dimensions of the
-- BR plane is halved relative to the image dimensions, and each R and B
-- value is shared with the G components for which
-- \(\lfloor i_G \times 0.5 \rfloor =
-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
-- location of each plane when this image is in linear layout can be
-- determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
-- /must/ be defined with a width and height that is a multiple of two.
pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM :: VkFormat
pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = VkFormat 1000156030
-- | @VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
-- 16-bit R component in each 16-bit word of plane 2. The horizontal
-- dimension of the R and B plane is halved relative to the image
-- dimensions, and each R and B value is shared with the G components for
-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
-- each plane when this image is in linear layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
-- /must/ be defined with a width that is a multiple of two.
pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM :: VkFormat
pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = VkFormat 1000156031
-- | @VK_FORMAT_G16_B16R16_2PLANE_422_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
-- of plane 0, and a two-component, 32-bit BR plane 1 consisting of a
-- 16-bit B component in the word in bytes 0..1, and a 16-bit R component
-- in the word in bytes 2..3. The horizontal dimensions of the BR plane is
-- halved relative to the image dimensions, and each R and B value is
-- shared with the G components for which
-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
-- plane when this image is in linear layout can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
-- /must/ be defined with a width that is a multiple of two.
pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM :: VkFormat
pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = VkFormat 1000156032
-- | @VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM@ specifies a unsigned normalized
-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
-- 16-bit R component in each 16-bit word of plane 2. Each plane has the
-- same dimensions and each R, G and B component contributes to a single
-- texel. The location of each plane when this image is in linear layout
-- can be determined via
-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane.
pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM :: VkFormat
pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = VkFormat 1000156033
-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"
pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO :: VkStructureType
pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = VkStructureType 1000156000
-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"
pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO :: VkStructureType
pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = VkStructureType 1000156001
-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"
pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO :: VkStructureType
pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = VkStructureType 1000156002
-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"
pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO :: VkStructureType
pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = VkStructureType 1000156003
-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"
pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES :: VkStructureType
pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = VkStructureType 1000156004
-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"
pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES :: VkStructureType
pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = VkStructureType 1000156005
-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"
pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION :: VkObjectType
pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = VkObjectType 1000156000
-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_DISJOINT_BIT"
pattern VK_IMAGE_CREATE_DISJOINT_BIT :: VkImageCreateFlagBits
pattern VK_IMAGE_CREATE_DISJOINT_BIT = VkImageCreateFlagBits 0x00000200
-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"
pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT :: VkFormatFeatureFlagBits
pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = VkFormatFeatureFlagBits 0x00020000
-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT :: VkFormatFeatureFlagBits
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = VkFormatFeatureFlagBits 0x00040000
-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT :: VkFormatFeatureFlagBits
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = VkFormatFeatureFlagBits 0x00080000
-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT :: VkFormatFeatureFlagBits
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = VkFormatFeatureFlagBits 0x00100000
-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT :: VkFormatFeatureFlagBits
pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = VkFormatFeatureFlagBits 0x00200000
-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_DISJOINT_BIT"
pattern VK_FORMAT_FEATURE_DISJOINT_BIT :: VkFormatFeatureFlagBits
pattern VK_FORMAT_FEATURE_DISJOINT_BIT = VkFormatFeatureFlagBits 0x00400000
-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"
pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT :: VkFormatFeatureFlagBits
pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = VkFormatFeatureFlagBits 0x00800000
-- No documentation found for Nested "VkImageAspectFlagBits" "VK_IMAGE_ASPECT_PLANE_0_BIT"
pattern VK_IMAGE_ASPECT_PLANE_0_BIT :: VkImageAspectFlagBits
pattern VK_IMAGE_ASPECT_PLANE_0_BIT = VkImageAspectFlagBits 0x00000010
-- No documentation found for Nested "VkImageAspectFlagBits" "VK_IMAGE_ASPECT_PLANE_1_BIT"
pattern VK_IMAGE_ASPECT_PLANE_1_BIT :: VkImageAspectFlagBits
pattern VK_IMAGE_ASPECT_PLANE_1_BIT = VkImageAspectFlagBits 0x00000020
-- No documentation found for Nested "VkImageAspectFlagBits" "VK_IMAGE_ASPECT_PLANE_2_BIT"
pattern VK_IMAGE_ASPECT_PLANE_2_BIT :: VkImageAspectFlagBits
pattern VK_IMAGE_ASPECT_PLANE_2_BIT = VkImageAspectFlagBits 0x00000040
-- | Dummy data to tag the 'Ptr' with
data VkSamplerYcbcrConversion_T
-- | VkSamplerYcbcrConversion - NO SHORT DESCRIPTION PROVIDED
--
-- = See Also
--
-- 'VkSamplerYcbcrConversionInfo', 'vkCreateSamplerYcbcrConversion',
-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR',
-- 'vkDestroySamplerYcbcrConversion',
-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversionKHR'
type VkSamplerYcbcrConversion = Ptr VkSamplerYcbcrConversion_T
-- | vkCreateSamplerYcbcrConversion - Create a new Ycbcr conversion
--
-- = Parameters
--
-- -   @device@ is the logical device that creates the sampler Y’CBCR
--     conversion.
--
-- -   @pCreateInfo@ is a pointer to an instance of the
--     'VkSamplerYcbcrConversionCreateInfo' specifying the requested
--     sampler Y’CBCR conversion.
--
-- -   @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.
--
-- -   @pYcbcrConversion@ points to a 'VkSamplerYcbcrConversion' handle in
--     which the resulting sampler Y’CBCR conversion is returned.
--
-- = Description
--
-- The interpretation of the configured sampler Y’CBCR conversion is
-- described in more detail in [the description of sampler Y’CBCR
-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion)
-- in the [Image
-- Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures)
-- chapter.
--
-- == Valid Usage
--
-- -   The [sampler Y’CBCR conversion
--     feature](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sampler-YCbCr-conversion)
--     /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   @device@ /must/ be a valid @VkDevice@ handle
--
-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
--     @VkSamplerYcbcrConversionCreateInfo@ structure
--
-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
--     pointer to a valid @VkAllocationCallbacks@ structure
--
-- -   @pYcbcrConversion@ /must/ be a valid pointer to a
--     @VkSamplerYcbcrConversion@ 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',
-- 'VkSamplerYcbcrConversion', 'VkSamplerYcbcrConversionCreateInfo'
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "vkCreateSamplerYcbcrConversion" vkCreateSamplerYcbcrConversion :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkSamplerYcbcrConversionCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pYcbcrConversion" ::: Ptr VkSamplerYcbcrConversion) -> IO VkResult
-- | vkDestroySamplerYcbcrConversion - Destroy a created Y’CbCr conversion
--
-- = Parameters
--
-- -   @device@ is the logical device that destroys the Y’CBCR conversion.
--
-- -   @ycbcrConversion@ is the conversion 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 (Implicit)
--
-- -   @device@ /must/ be a valid @VkDevice@ handle
--
-- -   If @ycbcrConversion@ is not
--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @ycbcrConversion@
--     /must/ be a valid @VkSamplerYcbcrConversion@ handle
--
-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
--     pointer to a valid @VkAllocationCallbacks@ structure
--
-- -   If @ycbcrConversion@ is a valid handle, it /must/ have been created,
--     allocated, or retrieved from @device@
--
-- == Host Synchronization
--
-- -   Host access to @ycbcrConversion@ /must/ be externally synchronized
--
-- = See Also
--
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
-- 'VkSamplerYcbcrConversion'
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "vkDestroySamplerYcbcrConversion" vkDestroySamplerYcbcrConversion :: ("device" ::: VkDevice) -> ("ycbcrConversion" ::: VkSamplerYcbcrConversion) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
-- | VkSamplerYcbcrConversionInfo - Structure specifying Y’CbCr conversion to
-- a sampler or image view
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO@
--
-- -   @conversion@ /must/ be a valid @VkSamplerYcbcrConversion@ handle
--
-- = See Also
--
-- 'VkSamplerYcbcrConversion',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkSamplerYcbcrConversionInfo = VkSamplerYcbcrConversionInfo
  { -- | @sType@ is the type of this structure.
  vkSType :: VkStructureType
  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
  vkPNext :: Ptr ()
  , -- | @conversion@ is a 'VkSamplerYcbcrConversion' handle created with
  -- 'vkCreateSamplerYcbcrConversion'.
  vkConversion :: VkSamplerYcbcrConversion
  }
  deriving (Eq, Show)

instance Storable VkSamplerYcbcrConversionInfo where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek ptr = VkSamplerYcbcrConversionInfo <$> peek (ptr `plusPtr` 0)
                                          <*> peek (ptr `plusPtr` 8)
                                          <*> peek (ptr `plusPtr` 16)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerYcbcrConversionInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerYcbcrConversionInfo))
                *> poke (ptr `plusPtr` 16) (vkConversion (poked :: VkSamplerYcbcrConversionInfo))
-- | VkSamplerYcbcrConversionCreateInfo - Structure specifying the parameters
-- of the newly created conversion
--
-- = Description
--
-- __Note__
--
-- Setting @forceExplicitReconstruction@ to @VK_TRUE@ /may/ have a
-- performance penalty on implementations where explicit reconstruction is
-- not the default mode of operation.
--
-- If the @pNext@ chain has an instance of
-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID'
-- with non-zero @externalFormat@ member, the sampler Y’CBCR conversion
-- object represents an /external format conversion/, and @format@ /must/
-- be @VK_FORMAT_UNDEFINED@. Such conversions /must/ only be used to sample
-- image views with a matching [external
-- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats).
-- When creating an external format conversion, the value of @components@
-- is ignored.
--
-- == Valid Usage
--
-- -   If an external format conversion is being created, @format@ /must/
--     be @VK_FORMAT_UNDEFINED@, otherwise it /must/ not be
--     @VK_FORMAT_UNDEFINED@.
--
-- -   @format@ /must/ support
--     @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@ or
--     @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@
--
-- -   If the format does not support
--     @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@, @xChromaOffset@ and
--     @yChromaOffset@ /must/ not be @VK_CHROMA_LOCATION_COSITED_EVEN@
--
-- -   If the format does not support
--     @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@, @xChromaOffset@ and
--     @yChromaOffset@ /must/ not be @VK_CHROMA_LOCATION_MIDPOINT@
--
-- -   @format@ /must/ represent unsigned normalized values (i.e. the
--     format must be a @UNORM@ format)
--
-- -   If the format has a @_422@ or @_420@ suffix:
--
--     -   @components.g@ /must/ be @VK_COMPONENT_SWIZZLE_IDENTITY@
--
--     -   @components.a@ /must/ be @VK_COMPONENT_SWIZZLE_IDENTITY@,
--         @VK_COMPONENT_SWIZZLE_ONE@, or @VK_COMPONENT_SWIZZLE_ZERO@
--
--     -   @components.r@ /must/ be @VK_COMPONENT_SWIZZLE_IDENTITY@ or
--         @VK_COMPONENT_SWIZZLE_B@
--
--     -   @components.b@ /must/ be @VK_COMPONENT_SWIZZLE_IDENTITY@ or
--         @VK_COMPONENT_SWIZZLE_R@
--
--     -   If either @components.r@ or @components.b@ is
--         @VK_COMPONENT_SWIZZLE_IDENTITY@, both values /must/ be
--         @VK_COMPONENT_SWIZZLE_IDENTITY@
--
-- -   If @ycbcrModel@ is not
--     @VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY@, then
--     @components.r@, @components.g@, and @components.b@ /must/ correspond
--     to channels of the @format@; that is, @components.r@,
--     @components.g@, and @components.b@ /must/ not be
--     @VK_COMPONENT_SWIZZLE_ZERO@ or @VK_COMPONENT_SWIZZLE_ONE@, and
--     /must/ not correspond to a channel which contains zero or one as a
--     consequence of [conversion to
--     RGBA](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-conversion-to-rgba)
--
-- -   If the format does not support
--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT@,
--     @forceExplicitReconstruction@ /must/ be FALSE
--
-- -   If the format does not support
--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT@,
--     @chromaFilter@ /must/ be @VK_FILTER_NEAREST@
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO@
--
-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
--     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID'
--
-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
--     value
--
-- -   @ycbcrModel@ /must/ be a valid 'VkSamplerYcbcrModelConversion' value
--
-- -   @ycbcrRange@ /must/ be a valid 'VkSamplerYcbcrRange' value
--
-- -   @components@ /must/ be a valid @VkComponentMapping@ structure
--
-- -   @xChromaOffset@ /must/ be a valid 'VkChromaLocation' value
--
-- -   @yChromaOffset@ /must/ be a valid 'VkChromaLocation' value
--
-- -   @chromaFilter@ /must/ be a valid
--     'Graphics.Vulkan.Core10.Sampler.VkFilter' value
--
-- If @chromaFilter@ is @VK_FILTER_NEAREST@, chroma samples are
-- reconstructed to luma channel resolution using nearest-neighbour
-- sampling. Otherwise, chroma samples are reconstructed using
-- interpolation. More details can be found in [the description of sampler
-- Y’CBCR
-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion)
-- in the [Image
-- Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures)
-- chapter.
--
-- = See Also
--
-- @VkBool32@, 'VkChromaLocation',
-- 'Graphics.Vulkan.Core10.ImageView.VkComponentMapping',
-- 'Graphics.Vulkan.Core10.Sampler.VkFilter',
-- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkSamplerYcbcrModelConversion',
-- 'VkSamplerYcbcrRange', 'Graphics.Vulkan.Core10.Core.VkStructureType',
-- 'vkCreateSamplerYcbcrConversion',
-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR'
data VkSamplerYcbcrConversionCreateInfo = VkSamplerYcbcrConversionCreateInfo
  { -- | @sType@ is the type of this structure.
  vkSType :: VkStructureType
  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
  vkPNext :: Ptr ()
  , -- | @format@ is the format of the image from which color information will be
  -- retrieved.
  vkFormat :: VkFormat
  , -- | @ycbcrModel@ describes the color matrix for conversion between color
  -- models.
  vkYcbcrModel :: VkSamplerYcbcrModelConversion
  , -- | @ycbcrRange@ describes whether the encoded values have headroom and foot
  -- room, or whether the encoding uses the full numerical range.
  vkYcbcrRange :: VkSamplerYcbcrRange
  , -- | @components@ applies a /swizzle/ based on
  -- 'Graphics.Vulkan.Core10.ImageView.VkComponentSwizzle' enums prior to
  -- range expansion and color model conversion.
  vkComponents :: VkComponentMapping
  , -- | @xChromaOffset@ describes the [sample
  -- location](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-chroma-reconstruction)
  -- associated with downsampled chroma channels in the x dimension.
  -- @xChromaOffset@ has no effect for formats in which chroma channels are
  -- the same resolution as the luma channel.
  vkXChromaOffset :: VkChromaLocation
  , -- | @yChromaOffset@ describes the [sample
  -- location](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-chroma-reconstruction)
  -- associated with downsampled chroma channels in the y dimension.
  -- @yChromaOffset@ has no effect for formats in which the chroma channels
  -- are not downsampled vertically.
  vkYChromaOffset :: VkChromaLocation
  , -- | @chromaFilter@ is the filter for chroma reconstruction.
  vkChromaFilter :: VkFilter
  , -- | @forceExplicitReconstruction@ /can/ be used to ensure that
  -- reconstruction is done explicitly, if supported.
  vkForceExplicitReconstruction :: VkBool32
  }
  deriving (Eq, Show)

instance Storable VkSamplerYcbcrConversionCreateInfo where
  sizeOf ~_ = 64
  alignment ~_ = 8
  peek ptr = VkSamplerYcbcrConversionCreateInfo <$> peek (ptr `plusPtr` 0)
                                                <*> peek (ptr `plusPtr` 8)
                                                <*> peek (ptr `plusPtr` 16)
                                                <*> peek (ptr `plusPtr` 20)
                                                <*> peek (ptr `plusPtr` 24)
                                                <*> peek (ptr `plusPtr` 28)
                                                <*> peek (ptr `plusPtr` 44)
                                                <*> peek (ptr `plusPtr` 48)
                                                <*> peek (ptr `plusPtr` 52)
                                                <*> peek (ptr `plusPtr` 56)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 16) (vkFormat (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 20) (vkYcbcrModel (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 24) (vkYcbcrRange (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 28) (vkComponents (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 44) (vkXChromaOffset (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 48) (vkYChromaOffset (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 52) (vkChromaFilter (poked :: VkSamplerYcbcrConversionCreateInfo))
                *> poke (ptr `plusPtr` 56) (vkForceExplicitReconstruction (poked :: VkSamplerYcbcrConversionCreateInfo))
-- | VkBindImagePlaneMemoryInfo - Structure specifying how to bind an image
-- plane to memory
--
-- == Valid Usage
--
-- -   @planeAspect@ /must/ be a single valid plane aspect for the image
--     format (that is, @planeAspect@ /must/ be
--     @VK_IMAGE_ASPECT_PLANE_0_BIT@ or @VK_IMAGE_ASPECT_PLANE_1_BIT@ for
--     “@_2PLANE@” formats and @planeAspect@ /must/ be
--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
--     @VK_IMAGE_ASPECT_PLANE_2_BIT@ for “@_3PLANE@” formats)
--
-- -   A single call to
--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2'
--     /must/ bind all or none of the planes of an image (i.e. bindings to
--     all planes of an image /must/ be made in a single
--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2'
--     call), as separate bindings
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO@
--
-- -   @planeAspect@ /must/ be a valid
--     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
--     value
--
-- = See Also
--
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkBindImagePlaneMemoryInfo = VkBindImagePlaneMemoryInfo
  { -- | @sType@ is the type of this structure.
  vkSType :: VkStructureType
  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
  vkPNext :: Ptr ()
  , -- | @planeAspect@ is the aspect of the disjoint image plane to bind.
  vkPlaneAspect :: VkImageAspectFlagBits
  }
  deriving (Eq, Show)

instance Storable VkBindImagePlaneMemoryInfo where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek ptr = VkBindImagePlaneMemoryInfo <$> peek (ptr `plusPtr` 0)
                                        <*> peek (ptr `plusPtr` 8)
                                        <*> peek (ptr `plusPtr` 16)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindImagePlaneMemoryInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindImagePlaneMemoryInfo))
                *> poke (ptr `plusPtr` 16) (vkPlaneAspect (poked :: VkBindImagePlaneMemoryInfo))
-- | VkImagePlaneMemoryRequirementsInfo - Structure specifying image plane
-- for memory requirements
--
-- == Valid Usage
--
-- -   @planeAspect@ /must/ be an aspect that exists in the format; that
--     is, for a two-plane image @planeAspect@ /must/ be
--     @VK_IMAGE_ASPECT_PLANE_0_BIT@ or @VK_IMAGE_ASPECT_PLANE_1_BIT@, and
--     for a three-plane image @planeAspect@ /must/ be
--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@ or
--     @VK_IMAGE_ASPECT_PLANE_2_BIT@
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO@
--
-- -   @planeAspect@ /must/ be a valid
--     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
--     value
--
-- = See Also
--
-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits',
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkImagePlaneMemoryRequirementsInfo = VkImagePlaneMemoryRequirementsInfo
  { -- | @sType@ is the type of this structure.
  vkSType :: VkStructureType
  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
  vkPNext :: Ptr ()
  , -- | @planeAspect@ is the aspect corresponding to the image plane to query.
  vkPlaneAspect :: VkImageAspectFlagBits
  }
  deriving (Eq, Show)

instance Storable VkImagePlaneMemoryRequirementsInfo where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek ptr = VkImagePlaneMemoryRequirementsInfo <$> peek (ptr `plusPtr` 0)
                                                <*> peek (ptr `plusPtr` 8)
                                                <*> peek (ptr `plusPtr` 16)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImagePlaneMemoryRequirementsInfo))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImagePlaneMemoryRequirementsInfo))
                *> poke (ptr `plusPtr` 16) (vkPlaneAspect (poked :: VkImagePlaneMemoryRequirementsInfo))
-- | VkPhysicalDeviceSamplerYcbcrConversionFeatures - Structure describing
-- Y’CbCr conversion features that can be supported by an implementation
--
-- = Members
--
-- The members of the @VkPhysicalDeviceSamplerYcbcrConversionFeatures@
-- structure describe the following feature:
--
-- = Description
--
-- -   @samplerYcbcrConversion@ specifies whether the implementation
--     supports [sampler Y’CBCR
--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion).
--     If @samplerYcbcrConversion@ is @VK_FALSE@, sampler Y’CBCR conversion
--     is not supported, and samplers using sampler Y’CBCR conversion
--     /must/ not be used.
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES@
--
-- = See Also
--
-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkPhysicalDeviceSamplerYcbcrConversionFeatures = VkPhysicalDeviceSamplerYcbcrConversionFeatures
  { -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "sType"
  vkSType :: VkStructureType
  , -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "pNext"
  vkPNext :: Ptr ()
  , -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "samplerYcbcrConversion"
  vkSamplerYcbcrConversion :: VkBool32
  }
  deriving (Eq, Show)

instance Storable VkPhysicalDeviceSamplerYcbcrConversionFeatures where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek ptr = VkPhysicalDeviceSamplerYcbcrConversionFeatures <$> peek (ptr `plusPtr` 0)
                                                            <*> peek (ptr `plusPtr` 8)
                                                            <*> peek (ptr `plusPtr` 16)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceSamplerYcbcrConversionFeatures))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceSamplerYcbcrConversionFeatures))
                *> poke (ptr `plusPtr` 16) (vkSamplerYcbcrConversion (poked :: VkPhysicalDeviceSamplerYcbcrConversionFeatures))
-- | VkSamplerYcbcrConversionImageFormatProperties - Structure specifying
-- combined image sampler descriptor count for multi-planar images
--
-- == Valid Usage (Implicit)
--
-- -   @sType@ /must/ be
--     @VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES@
--
-- = See Also
--
-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
data VkSamplerYcbcrConversionImageFormatProperties = VkSamplerYcbcrConversionImageFormatProperties
  { -- | @sType@ is the type of this structure.
  vkSType :: VkStructureType
  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
  vkPNext :: Ptr ()
  , -- | @combinedImageSamplerDescriptorCount@ is the number of combined image
  -- sampler descriptors that the implementation uses to access the format.
  vkCombinedImageSamplerDescriptorCount :: Word32
  }
  deriving (Eq, Show)

instance Storable VkSamplerYcbcrConversionImageFormatProperties where
  sizeOf ~_ = 24
  alignment ~_ = 8
  peek ptr = VkSamplerYcbcrConversionImageFormatProperties <$> peek (ptr `plusPtr` 0)
                                                           <*> peek (ptr `plusPtr` 8)
                                                           <*> peek (ptr `plusPtr` 16)
  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerYcbcrConversionImageFormatProperties))
                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerYcbcrConversionImageFormatProperties))
                *> poke (ptr `plusPtr` 16) (vkCombinedImageSamplerDescriptorCount (poked :: VkSamplerYcbcrConversionImageFormatProperties))