Программное включение функций Quadro на GeForce

19.06.2001


  Совсем недавно, в 1997 году, никто и не подозревал, что практически неизвестная тогда корпорация NVIDIA пойдёт так далеко. Чип Riva128, с которым она вошла на рынок игровых 3D акселераторов, похоже, не воспринимался тогда её конкурентами всерьёз. И зря…. Сейчас NVIDIA прочно обосновалась на рынке графических технологий, пытаясь занять всё новые и новые ниши. Практически «раздавив» всех конкурентов среди производителей игровых ускорителей, NVIDIA постепенно охватывает рынок графических акселераторов для мобильных компьютеров, производит чипы для игровых приставок и даже поставляет их для платформы Macintosh. Естественно, что не обошелся без внимания и рынок профессиональных OpenGL ускорителей, ориентированных в первую очередь на САПР. Для этого сегмента рынка позиционируются чипы Quadro, Quadro2 MXR и Quadro2 Pro. Не так давно были анонсированы и два новых профессиональных решения от NVIDIA - Quadro DCC и Quadro2 EX. Видимо, корпорация не отступает от своих принципов и пытается занять все ценовые категории данного сегмента рынка. Чип Quadro DCC базируется на ядре GeForce3 и призван занять наивысшую ценовую ступень. Последний же основан на ядре GeForce2 MX и, скорее всего, станет самым дешёвым профессиональным чипом для малоимущих клиентов.

  Однако, выход на рынок Quadro, первого из профессиональных графических укорителей от NVIDIA, породил массу слухов и догадок. Слишком уж коротким был период времени между анонсом GeForce256 и Quadro. За такое время практически нереально сделать серьезный редизайн чипа, поэтому многие задались вопросом: а не подсовывают ли нам под маркой Quadro слегка подретушированный GeForce256 по более чем двукратной цене? Тесты Quadro в профессиональных приложениях вроде бы опровергают это: чип действительно опережает GeForce256, порой даже многократно. Однако, исследования, проведённые tnaw_xtennis, подтвердили все опасения покупателей: после простейшей операции с удалением пары резисторов на плате (она соответствует элементарному изменению идентификатора устройства) любой GeForce превращается в Quadro и догоняет его по производительности в профессиональных приложениях. Таким образом, становится ясно, что на профессиональных платах от NVIDIA установлены такие же точно чипы GeForce256, GeForce2 MX и GeForce2 GTS, как и на их более дешевых собратьях, предназначенных для игрового сегмента рынка. Единственными отличиями Quadro являются повышенные тактовые частоты чипа и видеопамяти, объём набортной видеопамяти и идентификатор устройства. Именно по нему OpenGL драйвер и распознаёт Quadro и просто не использует некоторые аппаратные возможности чипа на игровых картах.

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

  Аппаратное ускорение линий по умолчанию отключено на GeForce2 MX и GeForce2 GTS. Отключение этой аппаратной возможности приводит к значительному падению производительности при отображении каркасных моделей объектов (а именно этот режим и используется в большинстве профессиональных САПР-приложений). Справедливости ради стоит отметить, что аппаратное ускорение линий на GeForce2 MX и GeForce2 GTS можно включить и через реестр с помощью ключа OGL_NV15Alines, который может принимать следующие значения:

  • 0  Аппаратное ускорение линий включается только на Quadro2 MXR и Quadro2 Pro (значение по умолчанию)
  • 1  Аппаратное ускорение линий всегда выключено
  • 2  Аппаратное ускорение линий всегда включено

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

  Аппаратное сглаживание линий/точек поддерживают карты Quadro и Quadro2 Pro. Некоторые приложения, например Pro/DESIGNER, позволяют включить сглаживание линий при отображении каркасных моделей. В этом случае карты на базе Quadro и Quadro2 Pro демонстрируют многократную разницу в производительности по сравнению с GeForce256 и GeForce2 GTS.

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

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

  Пользовательские отсекающие плоскости позволяют «клиппировать» геометрию и используются некоторыми САПР приложениями как сечения для того, чтобы показать внутреннюю структуру объекта.

  Поддержка дополнительных пиксельных форматов позволяет картам линейки Quadro использовать оверлеи и стереорежимы.

  Помимо всего вышесказанного, необходимо отметить, что, скорее всего, NVIDIA OpenGL ICD использует разный код, и, соответственно, разные стратегии оптимизации для карт на базе Quadro и GeForce. ICD содержит множество недокументированных ключей реестра (OGL_App_SoftImage, OGL_App_SupportBits, OGL_ApplicationKey и т.д.), предназначенных для оптимизации драйвера под различные профессиональные приложения: SoftImage 3D, 3D Studio Max, Maya, Lightwave и т.д. Все эти ключи сгруппированы в пресеты, доступные из панели настроек драйвера.

  Бесспорно, перспектива переделки GeForce в Quadro очень заманчива. К сожалению, предложенная tnaw_xtennis процедура сопряжена с потерей гарантии на видеоадаптер, что делает её неприменимой для большого количества пользователей. Поэтому я и заинтересовался возможностью программного включения функций Quadro на GeForce. Эту идею я вынашивал достаточно давно, но перспектива полного изучения кода OpenGL драйвера меня не очень прельщала, поэтому я отложил её до лучших времён.

  Вспомнить о программном включении функций Quadro помог случай: готовя к выпуску давно ожидаемую вами статью «Detonator: взгляд изнутри», я просматривал код OpenGL драйвера и изучал алгоритмы обработки некоторых недокументированных ключей реестра. Моё внимание привлёк код, связанный с обработкой ключа OGL_ForceGeForce, который предназначен для отключения профессиональных возможностей Quadro и превращения данной карты в обыкновенный ускоритель игрового класса. Меня заинтересовало то, каким образом Quadro превращается в GeForce с помощью данного ключа. Оказалось, что вся модификация сводится к тривиальной маскировке некоторых бит во внутренней переменной – предположительно, регистре свойств OpenGL драйвера. В том, что это действительно регистр со свойствами, я убедился, увидев код обработки ключа OGL_NV15Alines, – включение аппаратного ускорения линий также сводилось к сбросу одного из битов данного регистра. Позже выяснилось, что биты, ответственные за включение аппаратного сглаживания линий/точек, также находятся в этом регистре. Я проверил свои догадки несложной процедурой – после небольшой обработки ключ OGL_ForceGeForce уже не маскировал биты регистра свойств, а загружал в него непосредственное значение из реестра. В ходе экспериментов с различными значениями данного ключа мне удалось заставить OpenGL драйвер распознать мою GeForce2 GTS как Quadro2 Pro и значительно увеличить производительность в тесте SPECViewPerf 6.1.2. Я не буду утомлять вас остальными техническими деталями, касающимися поиска и расшифровки регистров свойств разных Quadro плат, а также решения некоторых других побочных проблем. Скажу только, что в результате проведённых исследований мне удалось жёстко прошить значение регистра свойств Quadro2 Pro, что дало возможность использования всех возможностей этой карты на GeForce2 GTS. Я уже предвижу нетерпение читателей, поэтому перехожу от теории к практике – давайте поговорим о том, как заставить драйвер использовать возможности Quadro на любой карте класса GeForce.

  Для проверки своего открытия на других картах класса GeForce я разработал специальную тестовую программу SoftQuadro.


  Эта тестовая программа включает в себя шесть патчей и может форсировать свойства Quadro, Quadro2 MXR или Quadro2 Pro в драйверах под Windows9x либо Windows2000. Напомню, что каждый из этих патчей заставляет драйвер игнорировать формирование внутреннего регистра свойств и использовать форсированное значение этого регистра вне зависимости от типа видеоадаптера. В оригинальных Detonator’ах это значение формируется ядром драйвера дисплея по идентификатору устройства и используется панелью настроек и OpenGL драйвером для блокирования некоторых аппаратных возможностей на картах класса GeForce.

  Хотя программа и использует при форсировании свойств Quadro универсальный сценарий, я не могу гарантировать, что данный метод будет нормально работать на всех версиях Detonator’ов. Лучше не пытаться повторить мои эксперименты с SoftQuadro, если BSOD вгоняет Вас в ступор или, тем более, если Вы не знаете, что это такое. Также не советую пользоваться этой утилитой тем, кто не знает, что такое Safe mode. Если Вы уверены, что сможете переустановить драйвер в случае неудачной загрузки операционной системы, то лучше просто прочитайте внимательно следующие инструкции перед использованием SoftQuadro:

  • Распакуйте дистрибутив драйверов в отдельную папку. Поскольку SoftQuadro изменяет ядро драйвера дисплея (nvcore.vxd для Windows9x или nv4_mini.sys для Windows2000), загружаемое в момент запуска операционной системы, Вы не сможете модифицировать уже установленные драйвера. Поэтому форсирование необходимо произвести до инсталляции.
  • Выберите требуемый сценарий (т.е. операционную систему и адаптер, свойства которого будут форсированы) и нажмите кнопку «Continue». SoftQuadro предложит Вам указать местоположение требуемого файла (nvcore.vxd либо nv4_mini.sys, в зависимости от выбранной операционной системы) и попытается включить функции Quadro. Результаты работы программы будут отображены в логе.
  • Установите теперь тестовый Quadro-драйвер и перезагрузите систему.
  • Если Вы пользуетесь Windows 2000, то можете после установки драйвера скопировать файл NvWSApps.cfg из дистрибутива драйверов в системную директорию Windows. Этот файл содержит пресеты для многих профессиональных приложений (3D Studio Max, AutoCAD, Lightwave, Maya и т.д.). Для того, чтобы активизировать их в панели настроек драйвера, добавьте в реестр следующий ключ:
