NVIDIA GeForce FX 5800 Ultra 128MB


"Если долго мучиться, что-нибудь получится"
(А.Пугачева)


Как обычно, предваряя большой базовый материал анализа работы нового акселератора, мы настоятельно рекомендуем прочитать аналитическую статью, посвященную архитектуре и спецификациям NVIDIA GeForce FX (NV30)

СОДЕРЖАНИЕ

  1. Общие сведения
  2. Особенности видеокарты NVIDIA GeForce FX 5800 Ultra 128MB
  3. Конфигурации тестовых стендов и особенности настроек драйверов
  4. Результаты тестов: коротко о 2D
  5. Синтетические тесты RightMark3D: идеология и описание тестов
  6. Результаты тестов: RightMark3D: Pixel Filling
  7. Результаты тестов: RightMark3D: Geometry Processing Speed
  8. Результаты тестов: RightMark3D: Hidden Surface Removal
  9. Результаты тестов: RightMark3D: Pixel Shading
  10. Результаты тестов: RightMark3D: Point Sprites
  11. Результаты тестов: Синтетические тесты 3DMark2001 SE
  12. Дополнительная теоретическая информация и выводы из результатов синтетических тестов
  13. Информация по анизотропной фильтрации и по анти-алиасингу
  14. Архитектурные особенности и перспективы
  15. Результаты тестов: Игровые тесты 3DMark2001 SE: Game1
  16. Результаты тестов: Игровые тесты 3DMark2001 SE: Game2
  17. Результаты тестов: Игровые тесты 3DMark2001 SE: Game3
  18. Результаты тестов: Игровые тесты 3DMark2001 SE: Game4
  19. Результаты тестов: Игровые тесты 3DMark03: Game1
  20. Результаты тестов: Игровые тесты 3DMark03: Game2
  21. Результаты тестов: Игровые тесты 3DMark03: Game3
  22. Результаты тестов: Игровые тесты 3DMark03: Game4
  23. Результаты тестов: Quake3 ARENA
  24. Результаты тестов: Serious Sam: The Second Encounter
  25. Результаты тестов: Return to Castle Wolfenstein
  26. Результаты тестов: Code Creatures DEMO
  27. Результаты тестов: Unreal Tournament 2003 DEMO
  28. Результаты тестов: AquaMark
  29. Результаты тестов: RightMark 3D
  30. Результаты тестов: DOOM III Alpha version
  31. Качество 3D: Анизотропная фильтрация
  32. Качество 3D: Анти-алиасинг
  33. Качество 3D в целом
  34. Выводы

Установка и драйверы

Рассмотрим конфигурацию тестового стенда, на котором проводились испытания карт:

  • Компьютер на базе Pentium 4 (Socket 478):
    • процессор Intel Pentium 4 3066 (HT=ON);
    • системная плата ASUS P4G8X (iE7205);
    • оперативная память 1024 MB DDR SDRAM;
    • жесткий диск Seagate Barracuda IV 40GB;
    • операционная система Windows XP SP1.

На стенде использовались мониторы ViewSonic P810 (21") и ViewSonic P817 (21").

При тестировании применялись драйверы от NVIDIA версии 42.68, VSync отключен, компрессия текстур отключена в приложениях. Установлен DirectX 9.0.

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

  • Gainward Powerpack Ultra/750 (GeForce Ti 4600, 300/325 (650) МГц, 128 МБ);
  • Hercules 3D Prophet 9700 PRO (RADEON 9700 PRO, 325/310 (620) МГц, 128 МБ, driver 6.292).

Настройки драйверов





















Настройки работы АА и анизотропии вынесены на одну закладку и работают одновременно и в OpenGL, и в Direct3D. Среди новшеств видим режимы АА - 6xS и 8xS. Позже мы рассмотрим их более подробно.

Настройки Direct3D и OpenGL стандартны и уже привычны многим пользователям видеокарт на базе процессоров от NVIDIA. Обратим внимание на то, что в разделе D3D есть возможность принудительно форсировать частоту смены кадров в том или ином разрешении.

Теперь самый интересный раздел - тактовые частоты. Получить доступ к этой закладке (а также к некоторым другим) можно, запустив патч к registry Windows XP. Так вот, мы видим, что частоты работы карты разделены на 2D и 3D. По умолчанию в 2D плата работает на частотах 300/300 (600) МГц, а в 3D, как и ожидалось, 500/500 (1000) МГц. Интересно отметить, что принудительный подъем частоты работы в 2D до 500/500 (1000) не вызывает увеличения оборотов кулера. Впрочем, после перезагрузки режим работы в 2D (300/300 (600)) восстанавливается, невзирая на установленную галочку использования заданных частот при перезагрузке Windows.

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

На этом рассмотрение особенностей драйверов мы заканчиваем.

Результаты тестов

  1. Основой для оценки карт у нас являются РЕАЛЬНЫЕ приложения, т.е. игры. Мы постоянно их используем и корректируем список в соответствии с реалиями времени, добиваясь большей репрезентативности API и жанров;
  2. Мы интенсивно используем синтетические тесты (RightMark3D Synthetic и части 3DMark2001) но следует четко понимать, что делается это не для общей оценки карты, а для глубокого анализа функционирования GPU и его отдельных блоков, для своеобразной "разведки" особенностей его поведения, а также для корректного комментирования результатов, полученных на реальных играх и приложениях.
  3. Мы используем бенчмарки типа 3DMark, назовем их one-number-bench, дающие в результате некое финальное кол-во "попугаев" НЕ для оценки карт, а для того, чтобы удовлетворить потребности наших читателей, многие из которых хотят для удобства видеть и простое, наглядное число "попугаев", полученых той или иной картой.

2D-графика

Традиционно начнем с 2D. Удивительно, но факт: качество отменное! в 1600х1200 при 85Гц комфорт и уют. В 1280х1024 при 120Гц просто все великолепно!

Еще в письмах к декабристам император Николай I говорил, что оценка 2D-качества есть вещь субъективная (но декабристы считали, видимо, иначе. Тогда за несогласие - Петропавловская крепость, теперь - возмущения в форуме насчет "почему же нет ОБЪЕКТИВНЫХ тестов 2D"). Поэтому напомню, что качество зависит от конкретного экземпляра, да и связка карта-монитор может по-прежнему играть огромную роль. Прежде всего, надо обращать внимание на качество монитора и кабеля. Я напомню, что тестирование 2D у нас происходит на мониторе ViewSonic P817-E совместно с BNC-кабелем Bargo.

Синтетические тесты RightMark 3D (DirectX 9)

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

Набор синтетических тестов из разрабатываемого нами тестового пакета RightMark 3D включает в себя (на данный момент) следующие тесты:

  1. Тест на закраску и фильтрацию текстур (Pixel Filling Test);
  2. Тест на производительность обработки геометрии (Geometry Processing Speed Test);
  3. Тест на производительность работы с отсечением невидимых точек и примитивов (Hidden Surface Removal Test);
  4. Тест на производительность сложных пиксельных шейдеров (Pixel Shader Test);
  5. Тест на производительность отрисовки, освещения и анимации спрайтов (Point Sprites Test).

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

