{-# language CPP #-}
-- | = Name
--
-- VK_EXT_image_compression_control - device extension
--
-- == VK_EXT_image_compression_control
--
-- [__Name String__]
--     @VK_EXT_image_compression_control@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     339
--
-- [__Revision__]
--     1
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires support for Vulkan 1.0
--
-- [__Contact__]
--
--     -   Jan-Harald Fredriksen
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_EXT_image_compression_control] @janharaldfredriksen-arm%0A*Here describe the issue or question you have about the VK_EXT_image_compression_control extension* >
--
-- [__Extension Proposal__]
--     <https://github.com/KhronosGroup/Vulkan-Docs/tree/main/proposals/VK_EXT_image_compression_control.adoc VK_EXT_image_compression_control>
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2022-05-02
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Contributors__]
--
--     -   Jan-Harald Fredriksen, Arm
--
--     -   Graeme Leese, Broadcom
--
--     -   Andrew Garrard, Imagination
--
--     -   Lisa Wu, Arm
--
--     -   Peter Kohaut, Arm
--
-- == Description
--
-- This extension enables fixed-rate image compression and adds the ability
-- to control when this kind of compression can be applied. Many
-- implementations support some form of framebuffer compression. This is
-- typically transparent to applications as lossless compression schemes
-- are used. With fixed-rate compression, the compression is done at a
-- defined bitrate. Such compression algorithms generally produce results
-- that are visually lossless, but the results are typically not bit-exact
-- when compared to a non-compressed result. The implementation may not be
-- able to use the requested compression rate in all cases. This extension
-- adds a query that can be used to determine the compression scheme and
-- rate that was applied to an image.
--
-- == New Commands
--
-- -   'getImageSubresourceLayout2EXT'
--
-- == New Structures
--
-- -   'ImageSubresource2EXT'
--
-- -   'SubresourceLayout2EXT'
--
-- -   Extending 'Vulkan.Core10.Image.ImageCreateInfo',
--     'Vulkan.Extensions.VK_KHR_swapchain.SwapchainCreateInfoKHR',
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceImageFormatInfo2':
--
--     -   'ImageCompressionControlEXT'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.ImageFormatProperties2',
--     'Vulkan.Extensions.VK_KHR_get_surface_capabilities2.SurfaceFormat2KHR',
--     'SubresourceLayout2EXT':
--
--     -   'ImageCompressionPropertiesEXT'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceImageCompressionControlFeaturesEXT'
--
-- == New Enums
--
-- -   'ImageCompressionFixedRateFlagBitsEXT'
--
-- -   'ImageCompressionFlagBitsEXT'
--
-- == New Bitmasks
--
-- -   'ImageCompressionFixedRateFlagsEXT'
--
-- -   'ImageCompressionFlagsEXT'
--
-- == New Enum Constants
--
-- -   'EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME'
--
-- -   'EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.Result.Result':
--
--     -   'Vulkan.Core10.Enums.Result.ERROR_COMPRESSION_EXHAUSTED_EXT'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT'
--
-- == Version History
--
-- -   Revision 1, 2022-05-02 (Jan-Harald Fredriksen)
--
--     -   Initial draft
--
-- == See Also
--
-- 'ImageCompressionControlEXT', 'ImageCompressionFixedRateFlagBitsEXT',
-- 'ImageCompressionFixedRateFlagsEXT', 'ImageCompressionFlagBitsEXT',
-- 'ImageCompressionFlagsEXT', 'ImageCompressionPropertiesEXT',
-- 'ImageSubresource2EXT',
-- 'PhysicalDeviceImageCompressionControlFeaturesEXT',
-- 'SubresourceLayout2EXT', 'getImageSubresourceLayout2EXT'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_EXT_image_compression_control Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_EXT_image_compression_control  ( getImageSubresourceLayout2EXT
                                                           , ImageCompressionControlEXT(..)
                                                           , PhysicalDeviceImageCompressionControlFeaturesEXT(..)
                                                           , ImageCompressionPropertiesEXT(..)
                                                           , ImageSubresource2EXT(..)
                                                           , SubresourceLayout2EXT(..)
                                                           , ImageCompressionFlagsEXT
                                                           , ImageCompressionFlagBitsEXT( IMAGE_COMPRESSION_DEFAULT_EXT
                                                                                        , IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT
                                                                                        , IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT
                                                                                        , IMAGE_COMPRESSION_DISABLED_EXT
                                                                                        , ..
                                                                                        )
                                                           , ImageCompressionFixedRateFlagsEXT
                                                           , ImageCompressionFixedRateFlagBitsEXT( IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT
                                                                                                 , IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT
                                                                                                 , ..
                                                                                                 )
                                                           , EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION
                                                           , pattern EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION
                                                           , EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME
                                                           , pattern EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME
                                                           ) where

import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Vulkan.Internal.Utils (traceAroundEvent)
import Control.Monad (unless)
import Control.Monad.IO.Class (liftIO)
import Data.Typeable (eqT)
import Foreign.Marshal.Alloc (allocaBytes)
import GHC.IO (throwIO)
import GHC.Ptr (castPtr)
import GHC.Ptr (nullFunPtr)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showString)
import Numeric (showHex)
import Control.Monad.Trans.Class (lift)
import Control.Monad.Trans.Cont (evalContT)
import Vulkan.CStruct (FromCStruct)
import Vulkan.CStruct (FromCStruct(..))
import Vulkan.CStruct (ToCStruct)
import Vulkan.CStruct (ToCStruct(..))
import Vulkan.Zero (Zero)
import Vulkan.Zero (Zero(..))
import Control.Monad.IO.Class (MonadIO)
import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Data.String (IsString)
import Data.Type.Equality ((:~:)(Refl))
import Data.Typeable (Typeable)
import Foreign.Storable (Storable)
import Foreign.Storable (Storable(peek))
import Foreign.Storable (Storable(poke))
import qualified Foreign.Storable (Storable(..))
import GHC.Generics (Generic)
import GHC.IO.Exception (IOErrorType(..))
import GHC.IO.Exception (IOException(..))
import Foreign.Ptr (FunPtr)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Word (Word32)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.CStruct.Extends (forgetExtensions)
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.CStruct.Extends (Chain)
import Vulkan.Core10.Handles (Device)
import Vulkan.Core10.Handles (Device(..))
import Vulkan.Core10.Handles (Device(Device))
import Vulkan.Dynamic (DeviceCmds(pVkGetImageSubresourceLayout2EXT))
import Vulkan.Core10.Handles (Device_T)
import Vulkan.CStruct.Extends (Extends)
import Vulkan.CStruct.Extends (Extendss)
import Vulkan.CStruct.Extends (Extensible(..))
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Core10.Handles (Image)
import Vulkan.Core10.Handles (Image(..))
import Vulkan.Core10.SparseResourceMemoryManagement (ImageSubresource)
import Vulkan.CStruct.Extends (PeekChain)
import Vulkan.CStruct.Extends (PeekChain(..))
import Vulkan.CStruct.Extends (PokeChain)
import Vulkan.CStruct.Extends (PokeChain(..))
import Vulkan.CStruct.Extends (SomeStruct)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Image (SubresourceLayout)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkGetImageSubresourceLayout2EXT
  :: FunPtr (Ptr Device_T -> Image -> Ptr ImageSubresource2EXT -> Ptr (SomeStruct SubresourceLayout2EXT) -> IO ()) -> Ptr Device_T -> Image -> Ptr ImageSubresource2EXT -> Ptr (SomeStruct SubresourceLayout2EXT) -> IO ()

-- | vkGetImageSubresourceLayout2EXT - Retrieve information about an image
-- subresource
--
-- = Description
--
-- 'getImageSubresourceLayout2EXT' behaves similarly to
-- 'Vulkan.Core10.Image.getImageSubresourceLayout', with the ability to
-- specify extended inputs via chained input structures, and to return
-- extended information via chained output structures.
--
-- == Valid Usage
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-image-02270# @image@ /must/
--     have been created with @tiling@ equal to
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' or
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT'
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-aspectMask-00997# The
--     @aspectMask@ member of @pSubresource@ /must/ only have a single bit
--     set
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-mipLevel-01716# The @mipLevel@
--     member of @pSubresource@ /must/ be less than the @mipLevels@
--     specified in 'Vulkan.Core10.Image.ImageCreateInfo' when @image@ was
--     created
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-arrayLayer-01717# The
--     @arrayLayer@ member of @pSubresource@ /must/ be less than the
--     @arrayLayers@ specified in 'Vulkan.Core10.Image.ImageCreateInfo'
--     when @image@ was created
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-format-04461# If @format@ is a
--     color format, the @aspectMask@ member of @pSubresource@ /must/ be
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_COLOR_BIT'
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-format-04462# If @format@ has
--     a depth component, the @aspectMask@ member of @pSubresource@ /must/
--     contain
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT'
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-format-04463# If @format@ has
--     a stencil component, the @aspectMask@ member of @pSubresource@
--     /must/ contain
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-format-04464# If @format@ does
--     not contain a stencil or depth component, the @aspectMask@ member of
--     @pSubresource@ /must/ not contain
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_DEPTH_BIT' or
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_STENCIL_BIT'
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-format-01581# If the @tiling@
--     of the @image@ is
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its
--     @format@ is a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
--     with two planes, the @aspectMask@ member of @pSubresource@ /must/ be
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT'
--     or
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-format-01582# If the @tiling@
--     of the @image@ is
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_LINEAR' and its
--     @format@ is a
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-requiring-sampler-ycbcr-conversion multi-planar format>
--     with three planes, the @aspectMask@ member of @pSubresource@ /must/
--     be
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_0_BIT',
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_1_BIT'
--     or
--     'Vulkan.Core10.Enums.ImageAspectFlagBits.IMAGE_ASPECT_PLANE_2_BIT'
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-image-01895# If @image@ was
--     created with the
--     'Vulkan.Core11.Enums.ExternalMemoryHandleTypeFlagBits.EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID'
--     external memory handle type, then @image@ /must/ be bound to memory
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-tiling-02271# If the @tiling@
--     of the @image@ is
--     'Vulkan.Core10.Enums.ImageTiling.IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT',
--     then the @aspectMask@ member of @pSubresource@ /must/ be
--     @VK_IMAGE_ASPECT_MEMORY_PLANE_i_BIT_EXT@ and the index /i/ /must/ be
--     less than the
--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.DrmFormatModifierPropertiesEXT'::@drmFormatModifierPlaneCount@
--     associated with the image’s @format@ and
--     'Vulkan.Extensions.VK_EXT_image_drm_format_modifier.ImageDrmFormatModifierPropertiesEXT'::@drmFormatModifier@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-device-parameter# @device@
--     /must/ be a valid 'Vulkan.Core10.Handles.Device' handle
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-image-parameter# @image@
--     /must/ be a valid 'Vulkan.Core10.Handles.Image' handle
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-pSubresource-parameter#
--     @pSubresource@ /must/ be a valid pointer to a valid
--     'ImageSubresource2EXT' structure
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-pLayout-parameter# @pLayout@
--     /must/ be a valid pointer to a 'SubresourceLayout2EXT' structure
--
-- -   #VUID-vkGetImageSubresourceLayout2EXT-image-parent# @image@ /must/
--     have been created, allocated, or retrieved from @device@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_image_compression_control VK_EXT_image_compression_control>,
-- 'Vulkan.Core10.Handles.Device', 'Vulkan.Core10.Handles.Image',
-- 'ImageSubresource2EXT', 'SubresourceLayout2EXT'
getImageSubresourceLayout2EXT :: forall a io
                               . (Extendss SubresourceLayout2EXT a, PokeChain a, PeekChain a, MonadIO io)
                              => -- | @device@ is the logical device that owns the image.
                                 Device
                              -> -- | @image@ is the image whose layout is being queried.
                                 Image
                              -> -- | @pSubresource@ is a pointer to a 'ImageSubresource2EXT' structure
                                 -- selecting a specific image for the image subresource.
                                 ImageSubresource2EXT
                              -> io (SubresourceLayout2EXT a)
