Guía de la Plataforma de rasterización avanzada (WARP) de Windows

En este artículo se describen la Plataforma de rasterización avanzada de Windows (WARP) y los siguientes aspectos de WARP.

¿Qué es WARP?

WARP es un rasterizador de software de alta velocidad y totalmente conforme. Es un componente de la tecnología de gráficos de DirectX introducida por el entorno de ejecución de Direct3D 11. El entorno de ejecución de Direct3D 11 se instala en Windows 7, Windows Server 2008 R2 y Windows Vista con la actualización [KB971644]. Windows 8, Windows 10, Windows Server 2012 & anteriores y Windows RT incluyen el entorno de ejecución de Direct3D 11.1, que tiene una versión actualizada de WARP. Windows 10 Fall Creators Update (1709) incluye una versión de WARP que admite los entornos de ejecución direct3D 11 y Direct3D 12.

Ventajas de WARP

WARP proporciona las siguientes ventajas:

Eliminación de la necesidad de rasterizadores de software personalizados

WARP simplifica el desarrollo mediante la eliminación de la necesidad de crear un rasterizador de software personalizado y ajustar la aplicación para ella en lugar de optimizar la aplicación para el hardware. Al proporcionar un rasterizador de software de uso general único, ya no es necesario escribir algoritmos de representación de imágenes de varias maneras para ejecutarse en hardware o software con diferentes características y funcionalidades. Todavía puede implementar algoritmos de varias maneras para lograr un mejor rendimiento o escalado; sin embargo, no es necesario cambiar la API ni la arquitectura de representación que se usa para implementar esos algoritmos. En su lugar, puedes centrarte en la creación de una gran aplicación direct3D 10 o posterior que tendrá el mismo aspecto y funcionará bien en el hardware o en el software.

Habilitación del rendimiento máximo desde hardware gráfico

Cuando una aplicación se ajusta para ejecutarse de forma eficaz en el hardware, también se ejecutará de forma eficaz en WARP. El contrario también es cierto; cualquier aplicación que esté optimizada para ejecutarse correctamente en WARP funcionará bien en el hardware. Es posible que las aplicaciones que usan Direct3D 10 y versiones posteriores no se escalen de forma eficaz en hardware diferente. WARP tiene perfiles de rendimiento similares al hardware, por lo que la optimización de una aplicación para lotes grandes, la minimización de los cambios de estado, la eliminación de puntos de sincronización o bloqueos beneficiará tanto al hardware como al WARP.

Habilitar la representación cuando el hardware de Direct3D no está disponible

WARP permite una representación rápida en una variedad de situaciones en las que las implementaciones de hardware no son deseadas o no disponibles, entre las que se incluyen:

  • Cuando el usuario no tiene ningún hardware compatible con Direct3D
  • Cuando una aplicación se ejecuta como un servicio o en un entorno de servidor
  • Cuando una aplicación quiere reservar los recursos de hardware de Direct3D para otros usos
  • Cuando no se instala una tarjeta de vídeo
  • Cuando un controlador de vídeo no está disponible o no funciona correctamente
  • Cuando una tarjeta de vídeo no tiene memoria, se bloquea o se tarda demasiados recursos del sistema en inicializarse.

Aprovechamiento de los recursos existentes para la representación de software

Hay una gran comunidad, muchos libros, sitios web, SDK, ejemplos, notas del producto, listas de distribución de correo y otros recursos que pueden ayudarle a aprovechar la representación de imágenes basadas en sombras de Direct3D 10 y versiones posteriores. Con WARP como reserva de software, puede usar conocimientos existentes sobre hardware para mejorar el rendimiento de la aplicación cuando se ejecuta con hardware o software. Además, muchas herramientas excelentes de los proveedores de tarjetas gráficas y en el SDK de DirectX pueden ayudarle a diseñar, compilar, desarrollar, depurar y analizar los problemas de rendimiento de las aplicaciones gráficas. Estas herramientas y conocimientos ahora pueden beneficiar el desarrollo de aplicaciones que tiene como destino hardware y software cuando se usa WARP.

Habilitación de escenarios que no requieren hardware gráfico

Varios algoritmos y aplicaciones (algoritmos de procesamiento de imágenes, impresión, comunicación remota, EQUIPOS virtuales y otros emuladores, representación de fuentes de alta calidad, gráficos, gráficos, etc.) normalmente se han optimizado para la CPU porque no dependen del hardware. Con WARP, puede usar una única arquitectura que ejecute estos algoritmos y aplicaciones y que se pueda ejecutar completamente en software; sin embargo, si la aceleración de hardware está disponible, puede aprovecharla.

Finalización de la plataforma de gráficos de DirectX

