Другие журналы

научное издание МГТУ им. Н.Э. Баумана

НАУКА и ОБРАЗОВАНИЕ

Издатель ФГБОУ ВПО "МГТУ им. Н.Э. Баумана". Эл № ФС 77 - 48211.  ISSN 1994-0408

Современные программные методы акселерации мультимедиа

#4 Апрель 2005

При поиске пересечения двух контуров число участвующих в этом отрезков гораздо меньше общего числа их в сцене, причём использу

В.А. Митин, ведущий программист, АО “Диасофт”,

Н.А. Левин, д-р техн. наук, ИПИ РАН

 

Современные программные методы акселерации мультимедиа

 

Обсуждаются некоторые программные методы акселерации современных графических карт, которые могут быть применены в персональных мультимедиа компьютерах.

Рассмотрена привязка программных алгоритмов к специфике центрального процессора у системы ввода/вывода. Описаны некоторые рекомендации относительно максимизации использования алгоритмами вывода аппаратных возможностей графической карты. Обсужден вопрос о разделении множества алгоритмов вывода графической информации на уровни по степени универсальности.

 

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

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

Упомянутые резервы могут быть использованы при соблюдении следующих принципов:

·        наиболее полная привязка программных алгоритмов к специфике центрального процессора и системы ввода/вывода;

·        максимальное использование в алгоритмах вывода графической информации аппаратных возможностей повышения скорости вывода, реализованных в графической карте;

·        разделение множества алгоритмов вывода графической информации на уровни по степени универсальности.

 

Привязка программных алгоритмов к специфике центрального процессора и системы ввода/вывода

Использование полной разрядности регистров процессора и портов ввода/вывода. Любой алгоритм вывода на экран какого-либо из графических примитивов характеризуется набором входных параметров и набором врёменных внутренних переменных. Входные параметры алгоритма определяют свойства отображаемого им примитива — цвет, фактуру (монолитный, пунктирный и т.п.) и т.д., а временные внутренние переменные необходимы для вычисления каждого следующего шага алгоритма.

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

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

Одним из важных факторов при оптимизации использования регистров центрального процессора является использование максимальной разрядности этих регистров. При создании нового программного обеспечения использование максимальной разрядности регистров является естественным. Но нельзя забывать, что в связи с особенностями развития процессоров семейства х86 от 8- до 32-битных моделей, их внутренние регистры могут использоваться с разрядностью в 8, 16 или 32 бит.

Эта проблема действительно серьезно встает при переносе программного обеспечения с младших моделей процессоров на более старшие. Например, все программное обеспечение, созданное для 16-битного процессора i80286, при переносе на 32-битные процессоры i80386 или i80486 остается совместимым и работает значительно быстрее из-за более высокой тактовой частоты процессора и меньшего числа тактов, затрачиваемых им на исполнение большинства инструкций, но не дает того выигрыша в производительности, которого можно было бы добиться, задействовав регистры процессора полностью.

С развитием процессоров увеличилась не только разрядность их внутренних регистров, но и разрядность портов системы ввода/вывода.

Различные устройства на системной шине компьютера в зависимости от конструкции каждого из них могут поддерживать 8-, 16- или 32-битный формат портов. Центральным процессором обеспечивается прозрачный доступ к пространству портов ввода/вывода в любом из перечисленных форматов. В результате этого многие операции можно сделать как 8-, так и 16- или 32- битными.

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

Напомним, что в современных графических картах, сконструированных для локальной шины I поддерживаются 8- и 16-битный форматы, а для локальных шин VL-Bus и PCI — 8-, 16- b 32-битный форматы [6]. Оптимизация набора команд взаимодействия с видеопамятью. Как уже отмечалось, графическая карта по разному реагирует на выполнение центральным процессором операций чтения и записи в область адресного пространства, в которую отображена видеопамять. Это связано со способом обновления регистров Latches блока Graphics Controller. Поэтому в алгоритмах вывода на экран все команды центрально го процессора, выполняющие операции с памятью, делятся на три типа:

·        команды, выполняющие только операцию чтения;

·        команды, выполняющие только операцию записи;

·        команды, выполняющие последовательно операцию чтения, а затем операцию записи.

К командам первого и второго типов относятся многие команды пересылок, к командам третьего типа — многие арифметико-логические команды.

