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

Push Constants

Advanced: Тема повышенной сложности или важная.

Страницы: 1 2 Следующая »
#0
(Правка: 23:45) 23:26, 22 авг. 2019

по просьбе трудящихся создал отдельную тему
http://web.engr.oregonstate.edu/~mjb/vulkan/Handouts/PushConstants.1pp.pdf


#1
0:23, 23 авг. 2019

Ну это все видели, могу еще подкинуть этот тест:
http://kylehalladay.com/blog/tutorial/vulkan/2017/08/13/Vulkan-Un… -Buffers.html
Но мне как-то не очень нравится его подход к тестированию, но кое-какие данные все же есть.

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

В разных темах на форуме периодически возникают холивары на эту тему, но все как-то непродуктивно.

#2
3:52, 23 авг. 2019

Fantom09
> Хотелось бы услышать о преимуществах пуш констант в реальных задачах, тоесть не
> теоретическая польза от того, что эти данные можно пропихнуть в cmd, без
> необходимости маппить буферы и синхронизировать передачу данных, а именно
> случаи, где это реально необходимо и удобно (да, и быстрее))

ну вот есть у тебя несколько CS, в которые нужно прокинуть по несколько floats - не будет удобно и быстрее через сабж ?

#3
8:13, 23 авг. 2019

innuendo
> не будет удобно и быстрее через сабж ?
Будет, отличный пример, плюс за удобство.

Второй вариант я вижу как имплементация MultiDraw*, где для каждого объекта пропихивается его DrawID + доп инфа, как это реализовано в OGL через "Built-in uniforms".

#4
9:47, 23 авг. 2019

Fantom09
> Второй вариант я вижу как имплементация MultiDraw*

почему именно mdi ? заливаешь перед кадром один большой ubo, и дальше перед каждым обычным draw call передаёшь offset через сабж

#5
9:58, 23 авг. 2019

> заливаешь перед кадром один большой ubo, и дальше перед каждым обычным draw call передаёшь offset через сабж
Как раз пытался узнать норм ли так делать

#6
10:05, 23 авг. 2019

Division
> Как раз пытался узнать норм ли так делать
предлагаю сделать и доложить о результах теста

#7
11:10, 23 авг. 2019

innuendo
> предлагаю сделать
Напишу, если что-то сделаю

#8
12:01, 23 авг. 2019

Недостаток push constant в том что command buffer перезаписывать надо. Кстати в пейпре они вставляют барьеры для пуш констант, что-то я такого раньше не встречал. Они точно нужны?

#9
12:28, 23 авг. 2019

v1c
> Недостаток push constant в том что command buffer перезаписывать надо

а как ты хотел ?

#10
23:10, 24 авг. 2019

Fantom09
> Мне вот это было бы очень интересно, так как этого нету в ОГЛ

ну как бы сами uniforms почти сабж с натяжкой

#11
9:34, 25 авг. 2019

innuendo
> ну как бы сами uniforms почти сабж с натяжкой
Да, если говорить о концепции - передать параметры перед вызовом Draw/Compute. Но в ОГЛ обновить параметр в буфере UBO/SSBO быстрее передачи юниформы, потому и подходы разные. В ОГЛ есть смысл везде группировать данные в буферы, так как динамических параметров обычно несколько, могут меняться не каждый кадр и могут шариться между разными объектами/шейдерами. Бонусом получается возможность работать с [Multi]Draw*[Instanced], что существенно ускоряет весь процесс.

С пушконстантами все немного иначе, с одной стороны - больше ограничений (256 байт на все, при гарантированных всего 128 байтах, против 1024+ векторах у юниформ), с другой - более эффективная передача этих данных в шейдер (+возможность пропихнуть в cmd). Это немного меняет области применения.

#12
9:38, 25 авг. 2019

Fantom09
> Но в ОГЛ обновить параметр в буфере UBO/SSBO быстрее передачи юниформы

где-то была картинка от nvidia

#13
11:39, 25 авг. 2019

v1c
> Кстати в пейпре они вставляют барьеры для пуш констант
Это странно.
Они внутри рендер пасса тоже вставляют барьеры? Просто по документации только пуш константы можно менять внутри рендер пасса, а барьеры внутри рендер пасса могут быть только для аттачментов.

#14
18:47, 25 авг. 2019

innuendo
> заливаешь перед кадром один большой ubo, и дальше перед каждым обычным draw
> call передаёшь offset через сабж
вообще-то offset можно передавать при байнде дескриптор сетов, там специально для этого аргумент есть.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика