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


Вычислительные шейдеры на оборудовании нижнего уровня

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)

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.

Это ограничение применяется к следующим:

Общая память группы потоков (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.

Direct3D 11 на аппаратном обеспечении предыдущего уровня