Отчет по развитию PCSX2 за 3 квартал 2016 года



Поприветствуйте невероятный отчет о развитии PCSX2 за 3 квартал 2016 года! Большинство изменений за этот квартал носят более технический, чем обычно, характер, поэтому заранее извиняемся за некоторые из объяснений. Итак, начинаем!

[Портабельность] PCSX2: поддержка FreeBSD

Большинство платформозависимого кода было преобразовано в портабельный вид, и в результате вы можете использовать PCSX2 на FreeBSD!


[Улучшения] Linux: поддержка Vsync в драйверах с открытым исходным кодом

OpenGL позволяет управлять Vsync изнутри приложения. Как ни странно, это расширение не является стандартным для всех платформ. Большинство драйверов (т.е. проприетарных) используют расширение GLX_SWAP_INTERVAL_EXT. Однако драйвера с открытым исходным кодом для Linux (они же Mesa) используют расширение GLX_SWAP_INTERVAL_MESA. PCSX2 теперь поддерживает и его, а значит теперь вы можете управлять настройками Vsync изнутри PCSX2 при использовании Mesa.


[Улучшения] Linux: оптимизация количества активных константных буферов в шейдерах

Основное преимущество драйверов GPU с открытым исходным кодом состоит в том, что вы можете обратиться к исходному коду. Благодаря этому Gregory воспользовался возможностью профилирования Mesa. Он заметил, что драйвер совершает большое количество проверок константных буферов. Ранее в GLSL коде GSdx объявлялись все буферы констант, даже если они не использовались в дальнейшем. Это очень плохо сказывалось на производительности, т.к. драйвер всегда их проверял. Код был переписан и теперь определяет и объявляет только полезные буферы констант, благодаря чему был получен прирост 1-2 кадров в секунду на драйверах Mesa.


[Улучшения] Windows: распространяемые пакеты DirectX больше не нужны на Windows 8.1 и 10

В течение долгого времени для работы PCSX2 требовались установленные распространяемые пакеты  DirectX. Однако, при переходе на более новую версию Windows SDK, которая не совместима с XP, а также возможностью загрузки библиотек, которые уже присутствуют в этих операционных системах, потребность в DirectX Redistributable на Windows 8.1 и Windows 10 отпала. (Оговорка: пользователи SCP Xinput Wrapper, которые хотят использовать чувствительность к силе нажатия на кнопки геймпада, по-прежнему должны будут установить DirectX Redistributable, так как обертка для XInput совместима с XInput 1.3, но не с XInput 1.4)


[Улучшения] LilyPad: добавлена поддержка dance pad, а также перерисовано диалоговое окно плагина

В предыдущих версиях плагина LilyPad было невозможно выполнить определенные танцевальные движения в таких сериях игр, как Dance Dance Revolution и Dancing Stage, где требовалось одновременное нажатие кнопок вверх и вниз или влево и вправо. Теперь все игры, требующие такие манипуляции, полностью играбельны. Кроме того, расположение кнопок контроллера на странице настроек было изменено таким образом, чтобы напоминать собой современный вид аналогового контроллера / джойстика DualShock.



[Исправления ошибок] GSdx: устранение зависания приложения при попытке использования неподдерживаемых инструкций на устаревших процессорах

PCSX2 оснащен 5 видами плагина GSdx, которые используют различные наборы инструкций (SSE2, SSSE3, SSE4, AVX, AVX2) с целью получения наилучшей производительности на CPU, поддерживающих новые расширения, но также оставляя плагин доступным и на более древних процессорах. Однако на старых CPU PCSX2 намертво зависал во время загрузки AVX или AVX2 версии плагина GSdx. Объясняется это тем, что в глобальной переменной инициализации присутствовали векторные инструкции. Эта проблема была решена переносом инициализации всех глобальных переменных, содержащих векторные инструкции таким образом, что они будут запускаться только теми CPU, которые из действительно поддерживают.


[Исправления ошибок] OnePad: общие улучшения точности

В последнее время OnePad получил большие улучшения в графическом интерфейсе. Однако нами было получено несколько отчетов от пользователей об ошибках при игре вдвоем, проблем с загрузкой быстрых сохранений и некоторых вопросов, связанных с положением осей в нулевом положении, которые приводили к нежелательным результатам в играх серии .hack. Все эти вопросы были решены при изучении механизма работы событий нажатия кнопок в Lilypad и имитации чего то похожего в OnePad.


[Исправления ошибок] PCSX2: улучшение управления патчами

Недавно мы узнали, что PCSX2 имеет некоторые проблемы с системой патчей, конкретно – с загрузкой и выгрузкой: например, патч мог неправильно выгрузиться, если вы запустили новую игру, не закрывая при этом PCSX2 при завершении предыдущей. Если в текущей игре были загружены любые из патчей (включая исправления для игр, пользовательские патчи и патчи для широкоформатного отображения) и вы запустили затем другую игру, патчи не выгружались, что могло привести к очень неприятным ситуациям. avih совершил несколько изменений, и теперь это недоразумение, кажется, полностью устранено. Вы должны без проблем перезапускать разные игры, не закрывая при этом эмулятор каждый раз. Если вы заметите, что любые патчи или исправления для игр не работают должным образом, сообщите нам!


[Исправления ошибок] PCSX2: точное определение видеорежима

