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


imm_atomic_cmp_exch (sm5 - asm)

Немедленное сравнение и обмен с памятью.

imm_atomic_cmp_exch dst0[.single_component_mask], dst1, dstAddress[.swizzle], src0[.select_component], src1[.select_component]
Элемент Описание
dst0
[out] Содержит dst1 перед записью.
dst1
[in] Представление неупорядоченного доступа (U#). В шейдере вычислений это также может быть общая память группы потоков (g#).
dstAddress
[in] Целевая память.
src0
[in] Значение для сравнения с dst1.
src1
[in] Значение, записываемое в целевую память, если сравниваемые значения идентичны.

Эта инструкция выполняет однокомпонентное сравнение 32-разрядного значения операнда src0 с dst1 с 32-разрядным адресом каждого компонента dstAddress.

Если dst1 является u#, он может быть объявлен как необработанный, типизированный или структурированный. Если тип задан, он должен быть объявлен как UINT/SINT с привязанным форматом ресурса R32_UINT/_SINT.

Если dst1 имеет значение g#, он должен быть объявлен как необработанный или структурированный.

Если сравниваемые значения идентичны, однокомпонентное 32-разрядное значение в src1 записывается в целевую память. В противном случае целевая память не изменяется.

Исходное 32-разрядное значение в целевой памяти всегда записывается в dst0.

Вся операция выполняется атомарно.

Если вызов шейдера неактивен, например, если пиксель был отменен ранее в его выполнении или существует только вызов пикселя или образца только для того, чтобы служить вспомогательным для реального пикселя или образца для производных, эта инструкция не изменяет память dst1 вообще, а возвращаемое значение не определено.

Адресация за пределы границ в u# не приводит к записи в память, за исключением случаев, когда u# структурирован, а смещение байтов в структуре (второй компонент адреса) приводит к выходу за пределы границ доступа, то все содержимое UAV становится неопределенным.

Адресация за пределы границ в u# или g# приводит к возврату неопределенного результата в шейдер в dst0.

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

Вершина Корпуса Домен 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)