На первый взгляд, кажется очевидным, что при реализации каких-либо алгоритмов вывода на экран команды первого типа следует использовать, когда необходимо считать данные из видеопамяти в регистр центрального процессора или (и) обновить содержимое регистров-защелок (Latches). Команды второго типа должны применяться, когда необходимо записать содержимое регистров-защелок (при этом возможна комбинация его с содержимым регистра центрального процессора) в видеопамять. А команды третьего типа следует использовать, когда необходимо сделать последовательно обе операции.

Однако прямое следование этому подходу может привести к проигрышу в скорости вывода. Дело в том, что различные команды выполняются за различное число тактов центрального процессора. Иногда возникает ситуация, когда одна арифметико-логическая команда будет выполняться дольше, чем последовательность из двух команд пересылок — сначала память- регистр, затем регистр-память (см. табл. 1).

 

Таблица1.

Число тактов процессора для некоторых команд, употребляемых для работы с видеопамятью

Инструкция

Тип процессора

8086

80286

80386

80486

Команды, выполняющие одновременно операции чтения и записи

AND            M<-1

17

7

7

3

AND            M<-R

16

7

7

3

OR              M<-1

17

7

7

3

OR              M<-R

16

7

6

3

XOR           M<-1

17

7

7

3

XOR            M<-R

16

7

6

3

MOVSB       M<-M

9+17n

5+4n

5+4n

12+3n

MOVSW      M<-M

9+17n

5+4n

5+4n

12+3n

MOVSD       M<-M

9+17n

5+4n

5+4n

12+3n

Команды, выполняющие только операцию чтения

MOV           R<-M

8

5

4

1

AND           R<-M

9

7

6

2

OR              R<-M

9

7

7

2

XOR           R<-M

9

7

7

2

Команды, выполняющие только операцию записи

MOV          M<-1

10

3

2

1

MOV          M<-R

9

3

2

1

STOSB        M<-M

9+10n

4+3n

5+5n

7+4n

STOSW      M<-M

9+10n

4+3n

5+5n

7+4n

STOSD       M<-M

9+10n

4+3n

5+5n

7+4n

n – количество пересылаемых байтов

 

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

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

Таблица 2.

Число тактов при оптимальной полной операции обновления байта видеопамяти (чтение - запись)

Тип процессора

Инструкции

Число тактов

8086

AND         M<-R

16

OR           M<-R

16

XOR        M<-R

16

80286

AND       M<-R

7

OR          M<-R

7

XOR       M<-R

7

80386

MOV        R<-M+MOV   M<-R

4+2=6

OR          M<-R

6

XOR        M<-R

6

80486

MOV        R<-M+MOV   M<-R

1+1=2

 

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

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

Таким образом, для достижения минимального времени работы с видеопамятью путем выбора оптимального набора команд должна быть поставлена и решена задача дискретной оптимизации по критерию времени.

 

Максимизация использования алгоритмами вывода аппаратных возможностей графической карты.

Как нами уже отмечалось, наибольшего эффекта в повышении производительности графической карты можно добиться модернизацией аппаратных средств. Однако большинство из этих аппаратных модернизаций будут способствовать повышению эффективности вывода графической информации только при надлежащем использовании программным обеспечением этих новых аппаратных возможностей [3], [7], [8].

В табл. 3 показано в первом приближении ускорение алгоритмов, применяющих аппаратно реализованные функции. Она помогает оценить целесообразность максимального использования описанных возможностей.

Таблица 3

Оценка выигрыша от использования аппаратных функций

Функция

Выигрыш*, раз

Отображение:

горизонтальной прямой

 

3-5

вертикальной прямой линии

4-8

прямой линии произвольного наклона

3-10

прямоугольника

4-7

закрашенного прямоугольника

3-5

дуги, окружности, эллипса

5-10

Копирование прямоугольной области

10-20

Масштабирование прямоугольной области с нецелевым коэффициентом

10-100

* Приводимые данные весьма приблизительны и могут сильно различаться для графических карт разных фирм-производителей

 

Рассмотрим основные аппаратные функции плат SVGA, позволяющие повысить эффективность обработки графической информации в программных алгоритмах вывода и рекомендации по их использованию.

 

Функции GUI Accelerator

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

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

Для использования этой функции необходимо выполнить следующие действия:

1) поместить в специальные порты ввода/вывода, закрепленные за блоком аппаратного курсора, изображение и маску курсора;

2) в порты координат графического курсора поместить начальные координаты курсора на экране;

З) в специальном порту состояния блока GUI Accelerator установить бит использования функции аппаратного курсора;

4) при обработке прерываний от манипулятора, управляющего курсором, обновлять координаты курсора в соответствующих портах.

