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

Directx 12 вопросы. (38 стр)

Страницы: 137 38 39 40 41 Следующая »
#555
14:48, 29 фев 2024

Andrey
В каком смысле и почему?

Такого быть не должно.
Конечно, зависит от архитектуры и вендора, но если в общем смысле, то компьют очередь выполняется на выделенных из общей корзины юнитах.

#556
14:58, 29 фев 2024

Страшно как-то читать что Resource Barrier - LEGACY.

#557
15:01, 29 фев 2024

luckyleo769
> В каком смысле и почему?
сам же ответил
>Конечно, зависит от архитектуры и вендора, но если в общем смысле, то компьют очередь выполняется на выделенных из общей корзины юнитах.

Не спросат есть специальный enum для этого

#558
15:44, 29 фев 2024

Andrey
Я ответил, что компьют это в целом просто подмножество от директа, если, вообще нативно доступен. ДХ может вежливо игнорить тип очереди если девайс его нативно не сапортит

#559
17:36, 29 фев 2024

luckyleo769
> ДХ может вежливо игнорить тип очереди если девайс его нативно не сапортит
Не совсем так. У меня было +50% от асинк компьюта на интел 620, где компьют очереди вообще нет. Теоретически это возможно если сначала запустить компьют на части ядер, а потом рисование, которое будет использовать освободившиеся ядра. В том тесте рисование было неоптимизированно поэтому меньшее количество ядер никак не влияло.

#560
20:37, 29 фев 2024

/A\
> на интел 620, где компьют очереди вообще нет.
Об этом я и говорю. Компьют очередь это больше гарантия что лишние юниты не участвуют в распределении.

То что + к перфу, просто планировщик мог оптимальнее распределил юниты между двумя виртуальными очередями. Конкурентная работа выполняется всегда, когда возможно и без асинка

То, что прям +50%, не верю. Может там время кадра было на уровне погрешности

#561
7:09, 1 мар 2024

В общем сделал так, нслииесть опция показывать статистику для compute создаётся D3D12_COMMAND_LIST_TYPE_DIRECT queue,иначе D3D12_COMMAND_LIST_TYPE_COMPUTE

#562
10:48, 1 мар 2024

Ребят, при создании кучи, есть ли смысл позаботиться и узнать поддерживается ли L1 и указать D3D12_MEMORY_POOL_L1? Или же можно всегда выставлять D3D12_MEMORY_POOL_UNKNOWN и он сам всегда будет брать L1 если она есть?

#563
12:34, 1 мар 2024

s3dworld
Для подавляющего большинства кейсов будет достаточно unknown.

При unknown DXGI сам выбирает где аллоцировать хип, а в случае OOM будет переливать данные из одного пула в другой. При OOM будут значительные просадки по перфу, но без крашей.

Если же менеджить выбор пулов, то перекачку данных (освобождение L1) или другой механизм защиты от ООМ придется делать ручками, как в вулкане.

Ну еще может быть получится более оптимально плясать между пулами, чем у DXGI.

+ Показать
#564
13:21, 1 мар 2024

s3dworld
> Или же можно всегда выставлять D3D12_MEMORY_POOL_UNKNOWN и он сам всегда будет
> брать L1 если она есть?
Если тип кучи DEFALUT или GPU_UPLOAD, то будет браться пул L1, при условии, что такой пул есть.
Для UPLOAD и READBACK всегда берётся пул L0 (т. е. оперативная память).

#565
9:32, 2 мар 2024

Ребят, а для матрицы ModelViewProj нормальная практика создать константный буфер в UPLOAD кучи, делать Map() и в таком состоянии держать? Не нужно создавать второй константный буфер в DEFAULT и данные перемещать между UPLOAD в DEFAULT при обновлении?

#566
10:54, 2 мар 2024

s3dworld
Для per instance констант думаю смысла нет. Per frame, наверное, лучше закинуть в дефолт хип.

#567
(Правка: 12:26) 12:00, 2 мар 2024

HolyDel
> Для per instance констант думаю смысла нет. Per frame, наверное, лучше закинуть в дефолт хип.
Не понимаю это раздение на per instance и per frame. Вот в примере от Microsoft, они создают константный буфер в UPLOAD, один раз вызывают Map(), получают указатель на область памяти. Сохраняют этот указатель и каждый кадр записывают новое значение (предварительно синхронизируя что работа завершена). И что же, даже не нужно вызывать никакой функции, сообща устройству что данные обновлены (а если вдруг там 1000 кадров в секунду, он всё равно успеет 1000 раз новые данные извлечь?)? Я так понимаю это и называется per frame и тут лучше делать COPY в память GPU если она есть? А что тогда per instance?

#568
12:22, 2 мар 2024

s3dworld
> они создают константный буфер в UPDATE, один раз вызывают Map()
Так можно, но нужно помнить, эта память параллельно с аплоадом юзается и гпу и нужно синхронизировать выполнение команд, использующих константный буфер для чтения и команд записи на цпу.

Upload и default про другое, про скорость доступа со стороны гпу. Но чтобы данные попали в default со стороны цпу, они сперва должны попасть в синхронизированный upload.

#569
12:27, 2 мар 2024

luckyleo769
Я там ошибся, вместо UPLOAD написал UPDATE.

Страницы: 137 38 39 40 41 Следующая »
ПрограммированиеФорумГрафика