Vcc, ein Clang-basierter Compiler, der zum Generieren von ausführbarem Code in Vulkan entwickelt wurde

vcc

Vcc: der Vulkan Clang-Compiler

In der Grafik-API-Landschaft Die Schattierungssprachen sind mit einer Einschränkung konfrontiert, denn trotz der Möglichkeit, Code in einer gemeinsamen Teilmenge von GLSL, HLSL und C++ zu schreiben, bestehen die aktuellen Einschränkungen.

Aus diesem Grund wurde Vcc geboren (Vulkan Clang Compiler) der Vulkan Clang Compiler, ein Projekt, das drei Jahre lang entwickelt wurde, entsteht als Reaktion auf diese Einschränkungen und Herausforderungen. Dieses Projekt zielt nicht nur darauf ab, Ausdrucksbeschränkungen zu überwinden, sondern auch das Konzept der Schattierungssprachen selbst zu beseitigen.

Durch Einarbeitung die komplette Sprachfamilie C / C ++ nach Vulkan, Vcc führt Funktionen ein, die noch nie zuvor in Vulkan-Shadern zu sehen waren. wie physische Zeiger, generische Zeiger, echte Funktionsaufrufe und ein vollständiger Kontrollfluss.

Diese Initiative versucht, die Softwarelücke zwischen Grafik- und Rechen-APIs zu schließen. Durch die Kompatibilität von Vulkan mit anderen GPU-Computing-APIs wird Vcc als wichtiger Schritt zur Vereinheitlichung der Programmierung in Grafik und Computing dargestellt und steht im Einklang mit der Massenakzeptanz und Implementierungsqualität, für die Vulkan bekannt ist.

Über VCC

Vcc ist ein Clang-basierter Compiler, der zum Generieren von ausführbarem Code in Vulkan entwickelt wurde positioniert sich als Compiler, der C++-Code übersetzen kann in einer Darstellung, die auf der GPU ausgeführt werden kann die die Vulkan-Grafik-API unterstützen. Im Gegensatz zu GPU-Programmiermodellen, die auf den Shader-Sprachen GLSL und HLSL basieren, verfolgt Vcc die Idee, die Verwendung separater Shader-Sprachen vollständig zu eliminieren und bietet die Möglichkeit, C/C++-Code für Vulkan direkt zu kompilieren.

Obwohl könnte als Konkurrent von GLSL und HLSL angesehen werden, Die wahre Absicht hinter diesem Projekt geht nämlich noch weiter Vcc möchte die C/C++-Sprachfamilie in Vulkan integrieren. Einführung einer Reihe von Funktionen in Vulkan-Shadern.

Vcc ist einfach eine Schnittstelle zu Shady, einem IR und einem Compiler, der SPIR-V um Unterstützung für die oben genannten Konstrukte erweitern soll. Shady wird als relativ konventionelle IR präsentiert und bietet Unterstützung für das Parsen von LLVM-IR. Behandelt die Reduzierung und Emulation aller zusätzlichen Funktionen, die in aktuellen Versionen von SPIR-V 3 nicht enthalten sind.

Natürlich gibt es eine Reihe einzigartiger Funktionen, die nur bei Shadern zu finden sind. Diese werden in Vcc mithilfe von Intrinsics und Annotationen verfügbar gemacht, sodass Sie Code schreiben können, der mit den verschiedenen Funktionen des Vulkan-Kanals interagiert.

Der Kompilierungsprozess in Vcc umfasst die Verwendung der Projektkomponenten LLVM und Clang als Schnittstelle. Für die Ausführung auf der GPU Vcc entwickelt seine eigene Zwischen-Shader-Darstellung „Shady“, zusammen mit einem dedizierten Compiler, um den Code in diese Darstellung zu konvertieren. Dieser Ansatz ermöglicht die Kompilierung von Standard-C/C++-Code und wird durch spezifische integrierte Funktionen ergänzt, um die Fähigkeiten der GPU zu nutzen.

Vcc zeichnet sich durch die Unterstützung nativer C/C++-Funktionen zur Steuerung des Programmablaufs aus, Erlaubt sogar die Verwendung der „goto“-Anweisung. Darüber hinaus bietet es die Möglichkeit, Funktionen aufzurufen, Funktionen rekursiv auszuführen und verschiedene Arten von Zeigern zu verwenden, z. B. physische Zeiger, markierte Zeiger und Funktionszeiger. Darüber hinaus wird es einfacher, arithmetische Operationen an Zeigern durchzuführen und Typlayouts im Speicher zu bestimmen.

Die Shady-Shader-Zwischendarstellung basiert auf SPIR-V 3 und wurde erweitert, um spezielle Konstrukte zu unterstützen, die C/C++-Funktionen innewohnen. Emulation wird verwendet, um erweiterte Funktionen zu implementieren, die nicht direkt auf SPIR-V anwendbar sind. Vcc enthält integrierte Funktionen und Anmerkungen, die es Programmen ermöglichen, die spezifischen Fähigkeiten von Shadern effizient zu nutzen, und bietet so eine vielseitige und leistungsstarke Umgebung für die Entwicklung von GPU-Anwendungen.

Abschließend ist noch zu erwähnen, dass nicht alles rosig ist undEs ist wichtig, einige Einschränkungen der Implementierung zu berücksichtigen. Vcc unterstützt beispielsweise keine C++-Ausnahmen und die malloc/free-Funktionalität ist nicht verfügbar. Darüber hinaus gibt es eine Einschränkung bei der Portabilität von Funktionen und Zeigern zwischen dem Hostsystem und der GPU. Diese Überlegungen sind bei der Planung der Entwicklung von Anwendungen, die Vcc verwenden, von entscheidender Bedeutung, um eine effiziente und störungsfreie Bereitstellung sicherzustellen.

Wenn Sie daran interessiert, mehr darüber zu erfahren, Sie können die konsultieren Website Und wer sich für den Code interessiert, sollte wissen, dass er verfügbar ist hier.