Rpcs3 не видит видеокарту

Обновлено: 06.07.2024

Привет мой друг живущий в цифровую эпоху 21 века, еще в далеком 2010 году вспомнил один комментарий на Ютубе, что мол эмулировать консоль будет невозможным и тому подобное, однако на дворе уже 2020 и уже более менее стабильная версия RPCS3 давшая жизнь в 2012 году вышла в свет с неплохим запасом игр.

Что такое RPCS3?

RPCS3 Это свободное и открытое программное обеспечение, разрабатываемый эмулятор игровой приставки SONY PLAYSTATION 3 и отладчик для Sony PlayStation 3. Он был разработан на языке программирования C++ и использует OpenGL и Vulkan в качестве бэкенд-рендеров.

Эмулятор RPCS3 работает на операционных системах Windows, Linux и FreeBSD, (64 bit) позволяя воспроизводить и отлаживать игры и программное обеспечение PlayStation 3 на компьютере.

Cкачивание эмулятора PS3 и его установка

  • Запуск RPCS3 обязательно нужно выполнять от имени администратора! (правый клик мыши запуск от администратора) иначе не запустится.

Если сделали все по инструкции: То вы должны увидеть такое окно как на скриншоте вверху

Установка игр на эмулятор PS3


Пример компиляции игры


DISC GAME: установка

Для запуска надо:

  1. В консоли RPCS3Нажать на вкладку Open(открыть)
  2. Перейти в папку с распакованной игрой PS3 и выбрать еще одну папку, с именем PS3_GAME(см. скрин) Щёлкаем на Выбор этой папки и у нас пойдёт процесс компиляции/установки игры, а затем и её загрузки.

HDD GAME: Установка игры с жесткого диска игровой консоли PS3 это файла с расширением: pkg.

Установка игры через: PKG файл:

PKG это сжатый файл инсталляции программы для установки программного обеспечения/игр Sony Playstation3

  • Скорость установки/компиляции игры на эмуляторе RPCS3 : Полностью зависит от мощности вашего компьютера,чтобы адекватно работать с эмулятором PS3 ваш пк никак не должен технически уступать настоящей игровой консоли (Должен быть лучше)

Рекомендую: Отключить все ненужные приложения для системы в диспетчере задач, чтобы разгрузить систему для эмулятора

Если не получилось: Напишите комментарий внизу

Начало работы с эмулятором на вашем ПК

Рекомендуемые системные требования


CPU: Intel Quad-core или выше


GPU: Vulkan совместимая графическая карта AMD или NVIDIA


RAM: 8 GB или больше


OC: Windows 7/8/10 64-bit / Linux 64-bit / BSD 64-bit


Файл обновления PS3

Минимальные системные требования


CPU: Любой x64 совместимый процессор.


GPU: Карта с поддержкой OpenGL 4.3 или выше.


RAM: 2 GB или больше


OC: Windows 7/8/10 64-bit / Linux 64-bit / BSD 64-bit


Файл обновления PS3

Дополнительное ПО для пользователей Windows


Microsoft Visual C++ 2015 Redistributable Update 3


DirectX End-User Runtime


Для пользователей Windows

Извлеките файлы и папки из архива в удобное место.

Для запуска используйте файл rpcs3.exe

Поместите ранее скачанный файл обновления PS3 (filename.PUP) в папку с эмулятором.

Запустите эмулятор и перейдите в File > Install Firmware после чего выберите файл обновления PS3.

Дождитесь окончания установки обновления и перезапустите эмулятор.

Извлеките файлы и папки из архива (кроме dev_flash, dev_hdd0, dev_hdd1, dev_usb000) с заменой файлов.

Запустите эмулятор и перейдите в File > Install Firmware после чего выберите файл обновления PS3.

Дождитесь окончания установки обновления и перезапустите эмулятор.


Для пользователей Linux

Поместите файл rpcs3-*_linux64.AppImage в желаемую директорию.

Откройте терминал и сделайте файл исполняемым с помощью команды chmod a+x ./rpcs3-*_linux64.AppImage где * - название файла.

Поместите файл обновления PS3 (filename.PUP) в папку с эмулятором.

Запустите эмулятор и перейдите в File > Install Firmware после чего выберите файл обновления PS3.

Дождитесь окончания установки обновления и перезапустите эмулятор.

Замените файл rpcs3-*_linux64.AppImage новым, и сделайте его исполняемым.

Запустите эмулятор и перейдите в File > Install Firmware после чего выберите файл обновления PS3.

Дождитесь окончания установки обновления и перезапустите эмулятор.

.pkg файлы устанавливаются с помощью встроенного установщика, его можно найти в File > Install .pkg

.pkg файлы устанавливаются в \dev_hdd0\game\

Копию данных Blu-Ray диска необходимо разместить в \dev_hdd0\disc\