[HKEY_LOCAL_MACHINE\SOFTWARE\NVIDIA Corporation\ Global\NVTweak\OemConfigurations]

"ControlsOverride"=dword:00000001

  Эти же действия выполняются файлом nv4_disp.inf при установке драйвера на настоящие Quadro платы. Вы также можете внести элементарные изменения в этот файл до установки драйвера, чтобы не выполнять эти действия вручную. Для этого Вам придется найти в этом файле секцию, используемую Вашим видеоадаптером, и заменить её с nv4 на nv4_WSApps. Пример такой замены для GeForce2 GTS показан ниже:

Содержимое nv4_disp.inf до замены:
%NVidia.Nv15%& = nv4, PCI\VEN_10DE&DEV_0150
%NVidia.Nv15DDR% = nv4, PCI\VEN_10DE&DEV_0151
%NVidia.Nv15BR% = nv4, PCI\VEN_10DE&DEV_0152
%NVidia.Nv15GL% = nv4_WSApps, PCI\VEN_10DE&DEV_0153
%NVidia.Nv20% = nv4, PCI\VEN_10DE&DEV_0200



Содержимое nv4_disp.inf после замены:
%NVidia.Nv15% = nv4_WSApps, PCI\VEN_10DE&DEV_0150
%NVidia.Nv15DDR% = nv4, PCI\VEN_10DE&DEV_0151
%NVidia.Nv15BR% = nv4, PCI\VEN_10DE&DEV_0152
%NVidia.Nv15GL% = nv4_WSApps, PCI\VEN_10DE&DEV_0153
%NVidia.Nv20% = nv4, PCI\VEN_10DE&DEV_0200

  Итак, после того, как тестовый драйвер установлен, нам остаётся только проверить его. Первым индикатором успешности переделки GeForce в Quadro служит загрузка операционной системы. Если во время неё “окошки” не поприветствовали Вас радостной синей улыбкой, то всё наверняка прошло успешно. Проверьте свойства OpenGL драйвера с помощью любой тестовой программы, например, GLInfo. Если её не оказалось под рукой, то можете использовать игру, которая наверняка есть на винчестере у каждого уважающего себя геймера – речь, конечно же, идёт о Quake III. Она также позволяет посмотреть информацию об OpenGL драйвере (пункт Driver info в меню System).

  Если в графе renderer Вы не увидели заветное слово Quadro, убедитесь, что в реестре отсутствует ключ OGL_ForceGeForce (ForceGeForce для Window9x) либо он равен нулю. Сделать это можно с помощью regedit либо встроенного в RivaTuner редактора реестра. Если данный ключ содержит ненулевое значение, удалите его и перезапустите тестовое приложение.

вперед >>