To, co widzisz na ekranie, jest wytwarzane przez ogromny chip, zaprojektowany przez Silicon Graphics zwany Reality Co-Processor działający z prędkością 62.5 MHz. Ten pakiet zawiera wiele obwodów, więc nie martw się, jeśli masz trudności ze śledzeniem, podsystem graficzny ma bardzo złożoną strukturę!
Ten projekt opiera się na filozofii, że GPU nie ma być 'prostym' rasteryzatorem jak u konkurenta. Zamiast tego, powinien być również w stanie przyśpieszyć obliczenia geometrii (odciążając CPU) a do tego potrzebne będzie więcej obwodów.
Architektura
Ten chip jest podzielony na trzy główne moduły, z których dwa są używane do przetwarzania grafiki:
Reality Signal Processor

Architektura Reality Signal Processor (RSP).
Znany również jako RSP to tylko inny pakiet CPU składający się z:
- Scalar Unit: Inna okrojona pochodna MIPS R4000. Tym razem wdraża on jedynie podzbiór MIPS III ISA, a tym samym brakuje wielu funkcji ogólnego celu (tj. przerwania i wyjątki), 64-bitowe rozszerzenie, mnożenie i podziały.
- Vector Unit: koprocesor wykonujący operacje wektorowe posiadający 32 128-bitowe rejestry. Każdy rejestr jest podzielony na osiem części, aby obsługiwać jednocześnie osiem 16-bitowych wektorów (podobnie jak instrukcje SIMD na tradycyjnych procesorach). Jak widzisz, ten komponent mocno odciąża jednostkę skalarną.
- System Control: Inny koprocesor, który zapewnia funkcjonalność DMA i steruje sąsiednim modułem RDP (więcej o tym później).
Aby korzystać z tego modułu, CPU przechowuje w pamięci RAM serię poleceń o nazwie Lista wyświetlania wraz z danymi, które będą manipulowane, następnie RSP odczytuje listę i wykonuje wymagane operacje. Dostępne funkcje obejmują transformacje geometrii (takie jak projekcja perspektywy), przycinanie i oświetlenie.
Wydaje się to proste, ale w jaki sposób wykonuje te operacje? Oto interesująca część: W przeciwieństwie do konkurentów (PS1 i Saturn), silnik geometrii nie jest stałofunkcyjny. Zamiast tego, RSP zawiera trochę pamięci (4 KB dla instrukcji i 4 KB dla danych) do przechowywania mikrokodu : Mały program, z nie więcej niż 1000 instrukcjami, który wdraża potok graficzny. Innymi słowy, ukierunkowuje on Scalar Unit, w jaki sposób powinien operować danymi graficznymi. Mikrokod jest dostarczany przez CPU podczas jego pracy.
Nintendo dostarczył różne mikrokody do wyboru z i, podobnie jak tryby tła SNES-a, każdy z nich wykorzystuje zasoby w inny sposób.
Reality Display Processor

