Exemplo n.º 1
0
 public PendingFlushBuffer(BufferPools.MemoryHandle src, TransferArguments arguments,
                           IPinnableBindableBuffer dst, ulong dstOffset, ulong dstCount) : base(src, arguments)
 {
     Destination = dst;
     Offset      = dstOffset;
     Size        = dstCount;
     Destination.IncreasePins();
 }
Exemplo n.º 2
0
        public unsafe void Transfer(IPinnableBindableBuffer dest, ulong destOffset, void *data, ulong count,
                                    TransferArguments?arguments = null)
        {
            CheckArgs(arguments);
            var handle = Device.BufferPools.Allocate(_transferType, Usage, Flags, count);

            Buffer.MemoryCopy(data, handle.MappedMemory.Handle.ToPointer(), handle.Size, count);
            if (!handle.BackingMemory.MemoryType.HostCoherent)
            {
                handle.MappedMemory.FlushRange(0, count);
            }
            _pendingFlush.Enqueue(new PendingFlushBuffer(handle, arguments ?? TransferArguments.Null, dest, destOffset,
                                                         count));
            _pendingFlushQueued.Set();
        }