getImageSubresourceLayout2EXT :: Device
-> Image -> ImageSubresource2EXT -> io (SubresourceLayout2EXT a)
getImageSubresourceLayout2EXT Device
device Image
image ImageSubresource2EXT
subresource = IO (SubresourceLayout2EXT a) -> io (SubresourceLayout2EXT a)
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (SubresourceLayout2EXT a) -> io (SubresourceLayout2EXT a))
-> (ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
    -> IO (SubresourceLayout2EXT a))
-> ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
-> io (SubresourceLayout2EXT a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
-> IO (SubresourceLayout2EXT a)
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
 -> io (SubresourceLayout2EXT a))
-> ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
-> io (SubresourceLayout2EXT a)
forall a b. (a -> b) -> a -> b
$ do
  let vkGetImageSubresourceLayout2EXTPtr :: FunPtr
  (Ptr Device_T
   -> Image
   -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
   -> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
   -> IO ())
vkGetImageSubresourceLayout2EXTPtr = DeviceCmds
-> FunPtr
     (Ptr Device_T
      -> Image
      -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
      -> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
      -> IO ())
pVkGetImageSubresourceLayout2EXT (case Device
device of Device{DeviceCmds
$sel:deviceCmds:Device :: Device -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT (SubresourceLayout2EXT a) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (SubresourceLayout2EXT a) IO ())
-> IO () -> ContT (SubresourceLayout2EXT a) IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr Device_T
   -> Image
   -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
   -> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
   -> IO ())
vkGetImageSubresourceLayout2EXTPtr FunPtr
  (Ptr Device_T
   -> Image
   -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
   -> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
   -> IO ())
-> FunPtr
     (Ptr Device_T
      -> Image
      -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
      -> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
      -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr Device_T
   -> Image
   -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
   -> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
   -> IO ())
forall a. FunPtr a
nullFunPtr) (IO () -> IO ()) -> IO () -> IO ()
forall a b. (a -> b) -> a -> b
$
    IOException -> IO ()
forall e a. Exception e => e -> IO a
throwIO (IOException -> IO ()) -> IOException -> IO ()
forall a b. (a -> b) -> a -> b
$ Maybe Handle
-> IOErrorType
-> String
-> String
-> Maybe CInt
-> Maybe String
-> IOException
IOError Maybe Handle
forall a. Maybe a
Nothing IOErrorType
InvalidArgument String
"" String
"The function pointer for vkGetImageSubresourceLayout2EXT is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkGetImageSubresourceLayout2EXT' :: Ptr Device_T
-> Image
-> ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
-> IO ()
vkGetImageSubresourceLayout2EXT' = FunPtr
  (Ptr Device_T
   -> Image
   -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
   -> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
   -> IO ())
-> Ptr Device_T
-> Image
-> ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
-> IO ()
mkVkGetImageSubresourceLayout2EXT FunPtr
  (Ptr Device_T
   -> Image
   -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
   -> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
   -> IO ())
vkGetImageSubresourceLayout2EXTPtr
  "pSubresource" ::: Ptr ImageSubresource2EXT
pSubresource <- ((("pSubresource" ::: Ptr ImageSubresource2EXT)
  -> IO (SubresourceLayout2EXT a))
 -> IO (SubresourceLayout2EXT a))
-> ContT
     (SubresourceLayout2EXT a)
     IO
     ("pSubresource" ::: Ptr ImageSubresource2EXT)
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((("pSubresource" ::: Ptr ImageSubresource2EXT)
   -> IO (SubresourceLayout2EXT a))
  -> IO (SubresourceLayout2EXT a))
 -> ContT
      (SubresourceLayout2EXT a)
      IO
      ("pSubresource" ::: Ptr ImageSubresource2EXT))
-> ((("pSubresource" ::: Ptr ImageSubresource2EXT)
     -> IO (SubresourceLayout2EXT a))
    -> IO (SubresourceLayout2EXT a))
-> ContT
     (SubresourceLayout2EXT a)
     IO
     ("pSubresource" ::: Ptr ImageSubresource2EXT)
forall a b. (a -> b) -> a -> b
$ ImageSubresource2EXT
-> (("pSubresource" ::: Ptr ImageSubresource2EXT)
    -> IO (SubresourceLayout2EXT a))
-> IO (SubresourceLayout2EXT a)
forall a b. ToCStruct a => a -> (Ptr a -> IO b) -> IO b
withCStruct (ImageSubresource2EXT
subresource)
  Ptr (SubresourceLayout2EXT a)
pPLayout <- ((Ptr (SubresourceLayout2EXT a) -> IO (SubresourceLayout2EXT a))
 -> IO (SubresourceLayout2EXT a))
-> ContT
     (SubresourceLayout2EXT a) IO (Ptr (SubresourceLayout2EXT a))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (forall b.
ToCStruct (SubresourceLayout2EXT a) =>
(Ptr (SubresourceLayout2EXT a) -> IO b) -> IO b
forall a b. ToCStruct a => (Ptr a -> IO b) -> IO b
withZeroCStruct @(SubresourceLayout2EXT _))
  IO () -> ContT (SubresourceLayout2EXT a) IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT (SubresourceLayout2EXT a) IO ())
-> IO () -> ContT (SubresourceLayout2EXT a) IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkGetImageSubresourceLayout2EXT" (Ptr Device_T
-> Image
-> ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> ("pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT))
-> IO ()
vkGetImageSubresourceLayout2EXT' (Device -> Ptr Device_T
deviceHandle (Device
device)) (Image
image) "pSubresource" ::: Ptr ImageSubresource2EXT
pSubresource (Ptr (SubresourceLayout2EXT a)
-> "pLayout" ::: Ptr (SomeStruct SubresourceLayout2EXT)
forall (a :: [*] -> *) (es :: [*]).
Ptr (a es) -> Ptr (SomeStruct a)
forgetExtensions (Ptr (SubresourceLayout2EXT a)
pPLayout)))
  SubresourceLayout2EXT a
pLayout <- IO (SubresourceLayout2EXT a)
-> ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO (SubresourceLayout2EXT a)
 -> ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a))
-> IO (SubresourceLayout2EXT a)
-> ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
forall a b. (a -> b) -> a -> b
$ Ptr (SubresourceLayout2EXT a) -> IO (SubresourceLayout2EXT a)
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @(SubresourceLayout2EXT _) Ptr (SubresourceLayout2EXT a)
pPLayout
  SubresourceLayout2EXT a
-> ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SubresourceLayout2EXT a
 -> ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a))
-> SubresourceLayout2EXT a
-> ContT (SubresourceLayout2EXT a) IO (SubresourceLayout2EXT a)
forall a b. (a -> b) -> a -> b
$ (SubresourceLayout2EXT a
pLayout)


-- | VkImageCompressionControlEXT - Specify image compression properties
--
-- = Description
--
-- If enabled, fixed-rate compression is done in an implementation-defined
-- manner and /may/ be applied at block granularity. In that case, a write
-- to an individual texel /may/ modify the value of other texels in the
-- same block.
--
-- == Valid Usage
--
-- -   #VUID-VkImageCompressionControlEXT-flags-06747# @flags@ /must/ be
--     one of 'IMAGE_COMPRESSION_DEFAULT_EXT',
--     'IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT',
--     'IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT', or
--     'IMAGE_COMPRESSION_DISABLED_EXT'
--
-- -   #VUID-VkImageCompressionControlEXT-flags-06748# If @flags@ includes
--     'IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT', @pFixedRateFlags@
--     /must/ not be @NULL@
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkImageCompressionControlEXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT'
--
-- Note
--
-- Some combinations of compression properties may not be supported. For
-- example, some implementations may not support different fixed-rate
-- compression rates per plane of a multi-planar format and will not be
-- able to enable fixed-rate compression for any plane if the requested
-- rates differ.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_image_compression_control VK_EXT_image_compression_control>,
-- 'ImageCompressionFixedRateFlagsEXT', 'ImageCompressionFlagsEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data ImageCompressionControlEXT = ImageCompressionControlEXT
  { -- | @flags@ is a bitmask of 'ImageCompressionFlagBitsEXT' describing
    -- compression controls for the image.
    ImageCompressionControlEXT -> ImageCompressionFlagsEXT
flags :: ImageCompressionFlagsEXT
  , -- | @compressionControlPlaneCount@ is the number of entries in the
    -- @pFixedRateFlags@ array.
    ImageCompressionControlEXT -> Word32
compressionControlPlaneCount :: Word32
  , -- | @pFixedRateFlags@ is @NULL@ or a pointer to an array of
    -- 'ImageCompressionFixedRateFlagsEXT' bitfields describing allowed
    -- fixed-rate compression rates of each image plane. It is ignored if
    -- @flags@ does not include 'IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT'.
    ImageCompressionControlEXT -> Ptr ImageCompressionFixedRateFlagsEXT
fixedRateFlags :: Ptr ImageCompressionFixedRateFlagsEXT
  }
  deriving (Typeable, ImageCompressionControlEXT -> ImageCompressionControlEXT -> Bool
(ImageCompressionControlEXT -> ImageCompressionControlEXT -> Bool)
-> (ImageCompressionControlEXT
    -> ImageCompressionControlEXT -> Bool)
-> Eq ImageCompressionControlEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ImageCompressionControlEXT -> ImageCompressionControlEXT -> Bool
$c/= :: ImageCompressionControlEXT -> ImageCompressionControlEXT -> Bool
== :: ImageCompressionControlEXT -> ImageCompressionControlEXT -> Bool
$c== :: ImageCompressionControlEXT -> ImageCompressionControlEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ImageCompressionControlEXT)
#endif
deriving instance Show ImageCompressionControlEXT

