Задать вопрос
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13, немного резюмирую, чтобы понять, правильно ли я все понял (пока не рассматриваем улучшайзеры).

    1) Передача кадра из переднего буфера видеокарты на монитор всегда синхронизирована с выводом изображения на матрицу. То есть, при 60 Гц, и кадр выводится на матрицу 16 мс, и само изображение от видеокарты также передается 16 мс.
    2) Если в момент передачи буфер обновился, то получаются разрывы изображения.
    3) При использовании вертикальной синхронизации пока идет передача блокируется обновление переднего буфера.

    Я ничего не упустил? Если это так, то принцип передачи кадра почти ничем не отличается от ЭЛТ-мониторов: тоже все ориентируются на тайминги.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13,
    Между ними два метра витой пары.

    Это так, но у современных интерфейсов высокая скорость, и передать кадр, обычно намного быстрее, чем отобразить его на экране.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13,
    нахуа такое усложнение,

    Наоборот, же, упрощение. Нам не нужно синхронизировать 2 процесса - передача и вывод. То есть, нужно, но не построчно, а только начало кадра.

    Но это все теоретически. Как на практике реализовано, наверное, есть в спецификациях, но, к сожалению, я даже не знаю что и где читать.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13,
    Тогда смена кадра посреди показа означает сначала ожидание нового пакета

    Ожидания не будет, так как буфер считывается построчно. Просто после считывания строки 155 кадра №1 будет считана и выведена строка 156 кадра №2. То есть, монитор не знает что сейчас есть у него в буфере, просто читает его построчно и выводит.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13,
    что единственный способ измерить задержку — снимать скоростной камерой запараллеленные кинескоп и ЖК

    Есть тесты, в них как раз изменяют задержку, но там не нашел инфы что происходит "внутри монитора",
    https://blurbusters.com/gsync/gsync101-input-lag-t...
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13,
    Мы исходим из трёх посылок.

    Исходя из этих предпосылок есть несколько теоретических вариантов реализации, и я как раз хочу понять как это реализовано. Что с буфером, что без буфера есть возможность достичь минимальных задержек.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13,
    увеличивает задержку между переключением буферов и появлением изображения на мониторе

    Не вижу причин на появление задержки, если у монитора есть буфер и мы передадим данные в него быстрее.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    rPman, кажется, вся эта многоэтапная постобработка - это фишки телевизоров. Здесь я согласен, задержка может быть очень большой. Но меня больше интересуют мониторы, там такого, в принципе, быть не должно.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13, "Разрыв означает, что в видеопотоке появились новые данные. "
    Это если данные аналоговые. Но у нас цифра, и отдельные каналы взаимодействия видеокарты и монитора. Не вижу проблем сигнализировать другими способами.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    rPman, правильно ли я понимаю, что в этом случае используется полнокадровый буфер на стороне монитора и будет задержка в 1 цикл?

    1) Цикл №1
    - видеокарта передает кадр №1
    - монитор принимает его и сохраняет в буфер
    2) Цикл №2
    - видеокарта передает кадр №2
    - монитор выводит кадр №1
    - на освободившееся место в буфере начинает записываться кадр №2

    Я правильно уловил суть процесса?
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    rPman,
    а всякие HDR и вовсе требуют содержимое всего буфера кадра

    Но тогда они требуют также и вертикальной синхронизации, правильно? Да и задержка вывода в этом случае увеличивается, так?
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    rPman, так вот вопрос в том числе про отправку кадра. Правильно ли я понимаю, что если видеокарта отправила одну строку кадра, то эта строка нигде не задержится и сразу отрисуется на матрице? То есть, передача кадра всегда синхронизирована с выводом изображения?
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13,
    А зачем?

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

    Для примера возьмем монитор 60 Гц.
    1) Экран обновляется за 16,7 мс.
    2) Передать кадр мы можем, допустим, за 5 мс.
    3) Этот кадр записывается в буфер монитора.
    4) Монитор выводит этот кадр за 16 мс.

    Здесь нам нужно лишь синхронизировать время передачи нового кадра, а за счет быстрого интерфейса мы можем передать его быстрее. Я предполагал, что по сравнению с CRT направление ЖК ушло именно в эту сторону. Или все не так и передача до сих пор синхронизируется построчно?
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    rPman, Frame buffer - это кадровый буфер в самом мониторе, я про него.
    На стороне видеокарты Front buffer (передний буфер), из которого передается кадр. Да, новый кадр готовится в другом буфере, и они потом меняются местами. Если не включена вертикальная синхронизация, то он может поменяться в момент передачи.

    Я тут понял, что на текущий момент у меня непонимание в одном ключевом вопросе, который не дает мне дальше продвинуться.
    Всегда ли в мониторах есть Frame buffer на полный кадр, и изображение выводится на матрицу с него. Варианты следующие:
    1) Да, Frame buffer на полный кадр есть, процессы передачи кадра и его вывода не синхронизированы.
    2) Да, Frame buffer на полный кадр есть, но процессы передачи кадра и его вывода синхронизированы.
    3) Нет, Frame buffer на полный кадр нет, соответственно, процессы передачи кадра и его вывода синхронизированы.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13, так если есть полный кадровый буфер, то можно и не синхронизировать скорости: передали за 5 мс, а вывели за 10 мс. Вроде, логично, если весь сигнал в цифре. Зачем монитору синхронизироваться с видеокартой, если можно просто читать из буфера что там есть? Или так не делают по какой-то причине?
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Mercury13,
    они могли задерживать изображение на два-три кадра

    Да, что-то такое помню, но не про задержку в 2-3 кадра. Не совсем понятно как это могло быть, ведь скорость распространения сигнала не может так сильно замедлится. Все эти 2-3 кадры должны были храниться в каких-то буферах, иначе данные пропали бы.
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Кажется, начинаю понемногу понимать.

    1) При обычной вертикальной синхронизации, если кадр не готов, то видеокарта отправляет повторно старый, или ничего не делает, рассчитывая на полный кадровый буфер в мониторе? А при G-Sync/FreeSync?
    2) При G-Sync/FreeSync монитор ждет полного кадра, чтобы начать его отрисовывать? В этом случае, наверное, кадр на полной скорости передается?
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Правильно ли я понимаю, что у ЖК-монитора всегда есть полноценный Frame buffer? Ведь только в этом случае не нужно синхронизировать передачу кадра и вывод его на экран.

    Я процесс представлял следующим образом:
    - Видеокарта передала кадр максимально быстро согласно скорости интерфейса
    - Монитор вывел кадр как успел

    Или это не так и скорость передачи синхронизируется со скоростью обновления экрана, чтобы монитор сразу выводил то, что прислали?
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    rPman, ок, не будем отвлекаться на CRT. Также пока не будем учитывать всякие вертикальные синхронизации и прочие улучшайзеры.
    Правильно ли я понимаю, что при использовании в том числе цифровых протоколов (например, DP):
    1) Видеокарта по готовности кадра помещает его в Front buffer и начинает отправку на монитор. Кадр отправляется построчно.
    2) Кадр в мониторе помещается Frame buffer, откуда выводится на матрицу контроллером дисплея. Также построчно.
    3) Монитор не знает, что на текущий момент находится в Frame buffer, целый кадр или состоящий из нескольких разных кадров.

    Ну и дополнительный вопрос. Если кадр готов, но прошлый еще не до конца передан, то Front buffer обновляется или ожидается окончание передачи предыдущего?
    Написано
  • Процесс вывода кадра из Front buffer на матрицу монитора. Как это работает?

    @krv2k Автор вопроса
    Немного резюмирую:
    1) Данные передаются из Front buffer видеокарты (в момент готовности кадра) в Frame buffer монитора. При этом до окончания передачи кадра Front buffer не обновляется.
    2) Монитор постоянно построчно читает данные из Frame buffer и выводит их (а иначе он не успеет поддерживать свою частоту обновления). При этом монитор не знает, полный кадр сейчас находится в Frame buffer или части двух (или более) разных, просто выводит что есть.

    Я все правильно понял?
    Написано