Повертаємо драйверам AMD підтримку DirectX12 старими процесорами. Повертаємо драйверам AMD підтримку DirectX12 старими процесорами Завантажити програмний емулятор інструкцій sse 4.2

💖 Подобається?Поділися з друзями посиланням

Завантажити відео та вирізати мп3 – у нас це просто!

Наш сайт - це чудовий інструмент для розваг та відпочинку! Ви завжди можете переглянути та скачати онлайн-відео, відео приколи, відео прихованої камери, художні фільми, документальні фільми, аматорське та домашнє відео, музичні кліпи, відео про футбол, спорт, аварії та катастрофи, гумор, музика, мультфільми, аніме, серіали та багато інших відео абсолютно безкоштовно та без реєстрації. Конвертувати це відео в mp3 та інші формати: mp3, aac, m4a, ogg, wma, mp4, 3gp, avi, flv, mpg та wmv. Онлайн Радіо - це радіостанції на вибір за країнами, стилями та якістю. Онлайн Анекдоти – це популярні анекдоти на вибір за стилями. Порізка mp3 на мелодії онлайн. Конвертер відео в мп3 та інші формати. Онлайн Телебачення – це популярні TV канали на вибір. Мовлення телеканалів здійснюється абсолютно безкоштовно в режимі реального часу – ефір онлайн.

Обновившись наприкінці квітня на нові драйвера AMD 16.4.2, я виявив, що всі програми DirectX12 перестали працювати. Не здивувавшись, я вирішив почекати усунення проблеми і відклав DirectX12 убік. Але місяці йшли, а з новими драйверами ситуація не змінювалася.

Google показав, що ця проблема носить масовий характер (раз, два, три, чотири), а AMD ніяк не реагує. Користувач форумів AMD tapek шляхом дебаггінгу з'ясував, що проблема полягає у використанні нових версій драйверів інструкції popcnt з набору SSE4.2.

Завантаживши одну з проблемних бібліотек (amdxc32.dll) в Hiew, пошуком по опкоду інструкції popcnt - F3 0F B8 виявляємо, що вона викликається аж тричі! Це означає, що вона не дуже там потрібна і можна вигадати їй заміну. Ця інструкція повертає першому аргументу кількість одиничних біт другого аргументу.

Для заміни popcnt візьмемо алгоритм Брайана Кернігана (Brian Kernigan/Kernighan).
На С++ він має такий вигляд:

Int kernigan(int value)( int count = 0; while(value != 0)( value &= (value-1); count++; ) return count; )
На асмі так:

Push ebx push ecx xor eax,eax mov ebx, value kernigan_start: cmp ebx, 0 jz kernigan_end add eax, 1 mov ecx, ebx sub ebx, 1 and ebx, ecx jmp kernigan_start kernigan_end
Шукаємо наприкінці секції коду незайняте місце, забите нулями. Там ми й писатимемо наш код:

Знаходимо в бібліотеці виклик команди popcnt:


І замінюємо його на перехід на наш код:


У раніше знайденому місці пишемо наш код та повертаємо управління туди, звідки взяли


Після чого повторюємо вищеописане з викликами команди popcnt, що залишилися, як у цій бібліотеці, так і в amdxc64.dll, підмінюємо ними оригінали і отримуємо знову працюючий DirectX12 без SSE4.2.

Найчастіше сучасний софт або ігри вимагають від процесора наявності інструкцій SSE 4.1 - 4.2. У разі відсутності таких, запустити потрібна програмане виходить, вилітає якась помилка або просто нічого не відбувається.

FarCry 5 лається на відсутність SSE 4.2

При цьому потужності процесора може бути цілком достатньо для більш-менш комфортної гри (наприклад, деякий процесори Xeonдля 775 сокету досі здатні видавати стерпний фпс у новинках), а вимога інструкцій буває необхідна навіть не для самої гри, а для роботи захисту від копіювання. Наприклад, захист Denuvo не давав власникам старих процесорів пограти в Assassin's Creed Origins, хоча сама гра наявності останніх інструкційне вимагала.

Наявності SSE 4.1 або 4.2 вимагають інші популярні ігри або їх компоненти: No Man Sky, Far Cry 5, Dishonored 2, Mafia 3 та інші.

Тим не менш, рішення є, хоч і не 100% гарантує успіх. Для запуску потрібної програми можна скористатися емулятором sde external, завантажити який можна за посиланням (вибирайте версію для windows) або внизу цієї статті.

Як користуватися емулятором SSE 4.1-4.2

  • Завантажуємо архів з sde external та розпаковуємо так, щоб sde.exe опинився в папці з потрібною грою чи програмою
  • Створюємо ярлик для sde.exe. Потім відкриваємо властивості ярлика та у параметрі об'єкт дописуємо - потрібний файл.exe. Наприклад: D:\Games\No Man"s Sky\Binaries\sde.exe" - NMS.exe. Після останньої лапки має стояти пробіл, інакше система не дасть зберегти ярлик.
  • Також у властивостях ярлика на вкладці «Сумісність» варто встановити опцію «запускати від імені адміністратора».
  • Зберігаємо ярлик і запускаємо його. З'являється чорне вікно, його можна закрити. Через деякий час потрібна програма повинна запуститися.



Розповісти друзям