Kisah GPU pertama: Rendition Vérité 1000

gambar

Ada banyak literatur bagus tentang mesin Gempa: buku, artikel yang tak terhitung jumlahnya di Internet, blog, dan wiki. Di antara mereka, favorit saya adalah Buku Hitam Pemrograman Grafik oleh Michael Abrash, diterbitkan pada tahun 1997, dan Rocket Jump: Quake dan Zaman Keemasan Penembak Orang-Pertama oleh David L. Craddock (2018).

Sayangnya, Anda dapat menemukan sangat sedikit informasi tentang peralatan yang dikembangkan sekitar tahun 1996, yang memungkinkan untuk meningkatkan rendering 3D dan, khususnya, grafis Perangkat Lunak id permainan revolusioner. Di dalam arsitektur dan desain potongan silikon ini terdapat sejarah duel teknologi antara Rendition V1000 dan 3dfx Interactive Voodoo.

Setelah merilis vQuake pada awal Desember 1996, tampaknya Rendition telah mengambil alih. V1000 adalah kartu cepat yang mampu meluncurkan Quake dengan akselerasi perangkat keras, yang, menurut pengembang, memberikan tingkat pengisian 25 megapiksel / dtk [1] . Tepat sebelum Natal, Rendition mengambil alih pasar, memungkinkan pemain untuk meluncurkan game dengan resolusi tinggi, frame rate dan warna 16-bit [2] . Tetapi, seperti yang ditunjukkan sejarah, cacat dalam desain Vérité 1000 ternyata berakibat fatal bagi perusahaan yang inovatif.

Aplikasi pembunuh dan waktu yang dipilih dengan benar


Ide peralatan khusus untuk akselerasi grafis tidak muncul tiba-tiba. Kembali pada tahun 1954, United Airlines memiliki simulator penerbangan untuk pilot pelatihan. Pemain terbesar di lapangan, Silicon Graphics, Inc. (SGI), muncul pada tahun 1982 dan pada saat itu menawarkan workstation yang kuat seperti Indy, O2 dan Indigo². Namun, harga mesin-mesin ini tidak memungkinkan mereka untuk dibeli oleh konsumen biasa (SGI Infinite Reality 1993 dapat dijual seharga $ 100.000, yang setara dengan $ 177.262 pada 2019). Alasan untuk situasi yang muncul di akhir 90-an adalah kombinasi dari tiga faktor.


Pertama, harga RAM telah menurun secara signifikan. Meskipun ada kekurangan RAM yang sangat besar pada tahun 1995 (terutama karena memori 8 MB direkomendasikan untuk Microsoft Windows 95), dari tahun ke tahun harga RAM turun hampir 90%. Ini membuka prospek untuk kartu dengan buffer bingkai yang sangat besar (640x480 dengan warna RGB 16-bit) yang dapat menyimpan tekstur secara lokal.

Kedua, peningkatan kinerja RAM. RAM FastPage adalah langkah maju dibandingkan dengan DRAM, tetapi setelah rilis EDO RAM, penundaan menurun sebesar 30%, dan waktu akses ke RAM adalah 50 ns [3] .

Bagian ketiga dan terakhir dari teka-teki itu adalah aplikasi pembunuh. PC memiliki CPU yang kuat, misalnya, Intel Pentium dengan frekuensi 166 MHz, yang digunakan pengembang untuk membuat game 3D berkualitas tinggi. Pada tahun 1996, semua orang berbicara tentang dua game: Core Design's Tomb Raider dan id Software's Quake.



Rendition dan V1000


Rendition Inc didirikan pada tahun 1993. Dua tahun kemudian, pada tahun 1995, perusahaan mengumumkan penciptaan arsitektur V1000, yang dengan cepat dilisensikan oleh empat OEM. Creative Labs 3D Blaster PCI, 3D Sierra Screamin, Canopus Total 3D dan Intergraph Reactor adalah yang pertama kali muncul di pasaran, dan segera MiRO mengambil alih.


Reaktor Intergraph. Gambar dari vgamuseum.ru.


Creative Labs 3D Blaster. Gambar klub "Kartu Grafis Retro".

Perhatikan bahwa chip V1000-E pertama kemudian diganti dengan V1000L-P dengan konsumsi daya yang lebih rendah dan 20% lebih cepat [4] .


