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

Переход на Vulkan. С чего начать? (2 стр)

Страницы: 1 2 3 Следующая »
#15
23:09, 21 ноя. 2017

-=MASTER=-
> На каком языке вообще пишется, на SPIR?
Пишут на глсл и компилят в SPIRV. Обычно вместе с компиляцией генерят с++ код который помогает биндить ресурсы.
В теме про вулкан я кидал презентации где расказывают про дх12 и вулкан в популярных движках.

> И ещё серия вопросов к вулканцам по поводу комьют шейдеров:
Там все тожесамое что в последнем глсл.

Я вообще эмулирую вулкан на огл, так более привычно переходить на вулкан и некоторые моменты становятся яснее, а функционал почти совпадает.


#16
23:14, 21 ноя. 2017

/A\
> Там все тожесамое что в последнем глсл.
хреново, придётся всё таки CUDA подрубать
/A\
> Пишут на глсл и компилят в SPIRV
А чем компилят-то? Есть какой-то readmap нубов-вулканизаторов? :)  Где почитать?

#17
23:23, 21 ноя. 2017

-=MASTER=-
> А чем компилят-то?
LunarGLASS в сдк

> хреново, придётся всё таки CUDA подрубать
так все из перечисленого в #14 в глсл есть, что там особенного в CUDA ?

#18
23:25, 21 ноя. 2017

Единственно чего в глсл нехватает - передачи динамических буферов в функции, я это собираюсь подправить в компиляторе, он все равно весь код оптимизирует и пихает в main, так что вендорский компилятор глсл это скомпилит, под вулкан тоже.

#19
0:09, 22 ноя. 2017

/A\
> так все из перечисленого в #14 в глсл ест
я уже ща не вспомню, но вроде там не было локальных барьеров или они не работали как надо, про работу с warp-ами я вообще молчу... да не, CUDA по функциональней разумеется...
/A\
> Единственно чего в глсл нехватает - передачи динамических буферов в функции
в смысле, там нельзя произвольный буфер передать в шейдер?

#20
0:22, 22 ноя. 2017

-=MASTER=-
> в смысле, там нельзя произвольный буфер передать в шейдер?
в шейдер передавать можно, а вот внутри шейдера только напрямую из буфера можно читать, передать буфер в функцию как массив нельзя.

#21
0:35, 22 ноя. 2017

-=MASTER=-
> А чем компилят-то? Есть какой-то readmap нубов-вулканизаторов? :) Где
> почитать?
http://www.gamedev.ru/code/articles/VulkanTriangle

Сам не похвалишь - никто не похвалит...
#22
0:48, 22 ноя. 2017

Andrey
> с коробки поддерживают быструю установку групп текстур(как и других ресурсов),

Суслик, ведь человек сам же провоцирует :)

#23
7:23, 22 ноя. 2017

Andrey
> Ну и тут это тоже обсуждают:
> https://forums.khronos.org/showthread.php/12967-Vulkan-and-bindless

да, обсуждают

+ Показать

#24
8:07, 22 ноя. 2017

/A\
> > а tfb ?
> а им кто-то еще пользуется? есть же компьют шейдеры

gs тоже не нужны ?

#25
8:31, 22 ноя. 2017

-=MASTER=-
> хреново, придётся всё таки CUDA подрубать
CUDA Vulkan Interop вроде нету, придеться делать CUDA->CPU->GPU.

#26
8:58, 22 ноя. 2017

Andrey

лучше поделись коммерческим опытом по сабжу... а, нету такого? только демкокубики

#27
9:31, 22 ноя. 2017

innuendo
> gs тоже не нужны ?
Нужны конечно, я на них частицы триангулирую.
В свежих презентациях тоже часто попадается использование гс, так что без них никак.

#28
12:51, 22 ноя. 2017

/A\
> в шейдер передавать можно, а вот внутри шейдера только напрямую из буфера можно
> читать, передать буфер в функцию как массив нельзя.
ну...я б не сказал, что прям вот такая уж необходимость, можно всё в мэйн-е считать...
The Player
> Сам не похвалишь - никто не похвалит...
О_о... отличное чтиво, данке! :-)  Почитаю на досуге...
Andrey
> CUDA Vulkan Interop вроде нету, придеться делать CUDA->CPU->GPU.
Да...что-то я тоже не нагуглил... С OpenGL есть интероп, а с вулканом - нет...  Собственно у OpenCL тоже только с OGL и D3D, с вулканом - нет, причём это ещё должна видео карта поддерживать (расширения)... беда...

Так, ну ок, тогда пара вопросов по Vulkan Compute:
1. Как я понял, произвольный буфер я могу передать в шейдер. Мне нужны буферы read/write, такие есть?
2. Я могу типизировать указатель на буфер своим typedef-ом? Ну типа void main(MyType* buffer) ? 
3. Есть ли синхронизация операций локальной памяти work group-а?
4. Есть ли синхронизация операций глобальной памяти?
5. Есть ли синхронизация warp-а?
6. Vulkan API хоста аллоцирует выровненные массивы в памяти GPU?
7. Драйвер Vulkan сам собирает векторные типы дынных в пакет по ширине шины? Ну типа как в современных драйверах OpenCL: cl_device_preferred_vector_width_float:1, то есть профита от того, что ты будешь копировать 4 раза по float или 1 раз по float4 в случае ширины шины в 128бит - не будет, т.к. компилятор сам додумается (допустим в цикле) собирать пакеты по 16 байт и только после этого писать в глобальную память за один раз?
8. Вообще можно использовать локальную память в шейдере, ну допустим у меня её на карте аж 48Кб (а на старых всегда было не больше 32-х), причём хорошей, scrathpad-овской! То есть я могу хотя бы в коде написать что-то вроде __local int data[1000], что бы этот массив был именно в локальной памяти?
9. Есть ли на CPU какие-то механизмы синхронизации compute шейдера? Допустим, что бы просто ждать его завершения, а лучше, что бы евент какой-то прилетал и что бы я мог скопом сразу 100 таких шейдеров запулить и одной функцией ждать завершения их всех?
10. На стороне CPU я могу копировать, чем-то заполнять и тд буферы GPU? Есть какие-то вспомогательные функции? Ну типа clEnqueueFillBuffer
11. Есть чем отлаживать шейдеры? Ну типа CodeXL/NSight для вулкана?
12. Допустим есть у меня фреймбуфер OpenGL, я могу в него вулканом рендерить? :-) Ну а если у меня готовое окны винды, есть его HWND, могу инициализировать вулкан для рендера в него?

#29
13:28, 22 ноя. 2017

хелп вампир

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

Тема в архиве.