Возвращаем драйверам AMD поддержку DirectX12 старыми процессорами. Возвращаем драйверам AMD поддержку DirectX12 старыми процессорами Процессор не поддерживает sse 4.1 4.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. После последней кавычки должен стоять пробел, иначе система не даст сохранить ярлык.
  • Также в свойствах ярлыка на вкладке «Совместимость» стоит поставить опцию «запускать от имени администратора».
  • Сохраняем ярлык и запускаем его. Появляется черное окно, его можно закрыть. Через некоторое время нужное приложение должно запуститься.

Скачать видео и вырезать мп3 - у нас это просто!

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

Обновившись в конце апреля на новые драйвера AMD 16.4.2, я обнаружил, что все DirectX12-приложения перестали работать. Ничуть не удивившись, я решил подождать устранения проблемы и отложил DirectX12 в сторону. Но месяцы шли, а с новыми драйверами ситуация не менялась.

Гугл показал, что эта проблема носит массовый характер (раз , два , три , четыре), а 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: pop ecx pop ebx retn
Ищем в конце секции кода незанятое место, забитое нулями. Там мы и будем писать наш код:

Находим в библиотеке вызов команды popcnt:


И заменяем его на переход на наш код:


В ранее найденном месте пишем наш код и возвращаем управление туда, откуда взяли


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