Así funcionan las unidades fijas de tu tarjeta gráfica en gaming

La unidades de función fija de una GPUs se encargan de hacer una serie de trabajos concretos que destacan por ser recurrentes y repetitivos, estas unidades se encuentran en todo procesador gráfico desde los inicios de los tiempos y de manera independiente a cualquier fabricante,  son esenciales para rendimiento gráfico y se encargan de diferentes taras concretas en el pipeline gráfico.

Un acelerador o coprocesador es toda unidad de proceso que realiza una tarea o una serie de tareas concretas en menos tiempo que el procesador principal, aparte de hacerlo ocupando un área y un consumo mucho menores que utilizando un procesador de propósito general para ello.

En las GPUs lo más parecido a una GPU de propósito general son las Compute Units donde se ejecutan los programas shaders, pero existen ciertas tareas gráficas que son realizadas por unidades especializadas.

La unidades de función fija en una GPU

DX12 Ultimate

Para entender cómo se renderizan los gráficos hemos de entender que esta funciona como una factoría que produce en diversas etapas, pensad en los diferentes triángulos que componen la escena en un bollo que se va moldeando y cocinando hasta llegar al envasado final, pero en vez de un bollo lo que tenemos es una imagen en pantalla.

Existen dos clases de etapas en una GPU, unas se ejecutan a través de un programa shader en las Compute Units o SM, las otras hacen uso de unidades de función fija. El proceso es dirigido por los procesadores de comandos que son las unidades que van moviendo los datos a través de la GPU en las diferente etapas del pipeline gráfico.

Cada unidad de la GPU, independientemente si es de función fija o una Compute Unit, recibe unos datos de entrada en los que procesa un programa. En el caso de los aceleradores o unidades de función fija lo que hacen es aplicar un programa que ya tienen cableado un microprograma que ha sido instalado por el fabricante de la GPU.

Las unidades de función fija en una GPU

NVIDIA GPU

A continuación os hacemos una lista de la unidades de función fija más comunes y más utilizadas en una GPU.

Sin ellas serían las Compute Units a través de programas shader las que tendrían que realizar estar tareas, necesitando para ello un chip más grande y consumiendo una mayor cantidad de energía.

Unidad de funcion fija para el rasterizado

Se encargan de coger los triángulos y convertirlos en fragmentos, lo cual consiste en proyectarlos sobre la cámara para convertirlos en un grupo de pixeles que luego la GPU tendrá que colorear.

Es una de las etapas más complejas de los gráficos en 3D y su implementación en forma de acelerador dedicado es lo que permitió el nacimiento de las tarjetas gráficas en 3D.

Unidad de función fija para el filtrado de texturas

Texture Unit Función Fija

Se sitúa normalmente dentro de la Compute Unit, conectada  a la cache de datos, su trabajo no es otro que aplicar el filtro bilineal, trilineal anisotrópico. Se basa en coger varias muestras de pixeles para hacer su trabajo.

Todas las GPUs contemporáneas hacen uso de unidades de texturas agrupadas  de 4 en 4, con 16 conexiones a la cache de datos, lo que le permite aplicar el filtro bilineal al 100% de la tasa de texturizado, el trilineal al 50% y el anisotrópico al 25%.

Además se combinan con las Compute Units para ejecutar los programas Pixel o Fragment Shaders, desde donde se manipulan los valores de las texturas.

Unidad de función fija para la teselación

Teselación

Se encarga de realizar lo que llamamos subdivisión de superficies, la cual consiste en ir dividiendo los vértices de un modelo en varios distintos sin perder la forma original del mismo.

La unidad de teselación opera antes de la unidad de rasterizado y es un arma de doble filo ya que la teselación excesiva no tiene sentido en objetos muy lejanos y puede provocar un cuello de botella con la unidad de rasterizado.

Por otro lado, las unidades de teselación más avanzadas pueden aplicar el mapeado de desplazamiento que es la generación de geometría en un modelo a partir de un mapa de desplazamiento e incluso generar partículas.

Unidad de Culling

Se encarga de eliminar la geometría superflua del escenario, es decir la que es demasiado pequeña, esta oculta por otro elemento que impide su visualización o se encuentra fuera de la escena.

Su trabajo es eliminar de la lista de pantalla los triángulos que cumplen esos tres requisitos.

Raster Output

amd rbe función fija

El Raster OutPut o ROP es una unidad encargada de generar los búferes de imagen, es por tanto una unidad que puede escribir en la VRAM de manera directa, aunque en GPUs más contemporáneas lo puede hacer sobre la Cache L2 y en el caso de los Tile Renderers lo hace en una memoria interna de la propia GPU.

Actúa en dos etapas durante el pipeline, la primera en la etapa de rasterización donde genera el Z-Búfer, un búfer de imagen que indica a que distancia esta cada elemento de la escena respecto a la cámara. La segunda tras el texturizado donde genera los búferes de color en formato RGBA.

Unidad de Intersección de rayos para el Ray Tracing

RayTracingBase

Es la unidad encargada de calcular la intersección de los rayos con la superficies en el Ray Tracing, tenemos en Hardzone un tutorial acerca de su funcionamiento, la podéis encontrar como «¿Qué es como y como funcionan los RT Cores para Ray Tracing?«