Обзор VPU 3Dlabs P10 и карты Wildcat VP870 на его основе

или "Наглядный процессор"


" Расширяется круг инженеров, которым приходится изучать, осваивать и творчески применять микропроцессорные средства в прикладных разработках"

(А.Л. Гуртовцев, В.С. Гудыменко — "Программы для микропроцессоров", с.3.)


СОДЕРЖАНИЕ

  1. Общие сведения о P10 и позиционирование
  2. Линейка продуктов
  3. Спецификации P10
  4. Архитектура P10
  5. Особенности видеокарты 3Dlabs Wildcat VP870 128MB
  6. Конфигурации тестовых стендов и особенности настроек драйверов
  7. Результаты тестов: коротко о 2D и предельные тесты из DirectX 8.1 SDK
  8. Результаты тестов: Синтетические тесты 3DMark2001 SE
  9. Результаты тестов: Игровые тесты 3DMark2001 SE
  10. Качество 3D в играх
  11. Результаты тестов: Профессиональные тесты: SPECviewperf 7.0
  12. Результаты тестов: Профессиональные тесты: Discreet 3DS MAX 4.26
  13. Выводы

Р10 можно по праву приоритета считать основателем крепнущего племени гибко программируемых GPU. При ближайшем рассмотрении становится ясно, что этот чип занимает особенное положение. P10 — ничто иное, как железное воплощение проекта стандарта API OpenGL 2.0. В том понимании, в котором этот API видится 3Dlabs. Мы уже подробно писали о проекте OpenGL 2.0 и не раз уделяли внимание возможностям DirectX 9 (в аналитических материалах по Matrox Parhelia-512 и ATI RADEON 9700). Внимательный читатель заметил: несмотря на общность идей, связанную с возможностью гибко программировать работу графического ускорителя, можно легко найти отличия в реализации этих идей, даже на уровне API. Теперь, с появлением в нашей лаборатории карты на базе 3Dlabs P10, мы сделаем выводы об отличиях на уровне железа.

Позиционирование

Ни в коей мере не следует напрямую сравнивать эту карту (на уровне спецификаций, частот или скорости в игровых тестах и приложениях) с новейшими игровыми решениями — чип разрабатывался как профессиональный ускоритель OpenGL приложений, со всеми вытекающими отсюда последствиями. Известно, что игровые приложения, в своей основной массе, по-прежнему, нуждаются в скорости закраски и текстурирования, в то время как профессиональные — в скорости трансформации и освещения. Кроме того, игровые приложения (не будем пока вспоминать о будущих, завязанных на шейдеры играх, например, на основе движка Next Doom) пока не требуют какого-либо выдающегося набора дополнительных возможностей. Тем паче не идет разговор о краевом сглаживании или экзотических методах качественного мультисамплинга и AA. Даже максимальные установки анизотропной фильтрации редко задействуются обычными игроками.

Профессиональный ускоритель — таково позиционирование этого чипа разработчиками. Само собой разумеется, что Creative, купивший 3Dlabs, обращает свое внимание в первую очередь на массовый и, следовательно, игровой рынок (вспомните, что в свое время произошло с также приобретенным Creative разработчиком профессиональных звуковых решений EMU и его творениями). Очевидно, что чуть позже Р10 также будет выпущен на игровое поле, возможно, с некоторыми аппаратными модификациями (с архитектурной точки зрения этот GPU является очень легко масштабируемым в любом направлении — как в сторону увеличения fillrate, так и в любую другую). Возможно, что Creative на первых порах ограничится и просто заточенными под игры драйверами. С нашей точки зрения, подобный сценарий позволителен только при условии невысокой цены игровых решений на базе P10 — по некоторым причинам (мы вернемся к ним далее), конкурировать на игровом поле с будущими топовыми решениями NVIDIA и ATI им не под силу. Вне зависимости от степени оптимизации драйверов.

А теперь давайте посмотрим, как позиционируются карты на основе P10 внутри семейства профессиональных ускорителей 3Dlabs:

Линейка продуктов

  • Wildcat VP970: 128 MB of 256-bit DDR SDRAM; 225M Vertices/Sec; 42G AA Samples/Sec; Решение предназначено для тяжелых процессов отрисовки в CAD/DCC приложениях всех видов.
  • Wildcat VP870: 128 MB of 256-bit DDR SDRAM; 188M Vertices/Sec; 35G AA Samples/Sec; Решение также предназначено для CAD/DCC приложений (но более легкого плана).
  • Wildcat VP760: 64 MB of 256-bit DDR SDRAM; 165M Vertices/Sec; 23G AA Samples/Sec; Это решение также позиционируется для CAD приложений и являет собою разумный компромисс между ценой и мощностью.

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

