uz
DF
Daniil Fedorov
июля 8, 2025
Обновлено июля 8, 2025

UAV

UAV (Unordered Access View) — это механизм в API Direct3D и Vulkan, позволяющий шейдерам записывать данные в ресурсы памяти GPU без строгой последовательности доступа. В отличие от традиционных буферов и текстур, которые могут быть только для чтения в пиксельных и вершинных шейдерах, UAV поддерживают одновременное чтение и запись из нескольких потоков шейдера.

Основные особенности UAV

  1. Произвольный доступ — Данные могут быть записаны и прочитаны в любом порядке, что делает UAV удобным для параллельных вычислений.
  2. Поддержка нескольких типов ресурсов — UAV могут быть применены к текстурам, буферам и другим ресурсам памяти GPU.
  3. Использование в вычислительных шейдерах — UAV широко применяются в Compute Shader, где требуется запись больших объемов данных без жесткой структуры доступа.
  4. Совместимость с различными стадиями конвейера — В Direct3D 12 и Vulkan UAV могут использоваться не только в вычислительных шейдерах, но и в пиксельных и даже геометрических шейдерах.

Где применяется UAV?

  • Физически корректное освещение — позволяет шейдерам записывать промежуточные расчеты глобального освещения.
  • Пост-обработка — такие эффекты, как размытие по Гауссу или глубина резкости, могут использовать UAV для ускорения вычислений.
  • Генерация текстур и мэппинг — например, в алгоритмах Screen Space Reflections (SSR) или voxelization.
  • Физические симуляции — обработка динамических систем, таких как частицы или жидкости.

Пример кода

Пример создания UAV для буфера в Direct3D 12:

D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};
uavDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;
uavDesc.Format = DXGI_FORMAT_UNKNOWN;
uavDesc.Buffer.FirstElement = 0;
uavDesc.Buffer.NumElements = elementCount;
uavDesc.Buffer.StructureByteStride = sizeof(MyStruct);
uavDesc.Buffer.CounterOffsetInBytes = 0;

device->CreateUnorderedAccessView(buffer, nullptr, &uavDesc, uavHandle);

Итог

UAV (Unordered Access View) является важным инструментом для работы с памятью GPU, обеспечивая гибкость при записи и обработке данных. Благодаря своей мощности и универсальности, UAV активно используются в рендеринге, симуляциях и других вычислительно сложных задачах.