Hogar Indice Busqueda Enlaces Sobre Nosotros
[LinuxFocus Image]
[Navegation Bar]
  Noticias   Archivos   Compañias   Consejos y Trucos  

Tarjeta Gráfica 3Dfx

por Phillip Ross


Introducción

Limitaciones del 3D
en tarjetas de video

Capacidades del
Voodoo 3Dfx Chip

Limitaciones del chip
Voodo 3Dfx

OEM Fabricantes
usan 3Dfx

Dentro del Voodoo 3Dfx

Programando 3Dfx

Usando Mesa con 3Dfx

Introducción

Hace aproximadamente un año, una compañía llamada 3Dfx Interactive anunció su nuevo chipset 3D que cambiaría el concepto que los usuarios de PCs tienen de los gráficos en 3D. Antes del lanzamiento de esta tarjeta de 3Dfx, no había ninguna alternativa razonablemente económica para disponer de gráficos 3D de altas prestaciones en un ordenador de uso doméstico. Los gráficos de alto nivel solo se podían encontrar en caras estaciones de trabajo como las de SGI y Sun, con un costoso hardware especializado. Los fabricantes de tarjetas de video para PC, como Number Nine, Diamond Multimedia y Matrox, tenían tarjetas asequibles en el mercado con reconocidas capacidades 3D, pero eran muy limitadas en comparación con el hardware costoso de las estaciones de trabajo.

Con el lanzamiento de la tarjeta de 3Dfx, bautizada como la Voodoo 3Dfx, los gráficos 3D de altas prestaciones se hicieron asequibles para el usuario medio. El rendimiento de este chip es indudablemente un punto de refenrencia en la infinita tarea de traer los gráficos de alto nivel al ordenador de sobremesa. Hasta ahora, la capacidad 3D de otras tarjetas de video estaban limitados al z-buffering y al sombreado gouraud (algunas menos primitivas soportaban un mapeado limitado de texturas) pero estas prestaciones estaban con frecuencia limitadas a unas determinadas resoluciones o a una profundidad de color. Desafortunadamente, se necesitaba muchísimo la intervención de la CPU para conseguir poner en marcha alguna de estas prestaciones para que funcione con alguna aplicación.

Limitaciones del 3D en las tarjetas de video

Aquí tenemos un ejemplo de cómo una tarjeta de video podría quedar limitada en sus prestaciones. Podría asegurar que soporta z-buffering, pero sólo puede tener código en los video drivers que almacena las the z-coordinates of pixels en areas de memoria de video que de otro modo no se usarían. Este z-buffering solamente podría ser usado a bajas resoluciones y con poca profundidad de color debido a que los modos superiores necesitan mucha más memoria. En los modos superiores no habría suficiente memoria para permitir almacenar las coordenadas-z. Incluso con el almacenamiento de estas coordenadas en memoria, la aplicación aún necesitaría usar la CPU para comparar las coordenadas-z de nuevos pixels con el contenido de la memoria de video. Ya que estas comparaciones requieren una importante capacidad de proceso en la CPU para llevarlo a cabo, la capacidad de z-buffering en la tarjeta de video no está en realidad eliminando el clásico cuello de botella del z-buffer. Si esto le suena demasiado complejo no se preocupe... en realidad es sólo una explicación técnica de por qué ni siquiera es comparable la tarjeta 3Dfx con aquellas tarjetas que aseguran ofrecer soporte 3D.

Prestaciones de la tarjeta Voodoo 3Dfx

Es suficiente decir que la Voodoo 3Dfx tiene capacidades 3D muy avanzadas que no ha conseguido ningún otro fabricante por ese precio. El chip se jacta de ofrecer prestaciones 3D tales como sombreado gouraud,buffer de profundidad (tanto z-buffering como w-buffering), mezclado-alpha, niebla, chroma-keying, y dithering. Tambien es capaz de proveer verdadera correccion de perspectiva en el mapeo de texturas, mipmapping trilineal, iluminacion de texturas, correccion de sub-pixeles y decompresion en el espacio de texturas. Todas estas tareas se realizan en su totalidad desde el hardware de la Voodoo sin prácticamente intervención de la aplicación.