Как мы видим, несмотря на революционность нового изделия, это не High-End, в отличие от всех новинок от NVIDIA или ATI. Наверху сегмента по-прежнему тяжеловесы семейства Wildcat III, настоящие "львы" рынка профессиональной 3D-графики. Вместе с тем, как мы убедимся далее, даже "середнячок из середины" — Wildcat VP870 — способен соперничать с High-End продуктом от NVIDIA — Quadro4 900XGL. Хотя и позиционируется самой 3Dlabs, как конкурент Quadro4 750XGL.

Ну а теперь приступим к рассмотрению характеристик P10.

Спецификации

Приведем уже традиционные ТТХ ускорителя и карты на его основе — VP870:

  1. Технология производства: 0.15 микрон;
  2. Число транзисторов: более 76 миллионов;
  3. Тактовая частота ядра: неизвестна (предположительно 200-250 МГц);
  4. Шина памяти: 256 бит DDR;
  5. Максимальный объем локальной памяти: 256 Мб;
  6. Объем локальной памяти на тестируемой карте: 128 Мб;
  7. Тактовая частота памяти: неизвестна (предположительно 250-300 DDR МГц), пропускная способность около 17-20 Гб/сек;
  8. Интерфейсная шина: AGP 4x, пропускная способность 1 Гб/сек;
  9. Полная поддержка всех возможностей проекта стандарта OpenGL 2.0 от 3Dlabs ;
  10. Оптимизированные для профессиональных приложений драйверы;
  11. 16 скалярных плавающих (F32) гибко конфигурируемых вершинных процессоров (более гибкий аналог четырех векторных 4D процессоров R300 или NV30);
  12. 64 плавающих (F32) процессора для генерации текстурных координат;
  13. 64 непрограммируемых блока для выборки и фильтрации значений текстур
  14. Поддержка трилинейной и анизотропной фильтрации;
  15. 64 целочисленных (фиксированная точка) процессора для исполнения пиксельных шейдеров;
  16. Возможность произвольно программировать (!) последние ступени пиксельного конвейера, отвечающие за чтение и запись значений в кадровый буфер, сглаживание и мултисамплинг;
  17. В буфер кадра может быть выведено (без учета мултисамплинга) не более 4 полностью рассчитанных пикселей за такт.
  18. Неполная (!) поддержка возможностей DX9 (пиксельные конвейеры на шейдерной стадии оперируют только с целочисленной арифметикой):
    • Пиксельные шейдеры версии 1.4;
    • Вершинные шейдеры версии 2.0 (?);
    • Мультисамплинг до 8x включительно;
    • Аппаратная тесселяция N-Patches с картами смещения (Displacement Mapping) и, по желанию, адаптивным уровнем детализации;
  19. Возможность многопоточного исполнения команд — построение изображения параллельно для нескольких приложений и окон с аппаратным менеджментом потоков команд;
  20. Технология экономии пропускной полосы памяти на основе поблочной закраски треугольников (блоки 8х8);
  21. HSR — возможность раннего отбрасывания невидимых блоков 8х8 и ранний Z тест на пиксельном уровне;
  22. Два независимых CRTC;
  23. Два встроенных 10 бит 400 МГц RAMDAC с аппаратной гамма коррекцией;
  24. Встроенный (два?) DVI (TMDS трансмиттер) интерфейс.
  25. Встроенный цифровой интерфейсный видео порт общего назначения.




