rPman, кажется, вся эта многоэтапная постобработка - это фишки телевизоров. Здесь я согласен, задержка может быть очень большой. Но меня больше интересуют мониторы, там такого, в принципе, быть не должно.
Mercury13, "Разрыв означает, что в видеопотоке появились новые данные. "
Это если данные аналоговые. Но у нас цифра, и отдельные каналы взаимодействия видеокарты и монитора. Не вижу проблем сигнализировать другими способами.
rPman, правильно ли я понимаю, что в этом случае используется полнокадровый буфер на стороне монитора и будет задержка в 1 цикл?
1) Цикл №1
- видеокарта передает кадр №1
- монитор принимает его и сохраняет в буфер
2) Цикл №2
- видеокарта передает кадр №2
- монитор выводит кадр №1
- на освободившееся место в буфере начинает записываться кадр №2
rPman, так вот вопрос в том числе про отправку кадра. Правильно ли я понимаю, что если видеокарта отправила одну строку кадра, то эта строка нигде не задержится и сразу отрисуется на матрице? То есть, передача кадра всегда синхронизирована с выводом изображения?
Я имел в виду не задержку, а, наоборот, передачу кадра быстрее, чем может его отобразить монитор (скорость интерфейса выше).
И это кажется не усложнением, а упрощением. Вместо синхронизации передачи каждой строки, мы синхронизируем только передачу кадра. То есть, передали быстро в буфер монитора кадр, а монитор уже сам с ним разбирается.
Для примера возьмем монитор 60 Гц.
1) Экран обновляется за 16,7 мс.
2) Передать кадр мы можем, допустим, за 5 мс.
3) Этот кадр записывается в буфер монитора.
4) Монитор выводит этот кадр за 16 мс.
Здесь нам нужно лишь синхронизировать время передачи нового кадра, а за счет быстрого интерфейса мы можем передать его быстрее. Я предполагал, что по сравнению с CRT направление ЖК ушло именно в эту сторону. Или все не так и передача до сих пор синхронизируется построчно?
rPman, Frame buffer - это кадровый буфер в самом мониторе, я про него.
На стороне видеокарты Front buffer (передний буфер), из которого передается кадр. Да, новый кадр готовится в другом буфере, и они потом меняются местами. Если не включена вертикальная синхронизация, то он может поменяться в момент передачи.
Я тут понял, что на текущий момент у меня непонимание в одном ключевом вопросе, который не дает мне дальше продвинуться.
Всегда ли в мониторах есть Frame buffer на полный кадр, и изображение выводится на матрицу с него. Варианты следующие:
1) Да, Frame buffer на полный кадр есть, процессы передачи кадра и его вывода не синхронизированы.
2) Да, Frame buffer на полный кадр есть, но процессы передачи кадра и его вывода синхронизированы.
3) Нет, Frame buffer на полный кадр нет, соответственно, процессы передачи кадра и его вывода синхронизированы.
Mercury13, так если есть полный кадровый буфер, то можно и не синхронизировать скорости: передали за 5 мс, а вывели за 10 мс. Вроде, логично, если весь сигнал в цифре. Зачем монитору синхронизироваться с видеокартой, если можно просто читать из буфера что там есть? Или так не делают по какой-то причине?
они могли задерживать изображение на два-три кадра
Да, что-то такое помню, но не про задержку в 2-3 кадра. Не совсем понятно как это могло быть, ведь скорость распространения сигнала не может так сильно замедлится. Все эти 2-3 кадры должны были храниться в каких-то буферах, иначе данные пропали бы.
1) При обычной вертикальной синхронизации, если кадр не готов, то видеокарта отправляет повторно старый, или ничего не делает, рассчитывая на полный кадровый буфер в мониторе? А при G-Sync/FreeSync?
2) При G-Sync/FreeSync монитор ждет полного кадра, чтобы начать его отрисовывать? В этом случае, наверное, кадр на полной скорости передается?
Правильно ли я понимаю, что у ЖК-монитора всегда есть полноценный Frame buffer? Ведь только в этом случае не нужно синхронизировать передачу кадра и вывод его на экран.
Я процесс представлял следующим образом:
- Видеокарта передала кадр максимально быстро согласно скорости интерфейса
- Монитор вывел кадр как успел
Или это не так и скорость передачи синхронизируется со скоростью обновления экрана, чтобы монитор сразу выводил то, что прислали?
rPman, ок, не будем отвлекаться на CRT. Также пока не будем учитывать всякие вертикальные синхронизации и прочие улучшайзеры.
Правильно ли я понимаю, что при использовании в том числе цифровых протоколов (например, DP):
1) Видеокарта по готовности кадра помещает его в Front buffer и начинает отправку на монитор. Кадр отправляется построчно.
2) Кадр в мониторе помещается Frame buffer, откуда выводится на матрицу контроллером дисплея. Также построчно.
3) Монитор не знает, что на текущий момент находится в Frame buffer, целый кадр или состоящий из нескольких разных кадров.
Ну и дополнительный вопрос. Если кадр готов, но прошлый еще не до конца передан, то Front buffer обновляется или ожидается окончание передачи предыдущего?
Немного резюмирую:
1) Данные передаются из Front buffer видеокарты (в момент готовности кадра) в Frame buffer монитора. При этом до окончания передачи кадра Front buffer не обновляется.
2) Монитор постоянно построчно читает данные из Frame buffer и выводит их (а иначе он не успеет поддерживать свою частоту обновления). При этом монитор не знает, полный кадр сейчас находится в Frame buffer или части двух (или более) разных, просто выводит что есть.
Вова, спасибо, понял что вы имели в виду. Про вертикальные и горизонтальные синхроимпульсы в принципе понятно, также понятно как работает вертикальная синхронизация частоты кадров (эта та, про которую как раз статья на вики) на ЭЛТ-мониторах. Непонятным остается вопрос как это работает на ЖК-мониторах при использовании цифровых интерфейсов (DP, например)? С какими-нибудь буферами или аналогично?
в некоторых случаях frame buffer (кадровый буфер) может располагаться в мониторе
В современных мониторах он обычно есть или нет? Если нет, то как данные с кабеля (например, DP) попадают на матрицу? Контроллер дисплея в реальном времени (как в ЭЛТ-мониторах) получает их и обновляет матрицу?
Вова, к сожалению, в статься кроме слов "V-Sync помогает избавиться от разрывов" ничего больше нет. Понимание работы V-Sync - это следующий шаг после того, как пойму принцип работы без нее.
CityCat4, ну почти знания ради знания. Хочу разобраться как работают опции в параметрах драйвера и почему именно так (вертикальная синхронизация, быстрая синхронизация и т.п.), чтобы осознанно настраивать их.
Не вижу причин на появление задержки, если у монитора есть буфер и мы передадим данные в него быстрее.