Direct3D
Direct3D es una interfaz de programación de aplicaciones gráficas (API) para Microsoft Windows. Parte de DirectX, Direct3D se usa para representar gráficos tridimensionales en aplicaciones donde el rendimiento es importante, como los juegos. Direct3D usa aceleración de hardware si está disponible en la tarjeta gráfica, lo que permite la aceleración de hardware de toda la canalización de renderizado 3D o incluso solo una aceleración parcial. Direct3D expone las capacidades gráficas avanzadas del hardware de gráficos 3D, incluido el almacenamiento en búfer Z, el almacenamiento en búfer W, el almacenamiento en búfer de plantilla, el suavizado espacial, la combinación alfa, la combinación de colores, el mipmapping, la combinación de texturas, el recorte, la selección, los efectos atmosféricos y la textura con perspectiva correcta. mapeo, shaders y efectos HLSL programables. La integración con otras tecnologías de DirectX permite que Direct3D ofrezca características tales como mapeo de video, representación 3D de hardware en planos superpuestos 2D e incluso sprites, lo que proporciona el uso de gráficos 2D y 3D en vínculos de medios interactivos.
Direct3D contiene muchos comandos para renderizar gráficos por computadora en 3D; sin embargo, desde la versión 8, Direct3D reemplazó el marco DirectDraw y también asumió la responsabilidad de la representación de gráficos 2D. Microsoft se esfuerza por actualizar continuamente Direct3D para admitir la última tecnología disponible en tarjetas gráficas 3D. Direct3D ofrece emulación de software de vértice completo, pero no emulación de software de píxeles para funciones que no están disponibles en el hardware. Por ejemplo, si el software programado con Direct3D requiere sombreadores de píxeles y la tarjeta de video en la computadora del usuario no es compatible con esa función, Direct3D no lo emulará, aunque calculará y renderizará los polígonos y las texturas de los modelos 3D. aunque con una calidad y un rendimiento generalmente degradados en comparación con el hardware equivalente. La API incluye un Reference Rasterizer (o dispositivo REF), que emula una tarjeta gráfica genérica en el software, aunque es demasiado lento para la mayoría de las aplicaciones 3D en tiempo real y, por lo general, solo se usa para la depuración. Un nuevo rasterizador de software en tiempo real, WARP, diseñado para emular el conjunto completo de funciones de Direct3D 10.1, se incluye con Windows 7 y Windows Vista Service Pack 2 con Platform Update; Se dice que su rendimiento está a la par con las tarjetas 3D de gama baja en CPU de varios núcleos.
Como parte de DirectX, Direct3D está disponible para Windows 95 y superior, y es la base para la API de gráficos vectoriales en las diferentes versiones de los sistemas de consola Xbox. La capa de compatibilidad de Wine, una reimplementación de software gratuito de varias API de Windows, incluye una implementación de Direct3D.
El principal competidor de Direct3D es Khronos' OpenGL y su continuación Vulkan. Fahrenheit fue un intento de Microsoft y SGI de unificar OpenGL y Direct3D en la década de 1990, pero finalmente se canceló.
Resumen
- Direct3D 6.0 – Multitextura
- Direct3D 7.0 – Transformación de hardware, deslizamiento y iluminación (TCL/T plagaL)
- Direct3D 8.0 – Pixel Shader 1.0 " Vertex Shader 1.0
- Direct3D 8.0a - última versión compatible con Windows 95; Pixel Shader 1.1, Pixel Shader 1.2, Pixel Shader 1.3
- Direct3D 8.1 – Pixel Shader 1.4 " Vertex Shader 1.1
- Direct3D 9.0 – Shader Model 2.0 (Pixel Shader 2.0 & Vertex Shader 2.0)
- Direct3D 9.0b – Pixel Shader 2.0b
- Direct3D 9.0c – la última versión soportada para Windows 98 (publicaciones iniciales) y para Windows 2000/XP (todas las versiones); Shader Model 3.0 (Pixel Shader 3.0 " Vertex Shader 3.0), GPGPU
- Direct3D 9.0L – Windows Vista solamente; Direct3D 9.0c, Shader Model 3.0, Windows Graphics Foundation 1.0, DXVA 1.0, GPGPU
- Direct3D 10.0 – Windows Vista/Windows 7; Shader Model 4.0, Windows Graphics Foundation 2.0, DXVA 2.0, GPGPU
- Direct3D 10.1 – Windows Vista SP1/Windows 7; Shader Model 4.1, Windows Graphics Foundation 2.1, DXVA 2.1, GPGPU
- Direct3D 11.0 – Windows Vista SP2/Windows 7; Shader Model 5.0, Tessellation, Multithreaded rendering, Compute shadowrs, implementado por hardware y software running Direct3D 9/10.1, GPGPU
- Direct3D 11.1 – Windows 8 (con soporte parcial en Windows 7 SP1 también); Rendering 3D estereocópico, GPGPU
- Direct3D 11.2 – Windows 8.1; Recursos reducidos, GPGPU
- Direct3D 11.3 – Windows 10; GPGPU
- Direct3D 12.0 – Windows 10; API de renderización de bajo nivel, Shader Model 5.1 y 6.0, GPGPU
Direct3D 2.0 y 3.0
En 1992, Servan Keondjian y Doug Rabson crearon una empresa llamada RenderMorphics, que desarrolló una API de gráficos 3D llamada Reality Lab, que se utilizó en imágenes médicas y software CAD. Se lanzaron dos versiones de esta API. Microsoft compró RenderMorphics en febrero de 1995, incorporando a Keondjian para implementar un motor de gráficos 3D para Windows 95. La primera versión de Direct3D se envió en DirectX 2.0 (2 de junio de 1996) y DirectX 3.0 (26 de septiembre de 1996).
Direct3D inicialmente implementó un "modo inmediato" API 3D y superpuso sobre ella un "modo retenido" API 3D. Ambos tipos de API ya se ofrecían con la segunda versión de Reality Lab antes del lanzamiento de Direct3D. Al igual que otras API de DirectX, como DirectDraw, ambas se basaron en COM. La API de modo retenido era una API de gráfico de escena que logró poca adopción. Los desarrolladores de juegos clamaban por un control más directo de las actividades del hardware que el que podía proporcionar el modo retenido de Direct3D. Solo dos juegos que vendieron un volumen significativo, Lego Island y Lego Rock Raiders, se basaron en el modo retenido de Direct3D, por lo que Microsoft no actualizó la API del modo retenido después de DirectX 3.0.
Para DirectX 2.0 y 3.0, el modo inmediato de Direct3D usaba un "búfer de ejecución" modelo de programación que Microsoft esperaba que los proveedores de hardware admitieran directamente. Los búferes de ejecución estaban destinados a ser asignados en la memoria del hardware y analizados por el hardware para realizar la representación 3D. Sin embargo, se consideraron extremadamente difíciles de programar en ese momento, lo que dificultó la adopción de la nueva API y provocó llamadas para que Microsoft adoptara OpenGL como la API oficial de renderizado 3D para juegos y aplicaciones de estaciones de trabajo. (ver OpenGL frente a Direct3D)
En lugar de adoptar OpenGL como una API de juegos, Microsoft optó por seguir mejorando Direct3D, no solo para competir con OpenGL, sino también para competir de forma más eficaz con otras API patentadas, como 3dfx's Glide.
Desde el principio, el modo inmediato también admitió la representación en mosaico de Talisman con los métodos BeginScene/EndScene de la interfaz IDirect3DDevice.
Direct3D 4.0
No se planearon cambios sustanciales en Direct3D para DirectX 4.0, cuyo lanzamiento estaba programado para fines de 1996 y luego se canceló.
Direct3D 5.0
En diciembre de 1996, un equipo de Redmond se hizo cargo del desarrollo del modo inmediato de Direct3D, mientras que el equipo de RenderMorphics con sede en Londres siguió trabajando en el modo retenido. El equipo de Redmond agregó la API DrawPrimitive que eliminó la necesidad de que las aplicaciones construyan búferes de ejecución, lo que hizo que Direct3D se pareciera más a otras API de representación de modo inmediato, como Glide y OpenGL. La primera versión beta de DrawPrimitive se envió en febrero de 1997 y la versión final se envió con DirectX 5.0 en agosto de 1997.
Además de presentar una API de modo inmediato más fácil de usar, DirectX 5.0 agregó el método SetRenderTarget que permitió que los dispositivos Direct3D escribieran su salida gráfica en una variedad de superficies DirectDraw.
Direct3D 6.0
DirectX 6.0 (lanzado en agosto de 1998) introdujo numerosas características para cubrir el hardware contemporáneo (como búferes de plantillas y texturas múltiples), así como canalizaciones de geometría optimizadas para x87, SSE y 3DNow. y gestión de texturas opcional para simplificar la programación. Direct3D 6.0 también incluía soporte para funciones que Microsoft había obtenido con licencia de proveedores de hardware específicos para su inclusión en la API, a cambio de la ventaja de tiempo de comercialización para el proveedor de licencias. La compatibilidad con la compresión de texturas S3 fue una de esas características, y se le cambió el nombre a DXTC para fines de inclusión en la API. Otro fue la técnica patentada de mapeo de relieve de TriTech. Microsoft incluyó estas funciones en DirectX, luego las agregó a los requisitos necesarios para que los controladores obtengan un logotipo de Windows para fomentar una amplia adopción de las funciones de otros proveedores. hardware.
Una actualización menor de DirectX 6.0 se produjo en febrero de 1999, en la actualización de DirectX 6.1. Además de agregar compatibilidad con DirectMusic por primera vez, esta versión mejoró la compatibilidad con las extensiones Intel Pentium III 3D.
Un memorándum confidencial enviado en 1997 muestra que Microsoft planea anunciar soporte completo para Talisman en DirectX 6.0, pero la API terminó siendo cancelada (vea la página de Microsoft Talisman para más detalles).
Direct3D 7.0
DirectX 7.0 (lanzado en septiembre de 1999) introdujo el formato de textura.dds y la compatibilidad con la aceleración de hardware de iluminación y transformación (disponible por primera vez en hardware de PC con GeForce 256 de Nvidia), como así como la capacidad de asignar búferes de vértices en la memoria del hardware. Los búferes de vértices de hardware representan la primera mejora sustancial sobre OpenGL en la historia de DirectX. Direct3D 7.0 también aumentó la compatibilidad de DirectX con el hardware de texturas múltiples y representa el pináculo de las funciones de canalización de texturas múltiples de función fija: aunque era potente, era tan complicado de programar que se necesitaba un nuevo modelo de programación para exponer las capacidades de sombreado del hardware de gráficos.
Direct3D 8.0
DirectX 8.0, lanzado en noviembre de 2000, introdujo la capacidad de programación en forma de sombreadores de vértices y píxeles, lo que permitió a los desarrolladores escribir código sin preocuparse por el estado superfluo del hardware. La complejidad de los programas de sombreado dependía de la complejidad de la tarea, y el controlador de pantalla compilaba esos sombreadores en instrucciones que el hardware podía entender. Direct3D 8.0 y sus capacidades de sombreado programable fueron la primera gran desviación de una arquitectura de función fija de estilo OpenGL, donde el dibujo es controlado por una máquina de estado complicada. Direct3D 8.0 también eliminó DirectDraw como una API separada. Direct3D incluyó todas las llamadas API de DirectDraw restantes que aún se necesitaban para el desarrollo de aplicaciones, como Present(), la función utilizada para mostrar los resultados de la representación.
Direct3D no se consideraba fácil de usar, pero a partir de la versión 8.1 de DirectX, se resolvieron muchos problemas de usabilidad. Direct3D 8 contenía muchas funciones gráficas 3D potentes, como sombreadores de vértices, sombreadores de píxeles, niebla, mapeo de relieve y mapeo de texturas.
Direct3D 9
Direct3D 9.0, lanzado en diciembre de 2002, agregó una nueva versión de soporte de lenguaje de sombreado de alto nivel para formatos de textura de coma flotante, objetivos de renderizado múltiple (MRT), texturas de elementos múltiples, búsquedas de textura en las técnicas vertex shader y stencil buffer.
Direct3D 9Ex Mejoras en Direct3D 9Ex: aplicaciones Win32
Una extensión solo disponible en Windows Vista y posteriores (7, 8, 8.1, 10 y 11), llamada Direct3D 9Ex (versión anterior 9.0L (L - nombre en clave Windows Longhorn)), permite el uso de las ventajas que ofrece Windows Vista's Windows Display Driver Model (WDDM) y se utiliza para Windows Aero. Direct3D 9Ex, junto con los controladores WDDM de clase DirectX 9, permite que la memoria de gráficos se virtualice y se pagine en la memoria del sistema, permite que las operaciones de gráficos se interrumpan y programen y que las superficies de DirectX se compartan entre procesos. Direct3D 9Ex se conocía anteriormente como la versión 1.0 de Windows Graphics Foundation (WGF).
Direct3D 10
Windows Vista incluye una importante actualización de la API de Direct3D. Originalmente llamado WGF 2.0 (Windows Graphics Foundation 2.0), luego DirectX 10 y DirectX Next. Direct3D 10 cuenta con un modelo de sombreado 4.0 actualizado y capacidad de interrupción opcional para programas de sombreado. En este modelo, los sombreadores aún constan de etapas fijas como en versiones anteriores, pero todas las etapas admiten una interfaz casi unificada, así como un paradigma de acceso unificado para recursos como texturas y constantes de sombreado. El lenguaje en sí se ha ampliado para que sea más expresivo, incluidas las operaciones con números enteros, un número de instrucciones mucho mayor y más construcciones de lenguaje similares a C. Además de las etapas de sombreado de píxeles y vértices disponibles anteriormente, la API incluye una etapa de sombreado de geometría que rompe el modelo anterior de un vértice dentro/un vértice fuera, para permitir que la geometría se genere desde dentro de un sombreador, lo que permite que la geometría compleja ser generado completamente por el hardware de gráficos.
Windows XP no es compatible con DirectX 10.0 y superior.
Además, Direct3D 10 eliminó la compatibilidad con la API de modo retenido que había sido parte de Direct3D desde el principio, lo que hacía que Windows Vista fuera incompatible con los juegos 3D que habían usado la API de modo retenido como motor de renderizado.
A diferencia de las versiones anteriores de la API, Direct3D 10 ya no usa "bits de capacidad" (o "mayúsculas") para indicar qué funciones son compatibles con un dispositivo gráfico determinado. En su lugar, define un estándar mínimo de capacidades de hardware que deben admitirse para que un sistema de visualización sea "compatible con Direct3D 10". Esta es una desviación significativa, con el objetivo de simplificar el código de la aplicación eliminando el código de verificación de capacidad y los casos especiales basados en la presencia o ausencia de capacidades específicas.
Debido a que el hardware de Direct3D 10 era comparativamente raro después del lanzamiento inicial de Windows Vista y debido a la enorme base instalada de tarjetas gráficas no compatibles con Direct3D 10, los primeros juegos compatibles con Direct3D 10 aún brindan rutas de procesamiento de Direct3D 9. Ejemplos de estos títulos son juegos escritos originalmente para Direct3D 9 y adaptados a Direct3D 10 después de su lanzamiento, como Company of Heroes, o juegos desarrollados originalmente para Direct3D 9 con una ruta de Direct3D 10 adaptada más tarde durante su desarrollo., como Hellgate: London o Crysis. El SDK de DirectX 10 estuvo disponible en febrero de 2007.
Direct3D 10.0
El hardware de nivel de Direct3D 10.0 debe admitir las siguientes funciones: la capacidad de procesar primitivos completos en la nueva etapa de sombreado de geometría, la capacidad de enviar datos de vértices generados por canalización a la memoria utilizando la salida de flujo etapa, compatibilidad con alfa a cobertura de muestras múltiples, lectura de una superficie de profundidad/plantilla o un recurso de muestras múltiples una vez que ya no está vinculado como destino de representación, integración HLSL completa: todos los sombreadores de Direct3D 10 están escritos en HLSL y se implementan con el común- shader core, operaciones de sombreado entero y bit a bit, organización del estado de canalización en 5 objetos de estado inmutables, organización de constantes de sombreado en búferes constantes, mayor número de objetivos de renderizado, texturas y muestras, sin límite de longitud de sombreado, nuevos tipos de recursos y formatos de recursos, Tiempo de ejecución en capas/capas de API, opción para realizar intercambio y configuración de material primitivo mediante un sombreador de geometría, mayor generalización del acceso a los recursos mediante una vista, se eliminó el bit de capacidad de hardware heredado s (mayúsculas).- Los oleoductos fijos se están haciendo a favor de oleoductos totalmente programables (a menudo referidos como arquitectura de oleoducto unificada), que se pueden programar para emular lo mismo.
- Nuevo objeto estatal para permitir (en su mayoría) la CPU para cambiar estados eficientemente.
- El modelo Shader 4.0 mejora la programabilidad de la tubería gráfica. Añade instrucciones para cálculos enteros y bitwise.
- El núcleo sombreador común proporciona un conjunto completo de operaciones integradas compatibles con IEEE de 32 bits y bitwise. Estas operaciones permiten una nueva clase de algoritmos en hardware gráfico: los ejemplos incluyen técnicas de compresión y embalaje, FFTs y control de flujo de programa bitfield.
- Sombreros de geometría, que trabajan en triángulos adyacentes que forman una malla.
- Los arrays de textura permiten el intercambio de texturas en GPU sin intervención de CPU.
- La renderización predicada permite que las llamadas de dibujo sean ignoradas basándose en algunas otras condiciones. Esto permite la limpieza rápida de oclusión, lo que evita que los objetos sean renderizados si no es visible o demasiado lejos para ser visible.
- Instancing 2.0 support, allowing multiple instances of similar meshes, such as armies, or grass or trees, to be rendered in a single draw call, reducing the processing time needed for multiple similar objects to that of a single one.
Direct3D 10.1
Direct3D 10.1 fue anunciado por Microsoft poco después del lanzamiento de Direct3D 10 como una actualización menor. La especificación se finalizó con el lanzamiento de DirectX SDK de noviembre de 2007 y el tiempo de ejecución se envió con Windows Vista SP1, que está disponible desde mediados de marzo de 2008.
Direct3D 10.1 establece algunos estándares de calidad de imagen más para los proveedores de gráficos y brinda a los desarrolladores más control sobre la calidad de imagen. Las funciones incluyen un control más preciso sobre el suavizado (tanto multimuestreo como supermuestreo con sombreado por muestra y control de la aplicación sobre la posición de la muestra) y más flexibilidades para algunas de las funciones existentes (matrices de mapas de cubos y modos de fusión independientes). El hardware de nivel 10.1 de Direct3D debe ser compatible con las siguientes características: Se mejoró el muestreo múltiple para generalizar la transparencia basada en la cobertura y hacer que el muestreo múltiple funcione de manera más efectiva con renderizado de varias pasadas, mejor comportamiento de selección: las caras de área cero se eliminan automáticamente; esto afecta solo al renderizado alámbrico, modos de mezcla independientes por destino de renderizado, nueva ejecución de sombreador de píxeles de frecuencia de muestra con rasterización primitiva, mayor ancho de banda de la etapa de canalización, las superficies MSAA de color y profundidad/plantilla ahora se pueden usar con CopyResource como fuente o destino, MultisampleEnable solo afecta la rasterización de líneas (los puntos y los triángulos no se ven afectados) y se usa para elegir un algoritmo de dibujo de líneas. Esto significa que ya no se admiten algunas rasterizaciones de muestras múltiples de Direct3D 10, Muestreo de texturas: las instrucciones sample_c y sample_c_lz están definidas para trabajar con Texture2DArrays y TextureCubeArrays y usan el miembro Location (el componente alfa) para especificar un índice de matriz, soporte para TextureCubeArrays.
- Filtro de punto flotante obligatorio de 32 bits.
- Reglas de puntos flotantes – Utiliza las mismas reglas IEEE-754 para operaciones de puntos flotantes EXCEPT de 32 bits se han endurecido para producir un resultado dentro de 0,5 unidad-último lugar (0,5 ULP) del resultado infinitamente preciso. Esto se aplica a la adición, resta y multiplicación. (exactitud a 0,5 ULP para multiplicarse, 1.0 ULP para recíproco).
- Formatos – La precisión de la mezcla flota16 ha aumentado a 0,5 ULP. También se requiere Blending para formatos UNORM16/SNORM16/SNORM8.
- Conversión de Formato al copiar entre unos 32/64/128 bits preestructurados, recursos tipo y representaciones comprimidas de los mismos anchos de bit.
- Soporte obligatorio para 4x MSAA para todos los objetivos renderizados excepto R32G32B32A32 y R32G32B32.
- Modelo Shader 4.1
A diferencia de Direct3D 10, que requería estrictamente interfaces de controladores y hardware de clase 10 de Direct3D, el tiempo de ejecución de Direct3D 10.1 puede ejecutarse en hardware de Direct3D 10.0 mediante un concepto de "niveles de funciones", pero las funciones nuevas son compatibles exclusivamente con hardware nuevo. que exponen el nivel de característica 10_1.
El único hardware Direct3D 10.1 disponible en junio de 2008 era la serie Radeon HD 3000 y la serie Radeon HD 4000 de ATI; en 2009, se les unieron las GPU Chrome 430/440GT de S3 Graphics y modelos selectos de gama baja en la serie GeForce 200 de Nvidia. En 2011, los conjuntos de chips Intel comenzaron a admitir Direct3D 10.1 con la introducción de Intel HD Graphics 2000 (GMA HD).
Direct3D 11
Direct3D 11 se lanzó como parte de Windows 7. Se presentó en Gamefest 2008 el 22 de julio de 2008 y se demostró en la conferencia técnica Nvision 08 el 26 de agosto de 2008. La vista previa técnica de Direct3D 11 se ha incluido en la versión de noviembre de 2008 de DirectX SDK. AMD realizó una vista previa del hardware DirectX11 en funcionamiento en Computex el 3 de junio de 2009, ejecutando algunas muestras de DirectX 11 SDK.
El tiempo de ejecución de Direct3D 11 puede ejecutarse en hardware y controladores de clase Direct3D 9 y 10.x utilizando el concepto de "niveles de características", ampliando la funcionalidad introducida por primera vez en el tiempo de ejecución de Direct3D 10.1. Los niveles de características permiten a los desarrolladores unificar la canalización de representación bajo la API de Direct3D 11 y hacer uso de las mejoras de la API, como una mejor gestión de recursos y subprocesos múltiples, incluso en tarjetas de nivel de entrada, aunque las características avanzadas, como nuevos modelos de sombreado y etapas de representación, solo estarán expuestas en -hardware de nivel. Hay tres "10 Nivel 9" los perfiles que encapsulan varias capacidades de las populares tarjetas DirectX 9.0a y Direct3D 10, 10.1 y 11 tienen cada uno un nivel de función separado; cada nivel superior es un superconjunto estricto de un nivel inferior.
La teselación se consideró anteriormente para Direct3D 10, pero luego se abandonó. Las GPU como Radeon R600 cuentan con un motor de teselado que se puede usar con Direct3D 9/10/10.1 y OpenGL, pero no es compatible con Direct3D 11 (según Microsoft). El hardware de gráficos más antiguo, como Radeon 8xxx, GeForce 3/4 tenía soporte para otra forma de teselado (parches RT, parches N), pero esas tecnologías nunca vieron un uso sustancial. Como tal, su soporte se eliminó del hardware más nuevo.
Microsoft también ha insinuado otras funciones, como la transparencia independiente del orden, que nunca fue expuesta por la API de Direct3D pero admitida de forma casi transparente por el hardware de Direct3D anterior, como la línea de chips PowerVR de Videologic.
Direct3D 11.0
Las funciones de Direct3D 11.0 incluyen: Compatibilidad con Shader Model 5.0, vinculación dinámica de sombreadores, recursos direccionables, tipos de recursos adicionales, subrutinas, creación de instancias de geometría, cobertura como entrada de sombreador de píxeles, interpolación programable de entradas, nuevos formatos de compresión de texturas (1 nuevo formato LDR y 1 nuevo formato HDR), abrazaderas de textura para limitar la precarga de WDDM, requieren 8 bits de precisión de subtexel y sub-mip en el filtrado de texturas, límites de textura de 16K, Gather4 (soporte para texturas de múltiples componentes, soporte para compensaciones programables), DrawIndirect, oDepth conservador, sesgo de profundidad, salida de flujo direccionable, sujeción de mipmap por recurso, ventanas gráficas de punto flotante, instrucciones de conversión de sombreado, subprocesamiento múltiple mejorado.- Shader Modelo 5
- Apoyo Tessellation y Tessellation Shaders para aumentar en tiempo de ejecución el número de polígonos visibles de un modelo poligonal de bajo detalle
- renderizado multitesis — para renderizar al mismo objeto de dispositivo Direct3D de diferentes hilos para CPUs multi núcleo
- Sombreros de alta calidad — que expone el oleoducto sombreado para tareas no gráficas como el procesamiento de flujo y la aceleración física, similar en espíritu a lo que OpenCL, Nvidia CUDA, ATI Stream, y HLSL Shader Modelo 5 logran entre otros.
- Soporte obligatorio para 4x MSAA para todos los objetivos de renderizado y 8x MSAA para todos los formatos de renderizado excepto formatos R32G32B32A32.
Otras características notables son la adición de dos nuevos algoritmos de compresión de texturas para empaquetar de manera más eficiente texturas de alta calidad y HDR/alfa y un mayor caché de texturas.
Visto por primera vez en la versión Release Candidate, Windows 7 integra la primera compatibilidad con Direct3D 11 lanzada. La actualización de la plataforma para Windows Vista incluye el tiempo de ejecución Direct3D 11 con todas las funciones y la actualización DXGI 1.1, así como otros componentes relacionados de Windows 7 como WARP, Direct2D, DirectWrite y WIC.
Direct3D 11.1
Direct3D 11.1 es una actualización de la API que se incluye con Windows 8. El tiempo de ejecución de Direct3D en Windows 8 presenta DXGI 1.2 y requiere nuevos controladores de dispositivo WDDM 1.2. La versión preliminar de Windows SDK para Windows 8 Developer Preview se lanzó el 13 de septiembre de 2011.
La nueva API presenta seguimiento de sombreado y mejoras del compilador HLSL, soporte para tipos de datos escalares HLSL de precisión mínima, UAV (Vistas de acceso no ordenado) en cada etapa de canalización, rasterización independiente del objetivo (TIR), opción para mapear SRV de búferes dinámicos con NO_OVERWRITE, procesamiento de sombreado de recursos de video, opción para usar operaciones lógicas en un objetivo de renderizado, opción para vincular un subrango de un búfer constante a un sombreador y recuperarlo, opción para crear búferes constantes más grandes a los que puede acceder un sombreador, opción para descartar recursos y vistas de recursos, opción para cambiar subrecursos con nuevas opciones de copia, opción para forzar el recuento de muestras para crear un estado rasterizador, opción para borrar todo o parte de una vista de recursos, opción para usar Direct3D en procesos de sesión 0, opción para especificar clip de usuario planos en HLSL en el nivel de función 9 y superior, compatibilidad con el búfer de sombras en el nivel de función 9, compatibilidad con la reproducción de video, compatibilidad ampliada con recursos Texture2D compartidos y cambio sobre la marcha entre D irect3D 10 y 11 contextos y niveles de características. Direct3D 11.1 incluye el nuevo nivel de funciones 11_1, que trae actualizaciones menores al lenguaje de sombreado, como búferes constantes más grandes e instrucciones opcionales de doble precisión, así como modos de fusión mejorados y compatibilidad obligatoria con formatos de color de 16 bits para mejorar el rendimiento de entrada. GPU de alto nivel como Intel HD Graphics. WARP se ha actualizado para admitir el nivel de función 11_1.
La actualización de la plataforma para Windows 7 incluye un conjunto limitado de funciones de Direct3D 11.1, aunque los componentes que dependen de WDDM 1.2, como el nivel de función 11_1 y sus API relacionadas, o el almacenamiento en búfer cuádruple para la representación estereoscópica, no están presentes.
Direct3D 11.2
Direct3D 11.2 se envió con Windows 8.1. Las nuevas funciones de hardware requieren DXGI 1.3 con controladores WDDM 1.3 e incluyen modificación y enlace de sombreado en tiempo de ejecución, gráfico de enlace de función (FLG), compilador HLSL de bandeja de entrada, opción para anotar comandos de gráficos. Los niveles de características 11_0 y 11_1 introducen soporte opcional para recursos en mosaico con abrazadera de nivel de detalle de sombreado (Nivel 2). La última característica brinda control efectivo sobre las tablas de páginas de hardware presentes en muchas GPU actuales. WARP se actualizó para admitir completamente las nuevas funciones. Sin embargo, no hay un nivel de función 11_2; las nuevas funciones se dispersan entre los niveles de funciones existentes. Aquellos que dependen del hardware se pueden verificar individualmente a través de CheckFeatureSupport
. Algunas de las "nuevas" las funciones de Direct3D 11.2 en realidad exponen algunas funciones de hardware antiguas de una manera más granular; por ejemplo, D3D11_FEATURE_D3D9_SIMPLE_INSTANCING_SUPPORT
expone la compatibilidad parcial con la creación de instancias en hardware de nivel de función 9_1 y 9_2; de lo contrario, es totalmente compatible a partir del nivel de función 9_3 en adelante.
Direct3D 11.X
Direct3D 11.X es un superconjunto de DirectX 11.2 que se ejecuta en Xbox One. Incluye algunas funciones, como paquetes de sorteos, que luego se anunciaron como parte de DirectX 12.
Direct3D 11.3
Direct3D 11.3 se envió en julio de 2015 con Windows 10; incluye funciones de renderizado menores de Direct3D 12, al tiempo que mantiene la estructura general de la API de Direct3D 11.x. Direct3D 11.3 presenta un valor de referencia de plantilla especificado por sombreador opcional, cargas de vista de acceso no ordenadas escritas, vistas ordenadas de rasterizador (ROV), barrido estándar opcional, mapeo de textura predeterminado opcional, rasterización conservadora (de tres niveles), soporte de acceso a memoria unificado (UMA) opcional, y recursos en mosaico adicionales (nivel 2) (recursos en mosaico por volumen).
Direct3D 11.4
- Direct3D 11.4 versión 1511 – Inicial Direct3D 11.4 se introdujo con Windows 10 Threshold 2 actualización (versión 1511) mejorando el soporte de adaptadores gráficos externos y DXGI 1.5.
- Direct3D 11.4 versión 1607 – Actualizado Direct3D 11.4 con Windows 10 Anniversary Update (versión 1607) incluye soporte WDDM 2.1 y para formato UHDTV HDR10 (ST 2084) y frecuencias de actualización variable para aplicaciones UWP.
Direct3D 12
Direct3D 12 permite un nivel más bajo de abstracción de hardware que las versiones anteriores, lo que permite que los juegos futuros mejoren significativamente la escala multiproceso y reduzcan la utilización de la CPU. Esto se logra haciendo coincidir mejor la capa de abstracción de Direct3D con el hardware subyacente, por medio de nuevas funciones como el dibujo indirecto, las tablas de descriptores, los objetos de estado de canalización concisos y los paquetes de llamadas de dibujo. La reducción de la sobrecarga del controlador es, de hecho, el principal atractivo de Direct3D 12, de manera similar a Mantle de AMD; en palabras de su desarrollador líder Max McMullen, el objetivo principal de Direct3D 12 es lograr "eficiencia a nivel de consola" y mejora el paralelismo de la CPU.
Aunque Nvidia ha anunciado una amplia compatibilidad con Direct3D 12, también se mostraron algo reservados sobre el atractivo universal de la nueva API, y señalaron que, si bien los desarrolladores de motores de juegos pueden estar entusiasmados con la gestión directa de los recursos de la GPU desde el código de su aplicación, " muchas [otras] personas no lo harían estar feliz de tener que hacer eso.
Algunas nuevas características de hardware también están en Direct3D 12, incluido Shader Model 5.1, Volume Tiled Resources (Nivel 2), Valor de referencia de galería de símbolos especificado por Shader, Carga de UAV con tipo, Rasterización conservadora (Nivel 1), mejor colisión y eliminación selectiva con Rasterización conservadora, Vistas ordenadas de rasterizador (ROV), Swizzles estándar, Mapeo de textura predeterminado, Cadenas de intercambio, recursos swizzled y recursos comprimidos, modos de fusión adicionales, fusión programable y transparencia eficiente independiente del orden (OIT) con UAV ordenado por píxeles.
Los objetos de estado de canalización han evolucionado desde Direct3D 11 y los nuevos estados de canalización concisos significan que el proceso se ha simplificado. DirectX 11 ofrecía flexibilidad en la forma en que se podían modificar sus estados, en detrimento del rendimiento. La simplificación del proceso y la unificación de las canalizaciones (por ejemplo, los estados del sombreador de píxeles) conducen a un proceso más optimizado, lo que reduce significativamente los gastos generales y permite que la tarjeta gráfica atraiga más llamadas para cada cuadro.
Direct3D 12 también aprendió de AMD Mantle en listas de comandos y paquetes, con el objetivo de garantizar que la CPU y la GPU funcionen juntas de una manera más equilibrada.
Dentro de Direct3D 11, los comandos se envían desde la CPU a la GPU uno por uno, y la GPU funciona con estos comandos secuencialmente. Esto significa que los comandos se ven obstaculizados por la velocidad a la que la CPU podría enviar estos comandos de forma lineal. Dentro de DirectX 12, estos comandos se envían como listas de comandos, que contienen toda la información requerida dentro de un solo paquete. Entonces, la GPU es capaz de calcular y ejecutar este comando en un solo proceso, sin tener que esperar ninguna información adicional de la CPU.
Dentro de estas listas de comandos hay paquetes. Donde anteriormente los comandos solo se tomaban, usaban y luego la GPU olvidaba, los paquetes se pueden reutilizar. Esto disminuye la carga de trabajo de la GPU y significa que los activos repetidos se pueden usar mucho más rápido.
Si bien la vinculación de recursos es bastante conveniente en Direct3D 11 para los desarrolladores en este momento, su ineficiencia significa que varias capacidades de hardware modernas se están infrautilizando drásticamente. Cuando un motor de juego necesitaba recursos en DX11, tenía que extraer los datos desde cero cada vez, lo que significaba procesos repetidos y usos innecesarios. En Direct3D 12, los montones de descriptores y las tablas significan que los desarrolladores pueden asignar los recursos más utilizados en tablas, a las que la GPU puede acceder rápida y fácilmente. Esto puede contribuir a un mejor rendimiento que Direct3D 11 en hardware equivalente, pero también implica más trabajo para el desarrollador.
Los montones dinámicos también son una característica de Direct3D 12.
Direct3D 12 cuenta con soporte explícito para múltiples adaptadores, lo que permite el control explícito de múltiples sistemas de configuración de GPU. Dichas configuraciones se pueden construir con un adaptador de gráficos del mismo proveedor de hardware, así como de diferentes proveedores de hardware juntos.
Microsoft lanzó un soporte experimental de D3D 12 para Windows 7 SP1 en 2019 a través de un paquete NuGet dedicado.
- Direct3D 12 versión 1607 – Con la actualización del 10 aniversario de Windows (versión 1607), lanzada el 2 de agosto de 2016, el tiempo de ejecución Direct3D 12 ha sido actualizado para apoyar los constructos para la comunicación explícita multitelección e interproceso, permitiendo a los desarrolladores aprovechar las GPUs masivamente paralelas modernas. Otras características incluyen la versión 1.1 de las firmas de raíz actualizada, así como el soporte para formato HDR10 y las tasas de actualización variables.
- Direct3D 12 versión 1703 – Con Windows 10 Creators Update (versión 1703), lanzado el 11 de abril de 2017, el tiempo de ejecución Direct3D 12 ha sido actualizado para apoyar Shader Modelo 6.0 y DXIL. y Shader Modelo 6.0 requiere Windows 10 Aniversary Update (versión 1607), WDDM 2.1. Las nuevas características gráficas son Depth Bounds Testing y MSAA programable.
- Direct3D 12 versión 1709 – Direct3D en Windows 10 Fall Creators Update (versión 1709), lanzado el 17 de octubre de 2017, incluye una mejor depuración.
- Direct3D 12 versión 1809 – Windows 10 octubre 2018 Update (versión 1809) proporciona soporte para Raytracing DirectX para que las GPU puedan beneficiarse de su API.
- Direct3D 12 versión 1903 – Actualización de Windows 10 May 2019 (versión 1903) proporciona soporte para DirectML.
- Direct3D 12 versión 2004 – Actualización de Windows 10 May 2020 (versión 2004) aporta soporte para Amplificación de malla, Sampler Feedback, así como DirectX Raytracing Tier 1.1 y mejoras de asignación de memoria.
Arquitectura
Direct3D es un componente del subsistema API de Microsoft DirectX. El objetivo de Direct3D es abstraer la comunicación entre una aplicación de gráficos y los controladores de hardware de gráficos. Se presenta como una fina capa abstracta a un nivel comparable a GDI (ver diagrama adjunto). Direct3D contiene numerosas funciones de las que carece GDI.
Direct3D es una API gráfica de modo inmediato. Proporciona una interfaz de bajo nivel para todas las funciones 3D de la tarjeta de video (transformaciones, recortes, iluminación, materiales, texturas, búfer de profundidad y así sucesivamente). Alguna vez tuvo un componente de modo retenido de nivel superior, ahora oficialmente descontinuado.
El modo inmediato de Direct3D presenta tres abstracciones principales: dispositivos, recursos y cadenas de intercambio (ver diagrama adjunto). Dispositivos son responsables de renderizar la escena 3D. Proporcionan una interfaz con diferentes capacidades de representación. Por ejemplo, el dispositivo mono proporciona renderizado en blanco y negro, mientras que el dispositivo RGB renderiza en color. Hay cuatro tipos de dispositivos:
- HAL (capa de abstracción de hardware) dispositivo: Para dispositivos que apoyen la aceleración del hardware.
- Referencia dispositivo: Simula nuevas funciones aún no disponibles en hardware. Es necesario instalar el SDK Direct3D para utilizar este tipo de dispositivo.
- Referencia nula dispositivo: No hace nada. Este dispositivo se utiliza cuando el SDK no está instalado y se solicita un dispositivo de referencia.
- Software pluggable dispositivo: Realiza la renderización de software. Este dispositivo fue introducido con DirectX 9.0.
Cada dispositivo contiene al menos una cadena de intercambio. Una cadena de intercambio se compone de una o más superficies de búfer posteriores. La representación se produce en el búfer posterior.
Además, los dispositivos contienen una colección de recursos; datos específicos utilizados durante el renderizado. Cada recurso tiene cuatro atributos:
- Tipo: Determina el tipo de recurso: superficie, volumen, textura, textura del cubo, textura del volumen, textura superficial, amortiguación del índice o buffer del vértice.
- Piscina: Describe cómo el recurso es gestionado por el tiempo de ejecución y donde se almacena. En el Default piscina el recurso existirá sólo en la memoria del dispositivo. Recursos en gestionado La piscina se almacenará en la memoria del sistema, y se enviará al dispositivo cuando sea necesario. Recursos en sistema de memoria La piscina sólo existirá en la memoria del sistema. Finalmente, el arañazo La piscina es básicamente la misma que la piscina de memoria del sistema, pero los recursos no están vinculados por restricciones de hardware.
- Formato: Describe el diseño de los datos de recursos en memoria. Por ejemplo, D3DFMT_R8G8B8 valor de formato significa una profundidad de color de 24 bits (8 bits para rojo, 8 bits para verde y 8 bits para azul).
- Usage: Describe, con una colección de bits de bandera, cómo el recurso será utilizado por la aplicación. Estas banderas dictan qué recursos se utilizan en patrones de acceso dinámicos o estáticos. Los valores de recursos estáticos no cambian después de ser cargados, mientras que los valores de recursos dinámicos pueden ser modificados.
Direct3D implementa dos modos de visualización:
- Modo de pantalla completa: La aplicación Direct3D genera toda la salida gráfica para un dispositivo de visualización. En este modo Direct3D captura automáticamente la resolución de pantalla de Alt-Tab y sets/restores y el formato de píxel sin la intervención del programador. Esto también proporciona muchos problemas para depurar debido al "modo cooperativo exclusivo".
- Modo de ventana: El resultado se muestra dentro del área de una ventana. Direct3D se comunica con GDI para generar la salida gráfica en la pantalla. El modo ventana puede tener el mismo nivel de rendimiento que la pantalla completa, dependiendo del soporte del controlador.
Canalización
La API de Microsoft Direct3D 11 define un proceso para convertir un grupo de vértices, texturas, zonas de influencia y estado en una imagen en la pantalla. Este proceso se describe como una canalización de representación con varias etapas distintas. Las diferentes etapas de la canalización de Direct3D 11 son:
- Input-Assembler: Lea los datos de vértice de una aplicación suministrada buffer de vértice y los alimenta por el gasoducto.
- Vertex Shader: Realiza operaciones en un solo vértice a la vez, como transformaciones, despellido o iluminación.
- Hull-Shader: Realiza operaciones en conjuntos de puntos de control de parches, y genera datos adicionales conocidos como constantes de parches.
- Tessellator: Subdivide geometría para crear representaciones de orden superior del casco.
- Domain-Shader: Realiza operaciones sobre vértices de salida por la etapa de tessellation, de la misma manera que un páramo de vértice.
- Geometry Shader: Procesa primitivos enteros como triángulos, puntos o líneas. Dado un primitivo, esta etapa lo descarta, o genera uno o más primitivos nuevos.
- Stream-Output: Puede escribir los resultados de la etapa anterior a la memoria. Esto es útil para recircular los datos de vuelta al oleoducto.
- Rasterizer: Convierte primitivos en píxeles, alimentando estos píxeles en el tono pixel. El Rasterizador también puede realizar otras tareas tales como cortar lo que no es visible, o interpolar datos de vértice en los datos de píxeles.
- Pixel Shader: Determina el color final del píxel para ser escrito al objetivo del renderizado y también puede calcular un valor de profundidad para ser escrito al búfer de profundidad.
- Output-Merger: fusiona varios tipos de datos de salida (valores de píxeles, mezcla alfa, profundidad/espejo...) para construir el resultado final.
Las etapas de tubería ilustradas con un cuadro redondo son totalmente programables. La aplicación proporciona un programa de sombreado que describe las operaciones exactas que se completarán para esa etapa. Muchas etapas son opcionales y se pueden desactivar por completo.
Niveles de funciones
En Direct3D 5 a 9, cuando las nuevas versiones de la API introdujeron la compatibilidad con nuevas capacidades de hardware, la mayoría de ellas eran opcionales: cada proveedor de gráficos mantuvo su propio conjunto de funciones compatibles además de la funcionalidad básica requerida. La compatibilidad con funciones individuales debía determinarse utilizando "bits de capacidad" o "mayúsculas", lo que hace que la programación de gráficos entre proveedores sea una tarea compleja.
Direct3D 10 introdujo un conjunto mucho más simplificado de requisitos de hardware obligatorios basados en las capacidades de Direct3D 9 más populares que todas las tarjetas gráficas compatibles debían cumplir, con solo unas pocas capacidades opcionales para operaciones y formatos de textura admitidos.
Direct3D 10.1 agregó algunos nuevos requisitos de hardware obligatorios y, para seguir siendo compatibles con el hardware y los controladores de 10.0, estas funciones se encapsularon en dos conjuntos denominados "niveles de funciones", con el nivel 10.1 formando un superconjunto del nivel 10.0. A medida que Direct3D 11.0, 11.1 y 12 agregaron soporte para nuevo hardware, las nuevas capacidades obligatorias se agruparon en niveles de funciones superiores.
Direct3D 11 también presentó "10level9", un subconjunto de la API de Direct3D 10 con tres niveles de funciones que encapsulan varias tarjetas Direct3D 9 con controladores WDDM, y Direct3D 11.1 reintrodujo algunas funciones opcionales para todos los niveles. que se ampliaron en Direct3D 11.2 y versiones posteriores.
Este enfoque permite a los desarrolladores unificar la canalización de representación y usar una única versión de la API en hardware más nuevo y más antiguo, aprovechando las mejoras de rendimiento y usabilidad en el tiempo de ejecución más reciente.
Los nuevos niveles de funciones se introducen con versiones actualizadas de la API y, por lo general, encapsulan:
- principales características obligatorias – (Direct3D 11.0, 12),
- algunas características menores (Direct3D 10.1, 11.1), o
- un conjunto común de características previamente opcionales (Direct3D 11.0 "10 nivel 9").
Cada nivel superior es un superconjunto estricto de un nivel inferior, con solo unas pocas características nuevas o anteriormente opcionales que pasan a la funcionalidad principal en un nivel superior. Las funciones más avanzadas en una revisión importante de la API de Direct3D, como los nuevos modelos de sombreado y las etapas de renderizado, solo se exponen en hardware de nivel superior.
Existen capacidades separadas para indicar compatibilidad con operaciones de textura y formatos de recursos específicos; estos se especifican para cada formato de textura utilizando una combinación de indicadores de capacidad.
Los niveles de funciones usan un guión bajo como delimitador (es decir, "12_1"), mientras que las versiones de tiempo de ejecución/API usan un punto (es decir, "Direct3D 11.4").
Direct3D 11 niveles
En Direct3D 11.4 para Windows 10, hay nueve niveles de funciones proporcionados por D3D_FEATURE_LEVEL
estructura; los niveles 9_1, 9_2 y 9_3 (conocidos colectivamente como Direct3D 10 Nivel 9) reencapsulan varias características de las populares tarjetas Direct3D 9, los niveles 10_0, 10_1 se refieren a las respectivas versiones heredadas de Direct3D 10, 11_0 y 11_1 refleja la función introducida con Direct3D 11 y Direct3D 11.1 API y tiempos de ejecución, mientras que los niveles 12_0 y 12_1 corresponden a los nuevos niveles de funciones introducidos con Direct3D 12 API.
Nivel de actividad | Características del hardware obligatorias | Características opcionales |
---|---|---|
9_1 | Modelo de afeitado 2.0vs_2_0 /ps_2_0 ), texturas 2K, texturas de volumen, consultas de eventos, BC1-3 (a.k.a. DXTn), algunas otras capacidades específicas.
| — |
9_2 | Consultas de oclusión, formatos de punto flotante (sin mezcla), gorros extendidos, todas las características 9_1. | |
9_3 | vs_2_a /ps_2_x con tapas de tono, texturas 4K, múltiples objetivos de renderizado (4 MRTs), mezcla de puntos flotantes (limitados), todas las características 9_2.
| |
10_0 | Shader Modelo 4.0, geometría sombra, stream out, alpha-to-coverage, texturas 8K, texturas MSAA, stencil de 2 caras, vistas generales del objetivo de renderizado, arrays de textura, BC4/BC5, soporte completo de formato flotante-punto, todas las características 9_3. | Operaciones de mezcla lógica, DirectCompute (CS 4.0/4.1), formatos de píxeles extendidos. |
10_1 | Shader Modelo 4.1, arrays cubemap, MSAA extendida, todas las características 10_0. | |
11_0 | Shader Model 5.0/5.1, hull & domain shadowrs, DirectCompute (CS 5.0/5.1), 16K texturas, BC6H/BC7, extensos formatos de píxeles, todas las funciones 10_1. | |
11_1 | Operaciones de mezcla lógica, rasterización independiente de objetivos, VA en cada etapa de tubería con mayor recuento de ranura, UAV sólo renderizado con recuento de muestras de fuerza, offset constante de amortiguadores y actualizaciones parciales, todas las características 11_0. | |
12_0 | Tiled Resources Tier 2 (Texture2D), Tipod UAV Carga (formatos adicionales). | |
12_1 | Rasterización conservadora Tier 1, Rasterizer Vistas ordenadas. |
Direct3D 12 niveles
Direct3D 12 para Windows 10 requiere hardware de gráficos que cumpla con los niveles de funciones 11_0 y 11_1, que admite traducciones de direcciones de memoria virtual y requiere controladores WDDM 2.0. Hay dos nuevos niveles de funciones, 12_0 y 12_1, que incluyen algunas funciones nuevas expuestas por Direct3D 12 que son opcionales en los niveles 11_0 y 11_1. Algunas características previamente opcionales se realinean como línea de base en los niveles 11_0 y 11_1. Shader Model 6.0 se lanzó con Windows 10 Creators Update y requiere Windows 10 Anniversary Update, controladores WDDM 2.1.
Nivel | Características obligatorias | Características opcionales |
---|---|---|
11_0 | Todas las funciones obligatorias 11_0 de Direct3D 11, Shader Model 5.1, Resource binding Tier 1. | Operaciones de mezcla lógica, operaciones de punto flotante de doble precisión (64 bits), precisión mínima de punto flotante (10 o 16 bits).
Limitación de recursos (tres niveles), recursos de baldosas (cuatro niveles), rasterización conservadora (tres niveles), valor de referencia stencil de Pixel Shader, rasterizador de vistas ordenadas, cargas UAV tipo para formatos adicionales, vista instancing. Shader Modelo 6.0-6.7 Metacommands, tasa de afeitado variable, rayos, sombreadores de malla, retroalimentación de muestreador. Otras características opcionales. |
11_1 | ||
12_0 | Tier 2, Tiled Resources Tier 2 (Texture2D), Tipod UAV Carga (formatos adicionales), modelo Shader 6.0. | |
12_1 | Rasterización conservadora Tier 1, Rasterizer Vistas ordenadas. | |
12_2 | DirectX 12 Ultimate: Shader Modelo 6.5, Raytracing Tier 1.1, Mesh Shaders, Variable-Rate Shading, Sampler Feedback, Resource Binding Tier 3, Tiled Resources Tier 3 (Texture3D), Conservative Rasterization Tier 3, 40-bit virtual address space. |
Direct3D 12 presenta un modelo de vinculación de recursos renovado que permite el control explícito de la memoria. Resumen "vista de recursos" los objetos ahora se representan con descriptores de recursos, que se asignan mediante montones de memoria y tablas. Los niveles de vinculación de recursos definen la cantidad máxima de recursos que se pueden abordar mediante CBV (vista de búfer constante), SRV (vista de recursos de sombreado) y UAV (vista de acceso desordenado), así como unidades de muestreo de texturas. El hardware de nivel 3 permite recursos completamente ilimitados solo restringidos por el tamaño del montón de descriptores, mientras que el hardware de nivel 1 y nivel 2 impone algunos límites en la cantidad de descriptores ("vistas") que se pueden usar simultáneamente.
Límites de recursos | Nivel 1 | Nivel 2 | Nivel 3 |
---|---|---|---|
Descriptores en montón CBV/SRV/UAV | 1M | 1M | ■1M |
CBVs por etapa sombreadora | 14 | 14 | completo |
SRV por etapa de sombra | 128 | completo | |
VU en todas las etapas | 8, 64† | 64 | completo |
Samplers por etapa sombreadora | 16 | completo | |
† 64 ranuras en el nivel de características 11_1 hardware |
Multiproceso
El modelo de controlador WDDM en Windows Vista y superior admite una cantidad arbitrariamente grande de contextos de ejecución (o subprocesos) en hardware o software. Windows XP solo admitía el acceso multitarea a Direct3D, donde las aplicaciones separadas podían ejecutarse en diferentes ventanas y ser aceleradas por hardware, y el sistema operativo tenía un control limitado sobre lo que podía hacer la GPU y el controlador podía cambiar los hilos de ejecución arbitrariamente.
La capacidad de ejecutar el tiempo de ejecución en un modo de subprocesos múltiples se introdujo con el tiempo de ejecución de Direct3D 11. Cada contexto de ejecución se presenta con una vista de recursos de la GPU. Los contextos de ejecución están protegidos entre sí, sin embargo, una aplicación no autorizada o mal escrita puede tomar el control de la ejecución en el controlador de modo de usuario y podría acceder a los datos de otro proceso dentro de la memoria de la GPU mediante el envío de comandos modificados. Aunque está protegida contra el acceso de otra aplicación, una aplicación bien escrita aún necesita protegerse contra fallas y pérdidas de dispositivos causadas por otras aplicaciones.
El sistema operativo gestiona los subprocesos por sí mismo, lo que permite que el hardware cambie de un subproceso a otro cuando corresponda, y también gestiona la gestión de la memoria y la paginación (en la memoria del sistema y en el disco) a través de la gestión integrada de la memoria del núcleo del sistema operativo.
El cambio de contexto más detallado, es decir, poder cambiar dos subprocesos de ejecución en el nivel de instrucción del sombreador en lugar del nivel de un solo comando o incluso en un lote de comandos, se introdujo en WDDM/DXGI 1.2 que se envió con Windows 8. Este soluciona un posible problema de programación cuando la aplicación tendría una ejecución muy larga de un solo comando/lote de comandos y el temporizador de vigilancia del sistema operativo deberá finalizarla.
WDDM 2.0 y DirectX 12 se han rediseñado para permitir sorteos multiproceso completos. Esto se logró haciendo que todos los recursos fueran inmutables (es decir, de solo lectura), serializando los estados de representación y usando paquetes de llamadas de sorteo. Esto evita la gestión compleja de recursos en el controlador en modo kernel, lo que hace posible múltiples llamadas de reentrada al controlador en modo usuario a través de contextos de ejecución concurrentes proporcionados por subprocesos de representación separados en la misma aplicación.
Direct3D móvil
Direct3D Mobile se deriva de Direct3D pero tiene una huella de memoria más pequeña. Windows CE proporciona compatibilidad con Direct3D Mobile.
Implementaciones alternativas
Existen las siguientes implementaciones alternativas de Direct3D API. Son útiles para plataformas que no son de Windows y para hardware sin algunas versiones de soporte DX:
- WineD3D – El proyecto de código abierto Wine tiene implementaciones de trabajo de las API Direct3D a través de la traducción a OpenGL. La implementación del vino también se puede ejecutar en Windows bajo ciertas condiciones.
- vkd3d – vkd3d es una biblioteca gráfica 3D de código abierto construida sobre Vulkan que permite ejecutar aplicaciones Direct3D 12 en la parte superior de Vulkan. Es utilizado principalmente por el proyecto Wine, y ahora está incluido con el proyecto Proton de Valve agrupado con vapor en linux.
- DXVK – Una capa de traducción basada en Vulkan de código abierto para Direct3D 9/10/11 que permite ejecutar aplicaciones 3D en Linux utilizando Wine. Es utilizado por Proton/Steam para Linux. DXVK es capaz de ejecutar un gran número de juegos Windows modernos bajo Linux.
- D9VK – Un tenedor de DXVK para agregar soporte Direct3D 9, incluido con Steam/Proton en Linux. El 16 de diciembre de 2019 D9VK fue fusionado en DXVK.
- Gallium Nine – Gallium Nine hace posible ejecutar aplicaciones Direct3D 9 en Linux nativamente, es decir, sin ninguna traducción de llamadas que permita una velocidad nativa cercana. Requiere la cooperación de Vino y Mesa.
Herramientas relacionadas
D3DX
Direct3D viene con D3DX, una biblioteca de herramientas diseñadas para realizar cálculos matemáticos comunes en vectores, matrices y colores, calcular matrices de visualización y proyección, interpolaciones spline y varias tareas más complicadas, como compilar o ensamblar sombreadores utilizados para Programación gráfica 3D, almacenamiento de animación esquelética comprimida y pilas de matriz. Hay varias funciones que brindan operaciones complejas sobre mallas 3D, como el cálculo del espacio tangente, la simplificación de mallas, la transferencia de radiancia precalculada, la optimización para compatibilidad con caché de vértices y stripificación, y generadores para mallas de texto 3D. Las funciones 2D incluyen clases para dibujar líneas en el espacio de la pantalla, texto y sistemas de partículas basados en sprites. Las funciones espaciales incluyen varias rutinas de intersección, conversión desde/hacia coordenadas baricéntricas y generadores de esferas/cuadros delimitadores. D3DX se proporciona como una biblioteca de vínculos dinámicos (DLL). D3DX está obsoleto a partir de Windows 8 y no se puede usar en las aplicaciones de la Tienda Windows.
Algunas funciones presentes en versiones anteriores de D3DX se eliminaron en Direct3D 11 y ahora se proporcionan como fuentes separadas:
- Windows SDK y Visual Studio
- Se ha eliminado una gran parte de la biblioteca de matemáticas. Microsoft recomienda el uso de la biblioteca de Matemáticas DirectX en su lugar.
- Se ha eliminado la matemática armónica esférica y ahora se distribuye como fuente.
- El marco de Efecto se ha eliminado y ahora se distribuye como fuente a través de CodePlex.
- Las funciones de interfaz de malla y geometría se han eliminado y ahora se distribuyen como fuente a través de CodePlex bajo la biblioteca de procesamiento de geometría DirectXMesh.
- Las funciones de textura se han eliminado y ahora se distribuyen como fuente a través de CodePlex bajo la biblioteca de procesamiento de textura DirectXTex.
- Los ayudantes generales han sido eliminados y ahora se distribuyen como fuente a través del proyecto CodePlex bajo DirectX Tool Kit (DirectXTK).
- El atlas de textura isochart ha sido eliminado y ahora se distribuye como fuente a través de CodePlex bajo proyecto UVAtlas.
DXUT
DXUT (también llamado framework de muestra) es una capa construida sobre la API de Direct3D. El marco está diseñado para ayudar al programador a pasar menos tiempo con tareas mundanas, como crear una ventana, crear un dispositivo, procesar mensajes de Windows y manejar eventos de dispositivos. DXUT se eliminó con Windows SDK 8.0 y ahora se distribuye como fuente a través de CodePlex.
Contenido relacionado
Corporación NCR
Trazador
Diodo PIN