MiroCrystal VRX. Gambar dari vgamuseum.info.


Canopus Total3D. Gambar dari vgamuseum.ru.


Nama kartunya berubah, tetapi chip yang digunakan di dalamnya sama. Satu-satunya parameter yang digunakan produsen untuk menyeimbangkan harga dan kinerja adalah kualitas yang dipasang pada kartu RAM.

  1. Port VGA untuk menghubungkan ke monitor CRT.
  2. Ramdac, biasanya dari Bt, tetapi terkadang chip AT&T.
  3. Inti dari kartu tersebut adalah chip V1000-E, V1000-P atau v1000-L.
  4. Delapan 512 kibyte DRAM / EDO chips (total 4 mebibytes) untuk menyimpan buffer bingkai dan tekstur.
  5. 64 kb EEPROM yang mengandung BIOS.

V1000 memiliki dua sifat bawaan yang penting untuk dicatat karena 3dfx Voodoo (yang akan saya bahas nanti) menggunakan pendekatan yang sangat berbeda.

Pertama, kartu itu seharusnya menjadi pengganti untuk apa yang sudah dipasang di pembeli. Chip mendukung rendering 2D dan 3D dalam VGA, dan berkat sakelar konteks, ia memiliki mode "3D dalam jendela" yang mengesankan. Oleh karena itu, kartu tersebut memiliki port VGA output tunggal.

Fitur kedua adalah arsitektur "besi besar", berdasarkan pada CPU Mips tunggal yang mendapatkan akses ke semua 4 byte memori. Bus data 64-bit di antara mereka tidak memiliki properti khusus. Desain standar ini memudahkan untuk memprogram kartu menggunakan mikrokode yang dapat di-boot (ini mengubah kartu menjadi GPU pertama untuk PC, jauh sebelum Nvidia membuat definisi ini.)

Pemrograman V1000


SDK [5] datang dengan satu set file header untuk berinteraksi dengan bahasa C (RRedline pada Windows dan Speedy3D pada DOS). Render dari segitiga bertekstur menyerupai apa yang Vulkan dengan VRAM manual sediakan saat ini. API, yang mampu menampilkan segitiga bertekstur dengan sudut pandang, juga mendukung pengujian alfa, pencampuran alfa, dan kabut.

#include <string.h> #include <windows.h> #include <redline.h> WinMain(HINSTANCE instance, HINSTANCE prevInstance, LPSTR cmdLine, int cmdShow){ int WIDTH=640, HEIGHT = 480; HWND hWndMain = ... ; // Setup Verite board and resolution/refresh rate v_handle verite; VL_OpenVerite(hWndMain, &verite); V_SetDisplayType(verite, V_FULLSCREEN_APP); V_SetDisplayMode(verite, WIDTH, HEIGHT, 16, 75); // Copy texture to VRAM bmp_info bmp = loadBMP("data\\rlogo.bmp"); v_memory memObj = V_AllocLockedMem(verite, bmp.linebytes*bmp.height); memcpy(V_GetMemoryObjectAddress(memObj), bmp.addr, bmp.linebytes*bmp.height); v_surface *display, *texture; VL_CreateSurface(verite, &display, V_SURFACE_PRIMARY, 2, V_PIXFMT_565, WIDTH, HEIGHT); VL_CreateSurface(verite, &texture, 0, 1, V_PIXFMT_565, bmp.width, bmp.height); v_cmdbuffer cmdbuffer = V_CreateCmdBuffer(verite, 0, 0); VL_LoadBuffer(&cmdbuffer, texture, 0, bmp.linebytes, bmp.width, bmp.height, memObj, 0); VL_InstallDstBuffer(&cmdbuffer, display); VL_InstallTextureMap(&cmdbuffer, texture); VL_SetSrcFunc(&cmdbuffer, V_SRCFUNC_REPLACE) // Clear screen to black VL_FillBuffer(&cmdbuffer, display, 1, 0, 0, display->width, display->height,0); // Populate cmd with triangle coo and textCoo v_kaxyzuvq vertex[3] = ... ; VL_Triangle(&cmdbuffer, V_FIFO_KAXYZUVQ, &vertex[0], &vertex[1], &vertex[2]); V_IssueCmdBuffer(verite, cmdbuffer); VL_SwapDisplaySurface(&cmdbuffer, display); } 

