{-# OPTIONS_HADDOCK ignore-exports#-}
{-# LANGUAGE DataKinds                  #-}
{-# LANGUAGE DeriveDataTypeable         #-}
{-# LANGUAGE DeriveGeneric              #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE PatternSynonyms            #-}
{-# LANGUAGE Strict                     #-}
module Graphics.Vulkan.Types.Enum.VkObjectType
       (VkObjectType(VkObjectType, VK_OBJECT_TYPE_UNKNOWN,
                     VK_OBJECT_TYPE_INSTANCE, VK_OBJECT_TYPE_PHYSICAL_DEVICE,
                     VK_OBJECT_TYPE_DEVICE, VK_OBJECT_TYPE_QUEUE,
                     VK_OBJECT_TYPE_SEMAPHORE, VK_OBJECT_TYPE_COMMAND_BUFFER,
                     VK_OBJECT_TYPE_FENCE, VK_OBJECT_TYPE_DEVICE_MEMORY,
                     VK_OBJECT_TYPE_BUFFER, VK_OBJECT_TYPE_IMAGE, VK_OBJECT_TYPE_EVENT,
                     VK_OBJECT_TYPE_QUERY_POOL, VK_OBJECT_TYPE_BUFFER_VIEW,
                     VK_OBJECT_TYPE_IMAGE_VIEW, VK_OBJECT_TYPE_SHADER_MODULE,
                     VK_OBJECT_TYPE_PIPELINE_CACHE, VK_OBJECT_TYPE_PIPELINE_LAYOUT,
                     VK_OBJECT_TYPE_RENDER_PASS, VK_OBJECT_TYPE_PIPELINE,
                     VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT, VK_OBJECT_TYPE_SAMPLER,
                     VK_OBJECT_TYPE_DESCRIPTOR_POOL, VK_OBJECT_TYPE_DESCRIPTOR_SET,
                     VK_OBJECT_TYPE_FRAMEBUFFER, VK_OBJECT_TYPE_COMMAND_POOL))
       where
import           Data.Data                       (Data)
import           Foreign.Storable                (Storable)
import           GHC.Generics                    (Generic)
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 (..))

-- | Enums to track objects of various types
--
--   type = @enum@
--
--
--   <https://www.khronos.org/registry/vulkan/specs/1.0-extensions/man/html/VkObjectType.html VkObjectType registry at www.khronos.org>
newtype VkObjectType = VkObjectType Int32
                         deriving (Eq, Ord, Num, Bounded, Storable, Enum, Data, Generic)

instance Show VkObjectType where
        showsPrec _ VK_OBJECT_TYPE_UNKNOWN
          = showString "VK_OBJECT_TYPE_UNKNOWN"
        showsPrec _ VK_OBJECT_TYPE_INSTANCE
          = showString "VK_OBJECT_TYPE_INSTANCE"
        showsPrec _ VK_OBJECT_TYPE_PHYSICAL_DEVICE
          = showString "VK_OBJECT_TYPE_PHYSICAL_DEVICE"
        showsPrec _ VK_OBJECT_TYPE_DEVICE
          = showString "VK_OBJECT_TYPE_DEVICE"
        showsPrec _ VK_OBJECT_TYPE_QUEUE
          = showString "VK_OBJECT_TYPE_QUEUE"
        showsPrec _ VK_OBJECT_TYPE_SEMAPHORE
          = showString "VK_OBJECT_TYPE_SEMAPHORE"
        showsPrec _ VK_OBJECT_TYPE_COMMAND_BUFFER
          = showString "VK_OBJECT_TYPE_COMMAND_BUFFER"
        showsPrec _ VK_OBJECT_TYPE_FENCE
          = showString "VK_OBJECT_TYPE_FENCE"
        showsPrec _ VK_OBJECT_TYPE_DEVICE_MEMORY
          = showString "VK_OBJECT_TYPE_DEVICE_MEMORY"
        showsPrec _ VK_OBJECT_TYPE_BUFFER
          = showString "VK_OBJECT_TYPE_BUFFER"
        showsPrec _ VK_OBJECT_TYPE_IMAGE
          = showString "VK_OBJECT_TYPE_IMAGE"
        showsPrec _ VK_OBJECT_TYPE_EVENT
          = showString "VK_OBJECT_TYPE_EVENT"
        showsPrec _ VK_OBJECT_TYPE_QUERY_POOL
          = showString "VK_OBJECT_TYPE_QUERY_POOL"
        showsPrec _ VK_OBJECT_TYPE_BUFFER_VIEW
          = showString "VK_OBJECT_TYPE_BUFFER_VIEW"
        showsPrec _ VK_OBJECT_TYPE_IMAGE_VIEW
          = showString "VK_OBJECT_TYPE_IMAGE_VIEW"
        showsPrec _ VK_OBJECT_TYPE_SHADER_MODULE
          = showString "VK_OBJECT_TYPE_SHADER_MODULE"
        showsPrec _ VK_OBJECT_TYPE_PIPELINE_CACHE
          = showString "VK_OBJECT_TYPE_PIPELINE_CACHE"
        showsPrec _ VK_OBJECT_TYPE_PIPELINE_LAYOUT
          = showString "VK_OBJECT_TYPE_PIPELINE_LAYOUT"
        showsPrec _ VK_OBJECT_TYPE_RENDER_PASS
          = showString "VK_OBJECT_TYPE_RENDER_PASS"
        showsPrec _ VK_OBJECT_TYPE_PIPELINE
          = showString "VK_OBJECT_TYPE_PIPELINE"
        showsPrec _ VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT
          = showString "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"
        showsPrec _ VK_OBJECT_TYPE_SAMPLER
          = showString "VK_OBJECT_TYPE_SAMPLER"
        showsPrec _ VK_OBJECT_TYPE_DESCRIPTOR_POOL
          = showString "VK_OBJECT_TYPE_DESCRIPTOR_POOL"
        showsPrec _ VK_OBJECT_TYPE_DESCRIPTOR_SET
          = showString "VK_OBJECT_TYPE_DESCRIPTOR_SET"
        showsPrec _ VK_OBJECT_TYPE_FRAMEBUFFER
          = showString "VK_OBJECT_TYPE_FRAMEBUFFER"
        showsPrec _ VK_OBJECT_TYPE_COMMAND_POOL
          = showString "VK_OBJECT_TYPE_COMMAND_POOL"
        showsPrec p (VkObjectType x)
          = showParen (p >= 11) (showString "VkObjectType " . showsPrec 11 x)

instance Read VkObjectType where
        readPrec
          = parens
              (choose
                 [("VK_OBJECT_TYPE_UNKNOWN", pure VK_OBJECT_TYPE_UNKNOWN),
                  ("VK_OBJECT_TYPE_INSTANCE", pure VK_OBJECT_TYPE_INSTANCE),
                  ("VK_OBJECT_TYPE_PHYSICAL_DEVICE",
                   pure VK_OBJECT_TYPE_PHYSICAL_DEVICE),
                  ("VK_OBJECT_TYPE_DEVICE", pure VK_OBJECT_TYPE_DEVICE),
                  ("VK_OBJECT_TYPE_QUEUE", pure VK_OBJECT_TYPE_QUEUE),
                  ("VK_OBJECT_TYPE_SEMAPHORE", pure VK_OBJECT_TYPE_SEMAPHORE),
                  ("VK_OBJECT_TYPE_COMMAND_BUFFER",
                   pure VK_OBJECT_TYPE_COMMAND_BUFFER),
                  ("VK_OBJECT_TYPE_FENCE", pure VK_OBJECT_TYPE_FENCE),
                  ("VK_OBJECT_TYPE_DEVICE_MEMORY",
                   pure VK_OBJECT_TYPE_DEVICE_MEMORY),
                  ("VK_OBJECT_TYPE_BUFFER", pure VK_OBJECT_TYPE_BUFFER),
                  ("VK_OBJECT_TYPE_IMAGE", pure VK_OBJECT_TYPE_IMAGE),
                  ("VK_OBJECT_TYPE_EVENT", pure VK_OBJECT_TYPE_EVENT),
                  ("VK_OBJECT_TYPE_QUERY_POOL", pure VK_OBJECT_TYPE_QUERY_POOL),
                  ("VK_OBJECT_TYPE_BUFFER_VIEW", pure VK_OBJECT_TYPE_BUFFER_VIEW),
                  ("VK_OBJECT_TYPE_IMAGE_VIEW", pure VK_OBJECT_TYPE_IMAGE_VIEW),
                  ("VK_OBJECT_TYPE_SHADER_MODULE",
                   pure VK_OBJECT_TYPE_SHADER_MODULE),
                  ("VK_OBJECT_TYPE_PIPELINE_CACHE",
                   pure VK_OBJECT_TYPE_PIPELINE_CACHE),
                  ("VK_OBJECT_TYPE_PIPELINE_LAYOUT",
                   pure VK_OBJECT_TYPE_PIPELINE_LAYOUT),
                  ("VK_OBJECT_TYPE_RENDER_PASS", pure VK_OBJECT_TYPE_RENDER_PASS),
                  ("VK_OBJECT_TYPE_PIPELINE", pure VK_OBJECT_TYPE_PIPELINE),
                  ("VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT",
                   pure VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT),
                  ("VK_OBJECT_TYPE_SAMPLER", pure VK_OBJECT_TYPE_SAMPLER),
                  ("VK_OBJECT_TYPE_DESCRIPTOR_POOL",
                   pure VK_OBJECT_TYPE_DESCRIPTOR_POOL),
                  ("VK_OBJECT_TYPE_DESCRIPTOR_SET",
                   pure VK_OBJECT_TYPE_DESCRIPTOR_SET),
                  ("VK_OBJECT_TYPE_FRAMEBUFFER", pure VK_OBJECT_TYPE_FRAMEBUFFER),
                  ("VK_OBJECT_TYPE_COMMAND_POOL", pure VK_OBJECT_TYPE_COMMAND_POOL)]
                 +++
                 prec 10
                   (expectP (Ident "VkObjectType") >>
                      (VkObjectType <$> step readPrec)))

pattern VK_OBJECT_TYPE_UNKNOWN :: VkObjectType

pattern VK_OBJECT_TYPE_UNKNOWN = VkObjectType 0

-- | VkInstance
pattern VK_OBJECT_TYPE_INSTANCE :: VkObjectType

pattern VK_OBJECT_TYPE_INSTANCE = VkObjectType 1

-- | VkPhysicalDevice
pattern VK_OBJECT_TYPE_PHYSICAL_DEVICE :: VkObjectType

pattern VK_OBJECT_TYPE_PHYSICAL_DEVICE = VkObjectType 2

-- | VkDevice
pattern VK_OBJECT_TYPE_DEVICE :: VkObjectType

pattern VK_OBJECT_TYPE_DEVICE = VkObjectType 3

-- | VkQueue
pattern VK_OBJECT_TYPE_QUEUE :: VkObjectType

pattern VK_OBJECT_TYPE_QUEUE = VkObjectType 4

-- | VkSemaphore
pattern VK_OBJECT_TYPE_SEMAPHORE :: VkObjectType

pattern VK_OBJECT_TYPE_SEMAPHORE = VkObjectType 5

-- | VkCommandBuffer
pattern VK_OBJECT_TYPE_COMMAND_BUFFER :: VkObjectType

pattern VK_OBJECT_TYPE_COMMAND_BUFFER = VkObjectType 6

-- | VkFence
pattern VK_OBJECT_TYPE_FENCE :: VkObjectType

pattern VK_OBJECT_TYPE_FENCE = VkObjectType 7

-- | VkDeviceMemory
pattern VK_OBJECT_TYPE_DEVICE_MEMORY :: VkObjectType

pattern VK_OBJECT_TYPE_DEVICE_MEMORY = VkObjectType 8

-- | VkBuffer
pattern VK_OBJECT_TYPE_BUFFER :: VkObjectType

pattern VK_OBJECT_TYPE_BUFFER = VkObjectType 9

-- | VkImage
pattern VK_OBJECT_TYPE_IMAGE :: VkObjectType

pattern VK_OBJECT_TYPE_IMAGE = VkObjectType 10

-- | VkEvent
pattern VK_OBJECT_TYPE_EVENT :: VkObjectType

pattern VK_OBJECT_TYPE_EVENT = VkObjectType 11

-- | VkQueryPool
pattern VK_OBJECT_TYPE_QUERY_POOL :: VkObjectType

pattern VK_OBJECT_TYPE_QUERY_POOL = VkObjectType 12

-- | VkBufferView
pattern VK_OBJECT_TYPE_BUFFER_VIEW :: VkObjectType

pattern VK_OBJECT_TYPE_BUFFER_VIEW = VkObjectType 13

-- | VkImageView
pattern VK_OBJECT_TYPE_IMAGE_VIEW :: VkObjectType

pattern VK_OBJECT_TYPE_IMAGE_VIEW = VkObjectType 14

-- | VkShaderModule
pattern VK_OBJECT_TYPE_SHADER_MODULE :: VkObjectType

pattern VK_OBJECT_TYPE_SHADER_MODULE = VkObjectType 15

-- | VkPipelineCache
pattern VK_OBJECT_TYPE_PIPELINE_CACHE :: VkObjectType

pattern VK_OBJECT_TYPE_PIPELINE_CACHE = VkObjectType 16

-- | VkPipelineLayout
pattern VK_OBJECT_TYPE_PIPELINE_LAYOUT :: VkObjectType

pattern VK_OBJECT_TYPE_PIPELINE_LAYOUT = VkObjectType 17

-- | VkRenderPass
pattern VK_OBJECT_TYPE_RENDER_PASS :: VkObjectType

pattern VK_OBJECT_TYPE_RENDER_PASS = VkObjectType 18

-- | VkPipeline
pattern VK_OBJECT_TYPE_PIPELINE :: VkObjectType

pattern VK_OBJECT_TYPE_PIPELINE = VkObjectType 19

-- | VkDescriptorSetLayout
pattern VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT :: VkObjectType

pattern VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = VkObjectType 20

-- | VkSampler
pattern VK_OBJECT_TYPE_SAMPLER :: VkObjectType

pattern VK_OBJECT_TYPE_SAMPLER = VkObjectType 21

-- | VkDescriptorPool
pattern VK_OBJECT_TYPE_DESCRIPTOR_POOL :: VkObjectType

pattern VK_OBJECT_TYPE_DESCRIPTOR_POOL = VkObjectType 22

-- | VkDescriptorSet
pattern VK_OBJECT_TYPE_DESCRIPTOR_SET :: VkObjectType

pattern VK_OBJECT_TYPE_DESCRIPTOR_SET = VkObjectType 23

-- | VkFramebuffer
pattern VK_OBJECT_TYPE_FRAMEBUFFER :: VkObjectType

pattern VK_OBJECT_TYPE_FRAMEBUFFER = VkObjectType 24

-- | VkCommandPool
pattern VK_OBJECT_TYPE_COMMAND_POOL :: VkObjectType

pattern VK_OBJECT_TYPE_COMMAND_POOL = VkObjectType 25