public extern static int clEnqueueWriteBuffer( IntPtr command_queue, IntPtr buffer, CL_Bool blocking_write, IntPtr offset, IntPtr cb, IntPtr ptr, uint num_events_in_wait_list, IntPtr[] event_wait_list, IntPtr event_wait);
public extern static IntPtr clEnqueueMapBuffer( IntPtr command_queue, IntPtr buffer, CL_Bool blocking_map, MapFlags map_flags, IntPtr offset, IntPtr cb, uint num_events_in_wait_list, IntPtr[] event_wait_list, IntPtr event_wait, out int errcode_ret);
void ReadBufferInternal(bool blocking, bool outputEventHandle, Memory buf, int buf_offset, object dst, int dst_offset, int size, EventHandle[] wait_list, out EventHandle eventHandle) { IntPtr dst_handle; GCHandle dst_gc_handle; if (dst is IntPtr) { dst_handle = (IntPtr)dst; dst_gc_handle = new GCHandle(); } else { dst_gc_handle = GCHandle.Alloc(dst, GCHandleType.Pinned); dst_handle = dst_gc_handle.AddrOfPinnedObject(); } try { IntPtr dst_ptr = new IntPtr(dst_handle.ToInt64() + dst_offset); IntPtr[] waits = EventHandle.ToIntPtrArray(wait_list); uint num_waits = waits == null ? 0 : (uint)waits.Length; CL_Bool is_blocking = (blocking ? CL_Bool.True : CL_Bool.False); if (outputEventHandle) { IntPtr event_handle; OpenCLException.Check(Native.clEnqueueReadBuffer(_handle, buf.Handle, is_blocking, new IntPtr(buf_offset), new IntPtr(size), dst_ptr, num_waits, waits, out event_handle)); eventHandle = new EventHandle(event_handle); } else { OpenCLException.Check(Native.clEnqueueReadBuffer(_handle, buf.Handle, is_blocking, new IntPtr(buf_offset), new IntPtr(size), dst_ptr, num_waits, waits, IntPtr.Zero)); eventHandle = null; } } finally { if (dst_gc_handle.IsAllocated) { dst_gc_handle.Free(); } } }
public extern static IntPtr clEnqueueMapBuffer ( IntPtr command_queue, IntPtr buffer, CL_Bool blocking_map, MapFlags map_flags, IntPtr offset, IntPtr cb, uint num_events_in_wait_list, IntPtr[] event_wait_list, IntPtr event_wait, out int errcode_ret);
public extern static int clEnqueueWriteBuffer ( IntPtr command_queue, IntPtr buffer, CL_Bool blocking_write, IntPtr offset, IntPtr cb, IntPtr ptr, uint num_events_in_wait_list, IntPtr[] event_wait_list, IntPtr event_wait);