RRedline memuat 128 KB mikrokode ke dalam Vérité dan menerjemahkan panggilan C menjadi panggilan fungsi assembler V1000.

Fakta yang menarik: nama API "RRedline" mengalahkan frase "Siap Rendition" dan kemungkinan besar dipilih secara kolektif. Namun, nama Speedy3D adalah ide dari Walt Donovan.

Faktanya, v1000 hanyalah CPU lambat (25 MHz), yang memiliki 32 * 32 siklus tunggal (menempati sebagian besar chip!), Instruksi satu siklus untuk menghitung nilai kebalikan yang diperkirakan (mis., Divisi bilangan dua pendekatan yang didekati), dan seperangkat instruksi RISC yang biasa. Oh, dan juga instruksi "bilinear loading", yang membaca blok memori linier 2x2 dan melakukan penyaringan bilinear berdasarkan nilai fraksional dari u dan v yang diteruskan ke instruksi. Ada cache kecil di peta, tampaknya, hanya 4 piksel. Oleh karena itu, jika blok 2x2 yang cocok sempurna muncul, kami menerima pengurangan beban pada bandwidth memori.

Tidak ada dukungan perangkat keras untuk buffer-Z. Oleh karena itu, perangkat lunak yang berjalan di v1000 harus membaca Z, melakukan perbandingan, dan kemudian memutuskan apakah akan menulis atau tidak.

- Walt Donovan (Arsitek Algoritma)

Untuk mengirim tekstur dan mikrokode ke kartu, pengemudi menggunakan DMA untuk mentransfer data melalui PCI tanpa intervensi CPU. Dalam praktiknya, banyak motherboard tidak memiliki kontrol bus dengan benar, sehingga game harus kembali ke mode PCI FIFO, yang secara negatif mempengaruhi kinerja [6] . Di dalam kartu, semua operasi dilakukan dalam integer titik tetap 32-bit.

Pengembang memutuskan bahwa Rendition sepenuhnya dapat diprogram, tetapi tidak menggunakan pipa cerdas atau sinkronisasi cepat. Karena itu, jika 25 instruksi diperlukan untuk merekam piksel, maka kami hanya mendapatkan 1 megapiksel / dtk. Jika Anda menggunakan peralatan dengan fungsi tetap, Anda dapat membuat konveyor yang setara dengan 25 instruksi ini dan mencapai 25 megapiksel / s. Karyawan 3dfx berasal dari SGI, sehingga mereka memilih pendekatan yang ternyata merupakan keputusan yang tepat - untuk membuat mesin pengolah segitiga dengan fungsionalitas tetap dan subset fungsi OpenGL untuk manajemen dalam peralatan. Pengembang V1000 memiliki pengalaman yang sama sekali berbeda, mereka tidak tahu OpenGL, dan karena itu memutuskan bahwa akan lebih tepat untuk membuat CPU.

- Walt Donovan (Arsitek Algoritma)

Selain semua rangkaian fungsi ini, kartu juga memiliki sistem anti-aliasing inovatif, yang memiliki efek samping yang lucu.

Algoritme anti-aliasing yang digunakan dalam vQuake telah dipatenkan (nomor paten 6005580). Ada lelucon lucu tentang algoritma ini. Itu hanya bekerja dengan segitiga, tetapi tidak interval. Gempa menggunakan konsep "buffer-z sempurna," di mana grafik dibagi menjadi interval dan diurutkan secara visual menggunakan BSP / PVS (partisi ruang biner / satu set elemen yang berpotensi terlihat). Oleh karena itu, mesin menciptakan serangkaian interval yang idealnya menutupi layar tanpa overlay dan piksel yang hilang, dan untuk rendering, operasi tulis tunggal (tanpa buffering z!) Pada layar diperlukan memori. Namun, data awal untuk interval ini adalah segitiga. Algoritma antialiasing mencari tepi siluet dan menghaluskannya. (Untuk informasi lebih lanjut tentang ide ini, lihat humus.name, entri antialiasing Geometrik Pasca Proses dari Maret 2011 - penulis menemukan teknologi ini lagi!) Tetapi karena anti-aliasing dilakukan setelah layar diberikan (semua interval sudah diambil), algoritma konsep rupanya punya tulang rusuk atau tidak. Dia tetap melukisnya. (Jika buffer-z digunakan, hanya tepi yang terlihat yang akan digambar ulang!) Dalam praktiknya, ini bukan masalah besar, karena BSP biasanya memotong segitiga yang tidak terlihat dengan sangat baik.