Для прекращения использования данной функции необходимо сбросить бит функции аппаратного курсора в порту состояния блока GUI Accelerator.

·        Функция аппаратного копирования битовых блоков передает из ведения центрального процессора в ведение графической карты одну из самых распространенных и самых емких по времени экранных функций — копирование прямоугольных областей экрана. В качестве источника и приемника для этой функции могут выступать адреса, как в видеопамяти, так и в оперативной памяти. Это позволяет не только копировать участки изображения в пределах экрана, но также и сохранять изображение в оперативной памяти и восстанавливать его из памяти на экран.

Для использования этой функции необходимо выполнить следующие действия:

1) поместить в специальные порты ввода/вывода закрепленные за блоком аппаратного копирования битовых блоков параметры функции копирования — адрес источника битового блока (в видеопамяти или оперативной памяти), адрес приемника битового блока, размер блока, а также некоторые дополнительные параметры блока (маски правой и левой границ, логическую функцию и т.п.);

2) в специальный порт команд поместить соответствующее число (или установить бит) для запуска самого процесса копирования.

 

Функции Graphics Co-Processor

Graphics Co-Processor представляет высокоуровневый интерфейс доступа к видеопамяти. Это устройство берет на себя функции рисования некоторых графических примитивов, таких как прямые линии, дуги, закрашенные прямоугольники и т. п.

Блок регистров Graphics Co-Processor, с помощью которых можно с ним общаться, проецируется в пространство портов ввода/вывода системной шины. Таким образом, с этим сопроцессором можно общаться с помощью обычных конструкций центрального процессора, осуществляющих стандартный ввод/ вывод.

К сожалению, состав функций сопроцессоров разных фирм-изготовителей, а также назначение и состав их регистров в значительной степени отличаются друг от друга. Но можно выделить общий подход к использованию Graphics Co-Processor, который сводится к следующему:

·        поместить значения в регистры параметров сопроцессора в соответствии со спецификой графического примитива, который требуется отобразить (например, для прямой линии — координаты ее концов, для прямоугольника — координаты левой верхней и правой нижней его вершин и т.п.);

·        поместить значения в управляющие регистры [например, координаты ограничительного прямоугольника (Clip Rectangle) — активной области экрана, доступной для рисования];

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

 

Функции Zoom Window

Устройство Zoom Window аппаратно реализует функцию матричного масштабирования. В качестве входных данных для нее могут выступать или прямоугольная область экрана (данных, находящихся в видеопамяти), или поток пикселей (байтов), поступающий от какого-либо внешнего по отношению к графи ческой карте источника данных. Соединение с подобным источником пиксельных данных осуществляется через разъем расширения (Feature Connector).

В случае прямоугольной области экрана эта функция выполняет масштабирование как по горизонтали, так и по вертикали; в случае же потока пикселей только по горизонтали.

Реализации Zoom Window, как и Graphics Co-Processor различаются у разных фирм-изготовителей. Для использования этой функции необходимо выполнить примерно следующие действия:

·        поместить в специальный порт ввода/вывода число, соответствующее типу источника данных (источник — область видеопамяти или источник — внешний источник);

·        если в качестве источника выбрана область видеопамяти, поместить в порты координат соответствующие координаты приемника и источника;

·        в порту статуса блока Zoom Window установить бит, запускающий работу этой функции.

 

Разделение множества алгоритмов вывода графической информации на уровни по степени универсальности

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

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

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

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

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

Для достижения оптимальной скорости графического вывода процесс разработки прикладного программного обеспечения с учетом представленного разделения должен проходить следующие три стадии:

·        разработка некоторого макета программы с использованием функций универсального уровня. На этом этапе реализуется функциональность, которой должна соответствовать разрабатываемая прикладная программа. Разработчик, не задумываясь о скорости вывода, использует весь спектр свойств графических примитивов;

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

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

Ниже приведены сводные таблицы (табл. 4 и 5) наборов свойств семи простейших графических примитивов и двух графических примитивов вывода текста.

 

Таблица 4

Свойства простейших графических примитивов

Primitive - Property

Pixel

Line

Rectangle

Round Rectangle

Arc

Ellipse

BitBLT

Logical Function

X

X

X

X

X

X

 

Border Width

X

X

X

X

X

X

 

Border Color

X

X

X

X

X

X

 

Fill Color

 

 

X

X

 

X

 

Border Pattern

 

X

X

X

X

X

 

Fill Pattern

 

 

X

X

 

X

 

Align

 

X

X

X

 

 

X

Direction

 

