No More Shading Languages: Compiling C++ to Vulkan Shaders

Abstract
Graphics APIs have traditionally relied on shading languages, however, these languages have a number of fundamental defects and limitations. By contrast, GPU compute platforms offer powerful, feature-rich languages suitable for heterogeneous compute. We propose reframing shading languages as embedded domain-specific languages, layered on top of a more general language like C++, doing away with traditional limitations on pointers, functions, and recursion, to the benefit of programmability. This represents a significant compilation challenge because the limitations of shaders are reflected in their lower-level representations. We present the Vcc compiler, which allows conventional C and C++ code to run as Vulkan shaders. Our compiler is complemented by a simple shading library and exposes GPU particulars as intrinsics and annotations. We evaluate the performance of our compiler using a selection of benchmarks, including a real-time path tracer, achieving competitive performance compared to their native CUDA counterparts.
Description

CCS Concepts: Software and its engineering → Compilers; Computing methodologies → Rendering; Ray tracing

        
@inproceedings{
10.2312:hpg.20251167
, booktitle = {
High-Performance Graphics - Symposium Papers
}, editor = {
Knoll, Aaron
and
Peters, Christoph
}, title = {{
No More Shading Languages: Compiling C++ to Vulkan Shaders
}}, author = {
Devillers, Hugo
and
Kurtenacker, Matthias
and
Membarth, Richard
and
Lemme, Stefan
and
Kenzel, Michael
and
Yazici, Ömercan
and
Slusallek, Philipp
}, year = {
2025
}, publisher = {
The Eurographics Association
}, ISSN = {
2079-8687
}, ISBN = {
978-3-03868-291-2
}, DOI = {
10.2312/hpg.20251167
} }
Citation