Пингвин-вуду

Автор: Константин Лепихов
lakostis@mail.ru
Опубликовано: 08.05.2001
Оригинал:http://www.softerra.ru/review/oses/linux/9198/

У нас и на Западе как-то сложился стереотип, что нужно описывать только новинки, т.к при этом выигрывают две стороны: производитель, который получает рекламу или критику, и покупатель, который может оценить, какую покупку лучше выбрать. Но купив такую "обновку", он зачастую сталкивается совсем не с тем, что ожидал: драйвера "сырые" и "глючные", скорость совсем не та, что в таблицах на сайте... И после этого покупает, то, что проверено у друзей и знакомых, пересмотрено и перещупано, а именно - продукцию 1,5-2 летней давности, проверенную временем и играми. А два года назад балом правила фирма 3dfx... Динамизм этой фирмы просто удивлял - за столь короткое время захватить почти 100% рынка. И в скором времени, говоря 3D, стали подразумевать Voodoo и наоборот, а GLQuake установил новый стандарт качества трехмерных игр.

Теперь перейдем к тому, что мне понравилось:

  • простота настройки и установки;
  • устойчивость работы и совместимость;
  • вполне приемлемая скорость и качество;
  • очень заманчивая цена.

Я не зря ставлю цену как плюс, т.к. за те 15-25$ которые она сейчас стоит, можно приобрести гораздо худшие продукты - S3 Savage3D, PowerVR, Matrox Millenium II и т.д. Для более подробного ознакомления с устройством Voodoo Graphics и его параметрами, советую обратиться к 3Dfx-HOWTO. Само устройство (даже язык не поворачивается назвать его картой) тестировалось и гонялось на следующей платформе (я ее специально привожу как среднестатистическую):

  • Процессор: Intel® Celerontm @400 (overclk);
  • Материнская плата: ABIT BH6 (i440BX);
  • Оперативная память: 128Mb PC133 SDRAM;
  • Жесткий диск: 17Gb Seagate ST317242A;
  • Видео-карта:S3 Savage3D 8Mb SDRAM;

Без проблем работало на следующих платформах:

  • MS Windows 98/ME;
  • MS Windows NT Workstation SP6;
  • ASPLinux RCF 7.1 (Mryia), GLIBC 2.2, kernel 2.2.19-2;
  • Mandrake Linux 7.2 (Odissey), GLIBC 2.1, kernel 2.2.19-2;
  • FreeBSD 3.2;

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

Но нас интересует Linux, поэтому переходим к нему. Здесь работа акселератора очень интересна - весь диалог осуществляется через модуль ядра 3dfx.o, эдакий драйвер в windows эквиваленте, и вхождение в /dev/ - /dev/3dfx. Не нужен Xserver, как для GLX-based ускорителей (Geforce/RivaTNT, Matrox, Savage) ни какие-то особенные мощности - ускоритель весьма нетребователен к ресурсам, но процессор хотя бы класса P6 не помешал, т.к активно используются mtrr (Memory Type Range Registers - специальные регистры процессора для прямого доступа к памяти). Для общения с приложением используется Glide - низкоуровневая библиотека, просто пересобранная для Linux. В игры можно играть как из консоли, если они используют glide/svgalib (nuq, Kingpin, Quake-[12] и другие), так под X11, если Mesa (OGL-подобная библиотека для *NIX и Linux), собрана с поддержкой glide. Библиотеку Glide и модуль Device3Dfx (не правда ли, как красиво звучит!), можно скачать с сайта 3dfx. Она обычно поставляется в виде rpm или tgz, уже в собранном виде, которую просто разворачиваем/устанавливаем.

Для сборки /dev/3dfx нам потребуется gcc (или kgcc в RH7/Mandrake [78].x) и kernel-headers затем просто набираем rpm --rebuild Device3Dfx.src.rpm и получаем пакет, готовый к установке (хочу обратить внимание: если вы сменили ядро, то придется пересобирать src.rpm снова, иначе ускоритель просто не будет работать). Если в вашей системе нет поддержки rpm, то придется делать все самому - распаковать архив (Device3Dfx.tar.gz), собрать модуль и скопировать его в /lib/modules/, добавить вхождение в /dev/. Также необходимо в /etc/modules.conf прописать " alias char-major-107 3dfx ". Когда все установлено, переходим к проверке: заходим в /usr/local/glide/bin и запускаем test3Dfx. Если увидели заставку, то первую часть пути мы прошли. Если нет, то следует проверить, все ли правильно установлено - kernel-headers соответствуют текущему ядру и они не версии 2.4.x. Со сборкой Mesa я сделал так: в Mandrake Mesa собрана без glide, там есть только Xserver для Voodoo3; применяем следующие опции при сборке Mesa (использовались MesaLib-3.3 и MesaDemos-3.3 из Mandrake SRPMS и Glide_SDK с сайта 3dfx):

заходим в каталог Mesa-3.3

./configure --prefix=/usr --with-ggi=no --with-glut=no

Данные опции задают сборку Mesa только с поддержкой glide и X11 + svgalib (естественно, для сборки должны быть установлены devel версии этих пакетов). --with-glut=no указывает, что собирать дополнительную библиотеку GLUT не надо (экономим время и место). Далее набираем make и если все собралось успешно, на выходе получаем в src/.libs/libGL<bla-bla-bla> - это то, что нам и нужно. Если сборка прошла неудачно, то следует удалить /usr/include/glide3, который иногда некорректно обрабатывается. С запуском этой библиотеки поступаем так: Mandrake 7.2 в /usr/bin/ содержит файл glx, служащий для запуска glx сервера, копируем его в файл, который назовем, например, voodoo (я приведу здесь diff файл, чтобы было заметно отличие от оригинала):

--- glx Sat Apr 14 10:33:43 2001
+++ voodoo Sat Apr 14 17:58:00 2001
@@ -1,2 +1,2 @@
 #!/bin/sh
-LD_PRELOAD=/usr/X11R6/lib/libGL.so.1.0 "$@"
+LD_PRELOAD=/usr/local/games/quake1/lib3dfxgl.so
 MESA_GLX_FX=f FX_GLIDE_SWAPINTERVAL=0
 SST_SCREENREFRESH=75 SST_GRXCLK=59 "$@"

Как видно, библиотека находится в /usr/local/games/quake1 (это каталог quakeforge), и задача этого скрипта состоит в том, чтобы при запуске "подцеплялась" не стандартная libGL, находящаяся в ld.so.conf, а именно наша Mesa с поддержкой glide. Гибкость заключается в том, что при этом можно пользоваться и второй картой (например, каким-нибудь Matrox G400), а Voodoo вызывается только по требованию (нужно лишь указать voodoo <program_name>). Если для поддержка 3-D для второй карты не критична, то можно просто скопировать libGL в /usr/lib или /usr/X11R6, но это непригодно для Mandrake, так как у него 2 модуля GL - для glx и XFree86-4.0.x, в результате возникают конфликты при загрузке и лучше пользоваться способом, описанным выше. Также первый вариант удобен тем, что многие игры привыкли работать в окне, или даже нескольких (например gtulpas), а voodoo так не умеет, значит просто запускаем игру, и будет загружаться стандартная "неускоренная" MesaLib. Можно создать несколько libGL (например с поддержкой svgalib и X11 или без чего-то из них). Для Quake-игр удобнее скопировать/сделать симлинк в каталог, где они установлены, они сами найдут ее (для деталей см. Quake-HOWTO).

Если все заработало (это можно узнать по заставке 3dfx при запуске), то переходим к настройке карты. Для начала, приведу несколько полезных опций:

  • FX_GLIDE_SWAPINTERVAL=0 - задает не делать sync to refresh (синхронизировать каждый кадр), можно применять при низких framerate;
  • SST_SCREENREFRESH=<value> - частота обновления кадров в glide-приложении;
  • SST_GRXCLK=<value> - частота работы памяти (используйте с осторожностью, т.к при частотах выше 60 возможна нестабильная работа);
  • SST_[RGB]GAMMA=<value> - установка цветового баланса для каждого из цветов в отдельности.

Более детальный список можно посмотреть здесь. Также можно использовать и второй монитор (это особенно актуально, когда основной больше 17 дюймов), т.к RAMDAC у нее не очень хороший. Он подключается к выходу Voodoo и активизируется следующими командами SST_DUALSCREEN=1. Она не выключает монитор после выхода из программы, использующей ускоритель, иначе монитор будет отключатся, что не совсем для него полезно, т.к ускоритель не выдает никакого сигнала при ожидании. Команда MESA_GLX_FX=f задает полноэкранный рендеринг при выводе, иначе будет использоваться программный. Также можно задействовать рендеринг в окне X11 (это возможно в картах Voodoo Rush, но считалось, что невозможно в Voodoo Graphics):

SST_VGA_PASS=1 # отключить переключение видеосигнала на другой монитор
SST_NOSHUTDOWN=1 # отключить переключение видеосигнала на другой монитор
MESA_GLX_FX="window" # включить рендеринг в окне X11

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

Настройка под FreeBSD сводится к установке linux-compat пакета (по существу, это маленький Linux), и проделыванию операций, описанных выше. BSD хорошо дружит с Linux, поэтому никаких проблем замечено не было.

