Met de introductie van de Radeon 9700 heeft ATi een belangrijke slag gewonnen in de oorlog met nVidia. Maar het einde van deze oorlog is nog niet in zicht. nVidia werkt in het geheim aan een nieuw wapen dat onder de codenaam NV30 door het leven gaat. Volgens de laatste berichten van de geheime dienst DigitalTimes stuurt nVidia de NV30 nog voor het einde van november het slagveld op. Beyond 3D heeft een aantal blueprints van de NV30 en Radeon 9700 en de gegevens over het toekomstige slagveld, DirectX 9, weten te bemachtigen en een uitgebreide analyse on-line gegooid.
Microsoft heeft onlangs de nieuwste beta specificaties voor DirectX 9 opgesteld. Volgens Beyond 3D is er grote kans dat de introductie van DirectX 9 in twee fasen zal gebeuren. DirectX 9.0 met ondersteuning voor versie 2.0 (VS2.0) van de vertex shaders en versie 9.1 met de ondersteuning voor vertex shaders 3.0 (VS3.0). Vooral ATi is gebaat met deze split daar hun R300 core waar de Radeon 9700 op gebaseerd is overeenkomt met DirectX 9.0 (VS 2.0). nVidia daarentegen komt met de features van de NV30 dicht in de buurt van de specificaties van DirectX 9.1 (VS 3.0). Hetzelfde verhaal gaat trouwens ook op voor de pixel shaders.
Vertex Shaders
Het lijkt erop dat Microsoft bij het opstellen van de vertex shader v2.0 specificaties in DirectX 9 heeft gekeken naar de Radeon 9700. De R300 implementeert namelijk versie 2.0 van de vertex shaders. nVidia gaat een stapje verder met de NV30 met hun implementatie van de vertex shaders. Hoewel Beyond 3D nVidia's implementatie VS2.0+ noemt, zou je hier ook kunnen spreken van VS3.0-, want eigenlijk mist de NV30 alleen de texture lookup functie van de versie 3.0 van de vertex shaders. Zowel versie 2.0 als 3.0 van de vertex shaders zijn programmeerbaar en hiervoor krijgt de programmeur van vertex shaders programma's de beschikking over een aantal registers en instructies. Op het gebied van registers is er weinig verschil tussen VS2.0 en VS3.0. Het enige dat versie 3.0 toevoegt is de mogelijkheid om de input registers en de texture coördianten registers te indexeren. Zowel de R300 en de NV30 komen met hun implementatie het dichts in de buurt van VS2.0 hoewel er enkele verschillen tussen beide implementaties zijn.
Zo heeft de NV30 geen integer constanten, maar kan hiervoor floating point registers gebruiken. In een vertex shader programma dat alle 256 floating point constanten gebruikt kan de NV30 dus geen gebruik meer maken van lussen. Daar staat tegenover dat de NV30 tot 256 lussen kan hebben in een vertex shader programma als er weinig of geen gebruik wordt gemaakt van floating point constanten. De NV30 beschikt niet over boolean constanten om keuzen te maken. Dit is ook niet nodig omdat de NV30 over krachtige spronginstructies beschikt die het gebruik van de boolean constanten overbodig maken. De NV30 beschikt over twee adres registers. Dit maakt het mogelijk om gegevens op te zoeken in een tweedimensionale array. De VS3.0 specificaties schrijven maar een adres register voor. In VS3.0 wordt het predicate register geïntroduceerd waarover zowel de R300 als de NV30 niet beschikken. Toch heeft de NV30 hier een voordeel ten opzichte van de R300 omdat deze een conditie code register heeft dat meer functionaliteit biedt dan het predicate register. Het lijkt er dus op dat de NV30 beter bedeeld is dan de R300, maar registers zijn niet alles.
Om registers te kunnen gebruiken heb je instructies nodig. Zowel de R300 als de NV30 hebben een rijke instructieset met elk hun voor- en nadelen maar om een lang verhaal kort te maken, de NV30 heeft een uitgebreidere instructies set dan VS3.0 voorschrijft. Over de snelheid van de vertex shader units van de R300 en NV30 schrijft Beyond 3D dat de R300 klok-voor-klok sneller is dan de NV30, maar daar staat tegenover dat de NV30 over een aantal instructies beschikt waarvoor de R300 meerdere instructies moet gebruiken.
Pixel Shaders
De DirectX Pixel Shaders versie 2.0 (PS2.0) lijken de specificaties van de R300 te volgen. Maar de NV30 gaat verder en komt in de buurt van de specificaties van versie 3.0 (PS3.0) van de pixel shaders. Zowel bij ATi als nVidia ligt de nadruk op het verbeteren van de programmeerbaarheid van de pixel shaders zodat er minder bandbreedte verloren gaat bij het uitvoeren van pixel shader programma's. De NV30 en de R300 hebben meer tijdelijke registers ter beschikking dan de PS3.0 standaard voorschrijft, met een voordeel voor de NV30 die in FP16 mode twee keer zoveel waarden kwijt kan. De R300 beschikt niet over het PS3.0 positie invoer register terwijl de NV30 dat wel doet. Net zoals bij de pixel shaders beschikt de NV30 niet over constanten en kan hier elk floating point register voor gebruiken. Zowel de R300 als de NV30 hebben een uitgebreide instructie set die voldoet aan PS2.0 specificaties. De NV30 voegt hier een aantal instructies aan toe die niet in de PS2.0 of PS3.0 standaard voorkomen en dus ook niet te gebruiken zijn in een programma dat DirectX 9 compatibel is. De R300 en NV30 beschikken niet over de spronginstructies die in PS3.0 worden voorgeschreven en hebben hier ook geen alternatieven voor.
Overig
Zowel nVidia als ATi leggen de nadruk op programmeerbaarheid, efficiëntie en precisie. Doordat nVidia weinig nadruk legt op de bandbreedte van de NV30, stelt Beyond 3D dat de NV30 waarschijnlijk met een 128bits geheugenbus wordt uitgevoerd. Door de uitgebreide instructieset van de pixel en vertex shaders van de NV30 is het mogelijk dat de NV30 sommige programma's in een keer kan uitvoeren terwijl de R300 daar meerdere stappen voor nodig heeft wat tot een toename van bandbreedte gebruik kan leiden.
Wie de uiteindelijke slag gaat winnen blijft onduidelijk. Er zijn te veel verschillen tussen de R300 en de NV30, maar het is duidelijk dat nVidia met de NV30 een goede kans maakt om weer voor eventjes bovenaan te staan in afwachting van ATi's nieuwe wapen: de R350 met DDR-II ondersteuning en dus veel meer bandbreedte dan de huidige R300.