module Language.SpirV.StorageClass where
import Data.Word (Word32)
import Language.SpirV.SpirEnum
import qualified Language.SpirV.Capability as Capability
data StorageClass = UniformConstant
| Input
| Uniform
| Output
| WorkgroupLocal
| WorkgroupGlobal
| PrivateGlobal
| Function
| Generic
| AtomicCounter
| Image
deriving(Read, Show, Eq, Ord)
instance SpirEnum StorageClass Word32 where
toWord UniformConstant = 0
toWord Input = 1
toWord Uniform = 2
toWord Output = 3
toWord WorkgroupLocal = 4
toWord WorkgroupGlobal = 5
toWord PrivateGlobal = 6
toWord Function = 7
toWord Generic = 8
toWord AtomicCounter = 10
toWord Image = 11
fromWord 0 = Just UniformConstant
fromWord 1 = Just Input
fromWord 2 = Just Uniform
fromWord 3 = Just Output
fromWord 4 = Just WorkgroupLocal
fromWord 5 = Just WorkgroupGlobal
fromWord 6 = Just PrivateGlobal
fromWord 7 = Just Function
fromWord 8 = Just Generic
fromWord 10 = Just AtomicCounter
fromWord 11 = Just Image
fromWord _ = Nothing
requiredCapabilities Input = [Capability.Shader]
requiredCapabilities Uniform = [Capability.Shader]
requiredCapabilities Output = [Capability.Shader]
requiredCapabilities PrivateGlobal = [Capability.Shader]
requiredCapabilities Generic = [Capability.Kernel]
requiredCapabilities AtomicCounter = [Capability.AtomicStorage]
requiredCapabilities _ = []