La aplicación es únicamente responsable de preparar el entorno gráfico 3D y las coordenadas. Actualmente la Voodoo no soporta la inicialización de coordenadas, pero esto no es normalmente un problema ya que las CPUs modernas pueden ofrecer amplia capacidad de proceso para estos cálculos. Fíjese que aunque la próxima generación 3Dfx, bautizada como Voodoo2, sí que tendrá esta capacidad e incluso con aún más velocidad gráfica; los actuales modelos de pruebas de tarjetas de video usando el chip Voodoo2 están rompiendo todos los records de velocidad. Y más importante aún, la relación precio/prestaciones del chip Voodoo actual es la característica más sobresaliente.

Limitaciones del chip Voodoo 3Dfx

Desafortunadamente, el chip Voodoo 3Dfx también tiene por supuesto sus limitaciones. La principal es que sólo puede hacer rendering a pantalla completa, y que el chip no puede ser usado de forma efectiva como único adaptador de video de un ordenador. Las tarjetas de video que usen el chip 3Dfx necesitan tener otro adaptador independiente trabajando junto a él. La tarjeta con el chip 3Dfx trabaja codo con codo junto al otro adaptador. Funciona de forma que el sistema operativo usa la tarjeta de video normal, pero cuando una aplicación necesita hacer uso de la capacidad 3D, accede al driver de la tarjeta para inicializarla. El 3Dfx entonces arranca y empieza a dar servicio de acuerdo con las funciones Glide invocadas por la aplicación.

En una configuración normal sin un adaptador 3Dfx, la tarjeta tradicional se sitúa en su propia ranura de la placa madre, y con su salida conectada al monitor donde visualiza el resultado. Tarjetas de video 3Dfx tales como la Monster3D y Pure3D usan un sistema "pass-through" que permite a ambas tarjetas, la tradicional y la 3Dfx, usar el mismo monitor. Una configuración de este tipo consiste en tener ambas tarjetas de video en sendas ranuras de la placa madre. La salida de la tarjeta convencional se conecta a la entrada de la 3Dfx a través de un cable pass-through normalmente incluido con la 3Dfx. En los modos normales de funcionamiento, la tarjeta convencional produce su señal normal de video que inyecta en la entrada de la tarjeta 3Dfx, que a su vez la pasa al monitor. Cuando una aplicación pide al driver 3D inicializar la 3Dfx, la tarjeta 3D desactiva la propagación de la señal convencional que ya no llegará al monitor, comenzando a enviar su propia señal al monitor, hasta que la aplicación genere una orden de parada del driver 3D y restaure el envío de la señal de video convencional al monitor.

Desafortunadamente, con una configuración pass-through la salida de video normal no es visible lo que puede convertirse en un problema para aplicaciones corriendo en sistemas de ventanas tales como Xwindows, donde se quiera obtener el resultado 3D dentro de una ventana. Para ello hay otro método soportado por los adaptadores 3Dfx que puede ser mejor para aplicaciones de este tipo, pero que requiere un monitor adicional. Si tiene dos monitores, puede conectar uno a la salida de la tarjeta convencional y otro a la salida del adaptador 3Dfx. De esta forma, un monitor siempre visualiza la señal de la tarjeta de video convencional, y el otro permanece inactivo hasta que inicialice la tarjeta 3Dfx. Entonces, una vez que arranque la 3Dfx, puede usar un monitor para su sistema de ventanas normal, y el otro para dar la salida de la 3Dfx a pantalla completa.

3Dfx ha creado un nuevo chip llamado 3Dfx RUSH, que es capaz de producir en una ventana. Las tarjetas de video con este chip tambien traen incorporado un chip 2D y comparten una memoria intermedia única. Ya que no hay actualmente soporte de este tipo para Linux no podemos comentarlo aquí, pero ya está en marcha su desarrollo.

