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

Выделение памяти на GPU. (2 стр)

Страницы: 1 2 3 4 Следующая »
#15
8:07, 23 мар. 2020

innuendo
Меня интересуют не спеки (я их читал) а пример реализации. Поскольку DX12 это низкоуровневая API, то дистанция между функцией и работающим кодом очень большого размера.


#16
8:14, 23 мар. 2020

san

как сказал суслик - флажки
может быть эти https://docs.microsoft.com/en-us/windows/win32/api/d3d12/ne-d3d12… 2_memory_pool или где-то близко

#17
11:49, 23 мар. 2020

san
> Тогда я смогу скидывать всю кучу в RAM и доставать обратно одним колом.

В таком случае прога скорее всего зависнет секунд на пять.

#18
15:31, 23 мар. 2020

gamedevfor
Да нет. Посмотри скорость PCIe шины. Пара гигабайт пролетят меньше чем за 0.1 сек. Сейчас задержки связаны не со скоростью шины, а с тем, что драйвер не знает что где должно лежать.  Пока до него это дойдёт он гоняет массивы туда-обратно. Собственно не я это изобрел, это стандартный метод, просто я не вижу хорошего примера реализации.

#19
16:01, 23 мар. 2020

san
> Пара гигабайт пролетят меньше чем за 0.1 сек
воспроизведение 60фпс 1080п видео через видеокарту это уже 50% нагрузки на шину
воспроизведение 4к видео(кубемапы или панорама для 3Д как на ютубе) это 90% нагрузки на шину

игры с Денуво тормозят воспроизведение 720п видео

память очень медленная помоему

#20
(Правка: 16:17) 16:17, 23 мар. 2020

Danilw
Мне не нужно гнать 33МБ каждые 30 мс как в случае 4к видео, мне нужно однократно перегнать 2 гига одним куском. Драйвер и так это делает, хотя вы это и не видите, но он делает это неэффективно, поскольку не знает особенностей программы.
И вообще, давайте не будем теоретизировать. Вопрос не "зачем" а "как" это сделать.

#21
16:48, 23 мар. 2020

san
> Вопрос не "зачем" а "как" это сделать.
по моим наблюдениям, на Вулкане
отправка текстуры 32битной разрешения 4096*4096 занимает некоторое время(дольше одного кадра)

какбы я делал-слалбы текстурами, текстуры можно хоть из компут шейдеров грузить

и если тебе один раз загрузить, то какая разница сколько времени занимает(пусть даже секунду)

#22
17:24, 23 мар. 2020

san
> Драйвер и так это делает

драйвер может делать это неспеша в фоне при этом не роняя сильно FPS.

#23
17:40, 23 мар. 2020

Уже объяснял в другой ветке, но повторюсь:
У меня VR аппликация, которая кровь из носу должна обеспечивать 90 фпс. На старте (не спеша) загружается сцена где 1.5 гига текстур. Потом она рендерится и все ОК. Но имеется еще один режим, где сцены уже нет, а есть пара гигантских текстур по 8К каждая. На 4ГБ картах и сцена и эти текстуры в память не влазят, поэтому драйвер начинает вытеснять неиспользуемые ресурсы на RAM. И все опять хорошо. Но когда я возвращаюсь в первый режим и уничтожаю большие текстуры, то драйвер не сразу может поверить своему счастью и не сразу возвращает все текстуры в VRAM, а какое-то время продолжает их читать из RAM, что вызывает нестабильность в течении нескольких секунд и выглядит как приостановка рендера, что в условиях VR крайне неприятно.

Вот так выглядит аппликуха, что бы понятнее было: https://youtu.be/dStVDQHC8rA

#24
(Правка: 18:05) 18:05, 23 мар. 2020

san
> драйвер не сразу может поверить своему счастью и не сразу возвращает все
> текстуры в VRAM

Скорее всего нужно самому поменять флаг у текстур.

#25
18:24, 23 мар. 2020

san
> то драйвер не сразу может поверить своему счастью и не сразу возвращает все
> текстуры в VRAM, а какое-то время продолжает их читать из RAM,
все юнити игры так делают, и всем пофиг
юзеры привыкли к лагам после загрузки

#26
(Правка: 18:32) 18:28, 23 мар. 2020

gamedevfor
Давай не будем разводить флейм. Ты ЗНАЕШЬ или ты ДУМАЕШЬ?

В DX12 нет флагов у текстур которые бы говорили где она должна находиться. Текстура (ресурс) в DX12 это структура на стороне CPU, на GPU находится Heap (куча). Просто чаще всего ресурсы создаются как Committed, при этом Heap создается неявно и многие об этом и не догадываются. Для других типов ресурсов (Placed и Reserved) требуется явно копировать их в кучи. Освобождение VRAM происходит при уничтожении кучи а не ресурса. Соответственно если создать кучу и скопировать туда ресурсы, то они появятся на VRAM и будут доступны для использования. Но драйвер при недостатке памяти может сам освобождать кучи которые по его мнению в данный момент не нужны. И возвращать их назад, если к ним обратиться. Я хочу взять этот процесс под контроль, только и всего.

Danilw
> юзеры привыкли к лагам после загрузки
Ты читаешь что я пишу? Речь идет о VR и не "после загрузки", а в процессе работы. Может "юзеры и привыкли", но зачем их насиловать, если этого можно избежать?

#27
18:41, 23 мар. 2020

san
Вы сами же ответили на свой вопрос, вам нужно вручную управлять своими ресурсами через Placed и Reserved.

#28
(Правка: 18:45) 18:42, 23 мар. 2020

san
> Ты читаешь что я пишу? Речь идет о VR и не "после загрузки", а в процессе
> работы. Может "юзеры и привыкли", но зачем их насиловать, если этого можно
> избежать?
я тебе ничего доказывать не собираюсь, успокойся
в VRChat загрузки зон в реальном времени, и там все лагает при догрузки аватаров и карт, и всем пофик
в Скайриме каждые два шага лаги, входишь в дом все зависает
в БестСабер при загрузке треков лаги
качественных игр в ВР не вышло еще ни 1,  в последней якобы "ААА" игре для ВР в Боневоркс, повороты камеры догружают гигабайты текстур на модельках в реальном времени и все лагает(ФПС до 20 просаживается очень часто)

я лишь говорю что знаю, так сейчас сделано что никто не делает "идеальные игры", а ты делай как хочешь мне вообще пофик

gamedevfor
> вам нужно вручную управлять своими ресурсами через Placed и Reserved.
единственная игра которая так делает это Дум
больше никто

#29
18:48, 23 мар. 2020

Danilw
> единственная игра которая так делает это Дум
> больше никто

Committed это для игр которые целиком и полностью помещаются в VRAM без каких либо проблем.

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