Blu-Ray копия игры может быть запущена через File > Boot Game

Копии PSN игры необходимо разместить в \dev_hdd0\game\

.rap файлы должны находится в \dev_hdd0\home\00000001\exdata\

Примечание: Если Вы используете Linux, папка RPCS3 находится в


Для пользователей Windows

Файлы сохранений расположены в \dev_hdd0\home\00000001\savedata\


Для пользователей Linux

Файлы сохранений расположены в

About Us

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

RPCS3 – интересный проект, который эмулирует консоль PS3. Он активно развивается: недавно была новость о том, что он научился запускать все игры из своего каталога. Это хороший повод для проверки – посмотрим, какие ошибки остались после исправлений.

0886_rpcs3_ru/image1.jpg

Введение

Проект довольно увесистый. Он насчитывает около 300 тысяч строк кода на C++ и к тому же тянет за собой большое количество внешних зависимостей, в числе которых есть:

Для GUI части также понадобится Qt, однако он берётся из системы. Полный список зависимостей можно посмотреть на скриншоте:

0886_rpcs3_ru/image2.jpg

Что примечательно, используемый стандарт языка C++ – свежий C++20. PVS-Studio хорошо справился с проверкой такого современного кода, ведь мы активно работаем над поддержкой нововведений. Да, есть некоторые недоработки, но мы их постепенно исправим. В целом проверка проекта послужила хорошим тестом поддержки новых языковых конструкций.

Проект использует сборочную систему CMake. К сожалению, во время сборки у меня возникли проблемы – GCC 11.2 отказывался компилировать какую-то constexpr-конструкцию, однако Clang 12 справился со сборкой отлично. Сборку я производил под devel-версией Ubuntu, так что, возможно, это проблема дистрибутива.

Полная процедура сборки и проверки под Linux в режиме межмодульного анализа выглядит так:

Что же, проект проверен – время перейти к ошибкам!

Не пиши в std, брат

V1061 Extending the 'std' namespace may result in undefined behavior. shared_ptr.hpp 1131

Стандарт C++ явно запрещает определение пользовательских шаблонов функций в пространстве имён std, а C++20 также запрещает определение специализаций шаблонов функций. Определение пользовательской функции swap – частый случай такой ошибки. В этой ситуации следует поступать таким образом:

  • определить функцию swap в том же пространстве имён, где определён класс (stx);
  • в блоке, где понадобится вызов swap, нужно написать директиву using std::swap;
  • вызов swap должен быть без указания пространства имён std, т.е. неквалифицированным: swap(obj1, obj2);

При таком подходе работает механизм Argument-Dependent Lookup (ADL), в результате чего находится функция swap, которую мы определили рядом с классом. А пространство имён std не изменено.

Удалённый memset

V597 The compiler could delete the 'memset' function call, which is used to flush 'cty' object. The memset_s() function should be used to erase the private data. aes.cpp 596

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

Также были найдены ещё случаи такой ошибки:

    The compiler could delete the 'memset' function call, which is used to flush 'tmpbuf' buffer. The memset_s() function should be used to erase the private data. sha1.cpp 371 The compiler could delete the 'memset' function call, which is used to flush 'ctx' object. The memset_s() function should be used to erase the private data. sha1.cpp 396

Избыточная проверка

V547 Expression 'rawcode == CELL_KEYC_KPAD_NUMLOCK' is always false. cellKb.cpp 126

Здесь ошибка кроется в первом условии: оно перекрывает условие ниже, которое проверяет значение переменной rawcode на равенство константе CELL_KEYC_KPAD_NUMLOCK. Значение CELL_KEYC_KPAD_NUMLOCK соответствует числу 0x53 – это число попадает под первое условие, которое в результате выполнения выходит из функции, так что нижний if никогда не выполнится.

Ошибка может быть в двух местах – либо в первом условии не учтено значение константы, либо сама константа определена неверно.

Выход за границу массива

V557 Array underrun is possible. The value of 'month + — 1' index could reach -1. cellRtc.cpp 1470

В этом случае в операторе return обращение к массиву DAYS_IN_MONTH может произойти по индексу -1, т.к. значение аргумента month может быть равно 0.

Скорее всего, ошибка находится в первом условии – судя по коду, отсчет месяцев ведётся с единицы, а условие проверяет на то, что month меньше 0, когда надо month < 1.

Эта ошибка напомнила мне интересный случай из проекта protobuf: 31 февраля.

Ошибка копипасты

V519 The 'evnt->color.white_x' variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 51, 52. sys_uart.cpp 52

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

Повторяющаяся проверка

V581 The conditional expressions of the 'if' statements situated alongside each other are identical. Check lines: 4225, 4226. PPUTranslator.cpp 4226

Похоже на ещё одну ошибку копипасты – видимо, скопировали условие и забыли его поменять, однако then-часть теперь другая.

