{-# language CPP #-}
module Vulkan.Core10.Enums.BufferUsageFlagBits  ( BufferUsageFlagBits( BUFFER_USAGE_TRANSFER_SRC_BIT
                                                                     , BUFFER_USAGE_TRANSFER_DST_BIT
                                                                     , BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
                                                                     , BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
                                                                     , BUFFER_USAGE_UNIFORM_BUFFER_BIT
                                                                     , BUFFER_USAGE_STORAGE_BUFFER_BIT
                                                                     , BUFFER_USAGE_INDEX_BUFFER_BIT
                                                                     , BUFFER_USAGE_VERTEX_BUFFER_BIT
                                                                     , BUFFER_USAGE_INDIRECT_BUFFER_BIT
                                                                     , BUFFER_USAGE_RAY_TRACING_BIT_KHR
                                                                     , BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT
                                                                     , BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT
                                                                     , BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT
                                                                     , BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT
                                                                     , ..
                                                                     )
                                                , BufferUsageFlags
                                                ) where

import GHC.Read (choose)
import GHC.Read (expectP)
import GHC.Read (parens)
import GHC.Show (showParen)
import GHC.Show (showString)
import Numeric (showHex)
import Text.ParserCombinators.ReadPrec ((+++))
import Text.ParserCombinators.ReadPrec (prec)
import Text.ParserCombinators.ReadPrec (step)
import Data.Bits (Bits)
import Foreign.Storable (Storable)
import GHC.Read (Read(readPrec))
import Text.Read.Lex (Lexeme(Ident))
import Vulkan.Core10.FundamentalTypes (Flags)
import Vulkan.Zero (Zero)
-- | VkBufferUsageFlagBits - Bitmask specifying allowed usage of a buffer
--
-- = See Also
--
-- 'BufferUsageFlags'
newtype BufferUsageFlagBits = BufferUsageFlagBits Flags
  deriving newtype (BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
(BufferUsageFlagBits -> BufferUsageFlagBits -> Bool)
-> (BufferUsageFlagBits -> BufferUsageFlagBits -> Bool)
-> Eq BufferUsageFlagBits
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
$c/= :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
== :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
$c== :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
Eq, Eq BufferUsageFlagBits
Eq BufferUsageFlagBits =>
(BufferUsageFlagBits -> BufferUsageFlagBits -> Ordering)
-> (BufferUsageFlagBits -> BufferUsageFlagBits -> Bool)
-> (BufferUsageFlagBits -> BufferUsageFlagBits -> Bool)
-> (BufferUsageFlagBits -> BufferUsageFlagBits -> Bool)
-> (BufferUsageFlagBits -> BufferUsageFlagBits -> Bool)
-> (BufferUsageFlagBits
    -> BufferUsageFlagBits -> BufferUsageFlagBits)
-> (BufferUsageFlagBits
    -> BufferUsageFlagBits -> BufferUsageFlagBits)
-> Ord BufferUsageFlagBits
BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
BufferUsageFlagBits -> BufferUsageFlagBits -> Ordering
BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
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 :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
$cmin :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
max :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
$cmax :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
>= :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
$c>= :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
> :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
$c> :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
<= :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
$c<= :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
< :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
$c< :: BufferUsageFlagBits -> BufferUsageFlagBits -> Bool
compare :: BufferUsageFlagBits -> BufferUsageFlagBits -> Ordering
$ccompare :: BufferUsageFlagBits -> BufferUsageFlagBits -> Ordering
$cp1Ord :: Eq BufferUsageFlagBits
Ord, Ptr b -> Int -> IO BufferUsageFlagBits
Ptr b -> Int -> BufferUsageFlagBits -> IO ()
Ptr BufferUsageFlagBits -> IO BufferUsageFlagBits
Ptr BufferUsageFlagBits -> Int -> IO BufferUsageFlagBits
Ptr BufferUsageFlagBits -> Int -> BufferUsageFlagBits -> IO ()
Ptr BufferUsageFlagBits -> BufferUsageFlagBits -> IO ()
BufferUsageFlagBits -> Int
(BufferUsageFlagBits -> Int)
-> (BufferUsageFlagBits -> Int)
-> (Ptr BufferUsageFlagBits -> Int -> IO BufferUsageFlagBits)
-> (Ptr BufferUsageFlagBits -> Int -> BufferUsageFlagBits -> IO ())
-> (forall b. Ptr b -> Int -> IO BufferUsageFlagBits)
-> (forall b. Ptr b -> Int -> BufferUsageFlagBits -> IO ())
-> (Ptr BufferUsageFlagBits -> IO BufferUsageFlagBits)
-> (Ptr BufferUsageFlagBits -> BufferUsageFlagBits -> IO ())
-> Storable BufferUsageFlagBits
forall b. Ptr b -> Int -> IO BufferUsageFlagBits
forall b. Ptr b -> Int -> BufferUsageFlagBits -> 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 BufferUsageFlagBits -> BufferUsageFlagBits -> IO ()
$cpoke :: Ptr BufferUsageFlagBits -> BufferUsageFlagBits -> IO ()
peek :: Ptr BufferUsageFlagBits -> IO BufferUsageFlagBits
$cpeek :: Ptr BufferUsageFlagBits -> IO BufferUsageFlagBits
pokeByteOff :: Ptr b -> Int -> BufferUsageFlagBits -> IO ()
$cpokeByteOff :: forall b. Ptr b -> Int -> BufferUsageFlagBits -> IO ()
peekByteOff :: Ptr b -> Int -> IO BufferUsageFlagBits
$cpeekByteOff :: forall b. Ptr b -> Int -> IO BufferUsageFlagBits
pokeElemOff :: Ptr BufferUsageFlagBits -> Int -> BufferUsageFlagBits -> IO ()
$cpokeElemOff :: Ptr BufferUsageFlagBits -> Int -> BufferUsageFlagBits -> IO ()
peekElemOff :: Ptr BufferUsageFlagBits -> Int -> IO BufferUsageFlagBits
$cpeekElemOff :: Ptr BufferUsageFlagBits -> Int -> IO BufferUsageFlagBits
alignment :: BufferUsageFlagBits -> Int
$calignment :: BufferUsageFlagBits -> Int
sizeOf :: BufferUsageFlagBits -> Int
$csizeOf :: BufferUsageFlagBits -> Int
Storable, BufferUsageFlagBits
BufferUsageFlagBits -> Zero BufferUsageFlagBits
forall a. a -> Zero a
zero :: BufferUsageFlagBits
$czero :: BufferUsageFlagBits
Zero, Eq BufferUsageFlagBits
BufferUsageFlagBits
Eq BufferUsageFlagBits =>
(BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits)
-> (BufferUsageFlagBits
    -> BufferUsageFlagBits -> BufferUsageFlagBits)
-> (BufferUsageFlagBits
    -> BufferUsageFlagBits -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> BufferUsageFlagBits
-> (Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> Bool)
-> (BufferUsageFlagBits -> Maybe Int)
-> (BufferUsageFlagBits -> Int)
-> (BufferUsageFlagBits -> Bool)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int -> BufferUsageFlagBits)
-> (BufferUsageFlagBits -> Int)
-> Bits BufferUsageFlagBits
Int -> BufferUsageFlagBits
BufferUsageFlagBits -> Bool
BufferUsageFlagBits -> Int
BufferUsageFlagBits -> Maybe Int
BufferUsageFlagBits -> BufferUsageFlagBits
BufferUsageFlagBits -> Int -> Bool
BufferUsageFlagBits -> Int -> BufferUsageFlagBits
BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
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 :: BufferUsageFlagBits -> Int
$cpopCount :: BufferUsageFlagBits -> Int
rotateR :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$crotateR :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
rotateL :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$crotateL :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
unsafeShiftR :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$cunsafeShiftR :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
shiftR :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$cshiftR :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
unsafeShiftL :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$cunsafeShiftL :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
shiftL :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$cshiftL :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
isSigned :: BufferUsageFlagBits -> Bool
$cisSigned :: BufferUsageFlagBits -> Bool
bitSize :: BufferUsageFlagBits -> Int
$cbitSize :: BufferUsageFlagBits -> Int
bitSizeMaybe :: BufferUsageFlagBits -> Maybe Int
$cbitSizeMaybe :: BufferUsageFlagBits -> Maybe Int
testBit :: BufferUsageFlagBits -> Int -> Bool
$ctestBit :: BufferUsageFlagBits -> Int -> Bool
complementBit :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$ccomplementBit :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
clearBit :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$cclearBit :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
setBit :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$csetBit :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
bit :: Int -> BufferUsageFlagBits
$cbit :: Int -> BufferUsageFlagBits
zeroBits :: BufferUsageFlagBits
$czeroBits :: BufferUsageFlagBits
rotate :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$crotate :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
shift :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
$cshift :: BufferUsageFlagBits -> Int -> BufferUsageFlagBits
complement :: BufferUsageFlagBits -> BufferUsageFlagBits
$ccomplement :: BufferUsageFlagBits -> BufferUsageFlagBits
xor :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
$cxor :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
.|. :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
$c.|. :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
.&. :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
$c.&. :: BufferUsageFlagBits -> BufferUsageFlagBits -> BufferUsageFlagBits
$cp1Bits :: Eq BufferUsageFlagBits
Bits)

-- | 'BUFFER_USAGE_TRANSFER_SRC_BIT' specifies that the buffer /can/ be used
-- as the source of a /transfer command/ (see the definition of
-- <https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#synchronization-pipeline-stages-transfer >).
pattern $bBUFFER_USAGE_TRANSFER_SRC_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_TRANSFER_SRC_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_TRANSFER_SRC_BIT = BufferUsageFlagBits 0x00000001
-- | 'BUFFER_USAGE_TRANSFER_DST_BIT' specifies that the buffer /can/ be used
-- as the destination of a transfer command.
pattern $bBUFFER_USAGE_TRANSFER_DST_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_TRANSFER_DST_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_TRANSFER_DST_BIT = BufferUsageFlagBits 0x00000002
-- | 'BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT' specifies that the buffer /can/
-- be used to create a 'Vulkan.Core10.Handles.BufferView' suitable for
-- occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot of type
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER'.
pattern $bBUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = BufferUsageFlagBits 0x00000004
-- | 'BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT' specifies that the buffer /can/
-- be used to create a 'Vulkan.Core10.Handles.BufferView' suitable for
-- occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot of type
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER'.
pattern $bBUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = BufferUsageFlagBits 0x00000008
-- | 'BUFFER_USAGE_UNIFORM_BUFFER_BIT' specifies that the buffer /can/ be
-- used in a 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' suitable
-- for occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot either of
-- type 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER'
-- or
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC'.
pattern $bBUFFER_USAGE_UNIFORM_BUFFER_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_UNIFORM_BUFFER_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_UNIFORM_BUFFER_BIT = BufferUsageFlagBits 0x00000010
-- | 'BUFFER_USAGE_STORAGE_BUFFER_BIT' specifies that the buffer /can/ be
-- used in a 'Vulkan.Core10.DescriptorSet.DescriptorBufferInfo' suitable
-- for occupying a 'Vulkan.Core10.Handles.DescriptorSet' slot either of
-- type 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER'
-- or
-- 'Vulkan.Core10.Enums.DescriptorType.DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC'.
pattern $bBUFFER_USAGE_STORAGE_BUFFER_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_STORAGE_BUFFER_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_STORAGE_BUFFER_BIT = BufferUsageFlagBits 0x00000020
-- | 'BUFFER_USAGE_INDEX_BUFFER_BIT' specifies that the buffer is suitable
-- for passing as the @buffer@ parameter to
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindIndexBuffer'.
pattern $bBUFFER_USAGE_INDEX_BUFFER_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_INDEX_BUFFER_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_INDEX_BUFFER_BIT = BufferUsageFlagBits 0x00000040
-- | 'BUFFER_USAGE_VERTEX_BUFFER_BIT' specifies that the buffer is suitable
-- for passing as an element of the @pBuffers@ array to
-- 'Vulkan.Core10.CommandBufferBuilding.cmdBindVertexBuffers'.
pattern $bBUFFER_USAGE_VERTEX_BUFFER_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_VERTEX_BUFFER_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_VERTEX_BUFFER_BIT = BufferUsageFlagBits 0x00000080
-- | 'BUFFER_USAGE_INDIRECT_BUFFER_BIT' specifies that the buffer is suitable
-- for passing as the @buffer@ parameter to
-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndirect',
-- 'Vulkan.Core10.CommandBufferBuilding.cmdDrawIndexedIndirect',
-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectNV',
-- 'Vulkan.Extensions.VK_NV_mesh_shader.cmdDrawMeshTasksIndirectCountNV',
-- or 'Vulkan.Core10.CommandBufferBuilding.cmdDispatchIndirect'. It is also
-- suitable for passing as the @buffer@ member of
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.IndirectCommandsStreamNV',
-- or @sequencesCountBuffer@ or @sequencesIndexBuffer@ or
-- @preprocessedBuffer@ member of
-- 'Vulkan.Extensions.VK_NV_device_generated_commands.GeneratedCommandsInfoNV'
pattern $bBUFFER_USAGE_INDIRECT_BUFFER_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_INDIRECT_BUFFER_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_INDIRECT_BUFFER_BIT = BufferUsageFlagBits 0x00000100
-- | 'BUFFER_USAGE_RAY_TRACING_BIT_KHR' specifies that the buffer is suitable
-- for use in 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdTraceRaysKHR' and
-- 'Vulkan.Extensions.VK_KHR_ray_tracing.cmdBuildAccelerationStructureKHR'.
pattern $bBUFFER_USAGE_RAY_TRACING_BIT_KHR :: BufferUsageFlagBits
$mBUFFER_USAGE_RAY_TRACING_BIT_KHR :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_RAY_TRACING_BIT_KHR = BufferUsageFlagBits 0x00000400
-- | 'BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT' specifies that the buffer
-- is suitable for passing as the @buffer@ parameter to
-- 'Vulkan.Extensions.VK_EXT_conditional_rendering.cmdBeginConditionalRenderingEXT'.
pattern $bBUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT :: BufferUsageFlagBits
$mBUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT = BufferUsageFlagBits 0x00000200
-- | 'BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT' specifies that
-- the buffer is suitable for using as a counter buffer with
-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBeginTransformFeedbackEXT'
-- and
-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdEndTransformFeedbackEXT'.
pattern $bBUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT :: BufferUsageFlagBits
$mBUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT = BufferUsageFlagBits 0x00001000
-- | 'BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT' specifies that the
-- buffer is suitable for using for binding as a transform feedback buffer
-- with
-- 'Vulkan.Extensions.VK_EXT_transform_feedback.cmdBindTransformFeedbackBuffersEXT'.
pattern $bBUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT :: BufferUsageFlagBits
$mBUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT = BufferUsageFlagBits 0x00000800
-- | 'BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT' specifies that the buffer /can/
-- be used to retrieve a buffer device address via
-- 'Vulkan.Core12.Promoted_From_VK_KHR_buffer_device_address.getBufferDeviceAddress'
-- and use that address to access the buffer’s memory from a shader.
pattern $bBUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT :: BufferUsageFlagBits
$mBUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT :: forall r. BufferUsageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT = BufferUsageFlagBits 0x00020000

type BufferUsageFlags = BufferUsageFlagBits

instance Show BufferUsageFlagBits where
  showsPrec :: Int -> BufferUsageFlagBits -> ShowS
showsPrec p :: Int
p = \case
    BUFFER_USAGE_TRANSFER_SRC_BIT -> String -> ShowS
showString "BUFFER_USAGE_TRANSFER_SRC_BIT"
    BUFFER_USAGE_TRANSFER_DST_BIT -> String -> ShowS
showString "BUFFER_USAGE_TRANSFER_DST_BIT"
    BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT -> String -> ShowS
showString "BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"
    BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT -> String -> ShowS
showString "BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"
    BUFFER_USAGE_UNIFORM_BUFFER_BIT -> String -> ShowS
showString "BUFFER_USAGE_UNIFORM_BUFFER_BIT"
    BUFFER_USAGE_STORAGE_BUFFER_BIT -> String -> ShowS
showString "BUFFER_USAGE_STORAGE_BUFFER_BIT"
    BUFFER_USAGE_INDEX_BUFFER_BIT -> String -> ShowS
showString "BUFFER_USAGE_INDEX_BUFFER_BIT"
    BUFFER_USAGE_VERTEX_BUFFER_BIT -> String -> ShowS
showString "BUFFER_USAGE_VERTEX_BUFFER_BIT"
    BUFFER_USAGE_INDIRECT_BUFFER_BIT -> String -> ShowS
showString "BUFFER_USAGE_INDIRECT_BUFFER_BIT"
    BUFFER_USAGE_RAY_TRACING_BIT_KHR -> String -> ShowS
showString "BUFFER_USAGE_RAY_TRACING_BIT_KHR"
    BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT -> String -> ShowS
showString "BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT"
    BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT -> String -> ShowS
showString "BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT"
    BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT -> String -> ShowS
showString "BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT"
    BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT -> String -> ShowS
showString "BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT"
    BufferUsageFlagBits x :: Flags
x -> Bool -> ShowS -> ShowS
showParen (Int
p Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
>= 11) (String -> ShowS
showString "BufferUsageFlagBits 0x" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Flags -> ShowS
forall a. (Integral a, Show a) => a -> ShowS
showHex Flags
x)

instance Read BufferUsageFlagBits where
  readPrec :: ReadPrec BufferUsageFlagBits
readPrec = ReadPrec BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall a. ReadPrec a -> ReadPrec a
parens ([(String, ReadPrec BufferUsageFlagBits)]
-> ReadPrec BufferUsageFlagBits
forall a. [(String, ReadPrec a)] -> ReadPrec a
choose [("BUFFER_USAGE_TRANSFER_SRC_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_TRANSFER_SRC_BIT)
                            , ("BUFFER_USAGE_TRANSFER_DST_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_TRANSFER_DST_BIT)
                            , ("BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
                            , ("BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
                            , ("BUFFER_USAGE_UNIFORM_BUFFER_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_UNIFORM_BUFFER_BIT)
                            , ("BUFFER_USAGE_STORAGE_BUFFER_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_STORAGE_BUFFER_BIT)
                            , ("BUFFER_USAGE_INDEX_BUFFER_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_INDEX_BUFFER_BIT)
                            , ("BUFFER_USAGE_VERTEX_BUFFER_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_VERTEX_BUFFER_BIT)
                            , ("BUFFER_USAGE_INDIRECT_BUFFER_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_INDIRECT_BUFFER_BIT)
                            , ("BUFFER_USAGE_RAY_TRACING_BIT_KHR", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_RAY_TRACING_BIT_KHR)
                            , ("BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_CONDITIONAL_RENDERING_BIT_EXT)
                            , ("BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_TRANSFORM_FEEDBACK_COUNTER_BUFFER_BIT_EXT)
                            , ("BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT)
                            , ("BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT", BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure BufferUsageFlagBits
BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT)]
                     ReadPrec BufferUsageFlagBits
-> ReadPrec BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++
                     Int -> ReadPrec BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall a. Int -> ReadPrec a -> ReadPrec a
prec 10 (do
                       Lexeme -> ReadPrec ()
expectP (String -> Lexeme
Ident "BufferUsageFlagBits")
                       Flags
v <- ReadPrec Flags -> ReadPrec Flags
forall a. ReadPrec a -> ReadPrec a
step ReadPrec Flags
forall a. Read a => ReadPrec a
readPrec
                       BufferUsageFlagBits -> ReadPrec BufferUsageFlagBits
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Flags -> BufferUsageFlagBits
BufferUsageFlagBits Flags
v)))