instance ToCStruct ImageCompressionControlEXT where
  withCStruct :: ImageCompressionControlEXT
-> (Ptr ImageCompressionControlEXT -> IO b) -> IO b
withCStruct ImageCompressionControlEXT
x Ptr ImageCompressionControlEXT -> IO b
f = Int -> (Ptr ImageCompressionControlEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr ImageCompressionControlEXT -> IO b) -> IO b)
-> (Ptr ImageCompressionControlEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ImageCompressionControlEXT
p -> Ptr ImageCompressionControlEXT
-> ImageCompressionControlEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ImageCompressionControlEXT
p ImageCompressionControlEXT
x (Ptr ImageCompressionControlEXT -> IO b
f Ptr ImageCompressionControlEXT
p)
  pokeCStruct :: Ptr ImageCompressionControlEXT
-> ImageCompressionControlEXT -> IO b -> IO b
pokeCStruct Ptr ImageCompressionControlEXT
p ImageCompressionControlEXT{Word32
Ptr ImageCompressionFixedRateFlagsEXT
ImageCompressionFlagsEXT
fixedRateFlags :: Ptr ImageCompressionFixedRateFlagsEXT
compressionControlPlaneCount :: Word32
flags :: ImageCompressionFlagsEXT
$sel:fixedRateFlags:ImageCompressionControlEXT :: ImageCompressionControlEXT -> Ptr ImageCompressionFixedRateFlagsEXT
$sel:compressionControlPlaneCount:ImageCompressionControlEXT :: ImageCompressionControlEXT -> Word32
$sel:flags:ImageCompressionControlEXT :: ImageCompressionControlEXT -> ImageCompressionFlagsEXT
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT
-> Int -> Ptr ImageCompressionFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageCompressionFlagsEXT)) (ImageCompressionFlagsEXT
flags)
    Ptr Word32 -> Word32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32)) (Word32
compressionControlPlaneCount)
    Ptr (Ptr ImageCompressionFixedRateFlagsEXT)
-> Ptr ImageCompressionFixedRateFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT
-> Int -> Ptr (Ptr ImageCompressionFixedRateFlagsEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ImageCompressionFixedRateFlagsEXT))) (Ptr ImageCompressionFixedRateFlagsEXT
fixedRateFlags)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr ImageCompressionControlEXT -> IO b -> IO b
pokeZeroCStruct Ptr ImageCompressionControlEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_COMPRESSION_CONTROL_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT
-> Int -> Ptr ImageCompressionFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageCompressionFlagsEXT)) (ImageCompressionFlagsEXT
forall a. Zero a => a
zero)
    Ptr (Ptr ImageCompressionFixedRateFlagsEXT)
-> Ptr ImageCompressionFixedRateFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT
-> Int -> Ptr (Ptr ImageCompressionFixedRateFlagsEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ImageCompressionFixedRateFlagsEXT))) (Ptr ImageCompressionFixedRateFlagsEXT
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct ImageCompressionControlEXT where
  peekCStruct :: Ptr ImageCompressionControlEXT -> IO ImageCompressionControlEXT
peekCStruct Ptr ImageCompressionControlEXT
p = do
    ImageCompressionFlagsEXT
flags <- Ptr ImageCompressionFlagsEXT -> IO ImageCompressionFlagsEXT
forall a. Storable a => Ptr a -> IO a
peek @ImageCompressionFlagsEXT ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT
-> Int -> Ptr ImageCompressionFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageCompressionFlagsEXT))
    Word32
compressionControlPlaneCount <- Ptr Word32 -> IO Word32
forall a. Storable a => Ptr a -> IO a
peek @Word32 ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT -> Int -> Ptr Word32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr Word32))
    Ptr ImageCompressionFixedRateFlagsEXT
pFixedRateFlags <- Ptr (Ptr ImageCompressionFixedRateFlagsEXT)
-> IO (Ptr ImageCompressionFixedRateFlagsEXT)
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ImageCompressionFixedRateFlagsEXT) ((Ptr ImageCompressionControlEXT
p Ptr ImageCompressionControlEXT
-> Int -> Ptr (Ptr ImageCompressionFixedRateFlagsEXT)
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr (Ptr ImageCompressionFixedRateFlagsEXT)))
    ImageCompressionControlEXT -> IO ImageCompressionControlEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ImageCompressionControlEXT -> IO ImageCompressionControlEXT)
-> ImageCompressionControlEXT -> IO ImageCompressionControlEXT
forall a b. (a -> b) -> a -> b
$ ImageCompressionFlagsEXT
-> Word32
-> Ptr ImageCompressionFixedRateFlagsEXT
-> ImageCompressionControlEXT
ImageCompressionControlEXT
             ImageCompressionFlagsEXT
flags Word32
compressionControlPlaneCount Ptr ImageCompressionFixedRateFlagsEXT
pFixedRateFlags

instance Storable ImageCompressionControlEXT where
  sizeOf :: ImageCompressionControlEXT -> Int
sizeOf ~ImageCompressionControlEXT
_ = Int
32
  alignment :: ImageCompressionControlEXT -> Int
alignment ~ImageCompressionControlEXT
_ = Int
8
  peek :: Ptr ImageCompressionControlEXT -> IO ImageCompressionControlEXT
peek = Ptr ImageCompressionControlEXT -> IO ImageCompressionControlEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr ImageCompressionControlEXT
-> ImageCompressionControlEXT -> IO ()
poke Ptr ImageCompressionControlEXT
ptr ImageCompressionControlEXT
poked = Ptr ImageCompressionControlEXT
-> ImageCompressionControlEXT -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ImageCompressionControlEXT
ptr ImageCompressionControlEXT
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero ImageCompressionControlEXT where
  zero :: ImageCompressionControlEXT
zero = ImageCompressionFlagsEXT
-> Word32
-> Ptr ImageCompressionFixedRateFlagsEXT
-> ImageCompressionControlEXT
ImageCompressionControlEXT
           ImageCompressionFlagsEXT
forall a. Zero a => a
zero
           Word32
forall a. Zero a => a
zero
           Ptr ImageCompressionFixedRateFlagsEXT
forall a. Zero a => a
zero


-- | VkPhysicalDeviceImageCompressionControlFeaturesEXT - Structure
-- describing whether image compression controls can be supported by an
-- implementation
--
-- = Members
--
-- This structure describes the following feature:
--
-- = Description
--
-- If the 'PhysicalDeviceImageCompressionControlFeaturesEXT' structure is
-- included in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceFeatures2',
-- it is filled in to indicate whether each corresponding feature is
-- supported. 'PhysicalDeviceImageCompressionControlFeaturesEXT' /can/ also
-- be used in the @pNext@ chain of 'Vulkan.Core10.Device.DeviceCreateInfo'
-- to selectively enable these features.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_image_compression_control VK_EXT_image_compression_control>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceImageCompressionControlFeaturesEXT = PhysicalDeviceImageCompressionControlFeaturesEXT
  { -- | #features-imageCompressionControl# @imageCompressionControl@ indicates
    -- that the implementation supports providing controls for image
    -- compression at image creation time.
    PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool
imageCompressionControl :: Bool }
  deriving (Typeable, PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool
(PhysicalDeviceImageCompressionControlFeaturesEXT
 -> PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool)
-> (PhysicalDeviceImageCompressionControlFeaturesEXT
    -> PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool)
-> Eq PhysicalDeviceImageCompressionControlFeaturesEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool
$c/= :: PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool
== :: PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool
$c== :: PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceImageCompressionControlFeaturesEXT)
#endif
deriving instance Show PhysicalDeviceImageCompressionControlFeaturesEXT

instance ToCStruct PhysicalDeviceImageCompressionControlFeaturesEXT where
  withCStruct :: PhysicalDeviceImageCompressionControlFeaturesEXT
-> (Ptr PhysicalDeviceImageCompressionControlFeaturesEXT -> IO b)
-> IO b
withCStruct PhysicalDeviceImageCompressionControlFeaturesEXT
x Ptr PhysicalDeviceImageCompressionControlFeaturesEXT -> IO b
f = Int
-> (Ptr PhysicalDeviceImageCompressionControlFeaturesEXT -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceImageCompressionControlFeaturesEXT -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceImageCompressionControlFeaturesEXT -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p -> Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p PhysicalDeviceImageCompressionControlFeaturesEXT
x (Ptr PhysicalDeviceImageCompressionControlFeaturesEXT -> IO b
f Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p)
  pokeCStruct :: Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p PhysicalDeviceImageCompressionControlFeaturesEXT{Bool
imageCompressionControl :: Bool
$sel:imageCompressionControl:PhysicalDeviceImageCompressionControlFeaturesEXT :: PhysicalDeviceImageCompressionControlFeaturesEXT -> Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
imageCompressionControl))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_COMPRESSION_CONTROL_FEATURES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr Bool32 -> Bool32 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
forall a. Zero a => a
zero))
    IO b
f

instance FromCStruct PhysicalDeviceImageCompressionControlFeaturesEXT where
  peekCStruct :: Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> IO PhysicalDeviceImageCompressionControlFeaturesEXT
peekCStruct Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p = do
    Bool32
imageCompressionControl <- Ptr Bool32 -> IO Bool32
forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
p Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    PhysicalDeviceImageCompressionControlFeaturesEXT
-> IO PhysicalDeviceImageCompressionControlFeaturesEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceImageCompressionControlFeaturesEXT
 -> IO PhysicalDeviceImageCompressionControlFeaturesEXT)
-> PhysicalDeviceImageCompressionControlFeaturesEXT
-> IO PhysicalDeviceImageCompressionControlFeaturesEXT
forall a b. (a -> b) -> a -> b
$ Bool -> PhysicalDeviceImageCompressionControlFeaturesEXT
PhysicalDeviceImageCompressionControlFeaturesEXT
             (Bool32 -> Bool
bool32ToBool Bool32
imageCompressionControl)

instance Storable PhysicalDeviceImageCompressionControlFeaturesEXT where
  sizeOf :: PhysicalDeviceImageCompressionControlFeaturesEXT -> Int
