module Data.SpirV.Enum.ImageOperands 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 ImageOperands = ImageOperands Word32 deriving (Eq, Ord, Storable, Bits) pattern Bias :: ImageOperands pattern Bias = ImageOperands 0x1 pattern Lod :: ImageOperands pattern Lod = ImageOperands 0x2 pattern Grad :: ImageOperands pattern Grad = ImageOperands 0x4 pattern ConstOffset :: ImageOperands pattern ConstOffset = ImageOperands 0x8 pattern Offset :: ImageOperands pattern Offset = ImageOperands 0x10 pattern ConstOffsets :: ImageOperands pattern ConstOffsets = ImageOperands 0x20 pattern Sample :: ImageOperands pattern Sample = ImageOperands 0x40 pattern MinLod :: ImageOperands pattern MinLod = ImageOperands 0x80 pattern MakeTexelAvailable :: ImageOperands pattern MakeTexelAvailable = ImageOperands 0x100 pattern MakeTexelAvailableKHR :: ImageOperands pattern MakeTexelAvailableKHR = ImageOperands 0x100 pattern MakeTexelVisible :: ImageOperands pattern MakeTexelVisible = ImageOperands 0x200 pattern MakeTexelVisibleKHR :: ImageOperands pattern MakeTexelVisibleKHR = ImageOperands 0x200 pattern NonPrivateTexel :: ImageOperands pattern NonPrivateTexel = ImageOperands 0x400 pattern NonPrivateTexelKHR :: ImageOperands pattern NonPrivateTexelKHR = ImageOperands 0x400 pattern VolatileTexel :: ImageOperands pattern VolatileTexel = ImageOperands 0x800 pattern VolatileTexelKHR :: ImageOperands pattern VolatileTexelKHR = ImageOperands 0x800 pattern SignExtend :: ImageOperands pattern SignExtend = ImageOperands 0x1000 pattern ZeroExtend :: ImageOperands pattern ZeroExtend = ImageOperands 0x2000 pattern Nontemporal :: ImageOperands pattern Nontemporal = ImageOperands 0x4000 pattern Offsets :: ImageOperands pattern Offsets = ImageOperands 0x10000 toName :: IsString a => ImageOperands -> a toName x = case x of Bias -> "Bias" Lod -> "Lod" Grad -> "Grad" ConstOffset -> "ConstOffset" Offset -> "Offset" ConstOffsets -> "ConstOffsets" Sample -> "Sample" MinLod -> "MinLod" MakeTexelAvailable -> "MakeTexelAvailable" MakeTexelAvailableKHR -> "MakeTexelAvailableKHR" MakeTexelVisible -> "MakeTexelVisible" MakeTexelVisibleKHR -> "MakeTexelVisibleKHR" NonPrivateTexel -> "NonPrivateTexel" NonPrivateTexelKHR -> "NonPrivateTexelKHR" VolatileTexel -> "VolatileTexel" VolatileTexelKHR -> "VolatileTexelKHR" SignExtend -> "SignExtend" ZeroExtend -> "ZeroExtend" Nontemporal -> "Nontemporal" Offsets -> "Offsets" unknown -> fromString $ "ImageOperands " ++ show unknown instance Show ImageOperands where show = toName fromName :: (IsString a, Eq a) => a -> Maybe ImageOperands fromName x = case x of "Bias" -> Just Bias "Lod" -> Just Lod "Grad" -> Just Grad "ConstOffset" -> Just ConstOffset "Offset" -> Just Offset "ConstOffsets" -> Just ConstOffsets "Sample" -> Just Sample "MinLod" -> Just MinLod "MakeTexelAvailable" -> Just MakeTexelAvailable "MakeTexelAvailableKHR" -> Just MakeTexelAvailableKHR "MakeTexelVisible" -> Just MakeTexelVisible "MakeTexelVisibleKHR" -> Just MakeTexelVisibleKHR "NonPrivateTexel" -> Just NonPrivateTexel "NonPrivateTexelKHR" -> Just NonPrivateTexelKHR "VolatileTexel" -> Just VolatileTexel "VolatileTexelKHR" -> Just VolatileTexelKHR "SignExtend" -> Just SignExtend "ZeroExtend" -> Just ZeroExtend "Nontemporal" -> Just Nontemporal "Offsets" -> Just Offsets _unknown -> Nothing instance Read ImageOperands where readPrec = Read.parens do Lex.Ident s <- Read.lexP maybe pfail pure $ fromName s