УскорительR200(128 MB)NV25(Ti 4600)R300NV30 (1)Parhelia 512P10(VP870)
Технология; число транзисторов, млн0.15; 620.15; 680.15; 1070.13; 1200.15; 960.15; 72
AGP4x4x8x8x
Шина памяти, бит128 DDR128 DDR256 DDR (II) (2)256 DDR II256 DDR256 DDR
Частота памяти, МГц275325>300>400275250…300 (?)
Частота ядра, МГц275300300400220200…250 (?)
Пиксельных конвейеров4488464 (9)
Текстурных модулей4х24х28х1 (3)8х24х464 (10)
Текстур за проход6416 (4)16 (4)48 (5)
Вершинных конвейеров2244416 (7)
Фиксированный блок T&LДаНетНетНетНетНет
N-PatchesDX8НетDM (DX9)DM (DX9)DM (DX9)DM (DX9)
Вершинные шейдеры1.11.12.02.0 (6)2.0 (?)2.0 (?)
Пиксельные шейдеры1.41.32.02.0 (6)1.31.2 (?)
Контроллер памяти2х644х324х644х641х256?
RAMDAC, МГц4004002*4002*400 (?)2*4002*400
Технологии экономииДа(HyperZ II)Да(LightSpeed II)Да(HyperZ III)Да (LightSpeed 3 ?)Только ранний Z тестБлоки 8х8 (8)


Примечание:

  • (1) Компиляция на основе официальных данных и слухов
  • (2) Скорее всего, наравне с DDR будет поддерживаться и DDR II.
  • (3) Каждый текстурный модуль способен самостоятельно делать трилинейную выборку.
  • (4) Согласно требованиям DX9, за один проход может быть использовано до 16 различных текстур с 8 предварительно вычисленными (интерполированными по поверхности треугольника) полными 4D текстурными координатами. При этом, в пиксельном шейдере может быть сделано до 32 выборок конкретных значений из этих текстур.
  • (5) Может быть использовано до 8 текстур с предварительно вычисленными или интерполированными полными текстурными координатами. В пиксельном шейдере может быть сделано до 16 выборок конкретных значений из этих текстур.
  • (6) Судя по всему, в железе будут реализованы возможности, превышающие требования DX для вершинных и пиксельных шейдеров версии 2.0.
  • (7) 16 скалярных плавающих процессоров объединяются по 2, 3 или 4 для обработки векторных величин. Т.е. полные 4D векторные команды выполняются по 4 за такт, так же, как и на R300 или NV30, а скалярные и 2D/3D векторные команды исполняются в большем числе, в зависимости от комбинации команд ждущих выполнения.
  • (8) Закраска треугольников по блокам 8х8 для оптимизации кеширования и предварительного HSR на блочном и пиксельном уровне.
  • (9) Число параллельных 32 бит целочисленных процессоров для обработки пиксельных шейдеров. Процессоры могут быть гибко переконфигурированы для поддержки того или иного формата вычислений, например, целочисленных форматов R10G10B10A2 или R16G16B16 . Во втором случае число параллельно обрабатываемых пикселей снизится вдвое (будут задействованы по два процессора на один пиксель). Кроме того, есть важное ограничение — чипом может быть записано в буфер кадра (т.е. физически закрашено) максимум 4 точки за такт. Из-за существенного числа процессоров и ограничений технологии .15 3Dlabs не смогли поддержать формат с плавающей точкой, однако планируют сделать это в будущих чипах.
  • (10) Судя по всему, реальное число полноценных текстурных блоков ниже — 16 или даже 8.

Архитектура P10

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

Приведем крупномасштабную блочную схему P10:

В наличии VGA совместимое графическое ядро, два CRTC, а также специальный цифровой интерфейс для импорта (захвата) видеоданных.

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

который не только дирижирует 3D конвейером, организуя некий графический аналог "многозадачности" (на основе переключения контекстов), распространенной в современных CPU, но и выполняет приоритетные команды, требующие немедленной реакции "вне очереди", такие, как переключение видеостраниц и пр.

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

и вновь налицо четкая аналогия с современными CPU, снабженными MMU с поддержкой виртуальной памяти на основе страниц. Здесь роль страниц играют прямоугольные блоки текстур, кешируемые в локальной памяти ускорителя. Подкачка текстур через AGP DIME или PCI DMA осуществляется чипом автоматически, по мере надобности. Таким образом, мы получаем не только эффективное кеширование больших наборов текстур, но и важную для профессиональной графики возможность работать с отдельными текстурами, размер которых может превышать объем локальной памяти ускорителя (!).

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

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

Вначале команды попадают в вершинный процессор:

Способный, в отличие от прочих распространных ныне программируемых чипов, не только считывать, но и записывать в память обработанные параметры вершин. Подобная гибкость позволяет запрограммировать практически любые алгоритмы тесселяции сплайновых поверхностей или других представлений HOS и SS (Subdivision Surfaces), включая N-Patches. Интересно, что вершинный процессор способен считывать не только значения вершин и их атрибутов, но и значения текстур, что позволяет реализовать различные алгоритмы пертурбации и генерации геометрии на основе текстурных карт высот, нормалей и других считываемых из текстур значений. Характерный пример подобных алгоритмов — уже не раз описанный нами DM (Displacement Mapping). В этом плане совместимость P10 с DX9 беспокойства не вызывает. Интересно, что в отличие от NVIDIA, MATROX и ATI, в наличии не 4 векторных процессора, а 16 скалярных. Специальный блок (VP Manager) дирижирует этими процессорами на основе команд вершинного шейдера, объединяя их при необходимости для векторной обработки двух, трех или четырехмерных значений. По сравнению с общепринятыми четырьмя векторными процессорами, подобное решение гарантирует равную или превосходящую производительность. Разумеется, при условии одинаковой частоты и сходной производительности выполняющих атомарные операции АЛУ.

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

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

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

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

Вот так происходит раннее определение необходимости закрашивать блоки и отдельные пикселы (см. также общую схему):

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

Закраска выполняется параллельно для 64 пикселов, т.е. вплоть до целого блока 8х8 (!). Каждый из 64 пикселов проходит следующий путь через фиксированные и программируемые аппаратные блоки:

Программируемыми являются плавающий процессор для генерации координат (Coordinate) и целочисленный пиксельный процессор (Shader). Выбирающие и фильтрующие текстуры блоки Load и Filter реализованы аппаратно и способны выполнять билинейную и трилинейную фильтрацию. Но при необходимости их результаты могут возвращаться в процессор генерации координат, видимо, в том числе и для организации анизотропной фильтрации или более сложных методов выборки текстур. Разумеется, имея программируемый процессор для генерации текстурных координат, мы можем, в том числе, работать и с объемными текстурами и с кубическими или сферическими картами среды. Напомним, что, к сожалению, пиксельный процессор является целочисленным, и это не позволяет ему быть совместимым с пиксельными шейдерами версии 2.0 из DX9.

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

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

Напоследок, прежде чем приступить к тестам производительности, приведем список поддерживаемых текущими драйверами возможностей DirectX 8:

  • Размер текстур — до 2048x2048, возможны неквадратные текстуры
  • Максимальная степень анизотропии — 8
  • Максимальное число источников света — 16
  • Максимальное число текстур за один проход — 8
  • Число плоскостей отсечения — 6
  • Максимальный размер спрайтов — 127
  • Максимальное число примитивов за один вызов — 1073741823 (много)
  • Размер вершинного буфера — 65536
  • Максимальное число потоков вершин — 8
  • Версия вершинных шейдеров — 1.1
  • Число констант вершинного шейдера — 128
  • Версия пиксельных шейдеров — 1.2
  • Максимальное значение пиксельного шейдера — 8
  • Режимы мултисамплинга: нет, 2, 4, 8 сэмплов
  • Форматы итогового буфера:
    • D3DFMT_A8R8G8B8
    • D3DFMT_X8R8G8B8
    • D3DFMT_R5G6B5
    • D3DFMT_X1R5G5B5
    • D3DFMT_A1R5G5B5
  • Форматы буфера глубины:
    • D3DFMT_D32
    • D3DFMT_D24S8
    • D3DFMT_D16
    • D3DFMT_D24X8
  • Форматы текстур:
    • D3DFMT_A8R8G8B8
    • D3DFMT_X8R8G8B8
    • D3DFMT_R5G6B5
    • D3DFMT_X1R5G5B5
    • D3DFMT_A1R5G5B5
    • D3DFMT_A4R4G4B4
    • D3DFMT_A8
    • D3DFMT_L8
    • D3DFMT_A8L8
    • D3DFMT_A4L4
    • D3DFMT_V8U8
    • D3DFMT_L6V5U5
    • D3DFMT_X8L8V8U8
    • D3DFMT_Q8W8V8U8
    • D3DFMT_DXT1
    • D3DFMT_DXT2
    • D3DFMT_DXT3
    • D3DFMT_DXT4
    • D3DFMT_DXT5
  • Форматы кубических текстур:
    • D3DFMT_A8R8G8B8
    • D3DFMT_X8R8G8B8
    • D3DFMT_R5G6B5
    • D3DFMT_X1R5G5B5
    • D3DFMT_A1R5G5B5
    • D3DFMT_A4R4G4B4
    • D3DFMT_DXT1
    • D3DFMT_DXT2
    • D3DFMT_DXT3
    • D3DFMT_DXT4
    • D3DFMT_DXT5
  • Форматы объемных текстур:
    • D3DFMT_A8R8G8B8
    • D3DFMT_X8R8G8B8
    • D3DFMT_R5G6B5
    • D3DFMT_X1R5G5B5
    • D3DFMT_A1R5G5B5
    • D3DFMT_A4R4G4B4
    • D3DFMT_A8
    • D3DFMT_L8
    • D3DFMT_A8L8
    • D3DFMT_A4L4
    • D3DFMT_DXT1
    • D3DFMT_DXT2
    • D3DFMT_DXT3
    • D3DFMT_DXT4
    • D3DFMT_DXT5
  • Режимы фильтрации обычных текстур:
    • D3DPTFILTERCAPS_MINFPOINT
    • D3DPTFILTERCAPS_MINFLINEAR
    • D3DPTFILTERCAPS_MINFANISOTROPIC
    • D3DPTFILTERCAPS_MIPFPOINT
    • D3DPTFILTERCAPS_MIPFLINEAR
    • D3DPTFILTERCAPS_MAGFPOINT
    • D3DPTFILTERCAPS_MAGFLINEAR
    • D3DPTFILTERCAPS_MAGFANISOTROPIC
  • Режимы фильтрации кубических текстур:
    • D3DPTFILTERCAPS_MINFPOINT
    • D3DPTFILTERCAPS_MINFLINEAR
    • D3DPTFILTERCAPS_MIPFPOINT
    • D3DPTFILTERCAPS_MIPFLINEAR
    • D3DPTFILTERCAPS_MAGFPOINT
    • D3DPTFILTERCAPS_MAGFLINEAR
  • Режимы фильтрации объемных текстур:
    • D3DPTFILTERCAPS_MINFPOINT
    • D3DPTFILTERCAPS_MAGFPOINT

