Когда я запускаю Portal на своем MBP без подключенного внешнего экрана, я получаю стабильные 60 кадров в секунду. Когда я подключаюсь и зеркалирую другой экран (с таким же разрешением и настройками игры), частота кадров падает до 30, иногда до 20, что очень заметно влияет на игровой процесс.
Это то же самое, независимо от того, какой порт видеовыхода я использую. Энергосбережение графики отключено.
Я пытался найти подтверждение тому, что зеркальное отображение экрана отрицательно влияет на производительность, но наткнулся только на утверждения, что это не так и не должно. Но я проверял это много раз, и это очень воспроизводимо.
MBP 15 дюймов, середина 2014 г.
Обновление по вертикальной синхронизации
Как правильно предположил Фонг, это связано с vsync. Без него получаю какие-то смешные 150+ фпс и хорошую отзывчивость, хотя отключать неохота из-за разрывов.
Однако до сих пор остается загадкой, как зеркалирование экрана взаимодействует с vsync и влияет на него.
Экран MBP 60 Гц, на внешний экран также поступает сигнал 60 Гц. Изменение разрешения игры не влияет на видеосигнал (всегда 1080p), но соответствие выходного разрешения и разрешения игры (например, 720p@60) по-прежнему дает аналогичные симптомы.
Мне кажется, у вас включена вертикальная синхронизация . Эта функция ограничивает частоту кадров до доли частоты обновления экрана (1, ½, ⅓…), чтобы предотвратить визуальные артефакты (в частности, «разрывы») и неуправляемую частоту кадров (которая может повредить графический процессор). Довольно хорошим показателем этого является частота кадров, которая прыгает с 30 до 60 кадров в секунду и обратно, без каких-либо промежуточных значений.
Зеркальное отображение влияет на производительность ровно настолько, чтобы частота кадров упала ниже 60 кадров в секунду. Даже если в противном случае вы получите 59 кадров в секунду, вертикальная синхронизация снизит частоту кадров до 30 кадров в секунду.
Это также может привести к задержке ввода. Поскольку ваш экран/курсор теперь перерисовывается вдвое (или втрое) реже, задержка между перемещением мыши и просмотром результата на экране будет вдвое или втрое больше.
Зайдите в настройки видео портала и отключите вертикальную синхронизацию . Я не играю в Portal, но почти в каждой игре есть такая опция. Он может называться V-Sync .
Возможно, вам придется переключиться с оконного режима на полноэкранный . Поскольку macOS принудительно использует V-Sync для основного рабочего стола, V-Sync может по-прежнему применяться при воспроизведении в окне.
Чтобы свести к минимуму неблагоприятные последствия отключения V-Sync , многие игры предлагают возможность ограничения частоты кадров. Если эта опция доступна, попробуйте установить максимум, например. 90 FPS или даже 60 FPS . Это часто предлагает лучшее из обоих миров.
Посмотрите, решит ли ваша проблема сочетание этих решений.
Если вы предпочитаете оставить V-Sync включенной, во многих играх есть возможность включить тройную буферизацию . Это поможет сгладить частоту кадров (таким образом сводя к минимуму внезапные падения частоты кадров). Его включение также может привести к увеличению задержки ввода, хотя обычно не такой серьезной, как при падении 30 кадров в секунду.
Последнее предложение — попытаться расширить рабочий стол на внешний дисплей как отдельное пространство (я полагаю, что это возможно с Yosemite и выше). Требуется ли для вашего варианта использования зеркалирование ? Я не очень знаком с этим на Mac, но я не понимаю, почему это невозможно.
Объяснение с высоты птичьего полета того, что вызывает падение частоты кадров при зеркалировании:
при зеркалировании ваш Mac должен отображать один и тот же кадр на внутреннем и внешнем дисплеях. В дополнение к тому, что ваши дисплеи будут ждать друг друга, это требует дополнительной «работы», включая дополнительное вычислительное время и управление буфером (чтобы убедиться, что они отображают одно и то же в одно и то же время), а также задержку туда и обратно. по внешнему кабелю или, что еще хуже, по Wi-Fi/Bluetooth.
Пока это происходит, ваш GPU рендерит следующий кадр в своем внутреннем буфере, но не отправляет его на ваш дисплей, пока не получит OK (из-за V-Sync ). В течение этого периода ожидания ваш графический процессор фактически приостанавливается, не отображая дополнительные кадры (если не доступна тройная или N-буферизация), что еще больше снижает частоту кадров. Затем, в зависимости от того, где в цикле обновления находится самый медленный дисплей, отображение следующего кадра может быть снова отложено до следующей доли.
Вы должны иметь в виду, что для рендеринга вашей игры со скоростью 60 FPS у вашей графической подсистемы есть только 33 мс для выполнения всей этой дополнительной работы (за вычетом времени, необходимого графическому процессору для рендеринга этих кадров в первую очередь). Обратный путь к вашему внешнему дисплею и обратно может занять пару миллисекунд. Работа по синхронизации сама по себе является дорогостоящей (с точки зрения времени). Не исключено, что синхронизация двух дисплеев занимает более 20 или 30 миллисекунд.
Теперь, в предыдущем абзаце я предполагал, что ваш графический процессор был готов к следующему кадру к тому времени, когда ваши дисплеи закончили отрисовку текущего. Представьте, что этого не было. Что ж, теперь дисплеи голодают, и в конечном итоге они ждут на GPU. Вы, вероятно, в конечном итоге перейдете к следующей части самой низкой частоты обновления. Что может означать, что падение V-Sync на 1-2 кадра в секунду при выключенном режиме превращается в 30 кадров в секунду при включенном .
Итак, вы пытаетесь синхронизировать два дисплея (через Mirroring ), а затем пытаетесь синхронизировать ТЕ с вашим GPU (через V-Sync ). Результатом является потенциально много-много-много ожиданий.
Нередко наблюдается некоторое снижение производительности при подключении подсистем с разными уровнями производительности. Вот почему были созданы буферы и асинхронные операции.
При синхронизации задержка в любом месте вызывает задержку везде.
Чтобы максимизировать производительность, лучше всего позволить каждому выполнять свою работу в свое время.
Сокращение некоторой информации о том, что сработало в конце:
То же самое и с Portal 2. В отличие от первой игры, она также поддерживает тройную буферизацию.
Использование таких приложений, как DisableMonitor, только усложняет ситуацию. Каким-то образом вы получаете систему координат отключенного монитора (и фон рабочего стола), наложенную на включенную, в результате чего курсоры появляются там, где их нет. Похоже, что разработчик принял меры предосторожности, судя по этой строке: CGWindowListCopyWindowInfo(kCGWindowListExcludeDesktopElements, kCGNullWindowID)
, но это, похоже, не работает — по крайней мере, не в macOS sierra.
Андреас
пользователь11633
Андреас
Андреас
пользователь11633
Андреас