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

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

data SamplerAddressingMode = None 
                           | ClampToEdge 
                           | Clamp 
                           | Repeat 
                           | RepeatMirrored
  deriving(Read, Show, Eq, Ord)

instance SpirEnum SamplerAddressingMode Word32 where
  toWord None = 0
  toWord ClampToEdge = 1
  toWord Clamp = 2
  toWord Repeat = 3
  toWord RepeatMirrored = 4

  fromWord 0 = Just None
  fromWord 1 = Just ClampToEdge
  fromWord 2 = Just Clamp
  fromWord 3 = Just Repeat
  fromWord 4 = Just RepeatMirrored
  fromWord _ = Nothing

  requiredCapabilities None = [Capability.Kernel]
  requiredCapabilities ClampToEdge = [Capability.Kernel]
  requiredCapabilities Clamp = [Capability.Kernel]
  requiredCapabilities Repeat = [Capability.Kernel]
  requiredCapabilities RepeatMirrored = [Capability.Kernel]