Novedades de los controladores de pantalla y gráficos de Windows 10
En esta página se describen las novedades de los controladores de pantalla y gráficos para Windows 10, versión 2004 (WDDM 2.7). Para ver las características agregadas en versiones anteriores de WDDM 2.X, consulte Novedades de las versiones anteriores de WDDM 2.X.
Sombreadores de malla
Los sombreadores de malla son un medio para aumentar la flexibilidad y el rendimiento de la canalización de gráficos de Direct3D 12 al usar la rasterización. Actúan como un nuevo reemplazo para el ensamblador de entrada ( en particular, las fases del sombreador de vértices y geometría), reemplazando parte del comportamiento de función fija del ensamblador de entrada por el comportamiento de función flexible. Con los sombreadores de malla, las aplicaciones pueden aplicar la selección antes y, por lo tanto, de forma más eficaz que el ensamblador de entrada. Los primitivos se pueden seleccionar sin tener sus datos de índice procesados por la GPU, lo que es muy beneficioso, ya que vemos que los recuentos primitivos de las aplicaciones 3D se vuelven más altos y superiores a lo largo del tiempo.
En caso de que haya un sombreador de píxeles conectado, los primitivos de salida de un sombreador de malla se alimentarán directamente en la fase del sombreador de píxeles.
La característica de sombreador de malla presenta la etapa del sombreador de malla junto con una nueva fase: el sombreador de amplificación. Los sombreadores de amplificaciones reemplazan la fase de teselación de GPU. Las aplicaciones configuran su sombreador de amplificación para invocar un sombreador de malla varias veces según sea necesario. Los sombreadores de amplificación son un paso opcional que permite a una aplicación controlar dinámicamente los niveles de detalle geométrico.
La característica de sombreador de malla implica nuevas construcciones de lenguaje de sombreado, así como cambios de UMD. Para informar de la funcionalidad del dispositivo de sombreadores de malla, hay un campo denominado MeshShaderTier notificado a través de D3D12DDI_D3D12_OPTIONS_DATA_0073. Y, dado que esto presenta dos nuevas fases de sombreador, hay dos nuevos campos en D3D12DDIARG_CREATE_PIPELINE_STATE_0075, hMeshShader y hAmplificationShader. Para comenzar, hay la lista de comandos DDI PFND3D12DDI_DISPATCH_MESH_0074 y también D3D12DDI_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH para el envío indirecto.
DirectX Raytracing (DXR) 1.1
WDDM 2.7 incluye algunas características y mejoras nuevas que se basan en la versión inicial de DXR en Direct3D 12.
El raytracing en línea es una forma alternativa de raytracing que no usa ningún sombreador dinámico o tablas de sombreador independientes. Proporciona la flexibilidad del desarrollador y cierta comodidad en todos aquellos casos en los que los sombreadores que usan raytracing de estilo DXR 1.0, llámelos raytracing "basados en sombreador dinámico", no caben. El raytracing en línea está disponible en cualquier fase del sombreador, incluidos los sombreadores de proceso, los sombreadores de píxeles, etc. Esto se menciona aquí como algo disponible con WDDM 2.7, aunque no se corresponde con un cambio DDI.
Las aplicaciones pueden llamar a DispatchRays a través de ExecuteIndirect, lo que permite configurar el trabajo de raytracing en la GPU. Esto podría ser útil para las aplicaciones que buscan seleccionar, ordenar o ajustar el trabajo de raytracing y usan sombreadores para hacerlo. Ahora hay un valor de enumeración D3D12DDI_INDIRECT_ARGUMENT_TYPE. Al usar el envío de raytracing indirecto, cada elemento del búfer indirecto de ejecución es de tipo D3D12DDIARG_DISPATCH_RAYS_0054.
La sobrecarga de crear el estado de canalización para tener en cuenta diferentes combinaciones de sombreador es uno de esos problemas difíciles en los gráficos de equipo 3D. DXR 1.1 incluye algo que puede ayudar: add-to-state-object. AddToStateObject(), tal como se expone en la API, permite a las aplicaciones agregar sombreadores a un objeto de estado existente con sobrecarga de CPU proporcional solo a lo que se agrega. En este caso, hay dos funciones DDI de dispositivo: PFND3D12DDI_ADD_TO_STATE_OBJECT_0072 y PFND3D12DDI_CALC_PRIVATE_ADD_TO_STATE_OBJECT_SIZE_0072.
En el caso de los informes de funcionalidades generales, hay un nuevo valor de enumeración D3D12DDI_RAYTRACING_TIER_1_1 se usa para el nivel de informes 1.1.
Comentarios del sampler
Sampler Feedback es una característica de Direct3D 12 para capturar y grabar información y ubicaciones de muestreo de texturas. Sin comentarios del sampler, estos detalles serían opacos para el desarrollador. Esta característica proporciona a las aplicaciones la capacidad de no solo saber qué mip se muestreó, sino saber dónde se encuentran esos mips. Las aplicaciones pueden estar interesadas en la información de muestreo, por ejemplo, para:
- saber con precisión qué cargar a continuación en un sistema de streaming de texturas o
- saber con precisión qué es necesario sombrear en un sistema de representación de sombreado de espacio de textura.
Los comentarios de las operaciones de ejemplo se escriben en un "mapa de comentarios" que actúa como un tipo de recurso opaco que se debe transcodificar para obtener información inspeccionable de la aplicación. En cuanto a la escritura de comentarios en sí, hay construcciones HLSL en el modelo de sombreador 6_5 para eso. La semántica es muy similar a la semántica del ejemplo de Texture2D y sus variantes.
Aunque los comentarios del muestreador hacen un buen uso de nuevas construcciones de lenguaje de sombreado, también implica cambios de UMD. Para la comprobación de funcionalidad del dispositivo, hay un límite denominado SamplerFeedbackTier notificado a través de D3D12DDI_D3D12_OPTIONS_DATA_0073. Se ha revisado la creación de recursos para tomar un nuevo campo, la región mip de comentarios del sampler, de tipo D3D12DDI_MIP_REGION_0075. Además, también hay un nuevo método de creación de descriptores, PFND3D12DDI_CREATE_SAMPLER_FEEDBACK_UNORDERED_ACCESS_VIEW_0075.
Content Protection
Se agregó compatibilidad con recursos protegidos opcionales a las operaciones de vídeo de Direct3D 12 en WDDM 2.7. En segundo plano, los recursos protegidos existían antes de WDDM 2.7, pero solo estaban disponibles para el uso compartido entre API y gráficos o proceso, no para vídeo.
El controlador no notifica la compatibilidad con los recursos protegidos como algo global; es por operación. Si un controlador informa de que admite recursos protegidos para una operación determinada, significa que la operación puede leer y escribir recursos protegidos y admite el uso compartido entre API si el tipo de recurso lo permite. Otra cosa que merece la pena mencionar es que si un controlador reclama compatibilidad con recursos protegidos para un formato determinado, también debe admitir ese formato como un recurso no protegido.
Con WDDM 2.7, los métodos de creación de recursos se modifican para tomar una instancia de D3D12DDI_HPROTECTEDRESOURCESESSION opcional. A los controladores se les asigna este parámetro en el momento de creación de objetos para informar a la configuración y las asignaciones. Además, se revisan las comprobaciones presupuestarias de memoria para indicar si la operación usará o no recursos protegidos. Cuando el parámetro protected-resource-session no es NULL, esto indica que la operación escribirá en recursos protegidos. Para escribir en un recurso desprotegido, se debe volver a crear el objeto de operación.
Las referencias de estimación de movimiento y descodificador deben estar protegidas cuando la salida es un recurso protegido. El procesamiento de vídeo puede leer de una combinación de recursos protegidos y no protegidos al escribir en un recurso protegido.
Antes de grabar una o varias operaciones que escriben en un recurso protegido, se debe llamar a PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030 con una sesión de recursos protegidos que no sea NULL. Se requiere llamar a PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030 con NULL antes de grabar una o varias operaciones que escriben en recursos no protegidos.
Para saber más allá del recorrido guiado anterior de los cambios de DDI para la protección de contenido en WDDM 2.7, consulte D3D12DDI_VIDEO_DECODE_PROTECTED_RESOURCES_DATA_0072 como punto de partida.
Informes de búfer de historial mejorados para herramientas
WDDM 2.7 presenta un cambio de DDI que beneficia al uso de las herramientas de depuración de GPU de los búferes de historial. Con este cambio, un envío de búfer de comandos único puede contener trabajo correspondiente a varias listas de comandos en lugar de solo listas de comandos a la vez. Este cambio permite que las herramientas de depuración de GPU notifiquen con más precisión las características de rendimiento de las aplicaciones.
Esta funcionalidad se notifica a través de D3D12DDICAPS_TYPE_0073_SUPPORT_BATCHED_MARKERS. Hay un nuevo D3DDDI_MARKERLOGTYPE de D3DDDIMLT_BATCHED de valor de enumeración, que corresponde a D3DDDI_BATCHEDMARKERDATA. Las estructuras de datos de eventos ETW se han renovado para contener cierto número de elementos de D3DDDI_BATCHEDMARKERDATA cuando son de tipo D3DDDIMLT_BATCHED.
DisplayPort (DP) AUX/I2C
El canal auxiliar de DP (AUX) proporciona acceso a los datos de configuración de DP (DPCD), que es un archivo de registro por dispositivo que se usa para leer las funcionalidades del dispositivo de DP, el entrenamiento de vínculos, la detección de topologías, el acceso a bus I2C, etc. Vea DXGK_DP_INTERFACE como punto de partida.