module Data.SpirV.Enum.RayFlags where import Data.Bits (Bits) import Data.String (IsString(..)) import Data.Word (Word32) import Foreign (Storable(..)) import GHC.Read (Read(..)) import Text.ParserCombinators.ReadPrec (pfail) import qualified GHC.Read as Read import qualified Text.Read.Lex as Lex newtype RayFlags = RayFlags Word32 deriving (Eq, Ord, Storable, Bits) pattern OpaqueKHR :: RayFlags pattern OpaqueKHR = RayFlags 0x1 pattern NoOpaqueKHR :: RayFlags pattern NoOpaqueKHR = RayFlags 0x2 pattern TerminateOnFirstHitKHR :: RayFlags pattern TerminateOnFirstHitKHR = RayFlags 0x4 pattern SkipClosestHitShaderKHR :: RayFlags pattern SkipClosestHitShaderKHR = RayFlags 0x8 pattern CullBackFacingTrianglesKHR :: RayFlags pattern CullBackFacingTrianglesKHR = RayFlags 0x10 pattern CullFrontFacingTrianglesKHR :: RayFlags pattern CullFrontFacingTrianglesKHR = RayFlags 0x20 pattern CullOpaqueKHR :: RayFlags pattern CullOpaqueKHR = RayFlags 0x40 pattern CullNoOpaqueKHR :: RayFlags pattern CullNoOpaqueKHR = RayFlags 0x80 pattern SkipTrianglesKHR :: RayFlags pattern SkipTrianglesKHR = RayFlags 0x100 pattern SkipAABBsKHR :: RayFlags pattern SkipAABBsKHR = RayFlags 0x200 pattern ForceOpacityMicromap2StateEXT :: RayFlags pattern ForceOpacityMicromap2StateEXT = RayFlags 0x400 toName :: IsString a => RayFlags -> a toName x = case x of OpaqueKHR -> "OpaqueKHR" NoOpaqueKHR -> "NoOpaqueKHR" TerminateOnFirstHitKHR -> "TerminateOnFirstHitKHR" SkipClosestHitShaderKHR -> "SkipClosestHitShaderKHR" CullBackFacingTrianglesKHR -> "CullBackFacingTrianglesKHR" CullFrontFacingTrianglesKHR -> "CullFrontFacingTrianglesKHR" CullOpaqueKHR -> "CullOpaqueKHR" CullNoOpaqueKHR -> "CullNoOpaqueKHR" SkipTrianglesKHR -> "SkipTrianglesKHR" SkipAABBsKHR -> "SkipAABBsKHR" ForceOpacityMicromap2StateEXT -> "ForceOpacityMicromap2StateEXT" unknown -> fromString $ "RayFlags " ++ show unknown instance Show RayFlags where show = toName fromName :: (IsString a, Eq a) => a -> Maybe RayFlags fromName x = case x of "OpaqueKHR" -> Just OpaqueKHR "NoOpaqueKHR" -> Just NoOpaqueKHR "TerminateOnFirstHitKHR" -> Just TerminateOnFirstHitKHR "SkipClosestHitShaderKHR" -> Just SkipClosestHitShaderKHR "CullBackFacingTrianglesKHR" -> Just CullBackFacingTrianglesKHR "CullFrontFacingTrianglesKHR" -> Just CullFrontFacingTrianglesKHR "CullOpaqueKHR" -> Just CullOpaqueKHR "CullNoOpaqueKHR" -> Just CullNoOpaqueKHR "SkipTrianglesKHR" -> Just SkipTrianglesKHR "SkipAABBsKHR" -> Just SkipAABBsKHR "ForceOpacityMicromap2StateEXT" -> Just ForceOpacityMicromap2StateEXT _unknown -> Nothing instance Read RayFlags where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s