Mit OpenGL können Sie denselben Shader für mehrere Programme verwenden. Gibt es neben der Einsparung von wenig Arbeitsspeicher und einem Shader-Handle irgendwelche GPU-seitigen Leistungsvorteile?
Mit OpenGL können Sie denselben Shader für mehrere Programme verwenden. Gibt es neben der Einsparung von wenig Arbeitsspeicher und einem Shader-Handle irgendwelche GPU-seitigen Leistungsvorteile?
Ich bezweifle, dass es einen GPU-seitigen Leistungsvorteil gibt.
Wenn Sie beispielsweise einen generischen Shader an ein Programm binden, sollte eine effiziente Implementierung in der Lage sein, nicht verwendete Attribute zwischen diesem Shader und den anderen Shadern in diesem Programm zu entfernen und möglicherweise sogar die Shader-Logik zu vereinfachen. Dies ist natürlich kein wirklicher Vorteil gegenüber einer handoptimierten Shader-Kombination, hilft jedoch bei der Verwaltung der Komplexität / Kombinatorik und reduziert möglicherweise die Anzahl der Kompilierungen, die der Treiber ausführen muss.
Dies kann jedoch Nachteile mit sich bringen, wenn ineffiziente Treiber-Compiler-Implementierungen getroffen werden. Und es gibt einige davon, siehe http://aras-p.info/blog/2010/09/29/glsl-optimizer/ für einige einfache Dinge, bei denen einige Implementierungen falsch sein können.