Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Direct3D 11 предоставляет возможность использовать компьютерные шейдеры, которые работают на большинстве оборудования Direct3D 10.x с некоторыми ограничениями в работе. Технология шейдера вычислений также называется технологией DirectCompute. В этом разделе объясняется, как использовать вычислительные шейдеры в приложении Direct3D 11 на оборудовании Direct3D 10.
Поддержка вычислительных шейдеров на оборудовании нижнего уровня доступна только для устройств, совместимых с Direct3D 10.x. Вычислительные шейдеры нельзя использовать на оборудовании Direct3D 9.x.
Чтобы проверить, поддерживает ли оборудование Direct3D 10.x вычислительные шейдеры, вызовите ID3D11Device::CheckFeatureSupport. В вызов е CheckFeatureSupport передайте значение D3D11_FEATURE_D3D10_X_HARDWARE_OPTIONS параметру Feature, передайте указатель на структуру D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS в параметр pFeatureSupportData и передайте размер структуры D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS в параметр FeatureSupportDataSize. CheckFeatureSupport возвращает TRUE в элементе ComputeShaders_Plus_RawAndStructuredBuffers_Via_Shader_4_xD3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS, если оборудование Direct3D 10.x поддерживает вычислительные шейдеры.
В разделе 10Level9 Reference перечислены различия между поведением различных методов ID3D11Device и ID3D11DeviceContext на различных уровнях функций 10Level9.
- неупорядоченные представления доступа (UAV)
- представления ресурсов шейдера
- группы потоков
- D3DCompile с D3DCOMPILE_SKIP_OPTIMIZATION
- Связанные разделы
Неупорядоченные представления доступа (UAV)
Raw (RWByteAddressBuffer) и структурированные (RWStructuredBuffer) Неупорядоченные представления доступа поддерживаются на оборудовании нижнего уровня с следующими ограничениями:
- Только один UAV может быть привязан к конвейеру за раз через ID3D11DeviceContext::CSSetUnorderedAccessViews.
- Базовое смещение для необработанного UAV должно быть выровнено по границе 256 байт (вместо выравнивания по границе 16 байт, необходимого для оборудования Direct3D 11).
Типизированные UAV не поддерживаются на оборудовании нижнего уровня. К ним относятся Texture1D, Texture2Dи Texture3D БПЛА.
Шейдеры пикселей на оборудовании нижнего уровня не поддерживают неупорядоченный доступ.
Представления ресурсов шейдера (SRVs)
Необработанные и структурированные буферы в качестве представлений ресурсов шейдера поддерживаются на оборудовании нижнего уровня для доступа только для чтения, так как они находятся на оборудовании Direct3D 11. Эти типы ресурсов поддерживаются для шейдеров вершин, шейдеров геометрии, шейдеров пикселей, а также вычислительных шейдеров.
Группы потоков
Шейдер вычислений может выполняться параллельно во многих потоках внутри группы потоков.
Группы потоков поддерживаются на оборудовании нижнего уровня с следующими ограничениями:
Измерения группы нитей
Группы потоков, определенные для оборудования нижнего уровня, ограничены измерениями X и Y 768. Это меньше максимального значения 1024 для оборудования Direct3D 11. Максимальное измерение по оси Z, равное 64, остаётся неизменным.
Общее количество потоков в группе (X × Y × Z) ограничено 768. Это меньше ограничения 1024 для оборудования Direct3D 11.
Если эти значения превышены, компиляция шейдера завершится ошибкой.
индексы потоков Two-Dimensional
Определенный поток в группе потоков индексируется с помощью трехмерного вектора, заданного (x,y,z).
Для вычислительных шейдеров, работающих на оборудовании нижнего уровня, группы потоков поддерживают только два измерения. Это означает, что значение Z в трехмерном векторе должно всегда иметь значение 1.
Это ограничение применяется к следующим:
- ID3D11DeviceContext::Dispatch— аргумент ThreadGroupCountZ должен быть равен 1.
- ID3D11DeviceContext::DispatchIndirect— эта функция не поддерживается на устаревшем оборудовании.
- numthreads— значение Z должно быть 1.
Общая память группы потоков (TGSM)
Общая память группы потоков ограничена 16 КБ на оборудовании нижнего уровня. Это меньше 32 Кб, доступное оборудованию Direct3D 11.
Поток шейдера вычислений может записывать только в собственный регион TGSM. Этот регион только для записи имеет максимальный размер 256 байт или меньше, причем максимальный размер уменьшается по мере увеличения количества потоков, объявленных для группы.
В следующей таблице определяется максимальный размер каждого потока региона TGSM для количества потоков в группе:
Количество потоков в группе | Максимальный размер TGSM для каждого потока |
---|---|
0-64 | 256 |
65-68 | 240 |
69-72 | 224 |
73-76 | 208 |
77-84 | 192 |
85-92 | 176 |
93-100 | 160 |
101-112 | 144 |
113-128 | 128 |
129-144 | 112 |
145-168 | 96 |
169-204 | 80 |
205-256 | 64 |
257-340 | 48 |
341-512 | 32 |
513-768 | 16 |
Поток шейдера вычислений может считывать TGSM в любом месте.
D3DCompile с D3DCOMPILE_SKIP_OPTIMIZATION
D3DCompile возвращает E_NOTIMPL при передаче cs_4_0 в качестве целевого объекта шейдера вместе с параметром компиляции D3DCOMPILE_SKIP_OPTIMIZATION. Целевой объект cs_5_0 шейдера работает с D3DCOMPILE_SKIP_OPTIMIZATION.
Связанные разделы