{-# language CPP #-}
-- No documentation found for Chapter "ToolPurposeFlagBits"
module Vulkan.Core13.Enums.ToolPurposeFlagBits  ( pattern TOOL_PURPOSE_VALIDATION_BIT_EXT
                                                , pattern TOOL_PURPOSE_PROFILING_BIT_EXT
                                                , pattern TOOL_PURPOSE_TRACING_BIT_EXT
                                                , pattern TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT
                                                , pattern TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT
                                                , ToolPurposeFlags
                                                , ToolPurposeFlagBits( TOOL_PURPOSE_VALIDATION_BIT
                                                                     , TOOL_PURPOSE_PROFILING_BIT
                                                                     , TOOL_PURPOSE_TRACING_BIT
                                                                     , TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT
                                                                     , TOOL_PURPOSE_MODIFYING_FEATURES_BIT
                                                                     , TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT
                                                                     , TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT
                                                                     , ..
                                                                     )
                                                ) where

import Data.Bits (Bits)
import Data.Bits (FiniteBits)
import Vulkan.Internal.Utils (enumReadPrec)
import Vulkan.Internal.Utils (enumShowsPrec)
import GHC.Show (showString)
import Numeric (showHex)
import Vulkan.Zero (Zero)
import Foreign.Storable (Storable)
import GHC.Read (Read(readPrec))
import GHC.Show (Show(showsPrec))
import Vulkan.Core10.FundamentalTypes (Flags)
-- No documentation found for TopLevel "VK_TOOL_PURPOSE_VALIDATION_BIT_EXT"
pattern $bTOOL_PURPOSE_VALIDATION_BIT_EXT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_VALIDATION_BIT_EXT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_VALIDATION_BIT_EXT = TOOL_PURPOSE_VALIDATION_BIT


-- No documentation found for TopLevel "VK_TOOL_PURPOSE_PROFILING_BIT_EXT"
pattern $bTOOL_PURPOSE_PROFILING_BIT_EXT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_PROFILING_BIT_EXT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_PROFILING_BIT_EXT = TOOL_PURPOSE_PROFILING_BIT


-- No documentation found for TopLevel "VK_TOOL_PURPOSE_TRACING_BIT_EXT"
pattern $bTOOL_PURPOSE_TRACING_BIT_EXT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_TRACING_BIT_EXT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_TRACING_BIT_EXT = TOOL_PURPOSE_TRACING_BIT


-- No documentation found for TopLevel "VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT"
pattern $bTOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT


-- No documentation found for TopLevel "VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT"
pattern $bTOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = TOOL_PURPOSE_MODIFYING_FEATURES_BIT


type ToolPurposeFlags = ToolPurposeFlagBits

-- | VkToolPurposeFlagBits - Bitmask specifying the purposes of an active
-- tool
--
-- = See Also
--
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_EXT_tooling_info VK_EXT_tooling_info>,
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#VK_VERSION_1_3 VK_VERSION_1_3>,
-- 'ToolPurposeFlags'
newtype ToolPurposeFlagBits = ToolPurposeFlagBits Flags
  deriving newtype (ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
$c/= :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
== :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
$c== :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
Eq, Eq ToolPurposeFlagBits
ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
ToolPurposeFlagBits -> ToolPurposeFlagBits -> Ordering
ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
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 :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
$cmin :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
max :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
$cmax :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
>= :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
$c>= :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
> :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
$c> :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
<= :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
$c<= :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
< :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
$c< :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Bool
compare :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Ordering
$ccompare :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> Ordering
Ord, Ptr ToolPurposeFlagBits -> IO ToolPurposeFlagBits
Ptr ToolPurposeFlagBits -> Int -> IO ToolPurposeFlagBits
Ptr ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits -> IO ()
Ptr ToolPurposeFlagBits -> ToolPurposeFlagBits -> IO ()
ToolPurposeFlagBits -> Int
forall b. Ptr b -> Int -> IO ToolPurposeFlagBits
forall b. Ptr b -> Int -> ToolPurposeFlagBits -> 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 ToolPurposeFlagBits -> ToolPurposeFlagBits -> IO ()
$cpoke :: Ptr ToolPurposeFlagBits -> ToolPurposeFlagBits -> IO ()
peek :: Ptr ToolPurposeFlagBits -> IO ToolPurposeFlagBits
$cpeek :: Ptr ToolPurposeFlagBits -> IO ToolPurposeFlagBits
pokeByteOff :: forall b. Ptr b -> Int -> ToolPurposeFlagBits -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> ToolPurposeFlagBits -> IO ()
peekByteOff :: forall b. Ptr b -> Int -> IO ToolPurposeFlagBits
$cpeekByteOff :: forall b. Ptr b -> Int -> IO ToolPurposeFlagBits
pokeElemOff :: Ptr ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits -> IO ()
$cpokeElemOff :: Ptr ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits -> IO ()
peekElemOff :: Ptr ToolPurposeFlagBits -> Int -> IO ToolPurposeFlagBits
$cpeekElemOff :: Ptr ToolPurposeFlagBits -> Int -> IO ToolPurposeFlagBits
alignment :: ToolPurposeFlagBits -> Int
$calignment :: ToolPurposeFlagBits -> Int
sizeOf :: ToolPurposeFlagBits -> Int
$csizeOf :: ToolPurposeFlagBits -> Int
Storable, ToolPurposeFlagBits
forall a. a -> Zero a
zero :: ToolPurposeFlagBits
$czero :: ToolPurposeFlagBits
Zero, Eq ToolPurposeFlagBits
ToolPurposeFlagBits
Int -> ToolPurposeFlagBits
ToolPurposeFlagBits -> Bool
ToolPurposeFlagBits -> Int
ToolPurposeFlagBits -> Maybe Int
ToolPurposeFlagBits -> ToolPurposeFlagBits
ToolPurposeFlagBits -> Int -> Bool
ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
forall a.
Eq a
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a -> a)
-> (a -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> a
-> (Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> Bool)
-> (a -> Maybe Int)
-> (a -> Int)
-> (a -> Bool)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int -> a)
-> (a -> Int)
-> Bits a
popCount :: ToolPurposeFlagBits -> Int
$cpopCount :: ToolPurposeFlagBits -> Int
rotateR :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$crotateR :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
rotateL :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$crotateL :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
unsafeShiftR :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$cunsafeShiftR :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
shiftR :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$cshiftR :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
unsafeShiftL :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$cunsafeShiftL :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
shiftL :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$cshiftL :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
isSigned :: ToolPurposeFlagBits -> Bool
$cisSigned :: ToolPurposeFlagBits -> Bool
bitSize :: ToolPurposeFlagBits -> Int
$cbitSize :: ToolPurposeFlagBits -> Int
bitSizeMaybe :: ToolPurposeFlagBits -> Maybe Int
$cbitSizeMaybe :: ToolPurposeFlagBits -> Maybe Int
testBit :: ToolPurposeFlagBits -> Int -> Bool
$ctestBit :: ToolPurposeFlagBits -> Int -> Bool
complementBit :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$ccomplementBit :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
clearBit :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$cclearBit :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
setBit :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$csetBit :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
bit :: Int -> ToolPurposeFlagBits
$cbit :: Int -> ToolPurposeFlagBits
zeroBits :: ToolPurposeFlagBits
$czeroBits :: ToolPurposeFlagBits
rotate :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$crotate :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
shift :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
$cshift :: ToolPurposeFlagBits -> Int -> ToolPurposeFlagBits
complement :: ToolPurposeFlagBits -> ToolPurposeFlagBits
$ccomplement :: ToolPurposeFlagBits -> ToolPurposeFlagBits
xor :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
$cxor :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
.|. :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
$c.|. :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
.&. :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
$c.&. :: ToolPurposeFlagBits -> ToolPurposeFlagBits -> ToolPurposeFlagBits
Bits, Bits ToolPurposeFlagBits
ToolPurposeFlagBits -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: ToolPurposeFlagBits -> Int
$ccountTrailingZeros :: ToolPurposeFlagBits -> Int
countLeadingZeros :: ToolPurposeFlagBits -> Int
$ccountLeadingZeros :: ToolPurposeFlagBits -> Int
finiteBitSize :: ToolPurposeFlagBits -> Int
$cfiniteBitSize :: ToolPurposeFlagBits -> Int
FiniteBits)

