Exemple #1
0
        public Event EnqueueCopyImage(
            Image source, Ibasa.Numerics.Vector3ul sourceOrigin,
            Image destination, Ibasa.Numerics.Vector3ul destinationOrigin,
            Ibasa.Numerics.Vector3ul region,
            ulong rowPitch, ulong slicePitch,
            Event[] events)
        {
            ClHelper.ThrowNullException(Handle);

            if (source == Image.Null)
            {
                throw new ArgumentNullException("source");
            }
            if (destination == Image.Null)
            {
                throw new ArgumentNullException("destination");
            }

            unsafe
            {
                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;

                UIntPtr *sourceOrigin_ptr = stackalloc UIntPtr[3];
                sourceOrigin_ptr[0] = new UIntPtr(sourceOrigin.X);
                sourceOrigin_ptr[1] = new UIntPtr(sourceOrigin.Y);
                sourceOrigin_ptr[2] = new UIntPtr(sourceOrigin.Z);

                UIntPtr *destinationOrigin_ptr = stackalloc UIntPtr[3];
                destinationOrigin_ptr[0] = new UIntPtr(destinationOrigin.X);
                destinationOrigin_ptr[1] = new UIntPtr(destinationOrigin.Y);
                destinationOrigin_ptr[2] = new UIntPtr(destinationOrigin.Z);

                UIntPtr *region_ptr = stackalloc UIntPtr[3];
                region_ptr[0] = new UIntPtr(region.X);
                region_ptr[1] = new UIntPtr(region.Y);
                region_ptr[2] = new UIntPtr(region.Z);

                ClHelper.GetError(Cl.EnqueueCopyImage(Handle,
                                                      source.Handle, destination.Handle,
                                                      sourceOrigin_ptr, destinationOrigin_ptr, region_ptr,
                                                      (uint)num_events_in_wait_list, wait_list, &event_ptr));

                return(new Event(event_ptr));
            }
        }
Exemple #2
0
        public Event EnqueueFillBuffer(Image image,
                                       IntPtr fillColor,
                                       Ibasa.Numerics.Vector3ul origin,
                                       Ibasa.Numerics.Vector3ul region,
                                       ulong offset, ulong size, Event[] events)
        {
            ClHelper.ThrowNullException(Handle);

            if (image == Image.Null)
            {
                throw new ArgumentNullException("image");
            }
            if (fillColor == IntPtr.Zero)
            {
                throw new ArgumentNullException("fillColor");
            }

            unsafe
            {
                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;

                UIntPtr *origin_ptr = stackalloc UIntPtr[3];
                origin_ptr[0] = new UIntPtr(origin.X);
                origin_ptr[1] = new UIntPtr(origin.Y);
                origin_ptr[2] = new UIntPtr(origin.Z);

                UIntPtr *region_ptr = stackalloc UIntPtr[3];
                region_ptr[0] = new UIntPtr(region.X);
                region_ptr[1] = new UIntPtr(region.Y);
                region_ptr[2] = new UIntPtr(region.Z);

                ClHelper.GetError(Cl.EnqueueFillImage(Handle, image.Handle,
                                                      fillColor.ToPointer(), origin_ptr, region_ptr,
                                                      (uint)num_events_in_wait_list, wait_list, &event_ptr));

                return(new Event(event_ptr));
            }
        }
Exemple #3
0
        public Event EnqueueWriteImage(Image image, bool blocking,
                                       Ibasa.Numerics.Vector3ul origin,
                                       Ibasa.Numerics.Vector3ul region,
                                       ulong rowPitch, ulong slicePitch,
                                       IntPtr source, Event[] events)
        {
            ClHelper.ThrowNullException(Handle);

            if (image == Image.Null)
            {
                throw new ArgumentNullException("image");
            }
            if (source == IntPtr.Zero)
            {
                throw new ArgumentNullException("source");
            }

            unsafe
            {
                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;

                UIntPtr *origin_ptr = stackalloc UIntPtr[3];
                origin_ptr[0] = new UIntPtr(origin.X);
                origin_ptr[1] = new UIntPtr(origin.Y);
                origin_ptr[2] = new UIntPtr(origin.Z);

                UIntPtr *region_ptr = stackalloc UIntPtr[3];
                region_ptr[0] = new UIntPtr(region.X);
                region_ptr[1] = new UIntPtr(region.Y);
                region_ptr[2] = new UIntPtr(region.Z);

                ClHelper.GetError(Cl.EnqueueReadImage(Handle, image.Handle,
                                                      blocking ? 1u : 0u, origin_ptr, region_ptr, new UIntPtr(rowPitch), new UIntPtr(slicePitch),
                                                      source.ToPointer(), (uint)num_events_in_wait_list, wait_list, &event_ptr));

                return(new Event(event_ptr));
            }
        }