Как процессор взаимодействует с графическим процессором до загрузки драйверов? [Дубликат]

24

Насколько я понимаю, у графических процессоров есть свои собственные наборы инструкций, инструкции которых генерируются графическими драйверами. Затем инструкции GPU отправляются в GPU. Итак, как работает графическая связь до загрузки драйверов? Существуют ли какие-то базовые инструкции, которые графические процессоры должны реализовывать как минимум, чтобы компьютер мог выполнять основные задачи отображения?

VortixDev
источник

Ответы:

34

"Есть ли какие-то базовые инструкции ...?" Да, точно. Все графические процессоры должны реализовывать один из нескольких простых интерфейсов - они слишком примитивны, чтобы называться «наборами команд» - с какой прошивкой платформы («BIOS» или «UEFI») и драйверами, входящими в состав ОС, знают, как общаться , Обычный выбор «простого интерфейса» в наши дни - «VGA» («Video Graphics Array»), интерфейс уровня регистра, изначально определенный для видеокарт этого стандарта. (Сейчас 30+ лет!)

Например, если диспетчер устройств в системе Windows идентифицирует графическую карту как «Microsoft Basic Video Adapter», ОС не смогла найти определенный драйвер для карты и вместо этого загрузила VGA-совместимый драйвер.

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

Стандарт VGA поддерживает только несколько графических режимов и текстовых режимов с низким разрешением и не включает в себя то, что я бы назвал «запущенными программами» или даже «инструкциями» на GPU. По сути, системная прошивка или «базовый видеодрайвер» просто переводит его в нужный режим, а затем записывает биты в растровое изображение; биты в растровом изображении напрямую соответствуют пикселям на экране. Любая арифметика, которая должна быть сделана для рисования линий или кривых, выполняется в CPU. Это очень низкоуровневый и медленный способ отображения материала на экране. Но этого достаточно для дисплеев и простого взаимодействия с микропрограммой, для установки ОС и экранов ранней загрузки и т. Д.

Википедия: массив видео графики

Джейми Ханрахан
источник
1
Полная ситуация сложна. Самые первые «VGA» карты были действительно настолько ограничены. Долгое время Windows NT требовала поддержки 800x600, но да, всего 16 цветов. Это выглядело довольно ужасно! Смотрите статью в Википедии, на которую я ссылаюсь.
Джейми Ханрахан
9
Windows, скорее всего, использует VESA BIOS Extentions (VBE) для своего базового адаптера. VBE довольно широко поддерживается и допускает 16-24 битный цвет и до 1600x1200 пикселей.
8bittree
3
Это не будет расширение VESA BIOS, потому что Windows категорически не вызывает код BIOS / UEFI ни для чего после того, как самые ранние этапы начальной загрузки сделаны.
Джейми Ханрахан
2
Я видел некоторые компьютеры, включая мой ноутбук, где загрузочный экран Windows с «крутящимися точками» запускается с очень низким разрешением (320x200, я бы сказал, в 256-цветном режиме VGA), а затем быстро переключается на более высокое разрешение.
Артелий
1
Даже 800x600 в 16 цветах за пределами возможностей VGA. VGA максимально в 640x480 16 цветов. Однако производители графических чипов пошли дальше этого и добавили бы «SuperVGA», или SVGA-режимы, которые бы увеличивали цвета и разрешение, а также имели собственные проприетарные режимы. VESA предложила стандартный способ доступа к этим проприетарным режимам, но примерно в то время ПК начал работать в основном с графическим интерфейсом, поэтому драйверы были хорошим выбором. Это было также тогда, когда 3D-ускорение начинало добавляться. Итак, хотя большинство карт стали VESA-совместимыми, никто не говорил об этом.
trlkly
16

Я постараюсь прояснить «вуду», стоящее за всем этим, объясняя, как работало старое оборудование. Современные графические процессоры не работают так, как они, но они эмулируют интерфейс процессора к графической карте.

ТЛ; др

Графические чипы / карты в 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 - это «защита от дурака», которую будет эмулировать практически каждая карта.

Artelius
источник