PapaGo - A graphics API built on top of Vulkan, developed with a focus on programmability
Studenteropgave: Kandidatspeciale og HD afgangsprojekt
- Alexander Brandborg
- Claus Worm Wiingreen
- Anders Munkgaard
- Michael Wit Dolatko
4. semester, Datalogi, Kandidat (Kandidatuddannelse)
In 2016, Khronos Group’s Vulkan API was released with the purpose of speeding up CPU-bound graphics applications.
In comparison to earlier APIs, Vulkan is more low level, and according to our research this makes it difficult to use.
We present the \api{} API, which attempts to raise the abstraction level of Vulkan, while using it as a backed.
The aim is to create an API with a similar level of abstraction to OpenGL, while retaining the statelessness of Vulkan, its explicit control of resources and command buffers, which can be recorded in parallel.
Evaluating the usability of \api{}, we develop a new task-based API evaluation method based on Discount Evaluation.
Our evaluation found that our participants, who were more used to an OpenGL-style of programming, quickly adapted to our API.
A performance benchmark was also performed on \api{} using a test application.
The test application was run on two different systems, the first containing an AMD Sapphire Radeon R9 280 GPU, while the second used the more powerful NVIDIA GeForce GTX 1060 GPU.
In the CPU-bound case, the application was sped up on both systems by recording commands in parallel, and it ran with about the same speed on both systems, differing with about 5 milliseconds.
In the GPU-bound case, parallel command recording had little impact, and the application ran three times faster on the NVIDIA system.
Comparing to the same application written in pure Vulkan, we see that \api{} adds some overhead.
In the CPU-bound case, Vulkan runs many times faster on both systems, while in the GPU-bound case \api{} runs at the same speed on the NVIDIA system, while \api{} is a third slower than Vulkan on AMD.2
In comparison to earlier APIs, Vulkan is more low level, and according to our research this makes it difficult to use.
We present the \api{} API, which attempts to raise the abstraction level of Vulkan, while using it as a backed.
The aim is to create an API with a similar level of abstraction to OpenGL, while retaining the statelessness of Vulkan, its explicit control of resources and command buffers, which can be recorded in parallel.
Evaluating the usability of \api{}, we develop a new task-based API evaluation method based on Discount Evaluation.
Our evaluation found that our participants, who were more used to an OpenGL-style of programming, quickly adapted to our API.
A performance benchmark was also performed on \api{} using a test application.
The test application was run on two different systems, the first containing an AMD Sapphire Radeon R9 280 GPU, while the second used the more powerful NVIDIA GeForce GTX 1060 GPU.
In the CPU-bound case, the application was sped up on both systems by recording commands in parallel, and it ran with about the same speed on both systems, differing with about 5 milliseconds.
In the GPU-bound case, parallel command recording had little impact, and the application ran three times faster on the NVIDIA system.
Comparing to the same application written in pure Vulkan, we see that \api{} adds some overhead.
In the CPU-bound case, Vulkan runs many times faster on both systems, while in the GPU-bound case \api{} runs at the same speed on the NVIDIA system, while \api{} is a third slower than Vulkan on AMD.2
Sprog | Engelsk |
---|---|
Udgivelsesdato | 8 jun. 2018 |
Emneord | Vulkan, Grafik, Programmering, Brugbarhed, PapaGo |
---|