sizeOf ~PhysicalDeviceImageCompressionControlFeaturesEXT
_ = Int
24
  alignment :: PhysicalDeviceImageCompressionControlFeaturesEXT -> Int
alignment ~PhysicalDeviceImageCompressionControlFeaturesEXT
_ = Int
8
  peek :: Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> IO PhysicalDeviceImageCompressionControlFeaturesEXT
peek = Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> IO PhysicalDeviceImageCompressionControlFeaturesEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT -> IO ()
poke Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
ptr PhysicalDeviceImageCompressionControlFeaturesEXT
poked = Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
-> PhysicalDeviceImageCompressionControlFeaturesEXT
-> IO ()
-> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceImageCompressionControlFeaturesEXT
ptr PhysicalDeviceImageCompressionControlFeaturesEXT
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero PhysicalDeviceImageCompressionControlFeaturesEXT where
  zero :: PhysicalDeviceImageCompressionControlFeaturesEXT
zero = Bool -> PhysicalDeviceImageCompressionControlFeaturesEXT
PhysicalDeviceImageCompressionControlFeaturesEXT
           Bool
forall a. Zero a => a
zero


-- | VkImageCompressionPropertiesEXT - Compression properties of an image
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_image_compression_control VK_EXT_image_compression_control>,
-- 'ImageCompressionFixedRateFlagsEXT', 'ImageCompressionFlagsEXT',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data ImageCompressionPropertiesEXT = ImageCompressionPropertiesEXT
  { -- | @imageCompressionFlags@ returns a value describing the compression
    -- controls that apply to the image. The value will be either
    -- 'IMAGE_COMPRESSION_DEFAULT_EXT' to indicate no fixed-rate compression,
    -- 'IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT' to indicate fixed-rate
    -- compression, or 'IMAGE_COMPRESSION_DISABLED_EXT' to indicate no
    -- compression.
    ImageCompressionPropertiesEXT -> ImageCompressionFlagsEXT
imageCompressionFlags :: ImageCompressionFlagsEXT
  , -- | @imageCompressionFixedRateFlags@ returns a
    -- 'ImageCompressionFixedRateFlagsEXT' value describing the compression
    -- rates that apply to the specified aspect of the image.
    ImageCompressionPropertiesEXT -> ImageCompressionFixedRateFlagsEXT
imageCompressionFixedRateFlags :: ImageCompressionFixedRateFlagsEXT
  }
  deriving (Typeable, ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> Bool
(ImageCompressionPropertiesEXT
 -> ImageCompressionPropertiesEXT -> Bool)
-> (ImageCompressionPropertiesEXT
    -> ImageCompressionPropertiesEXT -> Bool)
-> Eq ImageCompressionPropertiesEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> Bool
$c/= :: ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> Bool
== :: ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> Bool
$c== :: ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ImageCompressionPropertiesEXT)
#endif
deriving instance Show ImageCompressionPropertiesEXT

instance ToCStruct ImageCompressionPropertiesEXT where
  withCStruct :: ImageCompressionPropertiesEXT
-> (Ptr ImageCompressionPropertiesEXT -> IO b) -> IO b
withCStruct ImageCompressionPropertiesEXT
x Ptr ImageCompressionPropertiesEXT -> IO b
f = Int -> (Ptr ImageCompressionPropertiesEXT -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr ImageCompressionPropertiesEXT -> IO b) -> IO b)
-> (Ptr ImageCompressionPropertiesEXT -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr ImageCompressionPropertiesEXT
p -> Ptr ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ImageCompressionPropertiesEXT
p ImageCompressionPropertiesEXT
x (Ptr ImageCompressionPropertiesEXT -> IO b
f Ptr ImageCompressionPropertiesEXT
p)
  pokeCStruct :: Ptr ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> IO b -> IO b
pokeCStruct Ptr ImageCompressionPropertiesEXT
p ImageCompressionPropertiesEXT{ImageCompressionFixedRateFlagsEXT
ImageCompressionFlagsEXT
imageCompressionFixedRateFlags :: ImageCompressionFixedRateFlagsEXT
imageCompressionFlags :: ImageCompressionFlagsEXT
$sel:imageCompressionFixedRateFlags:ImageCompressionPropertiesEXT :: ImageCompressionPropertiesEXT -> ImageCompressionFixedRateFlagsEXT
$sel:imageCompressionFlags:ImageCompressionPropertiesEXT :: ImageCompressionPropertiesEXT -> ImageCompressionFlagsEXT
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT
-> Int -> Ptr ImageCompressionFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageCompressionFlagsEXT)) (ImageCompressionFlagsEXT
imageCompressionFlags)
    Ptr ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT
-> Int -> Ptr ImageCompressionFixedRateFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr ImageCompressionFixedRateFlagsEXT)) (ImageCompressionFixedRateFlagsEXT
imageCompressionFixedRateFlags)
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr ImageCompressionPropertiesEXT -> IO b -> IO b
pokeZeroCStruct Ptr ImageCompressionPropertiesEXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_COMPRESSION_PROPERTIES_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT
-> Int -> Ptr ImageCompressionFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageCompressionFlagsEXT)) (ImageCompressionFlagsEXT
forall a. Zero a => a
zero)
    Ptr ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT
-> Int -> Ptr ImageCompressionFixedRateFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr ImageCompressionFixedRateFlagsEXT)) (ImageCompressionFixedRateFlagsEXT
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct ImageCompressionPropertiesEXT where
  peekCStruct :: Ptr ImageCompressionPropertiesEXT
-> IO ImageCompressionPropertiesEXT
peekCStruct Ptr ImageCompressionPropertiesEXT
p = do
    ImageCompressionFlagsEXT
imageCompressionFlags <- Ptr ImageCompressionFlagsEXT -> IO ImageCompressionFlagsEXT
forall a. Storable a => Ptr a -> IO a
peek @ImageCompressionFlagsEXT ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT
-> Int -> Ptr ImageCompressionFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageCompressionFlagsEXT))
    ImageCompressionFixedRateFlagsEXT
imageCompressionFixedRateFlags <- Ptr ImageCompressionFixedRateFlagsEXT
-> IO ImageCompressionFixedRateFlagsEXT
forall a. Storable a => Ptr a -> IO a
peek @ImageCompressionFixedRateFlagsEXT ((Ptr ImageCompressionPropertiesEXT
p Ptr ImageCompressionPropertiesEXT
-> Int -> Ptr ImageCompressionFixedRateFlagsEXT
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
20 :: Ptr ImageCompressionFixedRateFlagsEXT))
    ImageCompressionPropertiesEXT -> IO ImageCompressionPropertiesEXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ImageCompressionPropertiesEXT -> IO ImageCompressionPropertiesEXT)
-> ImageCompressionPropertiesEXT
-> IO ImageCompressionPropertiesEXT
forall a b. (a -> b) -> a -> b
$ ImageCompressionFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionPropertiesEXT
ImageCompressionPropertiesEXT
             ImageCompressionFlagsEXT
imageCompressionFlags ImageCompressionFixedRateFlagsEXT
imageCompressionFixedRateFlags

instance Storable ImageCompressionPropertiesEXT where
  sizeOf :: ImageCompressionPropertiesEXT -> Int
sizeOf ~ImageCompressionPropertiesEXT
_ = Int
24
  alignment :: ImageCompressionPropertiesEXT -> Int
alignment ~ImageCompressionPropertiesEXT
_ = Int
8
  peek :: Ptr ImageCompressionPropertiesEXT
-> IO ImageCompressionPropertiesEXT
peek = Ptr ImageCompressionPropertiesEXT
-> IO ImageCompressionPropertiesEXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: Ptr ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> IO ()
poke Ptr ImageCompressionPropertiesEXT
ptr ImageCompressionPropertiesEXT
poked = Ptr ImageCompressionPropertiesEXT
-> ImageCompressionPropertiesEXT -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr ImageCompressionPropertiesEXT
ptr ImageCompressionPropertiesEXT
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero ImageCompressionPropertiesEXT where
  zero :: ImageCompressionPropertiesEXT
zero = ImageCompressionFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionPropertiesEXT
ImageCompressionPropertiesEXT
           ImageCompressionFlagsEXT
forall a. Zero a => a
zero
           ImageCompressionFixedRateFlagsEXT
forall a. Zero a => a
zero


-- | VkImageSubresource2EXT - Structure specifying an image subresource
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_image_compression_control VK_EXT_image_compression_control>,
-- 'Vulkan.Core10.SparseResourceMemoryManagement.ImageSubresource',
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'getImageSubresourceLayout2EXT'
data ImageSubresource2EXT = ImageSubresource2EXT
  { -- | @imageSubresource@ is a
    -- 'Vulkan.Core10.SparseResourceMemoryManagement.ImageSubresource'
    -- structure.
    --
    -- #VUID-VkImageSubresource2EXT-imageSubresource-parameter#
    -- @imageSubresource@ /must/ be a valid
    -- 'Vulkan.Core10.SparseResourceMemoryManagement.ImageSubresource'
    -- structure
    ImageSubresource2EXT -> ImageSubresource
imageSubresource :: ImageSubresource }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (ImageSubresource2EXT)
#endif
deriving instance Show ImageSubresource2EXT

instance ToCStruct ImageSubresource2EXT where
  withCStruct :: ImageSubresource2EXT
