{-# 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.Shader
       (VkShaderInfoTypeAMD(VkShaderInfoTypeAMD,
                            VK_SHADER_INFO_TYPE_STATISTICS_AMD, VK_SHADER_INFO_TYPE_BINARY_AMD,
                            VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD),
        VkShaderStageBitmask(VkShaderStageBitmask, VkShaderStageFlags,
                             VkShaderStageFlagBits, VK_SHADER_STAGE_VERTEX_BIT,
                             VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
                             VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
                             VK_SHADER_STAGE_GEOMETRY_BIT, VK_SHADER_STAGE_FRAGMENT_BIT,
                             VK_SHADER_STAGE_COMPUTE_BIT, VK_SHADER_STAGE_ALL_GRAPHICS,
                             VK_SHADER_STAGE_ALL),
        VkShaderStageFlags, VkShaderStageFlagBits)
       where
import Data.Bits                       (Bits, FiniteBits)
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 (..))

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

instance Show VkShaderInfoTypeAMD where
    showsPrec _ VK_SHADER_INFO_TYPE_STATISTICS_AMD
      = showString "VK_SHADER_INFO_TYPE_STATISTICS_AMD"
    showsPrec _ VK_SHADER_INFO_TYPE_BINARY_AMD
      = showString "VK_SHADER_INFO_TYPE_BINARY_AMD"
    showsPrec _ VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD
      = showString "VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD"
    showsPrec p (VkShaderInfoTypeAMD x)
      = showParen (p >= 11)
          (showString "VkShaderInfoTypeAMD " . showsPrec 11 x)

instance Read VkShaderInfoTypeAMD where
    readPrec
      = parens
          (choose
             [("VK_SHADER_INFO_TYPE_STATISTICS_AMD",
               pure VK_SHADER_INFO_TYPE_STATISTICS_AMD),
              ("VK_SHADER_INFO_TYPE_BINARY_AMD",
               pure VK_SHADER_INFO_TYPE_BINARY_AMD),
              ("VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD",
               pure VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD)]
             +++
             prec 10
               (expectP (Ident "VkShaderInfoTypeAMD") >>
                  (VkShaderInfoTypeAMD <$> step readPrec)))

pattern VK_SHADER_INFO_TYPE_STATISTICS_AMD :: VkShaderInfoTypeAMD

pattern VK_SHADER_INFO_TYPE_STATISTICS_AMD = VkShaderInfoTypeAMD 0

pattern VK_SHADER_INFO_TYPE_BINARY_AMD :: VkShaderInfoTypeAMD

pattern VK_SHADER_INFO_TYPE_BINARY_AMD = VkShaderInfoTypeAMD 1

pattern VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD :: VkShaderInfoTypeAMD

pattern VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = VkShaderInfoTypeAMD 2

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

type VkShaderStageFlags = VkShaderStageBitmask FlagMask

type VkShaderStageFlagBits = VkShaderStageBitmask FlagBit

pattern VkShaderStageFlagBits ::
        VkFlags -> VkShaderStageBitmask FlagBit

pattern VkShaderStageFlagBits n = VkShaderStageBitmask n

pattern VkShaderStageFlags ::
        VkFlags -> VkShaderStageBitmask FlagMask

pattern VkShaderStageFlags n = VkShaderStageBitmask n

deriving instance Bits (VkShaderStageBitmask FlagMask)

deriving instance FiniteBits (VkShaderStageBitmask FlagMask)

instance Show (VkShaderStageBitmask a) where
    showsPrec _ VK_SHADER_STAGE_VERTEX_BIT
      = showString "VK_SHADER_STAGE_VERTEX_BIT"
    showsPrec _ VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
      = showString "VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"
    showsPrec _ VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
      = showString "VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"
    showsPrec _ VK_SHADER_STAGE_GEOMETRY_BIT
      = showString "VK_SHADER_STAGE_GEOMETRY_BIT"
    showsPrec _ VK_SHADER_STAGE_FRAGMENT_BIT
      = showString "VK_SHADER_STAGE_FRAGMENT_BIT"
    showsPrec _ VK_SHADER_STAGE_COMPUTE_BIT
      = showString "VK_SHADER_STAGE_COMPUTE_BIT"
    showsPrec _ VK_SHADER_STAGE_ALL_GRAPHICS
      = showString "VK_SHADER_STAGE_ALL_GRAPHICS"
    showsPrec _ VK_SHADER_STAGE_ALL = showString "VK_SHADER_STAGE_ALL"
    showsPrec p (VkShaderStageBitmask x)
      = showParen (p >= 11)
          (showString "VkShaderStageBitmask " . showsPrec 11 x)

instance Read (VkShaderStageBitmask a) where
    readPrec
      = parens
          (choose
             [("VK_SHADER_STAGE_VERTEX_BIT", pure VK_SHADER_STAGE_VERTEX_BIT),
              ("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT",
               pure VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT),
              ("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT",
               pure VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT),
              ("VK_SHADER_STAGE_GEOMETRY_BIT",
               pure VK_SHADER_STAGE_GEOMETRY_BIT),
              ("VK_SHADER_STAGE_FRAGMENT_BIT",
               pure VK_SHADER_STAGE_FRAGMENT_BIT),
              ("VK_SHADER_STAGE_COMPUTE_BIT", pure VK_SHADER_STAGE_COMPUTE_BIT),
              ("VK_SHADER_STAGE_ALL_GRAPHICS",
               pure VK_SHADER_STAGE_ALL_GRAPHICS),
              ("VK_SHADER_STAGE_ALL", pure VK_SHADER_STAGE_ALL)]
             +++
             prec 10
               (expectP (Ident "VkShaderStageBitmask") >>
                  (VkShaderStageBitmask <$> step readPrec)))

-- | bitpos = @0@
pattern VK_SHADER_STAGE_VERTEX_BIT :: VkShaderStageBitmask a

pattern VK_SHADER_STAGE_VERTEX_BIT = VkShaderStageBitmask 1

-- | bitpos = @1@
pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT ::
        VkShaderStageBitmask a

pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT =
        VkShaderStageBitmask 2

-- | bitpos = @2@
pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT ::
        VkShaderStageBitmask a

pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT =
        VkShaderStageBitmask 4

-- | bitpos = @3@
pattern VK_SHADER_STAGE_GEOMETRY_BIT :: VkShaderStageBitmask a

pattern VK_SHADER_STAGE_GEOMETRY_BIT = VkShaderStageBitmask 8

-- | bitpos = @4@
pattern VK_SHADER_STAGE_FRAGMENT_BIT :: VkShaderStageBitmask a

pattern VK_SHADER_STAGE_FRAGMENT_BIT = VkShaderStageBitmask 16

-- | bitpos = @5@
pattern VK_SHADER_STAGE_COMPUTE_BIT :: VkShaderStageBitmask a

pattern VK_SHADER_STAGE_COMPUTE_BIT = VkShaderStageBitmask 32

pattern VK_SHADER_STAGE_ALL_GRAPHICS :: VkShaderStageBitmask a

pattern VK_SHADER_STAGE_ALL_GRAPHICS = VkShaderStageBitmask 31

pattern VK_SHADER_STAGE_ALL :: VkShaderStageBitmask a

pattern VK_SHADER_STAGE_ALL = VkShaderStageBitmask 2147483647