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

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 перечислены различия между поведением различных методов ID3D11Device и ID3D11DeviceContext на различных уровнях функций 10Level9.

Неупорядоченные представления доступа (БПЛА)

Необработанные (RWByteAddressBuffer) и структурированные (RWStructuredBuffer) представления неупорядоченного доступа поддерживаются на оборудовании нижнего уровня со следующими ограничениями:

  • С помощью ID3D11DeviceContext::CSSetUnorderedAccessViews к конвейеру может быть привязан только один UAV.
  • Базовое смещение для необработанного БПЛА должно быть выровнено по 256-байтовой границе (вместо 16-байтового выравнивания, требуемого для оборудования Direct3D 11).

Типизированные БПЛА не поддерживаются на оборудовании нижнего уровня. Сюда входят БПЛА Texture1D, Texture2D и Texture3D .

Пиксельные шейдеры на оборудовании нижнего уровня не поддерживают неупорядоченный доступ.

Представления ресурсов шейдера (SRV)

Необработанные и структурированные буферы в качестве представлений ресурсов шейдера поддерживаются на оборудовании нижнего уровня для доступа только для чтения, как и на оборудовании 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 на оборудовании нижнего уровня