Otra limitación del chip 3Dfx es que no puede alcanzar resoluciones más altas que las que consiguen las tarjetas convencionales de hoy en día, que mientras que éstas últimas están ya alcanzando resoluciones de 1280x1024, 1600x1200, o incluso superiores, los adaptadores 3Dfx generalmente no van más allá de los 640x480, aunque no es tanta limitación como se podría pensar, ya que con las técnicas de anti-aliasing avanzado y filtrado de texturas de la 3Dfx, un gran número de objetos se pueden visualizar dentro de los 640x480 de resolución sin que prácticamente no se observe la pixelización. De hecho es con frecuencia dificil identificar la resolución que esté usando una aplicación 3Dfx sólo mirando a la pantalla.

Las tarjetas básicas 3Dfx más comunes, como la Monster3D solamente alcanzan los 640x480. Creo que algunas pueden elevar su resolución hasta los 800x600, pero según tengo entendido a esta resolución la tarjeta pierde la capacidad de hacer buffering de profundidad y alfa ya que la memoria que normalmente se usaría para estos buffers se consume dedicada a alcanzar esta resolución mayor. Las tarjetas de gama alta, como la Quantum3D, puede soportar 800x600 sin perder esas otras capacidads.

Fabricantes OEM usan 3Dfx

3Dfx Interactive es el fabricante de este chip 3D de alto rendimiento. Sin embargo no fabrican las tarjetas de video que usan este chip. Otras compañías como Diamond Multimedia, Orchid Technology y Canopus Corporation usan todas ellas este chip en las tarjetas de video que ellos producen. Diamond tiene la Monster3D, Orchid la Righteous3D y Canopus la Pure3D. Una compañía con el nombre de Quantum 3D se segregó de 3Dfx y ofrece tarjetas de video que hacen uso de configuraciones avanzadas de la Voodoo (unidades PixelFX y TexelFX), más memoria para cuadros o texturas, etc. Estos modelos son conocidos como los Obsidian 3D. Visite el web de 3Dfx Interactive en (www.3dfx.com) para consultar un listado completo de fabricantes que producen tarjetas de video que usan el chip 3Dfx.

Dentro del Voodoo 3Dfx

El chip Voodoo en realidad puede ser concebido como un sistema avanzado y flexible de generación de gráficos, formado por subsistemas Voodoo separados que pueden combinarse de diferentes formas, pero la más simplista sería aquella formada por un único Voodoo. Cada subsistema a su vez está formado por procesadores independientes conocidos como unidades PixelFX y TexelFX. PixelFX es la unidad responsable de operaciones por pixel tales como buffering de profundidad de color y sombreado gouraud. La unidad TexelFX es la responsable de operaciones con filtrado de texturas y proyecciones. Juntas, estas unidades pueden trabajar para producir efectos tales como texturas iluminadas. Cada una tiene además su propia memoria de video, usada para sus operaciones especializadas. La PixelFX usa su memoria para almacenar pixels para la memoria intermedia de cuadros, y la TexelFX para almacenar texturas.

Cada configuración de subsistema Voodoo contiene una unidad PixelFX, pero puede haber más subsistemas configurados con una, dos o tres unidades TexelFX independientes para aumentar la velocidad del mapeado de texturas. Incluso yendo más lejos, un sistema Voodoo se puede configurar con múltiples subsistemas y usar entrelazados para doblar de forma efectiva la tasa de renderización. Estas configuraciones avanzadas son capaces de propocionar rendimientos superiores incluso que las estaciones de trabajo SGI de gama alta. Por supuesto estas configuraciones avanzadas son bastante más costosas que las tarjetas Voodoo simples, que cubren con creces el uso medio de la mayoría de usuarios.

Programación con 3Dfx