Architektura Reality Display Processor (RDP).
Po zakończeniu przetwarzania danych wielokątów RSP rozpocznie wysyłanie poleceń rasteryzacji do następnego modułu, RDP, aby narysować klatkę. Te polecenia są wysyłane za pomocą dedykowanej magistrali o nazwie XBUS lub za pośrednictwem głównej RAM.
RDP jest kolejnym procesorem (tym razem z ustaloną funkcją), który zawiera wiele silników do rasteryzacji, mapowania tekstur na nasze wielokąty, mieszania kolorów i utworzenie nowej klatki.
Może przetwarzać trójkąty lub prostokąty jako prymitywy, te ostatnie są przydatne do rysowania sprite'ów. Potok rasteryzacji RDP zawiera następujące bloki:
- Rasteryzator: Zamienia prymitywy (złożone z wierzchołków) na piksele.
- Jednostka teksturująca: Przetwarza tekstury przy użyciu 4 KB dedykowanej pamięci (nazywanej „TMEM") pozwalającej na użycie maksymalnie ośmiu kafelków do teksturowania. Może ona wykonywać następujące operacje:
- Filtrowanie dwuliniowe: Mapuje wybraną teksturę 2D do kształtu 3D i wygładza ją, aby uniknąć aliasingu (spowodowanego nadmiernym pobieraniem próbek).
- Jednakże filtr 'kompletny' wymagałby czterech punktów do przeprowadzenia interpolacji. Ta konsola używa tylko trzech (interpolacji trójkątnej) skutkującej pewnymi anomaliami. W związku z tym niektóre teksty będą musiały zostać wcześniej 'dostosowane'.
- Mip-Mapping: Automatycznie wybiera pomniejszoną wersję tekstury w zależności od wymaganego poziomu szczegółowości. Pozwala to uniknąć przetwarzania dużych tekstur, które byłyby widziane daleko od kamery i zapobiega aliasingowi (produkt niedostatecznego pobierania próbek).
- Jeśli włączone, RDP mapuje tekstury używając zamiast tego filtrowania trójliniowego. Ten nowy algorytm będzie również interpolował między mipmapami, aby złagodzić nagłe zmiany poziomu szczegółowości.
- Korekta perspektywy: Wybrany algorytm do mapowania tekstur na trójkąty. W odróżnieniu od innych algorytmów odwzorowujących, ten uwzględnia głębokość każdego prymitywu, osiągając przy tym lepsze wyniki.
- Filtrowanie dwuliniowe: Mapuje wybraną teksturę 2D do kształtu 3D i wygładza ją, aby uniknąć aliasingu (spowodowanego nadmiernym pobieraniem próbek).
- Mieszacz kolorów: Miesza i interpoluje wiele warstw kolorów (na przykład w celu zastosowania cieni).
- Blender: Miesza piksele z bieżącym buforem klatki, aby zastosować przezroczystość, antyaliasy, mgłę i dithering. Wykonuje on również buforowanie głębokości (więcej o tym później więcej).
- Interfejs pamięci: Używany przez poprzednie bloki do odczytu i zapisywania bieżącego bufora klatki w pamięci RAM i/lub wypełnienia TMEM.
RDP zapewnia cztery różne tryby działania, każdy tryb łączy te bloki w różny sposób w celu optymalizacji określonych operacji.
Ponieważ ten moduł stale aktualizuje bufor klatki, obsługuje RAM bardzo różnie: Pamiętasz o nietypowym 9-bitowym 'bajcie'? Dziewiąty bit jest używany do obliczeń związanych z buforem klatki (buforowanie głębi i antyaliasing) i może być obsługiwany tylko przez interfejs pamięci.
Pozostałe kroki
Powstała klatka musi zostać wysłana do Kodera Wideo, żeby wyświetlić ją na ekranie (DMA i komponent Interfejsu Wideo są niezbędne do osiągnięcia tego).
Teoretyczne maksymalne możliwości to 24-bitowa głębokość kolorów (16,8 milionów kolorów) i rozdzielczość 640x480 (lub 720x576 w regionie PAL). Wymieniam to jako 'teoretyczne', ponieważ korzystanie z maksymalnych możliwości może być zasobożerne, programiści będą skłaniać się do korzystania z gorszych trybów, aby uwolnić wystarczającą ilość zasobów dla innych usług.
Szybka demonstracja
Umieśćmy wszystkie poprzednie wyjaśnienia w perspektywie. Użyję w tym celu Super Mario 64, aby pokazać, w skrócie, jak komponowana jest klatka:
Przetwarzanie Wierzchołków

Widok naszej sceny złożony z prymitywów. Aby zaoszczędzić ilość wielokątów, niektóre znaki są modelowane za pomocą duszków (quads)
Początkowo nasze zasoby (modele 3D itp.) znajdują się w pamięci ROM kartridża, jednak aby utrzymać stałą przepustowość, musimy najpierw skopiować je do pamięci RAM. W niektórych przypadkach można znaleźć dane wstępnie skompresowane w kartridżu, więc procesor musi je dekompresować przed ich użyciem.
Kiedy to zostanie zrobione, nadszedł czas, aby stworzyć scenerię za pomocą naszych modeli. Procesor może samodzielnie przeprowadzić cały potok, ale to może zająć wieki, wiele zadań jest więc delegowanych do RCP. CPU zamiast tego wyśle polecenia do RCP. Zadania te są realizowane w następujący sposób:
- Utwórz Listę Wyświetlania, która zawiera operacje, które mają być wykonane przez RSP i przechowaj je w pamięci RAM.
- Wskaż RSP, gdzie znajduje się lista wyświetlania.
- Wyślij mikrokod do RSP, aby uruchomić Scalar Unit.
Później, RSP rozpocznie wykonywanie pierwszej serii zadań, a wynik zostanie wysłany do RDP w formie poleceń rasteryzacji.
Przetwarzanie pikseli
Dotychczas udało nam się przetworzyć nasze dane i zastosować na nich pewne efekty, ale nadal potrzebujemy:
- Dokonać rasteryzacji, zaaplikować tekstury i inne efekty.
- Wyświetlić bufor klatki.
Jak się możecie domyślać, zadania te są wykonywane przez RDP. Aby to wykonać, tekstury muszą zostać skopiowane z pamięci RAM do TMEM przy użyciu DMA.
RDP ma stały potok, ale możemy wybrać optymalny tryb działania na podstawie bieżącego zadania w celu poprawy ilości klatek na sekundę.
Gdy RDP zakończy przetwarzanie danych, zapisze ostateczną bitmapę do bufora klatki w pamięci RAM. Następnie procesor musi przenieść nową ramkę do Interfejsu Wideo (VI), najlepiej za pomocą DMA. Z kolei VI przekaże go do Enkodera Wideo w celu wyświetlenia na telewizorze.
Projekty
Oto kilka przykładów poprzednich projektów 2D dla Super Nintendo, które zostały przeprojektowane dla nowej ery 3D, są interaktywne, więc zachęcam Cię do ich sprawdzenia!

Model interaktywny dostępny w nowoczesnej edycji
The Legend of Zelda: Ocarina of Time (1998).
704 wierzchołków.

Model interaktywny dostępny w nowoczesnej edycji
Kirby 64: The Crystal Shards (2000).
516 wierzchołków.
Współczesne oznaczanie widocznych wierzchołków
Jeśli przeczytałeś o poprzednich konsolach, napotkałeś niekończący się problem dotyczący widoczności wierzchołków i możesz teraz myśleć, że sortowanie wielokątów jest jedynym sposobem na wyjście z tego. Cóż, po raz pierwszy w tej serii, RDP oferuje podejście oparte na sprzęcie o nazwie buforowanie Z (ang. Z-buffering). W skrócie RDP przydziela dodatkowy bufor o nazwie Bufor Z w pamięci. Ma on takie same wymiary jak bufor klatki, ale zamiast przechowywać wartości RGB, każdy wpis zawiera głębokość (wartość Z) najbliższego piksela względem kamery.
Gdy RDP dokonuje rasteryzacji wektorów, wartość z nowego piksela porównywana jest z odpowiednią wartością w buforze Z. Jeśli nowy piksel zawiera mniejszą wartość 'z' oznacza to, że nowy piksel jest umieszczony przed poprzednim, więc jest nakładany na bufor ramki i z-bufor jest również zaktualizowany. W przeciwnym razie piksel zostaje odrzucony.
Ogółem jest to bardzo pożądane uzupełnienie: Programiści nie muszą już martwić się implementacją opartych na oprogramowaniu metod sortowania wielokątów, które zużywają wiele zasobów procesora. Jednakże bufor Z nie zachowa Cię przed używaniem niepotrzebnej geometrii (odrzuconej lub przesadzonej, obie zużywając zasoby). W tym celu silniki gier mogą wybrać dodanie algorytmu wycinania okluzji w celu odrzucenia zasłoniętej geometrii tak szybko, jak to możliwe.
Sekrety i ograniczenia
SGI zainwestowało wiele technologii do tego systemu. Była to jednak konsola przeznaczona dla gospodarstw domowych i jako taka musiała utrzymać swoje koszty na niskim poziomie. Niektóre trudne decyzje doprowadziły do trudności dla programistów:
Zastoje Potoku
Ze względu na ogromną liczbę komponentów i operacji w potoku graficznym, RCP był w końcu bardzo podatny na przestoje: niepożądana sytuacja, w której komponenty pozostają na biegu jałowym przez znaczne okresy, ponieważ wymagane dane są opóźnione z tyłu potoku.
Będzie to zawsze skutkowało degradacją wydajności i będzie należało do zadań programisty unikanie ich. Jednakże żeby ułatwić pracę, niektóre procesory takie jak Scalar Unit implementują funkcję o nazwie Bypassing, która umożliwia wykonywanie podobnych instrukcji w szybszym tempie, pomijając niektóre etapy wykonania, które można pominąć.
Na przykład, jeśli musimy obliczyć sekwencyjne instrukcje ADD, nie ma potrzeby zapisywania wyników z powrotem do rejestru, a następnie odczytywania go z powrotem za każdym razem, gdy ADD zostanie zakończony. Zamiast tego możemy nadal używać tego samego rejestru dla wszystkich sum i wykonać zapis po zakończeniu ostatniego ADD.
Pamięć tekstur
RDP opiera się na 4 KB TMEM (Pamięć Tekstur) jako na pojedynczym źródle ładowania tekstur. Niestety w praktyce 4 KB okazało się niewystarczające dla tekstur o wysokiej rozdzielczości. Ponadto w przypadku stosowania mipmappingu dostępna ilość pamięci zostaje zmniejszona do połowy.
W rezultacie niektóre gry używały pojedynczych kolorów z cieniowaniem Gouraud (jak Super Mario 64) a inne opierały się na teksturach wstępnie przeliczonych (np. tam, gdzie trzeba było mieszać wiele warstw).
Uniwersalne wyjście wideo
Nintendo nadal używało 'uniwersalnego' portu Multi Out znalezionego na jego poprzedniku, zła wiadomość jest taka, że nie wysyła już on sygnału RGB! Wygląda na to, że jest to kolejny środek pozwalający zaoszczędzić koszty, ponieważ RGB i tak nie było używane w poprzedniej konsoli.
Dobrą wiadomością jest to, że trzy linie nadal mogą zostać zrekonstruowane w pierwszych wersjach poprzez dolutowanie niektórych kabli i zainstalowanie niedrogiego wzmacniacza sygnału. Wynika to z faktu, że cyfrowo-analogowy przetwornik wideo przesyła sygnał RGB do enkodera wideo. Jednak późniejsze wersje płyty głównej połączyły oba chipy, więc jedyną pozostałą opcją jest obejście przetwornika C/A i enkodera razem z niestandardowym obwodem, który eksponuje te sygnały.
