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

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

Страницы: 1631 632 633 634 635 Следующая »
#9465
11:40, 30 июля 2022

Cheb
> архитектуру надо строить под задачу
Архитектура для гл и вулкана абсолютно разные. ГЛ однопоточный, но сам создает второй поток, а вулкан многопоточный и тебе нужно создавать 2й поток чтоб сравниться в производительности с гл.

#9466
(Правка: 12:02) 12:02, 30 июля 2022

Cheb
> архитектуру надо строить под задачу
Нет, архитектуру нужно строить под данные. А данные под API. А задача это уже сверху придёт и должна лечь ровно скриптами.

#9467
15:21, 30 июля 2022

Cheb
> Спасибо большое. Теперь понятно, что обезъянничать с вулкана не имеет смысла,
> архитектуру надо строить под задачу, лишь с оглядкой на вулкан.
/A\
> Архитектура для гл и вулкана абсолютно разные. ГЛ однопоточный, но сам создает
> второй поток, а вулкан многопоточный и тебе нужно создавать 2й поток чтоб
> сравниться в производительности с гл.

Это.

Делай ОпенГЛ сейчас.
Смотря на рабочий ОпенГЛ год всегда будет проще сделать Вулкан порт и будет с чем сравнивать.

Масштабный движок (который имеет много ресурсов загружает/выружает и еще создает временные буферы для банных) - это всегда очень много головной боли и вероятнее всего ты будешь переделывать его с нуля 3 раза, в третий раз приблизишься к производительности ОпенГЛ.

#9468
(Правка: 7:23) 7:22, 1 авг 2022

melvy
> Делай ОпенГЛ сейчас.
Вот! Так и буду.

melvy
> и вероятнее всего ты будешь переделывать его с нуля 3 раза
Я *уже* переделываю третий раз, на этот раз - целевой, под задачу. Сферические кони мне плохо удавались.

Будет:
1. Все ресурсы - GLSL программы, текстуры, модели - это классы, являющиеся врапперами над ресурсами GL
2. Ресурсы могут быть связаны зависимостями.
3. Собственный командный буфер, в который логический тред пихает ресурсы (напр., модель, к которой привязаны скин и положения костей) и переключения стейтов.
4. В основном треде этот командный буфер парсится в последовательность вызовов GL и фоновых задач, распараллеливаемых на N тредов (напр., применение анимации к моделям с последующей передачей результата в GL в основном треде).

На вулкан такое портировать должно быть *гораздо* легче, чем спагетти прямых вызовов GL, поскольку связи между ресурсами уже учтены и раскидывание операций по этапам уже есть, надо только сделать другой вариант для вулкана и если нужны особенные для вулкана зависимости - добавить их в систему ресурсов.

#9469
16:58, 1 сен 2022

VK_EXT_mesh_shader
https://github.com/KhronosGroup/Vulkan-Headers/blob/main/include/… core.h#L15022

#9470
17:15, 1 сен 2022

Andrey
> VK_EXT_mesh_shader
В итоге сделали как в ДХ и потратили на это много-много лет.

#9471
13:01, 9 сен 2022

Хочу попробовать пирамидальный блум, как будет грамотно и быстро копировать текстуру в меньшую в два раза текстуру? Ни раза этого не делал.
Через vkCmdBlitImage или лучше как-то по другому?

#9472
15:11, 9 сен 2022

MikeNew
> vkCmdBlitImage
На нвидиа что так, что через рендер в текстуру работает DCC, что достаточно быстро.
Через компьют шейдер лучше не делать - будет во много раз медленее.
На мобилках надо отдельно проверять, но там и DCC работает только в RGBA8

#9473
7:40, 14 сен 2022

Подскажите плз, если я хочу чтобы вложения фреймбуфера были разного размера, нужно обязательно использовать VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT и иначе никак?

#9474
(Правка: 8:08) 8:07, 14 сен 2022

