{-# OPTIONS_HADDOCK ignore-exports#-}
{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE PatternSynonyms            #-}
{-# LANGUAGE Strict                     #-}
module Graphics.Vulkan.Types.Enum.PhysicalDeviceType
       (VkPhysicalDeviceType(VkPhysicalDeviceType,
                             VK_PHYSICAL_DEVICE_TYPE_OTHER,
                             VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU,
                             VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU,
                             VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU, VK_PHYSICAL_DEVICE_TYPE_CPU))
       where
import Foreign.Storable                (Storable)
import GHC.Read                        (choose, expectP)
import Graphics.Vulkan.Marshal         (Int32)
import Text.ParserCombinators.ReadPrec (prec, step, (+++))
import Text.Read                       (Read (..), parens)
import Text.Read.Lex                   (Lexeme (..))

-- | type = @enum@
--
--   <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VkPhysicalDeviceType VkPhysicalDeviceType registry at www.khronos.org>
newtype VkPhysicalDeviceType = VkPhysicalDeviceType Int32
                               deriving (VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
(VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool)
-> (VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool)
-> Eq VkPhysicalDeviceType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
$c/= :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
== :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
$c== :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
Eq, Eq VkPhysicalDeviceType
Eq VkPhysicalDeviceType
-> (VkPhysicalDeviceType -> VkPhysicalDeviceType -> Ordering)
-> (VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool)
-> (VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool)
-> (VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool)
-> (VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool)
-> (VkPhysicalDeviceType
    -> VkPhysicalDeviceType -> VkPhysicalDeviceType)
-> (VkPhysicalDeviceType
    -> VkPhysicalDeviceType -> VkPhysicalDeviceType)
-> Ord VkPhysicalDeviceType
VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
VkPhysicalDeviceType -> VkPhysicalDeviceType -> Ordering
VkPhysicalDeviceType
-> VkPhysicalDeviceType -> VkPhysicalDeviceType
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 :: VkPhysicalDeviceType
-> VkPhysicalDeviceType -> VkPhysicalDeviceType
$cmin :: VkPhysicalDeviceType
-> VkPhysicalDeviceType -> VkPhysicalDeviceType
max :: VkPhysicalDeviceType
-> VkPhysicalDeviceType -> VkPhysicalDeviceType
$cmax :: VkPhysicalDeviceType
-> VkPhysicalDeviceType -> VkPhysicalDeviceType
>= :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
$c>= :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
> :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
$c> :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
<= :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
$c<= :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
< :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
$c< :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Bool
compare :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Ordering
$ccompare :: VkPhysicalDeviceType -> VkPhysicalDeviceType -> Ordering
Ord, Int -> VkPhysicalDeviceType
VkPhysicalDeviceType -> Int
VkPhysicalDeviceType -> [VkPhysicalDeviceType]
VkPhysicalDeviceType -> VkPhysicalDeviceType
VkPhysicalDeviceType
-> VkPhysicalDeviceType -> [VkPhysicalDeviceType]
VkPhysicalDeviceType
-> VkPhysicalDeviceType
-> VkPhysicalDeviceType
-> [VkPhysicalDeviceType]
(VkPhysicalDeviceType -> VkPhysicalDeviceType)
-> (VkPhysicalDeviceType -> VkPhysicalDeviceType)
-> (Int -> VkPhysicalDeviceType)
-> (VkPhysicalDeviceType -> Int)
-> (VkPhysicalDeviceType -> [VkPhysicalDeviceType])
-> (VkPhysicalDeviceType
    -> VkPhysicalDeviceType -> [VkPhysicalDeviceType])
-> (VkPhysicalDeviceType
    -> VkPhysicalDeviceType -> [VkPhysicalDeviceType])
-> (VkPhysicalDeviceType
    -> VkPhysicalDeviceType
    -> VkPhysicalDeviceType
    -> [VkPhysicalDeviceType])
-> Enum VkPhysicalDeviceType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
enumFromThenTo :: VkPhysicalDeviceType
-> VkPhysicalDeviceType
-> VkPhysicalDeviceType
-> [VkPhysicalDeviceType]
$cenumFromThenTo :: VkPhysicalDeviceType
-> VkPhysicalDeviceType
-> VkPhysicalDeviceType
-> [VkPhysicalDeviceType]
enumFromTo :: VkPhysicalDeviceType
-> VkPhysicalDeviceType -> [VkPhysicalDeviceType]
$cenumFromTo :: VkPhysicalDeviceType
-> VkPhysicalDeviceType -> [VkPhysicalDeviceType]
enumFromThen :: VkPhysicalDeviceType
-> VkPhysicalDeviceType -> [VkPhysicalDeviceType]
$cenumFromThen :: VkPhysicalDeviceType
-> VkPhysicalDeviceType -> [VkPhysicalDeviceType]
enumFrom :: VkPhysicalDeviceType -> [VkPhysicalDeviceType]
$cenumFrom :: VkPhysicalDeviceType -> [VkPhysicalDeviceType]
fromEnum :: VkPhysicalDeviceType -> Int
$cfromEnum :: VkPhysicalDeviceType -> Int
toEnum :: Int -> VkPhysicalDeviceType
$ctoEnum :: Int -> VkPhysicalDeviceType
pred :: VkPhysicalDeviceType -> VkPhysicalDeviceType
$cpred :: VkPhysicalDeviceType -> VkPhysicalDeviceType
succ :: VkPhysicalDeviceType -> VkPhysicalDeviceType
$csucc :: VkPhysicalDeviceType -> VkPhysicalDeviceType
Enum, Ptr VkPhysicalDeviceType -> IO VkPhysicalDeviceType
Ptr VkPhysicalDeviceType -> Int -> IO VkPhysicalDeviceType
Ptr VkPhysicalDeviceType -> Int -> VkPhysicalDeviceType -> IO ()
Ptr VkPhysicalDeviceType -> VkPhysicalDeviceType -> IO ()
VkPhysicalDeviceType -> Int
(VkPhysicalDeviceType -> Int)
-> (VkPhysicalDeviceType -> Int)
-> (Ptr VkPhysicalDeviceType -> Int -> IO VkPhysicalDeviceType)
-> (Ptr VkPhysicalDeviceType
    -> Int -> VkPhysicalDeviceType -> IO ())
-> (forall b. Ptr b -> Int -> IO VkPhysicalDeviceType)
-> (forall b. Ptr b -> Int -> VkPhysicalDeviceType -> IO ())
-> (Ptr VkPhysicalDeviceType -> IO VkPhysicalDeviceType)
-> (Ptr VkPhysicalDeviceType -> VkPhysicalDeviceType -> IO ())
-> Storable VkPhysicalDeviceType
forall b. Ptr b -> Int -> IO VkPhysicalDeviceType
forall b. Ptr b -> Int -> VkPhysicalDeviceType -> 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 VkPhysicalDeviceType -> VkPhysicalDeviceType -> IO ()
$cpoke :: Ptr VkPhysicalDeviceType -> VkPhysicalDeviceType -> IO ()
peek :: Ptr VkPhysicalDeviceType -> IO VkPhysicalDeviceType
$cpeek :: Ptr VkPhysicalDeviceType -> IO VkPhysicalDeviceType
pokeByteOff :: forall b. Ptr b -> Int -> VkPhysicalDeviceType -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> VkPhysicalDeviceType -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO VkPhysicalDeviceType
$cpeekByteOff :: forall b. Ptr b -> Int -> IO VkPhysicalDeviceType
pokeElemOff :: Ptr VkPhysicalDeviceType -> Int -> VkPhysicalDeviceType -> IO ()
$cpokeElemOff :: Ptr VkPhysicalDeviceType -> Int -> VkPhysicalDeviceType -> IO ()
peekElemOff :: Ptr VkPhysicalDeviceType -> Int -> IO VkPhysicalDeviceType
$cpeekElemOff :: Ptr VkPhysicalDeviceType -> Int -> IO VkPhysicalDeviceType
alignment :: VkPhysicalDeviceType -> Int
$calignment :: VkPhysicalDeviceType -> Int
sizeOf :: VkPhysicalDeviceType -> Int
$csizeOf :: VkPhysicalDeviceType -> Int
Storable)

instance Show VkPhysicalDeviceType where
    showsPrec :: Int -> VkPhysicalDeviceType -> ShowS
showsPrec Int
_ VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_OTHER
      = String -> ShowS
showString String
"VK_PHYSICAL_DEVICE_TYPE_OTHER"
    showsPrec Int
_ VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
      = String -> ShowS
showString String
"VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"
    showsPrec Int
_ VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
      = String -> ShowS
showString String
"VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"
    showsPrec Int
_ VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU
      = String -> ShowS
showString String
"VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"
    showsPrec Int
_ VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_CPU
      = String -> ShowS
showString String
"VK_PHYSICAL_DEVICE_TYPE_CPU"
    showsPrec Int
p (VkPhysicalDeviceType Int32
x)
      = Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= Int
11)
          (String -> ShowS
showString String
"VkPhysicalDeviceType " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int32 -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
11 Int32
x)

instance Read VkPhysicalDeviceType where
    readPrec :: ReadPrec VkPhysicalDeviceType
readPrec
      = ReadPrec VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall a. ReadPrec a -> ReadPrec a
parens
          ([(String, ReadPrec VkPhysicalDeviceType)]
-> ReadPrec VkPhysicalDeviceType
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose
             [(String
"VK_PHYSICAL_DEVICE_TYPE_OTHER",
               VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall (f :: * -> *) a. Applicative f => a -> f a
pure VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_OTHER),
              (String
"VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU",
               VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall (f :: * -> *) a. Applicative f => a -> f a
pure VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU),
              (String
"VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU",
               VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall (f :: * -> *) a. Applicative f => a -> f a
pure VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU),
              (String
"VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU",
               VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall (f :: * -> *) a. Applicative f => a -> f a
pure VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU),
              (String
"VK_PHYSICAL_DEVICE_TYPE_CPU", VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall (f :: * -> *) a. Applicative f => a -> f a
pure VkPhysicalDeviceType
VK_PHYSICAL_DEVICE_TYPE_CPU)]
             ReadPrec VkPhysicalDeviceType
-> ReadPrec VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
             Int
-> ReadPrec VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall a. Int -> ReadPrec a -> ReadPrec a
prec Int
10
               (Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident String
"VkPhysicalDeviceType") ReadPrec ()
-> ReadPrec VkPhysicalDeviceType -> ReadPrec VkPhysicalDeviceType
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>>
                  (Int32 -> VkPhysicalDeviceType
VkPhysicalDeviceType (Int32 -> VkPhysicalDeviceType)
-> ReadPrec Int32 -> ReadPrec VkPhysicalDeviceType
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> ReadPrec Int32 -> ReadPrec Int32
forall a. ReadPrec a -> ReadPrec a
step ReadPrec Int32
forall a. Read a => ReadPrec a
readPrec)))

pattern VK_PHYSICAL_DEVICE_TYPE_OTHER :: VkPhysicalDeviceType

pattern $bVK_PHYSICAL_DEVICE_TYPE_OTHER :: VkPhysicalDeviceType
$mVK_PHYSICAL_DEVICE_TYPE_OTHER :: forall {r}.
VkPhysicalDeviceType -> (Void# -> r) -> (Void# -> r) -> r
VK_PHYSICAL_DEVICE_TYPE_OTHER = VkPhysicalDeviceType 0

pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU ::
        VkPhysicalDeviceType

pattern $bVK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU :: VkPhysicalDeviceType
$mVK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU :: forall {r}.
VkPhysicalDeviceType -> (Void# -> r) -> (Void# -> r) -> r
VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU =
        VkPhysicalDeviceType 1

pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU ::
        VkPhysicalDeviceType

pattern $bVK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU :: VkPhysicalDeviceType
$mVK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU :: forall {r}.
VkPhysicalDeviceType -> (Void# -> r) -> (Void# -> r) -> r
VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU =
        VkPhysicalDeviceType 2

pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU :: VkPhysicalDeviceType

pattern $bVK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU :: VkPhysicalDeviceType
$mVK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU :: forall {r}.
VkPhysicalDeviceType -> (Void# -> r) -> (Void# -> r) -> r
VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU =
        VkPhysicalDeviceType 3

pattern VK_PHYSICAL_DEVICE_TYPE_CPU :: VkPhysicalDeviceType

pattern $bVK_PHYSICAL_DEVICE_TYPE_CPU :: VkPhysicalDeviceType
$mVK_PHYSICAL_DEVICE_TYPE_CPU :: forall {r}.
VkPhysicalDeviceType -> (Void# -> r) -> (Void# -> r) -> r
VK_PHYSICAL_DEVICE_TYPE_CPU = VkPhysicalDeviceType 4