Видеоакселераторы

Видеоадаптеры VGA (и первые SVGA) имели ограниченную палитру и низкое разрешение экрана и очень сильно загружали центральный процессор. Причин тому было несколько:

·          пассивность графического контроллера при формировании кадрового буфера

·          низкое быстродействие видеопамяти

·          низкая пропускная способность внутренних шин и интерфейса ввода/вывода

·          недостаточное быстродействие и возможности RAMDAC

·          выполнение большинства операций в CPU, отсутствие аппаратной поддержки дополнительных функций

Эти недостатки и определили основные направления развития видеоадаптеров, приведших к появлению видеоакселераторов, которых мы сейчас называем видеокартами.

Как мы уже отмечали, RAMDAC аппаратно ограничивает количество цветов до 256, т.к. содержит только 256 регистров цвета. Каждый из них кодируется 8-разрядным числом, что определяет максимальное и минимально необходимый объем видеопамяти в 256 Кбайт (28=256). Большее количество видеопамяти может быть полезно только при большем разрешении. Тут то у производителей и появилась мысль использовать большее разрешение. Одновременно с увеличением объема видеопамяти пришлось использовать новые методы ее адресации, поскольку количество пикселей на экране превысило размер адресного пространства (128 Кбайт). Увеличение объема видеопамяти позволило повысить разрешение, но не привело к улучшению цветности изображения – размер палитры по-прежнему оставался равным 256 цветам.

Больших успехов в улучшении цветности производители добились, после выпуска RAMDAC нового типа:

·          новый RAMDAC позволял загружать данные из видеопамяти в выходной регистр ЦАП, минуя 8-разрядные регистры ЦАП – это позволило увеличить количество оттенков до 65536 (режим High Color), кодируя при этом каждый пиксель 16 битами

·          вместо 18-разрядного ЦАП стал использоваться 24-разрядный, что позволило отображать 224=16777216 (True Color)

На базе такого RAMDAC стали выпускаться видеокарты с объемом видеопамяти 1 Мбайт и более. Вместе с объемом видеопамяти возросла и разрядность ее ячеек (16 бит и более), а также разрядность и пропускная способность внутренней шины. Вместо разбиения видеопамяти на банки стала применяться линейная адресация всей видеопамяти. В этой схеме осуществляется переадресация видеопамяти в непрерывную область адресов, расположенную в расширенной (extended) области памяти. Для интерфейса ISA этот диапазон располагался ниже 16 Мбайт, а для PCI – в любой области расширенной памяти. Поэтому то в CMOS Setup и присутствует опция Memory hole at 15-16 M, для того чтобы никакие программы не могли записывать данные в область видеопамяти.

Но и это коренным образом не решило проблему, т.к. по-прежнему все операции по изменению кадрового буфера выполнял CPU. Для разгрузки CPU и ускорения обработки графики было решено использовать графический сопроцессор, выполняющий аппаратное ускорение графических функций, т.е. выполнение операций без участия CPU. Началась эра графических акселераторов.

Вместе с тем были использованы новые типы динамической памяти и новые шины интерфейса. Ассоциация VESA приняла стандарт SVGA, который определил единый механизм использования аппаратных ресурсов.

Аппаратное ускорение

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

Акселерация возможна только в графическом режиме. Суть работы акселератора состоит в изменении цифрового образа изображения в видеопамяти по командам из CPU и ряду самостоятельных операций по преобразованию данных. Графический акселератор, в отличие от адаптера VGA, оперирует не пикселями, а так называемыми графическими примитивами, которые состоят из множества пикселов. Используя такие примитивы как треугольник, отрезок, окружность, можно конструировать достаточно сложные изображения значительно проще и быстрее, чем при модификации отдельных пикселов.

Акселератор способен аппаратно ускорять большой ряд операций, среди которых есть и построение трехмерных изображений, основа современной графики:

1.      Прорисовка графических примитивов (drawing). На операциях прорисовки основаны все современные GUI интерфейсы программ и ОС. Параметры примитивов задаются в виде координат в векторном виде. В отличие от растрового представления цифрового изображения они гораздо компактнее и не зависят от используемого разрешения. По координатам легко построить все изображение. К командам прорисовки также относится и простейшая заливка контура (fill) и заполнение его узором.