WARP te permite acceder a todas las características gráficas de Direct3D 10 y versiones posteriores, incluso en equipos sin hardware gráfico de Direct3D 10 y versiones posteriores. Bits de capacidad quitados de Direct3D 10 (límites); Es decir, ya no es necesario comprobar si las funcionalidades de gráficos están disponibles en el hardware gráfico porque Direct3D 10 y versiones posteriores garantiza esta disponibilidad. Ahora puede usar todas las características de una amplia gama de tarjetas de vídeo sabiendo que su aplicación se comportará y tendrá el mismo aspecto en todas partes. Puede escalar el rendimiento de estas aplicaciones simplemente deshabilitando características gráficas costosas en tarjetas de vídeo de gama baja o representación en destinos más pequeños.

Requisitos y funcionalidades de WARP

WARP es totalmente compatible con todas las características de Direct3D 10 y 10.1. Por ejemplo, WARP admite las siguientes características más importantes:

  • Todos los requisitos de precisión de la especificación Direct3D 10 y 10.1
  • Direct3D 11 cuando se usa con los niveles de característica 9_1, 9_2, 9_3, 10_0 y 10_1 (para obtener más información sobre los niveles de características, vea D3D_FEATURE_LEVEL)
  • Todos los formatos de textura opcionales, como los destinos de representación multisample y el muestreo de superficies flotantes
  • Suavizado de contorno, representación de alta calidad de hasta 8x suavizado de contorno multisample (MSAA)
  • Filtrado anisotrópico
  • Aplicaciones de 32 y 64 bits y aplicaciones de 32 bits con reconocimiento de direcciones grandes

Al instalar la actualización de plataforma para Windows 7 en Windows 7 SP1 o Windows Server 2008 R2 SP1, ese sistema operativo incluye el entorno de ejecución de Direct3D 11.1 y una versión de WARP que admite Direct3D 11.x cuando se usa con los niveles de características 9_1, 9_2, 9_3, 10_0, 10_1 y 11_0.

Windows 8, Windows 10, Windows Server 2012 & anteriores y Windows RT incluyen el entorno de ejecución de Direct3D 11.1 y una nueva versión de WARP. Esta versión admite Direct3D 11.x cuando se usa con los niveles de características 9_1, 9_2, 9_3, 10_0, 10_1, 11_0 y 11_1.

Windows 10 Fall Creators Update (1709) incluye una nueva versión de WARP que admite los niveles de características de Direct3D 12 12_0 y 12_1.

Los requisitos mínimos de equipo para WARP son los mismos que para Windows Vista, específicamente:

  • CPU mínima de 800 MHz
  • No se requiere MMX, SSE o SSE2
  • Mínimo 512 MB de RAM

Cómo usar WARP

Para Direct3D 12, la creación de un dispositivo WARP requiere primero identificar el adaptador WARP. Para facilitar esto, DXGI 1.4 proporciona el método IDXGIFactory4::EnumWarpAdapter . El adaptador WARP se puede proporcionar a D3D12CreateDevice para crear un dispositivo WARP.

Los componentes de Direct3D 10, 10.1 y 11 pueden usar un tipo de controlador adicional que puede especificar al crear el dispositivo (por ejemplo, al llamar a la función D3D11CreateDevice ). Ese tipo de controlador es D3D10_DRIVER_TYPE_WARP o D3D_DRIVER_TYPE_WARP. Al especificar ese tipo de controlador, el entorno de ejecución crea un dispositivo WARP y no inicializa un dispositivo de hardware.

Dado que WARP usa la misma interfaz de software para Direct3D que el rasterizador de referencia, cualquier aplicación direct3D que pueda admitir la ejecución con el rasterizador de referencia se puede probar mediante WARP. Para usar WARP, cambie el nombre de D3d10warp.dll a D3d10ref.dll y colóquelo en la misma carpeta que el ejemplo o la aplicación. A continuación, al cambiar a ref, verá la representación WARP.

Si cambia el nombre de WARP a D3d10ref.dll y lo coloca en C:\Archivos de programa (x86)\Microsoft DirectX SDK (junio de 2010)\Samples\C++\Direct3D\Bin\x86, puede ejecutar todos los ejemplos de DirectX en WARP, haciendo clic en el botón "Alternar referencia" del ejemplo o ejecutando el ejemplo con /ref especificado en la línea de comandos.

Todas las aplicaciones que pueden usar Direct3D pueden usar WARP. Esto incluye los siguientes tipos de aplicaciones:

Juegos casuales

Los juegos suelen tener requisitos de representación simples. Sin embargo, también requieren el uso de efectos visuales impresionantes que pueden necesitar aceleración de hardware. La mayoría de los títulos de juegos más vendidos para Windows son simulaciones o juegos casuales, ninguno de los cuales requiere gráficos de alto rendimiento. Sin embargo, ambos estilos de juegos se benefician enormemente de gráficos modernos basados en sombreador y la capacidad de escalar en hardware.

