Compiler Support for High-Performance Graphics

Unser Projekt soll die Programmierung von Hochleistungsgrafiksystemen erleichtern – selbstverständlich unter Beibehaltung einer möglichst hohen Leistung. Teil unserer Forschung ist das AnySL-Projekt: In Zusammenarbeit mit dem Computer-Grafik-Team entwickeln wir ein vereinheitlichtes Shading-System, welches unabhängig von Ausgangssprache, Zielarchitektur und Rendering-Engine ist, ohne dass damit ein Verlust von Effizienz einhergeht.

Unser endgültiges Ziel ist es, ein Shading-System zur Verfügung zu stellen, das ein portierbares Shader-Format benutzt, um die Integration in jede Art von Rendering-Engine (z. B. Ray Tracing, Rasterisierung, globale Beleuchtung) zu ermöglichen. Außerdem wird die Integration bestehender Shading-Sprachen in das System nur minimalen Aufwand erfordern. Auch in diesen Fällen wird die Compiler-Technologie von AnySL maximale Leistung sicherstellen.

Shader bezeichnen Programm-Fragmente, welche die Funktionalität eines Rendering-Systems für spezielle Aufgaben erweitern – ähnlich wie Plugins, die in anderen Situationen verwendet werden. Dazu zählt beispielsweise die Berechnung von Emission, die Interaktion von Licht mit bestimmten Materialien oder auch die Verarbeitung geometrischer Objekte. Der wesentliche Unterschied zu Plugins, die durch Funktionen oder Bibliotheken aufgerufen werden, ist, dass der Shading-Code in der Regel den Bedürfnissen der Zielanwendung angepasst werden muss. Dabei spielen Leistung und Programmstruktur eine wesentliche Rolle. Außerdem sollten sie für den Programmierer möglichst einfach zu nutzen sein. Um allerdings eine bestimmte Shading-Sprache zu unterstützen, muss der Compiler auch über ein entsprechendes Compiler-Framework verfügen. Das führt dazu, dass bei der Implementierung eines Renderers der Großteil der Zeit in die Implementierung des Compilers investiert wird – eine Aufgabe, die eigentlich gar nicht gewollt ist.

AnySL ist ein neuartiger Ansatz, um die Integration einer Shading-Sprache in einen Renderer zu erleichtern. Wir kompilieren Shader zu einem Programmkonstrukt, das von der Shading-Sprache, dem Renderer und der angedachten Hardware-Plattform unabhängig ist. Der Renderer muss die Umsetzung der grundlegenden Konstrukte der Shading-Sprache erlauben. Durch eine Erweiterung des Renderers mit einer Just-in-time-Compiler-Bibliothek werden die Shader geladen und zur Laufzeit mit der Schnittstelle des Renderers „verklebt“. Danach wird der Shader der zugrunde liegenden Hardware-Plattform angepasst. Mit diesem Ansatz werden alle normalerweise durch Abstraktionsmechanismen bedingten Leistungshindernisse beseitigt – hohe Leistung und maximale Flexibilität bleiben erhalten.

Das AnySL Shading-System verwendet einen eingebetteten just-in-time Compiler („Low-Level Virtual Machine“ (LLVM)) um den Shader zu laden und ihn während des laufenden Betriebs anzupassen und zu optimieren. Dies erlaubt uns eine blitzschnelle Neukompilierung - z. B. nach Änderung der Shader-Parameter – ohne dadurch Leistungseinbußen hinnehmen zu müssen.