C++ SourceEngine vulkan(dxvk) renderer

EFI_COMPROMISED_DATA
лучший в мире
лучший в мире
Статус
Оффлайн
Регистрация
26 Янв 2018
Сообщения
948
Реакции
1,625
Так как valve добавили '-vulkan' параметр для игр на source engine, я решил копнуть в него и обновить рендерер для своей портал 2 базы.

С самого начала я нашел модуль vulkan-1.dll, в нем есть много экспортов, но ни один из них не вызывается.
YuB93E7.png


Затем я обнаружил чудесный модуль 'dxvk_d3d9.dll'
mvKWMqO.png


Валв все еще делают какой-то непонятный трешак вместо адекватных решений. Этот рендерер является билдом https://github.com/doitsujin/dxvk.
То бишь этот 'vulkan rendering' это враппер над dx9, который будет рендерить dx9 данные используя vulkan.
Все что нам нужно, так это найтив этом модуле Present, хукнуть его и рисовать используя dx9, в примерах ниже я буду использовать imgui.

Функция которую мы ищем это этот Present
В теле этой функции имеется вызов RecreateSwapChain, в котором есть одна строка, изи пизи, ищем эту строку в иде и смотрим единственый xref.
15Pnelx.png


Затем мы видим несколько xref'ов на функцию, которую мы нашли
oorq584.png


Сравнивая декомпилированный код и код функци(й) на гитхабе мы легко находим наш презент, текущая сига до него - "E8 ? ? ? ? 83 EC 18 83 C4 2C C2 14 00".rel<uint32_t>( 1 )
Затем я нашел оффсет до 'm_parent'(dx9 device) в этом dxvk девайсе.
RowoJIv.png

S4uArn2.png


Теперь все что нам требуется это хукнуть данную функцию и рисовать все там.
MmrwRqm.png



Bonus: сигнатура d3d device все еще работает в новом shaderapivk, то есть вместо записи idxvk_device в глобальную переменную из present хука вы можете получить д3д девайс тута: "89 1D ? ? ? ? E8 ? ? ? ? 8B 55".offset( 2 ).self_get( 2 )


Full pasta доступна в моей portal2 базе (vulkan branch): https://github.com/es3n1n/portal2-internal/tree/vulkan
 
сеня, что ты сделал....
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
елки иголки...
 
круто, нихуя не поменялось короче
 
мдааа
 
Последнее редактирование:
давайте Есенин завезёт вулкан в ксго, а то толку от вулкана в том самом портале
 
нихуя не понятно
 
давайте Есенин завезёт вулкан в ксго, а то толку от вулкана в том самом портале
его скоро добавят сами вальв. скорее всего в январе где то. хотя возможно и в декабре подарок сделают
 
Есенин, что ты сделал!!!???
 
А зачем это нужно и как работает?
 
получается пользы от вулкана ровным счетом 0?
 
бля ну как сказать, это канеш рендер через вулкан, но все равно трешак
ну бтв, люди на линуксах когда используют вайн используют именно дхвк, и получают производительность +/- как на винде с д3д. По факту нам просто транслируют д3д вызовы в вулкан
 
бля ну как сказать, это канеш рендер через вулкан, но все равно трешак
я тестил вулкан в портале (на видеокарте амд)

получилось так, что с вулканом постоянно фризы были
 
получается пользы от вулкана ровным счетом 0?
возможно средний фпс вырастет, но максимальный упадет. в сурс2(доте2) там полноценная имплементация вулкана. без врапперов
 
Назад
Сверху Снизу