2.      Перенос блоков изображения на экрану  (BitBlt). Выполняется при перетаскивании GUI-объектов мышкой, скроллинге  и т.п. операций. Данная функция сводится к перемещению блока бит из одной области видеопамяти в другую.

3.      Аппаратная поддержка окон (hardware windowing). Дело в том, что каждое активное приложение в операционной системе отслеживает «свое» открытое окно и его координаты в одном кадровом буфере оперативной памяти. При использовании hardware windowing каждое приложение использует свой «кадровый буфер», равный размеру открытого окна, так что «перенакрывания» окон к памяти не происходит. Выигрыш в скорости обработки координат окон тем больше, чем больше видеопамяти у видеоадаптера.

4.      Масштабирование растровых изображений (scaling). Различают два вида масштабирования: дублирование и интерполяция (сглаживание). Первое сводится просто к увеличению размера пикселя (точнее количества одинаковых пикселей в данной точке), что приводит к появлению таких дефектов изображения как пикселизация и алиасинг. Для устранения этих искажений используется интерполяция. Эти две операции весьма трудоемки и требуют достаточно высокого качества акселератора.

5.      Аппаратный курсор. Эта технология обеспечивает аппаратную поддержку курсора мыши. Центральный процессор считывает из порта мыши текущие координаты указателя и посылает их акселератору, а тот в свою очередь, просто формирует изображение курсора в нужном месте экрана. Для формирования изображения курсора применяется технология спрайтов (sprites), которые временно заменяют участки растра изображением курсора, а затем при его перемещении в другое место их обратно восстанавливают.

6.      Преобразование форматов и декомпрессия. При обработки видеоинформации цифровые RGB-данные заменяются сигналами яркости и цветности в формате YUV, который занимает значительно меньше места. При воспроизведении сжатых видеоданных сначала необходимо каждый кадр декомпрессировать, а затем уже записывать в кадровый буфер.

7.      Построение 3D-изображений.  Эта категория операций наиболее обширна и сложна, и их описание займет целую книгу. Основы формирования 3D-изображений мы рассмотрим ниже.

Первые шесть функций реализуются при ускорении 2D. Существуют также видеоадаптеры с аппаратной поддержкой DVD, TV-out, адаптивного деинтерлейсинга, HyperZ, блоки аппаратного обратного преобразования Фурье (IDCT). Все ускорители можно разделить на графические акселераторы и графические сопроцессоры. Последние, безусловно, являются более универсальными устройствами. Поскольку графический сопроцессор фактически превратился в самостоятельный компьютер, то чипсет, на базе которого сделан графический ускоритель, стали называть графическим процессором.

Видеоадаптер с графическим сопроцессором (GPU) – это интеллектуальное устройство, основу которого составляет арифметико-логическое устройство (АЛУ).  АЛУ фактически представляет собой микропроцессор, работающий по микроинструкциям из собственного ОЗУ. Главное отличие графического сопроцессора от графического акселератора состоит в том, что сопроцессор можно запрограммировать на выполнение различных задач, тогда как ускоритель работает по жесткому неизменному алгоритму. Акселератор состоит из нескольких узкоспециализированных блоков, обеспечивающих аппаратную поддержку только определенных функций. Кроме того, сопроцессор, в отличие от акселератора, является активным устройством, самостоятельно организующим обращения к памяти, управление шиной ввода/вывода. Наиболее ярко это проявляется при использовании шины AGP в режиме DiME, в котором преобразования выполняются не в кадровом буфере, а в системной памяти.

Память для видеоадаптеров

В видеоадаптерах используется динамическая память с произвольным доступом (DRAM). Этот тип памяти является самым простым и дешевым по исполнению, так как он реализуется на конденсаторах и транзисторах, но требует регенерации (перезарядки).  В связи с этим и скорость доступа к ней не очень высока (до 100 нс.). Современные видеоадаптеры оснащаются памятью SDRAM со скоростью доступа не более 10 нс. или более совершенной памятью DDR, время доступа к которой – от 3,5 нс.