-> (("pSubresource" ::: Ptr ImageSubresource2EXT) -> IO b) -> IO b
withCStruct ImageSubresource2EXT
x ("pSubresource" ::: Ptr ImageSubresource2EXT) -> IO b
f = Int
-> (("pSubresource" ::: Ptr ImageSubresource2EXT) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((("pSubresource" ::: Ptr ImageSubresource2EXT) -> IO b) -> IO b)
-> (("pSubresource" ::: Ptr ImageSubresource2EXT) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \"pSubresource" ::: Ptr ImageSubresource2EXT
p -> ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> ImageSubresource2EXT -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pSubresource" ::: Ptr ImageSubresource2EXT
p ImageSubresource2EXT
x (("pSubresource" ::: Ptr ImageSubresource2EXT) -> IO b
f "pSubresource" ::: Ptr ImageSubresource2EXT
p)
  pokeCStruct :: ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> ImageSubresource2EXT -> IO b -> IO b
pokeCStruct "pSubresource" ::: Ptr ImageSubresource2EXT
p ImageSubresource2EXT{ImageSubresource
imageSubresource :: ImageSubresource
$sel:imageSubresource:ImageSubresource2EXT :: ImageSubresource2EXT -> ImageSubresource
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSubresource" ::: Ptr ImageSubresource2EXT
p ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSubresource" ::: Ptr ImageSubresource2EXT
p ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ImageSubresource -> ImageSubresource -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSubresource" ::: Ptr ImageSubresource2EXT
p ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> Int -> Ptr ImageSubresource
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageSubresource)) (ImageSubresource
imageSubresource)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: ("pSubresource" ::: Ptr ImageSubresource2EXT) -> IO b -> IO b
pokeZeroCStruct "pSubresource" ::: Ptr ImageSubresource2EXT
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSubresource" ::: Ptr ImageSubresource2EXT
p ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_IMAGE_SUBRESOURCE_2_EXT)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSubresource" ::: Ptr ImageSubresource2EXT
p ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr ImageSubresource -> ImageSubresource -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (("pSubresource" ::: Ptr ImageSubresource2EXT
p ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> Int -> Ptr ImageSubresource
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageSubresource)) (ImageSubresource
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct ImageSubresource2EXT where
  peekCStruct :: ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> IO ImageSubresource2EXT
peekCStruct "pSubresource" ::: Ptr ImageSubresource2EXT
p = do
    ImageSubresource
imageSubresource <- Ptr ImageSubresource -> IO ImageSubresource
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @ImageSubresource (("pSubresource" ::: Ptr ImageSubresource2EXT
p ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> Int -> Ptr ImageSubresource
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr ImageSubresource))
    ImageSubresource2EXT -> IO ImageSubresource2EXT
forall (f :: * -> *) a. Applicative f => a -> f a
pure (ImageSubresource2EXT -> IO ImageSubresource2EXT)
-> ImageSubresource2EXT -> IO ImageSubresource2EXT
forall a b. (a -> b) -> a -> b
$ ImageSubresource -> ImageSubresource2EXT
ImageSubresource2EXT
             ImageSubresource
imageSubresource

instance Storable ImageSubresource2EXT where
  sizeOf :: ImageSubresource2EXT -> Int
sizeOf ~ImageSubresource2EXT
_ = Int
32
  alignment :: ImageSubresource2EXT -> Int
alignment ~ImageSubresource2EXT
_ = Int
8
  peek :: ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> IO ImageSubresource2EXT
peek = ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> IO ImageSubresource2EXT
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct
  poke :: ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> ImageSubresource2EXT -> IO ()
poke "pSubresource" ::: Ptr ImageSubresource2EXT
ptr ImageSubresource2EXT
poked = ("pSubresource" ::: Ptr ImageSubresource2EXT)
-> ImageSubresource2EXT -> IO () -> IO ()
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct "pSubresource" ::: Ptr ImageSubresource2EXT
ptr ImageSubresource2EXT
poked (() -> IO ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())

instance Zero ImageSubresource2EXT where
  zero :: ImageSubresource2EXT
zero = ImageSubresource -> ImageSubresource2EXT
ImageSubresource2EXT
           ImageSubresource
forall a. Zero a => a
zero


-- | VkSubresourceLayout2EXT - Structure specifying subresource layout
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkSubresourceLayout2EXT-sType-sType# @sType@ /must/ be
--     'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT'
--
-- -   #VUID-VkSubresourceLayout2EXT-pNext-pNext# @pNext@ /must/ be @NULL@
--     or a pointer to a valid instance of 'ImageCompressionPropertiesEXT'
--
-- -   #VUID-VkSubresourceLayout2EXT-sType-unique# The @sType@ value of
--     each struct in the @pNext@ chain /must/ be unique
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_image_compression_control VK_EXT_image_compression_control>,
-- 'Vulkan.Core10.Enums.StructureType.StructureType',
-- 'Vulkan.Core10.Image.SubresourceLayout', 'getImageSubresourceLayout2EXT'
data SubresourceLayout2EXT (es :: [Type]) = SubresourceLayout2EXT
  { -- | @pNext@ is @NULL@ or a pointer to a structure extending this structure.
    SubresourceLayout2EXT es -> Chain es
next :: Chain es
  , -- | @subresourceLayout@ is a 'Vulkan.Core10.Image.SubresourceLayout'
    -- structure.
    SubresourceLayout2EXT es -> SubresourceLayout
subresourceLayout :: SubresourceLayout
  }
  deriving (Typeable)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (SubresourceLayout2EXT (es :: [Type]))
#endif
deriving instance Show (Chain es) => Show (SubresourceLayout2EXT es)

instance Extensible SubresourceLayout2EXT where
  extensibleTypeName :: String
extensibleTypeName = String
"SubresourceLayout2EXT"
  setNext :: SubresourceLayout2EXT ds -> Chain es -> SubresourceLayout2EXT es
setNext SubresourceLayout2EXT{Chain ds
SubresourceLayout
subresourceLayout :: SubresourceLayout
next :: Chain ds
$sel:subresourceLayout:SubresourceLayout2EXT :: forall (es :: [*]). SubresourceLayout2EXT es -> SubresourceLayout
$sel:next:SubresourceLayout2EXT :: forall (es :: [*]). SubresourceLayout2EXT es -> Chain es
..} Chain es
next' = SubresourceLayout2EXT :: forall (es :: [*]).
Chain es -> SubresourceLayout -> SubresourceLayout2EXT es
SubresourceLayout2EXT{$sel:next:SubresourceLayout2EXT :: Chain es
next = Chain es
next', SubresourceLayout
subresourceLayout :: SubresourceLayout
$sel:subresourceLayout:SubresourceLayout2EXT :: SubresourceLayout
..}
  getNext :: SubresourceLayout2EXT es -> Chain es
getNext SubresourceLayout2EXT{Chain es
SubresourceLayout
subresourceLayout :: SubresourceLayout
next :: Chain es
$sel:subresourceLayout:SubresourceLayout2EXT :: forall (es :: [*]). SubresourceLayout2EXT es -> SubresourceLayout
$sel:next:SubresourceLayout2EXT :: forall (es :: [*]). SubresourceLayout2EXT es -> Chain es
..} = Chain es
next
  extends :: forall e b proxy. Typeable e => proxy e -> (Extends SubresourceLayout2EXT e => b) -> Maybe b
  extends :: proxy e -> (Extends SubresourceLayout2EXT e => b) -> Maybe b
extends proxy e
_ Extends SubresourceLayout2EXT e => b
f
    | Just e :~: ImageCompressionPropertiesEXT
Refl <- (Typeable e, Typeable ImageCompressionPropertiesEXT) =>
Maybe (e :~: ImageCompressionPropertiesEXT)
forall k (a :: k) (b :: k).
(Typeable a, Typeable b) =>
Maybe (a :~: b)
eqT @e @ImageCompressionPropertiesEXT = b -> Maybe b
forall a. a -> Maybe a
Just b
Extends SubresourceLayout2EXT e => b
f
    | Bool
otherwise = Maybe b
forall a. Maybe a
Nothing

instance (Extendss SubresourceLayout2EXT es, PokeChain es) => ToCStruct (SubresourceLayout2EXT es) where
  withCStruct :: SubresourceLayout2EXT es
-> (Ptr (SubresourceLayout2EXT es) -> IO b) -> IO b
withCStruct SubresourceLayout2EXT es
x Ptr (SubresourceLayout2EXT es) -> IO b
f = Int -> (Ptr (SubresourceLayout2EXT es) -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
56 ((Ptr (SubresourceLayout2EXT es) -> IO b) -> IO b)
-> (Ptr (SubresourceLayout2EXT es) -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr (SubresourceLayout2EXT es)
p -> Ptr (SubresourceLayout2EXT es)
-> SubresourceLayout2EXT es -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr (SubresourceLayout2EXT es)
p SubresourceLayout2EXT es
x (Ptr (SubresourceLayout2EXT es) -> IO b
f Ptr (SubresourceLayout2EXT es)
p)
  pokeCStruct :: Ptr (SubresourceLayout2EXT es)
-> SubresourceLayout2EXT es -> IO b -> IO b
pokeCStruct Ptr (SubresourceLayout2EXT es)
p SubresourceLayout2EXT{Chain es
SubresourceLayout
subresourceLayout :: SubresourceLayout
next :: Chain es
$sel:subresourceLayout:SubresourceLayout2EXT :: forall (es :: [*]). SubresourceLayout2EXT es -> SubresourceLayout
$sel:next:SubresourceLayout2EXT :: forall (es :: [*]). SubresourceLayout2EXT es -> Chain es
..} IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubresourceLayout2EXT es)
p Ptr (SubresourceLayout2EXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT)
    Ptr ()
pNext'' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ Chain es -> (Ptr (Chain es) -> IO b) -> IO b
forall (es :: [*]) a.
PokeChain es =>
Chain es -> (Ptr (Chain es) -> IO a) -> IO a
withChain (Chain es
next)
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubresourceLayout2EXT es)
p Ptr (SubresourceLayout2EXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext''
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr SubresourceLayout -> SubresourceLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubresourceLayout2EXT es)
p Ptr (SubresourceLayout2EXT es) -> Int -> Ptr SubresourceLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr SubresourceLayout)) (SubresourceLayout
subresourceLayout)
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f
  cStructSize :: Int
cStructSize = Int
56
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: Ptr (SubresourceLayout2EXT es) -> IO b -> IO b
pokeZeroCStruct Ptr (SubresourceLayout2EXT es)
p IO b
f = ContT b IO b -> IO b
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT b IO b -> IO b) -> ContT b IO b -> IO b
forall a b. (a -> b) -> a -> b
$ do
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubresourceLayout2EXT es)
p Ptr (SubresourceLayout2EXT es) -> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_SUBRESOURCE_LAYOUT_2_EXT)
    Ptr ()
pNext' <- (Ptr (Chain es) -> Ptr ())
-> ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ())
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Ptr (Chain es) -> Ptr ()
forall a b. Ptr a -> Ptr b
castPtr (ContT b IO (Ptr (Chain es)) -> ContT b IO (Ptr ()))
-> (((Ptr (Chain es) -> IO b) -> IO b)
    -> ContT b IO (Ptr (Chain es)))
-> ((Ptr (Chain es) -> IO b) -> IO b)
-> ContT b IO (Ptr ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr (Chain es))
forall k (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ()))
-> ((Ptr (Chain es) -> IO b) -> IO b) -> ContT b IO (Ptr ())
forall a b. (a -> b) -> a -> b
$ forall a. PokeChain es => (Ptr (Chain es) -> IO a) -> IO a
forall (es :: [*]) a.
PokeChain es =>
(Ptr (Chain es) -> IO a) -> IO a
withZeroChain @es
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubresourceLayout2EXT es)
p Ptr (SubresourceLayout2EXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) Ptr ()
pNext'
    IO () -> ContT b IO ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT b IO ()) -> IO () -> ContT b IO ()
