OpenCLWrappers-0.0.0: System/OpenCL/Wrappers/EventObject.hs
module System.OpenCL.Wrappers.EventObject
(clWaitForEvents
,clGetEventInfo
,clRetainEvent
,clReleaseEvent
,clGetEventProfilingInfo)
where
import System.OpenCL.Wrappers.Types
import System.OpenCL.Wrappers.Utils
import System.OpenCL.Wrappers.Raw
import Foreign.Marshal.Array(withArray)
clWaitForEvents :: [Event] -> IO (Maybe ErrorCode)
clWaitForEvents evts = withArray evts (\eventP -> wrapError $ raw_clWaitForEvents (fromIntegral nEvents) eventP)
where nEvents = length evts
clGetEventInfo :: Event -> EventInfo -> IO (Either ErrorCode CLEventInfoRetval)
clGetEventInfo obj (EventInfo param_name) = wrapGetInfo (raw_clGetEventInfo obj param_name) >>=
either (return.Left) (\(x,size) -> fmap Right $ let c = (EventInfo param_name) in case () of
()
| c == clEventCommandQueue -> peekOneInfo EventInfoRetvalCommandQueue x
| c == clEventCommandType -> peekOneInfo EventInfoRetvalCommandType x
| c == clEventCommandExecutionStatus -> peekOneInfo EventInfoRetvalCLint x
| c == clEventReferenceCount -> peekOneInfo EventInfoRetvalCLuint x )
clRetainEvent :: Event -> IO (Maybe ErrorCode)
clRetainEvent evt = wrapError $ raw_clRetainEvent evt
clReleaseEvent :: Event -> IO (Maybe ErrorCode)
clReleaseEvent evt = wrapError $ raw_clReleaseEvent evt
clGetEventProfilingInfo :: Event -> ProfilingInfo -> IO (Either ErrorCode CLEventProfilingInfoRetval)
clGetEventProfilingInfo obj (ProfilingInfo param_name) = wrapGetInfo (raw_clGetEventProfilingInfo obj param_name) >>=
either (return.Left) (\(x,size) -> fmap Right $ let c = (ProfilingInfo param_name) in case () of
()
| c == clProfilingCommandQueued -> peekOneInfo EventProfilingInfoRetvalCLulong x
| c == clProfilingCommandSubmit -> peekOneInfo EventProfilingInfoRetvalCLulong x
| c == clProfilingCommandStart -> peekOneInfo EventProfilingInfoRetvalCLulong x
| c == clProfilingCommandEnd -> peekOneInfo EventProfilingInfoRetvalCLulong x )