module Data.SpirV.Reflect.Enums.ShaderStage where

import Control.Monad (guard)

import Data.SpirV.Reflect.Enums.Common

type ShaderStage = ShaderStageFlagBits

newtype ShaderStageFlagBits = ShaderStageFlagBits Flags
  deriving newtype (ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
(ShaderStageFlagBits -> ShaderStageFlagBits -> Bool)
-> (ShaderStageFlagBits -> ShaderStageFlagBits -> Bool)
-> Eq ShaderStageFlagBits
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
$c/= :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
== :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
$c== :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
Eq, Eq ShaderStageFlagBits
Eq ShaderStageFlagBits
-> (ShaderStageFlagBits -> ShaderStageFlagBits -> Ordering)
-> (ShaderStageFlagBits -> ShaderStageFlagBits -> Bool)
-> (ShaderStageFlagBits -> ShaderStageFlagBits -> Bool)
-> (ShaderStageFlagBits -> ShaderStageFlagBits -> Bool)
-> (ShaderStageFlagBits -> ShaderStageFlagBits -> Bool)
-> (ShaderStageFlagBits
    -> ShaderStageFlagBits -> ShaderStageFlagBits)
-> (ShaderStageFlagBits
    -> ShaderStageFlagBits -> ShaderStageFlagBits)
-> Ord ShaderStageFlagBits
ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
ShaderStageFlagBits -> ShaderStageFlagBits -> Ordering
ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
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 :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
$cmin :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
max :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
$cmax :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
>= :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
$c>= :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
> :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
$c> :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
<= :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
$c<= :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
< :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
$c< :: ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
compare :: ShaderStageFlagBits -> ShaderStageFlagBits -> Ordering
$ccompare :: ShaderStageFlagBits -> ShaderStageFlagBits -> Ordering
$cp1Ord :: Eq ShaderStageFlagBits
Ord, Int -> ShaderStageFlagBits -> ShowS
[ShaderStageFlagBits] -> ShowS
ShaderStageFlagBits -> String
(Int -> ShaderStageFlagBits -> ShowS)
-> (ShaderStageFlagBits -> String)
-> ([ShaderStageFlagBits] -> ShowS)
-> Show ShaderStageFlagBits
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [ShaderStageFlagBits] -> ShowS
$cshowList :: [ShaderStageFlagBits] -> ShowS
show :: ShaderStageFlagBits -> String
$cshow :: ShaderStageFlagBits -> String
showsPrec :: Int -> ShaderStageFlagBits -> ShowS
$cshowsPrec :: Int -> ShaderStageFlagBits -> ShowS
Show, Eq ShaderStageFlagBits
ShaderStageFlagBits
Eq ShaderStageFlagBits
-> (ShaderStageFlagBits
    -> ShaderStageFlagBits -> ShaderStageFlagBits)
-> (ShaderStageFlagBits
    -> ShaderStageFlagBits -> ShaderStageFlagBits)
-> (ShaderStageFlagBits
    -> ShaderStageFlagBits -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> ShaderStageFlagBits
-> (Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> Bool)
-> (ShaderStageFlagBits -> Maybe Int)
-> (ShaderStageFlagBits -> Int)
-> (ShaderStageFlagBits -> Bool)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int -> ShaderStageFlagBits)
-> (ShaderStageFlagBits -> Int)
-> Bits ShaderStageFlagBits
Int -> ShaderStageFlagBits
ShaderStageFlagBits -> Bool
ShaderStageFlagBits -> Int
ShaderStageFlagBits -> Maybe Int
ShaderStageFlagBits -> ShaderStageFlagBits
ShaderStageFlagBits -> Int -> Bool
ShaderStageFlagBits -> Int -> ShaderStageFlagBits
ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
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 :: ShaderStageFlagBits -> Int
$cpopCount :: ShaderStageFlagBits -> Int
rotateR :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$crotateR :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
rotateL :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$crotateL :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
unsafeShiftR :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$cunsafeShiftR :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
shiftR :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$cshiftR :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
unsafeShiftL :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$cunsafeShiftL :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
shiftL :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$cshiftL :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
isSigned :: ShaderStageFlagBits -> Bool
$cisSigned :: ShaderStageFlagBits -> Bool
bitSize :: ShaderStageFlagBits -> Int
$cbitSize :: ShaderStageFlagBits -> Int
bitSizeMaybe :: ShaderStageFlagBits -> Maybe Int
$cbitSizeMaybe :: ShaderStageFlagBits -> Maybe Int
testBit :: ShaderStageFlagBits -> Int -> Bool
$ctestBit :: ShaderStageFlagBits -> Int -> Bool
complementBit :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$ccomplementBit :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
clearBit :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$cclearBit :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
setBit :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$csetBit :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
bit :: Int -> ShaderStageFlagBits
$cbit :: Int -> ShaderStageFlagBits
zeroBits :: ShaderStageFlagBits
$czeroBits :: ShaderStageFlagBits
rotate :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$crotate :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
shift :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
$cshift :: ShaderStageFlagBits -> Int -> ShaderStageFlagBits
complement :: ShaderStageFlagBits -> ShaderStageFlagBits
$ccomplement :: ShaderStageFlagBits -> ShaderStageFlagBits
xor :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
$cxor :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
.|. :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
$c.|. :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
.&. :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
$c.&. :: ShaderStageFlagBits -> ShaderStageFlagBits -> ShaderStageFlagBits
$cp1Bits :: Eq ShaderStageFlagBits
Bits, Bits ShaderStageFlagBits
Bits ShaderStageFlagBits
-> (ShaderStageFlagBits -> Int)
-> (ShaderStageFlagBits -> Int)
-> (ShaderStageFlagBits -> Int)
-> FiniteBits ShaderStageFlagBits
ShaderStageFlagBits -> Int
forall b.
Bits b -> (b -> Int) -> (b -> Int) -> (b -> Int) -> FiniteBits b
countTrailingZeros :: ShaderStageFlagBits -> Int
$ccountTrailingZeros :: ShaderStageFlagBits -> Int
countLeadingZeros :: ShaderStageFlagBits -> Int
$ccountLeadingZeros :: ShaderStageFlagBits -> Int
finiteBitSize :: ShaderStageFlagBits -> Int
$cfiniteBitSize :: ShaderStageFlagBits -> Int
$cp1FiniteBits :: Bits ShaderStageFlagBits
FiniteBits)

