setp_comp - ps

Définissez le registre de prédicat.

Syntaxe

setp_comp dst, src0, src1

 

Où :

  • _comp est une comparaison par canal entre les deux registres sources. Les valeurs possibles sont les suivantes :

    Syntaxe Comparaison
    _Gt Supérieur à
    _Lt Inférieur à
    _Ge Supérieur ou égal à
    _le Inférieur ou égal à
    _Eq Égal à
    _ne Différent de

     

  • dst est le registre du prédicat, p0.

  • src0 est un registre source.

  • src1 est un registre source.

Notes

Versions du nuanceur de pixels 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
setp_comp x x x x

 

Cette instruction fonctionne comme suit :

per channel in destination write mask
{
  dst.channel = src0.channel cmp src1.channel
}

Pour chaque canal qui peut être écrit en fonction du masque d’écriture de destination, enregistrez le résultat booléen de l’opération de comparaison entre les canaux correspondants de src0 et src1 (une fois que le modificateur source swizzles a été résolu).

Les registres sources permettent de spécifier des swizzles de composants arbitraires.

Le registre de destination autorise les masques d’écriture arbitraires.

Le registre dst doit être le registre de prédicat.

Application du registre de prédicat

Une fois que le registre de prédicat a été initialisé avec setp_comp, il peut être utilisé pour contrôler une instruction par composant. Voici la syntaxe :

([!]p0[.swizzle]) instruction dest, src0, ...

Où :

  • [!] est un booléen facultatif NOT
  • p0 est le registre de prédicat
  • [.swizzle] est un swizzle facultatif à appliquer au contenu du registre de prédicat avant de l’utiliser pour masquer l’instruction. Les swizzles disponibles sont : .xyzw (par défaut quand aucun spécifié) ou n’importe quel swizzle répliqué : .x/.r, .y/.g, .z/.b ou .a/.w.
  • instruction est une instruction aritmétique ou une instruction de texture. Il ne peut pas s’agir d’une instruction de contrôle de flux statique ou dynamique.
  • dest, src0, ... sont les registres requis par l’instruction

En supposant que le registre de prédicat a été configuré avec des valeurs de composant (true, true, false, false), il peut être appliqué à cette instruction :

(p0) add r1, r2, r3

pour effectuer un ajout de 2 composants.

r1.x = r2.x + r3.x
r1.y = r2.y + r3.y

Les composants z et w de r1 ne seront pas écrits, car le registre de prédicat contenait false dans les composants z et w.

L’application du registre de prédicat à une instruction arithmétique ou de texture augmente son nombre d’emplacements d’instruction de 1.

Le registre de prédicat peut également être appliqué aux instructions if pred - ps, callnz pred - ps et breakp - ps . Ces instructions de contrôle de flux n’ont pas d’augmentation du nombre d’emplacements d’instruction lors de l’utilisation du registre de prédicat.

Instructions du nuanceur de pixels