Se você pensou que o Cell, com todas as suas peculiaridades, poderia cuidar de todas as tarefas do console, então deixe-me dizer algo engraçado: a Sony instalou um chip separado para gráficos 3D.

Uncharted 3: Drake's Deception (2011).

The Elder Scrolls V: Skyrim (2011).

One Piece: Pirate Warriors (2012).
Parece que mesmo com um chip de supercomputador, a Sony ainda teve que buscar uma GPU para finalizar o PlayStation 3. Isso faz você se perguntar se a IBM/Sony/Tpshiba encontrou algum obstáculo ao tentar escalar ainda mais o Cell, então a Sony não teve outra opção senão buscar ajuda de uma empresa de processadores gráficos.
Nós iniciamos esta equipe ICE [Iniciativa para um Motor Comum] com o objetivo de desenvolver alguma tecnologia central que pudesse ser compartilhada entre todos os primeiros partidos (...) Por um tempo, [PS3 teve] sem GPU, ia rodar tudo com SPUs. A equipe da ICE provou ao Japão que isso era simplesmente impossível. Isso seria ridículo. Em termos de desempenho, seria um desastre. É por isso que eles finalmente adicionaram a GPU, mais perto do fim .
- Fontes anônimas da Naughty Dog
O que eu sei é que o PS3 contém um chip GPU fabricado pela Nvidia, destinado a aliviar parte do gráfico. O chip é chamado de Reality Synthesizer ou "RSX" e roda a 500 MHz . Sua frequência de clock parece preocupante quando comparada com a do Cell (3,2 GHz), mas veja que a GPU é melhor equipada para realizar quantidades grandes de operações em paralelo. Portanto, é uma questão de encontrar um equilíbrio entre o Cell e o RSX quando se trata de construir o pipeline gráfico (embora eu deva confessar que isso parece mais simples no papel do que na prática).
Agora, farei a análise do RSX e suas capacidades gráficas no mesmo nível que fiz com o Cell.
Visão geral
Já tinha se passado cinco anos desde que a Nvidia lançou a linha GeForce3/NV30 em 2001, e na época o mercado de processadores gráficos era disputado por empresas fortes como a 3dfx, a S3 e a ArtX/ATI. No entanto, nos anos seguintes, o número dessas empresas reduziu lentamente até o ponto que, em 2006, apenas a ATI e a Nvidia permaneciam como os principais fornecedores de placas de vídeo no mercado de PCs.
O RSX herda a tecnologia existente da Nvidia, é referido como sendo baseado no modelo 7800 GTX vendido para PCs, que implementa a arquitetura GeForce7 (ou NV47) , também chamada de "Curie".
Na minha análise anterior do Xbox, eu falei sobre a GeForce3 e seus estreantes shaders de píxel. Então, o que mudou? Houve altos e baixos, mas principalmente mudanças incrementais, nada muito revolucionário em comparação com os shaders de píxel da GeForce3.
Por outro lado, enquanto o 7800 GTX depende do protocolo PCI Express para se comunicar com a CPU, o RSX foi remodelado para trabalhar com um protocolo proprietário chamado Flex I/O , uma interface diferente dentro do Cell projetada para se conectar a chips vizinhos. O Flex I/O opera em dois modos:
- O modo BIC para conectar outros processadores Cell (a ser usado em ambientes com múltiplos processadores).
- O modo IOIF mais lento para conectar até dois periféricos, um "rápido" e um "lento".
Infelizmente, o RSX não é o Cell, então ele passa pelo protocolo IOIF, usando o slot mais rápido.
Para fins de comparação, o IOIF funciona como um barramento paralelo de 32 bits com uma largura de banda teórica de até 20 GB/s, enquanto o PCI-Express usado no 7800 GTX (x16 1.0) é um barramento serial de 16 bits com uma largura de banda teórica de até 4 GB/s.
Organizando o conteúdo
O RSX tem 256 MB de GDDR3 SDRAM dedicados à sua disposição. Surpreendentemente, é o mesmo tipo de memória encontrada no Wii. O barramento de memória funciona a 650 MHz com uma largura de banda teórica de até 20,8 GB/s.