pattern SHADER_STAGE_VERTEX_BIT :: ShaderStageFlagBits
pattern $bSHADER_STAGE_VERTEX_BIT :: ShaderStageFlagBits
$mSHADER_STAGE_VERTEX_BIT :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_VERTEX_BIT = ShaderStageFlagBits 0x00000001

pattern SHADER_STAGE_TESSELLATION_CONTROL_BIT :: ShaderStageFlagBits
pattern $bSHADER_STAGE_TESSELLATION_CONTROL_BIT :: ShaderStageFlagBits
$mSHADER_STAGE_TESSELLATION_CONTROL_BIT :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_TESSELLATION_CONTROL_BIT = ShaderStageFlagBits 0x00000002

pattern SHADER_STAGE_TESSELLATION_EVALUATION_BIT :: ShaderStageFlagBits
pattern $bSHADER_STAGE_TESSELLATION_EVALUATION_BIT :: ShaderStageFlagBits
$mSHADER_STAGE_TESSELLATION_EVALUATION_BIT :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_TESSELLATION_EVALUATION_BIT = ShaderStageFlagBits 0x00000004

pattern SHADER_STAGE_GEOMETRY_BIT :: ShaderStageFlagBits
pattern $bSHADER_STAGE_GEOMETRY_BIT :: ShaderStageFlagBits
$mSHADER_STAGE_GEOMETRY_BIT :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_GEOMETRY_BIT = ShaderStageFlagBits 0x00000008

pattern SHADER_STAGE_FRAGMENT_BIT :: ShaderStageFlagBits
pattern $bSHADER_STAGE_FRAGMENT_BIT :: ShaderStageFlagBits
$mSHADER_STAGE_FRAGMENT_BIT :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_FRAGMENT_BIT = ShaderStageFlagBits 0x00000010

pattern SHADER_STAGE_COMPUTE_BIT :: ShaderStageFlagBits
pattern $bSHADER_STAGE_COMPUTE_BIT :: ShaderStageFlagBits
$mSHADER_STAGE_COMPUTE_BIT :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_COMPUTE_BIT = ShaderStageFlagBits 0x00000020

pattern SHADER_STAGE_TASK_BIT_NV :: ShaderStageFlagBits
pattern $bSHADER_STAGE_TASK_BIT_NV :: ShaderStageFlagBits
$mSHADER_STAGE_TASK_BIT_NV :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_TASK_BIT_NV = ShaderStageFlagBits 0x00000040

pattern SHADER_STAGE_MESH_BIT_NV :: ShaderStageFlagBits
pattern $bSHADER_STAGE_MESH_BIT_NV :: ShaderStageFlagBits
$mSHADER_STAGE_MESH_BIT_NV :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_MESH_BIT_NV = ShaderStageFlagBits 0x00000080

pattern SHADER_STAGE_RAYGEN_BIT_KHR :: ShaderStageFlagBits
pattern $bSHADER_STAGE_RAYGEN_BIT_KHR :: ShaderStageFlagBits
$mSHADER_STAGE_RAYGEN_BIT_KHR :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_RAYGEN_BIT_KHR = ShaderStageFlagBits 0x00000100

