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


msad4

Сравнивает 4-байтовое ссылочные значения и 8-байтовое исходное значение и накапливает вектор из 4 сумм. Каждая сумма соответствует маскированной сумме абсолютных различий разных байтового выравнивания между ссылочным и исходным значением.

uint4 result = msad4(uint reference, uint2 source, uint4 accum);

Параметры

Ссылки

[in] Массив ссылок, состоящий из 4 байтов в одном значении uint .

Источник

[in] Исходный массив из 8 байтов в двух значениях uint2 .

accum

[in] Вектор из 4 значений. Msad4 добавляет этот вектор к маскированной сумме абсолютных различий различных выравниваний байтов между ссылочным и исходным значением.

Возвращаемое значение

Вектор с 4 суммами. Каждая сумма соответствует маскированной сумме абсолютных различий разных байтовых выравниваний между ссылочным и исходным значением. Msad4 не включает разницу в сумму, если эта разница маскирована (то есть ссылочный байт равен 0).

Комментарии

Чтобы использовать встроенную функцию msad4 в коде шейдера, вызовите метод ID3D11Device::CheckFeatureSupport с D3D11_FEATURE_D3D11_OPTIONS , чтобы убедиться, что устройство Direct3D поддерживает параметр функции SAD4ShaderInstructions . Для встроенной функции msad4 требуется драйвер дисплея WDDM 1.2, а все драйверы дисплея WDDM 1.2 должны поддерживать msad4. Если приложение создает устройство отрисовки с уровнем компонентов 11.0 или 11.1 и целевым объектом компиляции является модель шейдера 5 или более поздней версии, исходный код HLSL может использовать встроенную функцию msad4 .

Возвращаемые значения являются точными только до 65535. Если вызвать встроенную функцию msad4 с входными данными, которые могут привести к возврату значений больше 65535, msad4 выдает неопределенные результаты.

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

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

Модель шейдера Поддерживается
Модель шейдера 5 или более поздней версии да

Примеры

Ниже приведен пример вычисления результата для msad4:

reference = 0xA100B2C3;
source.x = 0xD7B0C372
source.y = 0x4F57C2A3
accum = {1,2,3,4}
result.x alignment source: 0xD7B0C372
result.x = accum.x + |0xD7   0xA1| + 0 (masked) + |0xC3   0xB2| + |0x72   0xC3| = 1 + 54 + 0 + 17 + 81 = 153
result.y alignment source: 0xA3D7B0C3
result.y = accum.y + |0xA3   0xA1| + 0 (masked) + |0xB0   0xB2| + |0xC3   0xC3| = 2 + 2 + 0 + 2 + 0 = 6
result.z alignment source: 0xC2A3D7B0
result.z = accum.z + |0xC2   0xA1| + 0 (masked) + |0xD7   0xB2| + |0xB0   0xC3| = 3 + 33 + 0 + 37 + 19 = 92
result.w alignment source: 0x57C2A3D7
result.w = accum.w + |0x57   0xA1| + 0 (masked) + |0xA3   0xB2| + |0xD7   0xC3| = 4 + 74 + 0 + 15 + 20 = 113
result = {153,6,92,113}

Ниже приведен пример того, как можно использовать msad4 для поиска эталонного шаблона в буфере:

uint4 accum = {0,0,0,0};
for(uint i=0;i<REF_SIZE;i++)
    accum = msad4(
        buf_ref[i], 
        uint2(buf_src[DTid.x+i], buf_src[DTid.x+i+1]), 
        accum);
buf_accum[DTid.x] = accum;

Требования

Требование Значение
Минимальная версия клиента
Windows 8 [классические приложения | Приложения UWP]
Минимальная версия сервера
Windows Server 2012 [классические приложения | Приложения UWP]

См. также раздел

Встроенные функции