3Dfx Interactive no publica documentación relativa a la programación de sus chips a nivel de registros por temor a facilitar el plagio de su hardware mediante ingeniería inversa. En su lugar, distribuyen un kit de desarrollo llamado Glide que actúa como una microcapa de software para acceder al hardware. Glide es un conjunto de funciones organizadas en forma de biblioteca que oculta las especificaciones de los registros a la vez que proporciona un interfaz de programación relativamente sencillo. Las bibliotecas se portan a cada plataforma (incluído Linux) que 3Dfx elija para dar soporte, junto con una documentación muy detallada del interfaz. Los desarrolladores pueden entonces usar el interfaz para desarrollar sus propias aplicaciones con la 3Dfx. Glide es una biblioteca gráfica de muy bajo nivel, no como OpenGL o Direct3D. No proporciona ninguna capacidad gráfica de alto nivel como mostrar listas o funciones de transformación. Tan solo proporciona una pequeña abstracción de los registros hardware y unas funciones por software que acceden a las rutinas implementadas directamente en el hardware. He podido hablar con la persona que portó Glide a Linux, que indica que la biblioteca es muy simple. Básicamente, dice que solamente debe pasar los parámetros correctos a las funciones de Glide, que se limitan a pasarlos a los registros de la tarjeta e indicar a la 3Dfx que renderize.

Esto no quiere decir que los desarrolladores con OpenGL o Direct3D no puedan desarrollar aplicaciones 3Dfx. Los drivers de OpenGL y Direct3D han sido escritos para usar Glide, para que los desarrolladores puedan usar los interfaces de ambos entornos y los drivers traducirán las funciones de alto nivel a llamadas específicas a Glide, el que a su vez ejecuta 3Dfx. Este es un método muy rápido y eficiente para el desarrollo.

Usando Mesa con 3Dfx

Se ha escrito un driver que interactúa entre Mesa (la implementación libre de OpenGL que corre sobre muchos sistemas operativos) y Glide, para permitir la ejecución de aplicaciones OpenGL sobre Linux y Windows95 con soporte hardware. Linux es libre, los compiladores para Linux lo son, Mesa lo es, y el kit de desarrollo Glide de 3Dfx lo es. ¡Toda esta combinación proporciona un sistema de desarrollo de increiblemente bajo coste y a la vez de muy altas prestaciones! Desafortunadamente, no hay aún kit de desarrollo Glide para linux en sistemas Alpha o Sparc, por lo que por ahora se limita a la plataforma Intel x86.

A la hora de escribir estas líneas, la última versión de Mesa es la 2.5, y ya está disponible la 2.6 en fase beta, en pruebas. El driver Mesa está muy avanzado y es capaz de acelerar la renderización de puntos, líneas y polígonos con sombras planas y sombras gouraud, además de mapeado de texturas, depth buffering, fogging y blending. Aunque mencioné antes que el chip Voodoo 3Dfx no era capaz de nada excepto renderización a pantalla completa, es posible conseguir renderización dentro de una ventana gracias a un pequeño truco en el driver Mesa, que toma los datos de la memoria intermedia de cuadros y la transfiere por el bus PCI a la memoria de video de la tarjeta convencional. Incluso aunque no es tan rápido como la renderización a pantalla completa, es aún mucho más rápido que la renderización por software de Mesa en solitario.

Mesa está disponible para descargarlo del servidor ftp de Mesa en ftp://iris.ssec.wisc.edu/pub/Mesa. Mesa se distribuye en dos paquetes separados: uno contiene la biblioteca principal y los ficheros de cabecera, y comienza con el nombre MesaLib, mientras que el otro archivo es sólo de ejemplos demostrativos, y comienza con el nombre MesaDemos. Para instalarlo simplemente desempaquete el archivo en formato tar, cambie al directorio creado durante el proceso, y a partir de aquí dispone de varias alternativas para construir Mesa. Desde Mesa 2.5 hubo unas cuantas rutinas de transformacion reescritas en lenguaje ensamblador de intel x86 para optimizar la velocidad. Por desgracia no están del todo libre de errores, pero ya corregios en las versiones beta de Mesa 2.6. Para compilar Mesa con soporte 3Dfx pero sin las rutinas en ensamblador, sólo teclearía la orden "make linux-glide" (por supuesto sin las comillas). Para compilarlo con 3Dfx e incluyendo las rutinas, teclearía "make linux-386-glide". A partir de Mesa 2.6 se han escrito optimizaciones en el makefile que permiten al compilador producir código que optimizará Mesa para usarlo con los famosos juegos GlQuake and QuakeII. Si quiere optimización GlQuake usaría "make linux-386-quake-glide" para compilar Mesa.

