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

EFI_COMPROMISED_DATA
лучший в мире
Статус
Оффлайн
Регистрация
26 Янв 2018
Сообщения
905
Реакции[?]
1,591
Поинты[?]
31K
Так как 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
 
Эксперт
Статус
Оффлайн
Регистрация
20 Май 2020
Сообщения
1,319
Реакции[?]
433
Поинты[?]
4K
сеня, что ты сделал....
 
00/00/00
Дизайнер
Статус
Оффлайн
Регистрация
2 Сен 2018
Сообщения
103
Реакции[?]
217
Поинты[?]
22K
елки иголки...
 
Эксперт
Статус
Оффлайн
Регистрация
31 Авг 2018
Сообщения
1,774
Реакции[?]
1,052
Поинты[?]
3K
круто, нихуя не поменялось короче
 
gay
Пользователь
Статус
Оффлайн
Регистрация
4 Ноя 2020
Сообщения
930
Реакции[?]
121
Поинты[?]
0
Начинающий
Статус
Оффлайн
Регистрация
15 Авг 2021
Сообщения
16
Реакции[?]
0
Поинты[?]
0
мдааа
 
Последнее редактирование:
helicopter aa unofficial dev
Пользователь
Статус
Оффлайн
Регистрация
4 Апр 2021
Сообщения
395
Реакции[?]
67
Поинты[?]
1K
давайте Есенин завезёт вулкан в ксго, а то толку от вулкана в том самом портале
 
Премиум
Статус
Оффлайн
Регистрация
10 Мар 2020
Сообщения
365
Реакции[?]
96
Поинты[?]
0
нихуя не понятно
 
midnight.im
Администратор
Статус
Оффлайн
Регистрация
1 Июл 2015
Сообщения
1,638
Реакции[?]
2,117
Поинты[?]
88K
давайте Есенин завезёт вулкан в ксго, а то толку от вулкана в том самом портале
его скоро добавят сами вальв. скорее всего в январе где то. хотя возможно и в декабре подарок сделают
 
🤡
Пользователь
Статус
Оффлайн
Регистрация
28 Апр 2014
Сообщения
107
Реакции[?]
139
Поинты[?]
3K
Есенин, что ты сделал!!!???
 
SC0R3D $$
Начинающий
Статус
Оффлайн
Регистрация
5 Окт 2019
Сообщения
78
Реакции[?]
13
Поинты[?]
0
А зачем это нужно и как работает?
 
Дизайнер
Статус
Оффлайн
Регистрация
18 Авг 2017
Сообщения
1,904
Реакции[?]
2,217
Поинты[?]
93K
Товары в продаже
1
получается пользы от вулкана ровным счетом 0?
 
smoking on that #pragma pack
Пользователь
Статус
Оффлайн
Регистрация
10 Янв 2018
Сообщения
325
Реакции[?]
96
Поинты[?]
1K
EFI_COMPROMISED_DATA
лучший в мире
Статус
Оффлайн
Регистрация
26 Янв 2018
Сообщения
905
Реакции[?]
1,591
Поинты[?]
31K
гений, плейбой, но не миллиардер
Пользователь
Статус
Онлайн
Регистрация
6 Июн 2017
Сообщения
131
Реакции[?]
86
Поинты[?]
0
бля ну как сказать, это канеш рендер через вулкан, но все равно трешак
ну бтв, люди на линуксах когда используют вайн используют именно дхвк, и получают производительность +/- как на винде с д3д. По факту нам просто транслируют д3д вызовы в вулкан
 
Дизайнер
Статус
Оффлайн
Регистрация
18 Авг 2017
Сообщения
1,904
Реакции[?]
2,217
Поинты[?]
93K
Товары в продаже
1
бля ну как сказать, это канеш рендер через вулкан, но все равно трешак
я тестил вулкан в портале (на видеокарте амд)

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