El lanzamiento comercial de Windows Vista supuso una renovación muy importante de toda la infraestructura gráfica que, hasta ese momento, Microsoft utilizaba en sus sistemas operativos. Los cambios fueron tan profundos que incluso se modificó sustancialmente el modelo de drivers de vídeo que hasta entonces se usaba. En efecto, Windows Vista era capaz de usar controladores de dispositivo para hardware de vídeos desarrollados para Windows XP, pero al mismo tiempo introducía una nueva forma de implementar estos componentes software. Mientras que en el caso de XP los controladores de vídeo eran componentes que se ejecutaban en modo kernel (eran drivers), en Vista es necesario desarrollar un controlador de vídeo en forma de librería de enlace dinámico, que funciona en modo usuario, y un driver que se comunica con el subsistema de DirectX que se ejecuta en modo kernel.
La introducción comercial de la nueva versión de Windows supone también una nueva revisión de gran parte de la tecnología software usada en el apartado gráfico del sistema operativo. Si bien lo más llamativo es la presentación de una nueva versión de DirectX, hay novedades interesantes como el lanzamiento de dos nuevas API que se aprovecharán de las capacidades de aceleración por hardware de las potentes GPU actuales.
Nuevas API: Direct2D y DirectWrite
Hasta hace unos años las API gráficas de Microsoft que hacían uso de aceleración por hardware eran DirectDraw y Direct3D, pero desde algún tiempo ambas se encuentran englobadas bajo la denominación DirectX Graphics. Mientras que DirectDraw era una interfaz de programación destinada a la aceleración de operaciones gráficas en dos dimensiones, Direct3D se ocupaba de realizar tareas equivalentes pero para gráficos en tres dimensiones. Desde la unión de ambas API en una sola no ha existido una interfaz independiente destinada a la aceleración de gráficos 2D.
Windows 7 supondrá la aparición de Direct2D, una interfaz de programación que ofrecerá servicios de gráficos en dos dimensiones. Lo primero que llama la atención de esta API es que podrá estar acelerada por hardware o bien implementada sólo en software. Para algunas operaciones la implementación por software quizás no sea tan mala como en un principio podría parecer, sobre todo teniendo en cuenta que hoy en día muchos usuarios disponen de equipos con procesadores con varios núcleos, de forma que aún en el supuesto de que un núcleo se dedicase principalmente a procesar las operaciones de Direct2D, aún quedarían uno o más núcleos disponibles para ejecutar otras operaciones.
Direct2D se encargará principalmente de acelerar todo lo relacionado con la visualización de gráficos vectoriales, mapas de bits y texto. La API se ha diseñado de manera que pueda interoperar con el actual GDI y con Direct3D, lo que ha ayudado a que además se pueda ofrecer un elevado rendimiento gráfico al estar basada sobre algunas funcionalidades integradas en Direct3D desde hace tiempo. Las previsiones de Microsoft indican que el uso de Direct2D producirá un menor consumo de tiempo de procesador que el uso que hasta ahora se venía haciendo de GDI o GDI+. La integración con Direct3D además dota a esta nueva API de características como transparencias, anti alias especificado por cada primitiva ejecutada o de una imagen completa.
Por otro lado tenemos a DirectWrite, que como su nombre sugiere se encarga de mejorar y acelerar la presentación de caracteres en pantalla. La aceleración del dibujado de caracteres de efectúa aprovechando la aceleración por hardware que puede usar Direct2D. Otra de las capacidades interesantes que introduce DirectWrite es el suavizado de los bordes de los caracteres, lo que se consigue al usar las capacidades de suavizado de que dispone el hardware gráfico actual. Si bien DirectWrite produce los mejores resultados al usarse en una plataforma que soporte Direct2D, lo cierto es que esta tecnología está diseñada para funcionar con cualquier tecnología de render soportada por los sistemas operativos de Microsoft, por lo que puede utilizar, además de Direct2D, DirectX y GDI. Se estima que esta API es capaz de ofrecer el doble de rendimiento que si se usase sólo el GDI para generar texto.
Direct3D 11
Oficialmente Microsoft describe esta nueva versión de Direct3D como un súper conjunto de la versión 10.1 de esta misma API, por lo que recomienda a los desarrolladores que empleen Direct3D 10.1 como plataforma de desarrollo para facilitar la transición hacia la nueva versión. Dentro del apartado de malas noticias hay que resaltar que la versión 11 sólo va a estar disponible para Windows Vista y Windows 7, por lo que los usuarios de XP no van a poder aprovecharse de las mejoras que se introducen con esta nueva interfaz de programación.
Los principales objetivos de los desarrolladores de Microsoft durante la implementación de Direct3D 11 han sido mejorar la escalabilidad y el rendimiento de esta API, al tiempo que se extendía el tipo de aplicaciones que es posible desarrollar para las GPU actuales. A pesar de estas mejoras la nueva versión de Direct3D funcionará sobre hardware compatible con las versiones 9 y 10 de esta API.
De hecho una aplicación bien realizada que use Direct3D podrá funcionar sobre cualquier hardware gráfico o incluso sin él. Esto se debe a que se incluye un renderizador implementado totalmente por software, al que Microsoft denomina WARP, que produce resultados visualmente idénticos a los que se obtendrían al usar hardware de aceleración 3D. Se ha trabajado mucho en la mejora de esta implementación software del renderizador, de forma que mucho más rápido que la versión por software que existía hasta el momento, denominada RefFast, hasta el punto de que es posible utilizarlo para ejecutar aplicaciones que requieran funcionamiento en tiempo real. Una buena parte de las mejoras que se han obtenido con WARP se deben a que está optimizado para ejecutarse en procesadores con varios núcleos, lo que se complementa con un amplio uso de las extensiones SSE del juego de instrucciones x86.
Una de las novedades más interesantes, que debe estar soportada por el hardware compatible con Direct3D 11, es la que calcula en tiempo real nuevos polígonos a partir de los que tiene la geometría original del modelo 3D que se desee mostrar en pantalla. De esta forma es posible generar en pantalla modelos tridimensionales con un nivel de detalle muy elevado sin necesidad de que el diseñador gráfico produzca modelos geométricamente muy complejos. Esta nueva posibilidad además reduce el espacio necesario para almacenar la geometría de los modelos 3D, ya que sino sería necesario añadir explícitamente los polígonos que gracias a esta característica el hardware puede calcular por sí mismo.
Esta característica de cálculo de geometría adicional le resultará de interés a los desarrolladores que produzcan para Xbox 360, ya que dicha plataforma posee un subconjunto del modelo de cálculo de geometría que se ha incluido en Direct3D 11. Esta paridad entre el hardware de PC y Xbox 360 sin duda facilitará la creación de productos multi plataforma.
Otra nueva posibilidad tiene que ver con la programación de los shaders (programas que se ejecutan en la GPU), ya que con esta nueva versión de Direct3D será posible usar subrutinas. Además se introduce un nuevo tipo de shader, denominado de computación, que básicamente sirve para realizar el mismo tipo de cálculos que ahora se efectúan usando las API Cuda de nVIDIA y Stream de AMD. Es decir, a partir de la aparición de Direct3D 11 los desarrolladores dispondrán de un modelo de programación estándar pare crear aplicaciones que usen el hardware de las GPU para aplicaciones que no sean de tipo gráfico. De esta forma este tipo de desarrollos no deberán disponer de soporte separado para las GPU de AMD y nVIDIA, ya que con una sola API sus productos funcionarán sobre cualquier procesador gráficos que disponga de soporte para shaders de computación.
Microsoft ha realizado una serie de optimizaciones dirigidas exclusivamente a facilitar el uso y la programación de este tipo de shaders, de forma que se han introducido características orientadas hacia una programación más generalista, es decir, que no esté totalmente centrada en la producción de gráficos, como pueden ser la posibilidad de realizar operaciones aleatorias de entrada/salida o la comunicación entre distintos hilos de ejecución de un mismo shader. También se ha facilitado la inicialización de la API respecto a los pasos que son precisos para usarla para la generación de gráficos 3D, si bien se ha intentado mantener un balance adecuado entre la simplicidad de uso y la potencia que puede ofrecer. También se ha mejorado la integración de tipos de datos que no suelen usarse en aplicaciones de tipo gráfico, como por ejemplo texto, muestras de datos tomadas, por ejemplo, a partir de sistemas de adquisición de datos, píxeles, etc. Hay que tener en cuenta que, hasta ahora, los shaders estaban pensados casi exclusivamente para manejar información en formato de coma flotante de simple o doble precisión. A todo lo anterior hay que añadir la generación de los resultados en tiempo real y una sencilla integración con Direct3D.
Sobre esto último comentar que los shaders de computación soportan todos los tipos de recursos que soporta Direct3D, siendo capaces de acceder a la información almacenada en texturas, por ejemplo. Debido a lo integrados que están estos shaders en Direct3D, es preciso configurar el modo en el que se usa la API: modo gráfico o de computación. Microsoft ha trabajado para que sea posible realizar transiciones de uno a otro modo de forma eficiente, por lo que una aplicación podría tener partes que usen Direct3D como motor de aceleración 3D por hardware y otras que lo empleen para acelerar otro tipo de cálculos más genéricos. De esta forma sería posible, por ejemplo, usar Direct3D en modo gráfica para generar una imagen, escribir dicha imagen en una textura, a continuación usar un shader de computación para realizar algún tipo de tratamiento sobre la imagen para, finalmente, mostrar la imagen tratada.
Las aplicaciones que más pueden beneficiarse son, por ejemplo, las de procesamiento de imagen (cálculo de histogramas, transformadas rápidas de Fourier, convoluciones, etc), procesamiento de vídeo (conversión de un codec de compresión a otro, eliminación de ruido), juegos (técnicas avanzadas de render, como el ray tracing, y el uso de los shaders de computación para el cálculo de físicas) y, por último, en el campo de las aplicaciones científicas y de ingeniería.
Otro aspecto que se he mejorado en Direct3D 11 es el uso de varios hilos de ejecución. Hay que tener en cuenta que la proliferación de procesadores equipados con varios núcleos supone una clara oportunidad de optimización mediante el uso de varios hilos de ejecución simultáneos. Por lo tanto la nueva versión de Direct3D propugna un modelo de desarrollo de aplicaciones en el que la propia aplicación se distribuye en varios hilos. Además la propia runtime de Direct3D también hace uso de varios hilos, modelo que también debe seguirse en los propios controladores de dispositivo de la GPU para así poder obtener un rendimiento lo más óptimo posible. Este modelo de desarrollo hace que se mejore el rendimiento y que el software sea escalable dependiendo del número de procesadores presentes en el sistema y del número de procesadores gráficos que se encuentren conectados al equipo. Además también se facilita el desarrollo multi plataforma, nuevamente teniendo como objetivo la plataforma Xbox 360, ya que dicho hardware dispone de un procesador equipado con varios núcleos.
También se han mejorado las herramientas de programación que Microsoft ofrece para el desarrollo de shaders, más concretamente su lenguaje HLSL (High Level Shader Language). Hay que tener en cuenta que los shaders actuales deben tener en cuenta sobre que plataforma hardware se ejecutan, por lo que en gran mayoría de ocasiones cuentan con comprobaciones para ejecutar una parte u otra del shader dependiendo de la plataforma. Si bien esta estrategia hace que todo el código del shader este en un mismo sitio también hace que dicho código sea menos legible al tener más saltos condicionales de los que quizás fuesen necesarios. Para intentar solucionar esta situación, con Direct3D 11 se introducen en HLSL algunos conceptos de programación orientada a objetos: interfaces y clases.
También van a introducirse nuevos formatos de texturas, denominados BC6 y BC7. Una de las principales características del formato BC6 es que está optimizado para usarse con texturas que tengan más de ocho bits por cada componente RGB, obteniéndose ratios de compresión de hasta 6:1 para el caso de texturas con 48 bits por pixel. Por otro lado, el formato BC7 es capaz de obtener una compresión de 3:1 para texturas en formato RGB o de 4:1 para el caso de texturas en formato RGB con canal alfa.
Eugenio Barahona Marciel es desarrollador de drivers y aplicaciones para Windows.
Resumen del año 2009 en TI Con 2009 llegando a su fin, es hora de hacer balance de cuáles han sido las principales noticias de tecnología. Los anuncios de Windows 7 por parte de Microsoft en materia de software o la llegada del iPhone 3G S de Apple en el terreno del hardware son algunas de ellas. Pero hay muchas más. [22/12/2009 ] - 95 votos
Nokia N900 con Maemo: primeras impresiones Se trata del primer modelo que corre sobre sistema operativo Maemo 5, basado en Linux, frente a lo habitual de la serie N que hasta ahora estaban basados en Symbian. Dispone de pantalla táctil de 3,5 pulgadas y resolución de 800 x 480 píxeles, cámara de 5 megapíxeles y navegador con soporte de Flash para la visualización de contenidos Web. Destaca la gestión que realiza de las aplicaciones en modo multitarea. [18/12/2009 ] - 78 votos
Google presenta Nexus One, su móvil Android El esperado teléfono móvil Android de Google con marca propia (aunque fabricado por HTC) ya está oficialmente presentado y disponible en Estados Unidos. En Europa deberemos esperar algún tiempo (aún por determinar) y Vodafone será el operador de referencia. He aquí las primeras imágenes del esperado Nexus One. [07/01/2010 ] - 57 votos