Using framegraphs for efficient usage of low level graphics APIs

No Thumbnail Available
Journal Title
Journal ISSN
Volume Title
Perustieteiden korkeakoulu | Master's thesis
Date
2019-08-19
Department
Major/Subject
Computer Science
Mcode
SCI3042
Degree programme
Master’s Programme in Computer, Communication and Information Sciences
Language
en
Pages
73 + 3
Series
Abstract
Graphics processing unit (GPU) is separate execution unit that is controlled by the CPU and that is used for accelerating the rendering of graphics at interactive rates. To get most out of the GPUs, graphically demanding applications, like modern computer games, can use GPUs directly through special application programming interfaces (APIs). The APIs have been traditionally quite high level, so they are easy for the programmers to use. However, in the recent years multiple new low level graphics APIs - Vulkan, Direct3D 12 and Metal - have been created, because the high level of abstraction in the older APIs has led to performance issues, both on GPU and CPU side. When used correctly, rendering can be done more efficiently with the new low level APIs, but because of the low level of abstraction, they are harder and more error prone to use for the application programmers. In this thesis we implement a method called framegraphs, that will make the new low level APIs easier to use while still maintaining the performance benefits. Framegraph will make it easier to write error free and more modular code. In this thesis we first go through the relevant history of modern GPUs and how the GPUs operate and how they are controlled through the APIs. Then we go through the differences in the high and low level graphics APIs and explain how the differences affect rendering engine architecture. We go through our framegraph implementation and analyze it from the usability perspective. Finally, we go through multiple improvement ideas, on how to make the framegraph implementation more efficient performance wise and what we could add to the implementation in the future, to make it better.

Grafiikkasuorittimella voidaan suorittaa tehokkaasti laskutoimituksia kuvien renderöintiin liittyen ja sitä ohjataan keskussuorittimella. Graafisesti vaativat ohjelmistot, kuten modernit tietokonepelit, käyttävät grafiikkasuoritinta suoraan erityisten grafiikkarajapintojen kautta. Grafiikkarajapinnat ovat perinteisesti mahdollistaneet ohjelmoijille grafiikkasuorittimen käytön suhteellisen korkealla tasolla. Kuitenkin viime vuosina on ohjelmoijien käyttöön tullut monia uusia matalamman abstraktiotason grafiikka rajapintoja, joita ovat Vulkan, Direct3D 12 ja Metal. Nämä uudet matalamman tason rajapinnat luotiin, koska korkea abstraktiotaso grafiikkaarajapinnoissa johti tehokkuusongelmiin sekä grafiikka- että keskussuorittimella. Uusia matalan tason rajapintoja käyttämällä voidaan siis luoda tehokkaampia ohjelmia, mutta matalan abstraktiotason vuoksi näiden rajapintojen käyttö on ohjelmoijille vaikeampaa. Tässä diplomityössä käytämme renderöintiverkkoja uusien matalan tason grafiikkarajapintojen käytön helpottamiseksi. Renderöintiverkkojen tarkoitus on helpottaa ohjelmoijia tuottamaan ohjelmakoodia, jossa on vähemmän virheitä ja joka on modulaarisempaa, menettämättä tehohyötyjä jotka matalan tason grafiikkarajapinnat tuovat mukanaan. Käymme työssä aluksi läpi grafiikkasuorittimien historiaa ja toimintaa, jonka jälkeen tutustutaan matalan ja korkean tason grafiikkarajapintojen eroihin ja siihen, miten nämä erot vaikuttavat grafiikkaohjelmistojen sisäisiin rakenteisiin. Sitten käymme läpi meidän renderöintiverkko toteutuksen ja arvioimme sitä käytettävyysnäkökulmasta. Lopuksi käymme läpi monia parannusideoita, miten meidän toteutuksesta voisi tehdä tehokkaamman ja mitä toimintoja siihen voisi lisätä käytettävyyden parantamiseksi.
Description
Supervisor
Lehtinen, Jaakko
Thesis advisor
Hirvonen, Antti
Keywords
computer graphics, rendering engine, graphics APIs, vulkan, direct3D
Other note
Citation