2016-07-21 18 views
1

Angenommen, die GPU verfügt über mehrere Rückpuffer, in die gerendert werden soll.Grafik - Mehrfache Pufferung: In Warteschlange oder zuletzt abgeschlossen?

Timeline:

  1. Rahmen 0 in Front Buffer
  2. Bildschirmaktualisierungs - Frame 0 auf dem Bildschirm
  3. Run Spiel Schleife, senden alle
  4. Run Spiel Befehle für Frame 1 zu GPU machen Schleife, sende alle Renderbefehle für Frame 2 an GPU
  5. GPU verarbeitet alle Befehle für Frame 1 und rendert Frame 1 in Back Buffer 1
  6. GPU verarbeitet alle Befehle für Frame 2 und rahmt Frame 2 in Back Puffer 2
  7. Bildschirmaktualisierung - Frame? auf dem Bildschirm

Gedanken:

  • In der GPU für VSYNC erzählt wird nicht warten, ich bin zu raten, da eine 5 (b) und eine 6 (b), wo die GPU Kopien der gerade abgeschlossene Rückpuffer in den Frontpuffer. In diesem Fall wird Frame 2 angezeigt.
  • Wenn die GPU angewiesen wird auf VSYNC zu warten, tauscht die GPU die Puffer nicht aus, nachdem sie abgeschlossen sind. Aber wenn die Zeit kommt, um Puffer zu tauschen, weiß ich nicht, welchen Puffer es wählt.

Wenn möglich, würde ich gerne sehen, siehe Dokumentation. Ich weiß nur nicht, auf welcher Ebene die Semantik definiert ist.

Antwort

1

Die Semantik ist nicht definiert. Zumindest nicht in OpenGL, auch mit wgl/glX_EXT_swap_control. Swap-Intervall lässt Sie entscheiden, ob das Swapping auf vsyncs wartet, aber wenn Sie mehr als einmal zwischen vsyncs tauschen, wird in der Implementierung definiert, welches Bild angezeigt wird.

wgl/glX_EXT_swap_control_tear können Sie angeben, dass Sie ein Tearing-Verhalten wünschen, wenn Sie zu spät Puffer austauschen. Aber was passiert, wenn Sie früh sind, wird nicht angegeben.

Vulkan ermöglicht Implementierungen zu verschiedenen Arten von "Swapping" -Funktionalität durch seine derzeitigen Modi. FIFO, der einzige erforderliche Präsentationsmodus, bedeutet, dass jedes Bild, das Sie präsentieren, in der angegebenen Reihenfolge dargestellt wird. Das heißt, wenn Sie versuchen, das nächste Bild zu "tauschen" (in Vulkan-Sprache, erwerben) und beide warten darauf, präsentiert zu werden, dann wird die GPU stehen bleiben.

Es gibt Modi, die das gegebene Bild sofort darstellen, einen Modus, der "swap_control_tear" spiegelt, und einen Modus, der in Ihrem Fall nützlich wäre, wenn Sie versuchen, Puffer schneller darzustellen, als sie dargestellt werden können wird zugunsten des nächsten Bildes verworfen.