Идеология синтетических тестов

Основная идея, стоящая за всеми нашими тестами — острая фокусировка на производительности той или иной конкретной подсистемы чипа. В отличие от реальных приложений, измеряющих эффективность работы ускорителя в том или ином практическом применении что называется «в комплексе», синтетические тесты пытаются вычленить отдельные аспекты производительности. Зачем, спросите вы? Дело в том, что между выходом новых ускорителей и приложений, эффективно и всесторонне использующих их возможности, зачастую проходит год или даже более. При этом, многие энтузиасты, желающие находиться на переднем краю технологий, вынуждены принимать решение о покупке того или иного ускорителя практически вслепую — основываясь на результатах тестирования заведомо устаревшего программного обеспечения. Никто не может гарантировать им, что в будущем, в момент выхода столь ожидаемых ими игр, ситуация не поменяется кардинально. Кроме энтузиастов, которые добровольно идут на риск весьма дорогой лотереи по покупке только что появившихся продуктов, в непростую ситуацию попадает еще несколько категорий людей:

  • Первая категория — покупающие себе компьютер, что называется «по максимуму» — на длительное время — и не желающие связываться с постоянными обновлениями железа. Для этих людей важно сделать правильный выбор, максимально увеличив срок пригодности их компьютера для приложений и применений, которые еще только будут появляться в будущем.
  • Вторая категория — разработчики программного обеспечения, с первой минуты появления новых ускорителей вынужденные обращать пристальное внимание на их возможности и балансировку, дабы на основе этих данных грамотно спроектировать и сбалансировать не только движок (код), но и контент (уровни, модели) с учетом эффективного использования техники, которая получит распространение к моменту появления создаваемых ими приложений в продаже. Синтетические тесты помогут им сделать выводы, выбрав те или иные пути для реализации своих замыслов и, что ничуть не менее важно, разумно ограничив простор своей фантазии :-).
  • И последняя категория людей — IT-аналитики (например, из крупных оптовых фирм) и профессиональные авторы обзоров компьютерного железа — люди, которые по долгу их рода занятий зачастую вынуждены делать выводы о потенциале тех или иных изделий еще до их официального анонса.

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

Описания синтетических тестов набора RightMark 3D

Pixel Filling

Данный тест выполняет целый ряд задач. В том числе:

  1. Измерение производительности закраски буфера кадров
  2. Измерение производительности различных режимов фильтрации текстур
  3. Измерение эффективности работы (кэширования) с текстурами различного объема
  4. Измерение эффективности работы (кэширования и компрессии) с текстурами различных форматов
  5. Измерение эффективности мультитекстурирования
  6. Наглядное сравнение качества реализации тех или иных режимов фильтрации текстур

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

Четыре стороны пирамиды состоят каждая из двух треугольников. Малое число треугольников позволяет устранить зависимость от геометрической производительности, не имеющей никакого отношения к исследуемым данным тестом вопросам. На каждую точку во время закраски накладывается от 1 до 8 текстур. При желании можно полностью отключить текстурирование (0 текстур) и измерять только скорость закраски с использованием константного значения цвета.

Во время тестирования вершина пирамиды равномерно перемещается по кругу, а само основание при этом вращается вокруг оси Z:

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

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

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

И сделать выводы об алгоритме их смешения и выбора.

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Выделять ли цветом mip-уровни
  • Режим работы (и максимальное число накладываемых на один пиксель текстур):
    • Vertex Shaders 1.1 и Fixed Function Blend Stages (до 8 текстур)
    • Vertex Shaders 2.0 и Fixed Function Blend Stages (до 8 текстур)
    • Vertex Shaders 1.1 и Pixel Shaders 1.1 (до 4 текстур)
    • Vertex Shaders 1.1 и Pixel Shaders 1.4 (до 6 текстур)
    • Vertex Shaders 2.0 и Pixel Shaders 2.0 (до 8 текстур)
  • Число текстур, накладываемых на точку:
    • 0 (только закраска)
    • от 1 до 8
  • Размер текстур:
    • 128х128
    • 256x256
    • 512x512
  • Формат текстур:
    • A8R8G8B8
    • X8R8G8B8
    • A1R5G5B5
    • X1R5G5B5
    • DXT1
    • DXT2
    • DXT3
    • DXT4
    • DXT5
  • Тип фильтрации:
    • отсутствует
    • билинейная
    • трилинейная
    • анизотропная
    • анизотропная + трилинейная

Результат работы теста выдается в двух единицах — число кадров в секунду (FPS) и, что более удобно, число закрашенных в секунду пикселей (FillRate). Последнее число играет двойную роль. В режиме без текстур мы измеряем непосредственно скорость записи в буфер кадра. Таким образом, этот параметр означает число закрашенных в секунду точек экрана (Pixel FillRate). В режиме с использованием какого-либо числа текстур — число выбранных и отфильтрованных значений текстур в секунду (Texturing Rate, Texture Fill Rate).

Приведем пример пиксельного шейдера, используемого для закраски в ходе самого интенсивного варианта этого теста (PS/VS 2.0, 8 текстур):

ps_2_0

dcl t0
dcl t1
dcl t2
dcl t3
dcl t4
dcl t5
dcl t6
dcl t7

dcl_2d s0
dcl_2d s1
dcl_2d s2
dcl_2d s3
dcl_2d s4
dcl_2d s5
dcl_2d s6
dcl_2d s7

texld r0, t0, s0
texld r1, t1, s1
texld r2, t2, s2
texld r3, t3, s3
texld r4, t4, s4
texld r5, t5, s5
texld r6, t6, s6
texld r7, t7, s7

mov r11, r0
lrp r11, c0, r11, r1
lrp r11, c0, r11, r2
lrp r11, c0, r11, r3
lrp r11, c0, r11, r4
lrp r11, c0, r11, r5
lrp r11, c0, r11, r6
lrp r11, c0, r11, r7

mov oC0, r11

Geometry Processing Speed

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

  1. Ambient Lighting — простейшее константное освещение
  2. 1 Diffuse Light — один диффузный источник света
  3. 2 Diffuse Lights — два диффузных источника света
  4. 3 Diffuse Lights — три диффузных источника света
  5. 1 Diffuse + Specular Light — один диффузно-спекулярный источник
  6. 2 Diffuse + Specular Lights — два диффузно-спекулярных источника
  7. 3 Diffuse + Specular Lights — три диффузно-спекулярных источника

В ходе теста выводится несколько экземпляров одной и той же модели с большим числом полигонов. Каждый экземпляр модели имеет свои параметры геометрической трансформации и относительного расположения источников света. Размер модели выбран крайне малым (большинство полигонов сравнимы или меньше экранного пикселя):

и таким образом разрешение и закраска не оказывает влияния на результаты теста:

Источники света всячески перемещаются во время теста, дабы обеспечить равномерное разнообразие исходных расчетных параметров.

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

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Режим программной эмуляции вершинных шейдеров и TCL
  • Режим работы:
    • Fixed Function TCL и Fixed Function Blend Stages
    • Vertex Shaders 1.1 и Fixed Function Blend Stages
    • Vertex Shaders 2.0 и Fixed Function Blend Stages
    • Vertex Shaders 1.1 и Pixel Shaders 1.1
    • Vertex Shaders 1.1 и Pixel Shaders 1.4
    • Vertex Shaders 2.0 и Pixel Shaders 2.0
  • Детализация геометрии:
    • 1 (низкая)
    • 2 (средняя)
    • 3 (высокая)
  • Модель освещения (определяет сложность расчетов):
    • Ambient Lighting — простейшее константное освещение
    • 1 Diffuse Light — один диффузный источник света
    • 2 Diffuse Lights — два диффузных источника света
    • 3 Diffuse Lights — три диффузных источника света
    • 1 (Diffuse + Specular) Light — один диффузно-спекулярный источник
    • 2 (Diffuse + Specular) Lights — два диффузно-спекулярных источника
    • 3 (Diffuse + Specular) Lights — три диффузно-спекулярных источника

Результат работы теста выдается в двух единицах — число кадров в секунду (FPS) и, что более удобно число трансформированных и освещенных за секунду треугольников (PPS — Polygons Per Second).

Приведем пример вершинного шейдера (VS 2.0), используемого для трансформации и расчета освещения от задаваемого извне числа диффузно-спекулярных источников в этом тесте:

vs_2_0

dcl_position v0
dcl_normal v3

//
// Position Setup
//

m4x4 oPos, v0, c16

//
// Lighting Setup
//

m4x4 r10, v0, c8 // transform position to world space
m3x3 r0.xyz, v3.xyz, c8 // transform normal to world space

nrm r7, r0 // normalize normal

add r0, -r10, c2 // get a vector toward the camera position

nrm r6, r0 // normalize eye vector

mov r4, c0 // set diffuse to 0,0,0,0

mov r2, c0 // setup diffuse,specular factors to 0,0
mov r2.w, c94.w // setup specular power

//
// Lighting
//

loop aL, i0

    add r1, c[40+aL], -r10 // vertex to light direction
    dp3 r0.w, r1, r1
    rsq r1.w, r0.w

    dst r9, r0.wwww, r1.wwww // (1, d, d*d, 1/d)
    dp3 r0.w, r9, c[70+aL] // (a0 + a1*d + a2*d2)
    rcp r8.w, r0.w // 1 / (a0 + a1*d + a2*d)

    mul r1, r1, r1.w // normalize the vertex to the light vector

    add r0, r6, r1 // calculate half-vector (light vector + eye vector)

    nrm r11, r0 // normalize half-vector

    dp3 r2.x, r7, r1 // N*L
    dp3 r2.yz, r7, r11 // N*H

    sge r3.x, c[80+aL].y, r9.y // (range > d) ? 1:0
    mul r2.x, r2.x, r3.x
    mul r2.y, r2.y, r3.x

    lit r5, r2 // calculate the diffuse & specular factors
    mul r5, r5, r8.w // scale by attenuation

    mul r0, r5.y, c[30+aL] // calculate diffuse color
    mad r4, r0, c90, r4 // add (diffuse color * material diffuse)

    mul r0, r5.z, c[60+aL] // calculate specular color
    mad r4, r0, c91, r4 // add (specular color * material specular)

endloop

mov oD0, r4 // final color

Hidden Surface Removal

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

…которая будет затем выводиться в одном из трех выбранных режимов:

  1. Сортированные по удалению, от ближних к дальним (sorted, front to back order)
  2. Сортированные по удалению, от дальних к ближним (sorted, back to front order)
  3. Хаотически, без сортировки (unsorted)

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

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

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

Для проверки наличия и эффективности ранней проверки Z - так называемые Early Z reject (ATI) и Early Z cull (NVIDIA) технологии позволяющие не производить фактическое текстурирование и выполнение шейдера над пикселями не прошедшими Z тест, добавлена опция форсирующая текстурирование всех треугольников сцены:

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

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Режим программной эмуляции вершинных шейдеров и TCL
  • Режим работы:
    • Fixed Function TCL и Fixed Function Blend Stages
    • Vertex Shaders 1.1 и Fixed Function Blend Stages
    • Vertex Shaders 2.0 и Fixed Function Blend Stages
  • Число треугольников:
    • От 1000 до 20000
  • Режим сортировки выводимой сцены:
    • Отсутствует;
    • От дальних полигонов к ближним;
    • От ближних полигонов к дальним

Pixel Shading

Данный тест призван исследовать производительность выполнения различных пиксельных шейдеров второй версии. Если в случае первой версии скорость выполнения шейдеров, транслировавшихся реально в настройки стадий, определялась по достаточно простым правилам, и для ее проверки было достаточно теста, схожего с Pixel Filling в режиме большого числа текстур, то в случае второй версии вершинных шейдеров все может существенно усложниться. Покомандное исполнение и новые форматы данных (плавающие числа) способны создать существенную разницу в производительности не только в случае разных архитектур ускорителей, но и даже на уровне сочетания отдельных команд и форматов данных внутри одного чипа. Мы решили применить к тестированию производительности пиксельных процессоров современных ускорителей подход, схожий с тестированием CPU. А именно, измерять производительность следующего набора пиксельных шейдеров, имеющих вполне распространенные реальные прототипы и применения:

  1. Расчет попиксельного освещения — 1 точечный источник (per-pixel diffuse lighting with per-pixel attenuation)
  2. Расчет попиксельного освещения — 2 точечных источника (per-pixel diffuse lighting with per-pixel attenuation)
  3. Расчет попиксельного освещения — 3 точечных источника (per-pixel diffuse lighting with per-pixel attenuation):

  4. Расчет попиксельного освещения — 1 точечный источник с бликом (per-pixel diffuse lighting + specular lighting with per-pixel attenuation)
  5. Расчет попиксельного освещения — 2 точечных источника с бликом (per-pixel diffuse lighting + specular lighting with per-pixel attenuation):

  6. Анимированная процедурная текстура мрамора (marble animated procedure texturing)
  7. Анимированная процедурная текстура огня (fire animated procedure texturing):

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

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

Для проверки эффективности использования плавающего формата с половинной точностью представления FP16 введена опция, позволяющая выбирать одну из трех разновидностей пиксельных шейдеров - базовые 2.0, в которых нельзя указать точный формат операции, и две разновидности 2.X - с форсированием 16-битной точности вычислений и форсирование 32-битной точности вычислений соответственно.

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Режим программной эмуляции вершинных шейдеров
  • Используемая версия пиксельного шейдера:
    • Версия 2.0
    • Версия 2.X - форсирован формат FP16 (половинная точность)
    • Версия 2.X - форсирован формат FP32 (полная точность)
  • Пиксельный шейдер:
    • 1 point light ( per-pixel diffuse with per-pixel attenuation )
    • 2 point lights ( per-pixel diffuse with per-pixel attenuation )
    • 3 point lights ( per-pixel diffuse with per-pixel attenuation )
    • 1 point light ( per-pixel diffuse + secular with per-pixel attenuation )
    • 2 point lights ( per-pixel diffuse + secular with per-pixel attenuation )
    • Procedure texturing (Marble)
    • Procedure texturing (Fire)

Приведем коды некоторых шейдеров. Попиксельный расчет двух источников света с бликами:

ps_2_0

//
// Texture Coords
//

dcl t0 // Diffuse Map
dcl t1 // Normal Map
dcl t2 // Specular Map

dcl t3.xyzw // Position (World Space)

dcl t4.xyzw // Tangent
dcl t5.xyzw // Binormal
dcl t6.xyzw // Normal

//
// Samplers
//

dcl_2d s0 // Sampler for Base Texture
dcl_2d s1 // Sampler for Normal Map
dcl_2d s2 // Sampler for Specular Map

//
// Normal Map
//

texld r1, t1, s1
mad r1, r1, c29.x, c29.y

//
// Light 0
//

// Attenuation

add r3, -c0, t3 // LightPosition-PixelPosition
dp3 r4.x, r3, r3 // Distance^2
rsq r5, r4.x // 1 / Distance
mul r6.x, r5.x, c20.x // Attenuation / Distance

// Light Direction to Tangent Space

mul r3, r3, r5.x // Normalize light direction

dp3 r8.x, t4, -r3 // Transform light direction to tangent space
dp3 r8.y, t5, -r3
dp3 r8.z, t6, -r3
mov r8.w, c28.w


// Half Angle to Tangent Space

add r0, -t3, c25 // Get a vector toward the camera
nrm r11, r0

add r0, r11, -r3 // Get half angle
nrm r11, r0
dp3 r7.x, t4, r11 // Transform half angle to tangent space
dp3 r7.y, t5, r11
dp3 r7.z, t6, r11
mov r7.w, c28.w

// Diffuse

dp3 r2.x, r1, r8 // N * L
mul r9.x, r2.x, r6.x // * Attenuation / Distance

mul r9, c10, r9.x // * Light Color

// Specular

dp3 r2.x, r1, r7 // N * H
pow r2.x, r2.x, c26.x // ^ Specular Power
mul r10.x, r2.x, r6.x // * Attenuation / Distance

mul r10, c12, r10.x // * Light Color

//
// Light 2
//

// Attenuation

add r3, -c1, t3 // LightPosition-PixelPosition
dp3 r4.x, r3, r3 // Distance^2
rsq r5, r4.x // 1 / Distance
mul r6.x, r5.x, c21.x // Attenuation / Distance

// Light Direction to Tangent Space

mul r3, r3, r5.x // Normalize light direction

dp3 r8.x, t4, -r3 // Transform light direction to tangent space
dp3 r8.y, t5, -r3
dp3 r8.z, t6, -r3
mov r8.w, c28.w

// Half Angle to Tangent Space

add r0, -t3, c25 // Get a vector toward the camera
nrm r11, r0

add r0, r11, -r3 // Get half angle
nrm r11, r0

dp3 r7.x, t4, r11 // Transform half angle to tangent space
dp3 r7.y, t5, r11
dp3 r7.z, t6, r11
mov r7.w, c28.w

// Diffuse

dp3 r2.x, r1, r8 // N * L
mul r2.x, r2.x, r6.x // * Attenuation / Distance

mad r9, c11, r2.x, r9 // * Light Color

// Specular

dp3 r2.x, r1, r7 // N * H
pow r2.x, r2.x, c26.x // ^ Specular Power
mul r2.x, r2.x, r6.x // * Attenuation / Distance

mad r10, c13, r2.x, r10 // * Light Color

//
// Diffuse + Specular Maps
//

texld r0, t0, s0
texld r1, t2, s2

mul r9, r9, r0 // Diffuse Map
mad r9, r10, r1, r9 // Specular Map

// Finalize

mov oC0, r9

Процедурная текстура огня:

ps_2_0

def c3, -0.5, 0, 0, 1
def c4, 0.159155, 6.28319, -3.14159, 0.25
def c5, -2.52399e-007, -0.00138884, 0.0416666, 2.47609e-005

dcl v0

dcl t0.xyz
dcl t1.xyz
dcl t2.xyz
dcl t3.xyz

dcl_volume s0
dcl_2d s1

texld r0, t0, s0
mul r7.w, c0.x, r0.x
texld r2, t1, s0
mad r4.w, c0.y, r2.x, r7.w
texld r11, t2, s0
mad r1.w, c0.z, r11.x, r4.w
texld r8, t3, s0
mad r10.w, c0.w, r8.x, r1.w
mul r5.w, c2.x, r10.w
mad r7.w, c1.x, t0.x, r5.w
mad r9.w, r7.w, c4.x, c4.w
frc r4.w, r9.w
mad r6.w, r4.w, c4.y, c4.z
mul r1.w, r6.w, r6.w
mad r3.w, r1.w, c5.x, c5.w
mad r5.w, r1.w, r3.w, c5.y
mad r7.w, r1.w, r5.w, c5.z
mad r9.w, r1.w, r7.w, c3.x
mad r11.w, r1.w, r9.w, c3.w
mov r3.xy, r11.w
texld r6, r3, s1
mov oC0, r6

Point Sprites

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

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

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Режим программной эмуляции вершинных шейдеров
  • Режим работы:
    • Vertex Shaders 1.1 и Fixed Function Blend Stages
    • Vertex Shaders 2.0 и Fixed Function Blend Stages
  • Режим анимации:
    • Отсутствует
    • Проводится
  • Режим освещения:
    • Отсутствует
    • Проводится

Оставайтесь с нами

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

Кроме того, в скором времени во всех синтетических тестах появится возможность использовать не только ассемблерные версии шейдеров, но и компилируемые с языка высокого уровня, причем как родным компилятором Microsoft (HLSL) так и комплектом от NVIDIA — CG+CGFX.

Самым приятным ожидаемым событием, несомненно, является планируемый в ближайшее время релиз первой тестовой (бета) версии пакета RightMark 3D. Пока (в первой бета-версии) для свободного использования будут доступны только синтетические тесты и оболочка для пакетного запуска и просмотра результатов. Впоследствии появятся четыре различных игровых теста.

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

Пишите по адресу: unclesam@ixbt.com.







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

Обзор NVIDIA GeForce FX 5800 Ultra 128MB

NVIDIA GeForce FX 5800 Ultra 128MB

"Если долго мучиться, что-нибудь получится"
(А.Пугачева)


Как обычно, предваряя большой базовый материал анализа работы нового акселератора, мы настоятельно рекомендуем прочитать аналитическую статью, посвященную архитектуре и спецификациям NVIDIA GeForce FX (NV30)

СОДЕРЖАНИЕ

  1. Общие сведения
  2. Особенности видеокарты NVIDIA GeForce FX 5800 Ultra 128MB
  3. Конфигурации тестовых стендов и особенности настроек драйверов
  4. Результаты тестов: коротко о 2D
  5. Синтетические тесты RightMark3D: идеология и описание тестов
  6. Результаты тестов: RightMark3D: Pixel Filling
  7. Результаты тестов: RightMark3D: Geometry Processing Speed
  8. Результаты тестов: RightMark3D: Hidden Surface Removal
  9. Результаты тестов: RightMark3D: Pixel Shading
  10. Результаты тестов: RightMark3D: Point Sprites
  11. Результаты тестов: Синтетические тесты 3DMark2001 SE
  12. Дополнительная теоретическая информация и выводы из результатов синтетических тестов
  13. Информация по анизотропной фильтрации и по анти-алиасингу
  14. Архитектурные особенности и перспективы
  15. Результаты тестов: Игровые тесты 3DMark2001 SE: Game1
  16. Результаты тестов: Игровые тесты 3DMark2001 SE: Game2
  17. Результаты тестов: Игровые тесты 3DMark2001 SE: Game3
  18. Результаты тестов: Игровые тесты 3DMark2001 SE: Game4
  19. Результаты тестов: Игровые тесты 3DMark03: Game1
  20. Результаты тестов: Игровые тесты 3DMark03: Game2
  21. Результаты тестов: Игровые тесты 3DMark03: Game3
  22. Результаты тестов: Игровые тесты 3DMark03: Game4
  23. Результаты тестов: Quake3 ARENA
  24. Результаты тестов: Serious Sam: The Second Encounter
  25. Результаты тестов: Return to Castle Wolfenstein
  26. Результаты тестов: Code Creatures DEMO
  27. Результаты тестов: Unreal Tournament 2003 DEMO
  28. Результаты тестов: AquaMark
  29. Результаты тестов: RightMark 3D
  30. Результаты тестов: DOOM III Alpha version
  31. Качество 3D: Анизотропная фильтрация
  32. Качество 3D: Анти-алиасинг
  33. Качество 3D в целом
  34. Выводы

Установка и драйверы

Рассмотрим конфигурацию тестового стенда, на котором проводились испытания карт:

  • Компьютер на базе Pentium 4 (Socket 478):
    • процессор Intel Pentium 4 3066 (HT=ON);
    • системная плата ASUS P4G8X (iE7205);
    • оперативная память 1024 MB DDR SDRAM;
    • жесткий диск Seagate Barracuda IV 40GB;
    • операционная система Windows XP SP1.

На стенде использовались мониторы ViewSonic P810 (21") и ViewSonic P817 (21").

При тестировании применялись драйверы от NVIDIA версии 42.68, VSync отключен, компрессия текстур отключена в приложениях. Установлен DirectX 9.0.

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

  • Gainward Powerpack Ultra/750 (GeForce Ti 4600, 300/325 (650) МГц, 128 МБ);
  • Hercules 3D Prophet 9700 PRO (RADEON 9700 PRO, 325/310 (620) МГц, 128 МБ, driver 6.292).

Настройки драйверов





















Настройки работы АА и анизотропии вынесены на одну закладку и работают одновременно и в OpenGL, и в Direct3D. Среди новшеств видим режимы АА - 6xS и 8xS. Позже мы рассмотрим их более подробно.

Настройки Direct3D и OpenGL стандартны и уже привычны многим пользователям видеокарт на базе процессоров от NVIDIA. Обратим внимание на то, что в разделе D3D есть возможность принудительно форсировать частоту смены кадров в том или ином разрешении.

Теперь самый интересный раздел - тактовые частоты. Получить доступ к этой закладке (а также к некоторым другим) можно, запустив патч к registry Windows XP. Так вот, мы видим, что частоты работы карты разделены на 2D и 3D. По умолчанию в 2D плата работает на частотах 300/300 (600) МГц, а в 3D, как и ожидалось, 500/500 (1000) МГц. Интересно отметить, что принудительный подъем частоты работы в 2D до 500/500 (1000) не вызывает увеличения оборотов кулера. Впрочем, после перезагрузки режим работы в 2D (300/300 (600)) восстанавливается, невзирая на установленную галочку использования заданных частот при перезагрузке Windows.

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

На этом рассмотрение особенностей драйверов мы заканчиваем.

Результаты тестов

  1. Основой для оценки карт у нас являются РЕАЛЬНЫЕ приложения, т.е. игры. Мы постоянно их используем и корректируем список в соответствии с реалиями времени, добиваясь большей репрезентативности API и жанров;
  2. Мы интенсивно используем синтетические тесты (RightMark3D Synthetic и части 3DMark2001) но следует четко понимать, что делается это не для общей оценки карты, а для глубокого анализа функционирования GPU и его отдельных блоков, для своеобразной "разведки" особенностей его поведения, а также для корректного комментирования результатов, полученных на реальных играх и приложениях.
  3. Мы используем бенчмарки типа 3DMark, назовем их one-number-bench, дающие в результате некое финальное кол-во "попугаев" НЕ для оценки карт, а для того, чтобы удовлетворить потребности наших читателей, многие из которых хотят для удобства видеть и простое, наглядное число "попугаев", полученых той или иной картой.

2D-графика

Традиционно начнем с 2D. Удивительно, но факт: качество отменное! в 1600х1200 при 85Гц комфорт и уют. В 1280х1024 при 120Гц просто все великолепно!

Еще в письмах к декабристам император Николай I говорил, что оценка 2D-качества есть вещь субъективная (но декабристы считали, видимо, иначе. Тогда за несогласие - Петропавловская крепость, теперь - возмущения в форуме насчет "почему же нет ОБЪЕКТИВНЫХ тестов 2D"). Поэтому напомню, что качество зависит от конкретного экземпляра, да и связка карта-монитор может по-прежнему играть огромную роль. Прежде всего, надо обращать внимание на качество монитора и кабеля. Я напомню, что тестирование 2D у нас происходит на мониторе ViewSonic P817-E совместно с BNC-кабелем Bargo.

Синтетические тесты RightMark 3D (DirectX 9)

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

Набор синтетических тестов из разрабатываемого нами тестового пакета RightMark 3D включает в себя (на данный момент) следующие тесты:

  1. Тест на закраску и фильтрацию текстур (Pixel Filling Test);
  2. Тест на производительность обработки геометрии (Geometry Processing Speed Test);
  3. Тест на производительность работы с отсечением невидимых точек и примитивов (Hidden Surface Removal Test);
  4. Тест на производительность сложных пиксельных шейдеров (Pixel Shader Test);
  5. Тест на производительность отрисовки, освещения и анимации спрайтов (Point Sprites Test).

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

Идеология синтетических тестов

Основная идея, стоящая за всеми нашими тестами — острая фокусировка на производительности той или иной конкретной подсистемы чипа. В отличие от реальных приложений, измеряющих эффективность работы ускорителя в том или ином практическом применении что называется «в комплексе», синтетические тесты пытаются вычленить отдельные аспекты производительности. Зачем, спросите вы? Дело в том, что между выходом новых ускорителей и приложений, эффективно и всесторонне использующих их возможности, зачастую проходит год или даже более. При этом, многие энтузиасты, желающие находиться на переднем краю технологий, вынуждены принимать решение о покупке того или иного ускорителя практически вслепую — основываясь на результатах тестирования заведомо устаревшего программного обеспечения. Никто не может гарантировать им, что в будущем, в момент выхода столь ожидаемых ими игр, ситуация не поменяется кардинально. Кроме энтузиастов, которые добровольно идут на риск весьма дорогой лотереи по покупке только что появившихся продуктов, в непростую ситуацию попадает еще несколько категорий людей:

  • Первая категория — покупающие себе компьютер, что называется «по максимуму» — на длительное время — и не желающие связываться с постоянными обновлениями железа. Для этих людей важно сделать правильный выбор, максимально увеличив срок пригодности их компьютера для приложений и применений, которые еще только будут появляться в будущем.
  • Вторая категория — разработчики программного обеспечения, с первой минуты появления новых ускорителей вынужденные обращать пристальное внимание на их возможности и балансировку, дабы на основе этих данных грамотно спроектировать и сбалансировать не только движок (код), но и контент (уровни, модели) с учетом эффективного использования техники, которая получит распространение к моменту появления создаваемых ими приложений в продаже. Синтетические тесты помогут им сделать выводы, выбрав те или иные пути для реализации своих замыслов и, что ничуть не менее важно, разумно ограничив простор своей фантазии :-).
  • И последняя категория людей — IT-аналитики (например, из крупных оптовых фирм) и профессиональные авторы обзоров компьютерного железа — люди, которые по долгу их рода занятий зачастую вынуждены делать выводы о потенциале тех или иных изделий еще до их официального анонса.

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

Описания синтетических тестов набора RightMark 3D

Pixel Filling

Данный тест выполняет целый ряд задач. В том числе:

  1. Измерение производительности закраски буфера кадров
  2. Измерение производительности различных режимов фильтрации текстур
  3. Измерение эффективности работы (кэширования) с текстурами различного объема
  4. Измерение эффективности работы (кэширования и компрессии) с текстурами различных форматов
  5. Измерение эффективности мультитекстурирования
  6. Наглядное сравнение качества реализации тех или иных режимов фильтрации текстур

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

Четыре стороны пирамиды состоят каждая из двух треугольников. Малое число треугольников позволяет устранить зависимость от геометрической производительности, не имеющей никакого отношения к исследуемым данным тестом вопросам. На каждую точку во время закраски накладывается от 1 до 8 текстур. При желании можно полностью отключить текстурирование (0 текстур) и измерять только скорость закраски с использованием константного значения цвета.

Во время тестирования вершина пирамиды равномерно перемещается по кругу, а само основание при этом вращается вокруг оси Z:

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

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

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

И сделать выводы об алгоритме их смешения и выбора.

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Выделять ли цветом mip-уровни
  • Режим работы (и максимальное число накладываемых на один пиксель текстур):
    • Vertex Shaders 1.1 и Fixed Function Blend Stages (до 8 текстур)
    • Vertex Shaders 2.0 и Fixed Function Blend Stages (до 8 текстур)
    • Vertex Shaders 1.1 и Pixel Shaders 1.1 (до 4 текстур)
    • Vertex Shaders 1.1 и Pixel Shaders 1.4 (до 6 текстур)
    • Vertex Shaders 2.0 и Pixel Shaders 2.0 (до 8 текстур)
  • Число текстур, накладываемых на точку:
    • 0 (только закраска)
    • от 1 до 8
  • Размер текстур:
    • 128х128
    • 256x256
    • 512x512
  • Формат текстур:
    • A8R8G8B8
    • X8R8G8B8
    • A1R5G5B5
    • X1R5G5B5
    • DXT1
    • DXT2
    • DXT3
    • DXT4
    • DXT5
  • Тип фильтрации:
    • отсутствует
    • билинейная
    • трилинейная
    • анизотропная
    • анизотропная + трилинейная

Результат работы теста выдается в двух единицах — число кадров в секунду (FPS) и, что более удобно, число закрашенных в секунду пикселей (FillRate). Последнее число играет двойную роль. В режиме без текстур мы измеряем непосредственно скорость записи в буфер кадра. Таким образом, этот параметр означает число закрашенных в секунду точек экрана (Pixel FillRate). В режиме с использованием какого-либо числа текстур — число выбранных и отфильтрованных значений текстур в секунду (Texturing Rate, Texture Fill Rate).

Приведем пример пиксельного шейдера, используемого для закраски в ходе самого интенсивного варианта этого теста (PS/VS 2.0, 8 текстур):

ps_2_0

dcl t0
dcl t1
dcl t2
dcl t3
dcl t4
dcl t5
dcl t6
dcl t7

dcl_2d s0
dcl_2d s1
dcl_2d s2
dcl_2d s3
dcl_2d s4
dcl_2d s5
dcl_2d s6
dcl_2d s7

texld r0, t0, s0
texld r1, t1, s1
texld r2, t2, s2
texld r3, t3, s3
texld r4, t4, s4
texld r5, t5, s5
texld r6, t6, s6
texld r7, t7, s7

mov r11, r0
lrp r11, c0, r11, r1
lrp r11, c0, r11, r2
lrp r11, c0, r11, r3
lrp r11, c0, r11, r4
lrp r11, c0, r11, r5
lrp r11, c0, r11, r6
lrp r11, c0, r11, r7

mov oC0, r11

Geometry Processing Speed

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

  1. Ambient Lighting — простейшее константное освещение
  2. 1 Diffuse Light — один диффузный источник света
  3. 2 Diffuse Lights — два диффузных источника света
  4. 3 Diffuse Lights — три диффузных источника света
  5. 1 Diffuse + Specular Light — один диффузно-спекулярный источник
  6. 2 Diffuse + Specular Lights — два диффузно-спекулярных источника
  7. 3 Diffuse + Specular Lights — три диффузно-спекулярных источника

В ходе теста выводится несколько экземпляров одной и той же модели с большим числом полигонов. Каждый экземпляр модели имеет свои параметры геометрической трансформации и относительного расположения источников света. Размер модели выбран крайне малым (большинство полигонов сравнимы или меньше экранного пикселя):

и таким образом разрешение и закраска не оказывает влияния на результаты теста:

Источники света всячески перемещаются во время теста, дабы обеспечить равномерное разнообразие исходных расчетных параметров.

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

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Режим программной эмуляции вершинных шейдеров и TCL
  • Режим работы:
    • Fixed Function TCL и Fixed Function Blend Stages
    • Vertex Shaders 1.1 и Fixed Function Blend Stages
    • Vertex Shaders 2.0 и Fixed Function Blend Stages
    • Vertex Shaders 1.1 и Pixel Shaders 1.1
    • Vertex Shaders 1.1 и Pixel Shaders 1.4
    • Vertex Shaders 2.0 и Pixel Shaders 2.0
  • Детализация геометрии:
    • 1 (низкая)
    • 2 (средняя)
    • 3 (высокая)
  • Модель освещения (определяет сложность расчетов):
    • Ambient Lighting — простейшее константное освещение
    • 1 Diffuse Light — один диффузный источник света
    • 2 Diffuse Lights — два диффузных источника света
    • 3 Diffuse Lights — три диффузных источника света
    • 1 (Diffuse + Specular) Light — один диффузно-спекулярный источник
    • 2 (Diffuse + Specular) Lights — два диффузно-спекулярных источника
    • 3 (Diffuse + Specular) Lights — три диффузно-спекулярных источника

Результат работы теста выдается в двух единицах — число кадров в секунду (FPS) и, что более удобно число трансформированных и освещенных за секунду треугольников (PPS — Polygons Per Second).

Приведем пример вершинного шейдера (VS 2.0), используемого для трансформации и расчета освещения от задаваемого извне числа диффузно-спекулярных источников в этом тесте:

vs_2_0

dcl_position v0
dcl_normal v3

//
// Position Setup
//

m4x4 oPos, v0, c16

//
// Lighting Setup
//

m4x4 r10, v0, c8 // transform position to world space
m3x3 r0.xyz, v3.xyz, c8 // transform normal to world space

nrm r7, r0 // normalize normal

add r0, -r10, c2 // get a vector toward the camera position

nrm r6, r0 // normalize eye vector

mov r4, c0 // set diffuse to 0,0,0,0

mov r2, c0 // setup diffuse,specular factors to 0,0
mov r2.w, c94.w // setup specular power

//
// Lighting
//

loop aL, i0

    add r1, c[40+aL], -r10 // vertex to light direction
    dp3 r0.w, r1, r1
    rsq r1.w, r0.w

    dst r9, r0.wwww, r1.wwww // (1, d, d*d, 1/d)
    dp3 r0.w, r9, c[70+aL] // (a0 + a1*d + a2*d2)
    rcp r8.w, r0.w // 1 / (a0 + a1*d + a2*d)

    mul r1, r1, r1.w // normalize the vertex to the light vector

    add r0, r6, r1 // calculate half-vector (light vector + eye vector)

    nrm r11, r0 // normalize half-vector

    dp3 r2.x, r7, r1 // N*L
    dp3 r2.yz, r7, r11 // N*H

    sge r3.x, c[80+aL].y, r9.y // (range > d) ? 1:0
    mul r2.x, r2.x, r3.x
    mul r2.y, r2.y, r3.x

    lit r5, r2 // calculate the diffuse & specular factors
    mul r5, r5, r8.w // scale by attenuation

    mul r0, r5.y, c[30+aL] // calculate diffuse color
    mad r4, r0, c90, r4 // add (diffuse color * material diffuse)

    mul r0, r5.z, c[60+aL] // calculate specular color
    mad r4, r0, c91, r4 // add (specular color * material specular)

endloop

mov oD0, r4 // final color

Hidden Surface Removal

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

…которая будет затем выводиться в одном из трех выбранных режимов:

  1. Сортированные по удалению, от ближних к дальним (sorted, front to back order)
  2. Сортированные по удалению, от дальних к ближним (sorted, back to front order)
  3. Хаотически, без сортировки (unsorted)

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

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

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

Для проверки наличия и эффективности ранней проверки Z - так называемые Early Z reject (ATI) и Early Z cull (NVIDIA) технологии позволяющие не производить фактическое текстурирование и выполнение шейдера над пикселями не прошедшими Z тест, добавлена опция форсирующая текстурирование всех треугольников сцены:

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

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Режим программной эмуляции вершинных шейдеров и TCL
  • Режим работы:
    • Fixed Function TCL и Fixed Function Blend Stages
    • Vertex Shaders 1.1 и Fixed Function Blend Stages
    • Vertex Shaders 2.0 и Fixed Function Blend Stages
  • Число треугольников:
    • От 1000 до 20000
  • Режим сортировки выводимой сцены:
    • Отсутствует;
    • От дальних полигонов к ближним;
    • От ближних полигонов к дальним

Pixel Shading

Данный тест призван исследовать производительность выполнения различных пиксельных шейдеров второй версии. Если в случае первой версии скорость выполнения шейдеров, транслировавшихся реально в настройки стадий, определялась по достаточно простым правилам, и для ее проверки было достаточно теста, схожего с Pixel Filling в режиме большого числа текстур, то в случае второй версии вершинных шейдеров все может существенно усложниться. Покомандное исполнение и новые форматы данных (плавающие числа) способны создать существенную разницу в производительности не только в случае разных архитектур ускорителей, но и даже на уровне сочетания отдельных команд и форматов данных внутри одного чипа. Мы решили применить к тестированию производительности пиксельных процессоров современных ускорителей подход, схожий с тестированием CPU. А именно, измерять производительность следующего набора пиксельных шейдеров, имеющих вполне распространенные реальные прототипы и применения:

  1. Расчет попиксельного освещения — 1 точечный источник (per-pixel diffuse lighting with per-pixel attenuation)
  2. Расчет попиксельного освещения — 2 точечных источника (per-pixel diffuse lighting with per-pixel attenuation)
  3. Расчет попиксельного освещения — 3 точечных источника (per-pixel diffuse lighting with per-pixel attenuation):

  4. Расчет попиксельного освещения — 1 точечный источник с бликом (per-pixel diffuse lighting + specular lighting with per-pixel attenuation)
  5. Расчет попиксельного освещения — 2 точечных источника с бликом (per-pixel diffuse lighting + specular lighting with per-pixel attenuation):

  6. Анимированная процедурная текстура мрамора (marble animated procedure texturing)
  7. Анимированная процедурная текстура огня (fire animated procedure texturing):

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

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

Для проверки эффективности использования плавающего формата с половинной точностью представления FP16 введена опция, позволяющая выбирать одну из трех разновидностей пиксельных шейдеров - базовые 2.0, в которых нельзя указать точный формат операции, и две разновидности 2.X - с форсированием 16-битной точности вычислений и форсирование 32-битной точности вычислений соответственно.

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Режим программной эмуляции вершинных шейдеров
  • Используемая версия пиксельного шейдера:
    • Версия 2.0
    • Версия 2.X - форсирован формат FP16 (половинная точность)
    • Версия 2.X - форсирован формат FP32 (полная точность)
  • Пиксельный шейдер:
    • 1 point light ( per-pixel diffuse with per-pixel attenuation )
    • 2 point lights ( per-pixel diffuse with per-pixel attenuation )
    • 3 point lights ( per-pixel diffuse with per-pixel attenuation )
    • 1 point light ( per-pixel diffuse + secular with per-pixel attenuation )
    • 2 point lights ( per-pixel diffuse + secular with per-pixel attenuation )
    • Procedure texturing (Marble)
    • Procedure texturing (Fire)

Приведем коды некоторых шейдеров. Попиксельный расчет двух источников света с бликами:

ps_2_0

//
// Texture Coords
//

dcl t0 // Diffuse Map
dcl t1 // Normal Map
dcl t2 // Specular Map

dcl t3.xyzw // Position (World Space)

dcl t4.xyzw // Tangent
dcl t5.xyzw // Binormal
dcl t6.xyzw // Normal

//
// Samplers
//

dcl_2d s0 // Sampler for Base Texture
dcl_2d s1 // Sampler for Normal Map
dcl_2d s2 // Sampler for Specular Map

//
// Normal Map
//

texld r1, t1, s1
mad r1, r1, c29.x, c29.y

//
// Light 0
//

// Attenuation

add r3, -c0, t3 // LightPosition-PixelPosition
dp3 r4.x, r3, r3 // Distance^2
rsq r5, r4.x // 1 / Distance
mul r6.x, r5.x, c20.x // Attenuation / Distance

// Light Direction to Tangent Space

mul r3, r3, r5.x // Normalize light direction

dp3 r8.x, t4, -r3 // Transform light direction to tangent space
dp3 r8.y, t5, -r3
dp3 r8.z, t6, -r3
mov r8.w, c28.w


// Half Angle to Tangent Space

add r0, -t3, c25 // Get a vector toward the camera
nrm r11, r0

add r0, r11, -r3 // Get half angle
nrm r11, r0
dp3 r7.x, t4, r11 // Transform half angle to tangent space
dp3 r7.y, t5, r11
dp3 r7.z, t6, r11
mov r7.w, c28.w

// Diffuse

dp3 r2.x, r1, r8 // N * L
mul r9.x, r2.x, r6.x // * Attenuation / Distance

mul r9, c10, r9.x // * Light Color

// Specular

dp3 r2.x, r1, r7 // N * H
pow r2.x, r2.x, c26.x // ^ Specular Power
mul r10.x, r2.x, r6.x // * Attenuation / Distance

mul r10, c12, r10.x // * Light Color

//
// Light 2
//

// Attenuation

add r3, -c1, t3 // LightPosition-PixelPosition
dp3 r4.x, r3, r3 // Distance^2
rsq r5, r4.x // 1 / Distance
mul r6.x, r5.x, c21.x // Attenuation / Distance

// Light Direction to Tangent Space

mul r3, r3, r5.x // Normalize light direction

dp3 r8.x, t4, -r3 // Transform light direction to tangent space
dp3 r8.y, t5, -r3
dp3 r8.z, t6, -r3
mov r8.w, c28.w

// Half Angle to Tangent Space

add r0, -t3, c25 // Get a vector toward the camera
nrm r11, r0

add r0, r11, -r3 // Get half angle
nrm r11, r0

dp3 r7.x, t4, r11 // Transform half angle to tangent space
dp3 r7.y, t5, r11
dp3 r7.z, t6, r11
mov r7.w, c28.w

// Diffuse

dp3 r2.x, r1, r8 // N * L
mul r2.x, r2.x, r6.x // * Attenuation / Distance

mad r9, c11, r2.x, r9 // * Light Color

// Specular

dp3 r2.x, r1, r7 // N * H
pow r2.x, r2.x, c26.x // ^ Specular Power
mul r2.x, r2.x, r6.x // * Attenuation / Distance

mad r10, c13, r2.x, r10 // * Light Color

//
// Diffuse + Specular Maps
//

texld r0, t0, s0
texld r1, t2, s2

mul r9, r9, r0 // Diffuse Map
mad r9, r10, r1, r9 // Specular Map

// Finalize

mov oC0, r9

Процедурная текстура огня:

ps_2_0

def c3, -0.5, 0, 0, 1
def c4, 0.159155, 6.28319, -3.14159, 0.25
def c5, -2.52399e-007, -0.00138884, 0.0416666, 2.47609e-005

dcl v0

dcl t0.xyz
dcl t1.xyz
dcl t2.xyz
dcl t3.xyz

dcl_volume s0
dcl_2d s1

texld r0, t0, s0
mul r7.w, c0.x, r0.x
texld r2, t1, s0
mad r4.w, c0.y, r2.x, r7.w
texld r11, t2, s0
mad r1.w, c0.z, r11.x, r4.w
texld r8, t3, s0
mad r10.w, c0.w, r8.x, r1.w
mul r5.w, c2.x, r10.w
mad r7.w, c1.x, t0.x, r5.w
mad r9.w, r7.w, c4.x, c4.w
frc r4.w, r9.w
mad r6.w, r4.w, c4.y, c4.z
mul r1.w, r6.w, r6.w
mad r3.w, r1.w, c5.x, c5.w
mad r5.w, r1.w, r3.w, c5.y
mad r7.w, r1.w, r5.w, c5.z
mad r9.w, r1.w, r7.w, c3.x
mad r11.w, r1.w, r9.w, c3.w
mov r3.xy, r11.w
texld r6, r3, s1
mov oC0, r6

Point Sprites

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

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

Перечислим настраиваемые параметры теста:

  • Разрешение
  • Оконный или полноэкранный режим
  • Время тестирования (накопления статистики) в секундах
  • Режим программной эмуляции вершинных шейдеров
  • Режим работы:
    • Vertex Shaders 1.1 и Fixed Function Blend Stages
    • Vertex Shaders 2.0 и Fixed Function Blend Stages
  • Режим анимации:
    • Отсутствует
    • Проводится
  • Режим освещения:
    • Отсутствует
    • Проводится

Оставайтесь с нами

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

Кроме того, в скором времени во всех синтетических тестах появится возможность использовать не только ассемблерные версии шейдеров, но и компилируемые с языка высокого уровня, причем как родным компилятором Microsoft (HLSL) так и комплектом от NVIDIA — CG+CGFX.

Самым приятным ожидаемым событием, несомненно, является планируемый в ближайшее время релиз первой тестовой (бета) версии пакета RightMark 3D. Пока (в первой бета-версии) для свободного использования будут доступны только синтетические тесты и оболочка для пакетного запуска и просмотра результатов. Впоследствии появятся четыре различных игровых теста.

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

Пишите по адресу: unclesam@ixbt.com.