# Оптимизация

Мы все знаем, насколько ужасной была оптимизация игры на момент релиза. К сожалению, у нас до сих пор нет универсального решения - но это не значит, что мы не можем улучшить ситуацию.

---

## Что такое DXVK?

[DXVK](<https://github.com/doitsujin/dxvk>) это слой совместимости, который преобразует вызовы DirectX API в Vulkan.

Конечно, это не магия для улучшения производительности, а скорее слой совместимости для Linux, но состояние GTA IV на ПК настолько ужасное, что поможет что-угодно - хотя и не всем - за счет улучшения повышение производительности на стороне ЦП за счет лучшей обработки вызовов drawcall.

> [!NOTE]
>
> **Каких улучшений можно ждать от DXVK?**
>
> Сказать напрямую сложно, т.к. улучшения от DXVK полностью разные от одного ПК к другому. **Есть вероятность, что DXVK вам вообще не поможет, если у вас ГП и так на сотню загружен.** Так что единственный ответ - вы можете ожидать *какого-то* улучшения, если у вас нагрузка забита на ЦП.
>
> Однако при определенных условиях можно ожидать чего-то сопоставимого с этим тестом:

---

## Предварительные требования

> [!WARNING]
>
> - Убедитесь, что у вас последние [драйвера](<https://gillian-guide.github.io/ru/preparation/#_4>).
> - Если используете Windows, отключите `кэш шейдеров` в Steam, который находится в `Настройки` - `Загрузки`.
> - Если используете Linux, пропустите страницу до [настройки](<#_5>), т.к. Proton уже использьует DXVK.

---

## [Setup Utility](<https://github.com/gillian-guide/GTAIVSetupUtility>) (Автоматическая установка)

С помощью этой программы вы можете установить DXVK и [параметры запуска](<https://gillian-guide.github.io/ru/additional-setup/#_2>) автоматически и без особых усилий. Она также позаботится о совместимости между FusionFix, OpenPreCEPatch и другими особенностями - вы можете прочитать подробный функционал [здесь](<https://github.com/gillian-guide/GTAIVSetupUtility?tab=readme-ov-file#features>).

> [!NOTE]
>
> - Вы должны использовать программа заново **если вы позже совершите даунгрейд и/ли установите FusionFix и/или OpenPreCEPatch.**
> - Программа не нужна на Linux, т.к. DXVK уже используется, но вы можете использовать ее для других целей, запуская через Proton.

### Использование

> [!NOTE]
>
> **FusionFix**
>
> Учтите, что FusionFix уже включает в себя DXVK по умолчанию и вы можете его включить в вкладке Graphics. Но вы все еще можете обновить DXVK вручную.

1. Перейдите на [страницу последнего релиза](<https://github.com/gillian-guide/GTAIVSetupUtility/releases/latest>).
2. Скачайте `GTAIVSetupUtility.exe`.
3. Запустите программу.
4. Нажмите `Открыть...` (`Open...`) и выберите вашу папку с игрой. Следуйте инструкциям в приложении, если появятся всплывающие окна.
5. Нажмите `Установить DXVK` (`Install DXVK`) и после `Настроить параметры запуска` (`Setup launch options`) в этой же последовательности.

   - Если вы знаете что делаете, можете вручную поменять какие-либо переключатели. Обычно, в этом нет нужды.
   - Обновить DXVK можно кнопкой `Переустановить DXVK` (`Reinstall DXVK`).
   - Если появятся какие-либо проблемы, [сообщите о них на Discord сервере](<https://gillian-guide.github.io/ru/#_4>).

> [!WARNING]
>
> **Для пользователей 50-серии NVIDIA RTX**
>
> Убедитесь, что ваши драйвера обновлены. В течении несколькох месяцев, драйвера моментально вылетали для всех пользователей 50 серии. Это было исправлено в новых драйверах.

После использования тулзы, вы можете спокойно приступить к оптимальным настройкам графики:

---

## Ручная установка

> [!WARNING]
>
> **Требования**
>
> - Используйте эту версию если ваш ГП:
>
>   - **NVIDIA**: ГП серии Maxwell (серия GeForce 800) или новее, плюс GTX 745, GTX 750 и GTX 750 Ti.
>
>     - GeForce 810M, GeForce 820M, GeForce 825M, GTX 870M, GTX 880M, GeForce 910M и GeForce 920M не поддерживаются.
>   - **AMD**: ГП или встройка серии GCN4 (серии RX400 и Vega) или новее.
>   - **Intel**: Встройка серии Skylake (6-е поколение ЦП Intel Core) или новее. Все ГП Arc поддерживаются. Выборочные встройки могут быть ограничены до Legacy.
>   - **Mac**: Mac на Intel с поддержкой Vulkan 1.3 (проверьте вручную, открыв командную строку и ввев `vulkaninfo`).
>
> Если вы не входите в этот список, проверьте версию Legacy. **Этот список применим только к Windows.**

---

### Инструкции

1. Перейдите на [страницу последнего релиза](<https://github.com/doitsujin/dxvk/releases>).
2. Скачайте архив `dxvk-x.x.tar.gz`.
3. После скачивания, откройте архив и перейдите в папку <mark>dxvk-x.x\x32\</mark>.
4. Распакуйте `d3d9.dll` в папку с игрой. Если вы хотите сохранить возможность переключать API в настройках игры, сначала переименуйте файл в `vulkan.dll`.

> [!NOTE]
>
> **Про патч `async`**
>
> DXVK, начиная от версии 2.0, добавили поддержку Graphics Pipeline Library, который, в контексте GTA IV, полностью удаляет фризы при создании шейдеров если ваш ГП поддерживает GPL и Fast Linking.
>
> Если у вас относительно современный ГП, эти фичи уже у вас должны быть, и если у вас нет частых микрофризов - они есть. **Если же у вас *есть* очень частые микрофризы на этой версии, проверьте, обновлены ли у вас драйвера, и если они обновлены, то используйте форк [dxvk-gplasync](<https://gitlab.com/Ph42oN/dxvk-gplasync/-/releases>) для уменьшения количества микрофризов.**

> [!WARNING]
>
> **Требования**
>
> - Вы можете использовать эту версию если ваш ГП:
>
>   - **NVIDIA**: ГП серии Kepler (серия GeForce 600) или новее.
>   - **AMD**: ГП или встройка серии GCN1 (серия Radeon HD 7700) или новее.
>   - **Intel**: Встройка серии Skylake (6-е поколение ЦП Intel Core) или новее. Все ГП Arc поддерживаются. Выборочные встройки могут быть ограничены до DXVK 1.10.1.
>   - **Mac**: Mac на Intel с поддержкой Vulkan 1.1 (проверьте вручную, открыв командную строку и ввев `vulkaninfo`).
>
> Если вы не входите в этот список, вы не можете использовать DXVK. **Этот список применим только к Windows.**

---

### Инструкции

1. Перейдите на [страницу последнего релиза DXVK-Sarek](<https://github.com/pythonlover02/dxvk-Sarek/releases/latest>).

   - Если вы испытываете проблемы с этим форком, можете использовать [dxvk-async 1.10.3](<https://github.com/Sporif/dxvk-async/releases/tag/1.10.3>).
2. Скачайте архив `dxvk-sarek-dyasync-vx.x.x.tar.gz`.
3. После скачивания, откройте архив и перейдите в папку <mark>dxvk-sarek-dyasync-vx.x.x\x32\</mark>
4. Распакуйте `d3d9.dll` в папку с игрой. Если вы хотите сохранить возможность переключать API в настройках игры, сначала переименуйте файл в `vulkan.dll`.

> [!NOTE]
>
> **Почему не `dxgi.dll` или другие файлы из папки?**
>
> Игра использует графический API Direct3D 9. Другие `dll` для Direct3D 10 и Direct3D 11.
>
> В простых словах, игра не будет использовать любые другие файлы.

> [!NOTE]
>
> **Почему <mark>x32</mark>? Моя система 64-х битная**
>
> В этом случае, ваша система не имеет значения. Сама игра рассчитана на использование 32-х битных библиотек, а не 64-х битных.
>
> В простых словах, игра не будет использовать файлы из папки <mark>x64</mark>

> [!WARNING]
>
> **Если возникли проблемы...**
>
> Попробуйте понизить версию на один или два релиза.
>
> Если игра вообще не запускайте, ваш ГП не поддерживает последнюю версию. Используйте замисть этой версии версию Legacy.
>
> Просмотрите [исправление проблем](<https://gillian-guide.github.io/ru/resources/troubleshooting/index.md>).

---

### Настройка

Создайте файл `dxvk.conf` в папке с игрой и добавьте следующие строки с помощью любого текстового редактора:

```cpp
# maxFrameLatency используется для предотвращения или уменьшения случайных пропусков кадров и фризов. Эта опция устанавливает более строгую максимальную задержку кадров.
d3d9.maxFrameLatency = 1
# presentInterval используется для включения VSync. Мы будем использовать его в пользу игрового VSync. Так мы получим лучшую нагрузку на процессор.
d3d9.presentInterval = 1
# numBackBuffers может дополнительно улучшить стабильность FPS при использовании Vsync. Эта опция переопределяет количество обратных буферов для цепочки подкачки Vulkan.
d3d9.numBackBuffers = 3
```

Если используется `dxvk-async` или `dxvk-gplasync`, также добавьте следующие строки в тот же файл:

```cpp
# Следующие опции используются для включения async
dxvk.enableAsync = true
dxvk.gplAsyncCache = true
```

Если вас не устраивает скорость компиляции шейдеров, добавьте следующие строки и измените значения под ваше значение потоков на ЦП:

```cpp
dxvk.numAsyncThreads = 4
dxvk.numCompilerThreads = 4
```

Для более детальной настройки вы можете посмотреть полный список доступных опций [здесь](<https://github.com/doitsujin/dxvk/blob/master/dxvk.conf>).

---

## Навигация

После выполнения оптимизации следует продолжить c второстепенной настройкой, чтобы завершить оптимизацию игры.
