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