Главное событие GDC

May 05, 2014 00:24

В последние несколько лет застой в развитии графических API на PC/Mac в общем-то уже стал статусом кво. Наш ROBLOX, скажем, работает на DX9 и в ус не дует (у нас там 15-20% XP все еще, например). Кроме отдельных AAA-игр, которых можно пересчитать по пальцам, у всех остальных все либо также, либо вообще нет десктопа как платформы ( Read more... )

tech, graphics

Leave a comment

kunaifusu May 5 2014, 09:12:51 UTC
Если бы хбокс работал на дх11 то у него вообще никаких шансов против пс4 не было, так что дх12 для хбокса делали по-любому. А то, что его сделали паблик - это да, неожиданно. Я, лично, не представляю вообще как это поднять под виндузом из за многозадачности. Мантл может просто сказать, что он однозадачный и как-то отгородить Мантл апликацию от ДХ11 драйвера, а если ДХ12 это скажет, то будет странно.

Reply

sim0nsays May 5 2014, 17:48:06 UTC
Я не знаю, насколько близко мужики из Windows (которые делают DX12) общаются с Xbox, формально они довольно далеко.

Как поднять на Windows совершенно понятно, см. http://public.closedcircles.com/posts/gdc-2014-directx12
Тех command lists может быть много от разных приложений, scheduler вполне может запускать их несколько. Остается менеджмент памяти, для него в WDDM 2.0 вроде сделали виртуальную память для GPU, чтобы не пейджить туда-сюда все вместе и уменьшить оверхед.

Все вполне многозадачно.

Reply

kunaifusu May 5 2014, 18:09:07 UTC
Понятно что команд буферов может быть много. Не понятно как может быть много стейтов у GPU :). Только ресетить весь стейт в каждом буфере. А чтобы ресетить стейт нужно GPU останавливать. А пайплайны у него длиннныйаааа. Конечно, будет быстрее DX11 но очень далеко до консолей.

Reply

sim0nsays May 5 2014, 18:13:28 UTC
Может, что-то подпилили в железе, что было побыстрее делать context switch?
Резетить стейт не в каждом буфере, а все-таки при переключении одного device context на другой. Т.е. в случае, когда одно приложение (или другое очень редко), почти нет оверхеда.

Пайплайн - это интересный вопрос, да. Scheduler всегда может знать, какой пакет следующий и отдать его драйверу. А вот сможет ли он не полностью GPU останавливать, чтобы стейт менять - интересно.

Reply

kunaifusu May 5 2014, 18:31:20 UTC
Не знаю что там можно напилить - GPU один и стейт у него один. Чтобы переключиться в другой - будь добр дождаться когда он работу в текущем стейте закончит. В DX11 драйвер командные буферы сам читает и понимает, где стейт меняется так что это не проблема, а вот если ему дать opaque буферы от GPU то чего делать? На всякий случай я не про blend state а про конфиг самого GPU - всякие буфера, приоритеты и прочие маски.

Reply

(The comment has been removed)

kunaifusu May 5 2014, 19:16:55 UTC
Я бы так и сделал. Только фулскрин, только хардкор. Но судя по тому же Aero у МСФТ другая точка зрения.

Reply

(The comment has been removed)

px_x64 May 6 2014, 20:50:21 UTC
Для fullscreen - программа получает видео в свой полный контроль.

Только если монитор всего один, что уже достаточно часто неправда ;)

Reply

sim0nsays May 5 2014, 19:06:10 UTC
Когда буфер попадает к kernel driver после scheduler, там и в DX11 уже hardware-dependent шмат и kernel driver вроде из него стейт не достает, только валидирует и пойнтеры на ресурсы патчит.

Расскажи какой-нибудь пример стейта, который очень сложно переключить?

Reply

kunaifusu May 5 2014, 19:13:17 UTC
Да не сложно, останавливай машинку и переписывай регистры/таблички в памяти. Просто долго будет - пока ждешь когда пайплайн вытечет и пока по новой нальется тысяч десять тактов пройдёт на GCN. А стейты эти нужно дергать если, например, тесселяцией занимаешься. Или геометрическими шейдерами.

Reply


Leave a comment

Up