pattern SHADER_STAGE_ANY_HIT_BIT_KHR :: ShaderStageFlagBits
pattern $bSHADER_STAGE_ANY_HIT_BIT_KHR :: ShaderStageFlagBits
$mSHADER_STAGE_ANY_HIT_BIT_KHR :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_ANY_HIT_BIT_KHR = ShaderStageFlagBits 0x00000200

pattern SHADER_STAGE_CLOSEST_HIT_BIT_KHR :: ShaderStageFlagBits
pattern $bSHADER_STAGE_CLOSEST_HIT_BIT_KHR :: ShaderStageFlagBits
$mSHADER_STAGE_CLOSEST_HIT_BIT_KHR :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_CLOSEST_HIT_BIT_KHR = ShaderStageFlagBits 0x00000400

pattern SHADER_STAGE_MISS_BIT_KHR :: ShaderStageFlagBits
pattern $bSHADER_STAGE_MISS_BIT_KHR :: ShaderStageFlagBits
$mSHADER_STAGE_MISS_BIT_KHR :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_MISS_BIT_KHR = ShaderStageFlagBits 0x00000800

pattern SHADER_STAGE_INTERSECTION_BIT_KHR :: ShaderStageFlagBits
pattern $bSHADER_STAGE_INTERSECTION_BIT_KHR :: ShaderStageFlagBits
$mSHADER_STAGE_INTERSECTION_BIT_KHR :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_INTERSECTION_BIT_KHR = ShaderStageFlagBits 0x00001000

pattern SHADER_STAGE_CALLABLE_BIT_KHR :: ShaderStageFlagBits
pattern $bSHADER_STAGE_CALLABLE_BIT_KHR :: ShaderStageFlagBits
$mSHADER_STAGE_CALLABLE_BIT_KHR :: forall r. ShaderStageFlagBits -> (Void# -> r) -> (Void# -> r) -> r
SHADER_STAGE_CALLABLE_BIT_KHR = ShaderStageFlagBits 0x00002000

names :: IsString label => ShaderStageFlagBits -> [label]
names :: ShaderStageFlagBits -> [label]
names ShaderStageFlagBits
bits = do
  (ShaderStageFlagBits
flag, label
name) <- [(ShaderStageFlagBits, label)]
forall label. IsString label => [(ShaderStageFlagBits, label)]
bitNames
  Bool -> [()]
forall (f :: * -> *). Alternative f => Bool -> f ()
guard (Bool -> [()]) -> Bool -> [()]
forall a b. (a -> b) -> a -> b
$ ShaderStageFlagBits
bits ShaderStageFlagBits -> ShaderStageFlagBits -> Bool
forall a. Bits a => a -> a -> Bool
.&&. ShaderStageFlagBits
flag
  pure label
name

bitNames :: IsString label => [(ShaderStageFlagBits, label)]
bitNames :: [(ShaderStageFlagBits, label)]
bitNames =
  [ (ShaderStageFlagBits
SHADER_STAGE_VERTEX_BIT, label
"VERTEX")
  , (ShaderStageFlagBits
SHADER_STAGE_TESSELLATION_CONTROL_BIT, label
"TESSELLATION_CONTROL")
  , (ShaderStageFlagBits
SHADER_STAGE_TESSELLATION_EVALUATION_BIT, label
"TESSELLATION_EVALUATION")
  , (ShaderStageFlagBits
SHADER_STAGE_GEOMETRY_BIT, label
"GEOMETRY")
  , (ShaderStageFlagBits
SHADER_STAGE_FRAGMENT_BIT, label
"FRAGMENT")
  , (ShaderStageFlagBits
SHADER_STAGE_COMPUTE_BIT, label
"COMPUTE")
  , (ShaderStageFlagBits
SHADER_STAGE_TASK_BIT_NV, label
"TASK")
  , (ShaderStageFlagBits
SHADER_STAGE_MESH_BIT_NV, label
"MESH")
  , (ShaderStageFlagBits
SHADER_STAGE_RAYGEN_BIT_KHR, label
"RAYGEN")
  , (ShaderStageFlagBits
SHADER_STAGE_ANY_HIT_BIT_KHR, label
"ANY_HIT")
  , (ShaderStageFlagBits
SHADER_STAGE_CLOSEST_HIT_BIT_KHR, label
"CLOSEST_HIT")
  , (ShaderStageFlagBits
SHADER_STAGE_MISS_BIT_KHR, label
"MISS")
  , (ShaderStageFlagBits
SHADER_STAGE_INTERSECTION_BIT_KHR, label
"INTERSECTION")
  , (ShaderStageFlagBits
SHADER_STAGE_CALLABLE_BIT_KHR, label
"CALLABLE")
  ]