forall a b. (a -> b) -> a -> b
$ Ptr SubresourceLayout -> SubresourceLayout -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr (SubresourceLayout2EXT es)
p Ptr (SubresourceLayout2EXT es) -> Int -> Ptr SubresourceLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr SubresourceLayout)) (SubresourceLayout
forall a. Zero a => a
zero)
    IO b -> ContT b IO b
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO b -> ContT b IO b) -> IO b -> ContT b IO b
forall a b. (a -> b) -> a -> b
$ IO b
f

instance (Extendss SubresourceLayout2EXT es, PeekChain es) => FromCStruct (SubresourceLayout2EXT es) where
  peekCStruct :: Ptr (SubresourceLayout2EXT es) -> IO (SubresourceLayout2EXT es)
peekCStruct Ptr (SubresourceLayout2EXT es)
p = do
    Ptr ()
pNext <- Ptr (Ptr ()) -> IO (Ptr ())
forall a. Storable a => Ptr a -> IO a
peek @(Ptr ()) ((Ptr (SubresourceLayout2EXT es)
p Ptr (SubresourceLayout2EXT es) -> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ())))
    Chain es
next <- Ptr (Chain es) -> IO (Chain es)
forall (es :: [*]). PeekChain es => Ptr (Chain es) -> IO (Chain es)
peekChain (Ptr () -> Ptr (Chain es)
forall a b. Ptr a -> Ptr b
castPtr Ptr ()
pNext)
    SubresourceLayout
subresourceLayout <- Ptr SubresourceLayout -> IO SubresourceLayout
forall a. FromCStruct a => Ptr a -> IO a
peekCStruct @SubresourceLayout ((Ptr (SubresourceLayout2EXT es)
p Ptr (SubresourceLayout2EXT es) -> Int -> Ptr SubresourceLayout
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr SubresourceLayout))
    SubresourceLayout2EXT es -> IO (SubresourceLayout2EXT es)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (SubresourceLayout2EXT es -> IO (SubresourceLayout2EXT es))
-> SubresourceLayout2EXT es -> IO (SubresourceLayout2EXT es)
forall a b. (a -> b) -> a -> b
$ Chain es -> SubresourceLayout -> SubresourceLayout2EXT es
forall (es :: [*]).
Chain es -> SubresourceLayout -> SubresourceLayout2EXT es
SubresourceLayout2EXT
             Chain es
next SubresourceLayout
subresourceLayout

instance es ~ '[] => Zero (SubresourceLayout2EXT es) where
  zero :: SubresourceLayout2EXT es
zero = Chain es -> SubresourceLayout -> SubresourceLayout2EXT es
forall (es :: [*]).
Chain es -> SubresourceLayout -> SubresourceLayout2EXT es
SubresourceLayout2EXT
           ()
           SubresourceLayout
forall a. Zero a => a
zero


type ImageCompressionFlagsEXT = ImageCompressionFlagBitsEXT

-- | VkImageCompressionFlagBitsEXT - Bitmask specifying image compression
-- controls
--
-- = Description
--
-- If 'ImageCompressionControlEXT'::@flags@ is
-- 'IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT', then the @i@th member of
-- the @pFixedRateFlags@ array specifies the allowed compression rates for
-- the image’s @i@th plane.
--
-- Note
--
-- If 'IMAGE_COMPRESSION_DISABLED_EXT' is included in
-- 'ImageCompressionControlEXT'::@flags@, both lossless and fixed-rate
-- compression will be disabled. This is likely to have a negative impact
-- on performance and is only intended to be used for debugging purposes.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_image_compression_control VK_EXT_image_compression_control>,
-- 'ImageCompressionFlagsEXT'
newtype ImageCompressionFlagBitsEXT = ImageCompressionFlagBitsEXT Flags
  deriving newtype (ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
(ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool)
-> (ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool)
-> Eq ImageCompressionFlagsEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
$c/= :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
== :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
$c== :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
Eq, Eq ImageCompressionFlagsEXT
Eq ImageCompressionFlagsEXT
-> (ImageCompressionFlagsEXT
    -> ImageCompressionFlagsEXT -> Ordering)
-> (ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool)
-> (ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool)
-> (ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool)
-> (ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool)
-> (ImageCompressionFlagsEXT
    -> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT
    -> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT)
-> Ord ImageCompressionFlagsEXT
ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Ordering
ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
$cmin :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
max :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
$cmax :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
>= :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
$c>= :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
> :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
$c> :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
<= :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
$c<= :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
< :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
$c< :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Bool
compare :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Ordering
$ccompare :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> Ordering
$cp1Ord :: Eq ImageCompressionFlagsEXT
Ord, Ptr b -> Int -> IO ImageCompressionFlagsEXT
Ptr b -> Int -> ImageCompressionFlagsEXT -> IO ()
Ptr ImageCompressionFlagsEXT -> IO ImageCompressionFlagsEXT
Ptr ImageCompressionFlagsEXT -> Int -> IO ImageCompressionFlagsEXT
Ptr ImageCompressionFlagsEXT
-> Int -> ImageCompressionFlagsEXT -> IO ()
Ptr ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> IO ()
ImageCompressionFlagsEXT -> Int
(ImageCompressionFlagsEXT -> Int)
-> (ImageCompressionFlagsEXT -> Int)
-> (Ptr ImageCompressionFlagsEXT
    -> Int -> IO ImageCompressionFlagsEXT)
-> (Ptr ImageCompressionFlagsEXT
    -> Int -> ImageCompressionFlagsEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO ImageCompressionFlagsEXT)
-> (forall b. Ptr b -> Int -> ImageCompressionFlagsEXT -> IO ())
-> (Ptr ImageCompressionFlagsEXT -> IO ImageCompressionFlagsEXT)
-> (Ptr ImageCompressionFlagsEXT
    -> ImageCompressionFlagsEXT -> IO ())
-> Storable ImageCompressionFlagsEXT
forall b. Ptr b -> Int -> IO ImageCompressionFlagsEXT
forall b. Ptr b -> Int -> ImageCompressionFlagsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> IO ()
$cpoke :: Ptr ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT -> IO ()
peek :: Ptr ImageCompressionFlagsEXT -> IO ImageCompressionFlagsEXT
$cpeek :: Ptr ImageCompressionFlagsEXT -> IO ImageCompressionFlagsEXT
pokeByteOff :: Ptr b -> Int -> ImageCompressionFlagsEXT -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> ImageCompressionFlagsEXT -> IO ()
peekByteOff :: Ptr b -> Int -> IO ImageCompressionFlagsEXT
$cpeekByteOff :: forall b. Ptr b -> Int -> IO ImageCompressionFlagsEXT
pokeElemOff :: Ptr ImageCompressionFlagsEXT
-> Int -> ImageCompressionFlagsEXT -> IO ()
$cpokeElemOff :: Ptr ImageCompressionFlagsEXT
-> Int -> ImageCompressionFlagsEXT -> IO ()
peekElemOff :: Ptr ImageCompressionFlagsEXT -> Int -> IO ImageCompressionFlagsEXT
$cpeekElemOff :: Ptr ImageCompressionFlagsEXT -> Int -> IO ImageCompressionFlagsEXT
alignment :: ImageCompressionFlagsEXT -> Int
$calignment :: ImageCompressionFlagsEXT -> Int
sizeOf :: ImageCompressionFlagsEXT -> Int
$csizeOf :: ImageCompressionFlagsEXT -> Int
Storable, ImageCompressionFlagsEXT
ImageCompressionFlagsEXT -> Zero ImageCompressionFlagsEXT
forall a. a -> Zero a
zero :: ImageCompressionFlagsEXT
$czero :: ImageCompressionFlagsEXT
Zero, Eq ImageCompressionFlagsEXT
ImageCompressionFlagsEXT
Eq ImageCompressionFlagsEXT
-> (ImageCompressionFlagsEXT
    -> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT
    -> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT
    -> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> ImageCompressionFlagsEXT
-> (Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> Bool)
-> (ImageCompressionFlagsEXT -> Maybe Int)
-> (ImageCompressionFlagsEXT -> Int)
-> (ImageCompressionFlagsEXT -> Bool)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT)
-> (ImageCompressionFlagsEXT -> Int)
-> Bits ImageCompressionFlagsEXT
Int -> ImageCompressionFlagsEXT
ImageCompressionFlagsEXT -> Bool
ImageCompressionFlagsEXT -> Int
ImageCompressionFlagsEXT -> Maybe Int
ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
ImageCompressionFlagsEXT -> Int -> Bool
ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: ImageCompressionFlagsEXT -> Int
$cpopCount :: ImageCompressionFlagsEXT -> Int
rotateR :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$crotateR :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
rotateL :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$crotateL :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
unsafeShiftR :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$cunsafeShiftR :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
shiftR :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$cshiftR :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
unsafeShiftL :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$cunsafeShiftL :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
shiftL :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$cshiftL :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
isSigned :: ImageCompressionFlagsEXT -> Bool
$cisSigned :: ImageCompressionFlagsEXT -> Bool
bitSize :: ImageCompressionFlagsEXT -> Int
$cbitSize :: ImageCompressionFlagsEXT -> Int
bitSizeMaybe :: ImageCompressionFlagsEXT -> Maybe Int
$cbitSizeMaybe :: ImageCompressionFlagsEXT -> Maybe Int
testBit :: ImageCompressionFlagsEXT -> Int -> Bool
$ctestBit :: ImageCompressionFlagsEXT -> Int -> Bool
complementBit :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$ccomplementBit :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
clearBit :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$cclearBit :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
setBit :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$csetBit :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
bit :: Int -> ImageCompressionFlagsEXT
$cbit :: Int -> ImageCompressionFlagsEXT
zeroBits :: ImageCompressionFlagsEXT
$czeroBits :: ImageCompressionFlagsEXT
rotate :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$crotate :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
shift :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
$cshift :: ImageCompressionFlagsEXT -> Int -> ImageCompressionFlagsEXT
complement :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
$ccomplement :: ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
xor :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
$cxor :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
.|. :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
$c.|. :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
.&. :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
$c.&. :: ImageCompressionFlagsEXT
-> ImageCompressionFlagsEXT -> ImageCompressionFlagsEXT
$cp1Bits :: Eq ImageCompressionFlagsEXT
Bits, Bits ImageCompressionFlagsEXT
Bits ImageCompressionFlagsEXT
-> (ImageCompressionFlagsEXT -> Int)
-> (ImageCompressionFlagsEXT -> Int)
-> (ImageCompressionFlagsEXT -> Int)
-> FiniteBits ImageCompressionFlagsEXT
ImageCompressionFlagsEXT -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: ImageCompressionFlagsEXT -> Int
$ccountTrailingZeros :: ImageCompressionFlagsEXT -> Int
countLeadingZeros :: ImageCompressionFlagsEXT -> Int
$ccountLeadingZeros :: ImageCompressionFlagsEXT -> Int
finiteBitSize :: ImageCompressionFlagsEXT -> Int
$cfiniteBitSize :: ImageCompressionFlagsEXT -> Int
$cp1FiniteBits :: Bits ImageCompressionFlagsEXT
FiniteBits)