X

 

 

 

 

X

Coord. Checking

 

X

X

X

 

 

X

Current Position

 

X

 

 

 

 

 

 

 

 

Таблица 5

Свойства примитивов вывода текстов

Property

Character

String

Foreground Logical Function

X

X

Background Logical Function

X

X

Foreground Color

X

X

Background Color

X

X

Align

X

X

Direction

X

X

Width Fixed/Proportional

X

X

Current Position

X

X

ASCIIZ/LString

 

X

 

 

Простейшие графические примитивы:

·        Pixel — одиночная точка;

·        Line-прямая линия;

·        Rectangle -прямоугольник с острыми углами;

·        Round Rectangle - прямоугольник с закругленными углами;

·        Arc - дуга;

·        Ellipse - эллипс;

·        BitBLT — копирование прямоугольного блока экрана.

Property - свойство:

*         Logical Function - логическая функция (SET, AND, OR, XOR) отображаемого примитива с уже имеющимся на экране изображением:

·        SET — осуществляет вывод без учета имеющегося изображения -рисует "поверх";

·        AND — осуществляет операцию логического "И";

·        OR - осуществляет операцию логического "ИЛИ";

·        XOR - осуществляет операцию логического "Исключающего - ИЛИ".

*          Border Width — толщина границы примитива.

*          Border Color — цвет границы примитива. Для примитивов Pixel, Line и Arc этот цвет является цветом самого примитива.

*          Fill Color - цвет внутренней части примитива.

*          Border Pattern - шаблон границы примитива. Для примитивов Pixel, Line и Arc этот шаблон является шаблоном самого примитива.

*          Fill Pattern-шаблон внутренней части примитива.

*          Align — выравнивание границ примитива по границам байтов масок в видеопамяти (может иметь место в послойных видеорежимах).

*          Direction — направление выполнения примитива — горизонтально/вертикально/произвольно.

*          Coord. Checking - проверка правильности задания координат начала и конца примитива. Если какая-либо из координат конца примитива имеет меньшее значение, чем соответствующая координата начала, то происходит смена направления вывода примитива, а длина по соответствующей координате остается положительной.

*          Current Position - текущая позиция. При каждом выводе примитива задается координата его конечной точки, а координата начальной берется равной текущей позиции. После окончания вывода этого примитива текущая позиция приравнивается координате конечной точки. Таким образом, каждый следующий примитив оказывается пристыкованным к предыдущему.

 

Примитивы вывода текста:

*          Character— одиночный символ текста;

*          String — одиночная строка текста.

Свойства:

*          Foreground Logical Function — логическая функция (SET, AND, OR, XOR) текста с имеющимся на экране изображением.

*          Background Logical Function — логическая функция (SET, AND, OR, XOR) фона с уже имеющимся на экране изображением.

*          Foreground Color - цвет текста.

*          Background Color - цвет фона.

*          Align — выравнивание границ примитива по границам байтов масок в видеопамяти (может иметь место в послойных видеорежимах).

*          Direction — направление выполнения примитива - слева направо/справа налево/сверху вниз.

*          Width Fixed/Proportional - фиксированная (одинаковая) или пропорциональная (разная) ширина букв одного и того же размера в одном и том же фонте (шрифте).

*          Current Position — текущая позиция. При каждом выводе примитива задается координата его конечной точки, а координата начальной берется равной текущей позиции. После окончания вывода этого примитива текущая позиция приравнивается координате конечной точки. Таким образом, каждый следующий примитив оказывается пристыкованным к предыдущему. В отличие от простейших графических примитивов, для примитивов вывода текста это свойство имеет особенное значение, так как символы обычно не выводят в произвольных местах экрана, а образуют из них последовательности.

*          ASCIIZ/LString - формат строки (строка ограничивается нулевым символом или ее длина задается в первом байте).

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

Таблица 6

Размерности использования свойств графических примитивов

Property

Dimension

Values

Logical Function

2

Set ׀ Set, And, Or, Xor

Border Width

2

1 pixel ׀ N pixels

Border Color

1

Yes

Fill Color

2

Yes ׀ No

Border Pattern

2

Solid ׀ Any

Fill Pattern

2

Yes ׀ No

Align

2

None ׀ Byte

Direction

3

Any ׀ Horizontal ׀ Vertical

Coord. Checking

2

Yes ׀ No

Current Position

2

Yes ׀ No

Foreground Logical Function

3

Set ׀ Set, And, Or, Xor ׀ Mask

Background Logical Function

3

