ReadBuffer
Read contents of a buffer from the context.
Read time 3 minutesLast updated 6 days ago
Definition
- Type: Method
- Namespace: UnityEngine.LightTransport
- Assembly: UnityEditor.CoreModule
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.