This thesis consist of two main parts. The first part will give a concise overview of Direct3D 12 presenting the main elements of the API as cleanly as possible. This part includes a description of command lists, command queues, fences, how different resource types map to physical memory, resource heaps, binding resources to shader inputs and outputs, and how the pipeline state is set. The second part focuses on the various challenges related to memory management that are imposed by Direct3D 12. One or more solutions will be given at each section. This part covers data upload, singe-frame data management, handling resource residency to prevent GPU memory overcommitment, handling resource heaps to realize a flexible resource binding solution, and optimizing resource barrier placement, to maximize performance. The sections detailing the implementations show how the solutions integrate into a custom-made graphics engine designed for real-world usage. Although the subject of this thesis is D3D 12, the different topics discussed are relevant to the other dominant low-level graphics API, Vulkan. It is assumed that the reader understands a current high level graphics API such as OpenGL 3.
The thesis is written in English.