-- | 'TOOL_PURPOSE_VALIDATION_BIT' specifies that the tool provides
-- validation of API usage.
pattern $bTOOL_PURPOSE_VALIDATION_BIT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_VALIDATION_BIT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_VALIDATION_BIT = ToolPurposeFlagBits 0x00000001

-- | 'TOOL_PURPOSE_PROFILING_BIT' specifies that the tool provides profiling
-- of API usage.
pattern $bTOOL_PURPOSE_PROFILING_BIT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_PROFILING_BIT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_PROFILING_BIT = ToolPurposeFlagBits 0x00000002

-- | 'TOOL_PURPOSE_TRACING_BIT' specifies that the tool is capturing data
-- about the application’s API usage, including anything from simple
-- logging to capturing data for later replay.
pattern $bTOOL_PURPOSE_TRACING_BIT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_TRACING_BIT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_TRACING_BIT = ToolPurposeFlagBits 0x00000004

-- | 'TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT' specifies that the tool provides
-- additional API features\/extensions on top of the underlying
-- implementation.
pattern $bTOOL_PURPOSE_ADDITIONAL_FEATURES_BIT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_ADDITIONAL_FEATURES_BIT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT = ToolPurposeFlagBits 0x00000008

-- | 'TOOL_PURPOSE_MODIFYING_FEATURES_BIT' specifies that the tool modifies
-- the API features\/limits\/extensions presented to the application.
pattern $bTOOL_PURPOSE_MODIFYING_FEATURES_BIT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_MODIFYING_FEATURES_BIT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_MODIFYING_FEATURES_BIT = ToolPurposeFlagBits 0x00000010

