Skip to main content

La canalización heredada

Durante los últimos 20 años, la canalización de gráficos ha evolucionado hasta alcanzar su estado ahora familiar. A medida que los proveedores de hardware independientes (IHV) se centran en una batalla cada vez más amplia de recuento de núcleos, capacidad de memoria y ancho de banda, se han hecho evidentes ciertos cuellos de botella de función fija en el modelo de procesamiento geométrico. Figura 1. La canalización de gráficos heredada. Las fases con tinte azul son de función fija. Las fases con tinte verde son sombreadores programables. Uno de los cuellos de botella más problemáticos es el ensamblador de entrada (IA). El IA es un componente de hardware que se encuentra en la parte superior de la canalización de gráficos y que es responsable de procesar índices y capturar datos de vértices. El número de unidades IA no se ha escalado al mismo ritmo que otros recursos de GPU. El número pequeño y fijo de unidades IA introduce una tasa de lanzamiento restrictiva que a menudo puede no lograr saturar de trabajo los núcleos de la GPU. En la parte inferior de la canalización de geometría se encuentra el ensamblador de primitivas (PA). Este componente de hardware compone los vértices transformados en primitivas, realiza rutinas de selección (culling) y recorte, y después reenvía las instancias supervivientes a la rasterización. Tiene una tasa de exportación fija, y mantener esta tasa puede ser un desafío. En algunos casos, esto podría deberse al IA: si las ondas de sombreador pudieran lanzarse a la canalización más rápido, se podrían enviar más primitivas en paralelo. Más cargas de trabajo paralelas en curso pueden mantener mejor la presión sobre el PA. Otra limitación de la canalización de gráficos heredada es que los métodos de selección de geometría en la canalización tradicional son limitados. La geometría descartada reduce el rendimiento efectivo y desperdicia ancho de banda de memoria y ALU cargando y sombreando atributos de vértices que nunca verán la luz del día. Idealmente, nos gustaría poder realizar la selección con una gran variedad de granularidades para descartar geometría en el momento más temprano posible.

La canalización de sombreadores de malla

La canalización de sombreadores de malla aborda estas limitaciones de la canalización de gráficos heredada. En primer lugar, elimina el IA y el teselador de la canalización. Esto está pensado para maximizar la tasa de lanzamiento de ondas de sombreador y trasladar el IA a código de sombreador que puede escalar con las GPU. Esto puede ayudar a saturar los núcleos de la GPU y mantener la presión sobre el PA. Esta canalización también proporciona la capacidad de descartar cargas de trabajo en varios puntos de la canalización. Los sombreadores de amplificación pueden usarse para realizar selección de baja granularidad, por ejemplo, contra objetos agrupados, instancias o meshlets. Los sombreadores de malla pueden realizar la selección con una granularidad por primitiva. Esto proporciona una vía para descartar primitivas trivialmente descartables de forma temprana y frecuente, lo que ahorra un valioso cálculo, ancho de banda de memoria y rendimiento del PA. Figura 2. Las fases de la canalización de sombreadores de malla. Las fases con tinte verde son programables. Las fases con tinte azul son de función fija.

Sombreadores de malla

Los sombreadores de malla se diseñaron para proporcionar a la canalización de geometría un nivel de generalidad que solo se encuentra en los sombreadores de proceso. Esto da al desarrollador control total sobre la carga de trabajo de cada subproceso. Mover las capturas de índices y de atributos de vértices al código del sombreador elimina la dependencia del hardware de función fija, lo que maximiza las tasas de lanzamiento de ondas y permite que el IA escale con el resto de la GPU. Su capacidad de especificar dinámicamente los recuentos de exportación de vértices y primitivas abre la puerta a una compatibilidad eficiente en chip para la selección de primitivas. Esto se puede hacer por meshlet o por primitiva contra cualquier criterio de selección arbitrario dentro del sombreador de malla. Esto permite que los sombreadores aplacen las capturas de atributos de vértices y el sombreado hasta el final de la canalización, después de que ya se hayan realizado varias capas de selección.

Sombreadores de amplificación

Los sombreadores de proceso se usan habitualmente para preprocesar recursos, seguidos de llamadas de dibujo que consumen sus resultados mediante ExecuteIndirect. Esta es una técnica común para muchas formas de selección por vista. Esto tiene un par de inconvenientes sutiles que podrían optimizarse con el soporte de hardware adecuado. Por un lado, las instancias del sombreador de proceso deben escribir sus datos en la memoria global. Esto genera latencia de captura y las somete a la contención del ancho de banda de memoria en toda la GPU. En segundo lugar, si el productor de proceso y el consumidor de gráficos son operaciones consecutivas, la GPU debe esperar a que todas las instancias del sombreador de proceso terminen antes de lanzar las llamadas de dibujo consumidoras. Esto se debe a una barrera de recursos de vista de acceso desordenado (UAV) que debe garantizar que todas las escrituras del sombreador de proceso en el UAV final se completen antes de que cualquier sombreador pueda consumirlo. Figura 3. Visualización simplificada de la programación de ondas de un sombreador de proceso con un dibujo ExecuteIndirect “DispatchMesh” inmediatamente posterior. Las ondas del sombreador de proceso (amarillo) están separadas de la ejecución de las ondas del sombreador de malla (verde) por una parada de la canalización debida a una barrera de UAV. Los identificadores numerados relacionan el grupo de subprocesos del sombreador de proceso invocador con su clúster de sombreadores de malla secundarios. La fase de sombreador de amplificación está pensada para abordar estos problemas. El productor y el consumidor están canalizados: memoria entre fases en chip sin vaciado intermedio de la canalización. La programación de las ondas del sombreador de amplificación y del sombreador de malla se intercala, lo que puede saturar más completamente la GPU con trabajo. También abre un nivel de capacidad generalizada de reducción o amplificación de la carga de trabajo que sencillamente no existe en la canalización de gráficos heredada. Esto se puede usar para implementar características como técnicas de selección, selección dinámica de nivel de detalle (LOD) por instancia o rutinas de teselación personalizadas. Figura 4. Visualización de la programación de ondas de una carga de trabajo de sombreador de amplificación. La parada se elimina de la canalización. Los identificadores numerados relacionan el grupo de subprocesos del sombreador de amplificación invocador con su clúster de sombreadores de malla secundarios.

Consulte también

Información general sobre la canalización de sombreadores de malla Información general sobre la API de sombreadores de malla Uso de la canalización de sombreadores de malla
Última modificación el 28 de agosto de 2026