imm_atomic_alloc (sm5 - asm)

Атомарным образом увеличивается скрытый 32-разрядный счетчик, хранящийся в представлении неупорядоченного доступа (UAV) Count или Append, возвращая исходное значение.

imm_atomic_alloc dest[.single_component_mask], dstUAV
Элемент Описание
Dest
[in] Содержит возвращаемое значение счетчика.
dstUAV
[in] UAV структурированного буфера с флагом Count или Append.

Комментарии

Существует скрытое 32-разрядное целочисленное значение счетчика без знака, связанное с каждым представлением Count или Append Buffer, которое инициализируется, когда представление привязано к конвейеру, включая параметр для сохранения предыдущего значения.

Эта инструкция выполняет атомарное увеличение значения счетчика, возвращая исходное значение dest.

Для дополнительного UAV возвращаемое значение допустимо только на протяжении всего вызова шейдера. После этого реализация может изменить расположение памяти. Любая адресация памяти на основе возвращаемого значения должна быть ограничена вызовом шейдера.

Для дополнительного UAV в вызове шейдера компилятор HLSL может использовать возвращаемое значение в качестве индекса структуры для доступа к структурированному буферу. Доступ к любому индексу структуры, кроме расположений, возвращаемых вызовами imm_atomic_alloc или _consume приводит к неопределенным результатам, что именно расположение памяти в UAV является случайным и фиксированным только в течение времени существования вызова шейдера.

Для UAV Count возвращаемое значение может быть сохранено приложением как ссылка на фиксированное расположение в UAV, которое имеет смысл после завершения вызова шейдера. Любое расположение в UAV Count всегда может быть доступно независимо от значения счетчика.

Нет зажима счетчика, поэтому он обертывается на переполнение.

Один и тот же шейдер не может пытаться imm_atomic_alloc и imm_atomic_consume на одном И том же БПЛА. Кроме того, GPU не может позволить нескольким вызовам шейдера смешивать imm_atomic_alloc и imm_atomic_consume на одном И том же БПЛА.

Эта инструкция применяется к следующим этапам шейдера:

Вершина Корпуса Домен Geometry Пиксель Вычисления
X X

Так как БПЛА доступны на всех этапах шейдера для Direct3D 11.1, эта инструкция применяется ко всем этапам шейдера для среды выполнения Direct3D 11.1, которая доступна начиная с Windows 8.

Вершина Корпуса Домен Geometry Пиксель Вычисления
X X X X X X

Минимальная модель шейдера

Эта инструкция поддерживается в следующих моделях шейдеров:

Модель шейдера Поддерживается
Модель шейдера 5 да
Модель шейдера 4.1 нет
Модель шейдера 4 нет
Модель шейдера 3 (DirectX HLSL) нет
Модель шейдера 2 (DirectX HLSL) нет
Модель шейдера 1 (DirectX HLSL) нет

Сборка шейдера модели 5 (DirectX HLSL)