Что интересно, это не единственный случай такой ошибки. В коде было ещё одно срабатывание:

    The conditional expressions of the 'if' statements situated alongside each other are identical. Check lines: 758, 759. RSXThread.cpp 759

Ошибка в цикле

V560 A part of conditional expression is always true: i != 1. PPUTranslator.cpp 4252

Проверка переменной i на равенство 1 и 2 никогда не выполнится – цикл работает с числами от 16 до 20. Возможно, этот код переписывался и индексы забыли поменять на корректные.

Разыменование указателя перед проверкой

V595 The 'cached_dest' pointer was utilized before it was verified against nullptr. Check lines: 3059, 3064. texture_cache.h 3059

Ещё один частый паттерн – сначала используется указатель, а затем проверяется. Опять же, возможно, что ошибка появилась в процессе изменений этого фрагмента кода.

Проверка на null результата new

V668 There is no sense in testing the 'movie' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error. movie_item.h 56

Проверка на nullptr здесь бессмысленна: при вызове new в случае ошибки будет брошено исключение std::bad_alloc. Если бросать исключение не требуется, то следует использовать конструкцию std::nothrow – тогда как раз вернётся нулевой указатель.

Ещё места с подобной ошибкой:

    There is no sense in testing the 'm_render_creator' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error. emu_settings.cpp 75 There is no sense in testing the 'trophy_slider_label' pointer against null, as the memory was allocated using the 'new' operator. The exception will be generated in the case of memory allocation error. trophy_manager_dialog.cpp 216

Утечка памяти

V773 The function was exited without releasing the 'buffer' pointer. A memory leak is possible. rsx_debugger.cpp 380

В начале функции видим выделение памяти через malloc, и если вернулся nullptr, то выходим. Пока всё хорошо. Но дальше идут проверки параметров width и height – они происходят уже после выделения памяти, и в случае успеха из функции также возвращается nullptr. Да, при равенстве этих переменных нулю malloc будет выделять 0 байт, однако стандарт говорит, что в этом случае может вернуться как nullptr, так и валидный указатель, который нельзя разыменовывать. Но освободить его все равно нужно, к тому же, free способна принимать и нулевой указатель. Так что исправление может выглядеть таким образом:

Либо проверки на 0 можно вообще убрать – цикл в этом случае не выполнится:

Некорректная проверка размера

V557 Array overrun is possible. The 'pad' index is pointing beyond array bound. pad_thread.cpp 191

При проверке входных данных использован оператор > вместо >=, в результате чего значение pad может быть равно размеру контейнера m_pads, поэтому при дальнейшем обращении к контейнеру есть вероятность выхода за границу.

Сдвиг не в ту сторону

V547 Expression 'current_version < threshold_version' is always false. Unsigned type value is never < 0. device.cpp 91

Константа threshold_version всегда будет равна 0, т.к. вместо сдвига влево используется сдвиг вправо. Сдвиг вправо эквивалентен делению на степень двойки – в нашем случае на 2^22 и 2^14 соответственно. Очевидно, что числа из выражений меньше этих степеней, поэтому результат будет равен 0.

Похоже, что это место было скопировано из кода декодирования значения версии, но при копировании поменять операторы просто забыли.

Заключение

Если хотите поделиться этой статьей с англоязычной аудиторией, то прошу использовать ссылку на перевод: Sergey Larin. PVS-Studio to check the RPCS3 emulator.

В список достоинств технологии масштабирования AMD FidelityFX Super Resolution входят открытость и простота интеграции, что позволяет охватить большее количество проектов. Как оказалось, интегрировать FSR можно не только в игры, но и в эмуляторы игровых приставок, например, FSR появился в RPCS3 — эмуляторе игровой консоли PlayStation 3. Это первый эмулятор, получивший поддержку технологии.

реклама


Реализация пока еще страдает от некоторых ограничений и недоработок, но команда разработчиков утверждает, что FSR в RPCS3 работает достаточно хорошо практически для всех игр. FSR доступна только для графического API Vulkan и пока разработчики не видят необходимости в работе над совместимостью с OpenGL.

Дешевая 3070 Gigabyte Gaming - успей пока не началось

Среди проблем мерцание и артефакты при масштабировании с низкого разрешения. Судя по всему, FSR в RPCS3 пока использует только алгоритмы, оптимизированные под целочисленные вычиления FP32, что не раскрывает потенциал видеокарт последних поколений с высокой производительностью в вычислениях половинной точности FP16. Также FSR не работает с 3D стереоскопическим режимом, уточняется в обсуждении на GitHub.

Комментарии

Популярные статьи

Сейчас обсуждают



Для регистрации перейдите по ссылке, указанной ниже. Если у вас уже есть аккаунт в конференции, то для доступа ко всем функциям сайта вам достаточно войти в конференции под своим аккаунтом.

Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!

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

Читайте также: