Могу ли я выполнить операцию передачи в очереди передачи и в очереди графики одновременно? - PullRequest
0 голосов
/ 01 мая 2020

Я сделал 2 экземпляра VkQueue: один из семейства графических и другой из семейства переносов. Пулы команд и буферы команд разделены соответственно. Оба выполняют операции передачи.

  • Целью первого, кроме рендеринга, является обновление единообразных буферов в каждом кадре.
  • Целью второго является обновление ресурсов: буферы вершин / индексов модели , текстуры изображений et c.

Они работают параллельно в разных потоках асинхронно. Поэтому возможно, что vkQueueSubmit будет одновременно совершено 2 вызова.

Разрешено ли такое использование и безопасно ли это?

Примечание: однажды у меня в многопоточной программе иногда появляется VK_DEVICE_LOST на vkQueueSumbit, и, вероятно, это происходит чаще, когда ресурсы загружаются, поэтому я действительно пришел к этому вопросу

1 Ответ

1 голос
/ 01 мая 2020

Спецификация Vulkan довольно четко описывает синхронизацию ЦП функций Vulkan. vkQueueSubmit говорит :

Хост-доступ к queue должен иметь внешнюю синхронизацию

Где "queue "это параметр, переданный vkQueueSubmit. Это не говорит каждая очередь ; он говорит: «что queue».

И если «внешняя синхронизация» не указана в качестве требования команды, она не является требованием этой команды.

...