{-# OPTIONS_HADDOCK ignore-exports#-}
{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE FlexibleInstances          #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE KindSignatures             #-}
{-# LANGUAGE PatternSynonyms            #-}
{-# LANGUAGE StandaloneDeriving         #-}
{-# LANGUAGE Strict                     #-}
{-# LANGUAGE TypeSynonymInstances       #-}
module Graphics.Vulkan.Types.Enum.Descriptor
       (VkDescriptorBindingBitmaskEXT(VkDescriptorBindingBitmaskEXT,
                                      VkDescriptorBindingFlagsEXT, VkDescriptorBindingFlagBitsEXT,
                                      VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT,
                                      VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT,
                                      VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT,
                                      VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT),
        VkDescriptorBindingFlagsEXT, VkDescriptorBindingFlagBitsEXT,
        VkDescriptorPoolCreateBitmask(VkDescriptorPoolCreateBitmask,
                                      VkDescriptorPoolCreateFlags, VkDescriptorPoolCreateFlagBits,
                                      VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT),
        VkDescriptorPoolCreateFlags, VkDescriptorPoolCreateFlagBits,
        VkDescriptorSetLayoutCreateBitmask(VkDescriptorSetLayoutCreateBitmask,
                                           VkDescriptorSetLayoutCreateFlags,
                                           VkDescriptorSetLayoutCreateFlagBits),
        VkDescriptorSetLayoutCreateFlags,
        VkDescriptorSetLayoutCreateFlagBits,
        VkDescriptorType(VkDescriptorType, VK_DESCRIPTOR_TYPE_SAMPLER,
                         VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
                         VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,
                         VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,
                         VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,
                         VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
                         VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,
                         VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
                         VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
                         VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT),
        VkDescriptorUpdateTemplateType(VkDescriptorUpdateTemplateType,
                                       VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET),
        VkDescriptorUpdateTemplateTypeKHR(..))
       where
import Data.Bits                       (Bits, FiniteBits)
import Data.Coerce                     (coerce)
import Foreign.Storable                (Storable)
import GHC.Read                        (choose, expectP)
import Graphics.Vulkan.Marshal         (FlagBit, FlagMask, FlagType, Int32)
import Graphics.Vulkan.Types.BaseTypes (VkFlags (..))
import Text.ParserCombinators.ReadPrec (prec, step, (+++))
import Text.Read                       (Read (..), parens)
import Text.Read.Lex                   (Lexeme (..))

newtype VkDescriptorBindingBitmaskEXT (a ::
                                         FlagType) = VkDescriptorBindingBitmaskEXT VkFlags
                                                     deriving (Eq, Ord, Storable)

type VkDescriptorBindingFlagsEXT =
     VkDescriptorBindingBitmaskEXT FlagMask

type VkDescriptorBindingFlagBitsEXT =
     VkDescriptorBindingBitmaskEXT FlagBit

pattern VkDescriptorBindingFlagBitsEXT ::
        VkFlags -> VkDescriptorBindingBitmaskEXT FlagBit

pattern VkDescriptorBindingFlagBitsEXT n =
        VkDescriptorBindingBitmaskEXT n

pattern VkDescriptorBindingFlagsEXT ::
        VkFlags -> VkDescriptorBindingBitmaskEXT FlagMask

pattern VkDescriptorBindingFlagsEXT n =
        VkDescriptorBindingBitmaskEXT n

deriving instance Bits (VkDescriptorBindingBitmaskEXT FlagMask)

deriving instance
         FiniteBits (VkDescriptorBindingBitmaskEXT FlagMask)

instance Show (VkDescriptorBindingBitmaskEXT a) where
    showsPrec _ VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
      = showString "VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT"
    showsPrec _
      VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
      = showString
          "VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT"
    showsPrec _ VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
      = showString "VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT"
    showsPrec _ VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
      = showString
          "VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT"
    showsPrec p (VkDescriptorBindingBitmaskEXT x)
      = showParen (p >= 11)
          (showString "VkDescriptorBindingBitmaskEXT " . showsPrec 11 x)

instance Read (VkDescriptorBindingBitmaskEXT a) where
    readPrec
      = parens
          (choose
             [("VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT",
               pure VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT),
              ("VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT",
               pure VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT),
              ("VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT",
               pure VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT),
              ("VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT",
               pure VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT)]
             +++
             prec 10
               (expectP (Ident "VkDescriptorBindingBitmaskEXT") >>
                  (VkDescriptorBindingBitmaskEXT <$> step readPrec)))

-- | bitpos = @0@
pattern VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT ::
        VkDescriptorBindingBitmaskEXT a

pattern VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT =
        VkDescriptorBindingBitmaskEXT 1

-- | bitpos = @1@
pattern VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
        :: VkDescriptorBindingBitmaskEXT a

pattern VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT =
        VkDescriptorBindingBitmaskEXT 2

-- | bitpos = @2@
pattern VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT ::
        VkDescriptorBindingBitmaskEXT a

pattern VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT =
        VkDescriptorBindingBitmaskEXT 4

-- | bitpos = @3@
pattern VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT ::
        VkDescriptorBindingBitmaskEXT a

pattern VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT =
        VkDescriptorBindingBitmaskEXT 8

newtype VkDescriptorPoolCreateBitmask (a ::
                                         FlagType) = VkDescriptorPoolCreateBitmask VkFlags
                                                     deriving (Eq, Ord, Storable)

type VkDescriptorPoolCreateFlags =
     VkDescriptorPoolCreateBitmask FlagMask

type VkDescriptorPoolCreateFlagBits =
     VkDescriptorPoolCreateBitmask FlagBit

pattern VkDescriptorPoolCreateFlagBits ::
        VkFlags -> VkDescriptorPoolCreateBitmask FlagBit

pattern VkDescriptorPoolCreateFlagBits n =
        VkDescriptorPoolCreateBitmask n

pattern VkDescriptorPoolCreateFlags ::
        VkFlags -> VkDescriptorPoolCreateBitmask FlagMask

pattern VkDescriptorPoolCreateFlags n =
        VkDescriptorPoolCreateBitmask n

deriving instance Bits (VkDescriptorPoolCreateBitmask FlagMask)

deriving instance
         FiniteBits (VkDescriptorPoolCreateBitmask FlagMask)

instance Show (VkDescriptorPoolCreateBitmask a) where
    showsPrec _ VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
      = showString "VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"
    showsPrec p (VkDescriptorPoolCreateBitmask x)
      = showParen (p >= 11)
          (showString "VkDescriptorPoolCreateBitmask " . showsPrec 11 x)

instance Read (VkDescriptorPoolCreateBitmask a) where
    readPrec
      = parens
          (choose
             [("VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT",
               pure VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT)]
             +++
             prec 10
               (expectP (Ident "VkDescriptorPoolCreateBitmask") >>
                  (VkDescriptorPoolCreateBitmask <$> step readPrec)))

-- | Descriptor sets may be freed individually
--
--   bitpos = @0@
pattern VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT ::
        VkDescriptorPoolCreateBitmask a

pattern VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT =
        VkDescriptorPoolCreateBitmask 1

newtype VkDescriptorSetLayoutCreateBitmask (a ::
                                              FlagType) = VkDescriptorSetLayoutCreateBitmask VkFlags
                                                          deriving (Eq, Ord, Storable)

type VkDescriptorSetLayoutCreateFlags =
     VkDescriptorSetLayoutCreateBitmask FlagMask

type VkDescriptorSetLayoutCreateFlagBits =
     VkDescriptorSetLayoutCreateBitmask FlagBit

pattern VkDescriptorSetLayoutCreateFlagBits ::
        VkFlags -> VkDescriptorSetLayoutCreateBitmask FlagBit

pattern VkDescriptorSetLayoutCreateFlagBits n =
        VkDescriptorSetLayoutCreateBitmask n

pattern VkDescriptorSetLayoutCreateFlags ::
        VkFlags -> VkDescriptorSetLayoutCreateBitmask FlagMask

pattern VkDescriptorSetLayoutCreateFlags n =
        VkDescriptorSetLayoutCreateBitmask n

deriving instance
         Bits (VkDescriptorSetLayoutCreateBitmask FlagMask)

deriving instance
         FiniteBits (VkDescriptorSetLayoutCreateBitmask FlagMask)

instance Show (VkDescriptorSetLayoutCreateBitmask a) where
    showsPrec p (VkDescriptorSetLayoutCreateBitmask x)
      = showParen (p >= 11)
          (showString "VkDescriptorSetLayoutCreateBitmask " . showsPrec 11 x)

instance Read (VkDescriptorSetLayoutCreateBitmask a) where
    readPrec
      = parens
          (choose [] +++
             prec 10
               (expectP (Ident "VkDescriptorSetLayoutCreateBitmask") >>
                  (VkDescriptorSetLayoutCreateBitmask <$> step readPrec)))

-- | type = @enum@
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkDescriptorType VkDescriptorType registry at www.khronos.org>
newtype VkDescriptorType = VkDescriptorType Int32
                           deriving (Eq, Ord, Enum, Storable)

instance Show VkDescriptorType where
    showsPrec _ VK_DESCRIPTOR_TYPE_SAMPLER
      = showString "VK_DESCRIPTOR_TYPE_SAMPLER"
    showsPrec _ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
      = showString "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"
    showsPrec _ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
      = showString "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE"
    showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
      = showString "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE"
    showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
      = showString "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"
    showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
      = showString "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"
    showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
      = showString "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER"
    showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
      = showString "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER"
    showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
      = showString "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"
    showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
      = showString "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
    showsPrec _ VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
      = showString "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
    showsPrec p (VkDescriptorType x)
      = showParen (p >= 11)
          (showString "VkDescriptorType " . showsPrec 11 x)

instance Read VkDescriptorType where
    readPrec
      = parens
          (choose
             [("VK_DESCRIPTOR_TYPE_SAMPLER", pure VK_DESCRIPTOR_TYPE_SAMPLER),
              ("VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER",
               pure VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER),
              ("VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE",
               pure VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE),
              ("VK_DESCRIPTOR_TYPE_STORAGE_IMAGE",
               pure VK_DESCRIPTOR_TYPE_STORAGE_IMAGE),
              ("VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER",
               pure VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER),
              ("VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER",
               pure VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER),
              ("VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER",
               pure VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER),
              ("VK_DESCRIPTOR_TYPE_STORAGE_BUFFER",
               pure VK_DESCRIPTOR_TYPE_STORAGE_BUFFER),
              ("VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC",
               pure VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC),
              ("VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC",
               pure VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC),
              ("VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT",
               pure VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT)]
             +++
             prec 10
               (expectP (Ident "VkDescriptorType") >>
                  (VkDescriptorType <$> step readPrec)))

pattern VK_DESCRIPTOR_TYPE_SAMPLER :: VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_SAMPLER = VkDescriptorType 0

pattern VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER ::
        VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER =
        VkDescriptorType 1

pattern VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE :: VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = VkDescriptorType 2

pattern VK_DESCRIPTOR_TYPE_STORAGE_IMAGE :: VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = VkDescriptorType 3

pattern VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER :: VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER =
        VkDescriptorType 4

pattern VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER :: VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER =
        VkDescriptorType 5

pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER :: VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = VkDescriptorType 6

pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER :: VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = VkDescriptorType 7

pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC ::
        VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC =
        VkDescriptorType 8

pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC ::
        VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC =
        VkDescriptorType 9

pattern VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT :: VkDescriptorType

pattern VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = VkDescriptorType 10

-- | type = @enum@
--
--   <https://www.khronos.org/registry/vulkan/specs/1.1-extensions/html/vkspec.html#VkDescriptorUpdateTemplateType VkDescriptorUpdateTemplateType registry at www.khronos.org>
newtype VkDescriptorUpdateTemplateType = VkDescriptorUpdateTemplateType Int32
                                         deriving (Eq, Ord, Enum, Storable)

instance Show VkDescriptorUpdateTemplateType where
    showsPrec _ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET
      = showString "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"
    showsPrec p (VkDescriptorUpdateTemplateType x)
      = showParen (p >= 11)
          (showString "VkDescriptorUpdateTemplateType " . showsPrec 11 x)

instance Read VkDescriptorUpdateTemplateType where
    readPrec
      = parens
          (choose
             [("VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET",
               pure VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)]
             +++
             prec 10
               (expectP (Ident "VkDescriptorUpdateTemplateType") >>
                  (VkDescriptorUpdateTemplateType <$> step readPrec)))

-- | Create descriptor update template for descriptor set updates
pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET ::
        VkDescriptorUpdateTemplateType

pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET =
        VkDescriptorUpdateTemplateType 0

newtype VkDescriptorUpdateTemplateTypeKHR = VkDescriptorUpdateTemplateTypeKHR VkFlags
                                            deriving (Eq, Ord, Enum, Bits, FiniteBits, Storable)

instance Show VkDescriptorUpdateTemplateTypeKHR where
    {-# INLINE showsPrec #-}
    showsPrec = coerce (showsPrec :: Int -> VkFlags -> ShowS)

instance Read VkDescriptorUpdateTemplateTypeKHR where
    {-# INLINE readsPrec #-}
    readsPrec = coerce (readsPrec :: Int -> ReadS VkFlags)