{-# LANGUAGE MultiParamTypeClasses #-}
module Language.SpirV.Scope where

import Data.Word (Word32)
import Language.SpirV.SpirEnum
import qualified Language.SpirV.Capability as Capability


-- | <https:\/\/www.khronos.org\/registry\/spir-v\/specs\/1.0\/SPIRV.html#_a_id_scope__id_a_scope_lt_id_gt Source for Scope>
data Scope =
    CrossDevice
  | Device
  | Workgroup
  | Subgroup
  | Invocation
  deriving(Read, Show, Eq, Ord)

instance SpirEnum Scope Word32 where
  toWord CrossDevice = 0
  toWord Device = 1
  toWord Workgroup = 2
  toWord Subgroup = 3
  toWord Invocation = 4

  fromWord 0 = Just CrossDevice
  fromWord 1 = Just Device
  fromWord 2 = Just Workgroup
  fromWord 3 = Just Subgroup
  fromWord 4 = Just Invocation
  fromWord _ = Nothing

  
  requiredCapabilities _ = []