Nvidia liefert die DLL zusammen mit einem Vertrag, der den Entwickler verpflichtet, diese DLL zu verwenden. Wenn man Nvidia wäre, könnte man - ich behaupte nicht, dass Nvidia das tut - ein Update der DLL in letzter Minute liefern. Nehmen wir mal an, das passiert zwei Tage vor dem Auslieferungsdatum eines Spiels und die Entwickler können noch die zwei Tage mit Qualitätstests verbringen, auf die man sich zuvor geeinigt hat. Die DLL implementiert dann den gewünschten Effekt einigermassen vernünftig, aber: Er ist auf AMD- wie Nvidia-Hardware gleichermaßen langsam.
Jetzt kommt der Shader-Austausch ins Spiel. Am Veröffentlichungstag des Spiels bringt Nvidia einen neuen Treiber heraus, der den Effekt aus der DLL ersetzt. In der DLL war die Funktion in meinem hypothetischen Beispiel absichtlich kaputt, und der Treiber repariert das. Nvidia kann nun sagen: 'Schaut nur her, wir haben den Treiber für dieses Spiel optimiert und dabei einen tollen Job gemacht, weil wir die Spieler so sehr lieben. Hier ist die höhere Leistung, die ihr als Nvidia-Besitzer verdient.' Nvidia erntet in diesem Szenario also die Lorbeeren dafür, dass es einen kaputten Shader durch einen funktionierenden ersetzt hat.
Wenn man genauer hinschaut, sieht man, wie clever das ist. Nvidia kann die DLL zu jedem Zeitpunkt an den Spieleentwickler liefern. Der hat keinen Grund, Verdacht zu schöpfen, weil die Leistung auf beiden Plattformen schlecht ist. Zudem ist es ein neuer Grafikeffekt, von dem man noch nicht wissen kann, wie die Leistung eigentlich ausfallen sollte. Das zu debuggen geht auch nicht, weil man nur die DLL hat.
Wir sitzen da und kratzen uns am Kopf, weil wir frühere Versionen des Spiels hatten, bei dem ein bestimmter Effekt AMD- und Nvidia-Chips stark verlangsamt hat. Und auf einmal gibt es da den neuen Nvidia-Treiber, der den Effekt viel schneller macht. Wir müssen dann an dem Tag, an dem das Spiel erscheint, von vorne anfangen. Die Spieletester machen das auch - manchmal auch mit Vorabversionen. Die Tester wollen dann aber ihre Leser dahingehend beraten, welche Hardware sich für das Spiel am besten eignet. AMD sieht dabei schlecht aus, weil die Tester mit schlechtem Code arbeiten, den Nvidia geschrieben hat.
Niemand entwickelt, ohne zumindest in einen Teil des Quelltextes Einblick nehmen zu können", erklärt Huddy weiter. "Für AMDs SDK bieten wir den vollen Quelltext an. Microsoft tut das auch, mit Ausnahme der DirectX-DLLs. Wenn es dabei aber eine neue Funktion wie Displacement Mapping gibt, zeigt es auch dafür den Code.
Die einzige Ausnahme ist im Moment Nvidia. Es zeigt Videos mit Beispielen für die Effekte und gibt einem dann die DLLs. Es soll jetzt zwar Ausnahmen unter nicht bekannten Bedingungen geben, bei denen die Spieleentwickler den Quelltext sehen dürfen, aber das trifft auf uns als AMD nicht zu. Wir werden vom Zugang zum Code und manchmal auch den DLLs ausgeschlossen. Es gab Vorfälle, bei denen uns Spieleentwickler sagten, sie dürften uns laut ihren Verträgen mit Nvidia all das nicht geben. Um unsere Treiber zu optimieren, ist es aber der einzige Weg, sich den Code anzuschauen, zu verstehen, was er tut, und dann Teile davon durch eigene Shader-Programme im Treiber zu ersetzen.
In all der Zeit in der Branche habe ich nie versucht, einen Spieleentwickler dazu zu bringen, für einen Effekt eine DLL von mir zu verwenden. Ich hatte auch nie eine Anfrage in dieser Richtung. Auch als ich bei Nvidia war, haben wir das nicht gemacht. Man fragt sich jetzt, was der Grund dafür sein könnte, nur DLLs zu liefern. Nvidias Argument ist im Moment, dass es sein geistiges Eigentum schützen müsse. Das war aber bisher noch nie ein Problem. Es gibt ihnen aber meiner Meinung nach die Möglichkeit, mich dazu zu zwingen, in einem Benchmark zu verlieren, den Nvidia geschrieben hat - und ich habe dabei nichts falsch gemacht.