Mesa 3D

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Mesa 3D
Desarrollador(es)
Mesa 3D Team[1]
mesa3d.org
Información general
Autor(es) Brian Paul
Lanzamiento inicial Agosto de 1993
Última versión estable Mesa 13.0.1
14 de noviembre de 2016 (25 días)
Género Biblioteca
Programado en C, Ensamblador[2]
Sistema operativo Multiplataforma
Licencia Licencia MIT
[editar datos en Wikidata]

Mesa 3D es una biblioteca gráfica de código abierto, desarrollada inicialmente por Brian Paul en agosto de 1993, que proporciona una puesta en práctica genérica de OpenGL para renderizar gráficos tridimensionales en plataformas múltiples. Desde septiembre de 2012 Mesa ha recibido el visto bueno de Khronos como API compatible OpenGL.[3]

Mesa es mantenido por freedesktop.org, que es también donde se hospedan los servidores gráficos X.org y Wayland, y varios controladores de gráficos de código abierto.

En los sistemas basados en Unix tales como los derivados de BSD, o las distribuciones de Linux, Mesa implementa una capa de traducción independiente del fabricante entre un API de gráficos como OpenGL y los controladores de gráficos en el núcleo del sistema operativo. Además de las aplicaciones 3D, como juegos, los servidores gráficos utilizan llamadas OpenGL/EGL para producir la imagen en pantalla, por lo tanto, todos los gráficos (en aquellas implementaciones que se apoyen en esta librería) suelen pasar por Mesa. Algunos controladores (típicamente los propietarios desarrollados por los fabricantes) proporcionan su propia implementación de los API gráficos en lugar de usar Mesa.

Arquitectura de software[editar]

Linux y Mesa 3D
La implementación EGL más libwayland-EGL en Mesa 3D y Wayland

Mesa está disponible y puede ser compilado en prácticamente cualquier plataforma moderna y es distribuido bajo la Licencia MIT. Por no ser una implementación oficial de OpenGL por razones de licencia, los desarrolladores de Mesa han trabajado para mantener el API en línea con los más recientes estándares y pruebas conformadas de OpenGL.

Mientras Mesa soporta varios tipos de aceleradores gráficos por hardware, también puede ser compilado como un renderizador solamente de software. Al ser de código abierto, es posible usarlo para estudiar el comportamiento interno de un render compatible con OpenGL.

Implementación de API's gráficas[editar]

Históricamente, la principal API que Mesa implementa es OpenGL, junto a otras relacionadas del grupo Khronos (como OpenVG, OpenGL ES o recientemente EGL), pero Mesa puede implementar otras API's y de hecho lo hace con otras como Glide (en desuso) y Direct3D.

La versión soportada de las diferentes API's gráficas depende del controlador, porque cada uno tiene su propia implementación y por lo tanto su propia versión soportada. Esto ocurre especialmente cuando el controlador no está desarrollado con Gallium3D (dónde los controladores comparten código que tiende a homogeneizar la versión soportada).

OpenGL[editar]

Mesa 10.x soporta oficialmente OpenGL 3.3 con hardware gráfico Intel, AMD y Nvidia. Mesa 11.0 soporta OpenGL 4.1 en algunos controladores. Existe una tabla en la página oficial de Mesa con la versión soportada por cada uno de los controladores.

Hay que tener en cuenta que debido a la arquitectura modular de Mesa, hay extensiones de versiones recientes de OpenGL que también están soportadas, pero no todas ellas, por lo que dichas versiones no se consideran todavía soportadas.

Vulkan[editar]

El Grupo Khronos anunció el API Vulkan en marzo de 2015, y Vulkan 1.0 fue lanzado oficialmente el 16 de febrero de 2016.

Vulkan rompe la compatibilidad con OpenGL y abandona totalmente el concepto de una máquina de estados monolítica gigante. Los desarrolladores de Gallium3D dicen que Vulkan viene a ser Gallium3D 2.0 (Gallium3D separa la implementación de la máquina de estados de OpenGL del código propio de cada controlador gráfico).

