Mantle voor Thief: een interview met de ontwikkelaars

20 reacties
Inhoudsopgave
  1. 1. Inleiding
  2. 2. Mantle vs. DirectX
  3. 3. Rol van de engine 
  4. 4. Game-developer zijn DirectX beu? 
  5. 5. Resultaten in de praktijk en Crossfire
  6. 6. Mantle vs. DirectX 12 
  7. 20 reacties

Inleiding

Thief is na Battlefield 4 de tweede game die gebruik kan maken van AMD’s Mantle API. De Nederlandse gamestudio Nixxes was verantwoordelijk voor de Mantle-implementatie. Hardware.Info had eind maart een uitgebreid interview met Nixxes-oprichter Jurjen Katsman en Mantle-ontwikkelaars Frank de Bresser en Tim van Klooster. Dit interview werd eerder gepubliceerd in Hardware.Info Magazine #2/2014.

Mantle is een nieuwe 3D-API die volgens AMD de videokaart veel efficiënter kan aansturen dan DirectX, “close to the metal” in jargon. Er doen echter verschillende verhalen de ronde over hoe universeel Mantle is. Soms hoor je dat je in Mantle vrijwel direct de GCN-clusters van AMD GPU’s aanspreekt, anderen claimen dat Mantle ook prima op andere GPU-architecturen, zelfs die van Nvidia zou moeten kunnen draaien. Hoe zit het volgens jullie?

AMD’s claim dat Mantle veel meer close to the metal werkt klopt zeker, al is ook Mantle nog altijd een API waarbij de GPU geabstraheerd wordt. Je bent absoluut geen GCN-bytecode aan het programmeren of iets dergelijks. Het is dus zeker niet zo dat je bij Mantle de GPU-shaders rechtstreeks aanstuurt.  Mantle is dus niet zozeer lower level, als wel dat het efficiënter en beter werk omdat de abstractielaag veel meer aansluit bij hoe moderne GPU’s werken. Wij zien geen technische reden waarom Mantle niet op Nvidia GPU’s of andere architecturen zou kunnen draaien, maar is dat is natuurlijk politiek.

Zou je mogen zeggen dat DirectX door zijn lange ontwikkelgeschiedenis nog stoelt op de tijd dat GPU’s voornamelijk fixed function hardware waren, terwijl Mantle van de grond op is ontworpen voor programmeerbare GPU’s?

Dat is zeker waar: alle DirectX versies tot en met versie 11 borduren eigenlijk voort op bestaande versies. DirectX is nooit radicaal herschreven; dat is met Mantle wel gebeurd.

Hoe zouden jullie de belangrijkste verschillen tussen Mantle en het huidige DirectX willen omschrijven?

Bovenal is de filosofie van beide API’s geheel anders. Bij DirectX stel je als developer een heleboel dingen in en wanneer je de opdracht uiteindelijk doorstuurt, probeert de API die zo slim mogelijk uit te voeren inclusief allerlei optimalisaties waar je zelf eigenlijk geen invloed op hebt. Bij Mantle heb je veel meer controle op het proces. Iedere handeling die je uitvoert is direct te vertalen naar “kosten”; de CPU doet direct het werk wat nodig is om de GPU te laten werken. Die “kosten”, ofwel de CPU-belasting, van al die kleine handelingen kan je direct meten. Doordat inzichtelijk is wat er gebeurt, kun je daar als programmeur van profiteren: iets doms in je code wordt direct afgestraft, maar tegelijkertijd kun je nu voor het eerst heel goed bepalen welk gedeelte van je code de meeste vertraging oplevert en zélf slimme optimalisaties maken, die ook daadwerkelijk op die manier worden uitgevoerd. Slim programmeren wordt dus beloond, terwijl bij DirectX de API altijd zelf nog optimalisatieslagen wil doen. Die pakken soms goed uit, maar vaak ook niet.

Dat betekent dus dat goede game developers met Mantle hele mooie dingen kunnen doen, terwijl minder getalenteerde developers beter bij DirectX kunnen blijven.

Dat kun je zeker wel stellen. Een mooi voorbeeld is dat je bij Mantle zelf helemaal kunt bepalen hoe het geheugen precies wordt gebruikt, dus waar data op welke manier wordt opgeslagen. Bij DirectX is dat een “zwart gat”, terwijl we door juist bij het geheugenmanagement slimme trucs toe te passen, de prestaties bij Thief flink konden laten toenemen.


Van links naar rechts: Jurjen Katsman, Frank de Bresser en Tim van Klooster.

0
*