Ранее определение видеорежима в PCSX2 основывалось на значении цвета в регистре SMODE2 и сильно ограничивало нас режимами NTSC / PAL / Progressive. Дополнительные видеорежимы игнорировались и некоторые interlace режимы определялись как «прогрессивный». Сейчас определение видеорежима перемещено в функцию Syscall(), которая запускает инициализацию видеорежимов во время вызова функции SetGsCrt(). Это позволило точно определять более широкий диапазон видеорежимов, поддерживаемых PS2.

Видеорежимы (раньше)
  1. NTSC
  2. PAL
  3. Прогрессивный

Видеорежимы (сейчас)
  1. NTSC
  2. PAL
  3. VESA
  4. HDTV 480p
  5. HDTV 576p
  6. HDTV 720p
  7. HDTV 1080i
  8. HDTV 1080p

[Исправления ошибок] GSdx: улучшения теста прозрачности (alpha test)

Стандартный конвейер растеризации производит две части информации: color sample (информация о цвете) и depth sample (информация о «глубине»). Графический конвейер позволяет производить некоторые тесты и решает, что делать с сэмплом: избавиться от него или, напротив, пока поберечь. Например, если тест глубины определяет, что глубина текущей выборки ниже по сравнению с предыдущей, это означает, что объект находится сзади, и рисовать его не имеет смысла. Старые видеокарты и видеочип PlayStation 2 (GS) поддерживают тестирование, основанное на прозрачности цвета. Современные GPU это не поддерживают, но мы можем легко сэмулировать это в шейдерах. Вроде бы всё хорошо, но GS имеет особенность – вы можете отбросить ИЛИ цвет, ИЛИ глубину, а не сразу оба. Современные GPU избавляются сразу от обоих. gabest в свое время реализовал двухпроходной шейдер для решения данной задачи, и он прекрасно работал в большинстве игр, но, как всегда, нашлось несколько особо придирчивых игр. Gregory сумел придумать лучшее решение, которое работает и такими играми. Для полного понимания того, что же она сделал, с нетерпением ждем новой записи в блоге!



[Исправления ошибок] GSdx: улучшен расчет смещений

Некоторые игры PS2 используют смещение прямоугольника экрана на очень небольшую величину. Раньше для подобных игр GSdx использовал эти смещения при совмещении экранных областей. Это неплохо выглядит на ЭЛТ телевизорах, но сильно замыливает изображение на мониторах. Теперь эти небольшие смещения используются, только если кадровая память также имеет смещения, и вопрос закрыт.



[Исправления ошибок] GSdx: правильное масштабирование при использовании пользовательских разрешений

Раньше код кэша текстур был полон хаков из-за ограничений размера фреймбуфера при использовании пользовательских разрешений. Код, отвечающий за масштабирование изображения и управление буферами, был полностью переделан. Список текущих изменений:
  • Добавлено правильное округление значений, когда размер текстур не масштрабируется (исправляет вылеты / глюки в ICO и Dragonball Z: Budokai Tenkaichi 3)
  • Удален хак масштабирования, который ограничивал величину масштабирования текущим значением scissor.
  • При вычислении значений размерности прямоугольника экрана смещения в кадровой памяти игнорируются.
  • Улучшено масштабирование размеров фреймбуфера при использовании пользовательских разрешений.
  • Портирование «half-pixel offset hack» для использования в пользовательских разрешениях (устраняет вопросы замыленности в некоторых играх).

Dragon Ball Z: Budokai Tenkaichi 3



ICO


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

Недавно Gregory сообщил, что запустит анализ кода для улучшения текущего положения. Это не то, чего мы не делали раньше, но всё же стоило упомянуть. В настоящее время PCSX2 может быть собран 4 компиляторами: Visual Studio, ICC, GCC и Clang, и каждый компилятор выдает собственный набор предупреждений.

Как Linux разработчик, Gregory в основном работает на GCC. В данный момент в этом компиляторе осталось только 14 предупреждений, и в Visual Studio тоже всё хорошо. Clang выдает кучу предупреждений (570), но обратите внимание, что только 51 из них заслуживает внимания. ICC не говорит о чем то уникальном, чего не выдают другие компиляторы.

PCSX2 также был профилирован таким внешним инструментом, как Coverity. PCSX2 - это очень старый проект, содержащий устаревший код и не использующий большинства новых возможностей языка. Однако нет предела совершенству. После анализа и профилирования кода этими внешними инструментами мы обнаружили вопросы, решив которые сможем значительно повысить общую надежность программы.

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

Это все из наиболее заметных изменений за 3 квартал!
Ждите нового отчета о прогрессе. Ведь у нас есть для вас кое-что особенное...


Источник новости: ​официальный сайт эмулятора.​​​
+38

Комментарии 6

  1. А кто-нибудь уже сравнивал скорость эмулятора собранного клангом и gcc?
  2. Спасибо за перевод
  3. Спасибо за перевод, а как там Primal? Всё так же тормозит? hushed 
  4. bogusve от 24 сентября 2016 14:26
    Эх, жаль Silent Hill Shattered Memories нормально в Hardware не работает, а то моего i3 540 3Ghz для Software режима не хватает, даже с хаками 30-40 fps. Если у кого по этому поводу есть советы по настройки игры, буду очень признателен  blush 
    1. Allemon222 от 29 сентября 2016 20:28
      Нормально(стабильно) работает в емуляторе PPSSPP, даже баг с фонарем поправили, но есть один минус она без перевода.
    2. а если хотите наиболее полно погрузится в атмосферу этой части СХ, то рекомендую играть в версию для Вии, но только при наличии вимоута и нунчака (т.к. за счёт особенностей вимоута и достигается большее погружение)
Добавить комментарий

Оставить комментарий