Al mismo tiempo que Gallium3D recibe como entrada TGSI (Tungsten Graphics Shader Infrastructure), Vulkan recibe SPIR-V (Standard Portable Intermediate Representation - Vulkan), ambos lenguajes de representación intermedia de Shaders.

Intel lanzó su implementación del controlador Vulkan el mismo día que la especificación fue oficialmente lanzada, pero no fue hasta abril del mismo año cuando se introdujo en la rama principal del desarrollo de Mesa, por lo que la primera versión estable en soportarlo fue Mesa 12.0 en junio de 2016. Ya que el desarrollo del controlador i965 de Intel no fue desarrollado siguiendo las especificaciones de la arquitectura Gallium3D, tiene aún menos sentido seguirlas en el caso del controlador de Vulkan.

Se espera que el controlador propietario de AMD, que fue lanzado en Marzo de 2016, y se anunció que se liberaría como software libre, se incluya dentro de Mesa en el futuro. En paralelo y de manera no oficial, se desarrolla el controlador RADV, desarrollado por David Airlie (mantenedor del subsistema DRM y desarrollador de Red Hat) y Bas Nieuwenhuizen, para dar soporte Vulkan, que fue incluido en Mesa en Octubre de 2016 y se espera que forme parte de Mesa 13.0. AMD aún no se ha posicionado públicamente a favor de apoyar oficialmente RADV o finalmente liberar su propio controlador.

Por su parte, Nvidia lanzó su controlador propietario con soporte Vulkan en el día de lanzamiento, al igual que Imagination Technologies (PowerVR), Qualcomm (Adreno) y ARM (Mali) para Android y otros sistemas operativos. Pero cuándo, o si algún día llegarán a ser libres estos controladores es incierto.

Gallium3D[editar]

Gallium3D es un framework que tiene como objetivo facilitar el desarrollo de controladores gráficos. Los controladores gráficos más representativos que se han desarrollado con este framework son los AMD Radeon R300g (R300, R400 y R500), R600g (R600, R700, HD 5000 y HD 6000) y RadeonSI (AMD Radeon HD 7000 series / GCN y posteriores), los controladores Nouveau NV50 (GeForce 8, GeForce 9, GeForce 100, GeForce 200 y GeForce 300) y NVC0 (GeForce 400 y GeForce 500), y algunos otros como Freedreno.

Comparado con la forma tradicional del desarrollo de controladores gráficos, Gallium3D tiene las siguientes ventajas:

  • Hace los controladores más simples y pequeños: los actuales controladores son muy complejos, contienen mucho código duplicado y su programación está estrechamente ligada a la API de OpenGL 1.x / 2.x
  • Modelado para hardware moderno: la nueva arquitectura de controlador es una abstracción de hardware en lugar de un simple traductor de hardware OpenGL.
  • Soporte de múltiples API's gráficas: no está atado a un API gráfico específico.
  • Soporte de múltiples sistemas operativos.

Gallium3D consta de un conjunto de interfaces y una colección de bibliotecas destinadas a facilitar la programación de los controladores gráficos, y separa el controlador en 3 partes:

  • Gallium3D State Tracker: implementación propia de cada API gráfica. Esto permite unificar código entre los distintos controladores. Parte fundamental del controlador contenida en Mesa.
  • Controlador gráfico Gallium3D: código específico propio de cada hardware gráfico, y se alimenta de código en lenguaje TGSI, un lenguaje de representación intermedia de shaders. Este código es traducido desde GLSL (lenguaje propio de OpenGL) y luego traducido en el juego de intrucciones de la GPU.
  • Gallium3D WinSys: es la parte específica de cada sistema operativo que implementa el API de llamadas al sistema en todos los controladores gráficos.

El desarrollo de Gallium3D comenzó en 2008 en Tungsten Graphics y la implementación está disponible como software libre siendo parte de Mesa 3D desde 2009.

Referencias[editar]

  1. mesa3d.org - Developers
  2. «Mesa Languages Page» (en inglés). Open Hub. Consultado el 15 de diciembre de 2015. 
  3. OpenGL ES Conformant Products en khronos.org

Enlaces externos[editar]