Udostępnij za pośrednictwem


Modyfikatory ps_1_X

Modyfikatory instrukcji wpływają na wynik instrukcji przed zapisaną w rejestrze docelowym. Na przykład użyj ich, aby pomnożyć lub podzielić wynik przez współczynnik dwóch lub zaciskać wynik między zerem a jednym. Modyfikatory instrukcji są stosowane po uruchomieniu instrukcji, ale przed zapisaniem wyniku w rejestrze docelowym.

Poniżej przedstawiono listę modyfikatorów.

Modyfikator Opis Składnia Wersja 1_1 Wersja 1_2 Wersja 1_3 Wersja 1_4
_x2 Mnożenie przez 2 instruction_x2 X X X X
_x4 Mnożenie przez 4 instruction_x4 X X X X
_x8 Mnożenie przez 8 instruction_x8 X
_d2 Podziel przez 2 instruction_d2 X X X X
_d4 Podziel przez 4 instruction_d4 X
_d8 Podziel przez 8 instruction_d8 X
_sobota Saturate (zacisk z 0 i 1) instruction_sat X X X X

 

  • Modyfikator mnożenia danych rejestru przez moc dwóch po jego odczytaniu. Jest to takie samo, jak przesunięcie w lewo.
  • Modyfikator dzielenia dzieli dane rejestru przez moc dwóch po jego odczytaniu. Jest to takie samo, jak przesunięcie w prawo.
  • Modyfikator saturacji zaciska zakres wartości rejestru od zera do jednego.

Modyfikatory instrukcji można używać w instrukcjach arytmetycznych. Mogą nie być używane w instrukcjach adresowych tekstury.

Modyfikator mnożenia

W tym przykładzie ładuje rejestr docelowy (dest) z sumą dwóch kolorów w operandach źródłowych (src0 i src1) i mnoży wynik przez dwa.

add_x2 dest, src0, src1

Ten przykład łączy dwie modyfikatory instrukcji. Po pierwsze, dodawane są dwa kolory w źródłowych operandach (src0 i src1). Wynik jest następnie mnożony przez dwa i zaciśnięty między 0,0 do 1,0 dla każdego składnika. Wynik zostanie zapisany w rejestrze docelowym.

add_x2_sat dest, src0, src1

Modyfikator dzielenia

W tym przykładzie ładuje rejestr docelowy (dest) z sumą dwóch kolorów w operandach źródłowych (src0 i src1) i dzieli wynik na dwa.

add_d2 dest, src0, src1

Modyfikator saturacji

W przypadku instrukcji arytmetycznych modyfikator nasycenia zaciska wynik tej instrukcji do zakresu od 0,0 do 1,0 dla każdego składnika. W poniższym przykładzie pokazano, jak używać tego modyfikatora instrukcji.

dp3_sat r0, t0_bx2, v0_bx2    ; t0 is bump, v0 is light direction

Ta operacja występuje po dowolnym modyfikatorze instrukcji mnożenia lub dzielenia. _sat jest najczęściej używany do zaciskania wyników produktu kropki. Jednak umożliwia również spójne emulowanie metod multipass, w których bufor ramki jest zawsze w zakresie od 0 do 1, oraz składni directX 6 i 7.0 wielotekstowej, w której nasycenie jest definiowane na każdym etapie.

W tym przykładzie ładuje rejestr docelowy (odst) z sumą dwóch kolorów w operandach źródłowych (src0 i src1) i zaciska wynik w zakresie od 0,0 do 1,0 dla każdego składnika.

add_sat dest, src0, src1

Ten przykład łączy dwie modyfikatory instrukcji. Po pierwsze, dodawane są dwa kolory w źródłowych operandach (src0 i src1). Wynik jest mnożony przez dwa i zaciśnięty między 0,0 do 1,0 dla każdego składnika. Wynik zostanie zapisany w rejestrze docelowym.

add_x2_sat dest, src0, src1

instrukcje cieniowania pikseli