Exemplo de como os dados são organizados na memória disponível. Observe como o RSX pode acessar seu conteúdo dos diferentes chips de memória.
Dentro desses 256 MB, o Cell pode colocar tudo o que o RSX precisa para renderizar um quadro. Isso inclui os dados de vértices, os shaders, as texturas e os comandos. Graças ao barramento Flex I/O do Cell, o RSX também pode utilizar os mencionados 256 MB de memória XDR (RAM principal da CPU) como espaço de trabalho, embora isso acarrete algumas penalidades de desempenho. Isso é útil se o quadro renderizado for processado posteriormente por um SPU, por exemplo.
Como pode ser visto, embora o console não tenha implementado uma arquitetura UMA (do inglês, Unified Memory Architecture), ainda é possível distribuir dados gráficos por diferentes chips de memória se os programadores decidirem fazê-lo. Menciono isso porque gostaria que muitos "analistas técnicos" lessem mais sobre esses recursos antes de gritar declarações super resumidas como "O PS3 era limitado porque não tinha arquitetura UMA". Isso pode ser verdade em certos casos, mas, a menos que mencionem esses recursos, essa afirmação genérica é, na minha opinião, enganosa.
Por fim, o RSX suporta muitas formas de otimização de dados para economizar largura de banda, exemplos incluem compressão de cores 4:1, compressão de profundidade e modo "tiled" (explicarei mais sobre isso mais tarde).
Construindo o quadro (frame)
Vamos dar uma olhada em como o RSX processa e renderiza cenas em 3D.

Visão geral do pipeline do RSX.
Seu modelo de pipeline é muito semelhante ao da GeForce3, mas foi turbinado com cinco anos de progresso tecnológico. Então, sugiro verificar este artigo antes, já que este texto foca nas novas funcionalidades. Também recomendo ler sobre a GPU do PlayStation Portable, pois muitos dos novos desenvolvimentos e das novas necessidades se sobrepõem com a desse chip. Dito isso, vamos ver o que temos aqui...
Comandos

Diagrama do estágio de comando.
Assim como acontece com qualquer outra GPU, deve haver um bloco de circuito encarregado de receber as ordens de fora. Com o RSX, isso é tratado por dois blocos: Host e Graphics Front End.
O Host é responsável por ler os comandos da memória (seja local ou principal) e traduzi-los em sinais internos que outros componentes do RSX entendam. Isso é feito com o uso de quatro sub-blocos:
- Pusher: busca comandos gráficos da memória e interpreta as instruções de desvio. Ele também contém 1 KB de buffer de pré-busca. Os comandos processados são enviados para uma cache FIFO.
- Cache FIFO: armazena até 512 comandos decodificados pelo Pusher obedecendo à ordem de chegada na cache para fornecer acesso rápido.
- Puller: coleta comandos da cache FIFO sempre que o RSX está pronto para renderizar e os envia para a próxima unidade.
- Graphics FIFO: armazena até oito comandos que serão lidos pelo Graphics Front End.
O Graphics Front End lê do Graphics FIFO e sinaliza para as unidades necessárias dentro do RSX para computar as operações. Caso você lembre, isso é equivalente ao "pfifo" na GeForce3.
Como pode ser visto, comandos e dados passam por muitos buffers e caches antes de chegar ao destino final. Isso é intencional, pois evita que o pipeline fique parado devido as diferentes unidades e barramentos operando em velocidades diferentes. Assim, a memória cache tira aproveito da largura de banda rápida sempre que possível.
Shader de vértice

Diagrama do processo do estágio de vértice, observe que os Vertex Processing Engine (VPE) são ignorados se os vértices não precisam de mais serem processados pelo vertex shader.
A próxima unidade é o bloco de Geometry Processing, uma evolução do "Bloco de Vértices" da GeForce3 que realiza a transformações de vértices. Permanece programável com o uso de shaders de vértices, que atualmente é um recurso amplamente utilizado na indústria de gráficos. Além disso, o limite de instruções foi aumentado para um mínimo de 512 instruções (originalmente, 136 era o limite!).
O bloco que executa shaders é chamado de Vertex Processing Engine (VPE) e pode processar um vértice por pulso de clock. Como se não bastasse, há oito VPEs trabalhando em paralelo. Desde a série GeForce6, a Nvidia alinhou sua interface de programação de shader a um modelo chamado "Vertex Shader Model 3" ou "vs_3_0_", um padrão desenvolvido pela Microsoft para uso com suas bibliotecas DirectX 9.0c . Os VPEs também são compatíveis com o modelo não proprietário OpenGL 2.1 e com a variante da Nvidia (Cg) .
Comparado com a GeForce3, temos novas instruções disponíveis para desvios e chamadas de sub-rotina. Além disso, o VPE contém quatro amostradores de textura (texture samplers) que buscam as cores das texturas durante este estágio, caso os programadores queiram usar esta unidade para realizar algumas operações nelas.
O bloco de Geometry Processing funciona da seguinte maneira:
- O Index Vertex Processor (IDX) busca e armazena na cache de dados de vértices e texturas da VRAM. Em seguida, envia os dados para o VAB.
- O Vertex Attribute Buffer (VAB) busca os dados na cache IDX e os redireciona para cada VPE.
- Cada VPE processa os dados com base no shader carregado. Ele computa uma instrução de shader por pulso de clock.
- O resultado de cada VPE é enviado para o Post Transform Cache, que armazena em cache os resultados para pular cálculos idênticos sobre o mesmo vértice. Isso se aplica se índices de vértices forem usados em vez de dados de vértices.
- O resultado final é armazenado na Viewport Cull Unit (VPC), que aplica corte para descartar vértices encontrados fora da janela de visualização; e na Attribute RAM (ATR), que armazena em cache os atributos dos vértices (textura, cor, neblina, etc.) a serem lidos nas próximas etapas.
Rasterização

