2016-04-13 15 views
7

Per le transizioni di risorse, è necessario conoscere "prima" e "dopo" VkImageLayout della risorsa (ad esempio nello VkImageMemoryBarrier passato a vkCmdPipelineBarrier). Vulkan non garantisce alcun ordine di esecuzione dei buffer di comando, a meno che non sia esplicitamente indicato nella documentazione API (dalla risposta this). Tuttavia, vkCmdPipelineBarrier afferma esplicitamente che crea una dipendenza tra i comandi nel buffer dei comandi, prima e dopo la chiamata. In questo modo è possibile "conoscere" il layout di un'immagine in qualsiasi punto quando viene eseguita la transizione all'interno di un singolo buffer di comandi.Vulkan: ordinare le barriere di memoria dell'immagine in buffer di comando multipli

Tuttavia, vkQueueSumbit non applica l'ordine di esecuzione dei buffer di comando. Se ci sono due buffer di comando, ognuno con le chiamate vkCmdPipelineBarrier che eseguono la transizione della stessa immagine a layout diversi, esiste una dipendenza tra queste due operazioni oppure è richiesta la sincronizzazione esplicita in questa situazione?

risposta

5

Sezione 2.2.1 dice:

limiti di buffer di comando, sia tra i buffer di comando primari della stessa o di diverse partite o osservazioni nonché tra buffer comandi primari e secondari, non introducono alcun vincolo di ordinamento impliciti . In altre parole, l'invio del set di buffer di comando (che può includere l'esecuzione di buffer di comando secondari) tra qualsiasi operazione di semaforo o fence riproduce i comandi registrati come se fossero stati tutti registrati in un buffer di comando primario, tranne che lo stato corrente è ripristina su ciascun limite.

Nella sezione 6.4, si afferma che le coppie di comandi per sincronizzazioni includono:

Prima serie: comandi prima barriera conduttura.

Secondo set: comandi dopo quella barriera della pipeline nella stessa coda (eventualmente limitata all'interno dello stesso sottopassaggio).

Nota che dice "nella stessa coda", non "nello stesso buffer di comando".

Entrambe queste affermazioni chiariscono che le barriere della pipeline influenzano l'esecuzione dei comandi da parte della coda. Le dipendenze di esecuzione non sono limitate ai comandi di un singolo buffer di comando.

+0

Non ho proprio chiesto cosa stavo guidando, ma questo risponde a quello che ho chiesto. – MuertoExcobito

Problemi correlati