module Foreign.OpenCL.Bindings.Synchronization (
enqueueBarrier, enqueueMarker
, enqueueWaitForEvents, finish
) where
import Foreign
import Foreign.C.Types
import Foreign.OpenCL.Bindings.Internal.Types
import Foreign.OpenCL.Bindings.Internal.Finalizers
import Foreign.OpenCL.Bindings.Internal.Error
import Foreign.OpenCL.Bindings.Internal.Util
enqueueMarker :: CommandQueue -> IO Event
enqueueMarker queue =
withForeignPtr queue $ \queue_ptr ->
alloca $ \evptr -> do
checkClError_ "clEnqueueMarker" =<<
clEnqueueMarker queue_ptr evptr
attachFinalizer =<< peek evptr
enqueueBarrier :: CommandQueue -> IO ()
enqueueBarrier queue =
withForeignPtr queue $ \queue_ptr ->
checkClError_ "clEnqueueBarrier" =<<
clEnqueueBarrier queue_ptr
enqueueWaitForEvents :: CommandQueue -> [Event] -> IO ()
enqueueWaitForEvents queue events =
withForeignPtr queue $ \queue_ptr ->
withForeignPtrs events $ \event_ptrs ->
withArrayLen event_ptrs $ \n event_array ->
checkClError_ "clEnqueueWaitForEvents" =<<
clEnqueueWaitForEvents queue_ptr (fromIntegral n) event_array
finish :: CommandQueue -> IO ()
finish queue =
withForeignPtr queue $ \queue_ptr ->
checkClError_ "clFinish" =<< clFinish queue_ptr
foreign import ccall unsafe "Foreign/OpenCL/Bindings/Synchronization.chs.h clEnqueueMarker"
clEnqueueMarker :: ((Ptr (CCommandQueue)) -> ((Ptr (Ptr (CEvent))) -> (IO CInt)))
foreign import ccall unsafe "Foreign/OpenCL/Bindings/Synchronization.chs.h clEnqueueBarrier"
clEnqueueBarrier :: ((Ptr (CCommandQueue)) -> (IO CInt))
foreign import ccall unsafe "Foreign/OpenCL/Bindings/Synchronization.chs.h clEnqueueWaitForEvents"
clEnqueueWaitForEvents :: ((Ptr (CCommandQueue)) -> (CUInt -> ((Ptr (Ptr (CEvent))) -> (IO CInt))))
foreign import ccall unsafe "Foreign/OpenCL/Bindings/Synchronization.chs.h clFinish"
clFinish :: ((Ptr (CCommandQueue)) -> (IO CInt))