2016-03-10 32 views
5

Citando Vulkan documento di specifica 1.0, chapter.5 (Comando buffer) 4 ° comma,Vulkan ordine di esecuzione dei comandi

"Se non diversamente specificato, e senza sincronizzazione esplicita, i vari comandi inviati a una coda tramite buffer comandi possono essere eseguiti in ordine arbitrario rispetto all'altro, e/o in concomitanza "

Nel primo paragrafo del capitolo 2.1.1 (coda di funzionamento), si afferma anche

" ... i buffer di comando sottoposti a una singola coda vengono riprodotti nell'ordine in cui sono stati inviati e i comandi all'interno di ciascun buffer vengono riprodotti nell'ordine th sono stati registrati "

Fa" ordine arbitrario "nel capitolo 5 significa anche fuori servizio? Quindi non è un conflitto alle affermazioni del capitolo 2.1.1 "riprodotte nell'ordine in cui sono state inviate"? O i comandi sono semplicemente "RIPRODUZIONE" in ordine ma "ESEGUITO" fuori ordine?

+1

"Salvo diversa indicazione" è la frase chiave qui. – Drop

risposta

8

Il capitolo 2.1.1 definisce l'ordine dei comandi API: l'ordine dei buffer di comando inoltrati nella coda e l'ordine dei comandi all'interno del buffer dei comandi (e l'ordine delle primitive all'interno di un comando).

Capitolo 5 sta dicendo che l'API ordinare non significa nulla sull'esecuzione ordinare meno qualche testo dice espressamente il contrario. Il capitolo 2.1.1 include eccezioni specifiche (test di miscelazione, approfondimento) e il capitolo 6 introduce delle dipendenze di esecuzione che possono imporre l'ordine di esecuzione, in base all'ordinamento API definito in 2.1.1. Ma al di fuori dei casi che dichiarano esplicitamente l'ordine, l'ordinamento API non proibisce alla coda di fare qualsiasi altra cosa voglia per quanto riguarda l'esecuzione.

Detto questo, le specifiche lo spiegano male.

+0

Quindi l'implementazione vulkan non deve mantenere l'ordine dei comandi API a meno che non ci sia una sincronizzazione esplicita da parte dell'applicazione, giusto? In OpenGL, l'ordine delle chiamate API implica il comando dell'ordine implicito. (Si presume che l'effetto di una chiamata API venga applicato prima della successiva chiamata API.) – jspark

+1

"* a meno che non vi sia una sincronizzazione esplicita dall'applicazione, giusto? *" O degli altri casi specifici di cui parla la spec. (Fusione, test di profondità, stencil , eccetera). Ma in generale si: a meno che non si crei una dipendenza esplicita, l'implementazione Vulkan è libera di modificare l'ordine di esecuzione dei comandi come meglio crede. Questo è anche il modo in cui il [modello di memoria funziona] di OpenGL's Image Load/Store (https://www.opengl.org/wiki/Incoherent_Memory_Access). –