Насколько я понимаю, у графических процессоров есть свои собственные наборы инструкций, инструкции которых генерируются графическими драйверами. Затем инструкции GPU отправляются в GPU. Итак, как работает графическая связь до загрузки драйверов? Существуют ли какие-то базовые инструкции, которые графические процессоры должны реализовывать как минимум, чтобы компьютер мог выполнять основные задачи отображения?
2 ответа
"Есть ли какие-то базовые инструкции ...?" Да, именно так. Все графические процессоры должны реализовывать один из нескольких простых интерфейсов - они слишком примитивны, чтобы называться "наборами команд" - с какой прошивкой платформы ("BIOS" или "UEFI") и драйверами, входящими в состав ОС, знают, как разговаривать , Обычный выбор "простого интерфейса" в наши дни - "VGA" ("Video Graphics Array"), интерфейс уровня регистра, изначально определенный для видеокарт этого стандарта. (Сейчас 30+ лет!)
Например, если диспетчер устройств в системе Windows идентифицирует графическую карту как "Microsoft Basic Video Adapter", ОС не смогла найти определенный драйвер для карты и вместо этого загрузила VGA-совместимый драйвер.
Технически, Windows всегда загружает этот драйвер (поэтому он может отображать, например, экраны процесса загрузки), а затем (довольно поздно при загрузке) идентифицирует и загружает "настоящий" драйвер для вашей видеокарты.
Стандарт VGA поддерживает только несколько графических режимов и текстовых режимов с низким разрешением и не включает в себя то, что я бы назвал "запущенными программами" или даже "инструкциями" на GPU. По сути, системная прошивка или "базовый видеодрайвер" просто переводит его в нужный режим, а затем записывает биты в растровое изображение; биты в растровом изображении напрямую соответствуют пикселям на экране. Любая арифметика, которая должна быть сделана для рисования линий или кривых, выполняется в CPU. Это очень низкоуровневый и медленный способ отображения материала на экране. Но этого достаточно для дисплеев и простого взаимодействия с микропрограммой, для установки ОС и экранов ранней загрузки и т.д.
Я постараюсь прояснить "вуду", стоящее за всем этим, объясняя, как работало старое оборудование. Современные графические процессоры не работают так, как они, но они эмулируют интерфейс процессора к графической карте.
ТЛ; др
Графические чипы / карты в 80-х и начале 90-х годов должны были производить вывод очень быстро (относительно тактовой частоты), поэтому они не выполняли инструкции, а имели фиксированные схемы. Они просто высасывали данные из ОЗУ, поэтому ЦП просто нужно было выгрузить данные в ОЗУ в нужном месте, и графический чип мог бы их забрать и выбросить на экран. Процессор также может устанавливать различные переменные конфигурации на графическом чипе.
Подробности:
В 80-х годах на домашних компьютерах был действительно "тупой" графический чип с несколькими фиксированными характеристиками. Это будет иметь смысл, если я пройду по конвейеру задом наперед.
ЭЛТ-мониторы
Этим мониторам нужны аналоговые входы. Другими словами, более высокое напряжение = более яркий выход. Цветные мониторы имели 3 канала (красный, зеленый и синий (или, например,YUV или YIQ)). Эти напряжения регулировали силу электронного пучка. Простые вещи.
ЭЛТ-мониторы буквально использовали электромагниты для отклонения электронного пучка слева направо, затем начинали снова немного ниже и двигались слева направо и так далее сверху вниз. Затем вернитесь к началу и повторите.
DAC
Графические чипы имели цифро-аналоговый преобразователь (очень распространенный электрический компонент). Это преобразует цифровые значения (например, 2, 4 или 8 бит) в напряжения, которые могут подаваться на монитор.
сканирование
Графические чипы должны были "идти в ногу" с электронным лучом, посылая правильное значение в ЦАП, чтобы он мог выводить соответствующее напряжение в нужное время. (Для этого были использованы часы, в которые я не буду вдаваться.) Здесь не было времени выполнять инструкции. Все было запрограммировано и занимало небольшое фиксированное количество тактов.
Режимы видео
Ранние чипы были не очень быстрыми и имели ограниченную оперативную память. Из-за этого они имели тенденцию разрешать выбор различных режимов и других параметров конфигурации, например, цвета фона, выбора шрифта, расположения и размера курсора, выбора палитры и спрайтов. Большинство предлагали режим «только для символов» с высоким разрешением и попиксельные режимы с более низким разрешением.
Три заслуживающих внимания режима VGA:
- 16-ти (цветной) текстовый режим 80x25 (именно так выглядит экран загрузки BIOS)
- 16-цветный режим высокого разрешения 640x480
- 256-цветной 320x200, режим высокого цвета
Пиксельные краски
Грубо говоря, в зависимости от графической системы, конвейер выглядит примерно так:
Текущее расположение пикселей ⇒ Обрабатывать символ / шрифт / спрайт / пиксель / данные конфигурации ⇒ Значения пикселей ⇒ Палитра ⇒ ЦАП
Это тот второй шаг, который нужно прочитать из нескольких мест оперативной памяти. Например, в текстовом режиме ищется 1-байтовый символ. Это сформировало бы индекс в таблицу шрифтов. Из этой таблицы можно было бы посмотреть немного, указывая, должен ли этот пиксель быть основным или фоновым цветом. Третий байт будет выбран для получения этого цвета переднего плана / фона. Всего 3 байта считываются из оперативной памяти.
Но этот "поток" в значительной степени представляет собой набор простых фиксированных цепей, которые расположены точно так же, как и описанный поток.
Интерфейс шины памяти
У процессоров Intel есть эта досадная вещь, называемая шиной ввода-вывода, но это не важно, поэтому я сделаю вид, что ее там нет.
Процессоры обращаются к ОЗУ, передавая запрос READ или WRITE и адрес на шине памяти. Хотя большинство действительных адресов вызывают ответ из ОЗУ, определенные диапазоны обрабатываются устройствами . Например, ЧТЕНИЕ с определенного адреса может дать вам информацию о нажатиях клавиш клавиатуры.
Записывая нужные части "графического диапазона", вы можете записать как содержимое экрана, так и установить параметры конфигурации видеокарты. "Тупой" графический чип не выполняет никаких инструкций. Он просто продолжает бродить, имея несколько байтов, протекающих по его цепям и выводящих напряжения.
В VGA фактически имеется ОЗУ на графической карте, потому что вы можете настроить графическую карту на предварительную обработку данных перед их записью в графическое ОЗУ, чтобы повысить производительность в некоторых ситуациях.
VESA
Видеокарты после VGA предлагали более высокие разрешения и хорошую глубину цвета, но работали по аналогичным принципам. Многие современные видеокарты все еще обеспечивают совместимость с этим, чтобы обеспечить более высокое разрешение при загрузке. Но VGA - это "защита от дурака", которую будет эмулировать практически каждая карта.