Войти
ПрограммированиеФорумГрафика

Vulkan API (вышел!) (366 стр)

Страницы: 1365 366 367 368 369 Следующая »
#5475
0:20, 1 июля 2019

xruck
> А какой смысл разделять рендер и презент queue? Если я ренжу в одну queue
> очевидно я хочу ее когда нибудь показать.
>

Еще раз: ты можешь сделать так, что у тебя будут две (и более) отдельные очереди. У них настраиваются приоритеты (вспомни создание VkDevice, а точнее настройку очередей).

Если у тебя очередь поддерживает и Render, и Present — то тогда можно создать одну очередь. Иногда такого не бывает, поэтому алгоритмы на создание очередей пишут с учетом этого. В таких алгоритмах хоть и видно два (и более) отдельных хэндлов на Present & Render, по сути это будет та же самая очередь.

Ну и напомню, что одновременное обращение к одной очереди из двух потоков карается UB.


#5476
(Правка: 0:31) 0:29, 1 июля 2019

faserg1
Я понимаю, что могу создать две графические очереди и это круто. Но почему графическая очередь может отличается от презент очереди? Какой в этом практический смысл? Почему такую возможность вынесли на уровне апи? Бывает что ли что карточка не поддерживает present очередь? Отрендил а показать не можешь

#5477
0:32, 1 июля 2019

xruck
> Бывает что ли что карточка не поддерживает present очередь? Отрендил а показать
> не можешь

Бывает, что реально не можешь показать. Бывает, что можешь, но само устройство поделено на две части.

#5478
0:38, 1 июля 2019

faserg1
Хрень какая то

#5479
0:40, 1 июля 2019

xruck
> Хрень какая то

железки могут быть очень разные

#5480
(Правка: 0:42) 0:41, 1 июля 2019

xruck
> Хрень какая то

К стандартным видеокартам, сколько знаю, такая "хрень" не относится (насчет невозможности отобразить отрисованное). Это в основном для других устройств, в том числе мобильных (но, как ясно, мобилки могут всё отобразить).

Ах, да. Vulkan еще можно использовать для Compute.

#5481
0:53, 1 июля 2019

faserg1
> Ну и напомню, что одновременное обращение к одной очереди из двух потоков
> карается UB.

можно ссылочку ?

#5482
(Правка: 0:58) 0:58, 1 июля 2019

innuendo
> можно ссылочку ?

VkSpec.
5.5. Command Buffer Submission.

Host Synchronization
• Host access to queue must be externally synchronized
...

А также из WSI расширения, описание к vkQueuePresentKHR:

Host Synchronization
• Host access to queue must be externally synchronized
...
#5483
1:45, 1 июля 2019

faserg1
но заполнять свой cmd из разных потоков можно ?

#5484
(Правка: 1:55) 1:53, 1 июля 2019

innuendo
> но заполнять свой cmd из разных потоков можно ?

5.4. Command Buffer Recording + и главы про команды

vkBeginCommandBuffer, vkEndCommandBuffer, а также все vkCmd*:

Host Synchronization
• Host access to commandBuffer must be externally synchronized
• Host access to the VkCommandPool that commandBuffer was allocated from must be externally
synchronized

Так что нет. Об этом также должны предупредить слои, если попытаешься. Не всегда — потому что они предупредят, если такое совпадение об одновременной записи действительно произойдет. Мне выбивало пару-тройку раз про очередь, когда решил дорабатывать синхронизацию на потом.

Хотя, если я неправильно тебя понял изначально, и ты имел в виду, что именно синхронизировано заполнять из разных потоков (т.е. не одновременно записывать, а поочередно), то можно.

#5485
1:55, 1 июля 2019

faserg1
в смысле каждый поток заполняет свой cmd и потом синхронизация

#5486
1:58, 1 июля 2019

innuendo
> и потом синхронизация

Это как? =)
Аля Second Command Buffer, и потом в Primary? Или отправить несколько Primary в одном сабмите?
Или что? Я других вариантов чет не знаю...

#5487
2:04, 1 июля 2019

faserg1
> Это как? =)

обращение к очереди

#5488
2:07, 1 июля 2019

innuendo
> обращение к очереди

Как уже говорил.

faserg1
> Или отправить несколько Primary в одном сабмите?

Так можно. Единый (или не очень) сабмит уже заполненных CmdBuf (не важно, в каких потоках) — можно.

#5489
15:51, 3 июля 2019

https://gpuopen.com/new-vulkan-extensions-driver-19-6-2/

Страницы: 1365 366 367 368 369 Следующая »
ПрограммированиеФорумГрафика