msad4

Compare une valeur de référence de 4 octets et une valeur source de 8 octets et accumule un vecteur de 4 sommes. Chaque somme correspond à la somme masquée des différences absolues d’un alignement d’octets différent entre la valeur de référence et la valeur source.

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

Paramètres

Référence

[in] Tableau de référence de 4 octets dans une valeur uint .

Source

[in] Tableau source de 8 octets dans deux valeurs uint2 .

Accum

[in] Vecteur de 4 valeurs. msad4 ajoute ce vecteur à la somme masquée des différences absolues des différents alignements d’octets entre la valeur de référence et la valeur source.

Valeur renvoyée

Vecteur de 4 sommes. Chaque somme correspond à la somme masquée des différences absolues de différents alignements d’octets entre la valeur de référence et la valeur source. msad4 n’inclut pas de différence dans la somme si cette différence est masquée (autrement dit, l’octet de référence est 0).

Notes

Pour utiliser l’intrinsèque msad4 dans votre code de nuanceur, appelez la méthode ID3D11Device::CheckFeatureSupport avec D3D11_FEATURE_D3D11_OPTIONS pour vérifier que l’appareil Direct3D prend en charge l’option de fonctionnalité SAD4ShaderInstructions . L’intrinsèque msad4 nécessite un pilote d’affichage WDDM 1.2, et tous les pilotes d’affichage WDDM 1.2 doivent prendre en charge msad4. Si votre application crée un appareil de rendu avec le niveau de fonctionnalité 11.0 ou 11.1 et que la cible de compilation est le modèle de nuanceur 5 ou ultérieur, le code source HLSL peut utiliser l’intrinsèque msad4 .

Les valeurs retournées ne sont précises que jusqu’à 65535. Si vous appelez l’intrinsèque msad4 avec des entrées qui peuvent entraîner des valeurs de retour supérieures à 65535, msad4 produit des résultats non définis.

Modèle de nuanceur minimal

Cette fonction est prise en charge dans les modèles de nuanceur suivants.

Modèle de nuanceur Pris en charge
Modèle de nuanceur 5 ou version ultérieure Oui

Exemples

Voici un exemple de calcul des résultats pour 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}

Voici un exemple de la façon dont vous pouvez utiliser msad4 pour rechercher un modèle de référence dans une mémoire tampon :

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;

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows 8 [applications de bureau | Applications UWP]
Serveur minimal pris en charge
Windows Server 2012 [applications de bureau | Applications UWP]

Voir aussi

Fonctions intrinsèques