Guía de la Plataforma de rasterización avanzada de Windows (WARP)
En este artículo se describen windows Advanced Rasterization Platform (WARP) y los siguientes aspectos de WARP.
- ¿Qué es WARP?
-
ventajas de WARP
- quitar la necesidad de rasterizadores de software personalizados
- habilitación del rendimiento máximo de hardware gráfico
- habilitar la representación cuando el hardware de Direct3D no está disponible
- aprovechar los recursos existentes para la representación de software
- habilitación de escenarios que no requieren hardware gráfico
- Completar la de directX Graphics Platform
- funcionalidades y requisitos de WARP
- cómo usar WARP
- tipos de aplicación recomendados para WARP
- arquitectura y rendimiento de WARP
- de conformidad de WARP
¿Qué es WARP?
WARP es un rasterizador de software de alta velocidad y totalmente compatible. Es un componente de la tecnología de gráficos directX que introdujo el tiempo 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 de Direct3D 11 y Direct3D 12.
Ventajas de WARP
WARP proporciona las siguientes ventajas:
- quitar la necesidad de rasterizadores de software personalizados
- habilitación del rendimiento máximo de hardware gráfico
- habilitar la representación cuando el hardware de Direct3D no está disponible
- aprovechar los recursos existentes para la representación de software
- habilitación de escenarios que no requieren hardware gráfico
- Completar la de directX Graphics Platform
Eliminación de los 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 ello 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 de 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, puede centrarse en la creación de una excelente 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 está optimizada para ejecutarse de forma eficaz en hardware, también se ejecutará de forma eficaz en WARP. El contrario también es cierto; cualquier aplicación que esté optimizada para ejecutarse bien 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 el hardware como 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 están disponibles, entre las que se incluyen:
- Cuando el usuario no tiene ningún hardware compatible con Direct3D
- Cuando una aplicación se ejecuta como 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 está fuera de memoria, se bloquea o se toma demasiados recursos del sistema para inicializar
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 correo y otros recursos que pueden ayudarle a aprovechar la representación de imágenes basadas en sombreador 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 problemas de rendimiento de las aplicaciones de gráficos. Estas herramientas y conocimientos ahora pueden beneficiarse del 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, PC 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 directX
WARP permite acceder a todas las características gráficas de Direct3D 10 y versiones posteriores incluso en equipos sin hardware gráfico direct3D 10 y versiones posteriores. Bits de capacidad quitados de Direct3D 10 (caps); es decir, ya no es necesario comprobar si las funcionalidades de gráficos están disponibles en hardware gráfico porque Direct3D 10 y versiones posteriores garantizan 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 bajo nivel o representando a 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ísticas 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 de varias muestras y el muestreo de superficies flotantes
- Suavizado, representación de alta calidad hasta 8x antialiasing multisample (MSAA)
- Filtrado anisotrópico
- Aplicaciones de 32 y 64 bits y aplicaciones de 32 bits con reconocimiento de direcciones grandes
Al instalar Platform Update 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 niveles de características 9_1, 9_2, 9_3, 10_0, 10_1, y 11_0.
Windows 8, Windows 10, Windows Server 2012 & anterior 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 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 Direct3D 12 niveles de características 12_0 y 12_1.
Los requisitos mínimos de equipo para WARP son los mismos que para Windows Vista, en concreto:
- 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 la identificación del adaptador WARP. Para facilitar esto, DXGI 1.4 proporciona el método IDXGIFactory4::EnumWarpAdapter. A continuación, se puede proporcionar el adaptador WARP para 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 tiempo 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, cuando cambie a ref, verá 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.
Tipos de aplicación recomendados para WARP
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 existentes que no son de juegos
Una gran cantidad de aplicaciones gráficas requiere un número mínimo de rutas de acceso de código en su capa de representación. WARP permite que estas aplicaciones implementen 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 juegos extremadamente 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 dos compiladores en tiempo real de alta velocidad siguientes:
- El compilador de lenguaje intermedio de alto nivel que convierte el código de bytes HLSL y el estado de representación actual en un flujo optimizado de comandos vectoriales para las fases del sombreador de geometría (GS), sombreador de vértices (VS) y 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 compleja de tareas 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 antes posible. Si una aplicación también está multiproceso 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 optimizado para mejorar el 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 ejemplos que se diseñaron y compilaron para ejecutarse en hardware 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 en hardware y 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ó pruebas significativas y ajuste del rendimiento en equipos con ocho o más núcleos y SSE4.1, ya que estos equipos de gama alta se volverá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 estar alrededor o menos de 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 quad core basada en Intel Penryn de 3,0 GHz muestran que WARP puede superar en algunos casos las GPU de gráficos direct3D 10 integradas de bajo nivel y posteriores en una serie de pruebas comparativas. El hardware gráfico discreto de bajo nivel suele ser de 4 a 5 veces más rápido que WARP al ejecutar estos puntos de referencia. 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 rendimiento razonable de direct3D 10 y versiones posteriores del hardware discreto ahora es económico. 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 | Hora | Ave FPS | Fps mínimos | Marco mínimo | Número máximo de FPS | 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,6GHz | 707.19 | 2.83 | 0.81 | 1959 | 5.18 | 982 |
Core 2 Duo @ 2,4GHz | 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,2GHz | 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 | Hora | Ave FPS | Fps mínimos | Marco mínimo | Número máximo de FPS | 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, así como en ejemplos de SDK de DirectX, NVIDIA y AMD.
WARP usó el PIX herramienta de depuración y análisis para Windows en sus pruebas; Microsoft tiene una biblioteca grande 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.