Diagrama simplificado do estágio de rasterização. O RSX incorpora unidades diferentes para calcular os valores usados para interpolação de píxeis e cores.
Seguindo, é hora de converter (rasterizar) os vértices em píxeis. O rasterizador do RSX é bastante rápido, ele pode rasterizar até 8x8 píxeis (64) por ciclo e funciona com um buffer de imagem até 4096x4096 píxeis (embora os desenvolvedores possam precisar de menos que isso).
O rasterizador aceita pontos, linhas (incluindo tipos fechados e em tiras), triângulos (incluindo tiras e leques), quadriláteros e polígonos regulares. Naturalmente, como nesta geração de consoles, o rasterizador trabalha com coordenadas de subpixel, onde os pontos de amostragem são meias-coordenadas (0,5) de píxeis. Isso permite que a unidade aplique métodos de anti-serrilhamento, como o multiamostragem (multisampling), posteriormente. A multiamostragem consiste em rasterizar a mesma geometria várias vezes, mas deslocando alguns subpíxeis a cada lote (o RSX suporta quatro modos de deslocamento) e, em seguida, calcular uma média. Isso resulta em uma imagem suavizada.
Além disso, essa unidade também realiza ocultação de profundidade (z-culling) usando a RAM dedicada dentro do RSX (com capacidade de cerca de três milhões de píxeis). Isso economiza o processamento de píxeis e estênceis que já foram renderizados e permite realizar testes de profundidade (z-test) antecipados na geometria que está chegando.
Uma unidade separada é usada para rasterizar objetos 2D (sprites), embora esta seja isolada do pipeline 3D. Consequentemente, o RSX trabalha em dois modos, 2D e 3D, mas alternar entre eles, intermitentemente, é caro em termos de desempenho.
Shader de píxel
![]()
Diagrama do estágio de Píxel/Fragmento.
A próxima unidade é o bloco Fragment Shader & Texture, que é uma unidade programável (por meio do uso de "programas de fragmentos" ou "shader") que aplica mapeamento de texturas e outros efeitos.
Sendo o sucessor avançado das unidades de textura da GeForce3, o novo bloco contém seis unidades de fragmento (também chamadas de "pipes"), cada uma processando 2x2 texels (chamados de "quads"). Para organizar várias unidades trabalhando simultaneamente, outro sub-bloco chamado Shader Quad Distributor (SQD) é colocado para distribuir quads para cada unidade de fragmento. Depois, cada unidade de fragmento carrega o programa de fragmentos.
Para realizar operações, cada pipe contém uma enorme quantidade de 1536 registradores de 128 bits. Além disso, cada pipe pode processar vários quads em paralelo (multithreading), embora o número de quads processados em paralelo dependa do número de registradores alocados para o programa de fragmento (número de threads = 1536 ÷ número de registradores reservados pelo shader). Em termos globais, até 460 quads podem ser processados em paralelo. Além disso, até três pipes de fragmentos podem processar duas instruções em simultâneo (emissão dupla, como a PPU) contanto que as instruções não dependam uma da outra.
As unidades de fragmento fornecem instruções semelhantes em termos aritmeticos à unidade de vértice, com a adição de instruções relacionadas a textura, com vários tipos de busca de textura (uma vez que as texturas podem ser codificadas usando muitas estruturas e, em seguida, comprimidas) e descompactação. Assim como o bloco de vértice, o shader de fragmento segue o modelo shader de píxel 3.0 do DirectX , o perfil NV_fragment_program2 do OpenGL e o perfil "fp40" do Cg . Tudo isso para facilitar a programação e evitar aprender APIs de baixo nível desde o início.
Por fim, como as unidades estarão constantemente buscando fragmentos de textura da RAM de vídeo ou da RAM principal, este bloco inclui três caches de textura: 4KB de cache L1 para cada pipe, 48 KB de cache L2 para buscas na RAM de vídeo; e 96 KB de cache L2 para a RAM principal. Observe que a cache da RAM principal é significativamente maior, isso foi uma decisão consciente para compensar a maior latência.
Operações de píxeis
Antes de escrever os resultados no buffer de imagem (armazenado na VRAM ou na RAM principal), um bloco final chamado Raster Operation Block (ROP) realiza testes finais nos píxeis resultantes.
Existem dois conjuntos de ROPs compostos por quatro blocos cada (oito no total). Cada grupo realiza teste de profundidade (z-testing), mistura alfa e a gravação final na memória. No total, este circuito pode processar até 16 valores de profundidade (z-values) e 8 cores de píxel por pulso de clock. Curiosamente, a variante para PC, Nvidia 7800 GTX, apresenta 16 ROPs em vez de 8, talvez esse corte tenha sido feito para priorizar a largura de banda de memória consumida pelas SPUs?
Para economizar ainda mais largura de banda, os ROPs também fornecem compressão de cor e compressão Z (z-compression). Além disso, há um Tiling mode disponível para otimizar o acesso à memória pelo codificador de vídeo. No Tiling mode, o buffer de imagem é armazenado em blocos contínuos de 128 B ordenados da mesma forma que seriam transmitidos/escaneados. Assim, a GPU é poupada de fazer trocas de páginas (usadas para endereçamento de memória) enquanto transmite o buffer de imagem para exibição, melhorando consequentemente a largura de banda. Esses 'tiles' são armazenados em locais marcados na memória exclusivos para esse tipo de endereçamento.
Uma saída de vídeo unificada
Foram-se os dias dos conectores de vídeo exclusivos de consoles e dezenas de sinais analógicos espremidos juntos em um único conector para acomodar todas as regiões do planeta. O PlayStation 3 finalmente incorporou um sinal de vídeo unificado que logo foi adotado em todo o mundo: a High Definition Media Interface (HDMI), usada para transferir áudio e vídeo simultaneamente.