Tetapi tidak dengan model karakter! Oleh karena itu, vquake memungkinkan pemain untuk melihat orang-orang bersembunyi di balik pintu dan dinding, menciptakan distorsi kecil dan bergerak dalam tekstur!

- Walt Donovan (Arsitek Algoritma)

vGempa


Pada saat kartu dirilis, mereka mendukung beberapa permainan bagus. Ya, Descent II, Grand Prix Legends, IndyCar Racing II, Myst, Nascar Racing, EF2000, dan Tomb Raider adalah permainan yang bagus, tetapi Quake adalah berlian sejati dalam mahkota, penjualan yang paling menuntut dan mempromosikan. Game id Software menerima porta sendiri di bawah Vérité yang disebut vQuake, dirilis pada 2 Desember 1996. Itu ditulis oleh Walt Donovan dan Stefan Share dari Vérité bekerja sama dengan id Abrash Michael.

Pekerjaan itu cukup melelahkan, tetapi pelabuhan itu berhasil. Pentium 166Mhz, yang mampu menghasilkan Quake pada resolusi 320x200 pada 26 frame per detik, bisa melompat ke 640x480 dengan filter bilinear dan masih membuat pada 22 frame per detik [8] . Dalam praktiknya, para pemain memilih resolusi 512x384, yang tampak cantik dan memungkinkan untuk menyediakan 32 frame per detik pada P166. Untuk waktu yang singkat, vQuake telah menjadi cara terbaik untuk bermain Quake.

gambar

Render perangkat lunak

gambar

Vérité V1000

Terima kasih banyak kepada pengguna @swaaye dari forum vogons.org untuk tangkapan layar dari V1000 dan Fruit Of the Dojo untuk port Quake di MacOSX yang berkualitas tinggi dan mudah diretas. [9] .

gambar

Render perangkat lunak

gambar

Vérité V1000

Z-buffer cacat


Apa yang tidak dimiliki V1000 (dan secara tidak langsung penggantinya V2200) adalah akselerasi perangkat keras z-buffer. Segera setelah pengembang memasukkan uji kedalaman, laju pengisian turun menjadi 12,5 megapiksel / dtk dan laju bingkai dikurangi setengahnya. Seperti Stefan Podell kemudian jelaskan [10] , vQuake (dan semua game lainnya) diangkut ke V1000 sedemikian rupa untuk meminimalkan pembacaan z-buffer.

Pengembang menemukan bahwa satu-satunya cara untuk memastikan kecepatan yang diperlukan adalah mentransfer bagian utama pekerjaan ke CPU. Dalam kasus vQuake, ini berarti bahwa peta akan digunakan sebagai renderer interval ultrafast horizontal yang selalu menulis ke z-buffer, tetapi z dibaca dan dibandingkan hanya ketika merender musuh. Dan meskipun para pengembang berhasil menciptakan produk yang bagus, konsekuensi dari pilihan arsitektur seperti itu sudah lama ada.

3dfx dan drop Rendition


id Software merilis GLQuake pada 22 Januari 1997. Itu diterapkan berdasarkan miniGL (subset dari standar OpenGL 1.0, yang, antara lain, tidak memiliki GL_LIGHT dan GL_FOG). Biner ini membuka pintu ke semua kartu PC yang dipercepat perangkat keras. Dalam hal ini, kartu Voodoo 3dfx Interactive sangat menonjol, kinerjanya yang menakjubkan (41fps dalam resolusi 512x384 dengan warna 16-bit pada P166 [11] ) menjadi standar de facto untuk akselerator 3D. Tingkat pengisian V1000 sebesar 25 megapiksel / dtk, yang dulunya sebanding dengan rendering perangkat lunak Pentium, sekarang tampak biasa-biasa saja dengan latar belakang 50 megapiksel / dtk dari kartu Voodoo, yang bahkan tidak terpengaruh oleh z-tes.

