{-# language CPP #-}
-- | = Name
--
-- VK_NV_memory_decompression - device extension
--
-- == VK_NV_memory_decompression
--
-- [__Name String__]
--     @VK_NV_memory_decompression@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     428
--
-- [__Revision__]
--     1
--
-- [__Ratification Status__]
--     Not ratified
--
-- [__Extension and Version Dependencies__]
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_get_physical_device_properties2 VK_KHR_get_physical_device_properties2>
--     and
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_KHR_buffer_device_address VK_KHR_buffer_device_address>
--
-- [__Contact__]
--
--     -   Vikram Kushwaha
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_NV_memory_decompression] @vkushwaha-nv%0A*Here describe the issue or question you have about the VK_NV_memory_decompression extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2022-01-31
--
-- [__Contributors__]
--
--     -   Vikram Kushwaha, NVIDIA
--
--     -   Jeff Bolz, NVIDIA
--
--     -   Christoph Kubisch, NVIDIA
--
--     -   Piers Daniell, NVIDIA
--
-- == Description
--
-- This extension adds support for performing memory to memory
-- decompression.
--
-- == New Commands
--
-- -   'cmdDecompressMemoryIndirectCountNV'
--
-- -   'cmdDecompressMemoryNV'
--
-- == New Structures
--
-- -   'DecompressMemoryRegionNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceFeatures2',
--     'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'PhysicalDeviceMemoryDecompressionFeaturesNV'
--
-- -   Extending
--     'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2':
--
--     -   'PhysicalDeviceMemoryDecompressionPropertiesNV'
--
-- == New Enums
--
-- -   'MemoryDecompressionMethodFlagBitsNV'
--
-- == New Bitmasks
--
-- -   'MemoryDecompressionMethodFlagsNV'
--
-- == New Enum Constants
--
-- -   'NV_MEMORY_DECOMPRESSION_EXTENSION_NAME'
--
-- -   'NV_MEMORY_DECOMPRESSION_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV'
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV'
--
-- == Version History
--
-- -   Revision 1, 2022-01-31 (Vikram Kushwaha)
--
--     -   Initial draft
--
-- == See Also
--
-- 'DecompressMemoryRegionNV', 'MemoryDecompressionMethodFlagBitsNV',
-- 'MemoryDecompressionMethodFlagsNV',
-- 'PhysicalDeviceMemoryDecompressionFeaturesNV',
-- 'PhysicalDeviceMemoryDecompressionPropertiesNV',
-- 'cmdDecompressMemoryIndirectCountNV', 'cmdDecompressMemoryNV'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_NV_memory_decompression Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_NV_memory_decompression  ( cmdDecompressMemoryNV
                                                     , cmdDecompressMemoryIndirectCountNV
                                                     , PhysicalDeviceMemoryDecompressionFeaturesNV(..)
                                                     , PhysicalDeviceMemoryDecompressionPropertiesNV(..)
                                                     , DecompressMemoryRegionNV(..)
                                                     , MemoryDecompressionMethodFlagsNV
                                                     , MemoryDecompressionMethodFlagBitsNV( MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV
                                                                                          , ..
                                                                                          )
                                                     , NV_MEMORY_DECOMPRESSION_SPEC_VERSION
                                                     , pattern NV_MEMORY_DECOMPRESSION_SPEC_VERSION
                                                     , NV_MEMORY_DECOMPRESSION_EXTENSION_NAME
                                                     , pattern NV_MEMORY_DECOMPRESSION_EXTENSION_NAME
                                                     ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
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 Foreign.Marshal.Alloc (allocaBytes)
import GHC.IO (throwIO)
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 qualified Data.Vector (imapM_)
import qualified Data.Vector (length)
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.String (IsString)
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.Word (Word64)
import Data.Kind (Type)
import Control.Monad.Trans.Cont (ContT(..))
import Data.Vector (Vector)
import Vulkan.Core10.FundamentalTypes (bool32ToBool)
import Vulkan.Core10.FundamentalTypes (boolToBool32)
import Vulkan.NamedType ((:::))
import Vulkan.Core10.FundamentalTypes (Bool32)
import Vulkan.Core10.Handles (CommandBuffer)
import Vulkan.Core10.Handles (CommandBuffer(..))
import Vulkan.Core10.Handles (CommandBuffer(CommandBuffer))
import Vulkan.Core10.Handles (CommandBuffer_T)
import Vulkan.Core10.FundamentalTypes (DeviceAddress)
import Vulkan.Dynamic (DeviceCmds(pVkCmdDecompressMemoryIndirectCountNV))
import Vulkan.Dynamic (DeviceCmds(pVkCmdDecompressMemoryNV))
import Vulkan.Core10.FundamentalTypes (DeviceSize)
import Vulkan.Core10.FundamentalTypes (Flags64)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV))
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV))
foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdDecompressMemoryNV
  :: FunPtr (Ptr CommandBuffer_T -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ()) -> Ptr CommandBuffer_T -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ()

-- | vkCmdDecompressMemoryNV - Decompress data between memory regions
--
-- = Description
--
-- Each region specified in @pDecompressMemoryRegions@ is decompressed from
-- the source to destination region based on the specified decompression
-- method.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdDecompressMemoryNV-None-07684# The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-memoryDecompression memoryDecompression>
--     feature /must/ be enabled
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdDecompressMemoryNV-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdDecompressMemoryNV-pDecompressMemoryRegions-parameter#
--     @pDecompressMemoryRegions@ /must/ be a valid pointer to an array of
--     @decompressRegionCount@ valid 'DecompressMemoryRegionNV' structures
--
-- -   #VUID-vkCmdDecompressMemoryNV-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdDecompressMemoryNV-commandBuffer-cmdpool# The
--     'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdDecompressMemoryNV-renderpass# This command /must/ only
--     be called outside of a render pass instance
--
-- -   #VUID-vkCmdDecompressMemoryNV-videocoding# This command /must/ only
--     be called outside of a video coding scope
--
-- -   #VUID-vkCmdDecompressMemoryNV-decompressRegionCount-arraylength#
--     @decompressRegionCount@ /must/ be greater than @0@
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_memory_decompression VK_NV_memory_decompression>,
-- 'Vulkan.Core10.Handles.CommandBuffer', 'DecompressMemoryRegionNV'
cmdDecompressMemoryNV :: forall io
                       . (MonadIO io)
                      => -- | @commandBuffer@ is the command buffer into which the command will be
                         -- recorded.
                         CommandBuffer
                      -> -- | @pDecompressMemoryRegions@ is a pointer to an array of
                         -- @decompressRegionCount@ 'DecompressMemoryRegionNV' structures specifying
                         -- decompression parameters.
                         ("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV)
                      -> io ()
cmdDecompressMemoryNV :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer
-> ("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV)
-> io ()
cmdDecompressMemoryNV CommandBuffer
commandBuffer
                        "decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV
decompressMemoryRegions = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ())
-> (ContT () IO () -> IO ()) -> ContT () IO () -> io ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ContT () IO () -> IO ()
forall (m :: * -> *) r. Monad m => ContT r m r -> m r
evalContT (ContT () IO () -> io ()) -> ContT () IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdDecompressMemoryNVPtr :: FunPtr
  (Ptr CommandBuffer_T
   -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ())
vkCmdDecompressMemoryNVPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T
      -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ())
