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


Общие сведения о компьютерном шейдере

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

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

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

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

Если вы используете API Direct3D 11 и обновленные драйверы, уровень компонентов 10 и 10.1 Direct3D может поддерживать ограниченную форму 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доступны как представления с неупорядоченным доступом.
  • Поток может получить доступ только к своему региону в общей памяти группы для записи, хотя он может считывать из любого места.
  • SV_GroupIndex или SV_GroupThreadID необходимо использовать при доступе к групповой памяти для записи.
  • Groupshared память ограничена 16 КБ на каждую группу.
  • Один поток ограничен областью групповой памяти ,, размером в 256 байт, для записи.
  • Атомарные инструкции недоступны.
  • Значения двойной точности недоступны.

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

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

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

  • Максимальное количество потоков ограничено значением D3D11_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP (1024) на группу.
  • Измерение X и Y для numthreads ограничено 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).
  • Поддерживает RWStructuredBuffer, RWByteAddressBufferи типизированные неупорядоченные представления (RWTexture1D, RWTexture2D, RWTexture3Dи т. д.).
  • Доступны атомарные инструкции.
  • Поддержка двойной точности может быть доступна. Сведения о том, как определить, доступна ли двойная точность, см. в D3D11_FEATURE_DOUBLES.

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

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

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

Как создать шейдер вычислений