module Data.SpirV.Enum.ExecutionMode 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 ExecutionMode = ExecutionMode Word32 deriving (Eq, Ord, Storable) pattern Invocations :: ExecutionMode pattern Invocations = ExecutionMode 0 pattern SpacingEqual :: ExecutionMode pattern SpacingEqual = ExecutionMode 1 pattern SpacingFractionalEven :: ExecutionMode pattern SpacingFractionalEven = ExecutionMode 2 pattern SpacingFractionalOdd :: ExecutionMode pattern SpacingFractionalOdd = ExecutionMode 3 pattern VertexOrderCw :: ExecutionMode pattern VertexOrderCw = ExecutionMode 4 pattern VertexOrderCcw :: ExecutionMode pattern VertexOrderCcw = ExecutionMode 5 pattern PixelCenterInteger :: ExecutionMode pattern PixelCenterInteger = ExecutionMode 6 pattern OriginUpperLeft :: ExecutionMode pattern OriginUpperLeft = ExecutionMode 7 pattern OriginLowerLeft :: ExecutionMode pattern OriginLowerLeft = ExecutionMode 8 pattern EarlyFragmentTests :: ExecutionMode pattern EarlyFragmentTests = ExecutionMode 9 pattern PointMode :: ExecutionMode pattern PointMode = ExecutionMode 10 pattern Xfb :: ExecutionMode pattern Xfb = ExecutionMode 11 pattern DepthReplacing :: ExecutionMode pattern DepthReplacing = ExecutionMode 12 pattern DepthGreater :: ExecutionMode pattern DepthGreater = ExecutionMode 14 pattern DepthLess :: ExecutionMode pattern DepthLess = ExecutionMode 15 pattern DepthUnchanged :: ExecutionMode pattern DepthUnchanged = ExecutionMode 16 pattern LocalSize :: ExecutionMode pattern LocalSize = ExecutionMode 17 pattern LocalSizeHint :: ExecutionMode pattern LocalSizeHint = ExecutionMode 18 pattern InputPoints :: ExecutionMode pattern InputPoints = ExecutionMode 19 pattern InputLines :: ExecutionMode pattern InputLines = ExecutionMode 20 pattern InputLinesAdjacency :: ExecutionMode pattern InputLinesAdjacency = ExecutionMode 21 pattern Triangles :: ExecutionMode pattern Triangles = ExecutionMode 22 pattern InputTrianglesAdjacency :: ExecutionMode pattern InputTrianglesAdjacency = ExecutionMode 23 pattern Quads :: ExecutionMode pattern Quads = ExecutionMode 24 pattern Isolines :: ExecutionMode pattern Isolines = ExecutionMode 25 pattern OutputVertices :: ExecutionMode pattern OutputVertices = ExecutionMode 26 pattern OutputPoints :: ExecutionMode pattern OutputPoints = ExecutionMode 27 pattern OutputLineStrip :: ExecutionMode pattern OutputLineStrip = ExecutionMode 28 pattern OutputTriangleStrip :: ExecutionMode pattern OutputTriangleStrip = ExecutionMode 29 pattern VecTypeHint :: ExecutionMode pattern VecTypeHint = ExecutionMode 30 pattern ContractionOff :: ExecutionMode pattern ContractionOff = ExecutionMode 31 pattern Initializer :: ExecutionMode pattern Initializer = ExecutionMode 33 pattern Finalizer :: ExecutionMode pattern Finalizer = ExecutionMode 34 pattern SubgroupSize :: ExecutionMode pattern SubgroupSize = ExecutionMode 35 pattern SubgroupsPerWorkgroup :: ExecutionMode pattern SubgroupsPerWorkgroup = ExecutionMode 36 pattern SubgroupsPerWorkgroupId :: ExecutionMode pattern SubgroupsPerWorkgroupId = ExecutionMode 37 pattern LocalSizeId :: ExecutionMode pattern LocalSizeId = ExecutionMode 38 pattern LocalSizeHintId :: ExecutionMode pattern LocalSizeHintId = ExecutionMode 39 pattern SubgroupUniformControlFlowKHR :: ExecutionMode pattern SubgroupUniformControlFlowKHR = ExecutionMode 4421 pattern PostDepthCoverage :: ExecutionMode pattern PostDepthCoverage = ExecutionMode 4446 pattern DenormPreserve :: ExecutionMode pattern DenormPreserve = ExecutionMode 4459 pattern DenormFlushToZero :: ExecutionMode pattern DenormFlushToZero = ExecutionMode 4460 pattern SignedZeroInfNanPreserve :: ExecutionMode pattern SignedZeroInfNanPreserve = ExecutionMode 4461 pattern RoundingModeRTE :: ExecutionMode pattern RoundingModeRTE = ExecutionMode 4462 pattern RoundingModeRTZ :: ExecutionMode pattern RoundingModeRTZ = ExecutionMode 4463 pattern EarlyAndLateFragmentTestsAMD :: ExecutionMode pattern EarlyAndLateFragmentTestsAMD = ExecutionMode 5017 pattern StencilRefReplacingEXT :: ExecutionMode pattern StencilRefReplacingEXT = ExecutionMode 5027 pattern StencilRefUnchangedFrontAMD :: ExecutionMode pattern StencilRefUnchangedFrontAMD = ExecutionMode 5079 pattern StencilRefGreaterFrontAMD :: ExecutionMode pattern StencilRefGreaterFrontAMD = ExecutionMode 5080 pattern StencilRefLessFrontAMD :: ExecutionMode pattern StencilRefLessFrontAMD = ExecutionMode 5081 pattern StencilRefUnchangedBackAMD :: ExecutionMode pattern StencilRefUnchangedBackAMD = ExecutionMode 5082 pattern StencilRefGreaterBackAMD :: ExecutionMode pattern StencilRefGreaterBackAMD = ExecutionMode 5083 pattern StencilRefLessBackAMD :: ExecutionMode pattern StencilRefLessBackAMD = ExecutionMode 5084 pattern OutputLinesEXT :: ExecutionMode pattern OutputLinesEXT = ExecutionMode 5269 pattern OutputLinesNV :: ExecutionMode pattern OutputLinesNV = ExecutionMode 5269 pattern OutputPrimitivesEXT :: ExecutionMode pattern OutputPrimitivesEXT = ExecutionMode 5270 pattern OutputPrimitivesNV :: ExecutionMode pattern OutputPrimitivesNV = ExecutionMode 5270 pattern DerivativeGroupQuadsNV :: ExecutionMode pattern DerivativeGroupQuadsNV = ExecutionMode 5289 pattern DerivativeGroupLinearNV :: ExecutionMode pattern DerivativeGroupLinearNV = ExecutionMode 5290 pattern OutputTrianglesEXT :: ExecutionMode pattern OutputTrianglesEXT = ExecutionMode 5298 pattern OutputTrianglesNV :: ExecutionMode pattern OutputTrianglesNV = ExecutionMode 5298 pattern PixelInterlockOrderedEXT :: ExecutionMode pattern PixelInterlockOrderedEXT = ExecutionMode 5366 pattern PixelInterlockUnorderedEXT :: ExecutionMode pattern PixelInterlockUnorderedEXT = ExecutionMode 5367 pattern SampleInterlockOrderedEXT :: ExecutionMode pattern SampleInterlockOrderedEXT = ExecutionMode 5368 pattern SampleInterlockUnorderedEXT :: ExecutionMode pattern SampleInterlockUnorderedEXT = ExecutionMode 5369 pattern ShadingRateInterlockOrderedEXT :: ExecutionMode pattern ShadingRateInterlockOrderedEXT = ExecutionMode 5370 pattern ShadingRateInterlockUnorderedEXT :: ExecutionMode pattern ShadingRateInterlockUnorderedEXT = ExecutionMode 5371 pattern SharedLocalMemorySizeINTEL :: ExecutionMode pattern SharedLocalMemorySizeINTEL = ExecutionMode 5618 pattern RoundingModeRTPINTEL :: ExecutionMode pattern RoundingModeRTPINTEL = ExecutionMode 5620 pattern RoundingModeRTNINTEL :: ExecutionMode pattern RoundingModeRTNINTEL = ExecutionMode 5621 pattern FloatingPointModeALTINTEL :: ExecutionMode pattern FloatingPointModeALTINTEL = ExecutionMode 5622 pattern FloatingPointModeIEEEINTEL :: ExecutionMode pattern FloatingPointModeIEEEINTEL = ExecutionMode 5623 pattern MaxWorkgroupSizeINTEL :: ExecutionMode pattern MaxWorkgroupSizeINTEL = ExecutionMode 5893 pattern MaxWorkDimINTEL :: ExecutionMode pattern MaxWorkDimINTEL = ExecutionMode 5894 pattern NoGlobalOffsetINTEL :: ExecutionMode pattern NoGlobalOffsetINTEL = ExecutionMode 5895 pattern NumSIMDWorkitemsINTEL :: ExecutionMode pattern NumSIMDWorkitemsINTEL = ExecutionMode 5896 pattern SchedulerTargetFmaxMhzINTEL :: ExecutionMode pattern SchedulerTargetFmaxMhzINTEL = ExecutionMode 5903 pattern StreamingInterfaceINTEL :: ExecutionMode pattern StreamingInterfaceINTEL = ExecutionMode 6154 pattern NamedBarrierCountINTEL :: ExecutionMode pattern NamedBarrierCountINTEL = ExecutionMode 6417 toName :: IsString a => ExecutionMode -> a toName x = case x of Invocations -> "Invocations" SpacingEqual -> "SpacingEqual" SpacingFractionalEven -> "SpacingFractionalEven" SpacingFractionalOdd -> "SpacingFractionalOdd" VertexOrderCw -> "VertexOrderCw" VertexOrderCcw -> "VertexOrderCcw" PixelCenterInteger -> "PixelCenterInteger" OriginUpperLeft -> "OriginUpperLeft" OriginLowerLeft -> "OriginLowerLeft" EarlyFragmentTests -> "EarlyFragmentTests" PointMode -> "PointMode" Xfb -> "Xfb" DepthReplacing -> "DepthReplacing" DepthGreater -> "DepthGreater" DepthLess -> "DepthLess" DepthUnchanged -> "DepthUnchanged" LocalSize -> "LocalSize" LocalSizeHint -> "LocalSizeHint" InputPoints -> "InputPoints" InputLines -> "InputLines" InputLinesAdjacency -> "InputLinesAdjacency" Triangles -> "Triangles" InputTrianglesAdjacency -> "InputTrianglesAdjacency" Quads -> "Quads" Isolines -> "Isolines" OutputVertices -> "OutputVertices" OutputPoints -> "OutputPoints" OutputLineStrip -> "OutputLineStrip" OutputTriangleStrip -> "OutputTriangleStrip" VecTypeHint -> "VecTypeHint" ContractionOff -> "ContractionOff" Initializer -> "Initializer" Finalizer -> "Finalizer" SubgroupSize -> "SubgroupSize" SubgroupsPerWorkgroup -> "SubgroupsPerWorkgroup" SubgroupsPerWorkgroupId -> "SubgroupsPerWorkgroupId" LocalSizeId -> "LocalSizeId" LocalSizeHintId -> "LocalSizeHintId" SubgroupUniformControlFlowKHR -> "SubgroupUniformControlFlowKHR" PostDepthCoverage -> "PostDepthCoverage" DenormPreserve -> "DenormPreserve" DenormFlushToZero -> "DenormFlushToZero" SignedZeroInfNanPreserve -> "SignedZeroInfNanPreserve" RoundingModeRTE -> "RoundingModeRTE" RoundingModeRTZ -> "RoundingModeRTZ" EarlyAndLateFragmentTestsAMD -> "EarlyAndLateFragmentTestsAMD" StencilRefReplacingEXT -> "StencilRefReplacingEXT" StencilRefUnchangedFrontAMD -> "StencilRefUnchangedFrontAMD" StencilRefGreaterFrontAMD -> "StencilRefGreaterFrontAMD" StencilRefLessFrontAMD -> "StencilRefLessFrontAMD" StencilRefUnchangedBackAMD -> "StencilRefUnchangedBackAMD" StencilRefGreaterBackAMD -> "StencilRefGreaterBackAMD" StencilRefLessBackAMD -> "StencilRefLessBackAMD" OutputLinesEXT -> "OutputLinesEXT" OutputLinesNV -> "OutputLinesNV" OutputPrimitivesEXT -> "OutputPrimitivesEXT" OutputPrimitivesNV -> "OutputPrimitivesNV" DerivativeGroupQuadsNV -> "DerivativeGroupQuadsNV" DerivativeGroupLinearNV -> "DerivativeGroupLinearNV" OutputTrianglesEXT -> "OutputTrianglesEXT" OutputTrianglesNV -> "OutputTrianglesNV" PixelInterlockOrderedEXT -> "PixelInterlockOrderedEXT" PixelInterlockUnorderedEXT -> "PixelInterlockUnorderedEXT" SampleInterlockOrderedEXT -> "SampleInterlockOrderedEXT" SampleInterlockUnorderedEXT -> "SampleInterlockUnorderedEXT" ShadingRateInterlockOrderedEXT -> "ShadingRateInterlockOrderedEXT" ShadingRateInterlockUnorderedEXT -> "ShadingRateInterlockUnorderedEXT" SharedLocalMemorySizeINTEL -> "SharedLocalMemorySizeINTEL" RoundingModeRTPINTEL -> "RoundingModeRTPINTEL" RoundingModeRTNINTEL -> "RoundingModeRTNINTEL" FloatingPointModeALTINTEL -> "FloatingPointModeALTINTEL" FloatingPointModeIEEEINTEL -> "FloatingPointModeIEEEINTEL" MaxWorkgroupSizeINTEL -> "MaxWorkgroupSizeINTEL" MaxWorkDimINTEL -> "MaxWorkDimINTEL" NoGlobalOffsetINTEL -> "NoGlobalOffsetINTEL" NumSIMDWorkitemsINTEL -> "NumSIMDWorkitemsINTEL" SchedulerTargetFmaxMhzINTEL -> "SchedulerTargetFmaxMhzINTEL" StreamingInterfaceINTEL -> "StreamingInterfaceINTEL" NamedBarrierCountINTEL -> "NamedBarrierCountINTEL" unknown -> fromString $ "ExecutionMode " ++ show unknown instance Show ExecutionMode where show = toName fromName :: (IsString a, Eq a) => a -> Maybe ExecutionMode fromName x = case x of "Invocations" -> Just Invocations "SpacingEqual" -> Just SpacingEqual "SpacingFractionalEven" -> Just SpacingFractionalEven "SpacingFractionalOdd" -> Just SpacingFractionalOdd "VertexOrderCw" -> Just VertexOrderCw "VertexOrderCcw" -> Just VertexOrderCcw "PixelCenterInteger" -> Just PixelCenterInteger "OriginUpperLeft" -> Just OriginUpperLeft "OriginLowerLeft" -> Just OriginLowerLeft "EarlyFragmentTests" -> Just EarlyFragmentTests "PointMode" -> Just PointMode "Xfb" -> Just Xfb "DepthReplacing" -> Just DepthReplacing "DepthGreater" -> Just DepthGreater "DepthLess" -> Just DepthLess "DepthUnchanged" -> Just DepthUnchanged "LocalSize" -> Just LocalSize "LocalSizeHint" -> Just LocalSizeHint "InputPoints" -> Just InputPoints "InputLines" -> Just InputLines "InputLinesAdjacency" -> Just InputLinesAdjacency "Triangles" -> Just Triangles "InputTrianglesAdjacency" -> Just InputTrianglesAdjacency "Quads" -> Just Quads "Isolines" -> Just Isolines "OutputVertices" -> Just OutputVertices "OutputPoints" -> Just OutputPoints "OutputLineStrip" -> Just OutputLineStrip "OutputTriangleStrip" -> Just OutputTriangleStrip "VecTypeHint" -> Just VecTypeHint "ContractionOff" -> Just ContractionOff "Initializer" -> Just Initializer "Finalizer" -> Just Finalizer "SubgroupSize" -> Just SubgroupSize "SubgroupsPerWorkgroup" -> Just SubgroupsPerWorkgroup "SubgroupsPerWorkgroupId" -> Just SubgroupsPerWorkgroupId "LocalSizeId" -> Just LocalSizeId "LocalSizeHintId" -> Just LocalSizeHintId "SubgroupUniformControlFlowKHR" -> Just SubgroupUniformControlFlowKHR "PostDepthCoverage" -> Just PostDepthCoverage "DenormPreserve" -> Just DenormPreserve "DenormFlushToZero" -> Just DenormFlushToZero "SignedZeroInfNanPreserve" -> Just SignedZeroInfNanPreserve "RoundingModeRTE" -> Just RoundingModeRTE "RoundingModeRTZ" -> Just RoundingModeRTZ "EarlyAndLateFragmentTestsAMD" -> Just EarlyAndLateFragmentTestsAMD "StencilRefReplacingEXT" -> Just StencilRefReplacingEXT "StencilRefUnchangedFrontAMD" -> Just StencilRefUnchangedFrontAMD "StencilRefGreaterFrontAMD" -> Just StencilRefGreaterFrontAMD "StencilRefLessFrontAMD" -> Just StencilRefLessFrontAMD "StencilRefUnchangedBackAMD" -> Just StencilRefUnchangedBackAMD "StencilRefGreaterBackAMD" -> Just StencilRefGreaterBackAMD "StencilRefLessBackAMD" -> Just StencilRefLessBackAMD "OutputLinesEXT" -> Just OutputLinesEXT "OutputLinesNV" -> Just OutputLinesNV "OutputPrimitivesEXT" -> Just OutputPrimitivesEXT "OutputPrimitivesNV" -> Just OutputPrimitivesNV "DerivativeGroupQuadsNV" -> Just DerivativeGroupQuadsNV "DerivativeGroupLinearNV" -> Just DerivativeGroupLinearNV "OutputTrianglesEXT" -> Just OutputTrianglesEXT "OutputTrianglesNV" -> Just OutputTrianglesNV "PixelInterlockOrderedEXT" -> Just PixelInterlockOrderedEXT "PixelInterlockUnorderedEXT" -> Just PixelInterlockUnorderedEXT "SampleInterlockOrderedEXT" -> Just SampleInterlockOrderedEXT "SampleInterlockUnorderedEXT" -> Just SampleInterlockUnorderedEXT "ShadingRateInterlockOrderedEXT" -> Just ShadingRateInterlockOrderedEXT "ShadingRateInterlockUnorderedEXT" -> Just ShadingRateInterlockUnorderedEXT "SharedLocalMemorySizeINTEL" -> Just SharedLocalMemorySizeINTEL "RoundingModeRTPINTEL" -> Just RoundingModeRTPINTEL "RoundingModeRTNINTEL" -> Just RoundingModeRTNINTEL "FloatingPointModeALTINTEL" -> Just FloatingPointModeALTINTEL "FloatingPointModeIEEEINTEL" -> Just FloatingPointModeIEEEINTEL "MaxWorkgroupSizeINTEL" -> Just MaxWorkgroupSizeINTEL "MaxWorkDimINTEL" -> Just MaxWorkDimINTEL "NoGlobalOffsetINTEL" -> Just NoGlobalOffsetINTEL "NumSIMDWorkitemsINTEL" -> Just NumSIMDWorkitemsINTEL "SchedulerTargetFmaxMhzINTEL" -> Just SchedulerTargetFmaxMhzINTEL "StreamingInterfaceINTEL" -> Just StreamingInterfaceINTEL "NamedBarrierCountINTEL" -> Just NamedBarrierCountINTEL _unknown -> Nothing instance Read ExecutionMode where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s