Различают однопортовую и двухпортовую память. Последняя позволяет осуществить одновременное выполнение операций чтения и записи данных, так как к ней по двум различным адресам могут одновременно обращаться графический процессор и RAMDAC. К однопортовой относятся FPM, EDO, SDRAM, DDR. В настоящее время в профессиональных видеокартах могут использоваться две разновидности двухпортовой памяти – VRAM и WRAM.

VRAM (Video RAM) специально разработана для видеосистемы и позволяет одновременно выполнять операции чтения и записи. Естественно, она имеет и соответствующую «профессиональную» цену. Преимущества такой памяти особенно заметны при использовании высокого разрешения и режима True Color. WRAM (Window RAM) очень похожа на VRAM, но работает на частоте 50 МГц, что увеличивает быстродействие на 50% по сравнению с VRAM. Также здесь реализована технология двойной буферизации, в этой памяти имеется режим быстрой буферизации. Для работы предусмотрены 2 кадровых буфера.

Существует также ряд перспективных типов памяти. Среди них RDRAM, DDR SDRAM, 3D RAM, CDRAM, ESDRAM. 3D RAM предназначена для обработки трехмерной графики. Память является двухпортовой и позволяет осуществлять конвейерную обработку данных. CDRAM представляет собой комбинацию из динамической памяти и скоростного буфера кэширования, выполненного на элементах статической памяти.

3D-акселераторы

Акселераторы трехмерной графики стали высшей степенью развития видеоадаптеров. Они предназначены для моделирования трехмерного изображения и его расчета. Первоначально 3D-акселераторы размещались на отдельных платах и соединялись с видеоадаптером кабелем типа Pass-Trough. Поэтому ускоритель 3D-графики воспринимался как самостоятельное устройство и получил такое название. Все современные видеоадаптеры содержат мощный графический процессор, в состав которого помимо традиционного аппаратного ускорителя 2D-графики, входит 3D-акселератор. Так как термин 3D-акселератор потерял свое первоначальное значение, то все вышеописанное устройство следует называть видеоадаптером с графическим процессором с 3D-акселератором, хотя его иногда называют просто 3D-акселератором.

Синтез 3D-изображений

Как уже было отмечено, описание технологии формирования 3D-изображений очень сложное и займет немало места, поэтому мы рассмотрим только лишь его основы. В общем случае синтез трехмерного изображения включает в себя следующие этапы:

·          Конструирование (расчет) объекта на основе его математического описания

·          Расчет движения и трансформации его формы

·          Моделирование поверхности объекта с учетом различных внешних факторов (освещение, отражение, рельеф)

·          Проецирование объекта на плоскость экрана с учетом всевозможных визуальных эффектов

При помощи таких особенностей человеческого зрения как разномасштабность объектов, наложения объектов, использования светотени и эффекта перспективы даже монокулярное изображении создает ощущение объемности.

Процесс расчета трехмерного изображения объекта называется 3D-конвейером. В нем можно выделить следующие основные этапы:

1.      построение геометрической модели поверхности объекта, путем задания опорных точек и уравнений линий (каркаса, wireframe)

2.      разбиение поверхности полученного объекта на элементарные плоские элементы, чаще всего треугольники (тесселяция, tessellation). На этом этапе объект представляет собой совокупность трехмерных координат вершин треугольников (вертексов, vertex)

3.      трансформация (transformation) сводится к преобразованию координат вертексов для моделирования перемещения объекта и изменения его формы

4.      расчет освещенности (lighting) и затенения (shading) поверхности объекта состоит из расчета освещенности каждого треугольника, но при этом поверхность объекта становится угловатой, состоящей из маленьких плоских граней разной заливки. Для устранения этого дефекта используются различные методы интерполяции

5.      проецирование на плоскость экрана использует две существующие координаты точек и запоминает расстояние от вершин до плоскости проецирования в z-буфере

6.      обработка координат вершин (triangle setup) элементарных треугольников представляет собой сортировку вершин и отбрасывание задних невидимых граней (culling)

