| Description | |
|---|---|
| src | The buffer slice to read from. |
| dst | The array in the CPU memory that the contents of the buffer should be written to. The array must remain valid until the read operation is complete. Related content: IDeviceContext.Wait. |
| id | The ID of the event to use to track completion of the read. |
Read contents of a buffer from the context.
The memory that the BufferSlice<T0> points to can be transferred into a NativeArray<T0>. This is an asynchronous operation. Pass an EventID created with IDeviceContext.CreateEvent to track the completion status, if desired. This method returns immediately after enqueuing the command in the context.
Note: EventID is single-use. Once an EventID has been passed to this function, it may not be passed to subsequent IDeviceContext.WriteBuffer or IDeviceContext.ReadBuffer calls. Doing so will result in undefined behavior.
IDeviceContext ctx = new RadeonRaysContext();
ctx.Initialize();
uint length = 8;
var input = new NativeArray<byte>((int)length, Allocator.Persistent);
for (int i = 0; i < length; ++i)
input[i] = (byte)i;
var output = new NativeArray<byte>((int)length, Allocator.Persistent);
BufferID id = ctx.CreateBuffer(8);
var writeEvent = ctx.CreateEvent();
ctx.WriteBuffer(id.Slice<byte>(), input, writeEvent);
var readEvent = ctx.CreateEvent();
ctx.ReadBuffer(id.Slice<byte>(), output, readEvent);
bool flushOk = ctx.Flush();
Assert.IsTrue(flushOk);
bool eventOk = ctx.Wait(writeEvent);
Assert.IsTrue(eventOk);
// Contents of the buffer is now available in the CPU side memory array output.
input.Dispose();
Assert.IsTrue(ctx.IsCompleted(readEvent));
ctx.DestroyEvent(readEvent);
ctx.DestroyEvent(writeEvent);
ctx.DestroyBuffer(id);
for (int i = 0; i < length; ++i)
Assert.AreEqual((byte)i, output[i]);
output.Dispose();
ctx.Dispose();
How to read back a buffer.