module System.OpenCL.Raw.V10.OutOfOrder
(clEnqueueMarker
,clEnqueueWaitForEvents
,clEnqueueBarrier)
where
import System.OpenCL.Raw.V10.Types
import System.OpenCL.Raw.V10.Errors
import System.OpenCL.Raw.V10.Utils
import Foreign
import Control.Applicative
import Data.Maybe
foreign import ccall "clEnqueueMarker" raw_clEnqueueMarker :: CommandQueue -> Ptr Event -> IO CLint
clEnqueueMarker :: CommandQueue -> IO (Either ErrorCode Event)
clEnqueueMarker queue = alloca $ \eventP -> do
err <- wrapError $ raw_clEnqueueMarker queue eventP
if err == Nothing
then Right <$> peek eventP
else return $ Left . fromJust $ err
foreign import ccall "clEnqueueWaitForEvents" raw_clEnqueueWaitForEvents :: CommandQueue -> CLuint -> Ptr Event -> IO CLint
clEnqueueWaitForEvents :: CommandQueue -> [Event] -> IO (Maybe ErrorCode)
clEnqueueWaitForEvents queue events =
allocaArray num_events $ \eventsP -> do
pokeArray eventsP events
wrapError $ raw_clEnqueueWaitForEvents queue (fromIntegral num_events) eventsP
where num_events = length events
foreign import ccall "clEnqueueBarrier" raw_clEnqueueBarrier :: CommandQueue -> IO CLint
clEnqueueBarrier :: CommandQueue -> IO (Maybe ErrorCode)
clEnqueueBarrier queue = wrapError $ raw_clEnqueueBarrier queue