7.      удаление скрытых поверхностей (HSR) – удаление из проецирования невидимых поверхностей  объекта

8.      текстурирование, или закраска элементарных треугольников выполняется путем наложения текстур (texture mapping) – квадратных растровых картинок, состоящих  из текселов на каркас. Это первый этап, выполняемый с растровой графикой, при котором каждый треугольник заменяется частью текстуры, а пиксели – текселами. На этом же этапе применяется MIP-mapping – коррекция перспективы, фильтрация

9.      моделирование эффектов прозрачности – коррекция цвета пикселей.

10.  антиалиасинг (anti-aliasing) – устранение дефектов картинки из-за угловатых границ

11.  дизеринг (dithering) – интерполяция недостающих цветов

12.  формирование кадра и пост-обработка в кадровом буфере в локальной памяти видеоадаптера

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

Этапы 1-6 представляют геометрическую стадию 3D-конвейера. Во время этой стадии выполняются интенсивные тригонометрические вычисления, используются числа с плавающей точкой. Эти вычисления в старых видеоадаптерах выполняются в CPU, а в современных мощных – в GPU. Как известно, эра настоящих графических процессоров началась с nVidia GeForce 256 и ATI Radeon 256.

Этапы 7-12 называют рендерингом или прорисовкой. Здесь уже обрабатываются растровые изображения, состоящие из пикселей и текселей. Поэтому этот этап иногда называют растеризацией. Так как этот этап наиболее сложен, то здесь особенно необходимо аппаратное ускорение.

API

Еще одним очень важным фактором, отличающим видеоадаптеры различных фирм, является поддержка адаптером различных интерфейсов прикладного программирования (API). Надо сразу сказать, что эти API не только унифицируют работу прикладных программ с видеочипсетом, но и увеличивают производительность данной работы. Дело в том, что каждая видеокарта использует свои команды низкого (аппаратного) уровня. Под эти команды и создаются уникальные для каждого производителя драйвера, которые транслируют обращения прикладных программ к устройству. Если создавать графическую программу, учитывая особенности архитектуры каждой возможной видеокарты, то такая программа будет очень громоздкой, её будет тяжело настраивать пользователю под конкретный видеоадаптер, да и программисты не захотят выполнять столько работы. Для этого и был придуман API, который занимает промежуточное положение между высокоуровневыми прикладными программами и низкоуровневыми – драйверами акселератора, унифицирую подход прикладных программ к любым видеоадаптерам. Это означает, что, например, программист, создающий Photoshop, не обязан знать, как обратиться к конкретной видеокарте, а должен лишь знать, как работать с универсальной API.

Существует несколько универсальных API, таких как DirectX и OpenGL. Но также иногда используются так называемыеnative API”, создаваемые производителями непосредственно для своих графических чипсетов. Среди таких можно привести Glide компании 3Dfx (для семейства Voodoo), MeTAL компании S3 (для Savage), RenderGL и другие.

Геометрический процессор стал поддерживаться только в Direct3D (часть DirectX) версии 7.0, поэтому более ранние версии использовать не рекомендуется. Впрочем, версия 7.1 поставляется с Windows ME, так что вам следует лишь обновить её до 8.1. Недавно появился DirectX 9.0, но имейте в виду, что он может обеспечивать прирост производительности видеоакселераторов, поддерживающих её на аппаратном уровне (Radeon 9500, 9700, GeForce FX), кроме того, она пока не очень стабильна, так что без особой нужды DirectX 9.0 ставить не следует.

Архитектура 3D-акселератора

Несмотря на то, что многие видеоадаптеры имеют значительные отличия, помимо описанных в предыдущей статье элементов для формирования изображения, они также имеют несколько базовых элементов, которые обеспечивают аппаратное ускорение этапов 3D-конвейера. Итак, каждый 3D-акселератор имеет на вооружении:

·          геометрический процессор (GPU, Geometry Processor)

·          механизм прорисовки (Rendering Engine)

·          быструю память

·          цифро-аналоговый преобразователь (RAMDAC)

·          дополнительные опциональные блоки

