DevilsProphet schreef op woensdag 19 november 2014 @ 22:28:
Ik snap niet hoe dit kan uitleggen waarom er geen microstutter is met één GPU, maar wel met twee. Hoe kan dat, is het geleidelijke karakter van frame-pacing ineens onbestaande vanaf dat er maar één van elke twee frames gerenderd moet worden door een bepaalde GPU?
Je moet het als volgt zien...
Het renderen van een frame vanuit de game engine gezien komt neer op het doen van calls naar de API, meer niet.
Die API calls prepareren dan een buffer met commando's, die de driver 'op de achtergrond' naar de GPU stuurt.
De game engine hoeft dus bij de API calls niet te wachten totdat de GPU ze heeft uitgevoerd. Het is een soort fire-and-forget. Alleen in speciale gevallen zal de driver/API synchroniseren met de GPU.
Wat er bij 2 GPUs gebeurt is 'alternate frame rendering'. De game engine ziet nog steeds maar 1 API met daarachter 1 driver en GPU.
Maar de driver heeft nu voor iedere GPU een eigen buffer, die na ieder frame omgewisseld worden.
De game engine rendert dus frame 1 naar de buffer voor de eerste GPU, en dan frame 2 naar de buffer voor de tweede GPU.
Hierbij hoeft de API/driver/engine dus niet te wachten totdat de eerste GPU alles verwerkt heeft, want de tweede is daar totaal niet van afhankelijk.
In het geval dat de game-logic vrij simpel is, is de game-engine dus vrij snel klaar met het vullen van de buffer, en dus start ie vrij snel na het eerste frame aan het tweede frame.
Maar dat eerste frame moet nog wel gerenderd worden. En dat hangt af van hoe snel de GPU is, en hoe zwaar de render-opdrachten (hele hoge resolutie, veel/grote textures, lange shader-programma's etc).
Het kan dus zijn dat het heel lang duurt voordat de GPU klaar is met dat frame, en de game-engine voor het derde frame weer naar de buffer van de eerste GPU kan sturen.
Kortom, de GPUs starten vrij snel na elkaar aan een frame, en dus zijn ze ook vrij snel na elkaar klaar met dat frame. Maar het renderen van dat frame duurt vrij lang.
Als je maar 1 GPU hebt, kan dit dus niet voorkomen, omdat je maar 1 frame tegelijk kunt doen (als je 2 frames achter elkaar rendert, die min of meer even zwaar zijn, kan het dus per definitie niet zo zijn dat een frame ineens veel sneller rendert dan het andere).
[
Voor 3% gewijzigd door
Verwijderd op 19-11-2014 22:53
]