A Tabela 1 apresenta as principais características das especificações lançadas pela IBM durante a década de 80.

Figura 1
2. História da GPU

Antes do efetivo surgimento dos processadores gráficos dedicados, surgiram hardwares que, apesar de não realizarem nenhum processamento gráfico efetivo, encarregavam-se da exibição das imagens e textos nos monitores da época. Tais dispositivos eram denominados "placas de vídeo" (video cards) e é por este nome que algumas pessoas ainda se referem às GPUs modernas.


2.1. Placas de Video

A primeira placa de vídeo a ser comercializada foi lançada pela companhia IBM juntamente com o primeiro IBM PC em 1981. O dispositivo de vídeo, que seguia a especificação MDA (Monochrome Display Adapter), era capaz de trabalhar apenas no modo texto, apresentando 80x25 linhas por vez, na tela do monitor. Ele também possuía 4KB de memória e trabalhava duas cores de pixel: a do fósforo do monitor e preto. Um exemplo de computador da época é mostrado na Figura 1.
       Com o passar do tempo várias especificações de placas de video surgiram, cada uma com alguns avanços quanto à definição e memória em relação às anteriores.


Figura 1 - Computador IBM com placa de video com especificação MDA e monitor de fósforo verde.
Especificação
Ano
Modo Texto
Modo Gráfico
Cores
Memória
MDA
1981
80x25
-
2
4KB
CGA
1981
80x25
640x480
4
16KB
HGC
1982
80x25
720x348
2
64KB
EGA
1984
80x25
640x350
16
256KB
IBM 8514
1987
80x25
1024x768
256
-
MCGA
1987
80x25
320x200
256
-
VGA
1987
80x25
640x480
256
256KB
SVGA
1989
80x25
800x600
256
512KB
XGA
1990
80x25
1024x768
65536
2MB
Tabela 1 - Evolução das especificações das placas de vídeo na década de 80.
       Em 1985, a companhia Amiga lançou o primeiro computador Commodore, que possuía um co-processador dedicado à rápida transferência de dados dentro da memória do computador. Tal dispositivo, denominado blitter, era capaz de copiar uma grande quantidade de dados de uma área de memória à outra em paralelo à CPU. O nome blittler tem sua origem no acrônimo BLIT (BLock Image Transfer) e era usado principalmente para movimentar grandes imagens bitmap dentro do espaço de memória.
       Pouco tempo depois, no começo de 1987, a IBM lança o IBM 8514, que foi o primeiro computador a possuir tanto um dispositivo blitter quanto um hardware dedicado ao tratamento de primitivas 2D.

2.2. Primeira Geração de GPUs

A primeira geração de GPUs, que inclui as placas NVidia TNT2, ATi Rage e 3dfx Voodoo3, foram lançadas entre 1991 e 1998 e eram capazes de rasterizar triângulos pré-transformados e aplicar uma ou duas texturas sobre os mesmos. Estas placas também implementavam o conjunto de funcionalidades definidas pelo DirectX 6 e OpenGL 1.0. Apesar de liberarem a CPU de grande parte do processamento de objetos 2D e 3D, estas GPUs ainda não eram capazes de realizar transformações sobre os vértices dos objetos 3D e possuíam um conjunto bastante limitado de operações matemáticas que podiam ser executadas sobre as texturas a fim de definir as cores dos pixels durante o processo de rasterização.

2.3. Segunda Geração de GPUs

Entre os anos de 1999 e 2000, surgiram as GPUs de segunda geração, dentre elas: NVidia GeForce 256 e GeForce2, ATI Radeon 7500 e S3 Savage 3D. Tais GPUs eram capazes de realizar transformações e efeitos de iluminação (T&L) sobre os vértices dos objetos 3D, liberando a CPU de tal carga de processamento. Nesta mesma época, os padrões OpenGL e DirectX 7 também passaram a suportar T&L via hardware. O conjunto de operações matemáticas expandiu-se um pouco, passando a suportar cube mapping e operações com sinal, mas continuou bastante limitado.

2.4. Terceira Geração de GPUs

A terceira geração de GPUs foi bastante curta e restringiu-se às GPUs lançadas em 2001, como, por exemplo, as NVidia GeForce3 e GeForce4 Ti, a GPU do Microsoft Xbox e as ATI Radeon 8500. Esta foi a primeira geração a permitir a execução, na própria GPU, de programas para transformação de vértices (Vertex Shaders). Sendo assim, ao invés de oferecer suporte em hardware dos modos de iluminação e transformação especificados pelas bibliotecas OpenGL e DirectX 7, estas GPUs deixavam a aplicação especificar qual era a seqüência de operações a ser realizada sobre os vértices. Elas também possuíam mais opções de configuração de processamento dos pixels, mas, como este passo ainda não era programável, esta geração costuma ser considerada uma geração de transição.

2.5. Quarta Geração de GPUs

A quarta geração de GPUs, que compreende as GPUs lançadas entre os anos de 2002 e 2005, como é o caso da família NVidia GeForce FX e ATI Radeon 9700, permitiam tanto a programação de vértices quanto a de fragmentos (pixel shaders). Foi com esta geração de placas que surgiu o "C for graphics", mais conhecido como Cg, desenvolvido pela NVidia, uma linguagem de programação baseada em C e voltada para a implementação de vertex programs e fragment programs que veremos mais adiante.

2.6. Quinta Geração de GPUs

Esta geração compreende todas as GPUs lançadas a partir de 2006, cuja principal característica é a arquitetura unificada de processamento e um pipeline cíclico. Exemplos de placas que apresentam tais características são NVidia GeForce 8800 e GeForce 200 e ATI Radeon HD. Estas GPUs também possuem suporte à linguagens de programação de mais alto nível que o Cg como, por exemplo, o CUDA no caso da NVidia. Mais informações a respeito da arquitetura destas GPUs modernas podem ser vistas na seção seguinte.

Figura 5 - Backbreaker, da Euphoria (2008), utilize CUDA.
Figura 2 - Test Drive 6, da Cryo Interactives (1999), utiliza o suporte em hardware de T&L.
Figura 3 - Ballistics, da GRIN (2001), utiliza Vextex Shaders.
Figura 4 - Crysis, da Crytek (2007), utiliza Geo Shaders.