Aplicaciones no de juegos existentes

Una gran cantidad de aplicaciones gráficas requieren un número mínimo de rutas de acceso de código en su capa de representación. WARP permite a estas aplicaciones implementar una única ruta de acceso de código direct3D que pueda tener como destino un gran número de configuraciones de equipo.

Juegos de representación avanzada

Es posible que los desarrolladores de juegos quieran aislar errores de representación específicos de tarjetas gráficas o controladores. Por lo tanto, todos los juegos, incluso muy exigentes gráficamente, pueden beneficiarse de poder representar su contenido mediante WARP. Puede usar WARP para validar si los artefactos visuales que encuentre están representando errores o problemas con hardware o controladores.

Otras aplicaciones

Las aplicaciones de destino para WARP también incluyen las que podrían no usar actualmente Direct3D 10 o Direct3D 10.1. Estas aplicaciones de destino incluyen aplicaciones que siempre deben funcionar en todos los equipos, aplicaciones de procesamiento de imágenes que no escriben versiones de CPU y GPU de algoritmos de procesamiento de imágenes, algoritmos de procesamiento de imágenes en los que la velocidad o el uso de la GPU no son fundamentales, como la impresión, los emuladores y los entornos virtuales que muestran gráficos 3D avanzados.

Arquitectura y rendimiento de WARP

WARP se basa en el código base de rasterizador de referencia. Por lo tanto, WARP usa la misma interfaz de software para Direct3D 10 y versiones posteriores y DXGI. WARP se incluye en Windows 7 en el D3d10warp.dll, ubicado en carpetas de sistemas Windows. Dos versiones de WARP se instalan en máquinas de 64 bits, una versión x86 y x64. La versión x64 puede ejecutarse más rápido en determinadas circunstancias porque el generador de código contenido en WARP puede aprovechar los registros adicionales que están disponibles cuando los usuarios ejecutan aplicaciones de 64 bits.

WARP contiene los siguientes dos compiladores en tiempo real de alta velocidad:

  • Compilador de lenguaje intermedio de alto nivel que convierte el código de bytes HLSL y el estado de representación actual en una secuencia optimizada de comandos vectoriales para las fases del sombreador de geometría (GS), el sombreador de vértices (VS) y el sombreador de píxeles (PS) de la canalización.
  • Generador de código Just-In-Time de alto rendimiento que puede tomar estos comandos y generar código de ensamblado SSE2 optimizado, SSE4.1, x86, x64, arm y arm64.

WARP usa el grupo de subprocesos y la administración de tareas complejas y el seguimiento de dependencias que se introdujo en Windows Vista para permitir que todas las partes de la canalización de representación se distribuyan de forma eficaz entre los núcleos de CPU disponibles.

WARP usa la representación diferida. Es decir, WARP puede procesar por lotes comandos para que la rasterización solo se produzca cuando haya suficientes datos disponibles para usar todos los recursos de CPU de forma eficaz. El trabajo en el subproceso de aplicación principal se minimiza para permitir que la aplicación envíe comandos lo más rápido posible. Si una aplicación también tiene varios subprocesos y usa el grupo de subprocesos, el trabajo se distribuirá uniformemente entre WARP y la aplicación.

El generador de código WARP se ha ajustado para hacer el mejor uso de la arquitectura de CPU moderna. WARP se ejecuta en todos los equipos que pueden ejecutar Windows Vista y sistemas operativos posteriores, incluso si el equipo no admite SSE. Sin embargo, WARP se ha optimizado para equipos que admiten SSE2. También contiene optimizaciones para arquitecturas específicas de procesadores AMD e Intel, así como compatibilidad con las extensiones SSE 4.1.

WARP no requiere hardware gráfico para ejecutarse. Se puede ejecutar incluso en situaciones en las que el hardware no está disponible o no se puede inicializar.

Es probable que las aplicaciones y muestras que se diseñaron y compilaron para ejecutarse en hardware de Direct3D 10 y versiones posteriores sin ningún conocimiento de WARP se ejecutarán bien mediante WARP. Sin embargo, se recomienda reducir la configuración de calidad y la resolución tanto como sea posible para lograr velocidades de fotogramas utilizables. Puede usar WARP para desarrollar y ajustar aplicaciones que se ejecutan bien tanto en hardware como en software.

Dado que WARP usa varios núcleos de CPU para la ejecución en paralelo, funciona mejor en cpu modernas de varios núcleos. WARP también se ejecuta significativamente más rápido en equipos con extensiones SSE4.1 instaladas. Microsoft realizó importantes pruebas y ajuste del rendimiento en equipos con ocho o más núcleos y SSE4.1, ya que estos equipos de gama alta serán más comunes durante la vigencia de Windows 7 y sistemas operativos posteriores.

