Поделиться через


Общие сведения о шейдере вычислений

Шейдер вычислений — это программируемый этап шейдера, который расширяет возможности Microsoft Direct3D 11 за рамки графического программирования. Технология шейдера вычислений также называется технологией DirectCompute.

Как и другие программируемые шейдеры (например, вершинные и геометрические шейдеры), вычислительный шейдер разработан и реализован с помощью HLSL , но это как раз то, где заканчивается сходство. Шейдер вычислений позволяет выполнять высокоскоростные универсальные вычисления и использует большое количество параллельных процессоров в графическом процессоре. Шейдер вычислений предоставляет функции совместного использования памяти и синхронизации потоков, чтобы разрешить использование более эффективных методов параллельного программирования. Вызывается метод ID3D11DeviceContext::D ispatch или ID3D11DeviceContext::D ispatchIndirect для выполнения команд в вычислительном шейдере. Шейдер вычислений может выполняться параллельно во многих потоках.

Использование вычислительного шейдера на оборудовании Direct3D 10.x

Шейдер вычислений в Microsoft Direct3D 10 также называется DirectCompute 4.x.

Если вы используете API Direct3D 11 и обновленные драйверы, оборудование Direct3D уровня компонентов 10 и 10.1 при необходимости может поддерживать ограниченную форму DirectCompute, которая использует профили cs_4_0 и cs_4_1. При использовании DirectCompute на этом оборудовании учитывайте следующие ограничения.

  • Максимальное количество потоков ограничено D3D11_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP (768) на группу.
  • Измерение X и Y для числовых значений ограничено D3D11_CS_4_X_THREAD_GROUP_MAX_X (768) и D3D11_CS_4_X_THREAD_GROUP_MAX_Y (768).
  • Измерение Z числовых значений ограничено 1.
  • Измерение Z отправки ограничено D3D11_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION (1).
  • Только одно представление неупорядоченного доступа можно привязать к шейдеру (D3D11_CS_4_X_UAV_REGISTER_COUNT — 1).
  • Только RWStructuredBufferи RWByteAddressBufferдоступны в виде представлений неупорядоченного доступа.
  • Поток может получить доступ только к своей собственной области в памяти groupshared для записи, хотя он может читать из любого расположения.
  • SV_GroupIndex или SV_GroupThreadID необходимо использовать при доступе к памяти grouphared для записи.
  • Объем памяти grouphared ограничен 16 КБ на группу.
  • Один поток ограничен 256-байтовой областью памяти groupshared для записи.
  • Атомарные инструкции недоступны.
  • Значения двойной точности недоступны.

Использование вычислительного шейдера на оборудовании Direct3D 11.x

Шейдер вычислений в Direct3D 11 также называется DirectCompute 5.0.

При использовании DirectCompute с профилями cs_5_0 учитывайте следующие моменты:

  • Максимальное количество потоков ограничено D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP (1024) на группу.
  • Измерение X и Y для числовых значений ограничено D3D11_CS_THREAD_GROUP_MAX_X (1024) и D3D11_CS_THREAD_GROUP_MAX_Y (1024).
  • Измерение Z числовых значений ограничено D3D11_CS_THREAD_GROUP_MAX_Z (64).
  • Максимальный размер отправки ограничен D3D11_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION (65535).
  • Максимальное количество представлений без упорядоченного доступа, которые можно привязать к шейдеру, равно D3D11_PS_CS_UAV_REGISTER_COUNT (8).
  • Поддерживает представления RWStructuredBuffers, RWByteAddressBufferи типизированные представления неупорядоченного доступа (RWTexture1D, RWTexture2D, RWTexture3D и т. д.).
  • Атомарные инструкции доступны.
  • Может быть доступна поддержка двойной точности. Сведения о том, как определить, доступна ли двойная точность, см. в разделе D3D11_FEATURE_DOUBLES.

В этом разделе

Раздел Описание
Новые типы ресурсов
В Direct3D 11 добавлено несколько новых типов ресурсов.
Доступ к ресурсам
Существует несколько способов доступа к ресурсам.
Атомарные функции
Для доступа к новому типу ресурсов или общей памяти используйте встроенную функцию с блокировкой. Взаимоблокируемые функции гарантированно будут работать атомарно. То есть они гарантированно происходят в запрограммированном порядке. В этом разделе перечислены атомарные функции.

Графический конвейер

Практическое руководство. Создание вычислительного шейдера