{-# language CPP #-}
-- | = Name
--
-- VK_AMD_memory_overallocation_behavior - device extension
--
-- == VK_AMD_memory_overallocation_behavior
--
-- [__Name String__]
--     @VK_AMD_memory_overallocation_behavior@
--
-- [__Extension Type__]
--     Device extension
--
-- [__Registered Extension Number__]
--     190
--
-- [__Revision__]
--     1
--
-- [__Extension and Version Dependencies__]
--
--     -   Requires support for Vulkan 1.0
--
-- [__Contact__]
--
--     -   Martin Dinkov
--         <https://github.com/KhronosGroup/Vulkan-Docs/issues/new?body=[VK_AMD_memory_overallocation_behavior] @mdinkov%0A*Here describe the issue or question you have about the VK_AMD_memory_overallocation_behavior extension* >
--
-- == Other Extension Metadata
--
-- [__Last Modified Date__]
--     2018-09-19
--
-- [__IP Status__]
--     No known IP claims.
--
-- [__Contributors__]
--
--     -   Martin Dinkov, AMD
--
--     -   Matthaeus Chajdas, AMD
--
--     -   Daniel Rakos, AMD
--
--     -   Jon Campbell, AMD
--
-- == Description
--
-- This extension allows controlling whether explicit overallocation beyond
-- the device memory heap sizes (reported by
-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties') is
-- allowed or not. Overallocation may lead to performance loss and is not
-- supported for all platforms.
--
-- == New Structures
--
-- -   Extending 'Vulkan.Core10.Device.DeviceCreateInfo':
--
--     -   'DeviceMemoryOverallocationCreateInfoAMD'
--
-- == New Enums
--
-- -   'MemoryOverallocationBehaviorAMD'
--
-- == New Enum Constants
--
-- -   'AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME'
--
-- -   'AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION'
--
-- -   Extending 'Vulkan.Core10.Enums.StructureType.StructureType':
--
--     -   'Vulkan.Core10.Enums.StructureType.STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD'
--
-- == Version History
--
-- -   Revision 1, 2018-09-19 (Martin Dinkov)
--
--     -   Initial draft.
--
-- == See Also
--
-- 'DeviceMemoryOverallocationCreateInfoAMD',
-- 'MemoryOverallocationBehaviorAMD'
--
-- == Document Notes
--
-- For more information, see the
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#VK_AMD_memory_overallocation_behavior Vulkan Specification>
--
-- This page is a generated document. Fixes and changes should be made to
-- the generator scripts, not directly.
module Vulkan.Extensions.VK_AMD_memory_overallocation_behavior  ( DeviceMemoryOverallocationCreateInfoAMD(..)
                                                                , MemoryOverallocationBehaviorAMD( MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD
                                                                                                 , MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD
                                                                                                 , MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD
                                                                                                 , ..
                                                                                                 )
                                                                , AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION
                                                                , pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION
                                                                , AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME
                                                                , pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME
                                                                ) where

import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import Foreign.Marshal.Alloc (allocaBytes)
import Foreign.Ptr (nullPtr)
import Foreign.Ptr (plusPtr)
import GHC.Show (showsPrec)
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 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 Data.Int (Int32)
import Foreign.Ptr (Ptr)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Data.Kind (Type)
import Vulkan.Core10.Enums.StructureType (StructureType)
import Vulkan.Core10.Enums.StructureType (StructureType(STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD))
-- | VkDeviceMemoryOverallocationCreateInfoAMD - Specify memory
-- overallocation behavior for a Vulkan device
--
-- == Valid Usage (Implicit)
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_memory_overallocation_behavior VK_AMD_memory_overallocation_behavior>,
-- 'MemoryOverallocationBehaviorAMD',
-- 'Vulkan.Core10.Enums.StructureType.StructureType'
data DeviceMemoryOverallocationCreateInfoAMD = DeviceMemoryOverallocationCreateInfoAMD
  { -- | @overallocationBehavior@ is the desired overallocation behavior.
    --
    -- #VUID-VkDeviceMemoryOverallocationCreateInfoAMD-overallocationBehavior-parameter#
    -- @overallocationBehavior@ /must/ be a valid
    -- 'MemoryOverallocationBehaviorAMD' value
    DeviceMemoryOverallocationCreateInfoAMD
-> MemoryOverallocationBehaviorAMD
overallocationBehavior :: MemoryOverallocationBehaviorAMD }
  deriving (Typeable, DeviceMemoryOverallocationCreateInfoAMD
-> DeviceMemoryOverallocationCreateInfoAMD -> Bool
(DeviceMemoryOverallocationCreateInfoAMD
 -> DeviceMemoryOverallocationCreateInfoAMD -> Bool)
-> (DeviceMemoryOverallocationCreateInfoAMD
    -> DeviceMemoryOverallocationCreateInfoAMD -> Bool)
-> Eq DeviceMemoryOverallocationCreateInfoAMD
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeviceMemoryOverallocationCreateInfoAMD
-> DeviceMemoryOverallocationCreateInfoAMD -> Bool
$c/= :: DeviceMemoryOverallocationCreateInfoAMD
-> DeviceMemoryOverallocationCreateInfoAMD -> Bool
== :: DeviceMemoryOverallocationCreateInfoAMD
-> DeviceMemoryOverallocationCreateInfoAMD -> Bool
$c== :: DeviceMemoryOverallocationCreateInfoAMD
-> DeviceMemoryOverallocationCreateInfoAMD -> Bool
Eq)
#if defined(GENERIC_INSTANCES)
deriving instance Generic (DeviceMemoryOverallocationCreateInfoAMD)
#endif
deriving instance Show DeviceMemoryOverallocationCreateInfoAMD

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

instance FromCStruct DeviceMemoryOverallocationCreateInfoAMD where
  peekCStruct :: Ptr DeviceMemoryOverallocationCreateInfoAMD
-> IO DeviceMemoryOverallocationCreateInfoAMD
peekCStruct Ptr DeviceMemoryOverallocationCreateInfoAMD
p = do
    MemoryOverallocationBehaviorAMD
overallocationBehavior <- forall a. Storable a => Ptr a -> IO a
peek @MemoryOverallocationBehaviorAMD ((Ptr DeviceMemoryOverallocationCreateInfoAMD
p Ptr DeviceMemoryOverallocationCreateInfoAMD
-> Int -> Ptr MemoryOverallocationBehaviorAMD
forall a b. Ptr a -> Int -> Ptr b
`plusPtr` Int
16 :: Ptr MemoryOverallocationBehaviorAMD))
    DeviceMemoryOverallocationCreateInfoAMD
-> IO DeviceMemoryOverallocationCreateInfoAMD
forall (f :: * -> *) a. Applicative f => a -> f a
pure (DeviceMemoryOverallocationCreateInfoAMD
 -> IO DeviceMemoryOverallocationCreateInfoAMD)
-> DeviceMemoryOverallocationCreateInfoAMD
-> IO DeviceMemoryOverallocationCreateInfoAMD
forall a b. (a -> b) -> a -> b
$ MemoryOverallocationBehaviorAMD
-> DeviceMemoryOverallocationCreateInfoAMD
DeviceMemoryOverallocationCreateInfoAMD
             MemoryOverallocationBehaviorAMD
overallocationBehavior

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

instance Zero DeviceMemoryOverallocationCreateInfoAMD where
  zero :: DeviceMemoryOverallocationCreateInfoAMD
zero = MemoryOverallocationBehaviorAMD
-> DeviceMemoryOverallocationCreateInfoAMD
DeviceMemoryOverallocationCreateInfoAMD
           MemoryOverallocationBehaviorAMD
forall a. Zero a => a
zero


-- | VkMemoryOverallocationBehaviorAMD - Specify memory overallocation
-- behavior
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_AMD_memory_overallocation_behavior VK_AMD_memory_overallocation_behavior>,
-- 'DeviceMemoryOverallocationCreateInfoAMD'
newtype MemoryOverallocationBehaviorAMD = MemoryOverallocationBehaviorAMD Int32
  deriving newtype (MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
(MemoryOverallocationBehaviorAMD
 -> MemoryOverallocationBehaviorAMD -> Bool)
-> (MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD -> Bool)
-> Eq MemoryOverallocationBehaviorAMD
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
$c/= :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
== :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
$c== :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
Eq, Eq MemoryOverallocationBehaviorAMD
Eq MemoryOverallocationBehaviorAMD
-> (MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD -> Ordering)
-> (MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD -> Bool)
-> (MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD -> Bool)
-> (MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD -> Bool)
-> (MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD -> Bool)
-> (MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD)
-> (MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD)
-> Ord MemoryOverallocationBehaviorAMD
MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Ordering
MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
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 :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
$cmin :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
max :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
$cmax :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD
>= :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
$c>= :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
> :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
$c> :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
<= :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
$c<= :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
< :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
$c< :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Bool
compare :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Ordering
$ccompare :: MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> Ordering
Ord, Ptr MemoryOverallocationBehaviorAMD
-> IO MemoryOverallocationBehaviorAMD
Ptr MemoryOverallocationBehaviorAMD
-> Int -> IO MemoryOverallocationBehaviorAMD
Ptr MemoryOverallocationBehaviorAMD
-> Int -> MemoryOverallocationBehaviorAMD -> IO ()
Ptr MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> IO ()
MemoryOverallocationBehaviorAMD -> Int
(MemoryOverallocationBehaviorAMD -> Int)
-> (MemoryOverallocationBehaviorAMD -> Int)
-> (Ptr MemoryOverallocationBehaviorAMD
    -> Int -> IO MemoryOverallocationBehaviorAMD)
-> (Ptr MemoryOverallocationBehaviorAMD
    -> Int -> MemoryOverallocationBehaviorAMD -> IO ())
-> (forall b. Ptr b -> Int -> IO MemoryOverallocationBehaviorAMD)
-> (forall b.
    Ptr b -> Int -> MemoryOverallocationBehaviorAMD -> IO ())
-> (Ptr MemoryOverallocationBehaviorAMD
    -> IO MemoryOverallocationBehaviorAMD)
-> (Ptr MemoryOverallocationBehaviorAMD
    -> MemoryOverallocationBehaviorAMD -> IO ())
-> Storable MemoryOverallocationBehaviorAMD
forall b. Ptr b -> Int -> IO MemoryOverallocationBehaviorAMD
forall b. Ptr b -> Int -> MemoryOverallocationBehaviorAMD -> 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 MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> IO ()
$cpoke :: Ptr MemoryOverallocationBehaviorAMD
-> MemoryOverallocationBehaviorAMD -> IO ()
peek :: Ptr MemoryOverallocationBehaviorAMD
-> IO MemoryOverallocationBehaviorAMD
$cpeek :: Ptr MemoryOverallocationBehaviorAMD
-> IO MemoryOverallocationBehaviorAMD
pokeByteOff :: forall b. Ptr b -> Int -> MemoryOverallocationBehaviorAMD -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> MemoryOverallocationBehaviorAMD -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO MemoryOverallocationBehaviorAMD
$cpeekByteOff :: forall b. Ptr b -> Int -> IO MemoryOverallocationBehaviorAMD
pokeElemOff :: Ptr MemoryOverallocationBehaviorAMD
-> Int -> MemoryOverallocationBehaviorAMD -> IO ()
$cpokeElemOff :: Ptr MemoryOverallocationBehaviorAMD
-> Int -> MemoryOverallocationBehaviorAMD -> IO ()
peekElemOff :: Ptr MemoryOverallocationBehaviorAMD
-> Int -> IO MemoryOverallocationBehaviorAMD
$cpeekElemOff :: Ptr MemoryOverallocationBehaviorAMD
-> Int -> IO MemoryOverallocationBehaviorAMD
alignment :: MemoryOverallocationBehaviorAMD -> Int
$calignment :: MemoryOverallocationBehaviorAMD -> Int
sizeOf :: MemoryOverallocationBehaviorAMD -> Int
$csizeOf :: MemoryOverallocationBehaviorAMD -> Int
Storable, MemoryOverallocationBehaviorAMD
MemoryOverallocationBehaviorAMD
-> Zero MemoryOverallocationBehaviorAMD
forall a. a -> Zero a
zero :: MemoryOverallocationBehaviorAMD
$czero :: MemoryOverallocationBehaviorAMD
Zero)

-- | 'MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD' lets the implementation
-- decide if overallocation is allowed.
pattern $bMEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD :: MemoryOverallocationBehaviorAMD
$mMEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD :: forall {r}.
MemoryOverallocationBehaviorAMD
-> (Void# -> r) -> (Void# -> r) -> r
MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD = MemoryOverallocationBehaviorAMD 0

-- | 'MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD' specifies overallocation is
-- allowed if platform permits.
pattern $bMEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD :: MemoryOverallocationBehaviorAMD
$mMEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD :: forall {r}.
MemoryOverallocationBehaviorAMD
-> (Void# -> r) -> (Void# -> r) -> r
MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD = MemoryOverallocationBehaviorAMD 1

-- | 'MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD' specifies the
-- application is not allowed to allocate device memory beyond the heap
-- sizes reported by
-- 'Vulkan.Core10.DeviceInitialization.PhysicalDeviceMemoryProperties'.
-- Allocations that are not explicitly made by the application within the
-- scope of the Vulkan instance are not accounted for.
pattern $bMEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD :: MemoryOverallocationBehaviorAMD
$mMEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD :: forall {r}.
MemoryOverallocationBehaviorAMD
-> (Void# -> r) -> (Void# -> r) -> r
MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD = MemoryOverallocationBehaviorAMD 2

{-# COMPLETE
  MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD
  , MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD
  , MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD ::
    MemoryOverallocationBehaviorAMD
  #-}

conNameMemoryOverallocationBehaviorAMD :: String
conNameMemoryOverallocationBehaviorAMD :: String
conNameMemoryOverallocationBehaviorAMD = String
"MemoryOverallocationBehaviorAMD"

enumPrefixMemoryOverallocationBehaviorAMD :: String
enumPrefixMemoryOverallocationBehaviorAMD :: String
enumPrefixMemoryOverallocationBehaviorAMD = String
"MEMORY_OVERALLOCATION_BEHAVIOR_"

showTableMemoryOverallocationBehaviorAMD :: [(MemoryOverallocationBehaviorAMD, String)]
showTableMemoryOverallocationBehaviorAMD :: [(MemoryOverallocationBehaviorAMD, String)]
showTableMemoryOverallocationBehaviorAMD =
  [
    ( MemoryOverallocationBehaviorAMD
MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD
    , String
"DEFAULT_AMD"
    )
  ,
    ( MemoryOverallocationBehaviorAMD
MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD
    , String
"ALLOWED_AMD"
    )
  ,
    ( MemoryOverallocationBehaviorAMD
MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD
    , String
"DISALLOWED_AMD"
    )
  ]

instance Show MemoryOverallocationBehaviorAMD where
  showsPrec :: Int -> MemoryOverallocationBehaviorAMD -> ShowS
showsPrec =
    String
-> [(MemoryOverallocationBehaviorAMD, String)]
-> String
-> (MemoryOverallocationBehaviorAMD -> Int32)
-> (Int32 -> ShowS)
-> Int
-> MemoryOverallocationBehaviorAMD
-> ShowS
forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixMemoryOverallocationBehaviorAMD
      [(MemoryOverallocationBehaviorAMD, String)]
showTableMemoryOverallocationBehaviorAMD
      String
conNameMemoryOverallocationBehaviorAMD
      (\(MemoryOverallocationBehaviorAMD Int32
x) -> Int32
x)
      (Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11)

instance Read MemoryOverallocationBehaviorAMD where
  readPrec :: ReadPrec MemoryOverallocationBehaviorAMD
readPrec =
    String
-> [(MemoryOverallocationBehaviorAMD, String)]
-> String
-> (Int32 -> MemoryOverallocationBehaviorAMD)
-> ReadPrec MemoryOverallocationBehaviorAMD
forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixMemoryOverallocationBehaviorAMD
      [(MemoryOverallocationBehaviorAMD, String)]
showTableMemoryOverallocationBehaviorAMD
      String
conNameMemoryOverallocationBehaviorAMD
      Int32 -> MemoryOverallocationBehaviorAMD
MemoryOverallocationBehaviorAMD

type AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION = 1

-- No documentation found for TopLevel "VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION"
pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION :: forall a . Integral a => a
pattern $bAMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION :: forall a. Integral a => a
$mAMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION :: forall {r} {a}.
Integral a =>
a -> (Void# -> r) -> (Void# -> r) -> r
AMD_MEMORY_OVERALLOCATION_BEHAVIOR_SPEC_VERSION = 1


type AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME = "VK_AMD_memory_overallocation_behavior"

-- No documentation found for TopLevel "VK_AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME"
pattern AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME :: forall a . (Eq a, IsString a) => a
pattern $bAMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME :: forall a. (Eq a, IsString a) => a
$mAMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME :: forall {r} {a}.
(Eq a, IsString a) =>
a -> (Void# -> r) -> (Void# -> r) -> r
AMD_MEMORY_OVERALLOCATION_BEHAVIOR_EXTENSION_NAME = "VK_AMD_memory_overallocation_behavior"