В статье на веб-сайте Imagination я прочитал следующий параграф:
Например, в Vulkan нет эквивалентных точек входа
glUniform*()
; вместо этого запись в память GPU является единственным способом передачи данных в шейдеры.Когда вы вызываете
glUniform*()
, драйвер OpenGL ES обычно должен выделять буфер, управляемый драйверами, и копировать данные на него, управление которыми связано с накладными расходами процессора. В Vulkan вы просто сопоставляете адрес памяти и записываете непосредственно в эту ячейку памяти.
Есть ли разница между этим и использованием Uniform Buffers? Они также распределяются явно и могут нести произвольные данные. Поскольку однородные буферы довольно ограничены по размеру, возможно, Шейдерные буферы хранения являются лучшей аналогией.