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