Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


ReadBuffer

Read contents of a buffer from the context.
Read time 3 minutesLast updated 6 days ago

Definition

ReadBuffer<T>(BufferSlice<T>, NativeArray<T>)

Read contents of a buffer from the context.
public void ReadBuffer<T>(BufferSlice<T> src, NativeArray<T> dst) where T : struct

Parameters

The BufferSlice to read from.

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.

Remarks

The memory that the BufferSlice<T> points to can be transferred into a NativeArray<T>. 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.
using Unity.Collections;using UnityEngine.LightTransport;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.

ReadBuffer<T>(BufferSlice<T>, NativeArray<T>, EventID)

Read contents of a buffer from the context.
public void ReadBuffer<T>(BufferSlice<T> src, NativeArray<T> dst, EventID id) where T : struct

Parameters

The BufferSlice to read from.

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.

The ID of the event to use to track completion of the read.

Remarks

The memory that the BufferSlice<T> points to can be transferred into a NativeArray<T>. 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.
using Unity.Collections;using UnityEngine.LightTransport;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.