Насколько я понимаю, у графических процессоров есть свои собственные наборы инструкций, инструкции которых генерируются графическими драйверами. Затем инструкции GPU отправляются в GPU. Итак, как работает графическая связь до загрузки драйверов? Существуют ли какие-то базовые инструкции, которые графические процессоры должны реализовывать как минимум, чтобы компьютер мог выполнять основные задачи отображения?
drivers
graphics-card
gpu
VortixDev
источник
источник
Ответы:
"Есть ли какие-то базовые инструкции ...?" Да, точно. Все графические процессоры должны реализовывать один из нескольких простых интерфейсов - они слишком примитивны, чтобы называться «наборами команд» - с какой прошивкой платформы («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:
Пиксельные краски
Грубо говоря, в зависимости от графической системы, конвейер выглядит примерно так:
Текущее расположение пикселей ⇒ Обрабатывать символ / шрифт / спрайт / пиксель / данные конфигурации ⇒ Значения пикселей ⇒ Палитра ⇒ ЦАП
Это тот второй шаг, который нужно прочитать из нескольких мест оперативной памяти. Например, в текстовом режиме ищется 1-байтовый символ. Это сформировало бы индекс в таблицу шрифтов. Из этой таблицы можно посмотреть немного, указывающее, должен ли этот пиксель быть основным или фоновым цветом. Третий байт будет выбран для получения этого цвета переднего плана / фона. Всего 3 байта считываются из оперативной памяти.
Но этот «поток» в значительной степени представляет собой набор простых фиксированных цепей, которые расположены точно так же, как и описанный поток.
Интерфейс шины памяти
У процессоров Intel есть эта досадная вещь, называемая шиной ввода-вывода, но это не важно, поэтому я сделаю вид, что ее там нет.
Процессоры обращаются к ОЗУ, передавая запрос READ или WRITE и адрес на шине памяти. Хотя большинство действительных адресов вызывают ответ из ОЗУ, определенные диапазоны обрабатываются устройствами . Например, ЧТЕНИЕ с определенного адреса может дать вам информацию о нажатиях клавиш клавиатуры.
Записывая нужные части «графического диапазона», вы можете записать как содержимое экрана, так и установить параметры конфигурации видеокарты. «Тупой» графический чип не выполняет никаких инструкций. Он просто продолжает двигаться, имея несколько байтов, проходящих по его цепям и выводящих напряжения.
В VGA фактически имеется ОЗУ на графической карте, поскольку вы можете настроить графическую карту для предварительной обработки данных перед их записью в графическое ОЗУ, чтобы повысить производительность в некоторых ситуациях.
VESA
Видеокарты после VGA предлагали более высокие разрешения и хорошую глубину цвета, но работали по аналогичным принципам. Многие современные видеокарты все еще обеспечивают совместимость с этим, чтобы обеспечить более высокое разрешение при загрузке. Но VGA - это «защита от дурака», которую будет эмулировать практически каждая карта.
источник