Геометрический процессор предназначен для ускорения геометрической стадии 3D-конвейера, которая требует сложных математических расчетов при обсчете вертексов. До чипсетов GeForce и Radeon в дешевых видеокартах использовались геометрические сопроцессоры, которые помогали CPU в расчетах, а иногда и они отсутствовали.

Механизм рендеринга (прорисовки), или как его еще часто называют, конвейер рендеринга является основной частью современного 3D-акселератора и включает в себя, как минимум, два элемента: механизм обработки участков текстур (Texel Engine) и механизм обработки итогового кадра (Pixel Engine). Каждый из этих блоков использует свой участок видеопамяти, называемый буфером текстур и кадровым буфером соответственно. Кадровый буфер нам уже знаком, так как он перешел сюда из стандартной архитектуры VGA/SVGA. Появился лишь отдельный буфер для хранения обрабатываемых текстур. Кроме этого, в локальной памяти акселератора обычно выделяется область еще для нескольких буферов. Z-буфер необходим для корректного удаления скрытых поверхностей, a-буфер необходим для выполнения альфа-смещения, а второй кадровый буфер используется при двойной буферизации. Блок рендеринга у некоторых производителей называется TMU (Texture Mapping Unit) – блок наложения текстур.

Размер кадрового буфера, по аналогии с видеоадаптером VGA, определяет максимально возможное разрешение изображения и размер палитры. В большинстве акселераторов используется метод двойной буферизации, в соответствии с которым кадровый буфер разбивается на две части передний (front buffer) и задний (back buffer) буферы. В то время как происходит считывание и построение RAMDAC’ом изображения из переднего буфера, GPU строит следующий кадр в заднем. Такая «подкачка» обеспечивает плавность смены кадров, ведь после отображения на экране буфер очищается.

Интерфейс 3D-акселераторов

Для лучшей прорисовки кадров необходимо использовать текстуры больших размеров, а для этого требуется не менее 8 Мбайт видеопамяти. Чтобы иметь возможность передавать такой поток данных через свой интерфейс, она должна иметь высокоскоростную шину графического порта. Такой шиной стала AGP (Accelerated Graphics Port). Эта 32-разрядная шина имеет базовую частоту 66 МГц, но может работать в режиме 4x (266 МГц) и передавать 1Гб/с. При этом используется пониженное в 2 раза питание видеокарт 1,5 В, соответственно и видеокарта должна удовлетворять этому критерию. Новый, недавно введенный и пока еще мало используемый, режим 8x (Revision 3.0) реализован в новейших видеоадаптерах. Реально пока ни одна графическая программа не способна использовать его в полной мере.

Стандарт AGP имеет ряд важных особенностей, которые значительно увеличивают эффективную пропускную способность шины. Pipelining – пакетная (конвейерная) передача данных, когда следующий код адреса выставляется на шине сразу, не ожидая появления данных предыдущего адреса, т.е. коды адреса как бы выстраиваются в очередь. Данные последовательность адресов, которых была передана, также пересылаются по шине в виде пакета. В результате, задержка выдачи данных после выставления адреса на шине отсутствует.

Кроме того, в AGP, в отличие от PCI, используется режим SBA (Side Band Addressing), в котором для передачи адреса используются 8 дополнительных линий, т.е. адрес и данные передаются по разным линиям.

И, наконец, помимо режима DMA в стандарте AGP используется DME (Direct Memory Execution) – режим, в котором локальная память видеокарты и системная память равноценны и являются одним адресным пространством, так что операции с текстурами могут выполняться как локальной, так и в системной памяти. В этом режиме обмен идет короткими пакетами, так что достигается значительное ускорение операций с текстурами.

Теперь, на основе этой информации можно грамотно выбрать акселератор, о чем речь пойдет в следующем номере, где мы рассмотрим характеристики современных 3D-акселераторов.

Автор: Александр Дудкин
alexishw@xaker.ru

10.06.2003


© Авторские права и копия защищены законом: © Дудкин Александр Константинович, 2002 г.
Копирование любых материалов только с письменного разрешения автора сайта
URL сайта: www.alexishw.mailru.com
Ваши замечания и предложения присылайте по e-mail: alexishw@mailru.com