Respons Rendition adalah V2x00 yang lebih kuat, yang secara paradoks memperburuk situasi. Diiklankan bahwa berkat perangkat keras z-buffer, V2x00 dua kali lebih cepat, namun, itu tidak dapat meningkatkan bahkan frame rate di vQuake. Anomali ini merusak kepercayaan pelanggan dan memengaruhi pengembang vQuake, Stefan Sharele, yang merasa perlu menjelaskan mengapa kinerja vQuake dibatasi oleh CPU daripada GPU [12] .

... reputasi saya ternyata ternoda oleh kenyataan bahwa VQuake dan VHexen2 tidak bekerja lebih cepat pada V2x00, jadi saya harus menjelaskan mengapa ini terjadi.

[...]

Walt dan Michael memutuskan bahwa karena Verite 1000 tidak berkinerja sangat baik dalam piksel dengan buffering Z, membiarkan Pentium melakukan interval penyortiran ini akan mengurangi jumlah piksel yang perlu digambar Verite. Selain itu, kami dapat menonaktifkan fungsi perbandingan Z di Verite.

[...]

... apa pun chip Verite itu, CPU punya banyak pekerjaan.

- Stefan Podell

Selain itu, ada masalah yang signifikan dalam arsitektur perangkat keras, yang awalnya menyebabkan kegagalan [13] V2x00. Butuh beberapa bulan untuk memperbaiki masalah, dan bahkan setelah itu dewan masih bekerja pada frekuensi 50 MHz, sementara NVidia NV3 dan Voodoo2 sudah mencapai 100 MHz.

Generasi ketiga, berdasarkan V3300, bisa mengubah arah sejarah, tetapi terlambat. Proyek dibatalkan pada tahun 1998, setelah Rendition diakuisisi oleh Micron Technology.

Saat bekerja di Rendition, kami membuat banyak kesalahan. Dimungkinkan untuk merilis v1000 beberapa bulan sebelumnya (dan tidak memiliki pesaing selama bulan-bulan ini) jika kami mengembangkan skema sendiri dan tidak ditransfer ke fab. Selain itu, kontrol kualitas chip menimbulkan pertanyaan. Seorang lelaki di perusahaan kami menghabiskan beberapa bulan menerapkan dekompresi mpeg dalam bahasa assembler V1000, tetapi tidak dapat membuatnya bekerja karena bug chip yang tidak terduga.

vQuake bekerja dengan baik hanya karena v1000 tidak melakukan banyak pekerjaan. "Jadikan daftar interval ini", "smooth this edge" - itu hampir semua yang dia lakukan. Mike Abrash dan saya menghabiskan terlalu banyak waktu membuat Quake kompatibel dengan V1000, jadi model ini tidak cocok untuk jangka panjang.

- Walt Donovan (Arsitek Algoritma)

Setelah runtuhnya Rendition, 3dfx melipatgandakan upayanya untuk mempromosikan Voodoo2, karakteristik luar biasa yang memungkinkan untuk menyapu semua pesaing. Raja grafis 3D pada PC telah menguasai pasar untuk sementara waktu. Kemudian permainan berlanjut, pesaing baru muncul di tempat, dan di antara mereka adalah ATI Kanada dan perusahaan yang hampir tidak dikenal pada waktu itu bernama Nvidia.

Referensi


[1] Sumber: VGA Museum, V1000 Texel Fillrate (MTexel / s) dilaporkan 25

[2] Sumber: John Carmack .plan 22 Agustus 1996 “pada 512 * 384 hampir dua kali lebih cepat”

[3] Sumber: 3dfx VOODOO1 Referensi Rev. 1.0

[4] Sumber: Tinjau V1000

[5] Sumber: Rendition Verite V1000 SDK

[6] Sumber: Ketidakmatangan bus PCI [...] yang disebabkan oleh bug DMA muncul ke permukaan

[7] Sumber: Panduan Pemrograman RRedline

[8] Sumber: Tingkatan yang dicapai untuk membandingkan Rendition Vérité V1000-E dan V1000L-P

[9] Sumber: Kode sumber port Gempa MacOSX X di github.com

[10] Sumber: posting Stephan Podell BSS

[11] Sumber: Perbandingan Frame-rate dalam GLQuake Menggunakan Voodoo1

[12] Sumber: posting Stephan Podell BSS

[13] Sumber: wikipedia.com, bagian Downfall

Source: https://habr.com/ru/post/id446570/


All Articles