示例#1
0
        public Event EnqueueMigrateBuffer(
            Buffer[] buffers, MemoryMigrationFlags flags, Event[] events)
        {
            ClHelper.ThrowNullException(Handle);

            if (buffers == null)
            {
                throw new ArgumentNullException("buffers");
            }

            unsafe
            {
                var buffer_list = stackalloc IntPtr[buffers.Length];

                for (int i = 0; i < buffers.Length; ++i)
                {
                    buffer_list[i] = buffers[i].Handle;
                }

                int     num_events_in_wait_list = events == null ? 0 : events.Length;
                IntPtr *wait_list = stackalloc IntPtr[num_events_in_wait_list];
                for (int i = 0; i < num_events_in_wait_list; ++i)
                {
                    wait_list[i] = events[i].Handle;
                }
                if (events == null)
                {
                    wait_list = null;
                }

                IntPtr event_ptr = IntPtr.Zero;

                ClHelper.GetError(Cl.EnqueueMigrateMemObjects(Handle,
                                                              (uint)buffers.Length, buffer_list, (ulong)flags,
                                                              (uint)num_events_in_wait_list, wait_list, &event_ptr));

                return(new Event(event_ptr));
            }
        }