NVIDIA
Данный набор сэмплов демонстрирует, как взаимодействовать с внешним графическим API через Unigine API (ResourceExternalMemory и ResourceFence). Хотя примеры показывают взаимодействие с NVIDIA CUDA Toolkit, вы можете использовать их в качестве основы для интеграции Engine GAPI (Vulkan, DX11, DX12) с другими GAPI (OpenGL, DX, CUDA и т.д.), которые могут принимать дескриптор и импортировать примитив синхронизации (например, внешний семафор в CUDA).
Такой подход может помочь в настройке взаимодействия различных API с использованием разных GAPI, например, взаимодействия MediaFoundation с использованием DX11 с движком с использованием DX12 или Vulkan.
В примерах также показано, как извлекать данные непосредственно из видеопамяти без циклического переключения ЦП и обрабатывать их с использованием графического API, отличного от движка.
Разница в производительности передачи текстур с GPU на CPU через CUDA 12.3 и через движок представлена в таблице ниже (тестировалось на наших рабочих конфигурациях). Средний прирост производительности при использовании CUDA составил от x10 до x24 в зависимости от разрешения вьюпорта.
Вы можете проверить результаты на своём компьютере, запустив сэмпл CUDATextureTransfer и включив Профилировщик.
CUDAMeshDynamic#
Vertices of a shared dynamic mesh are processed on GPU using CUDA.
To build the sample, use CUDA Toolkit v12.3.
On Linux: after installing the CUDA Toolkit, make sure that the PATH environment variable includes /usr/local/cuda-12.2/bin.
SDK Path: <SDK_INSTALLATION>source\samples\3rdparty\CUDAMeshDynamic
CUDAStructuredBufferWrite#
Particles in a shared structured buffer are updated on GPU using CUDA, and rasterized manually using Unigine Material with Compute Shader.
To build the sample, use CUDA Toolkit v12.3.
On Linux: after installing the CUDA Toolkit, make sure that the PATH environment variable includes /usr/local/cuda-12.2/bin.
SDK Path: <SDK_INSTALLATION>source\samples\3rdparty\StructuredBufferWrite
CUDATextureTransfer#
A shared texture is processed with CUDA and copied from video memory to RAM into Unigine Image.
To build the sample, use CUDA Toolkit v12.3.
On Linux: after installing the CUDA Toolkit, make sure that the PATH environment variable includes /usr/local/cuda-12.2/bin.
SDK Path: <SDK_INSTALLATION>source\samples\3rdparty\CUDATextureTransfer
CUDATextureWrite#
A shared texture is processed with CUDA and displayed on the Unigine Object as a texture on a cube.
To build the sample, use CUDA Toolkit v12.3.
On Linux: after installing the CUDA Toolkit, make sure that the PATH environment variable includes /usr/local/cuda-12.2/bin.
SDK Path: <SDK_INSTALLATION>source\samples\3rdparty\CUDATextureWrite