DirectX 11
De DirectX 11 api introduceerde in 2009 de mogelijkheid om draw calls te verdelen over meerdere cores en threads. Deze ondersteuning was ingebouwd om in te spelen op het toenemende aantal cores van processors. Indien de berekeningen goed verdeeld kunnen worden over meerdere threads, kan het totale aantal draw calls flink omhoog, en wordt de processor een minder beperkende factor in het renderen van grafisch complexe scénes. Een belangrijk punt is dat ondersteuning voor multithreading optioneel was, en dus niet vereist om Direct3D11-compliant te zijn.
Multithreading kan in DX11 worden bereikt door draw calls te laten uitvoeren door meerdere threads. Dat klinkt als voor de hand liggend, maar vanwege beperkingen in deze api moeten de draw calls wel altijd weer gecombineerd worden in een command list op de primaire processorthread, alvorens deze naar de gpu kan worden verstuurd. Omdat niet alles in het renderpad parallel kan worden berekend, is het niet een kwestie van elke thread een bepaald percentage van de draw calls laten afhandelen. Een voorspelbare prestatiewinst ligt met deze oplossing dus niet voor de hand.
Bij het gros van de DX11-games worden draw calls verwerkt op één thread (afbeelding: NerdTechGasm).
Inmiddels kunnen we wel stellen dat het potentieel van multithreading in games die draaien op de DX11-api door verreweg de meeste ontwikkelaars niet goed is benut. Hoewel ook op deze api in moderne games een dual core processor nauwelijks meer voldoet en een quad core cpu in sommige games zelfs als minimum wordt genoemd, wordt het klaarmaken van de draw calls nog vrijwel altijd aan een enkele thread overgelaten.
Het is mogelijk in DX11 om draw calls door meerdere threads te laten verwerken, maar ze moeten samengevoegd worden op één thread tot een command list (afbeelding: NerdTechGasm).