{-# LANGUAGE MultiParamTypeClasses #-}
module Language.SpirV.KernelProfilingInfo 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_kernel_profiling_info_a_kernel_profiling_info Source for Kernel Profiling Info>
data KernelProfilingInfo =
    None
  | CmdExecTime
  deriving(Read, Show, Eq, Ord)

instance SpirEnum KernelProfilingInfo Word32 where
  toWord None = 0
  toWord CmdExecTime = 1

  fromWord 0 = Just None
  fromWord 1 = Just CmdExecTime
  fromWord _ = Nothing

  requiredCapabilities CmdExecTime = [Capability.Kernel]
  requiredCapabilities _ = []