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


dmovc (sm5 - asm)

Условное перемещение на уровне компонентов.

dmovc[_sat] dest[.mask], src0[.swizzle], [-]src1[_abs][.swizzle], [-]src2[_abs][.swizzle],
Элемент Описание
Dest
[in] Назначение перемещения.
Если src0, то dest = src1 else dest = src2.
src0
[in] Компоненты для проверки условия.
src1
[in] Компоненты, которые необходимо переместить, если условие равно true.
src2
[in] Компоненты для перемещения, если условие имеет значение false.

Комментарии

В следующем примере показано, как использовать эту инструкцию.

                if(the dest mask contains .xy)
                {
                    if(the first 32-bit component of src0, post-swizzle, 
                       has any bit set)
                    {
                        copy the first double from src1 (post swizzle)
                        into dest.xy
                    }
                    else
                    {
                        copy the first double from src2 (post swizzle)
                        into dest.xy
                    }
                }
                if(the dest mask contains .zw)
                {
                    if(the second 32-bit component of src0, post-swizzle, 
                       has any bit set)
                    {
                        copy the second double from src1 (post swizzle)
                        into dest.zw
                    }
                    else
                    {
                        copy the second double from src2 (post swizzle)
                        into dest.zw
                    }
                }

Допустимые маски для dest: .xy, .zw, .xyzw.

Допустимые swizzles для src0 являются чем угодно. Первые два компонента после swizzle используются для отступа двух 32-разрядных значений условий.

Допустимые swizzles для src1 и src2 , содержащие двойники: .xyzw, .xyxy, .zwxy, .zwzw. имеют значение .xy, .zw и .xyzw.

Ниже приведены следующие сопоставления src :

  • dest — это двойной vec2 поперечный (x 32LSB, y 32MSB) и (z 32LSB, w 32MSB).
  • src0 — это 32-разрядный/компонентный vec2 в x и y (zw игнорируется).
  • src1 — это двойной vec2 поперечный (x 32LSB, y 32MSB) и (z 32LSB, w 32MSB).
  • src2 — это двойной vec2 поперечный (x 32LSB, y 32MSB) и (z 32LSB, w 32MSB).

Модификаторы в src1 и src2, кроме swizzle, предполагают, что данные двойные. Отсутствие модификаторов перемещает данные без изменения битов.

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

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

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

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

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

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