Используем высокие разрешения на неподдерживающих их видеокартах

в 21:55, , рубрики: 3840×2160, 4k, linux, modeline, pixel clock, ultra hd, Видеокарты, Железо, Мониторы и ТВ, метки: , , , ,

Засматриваетесь на 4K UHD-мониторы, но ваш лаптоп не поддерживает высокие разрешения? Купили монитор и миритесь с частотой обновления в 30Гц? Повремените с апгрейдом.

TL;DR: 3840×2160@43 Гц, 3200×1800@60 Гц, 2560×1440@86 Гц на Intel HD 3000 Sandy Bridge; 3840×2160@52 Гц на Intel Iris 5100 Haswell.

Предыстория

Давным-давно, когда все мониторы были большими и кинескопными, компьютеры использовали фиксированные разрешения и тайминги для вывода изображения на экран. Тайминги были описаны в стандарте Display Monitor Timings (DMT), и не существовало универсального метода расчета таймингов для использования нестандартного разрешения. Мониторы отправляли компьютеру информацию о себе через специальный протокол Extended display identification data (EDID), который содержал DMT-таблицу с поддерживаемыми режимами. Шло время, мониторам стало не хватать разрешений из DMT. В 1999 году VESA представляет Generalized Timing Formula (GTF) — универсальный способ расчета таймингов для любого разрешения (с определенной точностью). Всего через 3 года, в 2002 году, его заменил стандарт Coordinated Video Timings (CVT), в котором описывается способ чуть более точного рассчитывания таймингов. Оба стандарта были созданы с учетом особенностей хода луча в электро-лучевой трубке, вводились специальные задержки для того, чтобы магнитное поле успело измениться. Жидкокристаллические мониторы, напротив, таких задержек не требуют, поэтому для них был разработан стандарт CVT Reduced Blanking (CVT-R или CVT-RB), который является копией CVT без задержек для CRT, что позволило значительно снизить требуемую пропускную способность интерфейса. В 2013 году вышло обновление CVT-R c индексом v2, но, к сожалению, открытого описания стандарта в интернете нет, а сама VESA продает его за $350.

История

Наконец-то настала эра высокой плотности пикселей и на ПК. На протяжении последних нескольких лет, нас встречал театр абсурда, когда на мобильные устройства ставят пятидюймовые матрицы с разрешением 1920×1080, полки магазинов уставлены большими 4K-телевизорами (хоть на них и смотрят с расстояния 2-4 метров), а мониторы как были, так и оставались с пикселями с кулак. Подавляющее большинство говорит, что Full HD выглядит «достаточно хорошо» и на 27" мониторе, забывая, что предыдущее «достаточно хорошо» чрезвычайно быстро ушло после выхода iPad с Retina. Вероятнее всего, такая стагнация произошла из-за плохой поддержки высокой плотности пикселей в Windows, которая более-менее устаканилась только к выходу Windows 8.1.

Как бы то ни было, в 2015 году у нас есть выбор из 246 моделей 4K UHD-телевизоров и аж 36 моделей мониторов, одну из которых — Dell P2415Q — мне посчастливилось купить за сравнительно небольшие деньги (€377). Это 23.8-дюймовая модель с разрешением 3840×2160 и плотностью пикселей в 185 PPI, с возможностью подключения по DisplayPort 1.2 и HDMI 1.4. Первые 4K-мониторы определялись в системе как два отдельных монитора и комбинировались в один большой средствами драйвера видеокарты. Это было сделано из-за низкой производительности скейлеров, которые в то время не могли работать в полном разрешении, поэтому приходилось ставить два скейлера, каждый из которых выводил 1920×2160. Современные мониторы избавились от такого костыля, но, в то же время, стали требовать более производительные видеоадаптеры. К сожалению, мой уже сравнительно старый лаптоп Lenovo ThinkPad X220 не поддерживает, судя по информации на сайте Intel и от производителя, разрешения выше 2560×1440. Можно ли с этим что-то сделать? Как оказалось, можно.

Стандартные и нестандартные стандарты

Современным мониторам и видеокартам нет никакого дела до фиксированных разрешений и таймингов времен DMT, они могут работать в широком диапазоне разрешений и частот обновления. Давайте посмотрим в техпаспорт моего монитора:

Поддерживаемая горизонтальная частота развертки 31-140 кГц
Поддерживаемая вертикальная частота развертки 29-76 Гц

И максимальный пресет:

Режим Частота горизонтальной развертки Частота вертикальной развертки Частота пикселизации Полярность синхронизации
VESA, 3840×2160 133.3 кГц 60.0 Гц 533.25 МГц H+/V-

Итак, почему лаптоп не может использовать максимальное разрешение?
Дело в частоте пикселизации. Многие видеокарты, а тем более интегрированное в процессор видео, имеют железные ограничения частоты пикселизации, а из-за того, что в EDID монитора нет максимального разрешения с меньшей частотой вертикальной развертки вследствие ограниченности его размера, компьютер не может использовать максимальное разрешение.
К сожалению, производители редко публикуют максимальную частоту пикселизации видеочипов, ограничиваясь максимальным поддерживаемым разрешением, но для интересующих меня карт я нашел необходимую информацию:
Intel HD 3000 (Sandy Bridge): 380 кГц
Haswell ULT (-U): 450 кГц
Haswell ULX (-Y): 337 кГц