Даже и сейчас, Voodoo Graphics совсем не устарел, на нем еще можно играть (и совсем неплохо), причем не в самые старые игры (Unreal, Quake III Arena, NFS[45]), не говоря уже про Linux, где их просто навалом. Все они очень неплохо поддерживают Glide (а NFS и Unreal создавались на нем), обеспечивая вполне приемлемое качество и скорость на невысоких разрешениях (напомним, что для Voodoo Graphics это 640x480 и 512x384). Пусть при этом поморщатся обладатели GeForce, для многих главное скорость и цена, простота настройки и список поддерживаемых платформ и игр. А их под Glide немало. Еще одно достоинство Voodoo Grpahics - что это дочерняя плата, которая может существовать вместе другими акселераторами, что просто незаменимо для тестирования и отладки. Не каждая фирма может похвастаться там списком поддерживаемых платформ - это Windows 9x/NT/2000 и Linux/FreeBSD (правда в котором поддержка не совсем честная, она осуществляется через Linux эмулятор), IRIX и Mac. Напомню, что ATI и NVidia поддерживаются только под Linux (а ATI еще и под Mac), плюс еще для нормальной поддержки необходимы XFree86 4.x, а Voodoo прекрасно работает с XFree86 3.3.x и kernel 2.0. Еще раз повторю, что она крайне нетребовательна к ресурсам и процессорным мощностям. Удручает лиш тот факт, что ускорители на базе Voodoo2 и Voodoo3/Voodoo5 стоят до сих пор достаточно дорого, обладая всеми преимуществами предшественника (особенно связка Voodoo2 с SLI). Да и фирма 3dfx уже не с нами :( Но будем надеятся, что Nvidia, которая ее приобрела, обеспечит нас таким сервисом и качеством как и 3Dfx. Как говорил один мой знакомый "Voodoo - это промышленный девайс", и этим все сказано...


Ниже приведена таблица команд из Voodoo FAQ. Обратите внимание, что параметры чувствительны к регистру, поэтому используйте только заглавные буквы!

Variable

Value

Explanation

SST_ARCADE

SST_BACKPORCH

SST_BGAMMA

0 to 1.95

Adjust Blue Gamma

SST_BOARDS

Allows Several Voodoo boards to be used in one system, across several monitors acting as one big display/screen.

SST_DEBUGDAC

1

Shows DAC Debug Information

SST_DIMENSIONS

SST_DUALHEAD

1

Enable dual monitor support

SST_FASTMEM

1

Fast DRAMConfiguration, Enables EDO Timing and compatibility.

SST_FASTPCIRD

1

Fast PCI Read optionenabled, Subtracts WaitStates on PCI Reads (Voodoo -> PCI).

SST_FBICFG

Frame Buffer Interface chip Direct Bitmapped Config Register. Sets Goraud types etc.

SST_FBIMEM_SIZE

Amount of Frame Buffer Memory installed. OVerrides Autodetect by glide.

SST_FT_CLK_DEL

Speed at which frame buffer memory can be accessed.

SST_GAMMA

0 to 1.95

Adjust Global Gamma

SST_GGAMMA

0 to 1.95

Adjust Green Gamma

SST_GRXCLK*

def 50

Graphics Clock rate in MHz *

SST_HSYNC

1

Enable Horizontal SYNC

SST_IGNORE_INIT_REGISTERS

1

Allows Initializing Voodoo chipset, even if Voodoo is already inited. This is good to init the Voodoo chipset after an illegal program termination.

SST_IGNORE_INIT_VIDEO

SST_IGNORE_SLI_CHECK

Ignore autodetect of slave Frame Buffer Chip for speed doubling.

SST_INITDEBUG

Enables displaying of glide debug information in DOS or Win95 DOS Shell.

SST_INITDEBUG_FILE

Instead of displaying, writes glide debug information to a file.

SST_MEMINFO

1

Enable Memory FIFO

SST_MEMINFO_ENTRIES

SST_MEMINFO_HWM

SST_MEMINFO_LFB

1

LFB Writes go through memory FIFO, Linear Frame Buffer memory read/write fifo buffer Size.

SST_MEMINFO_LWM

SST_MEMINFO_TEX

1

Texture Writes go through memory FIFO, Texture Chip memory read/write fifo buffer Size.

SST_MEMOFFSET

Frame buffer address offset from base map.

SST_NODEVICEINFO

SST_NOSHUTDOWN

Do not deinitialize Voodoo Chipset on program termination. Good for spawns.

SST_PCIFIFO_LWM

SST_PFT_CLK_DEL

Preliminary (initial) speed at which frame buffer memory can be accessed.

SST_PTF0_CLK_DEL

Preliminary texture chip 0 memory access speed in delayed clocks.

SST_PTF1_CLK_DEL

Preliminary texture chip 1 memory access speed in delayed clocks.

SST_PTF2_CLK_DEL

Preliminary texture chip 2 memory access speed in delayed clocks.

SST_RGAMMA

0 to 1.95

Adjust Red Gamma

SST_SCREENREFRESH

def 60

Set Screen Refresh rate (60, 75, 85, 120Hz)

SST_SCREENREZ

Virtual screen resolution.

SST_SLIDETECT

0

Scan line interpolation, Detect a slave voodoo chipset subsystem.

SST_SLIM_PVOUT_CLKDEL

Master Frame Buffer Chip Preliminary Pixel Clock Delay.

SST_SLIM_VIN_CLKDEL

Master Video In clock delay (for external sync/genlocking).

SST_SLIM_VOUT_CLKDEL

Master System Pixel Clock delay. Only valid if multi FBI's and TMU's are present.

SST_SLIS_PVOUT_CLKDEL

SST_SLIS_VIN_CLKDEL

Slave System Video In clock delay (for sync to Master).

SST_SLIS_VOUT_CLKDEL

Slave System Pixel Clock delay. Only valid if multi FBI's and TMU's are present. SST_SLIS_PVOUT_CLKDEL Slave System Preliminary Pixel Clock Delay.

SST_SLOWPCIWR

Adds WaitStates to PCI bus writes to Voodoo memory and I/O. (PCI -> Voodoo).

SST_SWAP_EN_WAIT_ON_VSYNC

0

Turns off syncing to the monitors vertical refresh rate so the screen gets refreshed before its fully written on the monitor.

SST_TEXMAP_DISABLE

Diable Texture Mapping

SST_TF_FIFO_THRESH

CPU/Frame Buffer Writes/reads to the texture map memory is done through fifo since the texture map chip might be doing something with that memory at the time. This sets texture map write/read fifo threshold to tell glide that FIFO needs to be serviced and then may accept more data from either frame buffer or CPU.

SST_TF0_CLK_DEL

texture chip 0 memory access speed in delayed clocks.

SST_TF1_CLK_DEL

texture chip 1 memory access speed in delayed clocks.

SST_TF2_CLK_DEL

texture chip 2 memory access speed in delayed clocks.

SST_TILESINX

SST_TMUCFG

Texture Chip Direct Bitmapped Config Register. Sets Texture types, overlay etc. directly.

SST_TMUMEM

SST_TMUMEM_SIZE

Amount of texture map memory installed. Overrides Autodetect by glide.

SST_TREX0INIT0

Texture Chip 0 Direct Bitmapped Primary Init Register (glide will change the values of ; these registers depending on other environment variables).

SST_TREX0INIT1

Texture Chip 0 Direct Bitmapped Secondary Init Register.

SST_TREX1INIT0

Texture Chip 1 Direct Bitmapped Primary Init Register.

SST_TREX1INIT1

Texture Chip 1 Direct Bitmapped Secondary Init Register.

SST_TREX2INIT0

Texture Chip 2 Direct Bitmapped Primary Init Register.

SST_TREX2INIT1

Texture Chip 2 Direct Bitmapped Secondary Init Register.

SST_TRIPLE_BUFFER

If program does no Z or no Alpha buffering then use aux buffer as hidden speed buffer!

SST_VFIFO_THRESH

threshold of PCI -> Voodoo Frame Buffer access before FIFO is to be serviced.

SST_VGA_PASS

1

Enable VGA passthrough

SST_VIDCLK2X

SST_VIDEO_24BPP

1

Enable 24-bit video mode

SST_VIDEO_CLEARCOLOR

Color to fill backbuffer during a page flip (and SST_VIDEO_NOCLEAR=0).

SST_VIDEO_DISABLE

Disable Video DAC data stream. Sync may still be active unless Sync variables disabled.

SST_VIDEO_FILTER_DISABLE

Disables 24 -> 16 bit color conversion smoothing. In words, disables dither smoothing.

SST_VIDEO_FILTER_THRESHOLD

16bit pixel value theshhold, in which smoothing will be applied to inside adjacent pixels.

SST_VIDEO_NOCLEAR

Don't clear the backbuffer during a page flip.

SST_VIN_CLKDEL

Single Voodoo system Video In clock delay.

SST_VOUT_CLKDEL

Single Voodoo system Video Out clock delay.

SST_VSYNC

0

Disable VSYNC, may increase performance





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