Exemple #1
0
        public Event EnqueueFillBuffer <T>(Mem <T> buffer, T[] pattern, uint offset, uint length, Event[] eventWaitList) where T : struct
        {
            var numEvents = 0;

            IntPtr[] events = null;
            if (eventWaitList != null)
            {
                numEvents = eventWaitList.Length;
                events    = Event.ToIntPtr(eventWaitList);
            }
            IntPtr   result = IntPtr.Zero;
            GCHandle gch    = GCHandle.Alloc(pattern, GCHandleType.Pinned);

            try {
                var error = NativeMethods.clEnqueueFillBuffer(
                    this.handle,
                    buffer.handle,
                    gch.AddrOfPinnedObject(),
                    (IntPtr)(Marshal.SizeOf <T>() * pattern.Length),
                    (IntPtr)offset,
                    (IntPtr)length,
                    (uint)numEvents,
                    events,
                    out result);
                if (error != ErrorCode.Success)
                {
                    throw new OpenClException(error);
                }
            }
            finally {
                gch.Free();
            }
            return(new Event(result));
        }