Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

C++ SourceEngine vulkan(dxvk) renderer

EFI_COMPROMISED_DATA
лучший в мире
лучший в мире
Статус
Оффлайн
Регистрация
26 Янв 2018
Сообщения
947
Реакции
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
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
елки иголки...
 
давайте Есенин завезёт вулкан в ксго, а то толку от вулкана в том самом портале
 
давайте Есенин завезёт вулкан в ксго, а то толку от вулкана в том самом портале
его скоро добавят сами вальв. скорее всего в январе где то. хотя возможно и в декабре подарок сделают
 
бля ну как сказать, это канеш рендер через вулкан, но все равно трешак
ну бтв, люди на линуксах когда используют вайн используют именно дхвк, и получают производительность +/- как на винде с д3д. По факту нам просто транслируют д3д вызовы в вулкан
 
бля ну как сказать, это канеш рендер через вулкан, но все равно трешак
я тестил вулкан в портале (на видеокарте амд)

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