Designing an efficient abstraction layer for multiple graphics APIs

No Thumbnail Available
Journal Title
Journal ISSN
Volume Title
Sähkötekniikan korkeakoulu | Master's thesis
Ask about the availability of the thesis by sending email to the Aalto University Learning Centre oppimiskeskus@aalto.fi
Date
2016-10-31
Department
Major/Subject
Viestintätekniikka
Mcode
AS3002
Degree programme
Automaatio- ja systeemitekniikka
Language
en
Pages
8 + 83
Series
Abstract
Graphically demanding applications, such as modern computer games, render two-dimensional images of virtual three-dimensional worlds by harnessing the power of graphics processing units (GPUs). GPUs are programmed through special graphics application programming interfaces (APIs). Traditionally, graphics APIs have been relatively high level, making programming easy and abstracting away details of the underlying hardware. However, the high level of abstraction leads to performance issues on both GPU and CPU. To fix these issues, three low-level graphics APIs – Direct3D 12, Vulkan, and Metal – have emerged in the recent years. Due to high number of interfaces available today, the development of graphical applications is arduous. The aim of this thesis is to determine a suitable abstraction level over the new interfaces to aid the development process of graphical applications. The end goal is to design a new interface that can be used to program GPUs through a single code path, hiding most of the API-specific details behind the designed layer. In the first part of this thesis, the operation mechanisms of modern graphics processors are explained along with their relevant history. In the second part, all existing low-level graphics interfaces are studied in-depth. Subsequently, a design for the abstraction layer is proposed. Part of the design is implemented for evaluation, and the performance of the designed interface is analyzed from multiple viewpoints. Finally, future improvements are suggested and discussed in terms of performance, features, and design.

Graafisesti vaativat sovellukset, kuten modernit tietokonepelit, käyttävät grafiikkaprosessoreja muodostaakseen tehokkaasti kaksiulotteisia kuvia virtuaalisista kolmiulotteisista maailmoista. Grafiikkaprosessoreja ohjelmoidaan erityisten grafiikkarajapintojen kautta. Perinteisesti käytetyt rajapinnat ovat operoineet melko korkealla tasolla tehden ohjelmoinnista helppoa ja abstraktoiden osan grafiikkaprosessorien arkkitehtuurista taakseen. Korkea abstraktiotaso johtaa kuitenkin tehokkuusongelmiin sekä ohjelmasuorittimen että grafiikkaprosessorin puolella. Viime vuosina näitä ongelmia on pyritty korjaamaan kehittämällä uusia rajapintoja, jotka mahdollistavat laitteiston käyttämisen tehokkaammin. Tällaisia uusia rajapintoja ovat Direct3D 12, Vulkan ja Metal. Rajapintojen määrän vuoksi graafisten sovellusten kehittäminen on työlästä, koska sama sovellus täytyy toteuttaa jokaiselle alustalle erikseen. Tämän diplomityön tavoitteena on löytää sopiva ja tehokas abstraktiotaso kolmelle mainitulle matalan tason grafiikkarajapinnalle sovelluskehityksen helpottamiseksi. Lopullinen tavoite on suunnitella uusi rajapinta, joka mahdollistaa grafiikkaprosessorien ohjelmoimisen yhden rajapinnan avulla. Työn ensimmäisessä osassa selitetään modernien näytönohjaimien toiminta korkealla tasolla sekä tutustutaan näytönohjaimien ja grafiikkarajapintojen kehitykseen laajemmassa kontekstissa. Toisessa osassa matalan tason grafiikkarajapintoihin tutustutaan syvällisesti. Kolmannessa osassa esitellään suunnitelma uudesta rajapinnasta. Osa rajapinnasta toteutetaan käytännössä ja rajapinnan toimivuutta arvioidaan useasta näkökulmasta. Työn lopuksi rajapintaan ehdotetaan parannuksia niin tehokkuuden, ominaisuuksien, kuin rajapintasuunnittelun osalta.
Description
Supervisor
Lehtinen, Jaakko
Thesis advisor
Ciragan, Mete
Keywords
compute graphics, rendering engine, Vulkan, direct3D, metal
Other note
Citation