-- | 'IMAGE_COMPRESSION_DEFAULT_EXT' specifies that the default image
-- compression setting is used. Implementations /must/ not apply fixed-rate
-- compression.
pattern $bIMAGE_COMPRESSION_DEFAULT_EXT :: ImageCompressionFlagsEXT
$mIMAGE_COMPRESSION_DEFAULT_EXT :: forall r.
ImageCompressionFlagsEXT -> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_DEFAULT_EXT             = ImageCompressionFlagBitsEXT 0x00000000
-- | 'IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT' specifies that the
-- implementation /may/ choose any supported fixed-rate compression setting
-- in an implementation-defined manner based on the properties of the
-- image.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT :: ImageCompressionFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT :: forall r.
ImageCompressionFlagsEXT -> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT  = ImageCompressionFlagBitsEXT 0x00000001
-- | 'IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT' specifies that fixed-rate
-- compression /may/ be used and that the allowed compression rates are
-- specified by 'ImageCompressionControlEXT'::@pFixedRateFlags@.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT :: ImageCompressionFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT :: forall r.
ImageCompressionFlagsEXT -> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT = ImageCompressionFlagBitsEXT 0x00000002
-- | 'IMAGE_COMPRESSION_DISABLED_EXT' specifies that all lossless and
-- fixed-rate compression /should/ be disabled.
pattern $bIMAGE_COMPRESSION_DISABLED_EXT :: ImageCompressionFlagsEXT
$mIMAGE_COMPRESSION_DISABLED_EXT :: forall r.
ImageCompressionFlagsEXT -> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_DISABLED_EXT            = ImageCompressionFlagBitsEXT 0x00000004

conNameImageCompressionFlagBitsEXT :: String
conNameImageCompressionFlagBitsEXT :: String
conNameImageCompressionFlagBitsEXT = String
"ImageCompressionFlagBitsEXT"

enumPrefixImageCompressionFlagBitsEXT :: String
enumPrefixImageCompressionFlagBitsEXT :: String
enumPrefixImageCompressionFlagBitsEXT = String
"IMAGE_COMPRESSION_"

showTableImageCompressionFlagBitsEXT :: [(ImageCompressionFlagBitsEXT, String)]
showTableImageCompressionFlagBitsEXT :: [(ImageCompressionFlagsEXT, String)]
showTableImageCompressionFlagBitsEXT =
  [ (ImageCompressionFlagsEXT
IMAGE_COMPRESSION_DEFAULT_EXT            , String
"DEFAULT_EXT")
  , (ImageCompressionFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_DEFAULT_EXT , String
"FIXED_RATE_DEFAULT_EXT")
  , (ImageCompressionFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT, String
"FIXED_RATE_EXPLICIT_EXT")
  , (ImageCompressionFlagsEXT
IMAGE_COMPRESSION_DISABLED_EXT           , String
"DISABLED_EXT")
  ]

instance Show ImageCompressionFlagBitsEXT where
  showsPrec :: Int -> ImageCompressionFlagsEXT -> ShowS
showsPrec = String
-> [(ImageCompressionFlagsEXT, String)]
-> String
-> (ImageCompressionFlagsEXT -> Word32)
-> (Word32 -> ShowS)
-> Int
-> ImageCompressionFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixImageCompressionFlagBitsEXT
                            [(ImageCompressionFlagsEXT, String)]
showTableImageCompressionFlagBitsEXT
                            String
conNameImageCompressionFlagBitsEXT
                            (\(ImageCompressionFlagBitsEXT Word32
x) -> Word32
x)
                            (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex Word32
x)

instance Read ImageCompressionFlagBitsEXT where
  readPrec :: ReadPrec ImageCompressionFlagsEXT
readPrec = String
-> [(ImageCompressionFlagsEXT, String)]
-> String
-> (Word32 -> ImageCompressionFlagsEXT)
-> ReadPrec ImageCompressionFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixImageCompressionFlagBitsEXT
                          [(ImageCompressionFlagsEXT, String)]
showTableImageCompressionFlagBitsEXT
                          String
conNameImageCompressionFlagBitsEXT
                          Word32 -> ImageCompressionFlagsEXT
ImageCompressionFlagBitsEXT


type ImageCompressionFixedRateFlagsEXT = ImageCompressionFixedRateFlagBitsEXT

-- | VkImageCompressionFixedRateFlagBitsEXT - Bitmask specifying fixed rate
-- image compression rates
--
-- = Description
--
-- If the format has a different bit rate for different components,
-- 'ImageCompressionControlEXT'::@pFixedRateFlags@ describes the rate of
-- the component with the largest number of bits assigned to it, scaled pro
-- rata. For example, to request that a
-- 'Vulkan.Core10.Enums.Format.FORMAT_A2R10G10B10_UNORM_PACK32' format be
-- stored at a rate of 8 bits per pixel, use
-- 'IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT' (10 bits for the largest
-- component, stored at quarter the original size, 2.5 bits, rounded down).
--
-- If @flags@ includes 'IMAGE_COMPRESSION_FIXED_RATE_EXPLICIT_EXT', and
-- multiple bits are set in 'ImageCompressionControlEXT'::pFixedRateFlags
-- for a plane, implementations /should/ apply the lowest allowed bitrate
-- that is supported.
--
-- Note
--
-- The choice of “bits per component” terminology was chosen so that the
-- same compression rate describes the same degree of compression applied
-- to formats that differ only in the number of components. For example,
-- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8_UNORM' compressed to half its
-- original size is a rate of 4 bits per component, 8 bits per pixel.
-- 'Vulkan.Core10.Enums.Format.FORMAT_R8G8B8A8_UNORM' compressed to half
-- /its/ original size is 4 bits per component, 16 bits per pixel. Both of
-- these cases can be requested with
-- 'IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT'.
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_image_compression_control VK_EXT_image_compression_control>,
-- 'ImageCompressionFixedRateFlagsEXT'
newtype ImageCompressionFixedRateFlagBitsEXT = ImageCompressionFixedRateFlagBitsEXT Flags
  deriving newtype (ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
(ImageCompressionFixedRateFlagsEXT
 -> ImageCompressionFixedRateFlagsEXT -> Bool)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT -> Bool)
-> Eq ImageCompressionFixedRateFlagsEXT
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
$c/= :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
== :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
$c== :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
Eq, Eq ImageCompressionFixedRateFlagsEXT
Eq ImageCompressionFixedRateFlagsEXT
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT -> Ordering)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT -> Bool)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT -> Bool)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT -> Bool)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT -> Bool)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT)
-> Ord ImageCompressionFixedRateFlagsEXT
ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Ordering
ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
$cmin :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
max :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
$cmax :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
>= :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
$c>= :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
> :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
$c> :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
<= :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
$c<= :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
< :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
$c< :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Bool
compare :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Ordering
$ccompare :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> Ordering
$cp1Ord :: Eq ImageCompressionFixedRateFlagsEXT
Ord, Ptr b -> Int -> IO ImageCompressionFixedRateFlagsEXT
Ptr b -> Int -> ImageCompressionFixedRateFlagsEXT -> IO ()
Ptr ImageCompressionFixedRateFlagsEXT
-> IO ImageCompressionFixedRateFlagsEXT
Ptr ImageCompressionFixedRateFlagsEXT
-> Int -> IO ImageCompressionFixedRateFlagsEXT
Ptr ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT -> IO ()
Ptr ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> IO ()
ImageCompressionFixedRateFlagsEXT -> Int
(ImageCompressionFixedRateFlagsEXT -> Int)
-> (ImageCompressionFixedRateFlagsEXT -> Int)
-> (Ptr ImageCompressionFixedRateFlagsEXT
    -> Int -> IO ImageCompressionFixedRateFlagsEXT)
-> (Ptr ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT -> IO ())
-> (forall b. Ptr b -> Int -> IO ImageCompressionFixedRateFlagsEXT)
-> (forall b.
    Ptr b -> Int -> ImageCompressionFixedRateFlagsEXT -> IO ())
-> (Ptr ImageCompressionFixedRateFlagsEXT
    -> IO ImageCompressionFixedRateFlagsEXT)
-> (Ptr ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT -> IO ())
-> Storable ImageCompressionFixedRateFlagsEXT
forall b. Ptr b -> Int -> IO ImageCompressionFixedRateFlagsEXT
forall b.
Ptr b -> Int -> ImageCompressionFixedRateFlagsEXT -> IO ()
forall a.
(a -> Int)
-> (a -> Int)
-> (Ptr a -> Int -> IO a)
-> (Ptr a -> Int -> a -> IO ())
-> (forall b. Ptr b -> Int -> IO a)
-> (forall b. Ptr b -> Int -> a -> IO ())
-> (Ptr a -> IO a)
-> (Ptr a -> a -> IO ())
-> Storable a
poke :: Ptr ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> IO ()
$cpoke :: Ptr ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT -> IO ()
peek :: Ptr ImageCompressionFixedRateFlagsEXT
-> IO ImageCompressionFixedRateFlagsEXT
$cpeek :: Ptr ImageCompressionFixedRateFlagsEXT
-> IO ImageCompressionFixedRateFlagsEXT
pokeByteOff :: Ptr b -> Int -> ImageCompressionFixedRateFlagsEXT -> IO ()
$cpokeByteOff :: forall b.
Ptr b -> Int -> ImageCompressionFixedRateFlagsEXT -> IO ()
peekByteOff :: Ptr b -> Int -> IO ImageCompressionFixedRateFlagsEXT
$cpeekByteOff :: forall b. Ptr b -> Int -> IO ImageCompressionFixedRateFlagsEXT
pokeElemOff :: Ptr ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT -> IO ()
$cpokeElemOff :: Ptr ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT -> IO ()
peekElemOff :: Ptr ImageCompressionFixedRateFlagsEXT
-> Int -> IO ImageCompressionFixedRateFlagsEXT
$cpeekElemOff :: Ptr ImageCompressionFixedRateFlagsEXT
-> Int -> IO ImageCompressionFixedRateFlagsEXT
alignment :: ImageCompressionFixedRateFlagsEXT -> Int
$calignment :: ImageCompressionFixedRateFlagsEXT -> Int
sizeOf :: ImageCompressionFixedRateFlagsEXT -> Int
$csizeOf :: ImageCompressionFixedRateFlagsEXT -> Int
Storable, ImageCompressionFixedRateFlagsEXT
ImageCompressionFixedRateFlagsEXT
-> Zero ImageCompressionFixedRateFlagsEXT
forall a. a -> Zero a
zero :: ImageCompressionFixedRateFlagsEXT
$czero :: ImageCompressionFixedRateFlagsEXT
Zero, Eq ImageCompressionFixedRateFlagsEXT
ImageCompressionFixedRateFlagsEXT
Eq ImageCompressionFixedRateFlagsEXT
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> ImageCompressionFixedRateFlagsEXT
-> (Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT -> Int -> Bool)
-> (ImageCompressionFixedRateFlagsEXT -> Maybe Int)
-> (ImageCompressionFixedRateFlagsEXT -> Int)
-> (ImageCompressionFixedRateFlagsEXT -> Bool)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT
    -> Int -> ImageCompressionFixedRateFlagsEXT)