Una vez compilado Mesa, hay varias formas de instalarlo. Una alternativa podría ser colocar los ficheros de cabecera y bibliotecas respectivamente en los directorios /usr/include y /usr/lib, o quizás en /usr/local/include y /usr/local/lib. O bien puede colocarlos en cualquier directorio siempre que el cargador dinámico de Linux pueda encontrarlos, según se le indique en el fichero de configuración /etc/ld.so.conf. Ya que Mesa se desarrolla con rapidez y me gusta probar las betas a medida que se publican, conservo copias en directorios separados para cada version. Cualquiera que sea la versión que quiera usar, cambio mi fichero ld.so.conf para incluir ese directorio incluyendo la versión deseada. Sin embargo, es muy importante no olvidar el paso de cambiar adecuadamente el fichero ld.so.conf y ejecutar la utilidad ldconfig, para ajustar correctamente los enlaces simbólicos en los directorios con biblioteclas entre otras tareas. Si desea ver qué bibliotecas conoce exactamente su sistema, puede usar la opción -p de ldconfig: cuando quiero saber qué versión de Mesa usará una aplicación, tecleo la orden siguiente para mostrar la revisión de la biblioteca Mesa actualmente en uso

: ldconfig -p | grep Mesa

Una vez instalado Mesa ya está listo para comenzar. Para usar una aplicación Mesa que use 3Dfx debe ejecutarla como root, y debe tener preparado el servidor Xwindow con una profundidad de color de 16 bits por pixel. Si descargó y desempaquetó el paquete de demos, se habrán compilado junto a Mesa y ya puede probarlos. Cuando use Mesa, hay tres diferentes formas de ejecutar una aplicación. Lo primero, puede hacerlo todo con software de renderización que no use 3Dfx para nada. Esta es la opción inicialmente por defecto. Para hacer que la aplicación use 3Dfx debe definir una variable de entorno. Para hacer que se ejecute la aplicación con 3Dfx a pantalla completa debe definir

MESA_GLX_FX=fullscreen

y el programa usará 3Dfx en consecuencia. Sin embargo usar un programa Mesa dentro de Xwindows puede necesitar ciertos trucos. Cuando ejecute un programa Mesa, el servidor X no sabe en realidad si 3Dfx existe siquiera. Lo que sucede es que inicializa y abre una ventana, y 3Dfx es inicializado y puede empezar a renderizar. Si el cursor del ratón se sale de la ventana en el servidor X, el programa Mesa no será capaz desde ese momento de aceptar entrada de teclado o eventos de ratón. Por tanto, si no está usando más que un monitor, es aconsejable usar la colocación interactiva de ventanas si el gestor lo soporta, o de lo contrario cuando arranque la aplicación Mesa, 3Dfx entrará en funcionamiento y no será capaz de ver su escritorio en el servidor X para colocar el cursor del ratón de nuevo dentro de la ventana. Sí que es posible escribir un programa Mesa para interceptar el movimiento del cursor de forma que una vez entra el ratón en la ventana no pueda salir, que al alcanzar el borde de la ventana sea colocado de nuevo en el centro de la ventana.

Para hacer que una aplicación use 3Dfx para renderizar dentro de una ventana tiene que definir otras variables de entorno:

SST_VGA_PASS=1
SST_NOSHUTDOWN=1 MESA_GLX_FX=window

Una vez fijadas estas variables y ejecutado el programa, debería obtener mejor rendimiento durante la renderiziación que la resultante con métodos por software.


Traducido por Gonzalo Garcia Agullo

Para más información:
© 1998 Phillip Ross
Esta página está mantenida por Miguel A Sepulveda.