-- | 'TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT' specifies that the tool consumes
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#debugging-debug-markers debug markers>
-- or
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#debugging-object-debug-annotation object debug annotation>,
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#debugging-queue-labels queue labels>,
-- or
-- <https://registry.khronos.org/vulkan/specs/1.3-extensions/html/vkspec.html#debugging-command-buffer-labels command buffer labels>
pattern $bTOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = ToolPurposeFlagBits 0x00000040

-- | 'TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT' specifies that the tool reports
-- additional information to the application via callbacks specified by
-- 'Vulkan.Extensions.VK_EXT_debug_report.createDebugReportCallbackEXT' or
-- 'Vulkan.Extensions.VK_EXT_debug_utils.createDebugUtilsMessengerEXT'
pattern $bTOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT :: ToolPurposeFlagBits
$mTOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT :: forall {r}.
ToolPurposeFlagBits -> ((# #) -> r) -> ((# #) -> r) -> r
TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = ToolPurposeFlagBits 0x00000020

conNameToolPurposeFlagBits :: String
conNameToolPurposeFlagBits :: String
conNameToolPurposeFlagBits = String
"ToolPurposeFlagBits"

enumPrefixToolPurposeFlagBits :: String
enumPrefixToolPurposeFlagBits :: String
enumPrefixToolPurposeFlagBits = String
"TOOL_PURPOSE_"

showTableToolPurposeFlagBits :: [(ToolPurposeFlagBits, String)]
showTableToolPurposeFlagBits :: [(ToolPurposeFlagBits, String)]
showTableToolPurposeFlagBits =
  [ (ToolPurposeFlagBits
TOOL_PURPOSE_VALIDATION_BIT, String
"VALIDATION_BIT")
  , (ToolPurposeFlagBits
TOOL_PURPOSE_PROFILING_BIT, String
"PROFILING_BIT")
  , (ToolPurposeFlagBits
TOOL_PURPOSE_TRACING_BIT, String
"TRACING_BIT")
  ,
    ( ToolPurposeFlagBits
TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT
    , String
"ADDITIONAL_FEATURES_BIT"
    )
  ,
    ( ToolPurposeFlagBits
TOOL_PURPOSE_MODIFYING_FEATURES_BIT
    , String
"MODIFYING_FEATURES_BIT"
    )
  ,
    ( ToolPurposeFlagBits
TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT
    , String
"DEBUG_MARKERS_BIT_EXT"
    )
  ,
    ( ToolPurposeFlagBits
TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT
    , String
"DEBUG_REPORTING_BIT_EXT"
    )
  ]

instance Show ToolPurposeFlagBits where
  showsPrec :: Int -> ToolPurposeFlagBits -> ShowS
showsPrec =
    forall a i.
Eq a =>
String
-> [(a, String)]
-> String
-> (a -> i)
-> (i -> ShowS)
-> Int
-> a
-> ShowS
enumShowsPrec
      String
enumPrefixToolPurposeFlagBits
      [(ToolPurposeFlagBits, String)]
showTableToolPurposeFlagBits
      String
conNameToolPurposeFlagBits
      (\(ToolPurposeFlagBits Flags
x) -> Flags
x)
      (\Flags
x -> String -> ShowS
showString String
"0x" forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a. (Integral a, Show a) => a -> ShowS
showHex Flags
x)

instance Read ToolPurposeFlagBits where
  readPrec :: ReadPrec ToolPurposeFlagBits
readPrec =
    forall i a.
Read i =>
String -> [(a, String)] -> String -> (i -> a) -> ReadPrec a
enumReadPrec
      String
enumPrefixToolPurposeFlagBits
      [(ToolPurposeFlagBits, String)]
showTableToolPurposeFlagBits
      String
conNameToolPurposeFlagBits
      Flags -> ToolPurposeFlagBits
ToolPurposeFlagBits