Andrey
> AMD наконец добавила VK_KHR_push_descriptor.
оу, у десктопной тройки появился пуш дескриптор. Можно дизайнить рендерилку с учетом этого, получается?
/A\
> Мне пока ни разу не пригодился.
> Какой от него смысл?
Уйдет много левого кода. Драйвер выделяет память под дескрипиторы. Зачем? Direct3D12 отлично спроектирован без них. Жалкое наследие убогого АПИ пришло в Vulkan в виде лишних астракций.
Тем не менее нужно оценить профит.
HolyDel
> оу, у десктопной тройки появился пуш дескриптор. Можно дизайнить рендерилку с
> учетом этого, получается?
Мона и нуна, но нуна смотреть кто еще это не поддерживает, для Android Mali еще не поддерживает. Думаю для desktop мона смело выкидывать всю муть с vkCreateDescriptorSet,vkUpdateDescriptorSets,vkСmdBindDescriptorsets. Хотелось бы перфу оценить при замене.
Andrey
> Зачем? Direct3D12 отлично
вот мона и нуна забить на пулкан
Andrey
> Думаю для desktop мона смело выкидывать всю муть с
> vkCreateDescriptorSet,vkUpdateDescriptorSets,vkСmdBindDescriptorsets.
При vkUpdateDescriptorSets дескрипторы заливаются на ГПУ, если ты их выкинешь, то будешь заливать все дескрипторы каждый кадр, а это идет через PCI вместе с подгрузкой текстур и прочего.
Понятно что там не наберется и 1Мб, но он будет размазано по всему кадру и параллельно будет грузиться и другие вещи, что увеличит задержку при передаче данных.
Кстати, в вольфенштейн на все эти операции могло уходить до 1.2мс на кадр в сумме на все потоки.
/A\
> При vkUpdateDescriptorSets дескрипторы заливаются на ГПУ
точнее VkDescriptorSet в драйвере храняется который их ассоциирует с GPU ресурсами.Или VkDescriptorSet это и есть реальный GPU ресурс? это зависит от реализации.
>то будешь заливать все дескрипторы каждый кадр
vkСmdBindDescriptorSets достает из драйвера VkDescriptorSet и говорит GPU что он текущие для DrawCall и снова это от реализации засисит.
в общем тут нужно смотреть что бывстрее ставить сразу набор готовых VkDescriptorImageInfo и VkDescriptorBufferInfo или VkDescriptorSet который завист от реализации, будет ли это готовый ресурс - неизвестно. Согласно докам это расширение может давать буст.
Andrey
> Или VkDescriptorSet это и есть реальный GPU ресурс?
Дескриптор сет занимает место на GPU от 8 до 32 байт на один элемент.
Andrey
Способ привязки Vulkan не легаси и очень схож с DX12(Как же дескрипторные кучи?)
Представь себе регистровый файл скалярных регистров в Compute Unit-е,
Когда вызываешь vkCmdBindDescriptorSets или ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable ты сообщаешь драйверу,
что при исполнении в один из регистров(регистрового файла описного выше) записался виртуальный адрес дескрипторной таблицы(таблица дескрипторов аллоцирована в VRAM, где еще ей быть?).
Модель привязки в DX12 чуть расширена, тем что позволяет записывать в регистровый файл не только виртуальные адреса дескрипторных таблиц, но и адрес самого дескриптора что позволяет снизить уровень косвенного обращения.
Надо смотреть в RGP какой асм генерится при использовании VK_KHR_push_descriptor, в теории в самом шейдере мы будем получать виртуальные адреса дескрипторов ресурсов сразу через скалярные регистры(тогда драйвер должен выделить под дескрипторы память неявно),
либо сразу весь дескриптор пишется в регистры(дескриптор текстуры 32 байта, тогда нам на один дескриптор нужно аллоцировать 8 SGPR), но описанную тобой проблему это не решит,
из всего сказанного мной выше можно сделать вывод что число одновременно приближенных дескрипторов через vkCmdPushDescriptorSetKHR, будет ограничено
IBets
> Способ привязки Vulkan не легаси и очень схож с DX12(
Не схожи, нету объекта VkDescriptorSet, под легаси я имел ввиду создание дополнительного объекта и наследие объекта VkFramebuffer.
а вот VK_KHR_push_descriptor схож, ставим без создания объектов
IBets
> Модель привязки в DX12 чуть расширена, тем что позволяет записывать в
> регистровый файл не только виртуальные адреса дескрипторных таблиц, но и адрес
> самого дескриптора что позволяет снизить уровень косвенного обращения.
Это откуда инфа? из RGP ?
>Надо смотреть в RGP какой асм генерится при использовании VK_KHR_push_descriptor
>из всего сказанного мной выше можно сделать вывод что число одновременно приближенных >дескрипторов через vkCmdPushDescriptorSetKHR, будет ограничено
Может на windows как раз установка регистров через VK_KHR_push_descriptor и ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable вообще одинакова? что мешает это реализовать? Единственное смушает в D3D12_GPU_DESCRIPTOR_HANDLE храниться массив дескрипторов, а для VkDescriptorImageInfo и VkDescriptorBufferInfo придеться их как-то создавать неявно.
Andrey
> наследие объекта VkFramebuffer.
просто включи мозг и подумай для чего так сделали
2022 год - Нвидия сломала ресайз Вулкан свапчейна в драйверах
Микрософт удалили поддержку Вулкана из драйверов Нвидии из центра обновления. (до этого только с АМД так произошло(по крайней мере я сегодня сам увидел что в Нвидии драйверах нет вулкана))
Получается - Вулкан только для Линукса.
Закапываем?
Закапываем?
Давно пора.
Вулкан как и движок можно пилить годами.
Уже 7 лет прошло и все никак.
Обычно новый графический айпи как раз и появляется раз в 7 лет.
melvy
> Микрософт удалили поддержку Вулкана из драйверов Нвидии из центра обновления.
Там и до этого попадались глючные драйвера, так что не показатель.
Майкрософт вроде как для винстора не позволяет вулкан использовать.
> Закапываем?
Винду?
Вопрос по теме:
fwidth/dFdx/dFdy только 32битные в Вулкане?
я в спеках вроде не видел что они _только_ 32 битные (пробовал 64 бита там мусор выходит)
ML Primitives Extension
https://www.khronos.org/assets/uploads/developers/presentations/M… on_May_22.pdf
HolyDel
У NV давно есть расширение для работы с матрицами на тензорных ядрах, но на мобилках там отдельный элемент на кристале, который вообще непонятно к чему относится к ЦП или ГП.
Но поддержка до 5D это интересно.