module Data.SpirV.Enum.ExecutionModel where 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 ExecutionModel = ExecutionModel Word32 deriving (Eq, Ord, Storable) pattern Vertex :: ExecutionModel pattern Vertex = ExecutionModel 0 pattern TessellationControl :: ExecutionModel pattern TessellationControl = ExecutionModel 1 pattern TessellationEvaluation :: ExecutionModel pattern TessellationEvaluation = ExecutionModel 2 pattern Geometry :: ExecutionModel pattern Geometry = ExecutionModel 3 pattern Fragment :: ExecutionModel pattern Fragment = ExecutionModel 4 pattern GLCompute :: ExecutionModel pattern GLCompute = ExecutionModel 5 pattern Kernel :: ExecutionModel pattern Kernel = ExecutionModel 6 pattern TaskNV :: ExecutionModel pattern TaskNV = ExecutionModel 5267 pattern MeshNV :: ExecutionModel pattern MeshNV = ExecutionModel 5268 pattern RayGenerationKHR :: ExecutionModel pattern RayGenerationKHR = ExecutionModel 5313 pattern RayGenerationNV :: ExecutionModel pattern RayGenerationNV = ExecutionModel 5313 pattern IntersectionKHR :: ExecutionModel pattern IntersectionKHR = ExecutionModel 5314 pattern IntersectionNV :: ExecutionModel pattern IntersectionNV = ExecutionModel 5314 pattern AnyHitKHR :: ExecutionModel pattern AnyHitKHR = ExecutionModel 5315 pattern AnyHitNV :: ExecutionModel pattern AnyHitNV = ExecutionModel 5315 pattern ClosestHitKHR :: ExecutionModel pattern ClosestHitKHR = ExecutionModel 5316 pattern ClosestHitNV :: ExecutionModel pattern ClosestHitNV = ExecutionModel 5316 pattern MissKHR :: ExecutionModel pattern MissKHR = ExecutionModel 5317 pattern MissNV :: ExecutionModel pattern MissNV = ExecutionModel 5317 pattern CallableKHR :: ExecutionModel pattern CallableKHR = ExecutionModel 5318 pattern CallableNV :: ExecutionModel pattern CallableNV = ExecutionModel 5318 pattern TaskEXT :: ExecutionModel pattern TaskEXT = ExecutionModel 5364 pattern MeshEXT :: ExecutionModel pattern MeshEXT = ExecutionModel 5365 toName :: IsString a => ExecutionModel -> a toName x = case x of Vertex -> "Vertex" TessellationControl -> "TessellationControl" TessellationEvaluation -> "TessellationEvaluation" Geometry -> "Geometry" Fragment -> "Fragment" GLCompute -> "GLCompute" Kernel -> "Kernel" TaskNV -> "TaskNV" MeshNV -> "MeshNV" RayGenerationKHR -> "RayGenerationKHR" RayGenerationNV -> "RayGenerationNV" IntersectionKHR -> "IntersectionKHR" IntersectionNV -> "IntersectionNV" AnyHitKHR -> "AnyHitKHR" AnyHitNV -> "AnyHitNV" ClosestHitKHR -> "ClosestHitKHR" ClosestHitNV -> "ClosestHitNV" MissKHR -> "MissKHR" MissNV -> "MissNV" CallableKHR -> "CallableKHR" CallableNV -> "CallableNV" TaskEXT -> "TaskEXT" MeshEXT -> "MeshEXT" unknown -> fromString $ "ExecutionModel " ++ show unknown instance Show ExecutionModel where show = toName fromName :: (IsString a, Eq a) => a -> Maybe ExecutionModel fromName x = case x of "Vertex" -> Just Vertex "TessellationControl" -> Just TessellationControl "TessellationEvaluation" -> Just TessellationEvaluation "Geometry" -> Just Geometry "Fragment" -> Just Fragment "GLCompute" -> Just GLCompute "Kernel" -> Just Kernel "TaskNV" -> Just TaskNV "MeshNV" -> Just MeshNV "RayGenerationKHR" -> Just RayGenerationKHR "RayGenerationNV" -> Just RayGenerationNV "IntersectionKHR" -> Just IntersectionKHR "IntersectionNV" -> Just IntersectionNV "AnyHitKHR" -> Just AnyHitKHR "AnyHitNV" -> Just AnyHitNV "ClosestHitKHR" -> Just ClosestHitKHR "ClosestHitNV" -> Just ClosestHitNV "MissKHR" -> Just MissKHR "MissNV" -> Just MissNV "CallableKHR" -> Just CallableKHR "CallableNV" -> Just CallableNV "TaskEXT" -> Just TaskEXT "MeshEXT" -> Just MeshEXT _unknown -> Nothing instance Read ExecutionModel where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s