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] |