SavageX
2005-07-17, 16:20:45
Hallo,
ich versuche, dem GLSL pixel shader der Darkplaces engine (Grundlage von z.B. Nexuiz, http://www.nexuiz.com ) etwas mehr Performance abzuringen (ich bin nicht engine coder, mag es aber zumindest, zumindest die Grundzüge zu verstehen).
Der originale Shader: http://savage747.sa.funpic.de/shader.html
(Und ja, zukünftige Versionen werden partial precision auch für nicht-GFFX Karten haben - bringt auf meiner 6800LE schonmal bis zu 50% mehr Performance)
Auf dem NV40 ist normalize "kostenlos", kann also nach jedem Cycle eingeschoben werden, ohne die ALUs für weitere Instruktionen in diesem Takt zu sperren (AFAIK). Nun braucht normalize aber dennoch etwas Zeit, um Ergebnisse abzuliefern (mindestens einen Takt, denke ich).
Angenommen der nächste GLSL Befehl greift auf dieses Ergebnis zurück - wird er um einen Takt verzögert oder einfach in die Pipe hinterhergeschoben (also ohne Lücke)? Würde es sich lohnen, zuerst andere Berechnungen vorzunehmen, die das Ergebnis nicht brauchen? Wenn dem so ist: Sortiert der GLSL Compiler den Code halbwegs zuverlässig entsprechend um - oder lohnt es sich, die Reihenfolge im GLSL shader selbst händisch umzustellen?
Ich bitte um Verzeihung, wenn diese Frage etwas profan ist - allerdings habe ich leider bisher nichts gefunden, was meine Fragen beantworten würde.
Danke,
SavageX
ich versuche, dem GLSL pixel shader der Darkplaces engine (Grundlage von z.B. Nexuiz, http://www.nexuiz.com ) etwas mehr Performance abzuringen (ich bin nicht engine coder, mag es aber zumindest, zumindest die Grundzüge zu verstehen).
Der originale Shader: http://savage747.sa.funpic.de/shader.html
(Und ja, zukünftige Versionen werden partial precision auch für nicht-GFFX Karten haben - bringt auf meiner 6800LE schonmal bis zu 50% mehr Performance)
Auf dem NV40 ist normalize "kostenlos", kann also nach jedem Cycle eingeschoben werden, ohne die ALUs für weitere Instruktionen in diesem Takt zu sperren (AFAIK). Nun braucht normalize aber dennoch etwas Zeit, um Ergebnisse abzuliefern (mindestens einen Takt, denke ich).
Angenommen der nächste GLSL Befehl greift auf dieses Ergebnis zurück - wird er um einen Takt verzögert oder einfach in die Pipe hinterhergeschoben (also ohne Lücke)? Würde es sich lohnen, zuerst andere Berechnungen vorzunehmen, die das Ergebnis nicht brauchen? Wenn dem so ist: Sortiert der GLSL Compiler den Code halbwegs zuverlässig entsprechend um - oder lohnt es sich, die Reihenfolge im GLSL shader selbst händisch umzustellen?
Ich bitte um Verzeihung, wenn diese Frage etwas profan ist - allerdings habe ich leider bisher nichts gefunden, was meine Fragen beantworten würde.
Danke,
SavageX