Traseira do PS3, há uma saída HDMI do lado esquerdo e, no outro extremo, a antiga saída de vídeo analógico Multi A/V.
O conector HDMI é composto por 19 pinos , todos em um único soquete. Ele transfere um sinal digital, o que significa que a imagem e o áudio são transmitidos usando valores discretos de zero e um (e não uma série de valores contínuos encontrados em sinais analógicos). Consequentemente, ele não sofre com interferência ou degradação de imagem que equipamentos anteriores sofriam, como artefatos na tela produzidos por cabos SCART baratos.
Até hoje, o protocolo HDMI é continuamente revisado , com novas versões da especificação oferecendo mais recursos (por exemplo, resolução de imagem maior, taxa de atualização, espaço de cores alternativos, etc.) enquanto mantém o mesmo meio físico para compatibilidade com versões anteriores.
Durante o ciclo de vida do PS3, a Sony adicionou certas funcionalidades das novas revisões do HDMI no console por meio de atualizações de software . O último protocolo compatível com o PS3 é a versão 1.4, trazendo suporte para "televisores 3D", embora outras capacidades, como resoluções de vídeo mais altas, permaneçam limitadas a 1920x1080 píxeis (e mesmo assim, a maioria dos jogos renderizava seu buffer de imagem em 1280x720 píxeis).
Visão/projeção 3D "real"
Mas o que é esse "televisor 3D" que eu mencionei antes? Bem, acontece que a vida útil do console coincidiu com uma febre passageira por TVs 3D (as chamadas 3DTV) ]. Para suportá-las, a Sony atualizou seu SDK para ajudar na renderização de quadros estereoscópios na RSX e implementou a "especificação 3D" em seu codificador HDMI. O que acontecia nos bastidores é que o codificador transmitia dois quadros por vez, e a televisão os alternava de maneiras semelhantes ao que os óculos 3D do Master System faziam 30 anos antes.


