использует не весь DX12 а лишь API
*Бьется головой об стол в бессильном припадке*
Не весь мерседес, а лишь автомобиль! Не весь Икарус а только лишь автобус!
*Продолжает выть и биться головой об стол*
Огнетушитель опустошен и теперь по теме:
Собственно, отличие DX12 от DX11 вкратце описано на MSDN:
To improve the CPU efficiency of Direct3D apps, Direct3D 12 no longer supports an immediate context associated with a device. Instead, apps record and then submit command lists, which contain drawing and resource management calls. These command lists can be submitted from multiple threads to one or more command queues, which manage the execution of the commands. This fundamental change increases single-threaded efficiency by allowing apps to pre-compute rendering work for later re-use, and it takes advantage of multi-core systems by spreading rendering work across multiple threads.
Сжато пересказывая на русский язык:
Отличием DX12 от его предшественника является система списков команд, которые пришли заместо старой концепции (на самом деле нет, наоборот вернулись к еще более старой но переосмысленной концепции очень старых версий opengl и directx) немедленного выполнения, то бишь в DX11 отдельные этапы приготовления грофона (загрузить текстуру, загрузить меши, загрузить шейдеры, привязать параметры к шейдерам и.т.д.) выполняются непосредственно при вызове соответствующих методов, а в DX12 они вместо этого запихиваются по очереди в промежуточный буфер команд и уже после этого отдается команда выполнить их все вместе. А все остальное там практически то же самое.
Нафига это сделали? Ну в первую очередь потому что многопоточность, с которой даже последние DX10 и DX11 не особо то и дружили. То бишь несмотря на многопоточность игры, непосредственное взаимодействие с видеокартой можно было делать только в одном потоке, а остальные занимались либо прочими вещами, либо подготавливали для этого потока данные. Вторая (ну и собственно, самая распиаренная) причина - оверхед (то бишь, грубо говоря, штраф) на вызовы отдельных этапов приготовления грофона в сложных случаях. То бишь если мы для отдельных объектов много-мого раз дергаем методы immediate api, то получаем кучу бесполезного простоя видеокарты, а если мы объединим их и отправем видеокарте пачкой то получаем выигрыш в производительности.
Для интересующихся, примерный прейскурант оверхеда (в версии Nvidia) выглядит так:
На самом деле, данная проблема частично решается умными драйверами, которые умеют внутри себя распознавать отдельные вызовы и объединять их в нужном для GPU порядке, соственно профили драйверов для игр идут именно оттуда - это что то вроде пресетов оптимизации для каждой отдельной игры.
Теперь собственно насчет эмулятора и "где наши обещаные ФПС????!!!!111111адинадин" - да нигде, эмулятор он по определению CPU-bound, сфигали там производительность должна была подняться, если DX12 решает проблемы сугубо многопоточности (а обе эмулируемые консоли однопроцессорные) и drawcall-overhead, который в играх GC/Wii в целом на уровне соответствующих лет? "Так ваще от него будет какой-то толк???" - теоретически будет для тяжелых в плане грофона игр вроде баттлефронта где как раз в оригинале идет изнасилование именно GPU многоэтапным рендерингом с сохранением промежуточных результатов, и то, это если перепишут полностью GPU подсистему, тащемта.