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

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

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

gamedevfor
> Вы сами же ответили на свой вопрос, вам нужно вручную управлять своими ресурсами через Placed и Reserved.
Вот теперь ты расскажи мне КАК это сделать. Желательно с примером кода. Я поэтому и запостил этот вопрос, что я этого не знаю.
DX12 отличается тем, что действие которое производится одной функцией для своей работы требует еще два десятка других функций.

Danilw
> я лишь говорю что знаю, так сейчас сделано что никто не делает "идеальные игры"
Сильное заявление. Но это не значит что не надо и стараться.


#31
(Правка: 19:44) 18:57, 23 мар. 2020

san
Ключевые слова ID3D12Device::Evict и ID3D12Device::MakeResident.
Нашел такую штуку для DX12: https://github.com/microsoft/DirectX-Graphics-Samples/tree/master… 3D12Residency
Не дает использовать ресурсы для рендеринга пока не вернет всю кучу на GPU.

#32
19:23, 23 мар. 2020

san
https://developer.nvidia.com/dx12-dos-and-donts
Раздел Avoid vidmem overcommitment описывает что хотят авторы драйвера

Пример неизвестного качества который можно потыкать:
https://github.com/microsoft/DirectX-Graphics-Samples/tree/master… oryManagement

Детальный ответ врядли кто-то тебе даст

#33
(Правка: 20:12) 19:42, 23 мар. 2020

gamedevfor
CD
Спасибо, покопаюсь. Может что и найду.

P.S.
>Ключевые слова ID3D12Device::Evict и ID3D12Device::MakeResident.
Это я уже пробовал.  Я не только Evict вызывал, но еще и SetResidencyPriority с минимальным приоритетом.
Не работает. Точнее может и работает, но внешне это ниак не проявляется. Картинка все равно успокаивается несколько секунд.

#34
(Правка: 21:39) 21:32, 23 мар. 2020

san
> Это я уже пробовал.  Я не только Evict вызывал, но еще и SetResidencyPriority с
> минимальным приоритетом.

В твоем случае нужно сделать ID3D12Device::MakeResident

Имейте в виду, что Evict может ничего не делать немедленно
MakeResident является синхронным MakeResident не вернется, пока ресурс не станет резидентом.
#35
23:07, 23 мар. 2020

san
> Точнее может и работает, но внешне это ниак не проявляется.
Ну, ты всегда можешь стиснуть зубы и попробовать проанализировать что происходит с точки зрения драйвера через https://docs.microsoft.com/en-us/windows-hardware/drivers/display/using-gpuview

#36
(Правка: 23:35) 23:25, 23 мар. 2020

CD
С ним и работаю. Там можно узнать загрузку GPU и работу тредов. По ним все нормально - никаких дырок. GPUwiew анализирует работу аппликации основываясь на информации драйвера, но похоже сам драйвер делает что-то не то. У меня только одна карта с 4 гигами - AMD R9 Nano. Там это и проявляется. Остальные две -  Nvidia и имеют 12 гиг - там все ОК.

gamedevfor
> В твоем случае нужно сделать ID3D12Device::MakeResiden
Ну ты меня совсем то за дурака не держи - разумеется когда надо вернуть текстуры я делаю MakeResident. Кстати если это не сделать, то обращение к недоступному ресурсу кинет эксепшн. Так что все нормально, но не вижу никакой особой разницы выгружаю я ресурсы или нет. И меня смущает Shared memory где появляются 3 гига. При том, что еще 3 гига в Dedicated. У меня просто нет 6 гиг, не пойму откуда столько берется. Что интересно - фирмовые программы Shared вообще не занимают.

#37
(Правка: 0:24) 0:08, 24 мар. 2020

san
Значит сами ресурсы были созданы без четкого указания где они должны быть.
Потому что MakeResident должен был вернуть их на своё место.
Вообщем тебе нужно явно создать свой хип c ресурсами, а не полагаться на то что там в MS вместо тебя насоздавали автоматически.

#38
(Правка: 0:49) 0:27, 24 мар. 2020

san
Он их возвращает на свое место. И это занимает 380 мс как показывает GPUview. Но только почему-то из Shared они при этом не пропадают, как я надеялся. А продолжают там сидеть, по крайней мере если верить Task Manager'у. Ресурсы созданы как Committed, потому я их обрабатываю по отдельности. Это медленнее, но перед тем как ломать аппликацию я хочу сначала убедиться что игра стоит свеч.

Вот картинку сделал:
Untitled-1 | Выделение памяти на GPU.

Первый аккуратный небоскреб - это я возвращаю текстуры назад после того, как положил на свободное месте одну текстуры 4К. Потом я ее удалил и возвращаю обратно то, что было. Как видно все очень пристойно. Аккуратная такая дырка на 380 мс.
Втоое строение - это я делаю то же самое, но в VRAM было две текстуры по 8К, которые занимали почти всю памать. Видно, что теперь возврат идет намного хуже, времени он занимает столько же, но после того продалжают идти какие-то "хвосты". Что это такое - х.з.

#39
0:48, 24 мар. 2020

san
Такое впечатление что твои ресурсы изначально расчитаны также и на доступ через CPU, поэтому ресурсы размещаются не только в VRAM но и в RAM.

#40
0:58, 24 мар. 2020

gamedevfor
> твои ресурсы изначально расчитаны также и на доступ через CPU
Да Бог с тобой...

#41
1:17, 24 мар. 2020

san
В любом случае Committed жрут кучу памяти поверх того что реально нужно и об этом сам MS пишет.
Хочешь эффективно использовать память - добро пожаловать к Placed Resources.

#42
1:30, 24 мар. 2020

gamedevfor
Ну вот и покажи мне как с этими Placed (а лучше Reserved) работать. Напиши кусок кода который создает несколько текстур а потом засовывает их в хип. Хип я создать могу, ресурсы тоже, но вот как эти ресурсы упаковать в хип я пока не пойму. Там много параметров, какие важные какие нет - непонятно. Еще по моему надо барьеры ставить по ходу этого процесса. Раз ты в теме - напиши промерчик, буду весьма благодарен.

#43
1:54, 24 мар. 2020

san
Покопай сорцы движков где это реализовано. Понятное дело что это тысячи строк кода.

#44
2:14, 24 мар. 2020

gamedevfor
Ну так и скажи, что "сам я не в теме, с этим вещами никогда не работал, поэтому даю советы".  Так хоть честно будет.
А то развел бодягу на три страницы, я думал что человек разбирается, а оказалось что это еще один inuendo.
За советы спасибо, но гуглить я и сам умею.

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