Set ׀ Set, And, Or, Xor ׀ Mask

Foreground Color

1

Yes

Align

2

Yes ׀ No

Direction

2

None ׀ Byte

Width Fixed/Proportional

5

LR ׀ RL ׀ UD ׀ DU ׀ Any

Current Position

2

Fixed ׀ Proportional

ASCIIZ/LString

2

ASCIIZ/LString

 

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

Ниже приводится табл. 7, иллюстрирующая разделение на слои множества алгоритмов, реализующих наборы свойств графического примитива Line.

Таблица 7

Разделение на уровни полного набора свойств примитива Line

Level

Logical Function

Border Width

Border Color

Border Pattern

Align

Direction

Coord. Checking

Current Position

1

1

Set, And, Or, Xor

N pixels

Any

Any

None

Any

Yes

Yes

2

Set, And, Or, Xor

N pixels

Any

Any

None

Any

Yes

No

2

3

Set, And, Or, Xor

N pixels

Any

Solid

None

Any

Yes

Yes

4

Set, And, Or, Xor

N pixels

Any

Solid

None

Any

Yes

No

5

Set, And, Or, Xor

1 pixels

Any

Any

None

Any

Yes

Yes

6

Set, And, Or, Xor

1 pixels

Any

Any

None

Any

Yes

No

7

Set, And, Or, Xor

1 pixels

Any

Solid

None

Any

Yes

Yes

8

Set, And, Or, Xor

1 pixels

Any

Solid

None

Any

Yes

No

9

Set

N pixels

Any

Any

None

Any

Yes

Yes

10

Set

N pixels

Any

Any

None

Any

Yes

No

11

Set

N pixels

Any

Solid

None

Any

Yes

Yes

12

Set

N pixels

Any

Solid

None

Any

Yes

No

13

Set

1 pixels

Any

Any

None

Any

Yes

Yes

14

Set

1 pixels

Any

Any

None

Any

Yes

No

15

Set

1 pixels

Any

Solid

None

Any

Yes

Yes

16

Set

1 pixels

Any

Solid

None

Any

Yes

No

3

17

Set, And, Or, Xor

N pixels

Any

Solid

None

Horizontal

Yes

Yes

33

Set, And, Or, Xor

N pixels

Any

Solid

None

Horizontal

No

Yes

49

Set, And, Or, Xor

N pixels

Any

Solid

None

Horizontal

Yes

Yes

65

Set, And, Or, Xor

N pixels

Any

Solid

None

Horizontal

No

Yes

81

Set, And, Or, Xor

N pixels

Any

Solid

Byte

Horizontal

Yes

Yes

97

Set, And, Or, Xor

N pixels

Any

Solid

Byte

Horizontal

No

Yes

113

Set, And, Or, Xor

N pixels

Any

Solid

Byte

Vertical

Yes

Yes

129

Set, And, Or, Xor

N pixels

Any

Solid

Byte

Vertical

No

Yes

 

* * *

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

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

 

Список литературы

1.      “EG-3000 (A) Enhanced Graphics Adapter Technical Manual”, Gemini Technology inc.

2.      “Enchanted Graphics” Adapter BIOS 1983.

3.      Richard Wilton “Programmer’s Guide Reference Guide”, New York. 1989.

4.      Breadly D. “EGA/VGA: A Programmer’s Reference Guide”

5.      Dan Rollins. “Tech Help. The Electronic Technical Reference Manual”, Flambeaux Software Inc. 1990.

6.      “PCI Local Bus Specification. Revision 2.1”, PCI special Interest Group, 1994.

7.      “CL – GD5.43X Alpine Family VGA GUI Accelerators”, Cirrus Logic Inc. 1993.

8.      “CL – GD5452ICO5453 North Star Family Graphics Accelerator”, Cirrus Logic Inc. 1994.

Поделиться:
 
ПОИСК
 
elibrary crossref ulrichsweb neicon rusycon
 
ЮБИЛЕИ
ФОТОРЕПОРТАЖИ
 
СОБЫТИЯ
 
НОВОСТНАЯ ЛЕНТА



Авторы
Пресс-релизы
Библиотека
Конференции
Выставки
О проекте
Rambler's Top100
Телефон: +7 (915) 336-07-65 (строго: среда; пятница c 11-00 до 17-00)
  RSS
© 2003-2024 «Наука и образование»
Перепечатка материалов журнала без согласования с редакцией запрещена
 Тел.: +7 (915) 336-07-65 (строго: среда; пятница c 11-00 до 17-00)