Ich bin nicht sicher, ob ich die Frage verstehe, aber hoffentlich werde ich es erklären, Barrieren zu erklären.
src=TOP_OF_PIPE
oder dst=BOTTOM_OF_PIPE
eine nicht blockierende Barriere (effektiv nur die Hälfte einer Speicherabhängigkeit und keine Ausführungsabhängigkeit). Ist es das, was du mit der "sofort stattfindenden" Barriere meinst?
dst=TOP_OF_PIPE
oder src=BOTTOM_OF_PIPE
soll all-blockierende Barriere sein (zumindest sehe ich es oft in Beispielen und Tutorials). Ich bin nicht so klar darüber aus der Spezifikation (vor allem, wenn Memory Dependency muss auch da sein) und (oder |
10 spezifische Stufen) scheinen ein besserer Ersatz zu sein.
(BTW habe ich über my peeve mit dieser API-Design geschrieben.)
Allgemeinen wie für Ausführungsabhängigkeit, was die Barrieren zu tun ist: sie sicher srcStage
aller Befehle vor der Schranke aufgezeichnet machen wird, bevor dstStage
irgend abgeschlossen der Befehle, die nach dem Start der Sperre aufgezeichnet wurden.
(Die oben genannten Sonderfällen sollte auch mit dieser Beschreibung übereinstimmen.)
Also, was gesagt wird, TOP_OF_PIPE
nicht für TRANSFER
wie ein geeigneter Ersatz scheint. Es würde entweder seine beabsichtigte Funktion überhaupt nicht erfüllen oder ineffizient sein (basierend auf den obigen Beschreibungen).
srcStage==dstStage
hat keine besondere Bedeutung. Die Verwendung von TRANSFER
in diesem Fall bedeutet TRANSFER
Stufe der zuvor aufgezeichneten Befehle abgeschlossen vor TRANSFER
Stufe der Befehle nach der Barriere aufgezeichnet.
Es ist nicht klar, was mit der gleichen Stufe für src und dst zu tun hat, wie schnell die Barriere ausgeführt wird. Ich verstehe nicht, was Sie von den Pipeline-Barrieren von Vulkan verstehen. –
Das Ziel der Stageflags bei Barrieren ist in erster Linie, eine Ausführungsabhängigkeit zwischen Benutzern einer Ressource sicherzustellen. –
@NicolBolas krOoze erklärt mir mehr Details, was ich vorher nicht verstanden habe. Um einfach zu sein, verstehe ich nicht, warum Sascha Willems TOP_OF_PIPE für Layout-Übergang verwenden, wenn es Mipmaps generiert. Für mich sollte der "richtige Weg" sein, zu verwenden src = dst = TRANSFER_BIT ... Vielleicht vermisse ich einige Details über die "Maske" in der "vkImageMemoryBarrier" ... –