Cuando WARP se ejecuta en la CPU, se limita en comparación con una tarjeta gráfica de varias maneras. La velocidad del bus frontal de una CPU suele ser aproximada o inferior a 10 GB/s. Por el contrario, una tarjeta gráfica suele tener memoria dedicada que usa de 20 a 100 GB/s o más de ancho de banda de gráficos. El hardware gráfico también tiene unidades de función fija que pueden realizar tareas complejas y costosas, como el filtrado de texturas, la descompresión de formato o las conversiones, de forma asincrónica con poca sobrecarga o costo de energía. La realización de estas operaciones en una CPU típica es costosa en términos de ciclos de consumo de energía y rendimiento.

Los números de rendimiento típicos de una máquina de cuatro núcleos de 3,0 GHz basados en Intel Penryn muestran que WARP puede superar en algunos casos las GPU de gráficos integradas de bajo nivel Direct3D 10 y versiones posteriores en varias pruebas comparativas. El hardware de gráficos discretos de gama baja suele ser de 4 a 5 veces más rápido que WARP al ejecutar estas pruebas comparativas. Estas GPU integradas o discretas de gama baja tienen un uso mínimo de recursos de CPU. Las tarjetas gráficas de gama media o de gama alta son significativamente más rápidas que WARP para muchas aplicaciones, especialmente cuando una aplicación puede aprovechar el paralelismo y el ancho de banda de memoria que proporcionan estas tarjetas gráficas.

WARP no es un reemplazo del hardware gráfico, especialmente porque el hardware discreto direct3D 10 y versiones posteriores tiene un rendimiento razonable. El objetivo de WARP es permitir que las aplicaciones tengan como destino hardware de nivel compatible con Direct3D sin tener rutas de acceso de código significativamente diferentes o requisitos de prueba tanto si se ejecutan en hardware como en software.

En las dos tablas siguientes se muestran datos de ejemplo warP con varias CPU y tarjetas gráficas.

En la primera tabla se muestran los datos de ejemplo de WARP con Direct3D 10 Crysis ejecutándose en 800x600 con todos los ajustes de calidad en sus niveles más bajos:

CPU Time Ave FPS FPS mínimos Marco mínimo Fps máximo Marco máximo
Core i7 8 Core @ 3,0GHz 271.57 7.36 3,46 1966 15.01 995
Penryn 4 Core @ 3,0GHz 351.35 5,69 2.49 1967 10.95 980
Penryn 2 Core @ 3,0GHz 573.98 3.48 1,35 1964 6,61 988
Core 2 Duo @ 2,6 GHz 707.19 2,83 0.81 1959 5.18 982
Core 2 Duo @ 2,4 GHz 763.25 2.62 0,76 1964 4.70 984
Core 2 Duo @ 2,1GHz 908.87 2,20 0,64 1965 3,72 986
Xeon 8 Core @ 2,0GHz 424.04 4.72 1,84 1967 9,56 988
AMD FX74 4 Core @ 3,0GHz 583.12 3.43 1,41 1967 5.78 986
Phenom 9550 4 Core @ 2,2 GHz 664.69 3,01 0,53 1959 5.46 987

En la segunda tabla se muestran datos de ejemplo que ejecutan la misma prueba en una variedad de tarjetas gráficas:

Tarjeta gráfica Time Ave FPS FPS mínimos Marco mínimo Fps máximo Marco máximo
NVIDIA 8800 GTS 23.58 84.80 60.78 1957 130.83 1022
NVIDIA 8500 GT 47.63 41.99 25.67 1986 72.57 991
NVIDIA Quadro 290 67.16 29.78 18.19 1969 49.87 1017
NVIDIA 8400 GS 59.01 33.89 21,22 1962 51.82 1021
ATI 3400 53.79 37.18 22,97 618 59.77 1021
ATI 3200 67.19 29.77 18.91 1963 45.74 980
ATI 2400 PRO 67.04 29.83 17.97 606 45.91 987
Intel DX10 integrado 386.94 5.17 1.74 1974 16.22 995

Conformidad de WARP

WARP supera todas las pruebas de conformidad estándar de Windows Hardware Quality Labs (WHQL) para validar dispositivos de hardware direct3D.

WARP se ha probado en un conjunto de aplicaciones y pruebas comparativas de Direct3D 10 y Direct3D 10.1, y en ejemplos de SDK de DirectX, NVIDIA y AMD.

WARP usó la herramienta de depuración y análisis PIX para Windows en sus pruebas; Microsoft tiene una gran biblioteca de capturas de fotograma único de aplicaciones que se usan para comparar entre hardware y WARP. La mayoría de las imágenes aparecen casi idénticas entre hardware y WARP; donde a veces se producen pequeñas diferencias, se encuentran dentro de las tolerancias definidas por la especificación direct3D 10.