public PendingFlushBuffer(BufferPools.MemoryHandle src, TransferArguments arguments, IPinnableBindableBuffer dst, ulong dstOffset, ulong dstCount) : base(src, arguments) { Destination = dst; Offset = dstOffset; Size = dstCount; Destination.IncreasePins(); }
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(); }