Unity 6.3
0 онлайн 76 гостей 3 в системе
Вход

IDeviceContext

интерфейс в UnityEngine.LightTransport

Описание

Обеспечивает слой абстракции для управления памятью, синхронизации и вычислительных операций на различных устройствах.

Интерфейс IDeviceContext абстрагирует операции с памятью, синхронизацией и вычислениями для разных вычислительных устройств — CPU и GPU. Он позволяет писать код независимо от реализации, сохраняя доступ к оптимизациям конкретного устройства.

Unity предоставляет конкретные реализации этого интерфейса, в том числе: UnityEngine.LightTransport.RadeonRaysContext — для операций с ускорением на GPU через OpenCL 1.2.

Интерфейс управляет выделением буферов, асинхронными операциями через события и передачей данных между памятью хоста и устройства.

// Create and initialize a device context
using var context = new RadeonRaysContext();
bool initialized = context.Initialize();
Assert.IsTrue(initialized, "Failed to initialize context");

// Create a buffer and perform read/write operations BufferID bufferId = context.CreateBuffer(1024, sizeof(int)); var bufferSlice = new BufferSlice<int>(bufferId, 0);

// Write data asynchronously using var inputData = new NativeArray<int>(1024, Allocator.Persistent); for (int i = 0; i < inputData.Length; i++) inputData[i] = i;

var writeEvent = context.CreateEvent(); context.WriteBuffer(bufferSlice, inputData, writeEvent);

// Read data back using var outputData = new NativeArray<int>(1024, Allocator.Persistent); var readEvent = context.CreateEvent(); context.ReadBuffer(bufferSlice, outputData, readEvent);

// Flush and wait for completion context.Flush(); context.Wait(readEvent);

// Cleanup context.DestroyEvent(writeEvent); context.DestroyEvent(readEvent); context.DestroyBuffer(bufferId);

Открытые методы

Метод Описание
CreateBufferВыделяет новый буфер на устройстве с указанным количеством элементов и шагом.
CreateEventСоздает событие синхронизации для отслеживания асинхронных операций.
DestroyBufferУничтожить буфер с заданным ID.
DestroyEventУничтожить событие с заданным ID. Вы должны вызвать это, чтобы освободить временные ресурсы, связанные с событием. Попытка использовать событие после того, как оно было уничтожено, например, с помощью IDeviceContext.Wait или IDeviceContext.IsCompleted, приведет к неопределенному поведению.
FlushИнициирует выполнение всех очередных операций на устройстве.
InitializeИнициализация.
IsCompletedВозвращает true, если асинхронная операция завершена.
ReadBufferАсинхронное копирование данных из буфера устройства в память узла.
WaitДождитесь асинхронного события.
WriteBufferАсинхронное копирование данных из памяти узла в буфер устройства.