Общие сведения о шейдере вычислений
Шейдер вычислений — это программируемый этап шейдера, который расширяет возможности 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 добавлено несколько новых типов ресурсов. |
Доступ к ресурсам |
Существует несколько способов доступа к ресурсам. |
Атомарные функции |
Для доступа к новому типу ресурсов или общей памяти используйте встроенную функцию с блокировкой. Взаимоблокируемые функции гарантированно будут работать атомарно. То есть они гарантированно происходят в запрограммированном порядке. В этом разделе перечислены атомарные функции. |