В общем и целом — все на уровне, возможность использовать до 16 источников света и 8 текстур за проход выглядит привлекательно. Разумеется, поддерживается полный спектр операций с буфером шаблонов и полный набор режимов проверки глубины. Удивляет только отсутствие какой-либо (даже билинейной) фильтрации объемных текстур, но, возможно, это вопрос драйверов. Как бы там ни было, в пределах DX8 реализованы все необходимые базовые возможности, в том числе превышающие NV25. Ясно что с DX9 ситуация будет не столь безоблачна, хотя бы из-за пиксельных шейдеров, однако сказать что-либо точно можно будет только с выходом DX9 драйверов для P10.

Напоследок приведем список поддерживаемых на данный момент OpenGL расширений:

Matrox, ICD for Parhelia version 1.2 NVIDIA, GeForce4 Ti 4400/AGP/SSE2, version 1.3.1 3Dlabs, Wildcat VP870, version: 1.2.0
GL_ARB_multitexture GL_ARB_imaging GL_ARB_multitexture
GL_ARB_point_parameters GL_ARB_multisample GL_ARB_texture_env_add
GL_ARB_texture_compression GL_ARB_multitexture GL_ARB_texture_env_combine
GL_ARB_texture_cube_map GL_ARB_texture_border_clamp GL_ARB_texture_env_crossbar
GL_ARB_texture_env_add GL_ARB_texture_compression GL_ARB_texture_border_clamp
GL_ARB_texture_env_combine GL_ARB_texture_cube_map GL_ARB_texture_cube_map
GL_ARB_texture_env_dot3 GL_ARB_texture_env_add GL_ARB_texture_env_dot3
GL_ARB_transpose_matrix GL_ARB_texture_env_combine GL_EXT_bgra
GL_S3_s3tc GL_ARB_texture_env_dot3 GL_EXT_blend_subtract
GL_ATI_element_array GL_ARB_transpose_matrix GL_EXT_blend_minmax
GL_ATI_vertex_array_object GL_S3_s3tc GL_EXT_compiled_vertex_array
GL_EXT_bgra GL_EXT_abgr GL_EXT_polygon_offset
GL_EXT_blend_color GL_EXT_bgra GL_EXT_rescale_normal
GL_EXT_blend_func_separate GL_EXT_blend_color GL_EXT_separate_specular_color
GL_EXT_blend_logic_op GL_EXT_blend_minmax GL_EXT_secondary_color
GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_texture3D
GL_EXT_blend_subtract GL_EXT_compiled_vertex_array GL_EXT_texture_object
GL_EXT_secondary_color GL_EXT_separate_specular_color GL_EXT_texture_edge_clamp
GL_EXT_compiled_vertex_array GL_EXT_fog_coord GL_EXT_texture_env_add
GL_EXT_draw_range_elements GL_EXT_multi_draw_arrays GL_EXT_texture_env_combine
GL_EXT_element_array GL_EXT_packed_pixels GL_EXT_texture_env_dot3
GL_EXT_fog_coord GL_EXT_paletted_texture GL_EXT_texture_cube_map
GL_EXT_multi_draw_arrays GL_EXT_point_parameters GL_EXT_texture_filter_anisotropic
GL_EXT_packed_pixels GL_EXT_rescale_normal GL_EXT_multi_draw_arrays
GL_EXT_point_parameters GL_EXT_clip_volume_hint GL_SGIS_multitexture
GL_EXT_rescale_normal GL_EXT_draw_range_elements GL_SGIS_texture_border_clamp
GL_EXT_secondary_color GL_EXT_shared_texture_palette GL_SGIS_texture_lod
GL_EXT_separate_specular_color GL_EXT_stencil_wrap GL_NV_register_combiners
GL_EXT_stencil_wrap GL_EXT_texture3D GL_NV_vertex_program
GL_EXT_subtexture GL_EXT_texture_compression_s3tc GL_NV_texgen_reflection
GL_EXT_texture3D GL_EXT_texture_edge_clamp GL_WIN_swap_hint
GL_EXT_texture_compression_s3tc GL_EXT_texture_env_add GL_KTX_buffer_region
GL_EXT_texture_cube_map GL_EXT_texture_env_combine -
GL_EXT_texture_edge_clamp GL_EXT_texture_env_dot3 -
GL_EXT_texture_env_add GL_EXT_texture_cube_map -
GL_EXT_texture_filter_anisotropic GL_EXT_texture_filter_anisotropic -
GL_EXT_texture_lod_bias GL_EXT_texture_lod -
GL_EXT_vertex_array GL_EXT_texture_lod_bias -
GL_EXT_vertex_array_object GL_EXT_texture_object -
GL_EXT_vertex_shader GL_EXT_vertex_array -
GL_EXT_texture_env_combine GL_EXT_vertex_weighting -
GL_EXT_texture_env_dot3 GL_HP_occlusion_test -
GL_KTX_buffer_region GL_IBM_texture_mirrored_repeat -
GL_MTX_fragment_shader GL_KTX_buffer_region -
GL_NV_texgen_reflection GL_NV_blend_square -
GL_SGIS_multitexture GL_NV_copy_depth_to_color -
GL_SGIS_texture_lod GL_NV_evaluators -
WGL_EXT_swap_control GL_NV_fence -
- GL_NV_fog_distance -
- GL_NV_light_max_exponent -
- GL_NV_multisample_filter_hint -
- GL_NV_occlusion_query -
- GL_NV_packed_depth_stencil -
- GL_NV_point_sprite -
- GL_NV_register_combiners -
- GL_NV_register_combiners2 -
- GL_NV_texgen_reflection -
- GL_NV_texture_compression_vtc -
- GL_NV_texture_env_combine4 -
- GL_NV_texture_rectangle -
- GL_NV_texture_shader -
- GL_NV_texture_shader2 -
- GL_NV_texture_shader3 -
- GL_NV_vertex_array_range -
- GL_NV_vertex_array_range2 -
- GL_NV_vertex_program -
- GL_NV_vertex_program1_1 -
- GL_SGIS_generate_mipmap -
- GL_SGIS_multitexture -
- GL_SGIS_texture_lod -
- GL_SGIX_depth_texture -
- GL_SGIX_shadow -
- GL_WIN_swap_hint -
- WGL_EXT_swap_control -






Дополнительно

iXBT BRAND 2016

«iXBT Brand 2016» — Выбор читателей в номинации «Процессоры (CPU)»:
Подробнее с условиями участия в розыгрыше можно ознакомиться здесь. Текущие результаты опроса доступны тут.

Нашли ошибку на сайте? Выделите текст и нажмите Shift+Enter

Код для блога бета

Выделите HTML-код в поле, скопируйте его в буфер и вставьте в свой блог.