Спасите-помогите, что-то я запутался.
Хочу сделать чтобы вложения в фреймбуфер были разного размера.
Слои говорят, что нужен флаг VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT при создании фреймбуфера.
Я добавляю.
Слои говорят что нужно включить image less feature.
Я включаю.
Дальше начинается жесть с VkFramebufferAttachmentImageInfo и  VkFramebufferAttachmentsCreateInfo, где нужно все прописывать отдельно и по новой для вложений.
Я, медленно охреневая, все это делаю и в итоге получаю сообщение от слоев, что несмотря на все проделанное, мне все равно нельзя использовать разные размеры для вложений:

validation layer: Validation Error: [ VUID-VkFramebufferCreateInfo-flags-04541 ] Object 0: handle = 0x1d3f9872f58, type = VK_OBJECT_TYPE_DEVICE; | MessageID = 0xfb727c6e | vkCreateFramebuffer(): VkFramebufferCreateInfo attachment info #3 has a width of only #960, but framebuffer has a width of #1280. The Vulkan spec states: If flags includes VK_FRAMEBUFFER_CREATE_IMAGELESS_BIT, the width member of any element of the pAttachmentImageInfos member of a VkFramebufferAttachmentsCreateInfo structure in the pNext chain that is used as an input, color, resolve or depth/stencil attachment in renderPass must be greater than or equal to width (https://vulkan.lunarg.com/doc/view/1.3.224.1/windows/1.3-extensions/vkspec.html#VUID-VkFramebufferCreateInfo-flags-04541)

Вернулся туда где был с самого начала.
Да как так, что же делать?
Или меня куда-то не туда унесло и можно было сделать по-другому?

#9475
(Правка: 9:39) 9:39, 14 сен 2022

С проблемой выше разобрался, остался вопрос как правильно прописывать размеры вложений фрейбуфера, если они разного размера?
А то размеры прописываются в трех в трех местах:

1. VkFramebufferCreateInfo
2. VkFramebufferAttachmentImageInfo
3. VkRenderPassBeginInfo

Пусть например у меня два вложения в фреймбуфер, размером 200x200 и 100x100.
В  VkFramebufferAttachmentImageInfo понятно как размеры прописывать, но что писать в VkFramebufferCreateInfo и VkRenderPassBeginInfo?
Пишешь максимальный размер - слои ругаются что нельзя так, пишешь минимальный - выводится только часть изображения.

#9476
(Правка: 11:00) 10:42, 14 сен 2022

Как правильно и куда крепить VkDeviceGroupRenderPassBeginInfo?

#9477
10:52, 14 сен 2022

MikeNew
не придумывай с фреймбуфферами, если тебе нужно в рендертаргеты разного размера в image space что-то рендерить. пиши через imageStore в compute шейдере и всё. сколько угодно какие угодно таргеты.

рендертаргеты нужны в первую очередь для случаев, когда тебе нужна именно аппаратная растеризация, RoPы и вот это всё. в случае image space операций тебе это всё не нужно.

#9478
10:59, 14 сен 2022

Suslik
> не придумывай с фреймбуфферами, если тебе нужно в рендертаргеты разного размера
> в image space что-то рендерить. пиши через imageStore в compute шейдере и всё.
> сколько угодно какие угодно таргеты.
Спасибо за совет, но нужна максимальная скорость на старом железе, без компут-шейдеров.

#9479
(Правка: 11:03) 11:01, 14 сен 2022

MikeNew
> Спасибо за совет, но нужна максимальная скорость на старом железе, без
> компут-шейдеров.
в том-то и дело, что так как ты не используешь RoPы, это может работать быстрее, чем растеризация/блендинг. там ещё есть другие плюсы вроде того, что на некоторых gpu async compute может работать параллельно с растеризационными дроколлами (на вулкане это надо руками менеджить через разные command queue) и вообще постпроцессы рекомендуется по возможности делать именно на compute queue для производительности.

Страницы: 1631 632 633 634 635 Следующая »
ПрограммированиеФорумГрафика