-> (ImageCompressionFixedRateFlagsEXT -> Int)
-> Bits ImageCompressionFixedRateFlagsEXT
Int -> ImageCompressionFixedRateFlagsEXT
ImageCompressionFixedRateFlagsEXT -> Bool
ImageCompressionFixedRateFlagsEXT -> Int
ImageCompressionFixedRateFlagsEXT -> Maybe Int
ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
ImageCompressionFixedRateFlagsEXT -> Int -> Bool
ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: ImageCompressionFixedRateFlagsEXT -> Int
$cpopCount :: ImageCompressionFixedRateFlagsEXT -> Int
rotateR :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$crotateR :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
rotateL :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$crotateL :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
unsafeShiftR :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$cunsafeShiftR :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
shiftR :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$cshiftR :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
unsafeShiftL :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$cunsafeShiftL :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
shiftL :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$cshiftL :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
isSigned :: ImageCompressionFixedRateFlagsEXT -> Bool
$cisSigned :: ImageCompressionFixedRateFlagsEXT -> Bool
bitSize :: ImageCompressionFixedRateFlagsEXT -> Int
$cbitSize :: ImageCompressionFixedRateFlagsEXT -> Int
bitSizeMaybe :: ImageCompressionFixedRateFlagsEXT -> Maybe Int
$cbitSizeMaybe :: ImageCompressionFixedRateFlagsEXT -> Maybe Int
testBit :: ImageCompressionFixedRateFlagsEXT -> Int -> Bool
$ctestBit :: ImageCompressionFixedRateFlagsEXT -> Int -> Bool
complementBit :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$ccomplementBit :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
clearBit :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$cclearBit :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
setBit :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$csetBit :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
bit :: Int -> ImageCompressionFixedRateFlagsEXT
$cbit :: Int -> ImageCompressionFixedRateFlagsEXT
zeroBits :: ImageCompressionFixedRateFlagsEXT
$czeroBits :: ImageCompressionFixedRateFlagsEXT
rotate :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$crotate :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
shift :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
$cshift :: ImageCompressionFixedRateFlagsEXT
-> Int -> ImageCompressionFixedRateFlagsEXT
complement :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
$ccomplement :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
xor :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
$cxor :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
.|. :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
$c.|. :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
.&. :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
$c.&. :: ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
-> ImageCompressionFixedRateFlagsEXT
$cp1Bits :: Eq ImageCompressionFixedRateFlagsEXT
Bits, Bits ImageCompressionFixedRateFlagsEXT
Bits ImageCompressionFixedRateFlagsEXT
-> (ImageCompressionFixedRateFlagsEXT -> Int)
-> (ImageCompressionFixedRateFlagsEXT -> Int)
-> (ImageCompressionFixedRateFlagsEXT -> Int)
-> FiniteBits ImageCompressionFixedRateFlagsEXT
ImageCompressionFixedRateFlagsEXT -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: ImageCompressionFixedRateFlagsEXT -> Int
$ccountTrailingZeros :: ImageCompressionFixedRateFlagsEXT -> Int
countLeadingZeros :: ImageCompressionFixedRateFlagsEXT -> Int
$ccountLeadingZeros :: ImageCompressionFixedRateFlagsEXT -> Int
finiteBitSize :: ImageCompressionFixedRateFlagsEXT -> Int
$cfiniteBitSize :: ImageCompressionFixedRateFlagsEXT -> Int
$cp1FiniteBits :: Bits ImageCompressionFixedRateFlagsEXT
FiniteBits)

-- | 'IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT' specifies that fixed-rate
-- compression /must/ not be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_NONE_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_NONE_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT      = ImageCompressionFixedRateFlagBitsEXT 0x00000000
-- | 'IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [1,2) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000001
-- | 'IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [2,3) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000002
-- | 'IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [3,4) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000004
-- | 'IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [4,5) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000008
-- | 'IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [5,6) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000010
-- | 'IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [6,7) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000020
-- | 'IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [7,8) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000040
-- | 'IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [8,9) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000080
-- | 'IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [9,10) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT  = ImageCompressionFixedRateFlagBitsEXT 0x00000100
-- | 'IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [10,11) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00000200
-- | 'IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of [11,12) bits per component /may/ be used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00000400
-- | 'IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT' specifies that fixed-rate
-- compression with a bitrate of at least 12 bits per component /may/ be
-- used.
pattern $bIMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00000800
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00001000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00002000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00004000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00008000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00010000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00020000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00040000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00080000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00100000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00200000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00400000
-- No documentation found for Nested "VkImageCompressionFixedRateFlagBitsEXT" "VK_IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT"
pattern $bIMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT :: ImageCompressionFixedRateFlagsEXT
$mIMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT :: forall r.
ImageCompressionFixedRateFlagsEXT
-> (Void# -> r) -> (Void# -> r) -> r
IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT = ImageCompressionFixedRateFlagBitsEXT 0x00800000

conNameImageCompressionFixedRateFlagBitsEXT :: String
conNameImageCompressionFixedRateFlagBitsEXT :: String
conNameImageCompressionFixedRateFlagBitsEXT = String
"ImageCompressionFixedRateFlagBitsEXT"

enumPrefixImageCompressionFixedRateFlagBitsEXT :: String
enumPrefixImageCompressionFixedRateFlagBitsEXT :: String
enumPrefixImageCompressionFixedRateFlagBitsEXT = String
"IMAGE_COMPRESSION_FIXED_RATE_"

showTableImageCompressionFixedRateFlagBitsEXT :: [(ImageCompressionFixedRateFlagBitsEXT, String)]
showTableImageCompressionFixedRateFlagBitsEXT :: [(ImageCompressionFixedRateFlagsEXT, String)]
showTableImageCompressionFixedRateFlagBitsEXT =
  [ (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_NONE_EXT     , String
"NONE_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_1BPC_BIT_EXT , String
"1BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_2BPC_BIT_EXT , String
"2BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_3BPC_BIT_EXT , String
"3BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_4BPC_BIT_EXT , String
"4BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_5BPC_BIT_EXT , String
"5BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_6BPC_BIT_EXT , String
"6BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_7BPC_BIT_EXT , String
"7BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_8BPC_BIT_EXT , String
"8BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_9BPC_BIT_EXT , String
"9BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_10BPC_BIT_EXT, String
"10BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_11BPC_BIT_EXT, String
"11BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_12BPC_BIT_EXT, String
"12BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_13BPC_BIT_EXT, String
"13BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_14BPC_BIT_EXT, String
"14BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_15BPC_BIT_EXT, String
"15BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_16BPC_BIT_EXT, String
"16BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_17BPC_BIT_EXT, String
"17BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_18BPC_BIT_EXT, String
"18BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_19BPC_BIT_EXT, String
"19BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_20BPC_BIT_EXT, String
"20BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_21BPC_BIT_EXT, String
"21BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_22BPC_BIT_EXT, String
"22BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_23BPC_BIT_EXT, String
"23BPC_BIT_EXT")
  , (ImageCompressionFixedRateFlagsEXT
IMAGE_COMPRESSION_FIXED_RATE_24BPC_BIT_EXT, String
"24BPC_BIT_EXT")
  ]

instance Show ImageCompressionFixedRateFlagBitsEXT where
  showsPrec :: Int -> ImageCompressionFixedRateFlagsEXT -> ShowS
showsPrec = String
-> [(ImageCompressionFixedRateFlagsEXT, String)]
-> String
-> (ImageCompressionFixedRateFlagsEXT -> Word32)
-> (Word32 -> ShowS)
-> Int
-> ImageCompressionFixedRateFlagsEXT
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec String
enumPrefixImageCompressionFixedRateFlagBitsEXT
                            [(ImageCompressionFixedRateFlagsEXT, String)]
showTableImageCompressionFixedRateFlagBitsEXT
                            String
conNameImageCompressionFixedRateFlagBitsEXT
                            (\(ImageCompressionFixedRateFlagBitsEXT Word32
x) -> Word32
x)
                            (\Word32
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Word32 -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex Word32
x)

instance Read ImageCompressionFixedRateFlagBitsEXT where
  readPrec :: ReadPrec ImageCompressionFixedRateFlagsEXT
readPrec = String
-> [(ImageCompressionFixedRateFlagsEXT, String)]
-> String
-> (Word32 -> ImageCompressionFixedRateFlagsEXT)
-> ReadPrec ImageCompressionFixedRateFlagsEXT
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec String
enumPrefixImageCompressionFixedRateFlagBitsEXT
                          [(ImageCompressionFixedRateFlagsEXT, String)]
showTableImageCompressionFixedRateFlagBitsEXT
                          String
conNameImageCompressionFixedRateFlagBitsEXT
                          Word32 -> ImageCompressionFixedRateFlagsEXT
ImageCompressionFixedRateFlagBitsEXT


type EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION"
pattern EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION :: forall a . Integral a => a
pattern $bEXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION :: a
$mEXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION :: forall r a. Integral a => a -> (Void# -> r) -> (Void# -> r) -> r
EXT_IMAGE_COMPRESSION_CONTROL_SPEC_VERSION = 1


type EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME = "VK_EXT_image_compression_control"

-- No documentation found for TopLevel "VK_EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME"
pattern EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bEXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME :: a
$mEXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME :: forall r a.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
EXT_IMAGE_COMPRESSION_CONTROL_EXTENSION_NAME = "VK_EXT_image_compression_control"