pVkCmdDecompressMemoryNV (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
deviceCmds :: DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T
   -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ())
vkCmdDecompressMemoryNVPtr FunPtr
  (Ptr CommandBuffer_T
   -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T
      -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T
   -> Word32 -> Ptr DecompressMemoryRegionNV -> 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 vkCmdDecompressMemoryNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdDecompressMemoryNV' :: Ptr CommandBuffer_T
-> Word32 -> Ptr DecompressMemoryRegionNV -> IO ()
vkCmdDecompressMemoryNV' = FunPtr
  (Ptr CommandBuffer_T
   -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ())
-> Ptr CommandBuffer_T
-> Word32
-> Ptr DecompressMemoryRegionNV
-> IO ()
mkVkCmdDecompressMemoryNV FunPtr
  (Ptr CommandBuffer_T
   -> Word32 -> Ptr DecompressMemoryRegionNV -> IO ())
vkCmdDecompressMemoryNVPtr
  Ptr DecompressMemoryRegionNV
pPDecompressMemoryRegions <- ((Ptr DecompressMemoryRegionNV -> IO ()) -> IO ())
-> ContT () IO (Ptr DecompressMemoryRegionNV)
forall {k} (r :: k) (m :: k -> *) a.
((a -> m r) -> m r) -> ContT r m a
ContT (((Ptr DecompressMemoryRegionNV -> IO ()) -> IO ())
 -> ContT () IO (Ptr DecompressMemoryRegionNV))
-> ((Ptr DecompressMemoryRegionNV -> IO ()) -> IO ())
-> ContT () IO (Ptr DecompressMemoryRegionNV)
forall a b. (a -> b) -> a -> b
$ forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes @DecompressMemoryRegionNV ((("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV)
-> Int
forall a. Vector a -> Int
Data.Vector.length ("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV
decompressMemoryRegions)) Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
40)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ (Int -> DecompressMemoryRegionNV -> IO ())
-> ("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV)
-> IO ()
forall (m :: * -> *) a b.
Monad m =>
(Int -> a -> m b) -> Vector a -> m ()
Data.Vector.imapM_ (\Int
i DecompressMemoryRegionNV
e -> Ptr DecompressMemoryRegionNV -> DecompressMemoryRegionNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke (Ptr DecompressMemoryRegionNV
pPDecompressMemoryRegions Ptr DecompressMemoryRegionNV -> Int -> Ptr DecompressMemoryRegionNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` (Int
40 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
i)) :: Ptr DecompressMemoryRegionNV) (DecompressMemoryRegionNV
e)) ("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV
decompressMemoryRegions)
  IO () -> ContT () IO ()
forall (m :: * -> *) a. Monad m => m a -> ContT () m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (IO () -> ContT () IO ()) -> IO () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdDecompressMemoryNV" (Ptr CommandBuffer_T
-> Word32 -> Ptr DecompressMemoryRegionNV -> IO ()
vkCmdDecompressMemoryNV'
                                                       (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                       ((Int -> Word32
forall a b. (Integral a, Num b) => a -> b
fromIntegral (("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV)
-> Int
forall a. Vector a -> Int
Data.Vector.length (("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV)
 -> Int)
-> ("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV)
-> Int
forall a b. (a -> b) -> a -> b
$ ("decompressMemoryRegions" ::: Vector DecompressMemoryRegionNV
decompressMemoryRegions)) :: Word32))
                                                       (Ptr DecompressMemoryRegionNV
pPDecompressMemoryRegions))
  () -> ContT () IO ()
forall a. a -> ContT () IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> ContT () IO ()) -> () -> ContT () IO ()
forall a b. (a -> b) -> a -> b
$ ()


foreign import ccall
#if !defined(SAFE_FOREIGN_CALLS)
  unsafe
#endif
  "dynamic" mkVkCmdDecompressMemoryIndirectCountNV
  :: FunPtr (Ptr CommandBuffer_T -> DeviceAddress -> DeviceAddress -> Word32 -> IO ()) -> Ptr CommandBuffer_T -> DeviceAddress -> DeviceAddress -> Word32 -> IO ()

-- | vkCmdDecompressMemoryIndirectCountNV - Indirect decompress data between
-- memory regions
--
-- = Description
--
-- Each region specified in @indirectCommandsAddress@ is decompressed from
-- the source to destination region based on the specified decompression
-- method.
--
-- == Valid Usage
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-None-07692# The
--     <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#features-memoryDecompression memoryDecompression>
--     feature /must/ be enabled
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsAddress-07693#
--     If @indirectCommandsAddress@ comes from a non-sparse buffer then it
--     /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsAddress-07694#
--     The 'Vulkan.Core10.Handles.Buffer' that @indirectCommandsAddress@
--     comes from /must/ have been created with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-offset-07695# @offset@
--     /must/ be a multiple of @4@
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07696#
--     If @indirectCommandsCountAddress@ comes from a non-sparse buffer
--     then it /must/ be bound completely and contiguously to a single
--     'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07697#
--     The 'Vulkan.Core10.Handles.Buffer' that
--     @indirectCommandsCountAddress@ comes from /must/ have been created
--     with the
--     'Vulkan.Core10.Enums.BufferUsageFlagBits.BUFFER_USAGE_INDIRECT_BUFFER_BIT'
--     bit set
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07698#
--     @indirectCommandsCountAddress@ /must/ be a multiple of @4@
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07699#
--     The count stored in @indirectCommandsCountAddress@ /must/ be less
--     than or equal to
--     'PhysicalDeviceMemoryDecompressionPropertiesNV'::@maxDecompressionIndirectCount@
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-stride-07700# @stride@
--     /must/ be a multiple of @4@ and /must/ be greater than or equal to
--     sizeof('DecompressMemoryRegionNV')
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07701#
--     If the count stored in @indirectCommandsCountAddress@ is equal to
--     @1@, (@offset@ + sizeof('DecompressMemoryRegionNV')) /must/ be less
--     than or equal to the size of the 'Vulkan.Core10.Handles.Buffer' that
--     @indirectCommandsAddress@ comes from
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-indirectCommandsCountAddress-07702#
--     If the count stored in @indirectCommandsCountAddress@ is greater
--     than @1@, @indirectCommandsAddress@ +
--     sizeof('DecompressMemoryRegionNV') + (@stride@ × (count stored in
--     @countBuffer@ - 1)) /must/ be less than or equal to the last valid
--     address in the 'Vulkan.Core10.Handles.Buffer' that
--     @indirectCommandsAddress@ was created from
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-commandBuffer-parameter#
--     @commandBuffer@ /must/ be a valid
--     'Vulkan.Core10.Handles.CommandBuffer' handle
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-commandBuffer-recording#
--     @commandBuffer@ /must/ be in the
--     <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#commandbuffers-lifecycle recording state>
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-commandBuffer-cmdpool#
--     The 'Vulkan.Core10.Handles.CommandPool' that @commandBuffer@ was
--     allocated from /must/ support graphics, or compute operations
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-renderpass# This command
--     /must/ only be called outside of a render pass instance
--
-- -   #VUID-vkCmdDecompressMemoryIndirectCountNV-videocoding# This command
--     /must/ only be called outside of a video coding scope
--
-- == Host Synchronization
--
-- -   Host access to @commandBuffer@ /must/ be externally synchronized
--
-- -   Host access to the 'Vulkan.Core10.Handles.CommandPool' that
--     @commandBuffer@ was allocated from /must/ be externally synchronized
--
-- == Command Properties
--
-- \'
--
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
-- | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkCommandBufferLevel Command Buffer Levels> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginRenderPass Render Pass Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#vkCmdBeginVideoCodingKHR Video Coding Scope> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkQueueFlagBits Supported Queue Types> | <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#fundamentals-queueoperation-command-types Command Type> |
-- +============================================================================================================================+========================================================================================================================+=============================================================================================================================+=======================================================================================================================+========================================================================================================================================+
-- | Primary                                                                                                                    | Outside                                                                                                                | Outside                                                                                                                     | Graphics                                                                                                              | Action                                                                                                                                 |
-- | Secondary                                                                                                                  |                                                                                                                        |                                                                                                                             | Compute                                                                                                               |                                                                                                                                        |
-- +----------------------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_memory_decompression VK_NV_memory_decompression>,
-- 'Vulkan.Core10.Handles.CommandBuffer',
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress'
cmdDecompressMemoryIndirectCountNV :: forall io
                                    . (MonadIO io)
                                   => -- | @commandBuffer@ is the command buffer into which the command will be
                                      -- recorded.
                                      CommandBuffer
                                   -> -- | @indirectCommandsAddress@ is the device address containing decompression
                                      -- parameters laid out as an array of 'DecompressMemoryRegionNV'
                                      -- structures.
                                      ("indirectCommandsAddress" ::: DeviceAddress)
                                   -> -- | @indirectCommandsCountAddress@ is the device address containing the
                                      -- decompression count.
                                      ("indirectCommandsCountAddress" ::: DeviceAddress)
                                   -> -- | @stride@ is the byte stride between successive sets of decompression
                                      -- parameters located starting from @indirectCommandsAddress@.
                                      ("stride" ::: Word32)
                                   -> io ()
cmdDecompressMemoryIndirectCountNV :: forall (io :: * -> *).
MonadIO io =>
CommandBuffer -> Flags64 -> Flags64 -> Word32 -> io ()
cmdDecompressMemoryIndirectCountNV CommandBuffer
commandBuffer
                                     Flags64
indirectCommandsAddress
                                     Flags64
indirectCommandsCountAddress
                                     Word32
stride = IO () -> io ()
forall a. IO a -> io a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> io ()) -> IO () -> io ()
forall a b. (a -> b) -> a -> b
$ do
  let vkCmdDecompressMemoryIndirectCountNVPtr :: FunPtr
  (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ())
vkCmdDecompressMemoryIndirectCountNVPtr = DeviceCmds
-> FunPtr
     (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ())
pVkCmdDecompressMemoryIndirectCountNV (case CommandBuffer
commandBuffer of CommandBuffer{DeviceCmds
$sel:deviceCmds:CommandBuffer :: CommandBuffer -> DeviceCmds
deviceCmds :: DeviceCmds
deviceCmds} -> DeviceCmds
deviceCmds)
  Bool -> IO () -> IO ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
unless (FunPtr
  (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ())
vkCmdDecompressMemoryIndirectCountNVPtr FunPtr
  (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ())
-> FunPtr
     (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ())
-> Bool
forall a. Eq a => a -> a -> Bool
/= FunPtr
  (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> 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 vkCmdDecompressMemoryIndirectCountNV is null" Maybe CInt
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
  let vkCmdDecompressMemoryIndirectCountNV' :: Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ()
vkCmdDecompressMemoryIndirectCountNV' = FunPtr
  (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ())
-> Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ()
mkVkCmdDecompressMemoryIndirectCountNV FunPtr
  (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ())
vkCmdDecompressMemoryIndirectCountNVPtr
  String -> IO () -> IO ()
forall a. String -> IO a -> IO a
traceAroundEvent String
"vkCmdDecompressMemoryIndirectCountNV" (Ptr CommandBuffer_T -> Flags64 -> Flags64 -> Word32 -> IO ()
vkCmdDecompressMemoryIndirectCountNV'
                                                             (CommandBuffer -> Ptr CommandBuffer_T
commandBufferHandle (CommandBuffer
commandBuffer))
                                                             (Flags64
indirectCommandsAddress)
                                                             (Flags64
indirectCommandsCountAddress)
                                                             (Word32
stride))
  () -> IO ()
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (() -> IO ()) -> () -> IO ()
forall a b. (a -> b) -> a -> b
$ ()


-- | VkPhysicalDeviceMemoryDecompressionFeaturesNV - Structure describing if
-- memory decompression is supported by an implementation
--
-- = Members
--
-- This structure describes the following features:
--
-- = Description
--
-- If the 'PhysicalDeviceMemoryDecompressionFeaturesNV' 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. 'PhysicalDeviceMemoryDecompressionFeaturesNV' /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_NV_memory_decompression VK_NV_memory_decompression>,
-- 'Vulkan.Core10.FundamentalTypes.Bool32',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceMemoryDecompressionFeaturesNV = PhysicalDeviceMemoryDecompressionFeaturesNV
  { -- | #features-memoryDecompression# @memoryDecompression@ indicates whether
    -- memory decompression is supported.
    PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool
memoryDecompression :: Bool }
  deriving (Typeable, PhysicalDeviceMemoryDecompressionFeaturesNV
-> PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool
(PhysicalDeviceMemoryDecompressionFeaturesNV
 -> PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool)
-> (PhysicalDeviceMemoryDecompressionFeaturesNV
    -> PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool)
-> Eq PhysicalDeviceMemoryDecompressionFeaturesNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceMemoryDecompressionFeaturesNV
-> PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool
== :: PhysicalDeviceMemoryDecompressionFeaturesNV
-> PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool
$c/= :: PhysicalDeviceMemoryDecompressionFeaturesNV
-> PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool
/= :: PhysicalDeviceMemoryDecompressionFeaturesNV
-> PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceMemoryDecompressionFeaturesNV)
#endif
deriving instance Show PhysicalDeviceMemoryDecompressionFeaturesNV

instance ToCStruct PhysicalDeviceMemoryDecompressionFeaturesNV where
  withCStruct :: forall b.
PhysicalDeviceMemoryDecompressionFeaturesNV
-> (Ptr PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b)
-> IO b
withCStruct PhysicalDeviceMemoryDecompressionFeaturesNV
x Ptr PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b
f = Int
-> (Ptr PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
24 ((Ptr PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b) -> IO b)
-> (Ptr PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p -> Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b -> IO b
forall b.
Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p PhysicalDeviceMemoryDecompressionFeaturesNV
x (Ptr PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b
f Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p PhysicalDeviceMemoryDecompressionFeaturesNV{Bool
$sel:memoryDecompression:PhysicalDeviceMemoryDecompressionFeaturesNV :: PhysicalDeviceMemoryDecompressionFeaturesNV -> Bool
memoryDecompression :: Bool
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> 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 PhysicalDeviceMemoryDecompressionFeaturesNV
p Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32)) (Bool -> Bool32
boolToBool32 (Bool
memoryDecompression))
    IO b
f
  cStructSize :: Int
cStructSize = Int
24
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceMemoryDecompressionFeaturesNV -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_FEATURES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> 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 PhysicalDeviceMemoryDecompressionFeaturesNV
p Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> 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 PhysicalDeviceMemoryDecompressionFeaturesNV where
  peekCStruct :: Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> IO PhysicalDeviceMemoryDecompressionFeaturesNV
peekCStruct Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p = do
    Bool32
memoryDecompression <- forall a. Storable a => Ptr a -> IO a
peek @Bool32 ((Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
p Ptr PhysicalDeviceMemoryDecompressionFeaturesNV
-> Int -> Ptr Bool32
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr Bool32))
    PhysicalDeviceMemoryDecompressionFeaturesNV
-> IO PhysicalDeviceMemoryDecompressionFeaturesNV
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceMemoryDecompressionFeaturesNV
 -> IO PhysicalDeviceMemoryDecompressionFeaturesNV)
-> PhysicalDeviceMemoryDecompressionFeaturesNV
-> IO PhysicalDeviceMemoryDecompressionFeaturesNV
forall a b. (a -> b) -> a -> b
$ Bool -> PhysicalDeviceMemoryDecompressionFeaturesNV
PhysicalDeviceMemoryDecompressionFeaturesNV
             (Bool32 -> Bool
bool32ToBool Bool32
memoryDecompression)

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

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


-- | VkPhysicalDeviceMemoryDecompressionPropertiesNV - Structure describing
-- supported memory decompression methods by an implementation
--
-- = Description
--
-- If the 'PhysicalDeviceMemoryDecompressionPropertiesNV' structure is
-- included in the @pNext@ chain of the
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.PhysicalDeviceProperties2'
-- structure passed to
-- 'Vulkan.Core11.Promoted_From_VK_KHR_get_physical_device_properties2.getPhysicalDeviceProperties2',
-- it is filled in with each corresponding implementation-dependent
-- property.
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_memory_decompression VK_NV_memory_decompression>,
-- 'MemoryDecompressionMethodFlagsNV',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data PhysicalDeviceMemoryDecompressionPropertiesNV = PhysicalDeviceMemoryDecompressionPropertiesNV
  { -- | @decompressionMethods@ is a bitmask of
    -- 'MemoryDecompressionMethodFlagBitsNV' specifying memory decompression
    -- methods supported by the implementation.
    PhysicalDeviceMemoryDecompressionPropertiesNV
-> MemoryDecompressionMethodFlagsNV
decompressionMethods :: MemoryDecompressionMethodFlagsNV
  , -- | @maxDecompressionIndirectCount@ specifies the maximum supported count
    -- value in the @countBuffer@ of 'cmdDecompressMemoryIndirectCountNV'
    PhysicalDeviceMemoryDecompressionPropertiesNV -> Flags64
maxDecompressionIndirectCount :: Word64
  }
  deriving (Typeable, PhysicalDeviceMemoryDecompressionPropertiesNV
-> PhysicalDeviceMemoryDecompressionPropertiesNV -> Bool
(PhysicalDeviceMemoryDecompressionPropertiesNV
 -> PhysicalDeviceMemoryDecompressionPropertiesNV -> Bool)
-> (PhysicalDeviceMemoryDecompressionPropertiesNV
    -> PhysicalDeviceMemoryDecompressionPropertiesNV -> Bool)
-> Eq PhysicalDeviceMemoryDecompressionPropertiesNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PhysicalDeviceMemoryDecompressionPropertiesNV
-> PhysicalDeviceMemoryDecompressionPropertiesNV -> Bool
== :: PhysicalDeviceMemoryDecompressionPropertiesNV
-> PhysicalDeviceMemoryDecompressionPropertiesNV -> Bool
$c/= :: PhysicalDeviceMemoryDecompressionPropertiesNV
-> PhysicalDeviceMemoryDecompressionPropertiesNV -> Bool
/= :: PhysicalDeviceMemoryDecompressionPropertiesNV
-> PhysicalDeviceMemoryDecompressionPropertiesNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (PhysicalDeviceMemoryDecompressionPropertiesNV)
#endif
deriving instance Show PhysicalDeviceMemoryDecompressionPropertiesNV

instance ToCStruct PhysicalDeviceMemoryDecompressionPropertiesNV where
  withCStruct :: forall b.
PhysicalDeviceMemoryDecompressionPropertiesNV
-> (Ptr PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b)
-> IO b
withCStruct PhysicalDeviceMemoryDecompressionPropertiesNV
x Ptr PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b
f = Int
-> (Ptr PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b)
-> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
32 ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b)
 -> IO b)
-> (Ptr PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b)
-> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p -> Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b -> IO b
forall b.
Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p PhysicalDeviceMemoryDecompressionPropertiesNV
x (Ptr PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b
f Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p)
  pokeCStruct :: forall b.
Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b -> IO b
pokeCStruct Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p PhysicalDeviceMemoryDecompressionPropertiesNV{Flags64
MemoryDecompressionMethodFlagsNV
$sel:decompressionMethods:PhysicalDeviceMemoryDecompressionPropertiesNV :: PhysicalDeviceMemoryDecompressionPropertiesNV
-> MemoryDecompressionMethodFlagsNV
$sel:maxDecompressionIndirectCount:PhysicalDeviceMemoryDecompressionPropertiesNV :: PhysicalDeviceMemoryDecompressionPropertiesNV -> Flags64
decompressionMethods :: MemoryDecompressionMethodFlagsNV
maxDecompressionIndirectCount :: Flags64
..} IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr MemoryDecompressionMethodFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr MemoryDecompressionMethodFlagsNV)) (MemoryDecompressionMethodFlagsNV
decompressionMethods)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Flags64
maxDecompressionIndirectCount)
    IO b
f
  cStructSize :: Int
cStructSize = Int
32
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b.
Ptr PhysicalDeviceMemoryDecompressionPropertiesNV -> IO b -> IO b
pokeZeroCStruct Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p IO b
f = do
    Ptr StructureType -> StructureType -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr StructureType
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr StructureType)) (StructureType
STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_DECOMPRESSION_PROPERTIES_NV)
    Ptr (Ptr ()) -> Ptr () -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr (Ptr ())
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr (Ptr ()))) (Ptr ()
forall a. Ptr a
nullPtr)
    Ptr MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr MemoryDecompressionMethodFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr MemoryDecompressionMethodFlagsNV)) (MemoryDecompressionMethodFlagsNV
forall a. Zero a => a
zero)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64)) (Flags64
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct PhysicalDeviceMemoryDecompressionPropertiesNV where
  peekCStruct :: Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> IO PhysicalDeviceMemoryDecompressionPropertiesNV
peekCStruct Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p = do
    MemoryDecompressionMethodFlagsNV
decompressionMethods <- forall a. Storable a => Ptr a -> IO a
peek @MemoryDecompressionMethodFlagsNV ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr MemoryDecompressionMethodFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr MemoryDecompressionMethodFlagsNV))
    Flags64
maxDecompressionIndirectCount <- forall a. Storable a => Ptr a -> IO a
peek @Word64 ((Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
p Ptr PhysicalDeviceMemoryDecompressionPropertiesNV
-> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr Word64))
    PhysicalDeviceMemoryDecompressionPropertiesNV
-> IO PhysicalDeviceMemoryDecompressionPropertiesNV
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (PhysicalDeviceMemoryDecompressionPropertiesNV
 -> IO PhysicalDeviceMemoryDecompressionPropertiesNV)
-> PhysicalDeviceMemoryDecompressionPropertiesNV
-> IO PhysicalDeviceMemoryDecompressionPropertiesNV
forall a b. (a -> b) -> a -> b
$ MemoryDecompressionMethodFlagsNV
-> Flags64 -> PhysicalDeviceMemoryDecompressionPropertiesNV
PhysicalDeviceMemoryDecompressionPropertiesNV
             MemoryDecompressionMethodFlagsNV
decompressionMethods Flags64
maxDecompressionIndirectCount

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

instance Zero PhysicalDeviceMemoryDecompressionPropertiesNV where
  zero :: PhysicalDeviceMemoryDecompressionPropertiesNV
zero = MemoryDecompressionMethodFlagsNV
-> Flags64 -> PhysicalDeviceMemoryDecompressionPropertiesNV
PhysicalDeviceMemoryDecompressionPropertiesNV
           MemoryDecompressionMethodFlagsNV
forall a. Zero a => a
zero
           Flags64
forall a. Zero a => a
zero


-- | VkDecompressMemoryRegionNV - Structure specifying decompression
-- parameters
--
-- == Valid Usage
--
-- -   #VUID-VkDecompressMemoryRegionNV-srcAddress-07685# The @srcAddress@
--     /must/ be 4 byte aligned
--
-- -   #VUID-VkDecompressMemoryRegionNV-srcAddress-07686# The memory in
--     range @srcAddress@ and @srcAddress@ + @compressedSize@ /must/ be
--     valid and bound to a 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-VkDecompressMemoryRegionNV-dstAddress-07687# The @dstAddress@
--     /must/ be 4 byte aligned
--
-- -   #VUID-VkDecompressMemoryRegionNV-decompressionMethod-09395# If
--     @decompressionMethod@ is
--     'MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV', then
--     @decompressedSize@ /must/ be less than or equal to 65536 bytes
--
-- -   #VUID-VkDecompressMemoryRegionNV-dstAddress-07688# The memory in
--     range @dstAddress@ and @dstAddress@ + @decompressedSize@ /must/ be
--     valid and bound to a 'Vulkan.Core10.Handles.DeviceMemory' object
--
-- -   #VUID-VkDecompressMemoryRegionNV-decompressedSize-07689# The
--     @decompressedSize@ /must/ be large enough to hold the decompressed
--     data based on the @decompressionMethod@
--
-- -   #VUID-VkDecompressMemoryRegionNV-decompressionMethod-07690# The
--     @decompressionMethod@ /must/ have a single bit set
--
-- -   #VUID-VkDecompressMemoryRegionNV-srcAddress-07691# The @srcAddress@
--     to @srcAddress@ + @compressedSize@ region /must/ not overlap with
--     the @dstAddress@ and @dstAddress@ + @decompressedSize@ region
--
-- == Valid Usage (Implicit)
--
-- -   #VUID-VkDecompressMemoryRegionNV-decompressionMethod-parameter#
--     @decompressionMethod@ /must/ be a valid combination of
--     'MemoryDecompressionMethodFlagBitsNV' values
--
-- -   #VUID-VkDecompressMemoryRegionNV-decompressionMethod-requiredbitmask#
--     @decompressionMethod@ /must/ not be @0@
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_memory_decompression VK_NV_memory_decompression>,
-- 'Vulkan.Core10.FundamentalTypes.DeviceAddress',
-- 'Vulkan.Core10.FundamentalTypes.DeviceSize',
-- 'MemoryDecompressionMethodFlagsNV', 'cmdDecompressMemoryNV'
data DecompressMemoryRegionNV = DecompressMemoryRegionNV
  { -- | @srcAddress@ is the address where compressed data is stored.
    DecompressMemoryRegionNV -> Flags64
srcAddress :: DeviceAddress
  , -- | @dstAddress@ is the destination address where decompressed data will be
    -- written.
    DecompressMemoryRegionNV -> Flags64
dstAddress :: DeviceAddress
  , -- | @compressedSize@ is the size of compressed data in bytes.
    DecompressMemoryRegionNV -> Flags64
compressedSize :: DeviceSize
  , -- | @decompressedSize@ is the size of decompressed data in bytes.
    DecompressMemoryRegionNV -> Flags64
decompressedSize :: DeviceSize
  , -- | @decompressionMethod@ is a bitmask of
    -- 'MemoryDecompressionMethodFlagBitsNV' with a single bit set specifying
    -- the method used to decompress data.
    DecompressMemoryRegionNV -> MemoryDecompressionMethodFlagsNV
decompressionMethod :: MemoryDecompressionMethodFlagsNV
  }
  deriving (Typeable, DecompressMemoryRegionNV -> DecompressMemoryRegionNV -> Bool
(DecompressMemoryRegionNV -> DecompressMemoryRegionNV -> Bool)
-> (DecompressMemoryRegionNV -> DecompressMemoryRegionNV -> Bool)
-> Eq DecompressMemoryRegionNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: DecompressMemoryRegionNV -> DecompressMemoryRegionNV -> Bool
== :: DecompressMemoryRegionNV -> DecompressMemoryRegionNV -> Bool
$c/= :: DecompressMemoryRegionNV -> DecompressMemoryRegionNV -> Bool
/= :: DecompressMemoryRegionNV -> DecompressMemoryRegionNV -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DecompressMemoryRegionNV)
#endif
deriving instance Show DecompressMemoryRegionNV

instance ToCStruct DecompressMemoryRegionNV where
  withCStruct :: forall b.
DecompressMemoryRegionNV
-> (Ptr DecompressMemoryRegionNV -> IO b) -> IO b
withCStruct DecompressMemoryRegionNV
x Ptr DecompressMemoryRegionNV -> IO b
f = Int -> (Ptr DecompressMemoryRegionNV -> IO b) -> IO b
forall a b. Int -> (Ptr a -> IO b) -> IO b
allocaBytes Int
40 ((Ptr DecompressMemoryRegionNV -> IO b) -> IO b)
-> (Ptr DecompressMemoryRegionNV -> IO b) -> IO b
forall a b. (a -> b) -> a -> b
$ \Ptr DecompressMemoryRegionNV
p -> Ptr DecompressMemoryRegionNV
-> DecompressMemoryRegionNV -> IO b -> IO b
forall b.
Ptr DecompressMemoryRegionNV
-> DecompressMemoryRegionNV -> IO b -> IO b
forall a b. ToCStruct a => Ptr a -> a -> IO b -> IO b
pokeCStruct Ptr DecompressMemoryRegionNV
p DecompressMemoryRegionNV
x (Ptr DecompressMemoryRegionNV -> IO b
f Ptr DecompressMemoryRegionNV
p)
  pokeCStruct :: forall b.
Ptr DecompressMemoryRegionNV
-> DecompressMemoryRegionNV -> IO b -> IO b
pokeCStruct Ptr DecompressMemoryRegionNV
p DecompressMemoryRegionNV{Flags64
MemoryDecompressionMethodFlagsNV
$sel:srcAddress:DecompressMemoryRegionNV :: DecompressMemoryRegionNV -> Flags64
$sel:dstAddress:DecompressMemoryRegionNV :: DecompressMemoryRegionNV -> Flags64
$sel:compressedSize:DecompressMemoryRegionNV :: DecompressMemoryRegionNV -> Flags64
$sel:decompressedSize:DecompressMemoryRegionNV :: DecompressMemoryRegionNV -> Flags64
$sel:decompressionMethod:DecompressMemoryRegionNV :: DecompressMemoryRegionNV -> MemoryDecompressionMethodFlagsNV
srcAddress :: Flags64
dstAddress :: Flags64
compressedSize :: Flags64
decompressedSize :: Flags64
decompressionMethod :: MemoryDecompressionMethodFlagsNV
..} IO b
f = do
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (Flags64
srcAddress)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceAddress)) (Flags64
dstAddress)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) (Flags64
compressedSize)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) (Flags64
decompressedSize)
    Ptr MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV
-> Int -> Ptr MemoryDecompressionMethodFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr MemoryDecompressionMethodFlagsNV)) (MemoryDecompressionMethodFlagsNV
decompressionMethod)
    IO b
f
  cStructSize :: Int
cStructSize = Int
40
  cStructAlignment :: Int
cStructAlignment = Int
8
  pokeZeroCStruct :: forall b. Ptr DecompressMemoryRegionNV -> IO b -> IO b
pokeZeroCStruct Ptr DecompressMemoryRegionNV
p IO b
f = do
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress)) (Flags64
forall a. Zero a => a
zero)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceAddress)) (Flags64
forall a. Zero a => a
zero)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize)) (Flags64
forall a. Zero a => a
zero)
    Ptr Flags64 -> Flags64 -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize)) (Flags64
forall a. Zero a => a
zero)
    Ptr MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> IO ()
forall a. Storable a => Ptr a -> a -> IO ()
poke ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV
-> Int -> Ptr MemoryDecompressionMethodFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr MemoryDecompressionMethodFlagsNV)) (MemoryDecompressionMethodFlagsNV
forall a. Zero a => a
zero)
    IO b
f

instance FromCStruct DecompressMemoryRegionNV where
  peekCStruct :: Ptr DecompressMemoryRegionNV -> IO DecompressMemoryRegionNV
peekCStruct Ptr DecompressMemoryRegionNV
p = do
    Flags64
srcAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
0 :: Ptr DeviceAddress))
    Flags64
dstAddress <- forall a. Storable a => Ptr a -> IO a
peek @DeviceAddress ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
8 :: Ptr DeviceAddress))
    Flags64
compressedSize <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr DeviceSize))
    Flags64
decompressedSize <- forall a. Storable a => Ptr a -> IO a
peek @DeviceSize ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV -> Int -> Ptr Flags64
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
24 :: Ptr DeviceSize))
    MemoryDecompressionMethodFlagsNV
decompressionMethod <- forall a. Storable a => Ptr a -> IO a
peek @MemoryDecompressionMethodFlagsNV ((Ptr DecompressMemoryRegionNV
p Ptr DecompressMemoryRegionNV
-> Int -> Ptr MemoryDecompressionMethodFlagsNV
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
32 :: Ptr MemoryDecompressionMethodFlagsNV))
    DecompressMemoryRegionNV -> IO DecompressMemoryRegionNV
forall a. a -> IO a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DecompressMemoryRegionNV -> IO DecompressMemoryRegionNV)
-> DecompressMemoryRegionNV -> IO DecompressMemoryRegionNV
forall a b. (a -> b) -> a -> b
$ Flags64
-> Flags64
-> Flags64
-> Flags64
-> MemoryDecompressionMethodFlagsNV
-> DecompressMemoryRegionNV
DecompressMemoryRegionNV
             Flags64
srcAddress
             Flags64
dstAddress
             Flags64
compressedSize
             Flags64
decompressedSize
             MemoryDecompressionMethodFlagsNV
decompressionMethod

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

instance Zero DecompressMemoryRegionNV where
  zero :: DecompressMemoryRegionNV
zero = Flags64
-> Flags64
-> Flags64
-> Flags64
-> MemoryDecompressionMethodFlagsNV
-> DecompressMemoryRegionNV
DecompressMemoryRegionNV
           Flags64
forall a. Zero a => a
zero
           Flags64
forall a. Zero a => a
zero
           Flags64
forall a. Zero a => a
zero
           Flags64
forall a. Zero a => a
zero
           MemoryDecompressionMethodFlagsNV
forall a. Zero a => a
zero


type MemoryDecompressionMethodFlagsNV = MemoryDecompressionMethodFlagBitsNV

-- | VkMemoryDecompressionMethodFlagBitsNV - List the supported memory
-- decompression methods
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_NV_memory_decompression VK_NV_memory_decompression>
newtype MemoryDecompressionMethodFlagBitsNV = MemoryDecompressionMethodFlagBitsNV Flags64
  deriving newtype (MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
(MemoryDecompressionMethodFlagsNV
 -> MemoryDecompressionMethodFlagsNV -> Bool)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV -> Bool)
-> Eq MemoryDecompressionMethodFlagsNV
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
== :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
$c/= :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
/= :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
Eq, Eq MemoryDecompressionMethodFlagsNV
Eq MemoryDecompressionMethodFlagsNV =>
(MemoryDecompressionMethodFlagsNV
 -> MemoryDecompressionMethodFlagsNV -> Ordering)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV -> Bool)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV -> Bool)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV -> Bool)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV -> Bool)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV)
-> Ord MemoryDecompressionMethodFlagsNV
MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Ordering
MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
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
$ccompare :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Ordering
compare :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Ordering
$c< :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
< :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
$c<= :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
<= :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
$c> :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
> :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
$c>= :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
>= :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> Bool
$cmax :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
max :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
$cmin :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
min :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
Ord, Ptr MemoryDecompressionMethodFlagsNV
-> IO MemoryDecompressionMethodFlagsNV
Ptr MemoryDecompressionMethodFlagsNV
-> Int -> IO MemoryDecompressionMethodFlagsNV
Ptr MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV -> IO ()
Ptr MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> IO ()
MemoryDecompressionMethodFlagsNV -> Int
(MemoryDecompressionMethodFlagsNV -> Int)
-> (MemoryDecompressionMethodFlagsNV -> Int)
-> (Ptr MemoryDecompressionMethodFlagsNV
    -> Int -> IO MemoryDecompressionMethodFlagsNV)
-> (Ptr MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV -> IO ())
-> (forall b. Ptr b -> Int -> IO MemoryDecompressionMethodFlagsNV)
-> (forall b.
    Ptr b -> Int -> MemoryDecompressionMethodFlagsNV -> IO ())
-> (Ptr MemoryDecompressionMethodFlagsNV
    -> IO MemoryDecompressionMethodFlagsNV)
-> (Ptr MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV -> IO ())
-> Storable MemoryDecompressionMethodFlagsNV
forall b. Ptr b -> Int -> IO MemoryDecompressionMethodFlagsNV
forall b. Ptr b -> Int -> MemoryDecompressionMethodFlagsNV -> 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
$csizeOf :: MemoryDecompressionMethodFlagsNV -> Int
sizeOf :: MemoryDecompressionMethodFlagsNV -> Int
$calignment :: MemoryDecompressionMethodFlagsNV -> Int
alignment :: MemoryDecompressionMethodFlagsNV -> Int
$cpeekElemOff :: Ptr MemoryDecompressionMethodFlagsNV
-> Int -> IO MemoryDecompressionMethodFlagsNV
peekElemOff :: Ptr MemoryDecompressionMethodFlagsNV
-> Int -> IO MemoryDecompressionMethodFlagsNV
$cpokeElemOff :: Ptr MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV -> IO ()
pokeElemOff :: Ptr MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV -> IO ()
$cpeekByteOff :: forall b. Ptr b -> Int -> IO MemoryDecompressionMethodFlagsNV
peekByteOff :: forall b. Ptr b -> Int -> IO MemoryDecompressionMethodFlagsNV
$cpokeByteOff :: forall b. Ptr b -> Int -> MemoryDecompressionMethodFlagsNV -> IO ()
pokeByteOff :: forall b. Ptr b -> Int -> MemoryDecompressionMethodFlagsNV -> IO ()
$cpeek :: Ptr MemoryDecompressionMethodFlagsNV
-> IO MemoryDecompressionMethodFlagsNV
peek :: Ptr MemoryDecompressionMethodFlagsNV
-> IO MemoryDecompressionMethodFlagsNV
$cpoke :: Ptr MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> IO ()
poke :: Ptr MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV -> IO ()
Storable, MemoryDecompressionMethodFlagsNV
MemoryDecompressionMethodFlagsNV
-> Zero MemoryDecompressionMethodFlagsNV
forall a. a -> Zero a
$czero :: MemoryDecompressionMethodFlagsNV
zero :: MemoryDecompressionMethodFlagsNV
Zero, Eq MemoryDecompressionMethodFlagsNV
MemoryDecompressionMethodFlagsNV
Eq MemoryDecompressionMethodFlagsNV =>
(MemoryDecompressionMethodFlagsNV
 -> MemoryDecompressionMethodFlagsNV
 -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> MemoryDecompressionMethodFlagsNV
-> (Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV -> Int -> Bool)
-> (MemoryDecompressionMethodFlagsNV -> Maybe Int)
-> (MemoryDecompressionMethodFlagsNV -> Int)
-> (MemoryDecompressionMethodFlagsNV -> Bool)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV
    -> Int -> MemoryDecompressionMethodFlagsNV)
-> (MemoryDecompressionMethodFlagsNV -> Int)
-> Bits MemoryDecompressionMethodFlagsNV
Int -> MemoryDecompressionMethodFlagsNV
MemoryDecompressionMethodFlagsNV -> Bool
MemoryDecompressionMethodFlagsNV -> Int
MemoryDecompressionMethodFlagsNV -> Maybe Int
MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
MemoryDecompressionMethodFlagsNV -> Int -> Bool
MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
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
$c.&. :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
.&. :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
$c.|. :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
.|. :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
$cxor :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
xor :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
$ccomplement :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
complement :: MemoryDecompressionMethodFlagsNV
-> MemoryDecompressionMethodFlagsNV
$cshift :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
shift :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$crotate :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
rotate :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$czeroBits :: MemoryDecompressionMethodFlagsNV
zeroBits :: MemoryDecompressionMethodFlagsNV
$cbit :: Int -> MemoryDecompressionMethodFlagsNV
bit :: Int -> MemoryDecompressionMethodFlagsNV
$csetBit :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
setBit :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$cclearBit :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
clearBit :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$ccomplementBit :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
complementBit :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$ctestBit :: MemoryDecompressionMethodFlagsNV -> Int -> Bool
testBit :: MemoryDecompressionMethodFlagsNV -> Int -> Bool
$cbitSizeMaybe :: MemoryDecompressionMethodFlagsNV -> Maybe Int
bitSizeMaybe :: MemoryDecompressionMethodFlagsNV -> Maybe Int
$cbitSize :: MemoryDecompressionMethodFlagsNV -> Int
bitSize :: MemoryDecompressionMethodFlagsNV -> Int
$cisSigned :: MemoryDecompressionMethodFlagsNV -> Bool
isSigned :: MemoryDecompressionMethodFlagsNV -> Bool
$cshiftL :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
shiftL :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$cunsafeShiftL :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
unsafeShiftL :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$cshiftR :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
shiftR :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$cunsafeShiftR :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
unsafeShiftR :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$crotateL :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
rotateL :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$crotateR :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
rotateR :: MemoryDecompressionMethodFlagsNV
-> Int -> MemoryDecompressionMethodFlagsNV
$cpopCount :: MemoryDecompressionMethodFlagsNV -> Int
popCount :: MemoryDecompressionMethodFlagsNV -> Int
Bits, Bits MemoryDecompressionMethodFlagsNV
Bits MemoryDecompressionMethodFlagsNV =>
(MemoryDecompressionMethodFlagsNV -> Int)
-> (MemoryDecompressionMethodFlagsNV -> Int)
-> (MemoryDecompressionMethodFlagsNV -> Int)
-> FiniteBits MemoryDecompressionMethodFlagsNV
MemoryDecompressionMethodFlagsNV -> Int
forall b.
Bits b =>
(b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
$cfiniteBitSize :: MemoryDecompressionMethodFlagsNV -> Int
finiteBitSize :: MemoryDecompressionMethodFlagsNV -> Int
$ccountLeadingZeros :: MemoryDecompressionMethodFlagsNV -> Int
countLeadingZeros :: MemoryDecompressionMethodFlagsNV -> Int
$ccountTrailingZeros :: MemoryDecompressionMethodFlagsNV -> Int
countTrailingZeros :: MemoryDecompressionMethodFlagsNV -> Int
FiniteBits)

-- | 'MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV' specifies that the
-- GDeflate 1.0 algorithm is used to decompress data.
pattern $bMEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV :: MemoryDecompressionMethodFlagsNV
$mMEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV :: forall {r}.
MemoryDecompressionMethodFlagsNV
-> ((# #) -> r) -> ((# #) -> r) -> r
MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV = MemoryDecompressionMethodFlagBitsNV 0x0000000000000001

conNameMemoryDecompressionMethodFlagBitsNV :: String
conNameMemoryDecompressionMethodFlagBitsNV :: String
conNameMemoryDecompressionMethodFlagBitsNV = String
"MemoryDecompressionMethodFlagBitsNV"

enumPrefixMemoryDecompressionMethodFlagBitsNV :: String
enumPrefixMemoryDecompressionMethodFlagBitsNV :: String
enumPrefixMemoryDecompressionMethodFlagBitsNV = String
"MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV"

showTableMemoryDecompressionMethodFlagBitsNV :: [(MemoryDecompressionMethodFlagBitsNV, String)]
showTableMemoryDecompressionMethodFlagBitsNV :: [(MemoryDecompressionMethodFlagsNV, String)]
showTableMemoryDecompressionMethodFlagBitsNV =
  [
    ( MemoryDecompressionMethodFlagsNV
MEMORY_DECOMPRESSION_METHOD_GDEFLATE_1_0_BIT_NV
    , String
""
    )
  ]

instance Show MemoryDecompressionMethodFlagBitsNV where
  showsPrec :: Int -> MemoryDecompressionMethodFlagsNV -> ShowS
showsPrec =
    String
-> [(MemoryDecompressionMethodFlagsNV, String)]
-> String
-> (MemoryDecompressionMethodFlagsNV -> Flags64)
-> (Flags64 -> ShowS)
-> Int
-> MemoryDecompressionMethodFlagsNV
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixMemoryDecompressionMethodFlagBitsNV
      [(MemoryDecompressionMethodFlagsNV, String)]
showTableMemoryDecompressionMethodFlagBitsNV
      String
conNameMemoryDecompressionMethodFlagBitsNV
      (\(MemoryDecompressionMethodFlagBitsNV Flags64
x) -> Flags64
x)
      (\Flags64
x -> String -> ShowS
showString String
"0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flags64 -> ShowS
forall a. Integral a => a -> ShowS
showHex Flags64
x)

instance Read MemoryDecompressionMethodFlagBitsNV where
  readPrec :: ReadPrec MemoryDecompressionMethodFlagsNV
readPrec =
    String
-> [(MemoryDecompressionMethodFlagsNV, String)]
-> String
-> (Flags64 -> MemoryDecompressionMethodFlagsNV)
-> ReadPrec MemoryDecompressionMethodFlagsNV
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixMemoryDecompressionMethodFlagBitsNV
      [(MemoryDecompressionMethodFlagsNV, String)]
showTableMemoryDecompressionMethodFlagBitsNV
      String
conNameMemoryDecompressionMethodFlagBitsNV
      Flags64 -> MemoryDecompressionMethodFlagsNV
MemoryDecompressionMethodFlagBitsNV

type NV_MEMORY_DECOMPRESSION_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_NV_MEMORY_DECOMPRESSION_SPEC_VERSION"
pattern NV_MEMORY_DECOMPRESSION_SPEC_VERSION :: forall a . Integral a => a
pattern $bNV_MEMORY_DECOMPRESSION_SPEC_VERSION :: forall a. Integral a => a
$mNV_MEMORY_DECOMPRESSION_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
NV_MEMORY_DECOMPRESSION_SPEC_VERSION = 1


type NV_MEMORY_DECOMPRESSION_EXTENSION_NAME = "VK_NV_memory_decompression"

-- No documentation found for TopLevel "VK_NV_MEMORY_DECOMPRESSION_EXTENSION_NAME"
pattern NV_MEMORY_DECOMPRESSION_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bNV_MEMORY_DECOMPRESSION_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mNV_MEMORY_DECOMPRESSION_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> ((# #) -> r) -> ((# #) -> r) -> r
NV_MEMORY_DECOMPRESSION_EXTENSION_NAME = "VK_NV_memory_decompression"