Что делать и что сделать?

Ответ очевиден — нужно уменьшить частоту пикселизации! Ее уменьшение приведет и к уменьшению частоты обновления монитора. Как нам это сделать? Нам нужно сгенерировать так называемый modeline — информацию о таймингах для видеокарты и монитора. В сети можно найти множество генераторов modeline, но большинство из них безнадежно устарели и ничего не знают о стандарте CVT-R, который мы и будем использовать. Я рекомендую вам воспользоваться umc под Linux, PowerStrip под Windows и SwitchResX под Mac OS. К слову, SwitchResX — единственная программа, которая может рассчитывать modeline по стандарту CVT-R2, но мой монитор его не поддерживает.

Modeline содержит следующую структуру:

Modeline "modeline_name" dot_clock hdisp hsyncstart hsyncend htotal vdisp vsyncstart vsyncend vtotal flags

Посмотрите на таблицу выше: минимальная вертикальная частота обновления моего монитора может равняться 29 Гц. Давайте сгенерируем modeline для разрешения 3840×2160 с частотой обновления в 30 Гц:

% umc 3840 2160 30 --rbt              

    # 3840x2160x29.98 @ 65.688kHz
    Modeline "3840x2160x29.98"  262.750000  3840 3888 3920 4000  2160 2163 2167 2191  +HSync -VSync

Как видим, частота пикселизации с данным режимом будет установлена в 262.75 МГц, что далеко от ограничений моего видеоадаптера.
Давайте попробуем установить и активировать наш режим:

% xrandr --newmode "3840x2160x29.98"  262.750000  3840 3888 3920 4000  2160 2163 2167 2191  +HSync -VSync
% xrandr --addmode DP1 "3840x2160x29.98"
% xrandr --output DP1 --mode "3840x2160x29.98"

Если все прошло удачно, вы увидите картинку в «неподдерживаемом» вашей картой разрешении на мониторе. Ура!

У нас все еще есть большой запас по частоте пикселизации, да и вряд ли кому-то будет комфортно использовать монитор с частотой обновления в 30 Гц, поэтому мы будем увеличивать ее до тех пор, пока частота пикселизации не приблизиться к значению в 380 МГц — пределу моего видеоадаптера. Путем нехитрых манипуляций удалось установить, что при такой частоте мы получаем вертикальную развертку в 43.1 Гц.

    # 3840x2160x43.10 @ 95.000kHz
    Modeline "3840x2160x43.10"  380.000000  3840 3888 3920 4000  2160 2163 2167 2204  +HSync -VSync

Не блеск, но жить можно!

Как можно заметить, частота горизонтальной развертки — 95 кГц — вполне в диапазоне поддерживаемых монитором. Как в случае с вертикальной разверткой, так и в случае с разрешением, монитору нет дела до конкретных режимов, поэтому мы можем использовать 3200×1800 при 60 Гц — еще не такое низкое разрешение, как 2560×1440, и с привычной частотой обновления.

% umc 3200 1800 60 --rbt   

    # 3200x1800x59.98 @ 111.086kHz
    Modeline "3200x1800x59.98"  373.250000  3200 3248 3280 3360  1800 1803 1807 1852  +HSync -VSync

Чтобы наши изменения сразу применялись после перезагрузки, можно пойти двумя различными путями:

  • Отредактировать EDID монитора и указывать его драйверу
  • Добавить modeline в настройки Xorg

Второй способ удобнее и гибче, поэтому я использую его. Если вы решили пойти первым способом, то Phoenix EDID Designer вам в руки.
Для второго способа достаточно создать файл с Xorg-секцией «Monitor» и поместить его в /etc/X11/xorg.conf.d/:

% cat /etc/X11/xorg.conf.d/30-dp1.conf
Section "Monitor"
    Identifier "DP1"
    ModelName "DELL P2415Q"
    Modeline "3200x1800"  373.250000  3200 3248 3280 3360  1800 1803 1807 1852  +HSync -VSync
    Modeline "3840x2160"  370.000000  3840 3888 3920 4000  2160 2163 2167 2203  +HSync -VSync
    Option "PreferredMode" "3200x1800"
EndSection

Где Identifier — название вашего видеовыхода согласно xrandr. Опцией «PreferredMode» можно задать режим, который будет выбран по умолчанию.

У меня не получается!

Убедитесь, что вы подключаете монитор через DisplayPort 1.2. HDMI 1.4 не позволяет использовать частоту пикселизации выше 340 МГц, в то время как для DisplayPort (HBR2) верхнее ограничение равно 540 МГц. Также удостоверьтесь, что ваш монитор поддерживает частоту обновления выше 30 Гц на максимальном разрешении, т.к. ранние модели этим грешили.

Заключение

Не стоит слепо верить технической документации на монитор. В ходе исследований оказалось, что ограничение по вертикальной частоте аж 86 Гц, вместо 76 Гц по заявлению производителя. Таким образом, я могу наслаждаться плавной картинкой, хоть и в не в самом высоком разрешении

image

Автор: ValdikSS

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js