C++ Гайд SourceEngine vulkan(dxvk) renderer

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

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


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


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

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


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


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



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



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
 
mindset studio — yougame.biz/threads/284270
Забаненный
Статус
Оффлайн
Регистрация
2 Сен 2018
Сообщения
105
Реакции[?]
235
Поинты[?]
39K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
елки иголки...
 
helicopter aa unofficial dev
Пользователь
Статус
Оффлайн
Регистрация
4 Апр 2021
Сообщения
415
Реакции[?]
72
Поинты[?]
6K
давайте Есенин завезёт вулкан в ксго, а то толку от вулкана в том самом портале
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,650
Реакции[?]
2,173
Поинты[?]
162K
давайте Есенин завезёт вулкан в ксго, а то толку от вулкана в том самом портале
его скоро добавят сами вальв. скорее всего в январе где то. хотя возможно и в декабре подарок сделают
 
EFI_COMPROMISED_DATA
лучший в мире
Статус
Оффлайн
Регистрация
26 Янв 2018
Сообщения
920
Реакции[?]
1,632
Поинты[?]
85K
гений, плейбой, но не миллиардер
Пользователь
Статус
Оффлайн
Регистрация
6 Июн 2017
Сообщения
137
Реакции[?]
90
Поинты[?]
4K
бля ну как сказать, это канеш рендер через вулкан, но все равно трешак
ну бтв, люди на линуксах когда используют вайн используют именно дхвк, и получают производительность +/- как на винде с д3д. По факту нам просто транслируют д3д вызовы в вулкан
 
Дизайнер
Статус
Оффлайн
Регистрация
18 Авг 2017
Сообщения
1,931
Реакции[?]
2,258
Поинты[?]
146K
Товары в продаже
1
бля ну как сказать, это канеш рендер через вулкан, но все равно трешак
я тестил вулкан в портале (на видеокарте амд)

получилось так, что с вулканом постоянно фризы были
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,650
Реакции[?]
2,173
Поинты[?]
162K
получается пользы от вулкана ровным счетом 0?
возможно средний фпс вырастет, но максимальный упадет. в сурс2(доте2) там полноценная имплементация вулкана. без врапперов
 
Сверху Снизу