Do jeito que estou fazendo agora, pelo que entendi, cada nova imagem tem que ser criada com LAYOUT_UNDEFINED. Então coloco uma barreira para fazer a transição para TRANSFER_DST_OPTIMAL. Agora posso transferir a imagem. A menos que você queira usar LINEAR TILING, é isso que você precisa fazer no mínimo.
Agora preciso transferir os dados para o buffer. No meu caso, a memória visível ao host não é local do dispositivo, então escrevo os dados da imagem em um buffer de preparação, então emito um buffer para cópia da imagem e transição de DST_SRC para READ_OPTIMAL. Esta é a maneira MAIS eficiente de fazer isso se a memória visível ao host não for local do dispositivo.
Agora considere que a memória visível do host também é local do dispositivo. Sinto que devo conseguir gravar no buffer local do dispositivo da GPU imediatamente, mas não sei como ou mesmo se é possível, porque acho que você sempre precisa de um buffer para copiar a imagem. Isso está certo?
Desde que você esteja usando o tile otimizado, os dados da imagem precisam ser enviados por um processo controlado pelo Vulkan antes que a GPU possa usar esses dados. Isso é feito por meio de uma operação de cópia. Então, mesmo se você estiver carregando dados brutos para a memória local do dispositivo, você ainda precisa copiar esses dados para a imagem real por meio das operações usuais.
O staging não é opcional para imagens com tiled otimizado. Mesmo se o buffer de staging estiver na memória local do dispositivo.