module Data.SpirV.Enum.StorageClass 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 StorageClass = StorageClass Word32 deriving (Eq, Ord, Storable) pattern UniformConstant :: StorageClass pattern UniformConstant = StorageClass 0 pattern Input :: StorageClass pattern Input = StorageClass 1 pattern Uniform :: StorageClass pattern Uniform = StorageClass 2 pattern Output :: StorageClass pattern Output = StorageClass 3 pattern Workgroup :: StorageClass pattern Workgroup = StorageClass 4 pattern CrossWorkgroup :: StorageClass pattern CrossWorkgroup = StorageClass 5 pattern Private :: StorageClass pattern Private = StorageClass 6 pattern Function :: StorageClass pattern Function = StorageClass 7 pattern Generic :: StorageClass pattern Generic = StorageClass 8 pattern PushConstant :: StorageClass pattern PushConstant = StorageClass 9 pattern AtomicCounter :: StorageClass pattern AtomicCounter = StorageClass 10 pattern Image :: StorageClass pattern Image = StorageClass 11 pattern StorageBuffer :: StorageClass pattern StorageBuffer = StorageClass 12 pattern CallableDataKHR :: StorageClass pattern CallableDataKHR = StorageClass 5328 pattern CallableDataNV :: StorageClass pattern CallableDataNV = StorageClass 5328 pattern IncomingCallableDataKHR :: StorageClass pattern IncomingCallableDataKHR = StorageClass 5329 pattern IncomingCallableDataNV :: StorageClass pattern IncomingCallableDataNV = StorageClass 5329 pattern RayPayloadKHR :: StorageClass pattern RayPayloadKHR = StorageClass 5338 pattern RayPayloadNV :: StorageClass pattern RayPayloadNV = StorageClass 5338 pattern HitAttributeKHR :: StorageClass pattern HitAttributeKHR = StorageClass 5339 pattern HitAttributeNV :: StorageClass pattern HitAttributeNV = StorageClass 5339 pattern IncomingRayPayloadKHR :: StorageClass pattern IncomingRayPayloadKHR = StorageClass 5342 pattern IncomingRayPayloadNV :: StorageClass pattern IncomingRayPayloadNV = StorageClass 5342 pattern ShaderRecordBufferKHR :: StorageClass pattern ShaderRecordBufferKHR = StorageClass 5343 pattern ShaderRecordBufferNV :: StorageClass pattern ShaderRecordBufferNV = StorageClass 5343 pattern PhysicalStorageBuffer :: StorageClass pattern PhysicalStorageBuffer = StorageClass 5349 pattern PhysicalStorageBufferEXT :: StorageClass pattern PhysicalStorageBufferEXT = StorageClass 5349 pattern HitObjectAttributeNV :: StorageClass pattern HitObjectAttributeNV = StorageClass 5385 pattern TaskPayloadWorkgroupEXT :: StorageClass pattern TaskPayloadWorkgroupEXT = StorageClass 5402 pattern CodeSectionINTEL :: StorageClass pattern CodeSectionINTEL = StorageClass 5605 pattern DeviceOnlyINTEL :: StorageClass pattern DeviceOnlyINTEL = StorageClass 5936 pattern HostOnlyINTEL :: StorageClass pattern HostOnlyINTEL = StorageClass 5937 toName :: IsString a => StorageClass -> a toName x = case x of UniformConstant -> "UniformConstant" Input -> "Input" Uniform -> "Uniform" Output -> "Output" Workgroup -> "Workgroup" CrossWorkgroup -> "CrossWorkgroup" Private -> "Private" Function -> "Function" Generic -> "Generic" PushConstant -> "PushConstant" AtomicCounter -> "AtomicCounter" Image -> "Image" StorageBuffer -> "StorageBuffer" CallableDataKHR -> "CallableDataKHR" CallableDataNV -> "CallableDataNV" IncomingCallableDataKHR -> "IncomingCallableDataKHR" IncomingCallableDataNV -> "IncomingCallableDataNV" RayPayloadKHR -> "RayPayloadKHR" RayPayloadNV -> "RayPayloadNV" HitAttributeKHR -> "HitAttributeKHR" HitAttributeNV -> "HitAttributeNV" IncomingRayPayloadKHR -> "IncomingRayPayloadKHR" IncomingRayPayloadNV -> "IncomingRayPayloadNV" ShaderRecordBufferKHR -> "ShaderRecordBufferKHR" ShaderRecordBufferNV -> "ShaderRecordBufferNV" PhysicalStorageBuffer -> "PhysicalStorageBuffer" PhysicalStorageBufferEXT -> "PhysicalStorageBufferEXT" HitObjectAttributeNV -> "HitObjectAttributeNV" TaskPayloadWorkgroupEXT -> "TaskPayloadWorkgroupEXT" CodeSectionINTEL -> "CodeSectionINTEL" DeviceOnlyINTEL -> "DeviceOnlyINTEL" HostOnlyINTEL -> "HostOnlyINTEL" unknown -> fromString $ "StorageClass " ++ show unknown instance Show StorageClass where show = toName fromName :: (IsString a, Eq a) => a -> Maybe StorageClass fromName x = case x of "UniformConstant" -> Just UniformConstant "Input" -> Just Input "Uniform" -> Just Uniform "Output" -> Just Output "Workgroup" -> Just Workgroup "CrossWorkgroup" -> Just CrossWorkgroup "Private" -> Just Private "Function" -> Just Function "Generic" -> Just Generic "PushConstant" -> Just PushConstant "AtomicCounter" -> Just AtomicCounter "Image" -> Just Image "StorageBuffer" -> Just StorageBuffer "CallableDataKHR" -> Just CallableDataKHR "CallableDataNV" -> Just CallableDataNV "IncomingCallableDataKHR" -> Just IncomingCallableDataKHR "IncomingCallableDataNV" -> Just IncomingCallableDataNV "RayPayloadKHR" -> Just RayPayloadKHR "RayPayloadNV" -> Just RayPayloadNV "HitAttributeKHR" -> Just HitAttributeKHR "HitAttributeNV" -> Just HitAttributeNV "IncomingRayPayloadKHR" -> Just IncomingRayPayloadKHR "IncomingRayPayloadNV" -> Just IncomingRayPayloadNV "ShaderRecordBufferKHR" -> Just ShaderRecordBufferKHR "ShaderRecordBufferNV" -> Just ShaderRecordBufferNV "PhysicalStorageBuffer" -> Just PhysicalStorageBuffer "PhysicalStorageBufferEXT" -> Just PhysicalStorageBufferEXT "HitObjectAttributeNV" -> Just HitObjectAttributeNV "TaskPayloadWorkgroupEXT" -> Just TaskPayloadWorkgroupEXT "CodeSectionINTEL" -> Just CodeSectionINTEL "DeviceOnlyINTEL" -> Just DeviceOnlyINTEL "HostOnlyINTEL" -> Just HostOnlyINTEL _unknown -> Nothing instance Read StorageClass where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s