En gráficos por computadora , el término "función fija" se usa principalmente para describir las API de gráficos 3D y las GPU diseñadas antes de la llegada de los sombreadores programables . También se usa para describir las API y las canalizaciones gráficas que no permiten a los usuarios modificar sus técnicas de procesamiento subyacentes, de ahí la palabra "fijo". Asimismo, "función fija" puede referirse a técnicas de procesamiento gráfico que emplean hardware dedicado no programable , como el uso de ROP para rasterizar una imagen.
Historia
Aunque el origen exacto del término "función fija" no está claro, el primer hardware gráfico conocido que se considera de función fija es la tarjeta gráfica adicional IBM 8514/A de 1987. En comparación con otros hardware gráficos de su época, en particular los que utilizaban el TMS34010 basado en RISC , el 8514/A tenía velocidades de procesamiento similares y, además, se lanzó a un precio significativamente menor. Sin embargo, estas ventajas se consiguieron a costa de la flexibilidad de programación, ya que el 8514/A se diseñó más como un ASIC que sus competidores, que eran similares a las CPU de propósito general . [ 1 ]
Tras el 8514/A, el hardware gráfico dedicado más potente de la década de 1990 contaba con arquitecturas de procesamiento no programables, configurables solo de forma limitada. Esto significa que las CPU del host no tienen influencia directa sobre cómo sus GPU procesarán las operaciones de vértice y rasterización, más allá de emitir comandos indirectos y transferir datos bidireccionalmente desde la RAM del lado de la CPU a la VRAM del lado de la GPU . A medida que se lanzaba más hardware con este diseño de función fija, los desarrolladores de API de gráficos 3D de los 90 imitaron la naturaleza del hardware disponible en su propio diseño de software, creando arquitecturas de procesamiento gráfico lógicas que solo eran configurables y no programables. Las API de gráficos de esta época, en particular OpenGL y las primeras versiones de DirectX ( Direct3D ), se denominan retroactivamente de función fija, ya que en última instancia comparten muchas características de diseño con el hardware de función fija al que estaban dirigidas. [ 2 ]
Históricamente, las API de función fija consistían en un conjunto de puntos de entrada de función que se asignaban, de forma aproximada o directa, a la lógica específica para su propósito en las GPU diseñadas para soportarlas. A medida que evolucionaron las GPU y las API basadas en sombreadores , los ingenieros de controladores gráficos implementaron las API de función fija utilizando la arquitectura de sombreado de propósito general. Este enfoque sirvió como transición para seguir proporcionando la abstracción de API de función fija con la que la mayoría de los desarrolladores estaban familiarizados, al tiempo que permitía un mayor desarrollo y mejoras de las nuevas arquitecturas basadas en sombreadores.
OpenGL, OpenGL ES y DirectX son API de gráficos 3D que pasaron del modelo de programación de función fija al modelo de programación basado en sombreadores. [ 3 ] A continuación se muestra una tabla que indica cuándo se realizó la transición de la función fija a los sombreadores:
Incluso después de la popularización de los sombreadores programables y las canalizaciones gráficas, ciertas características de la GPU permanecieron no programables para priorizar la velocidad sobre la flexibilidad. Por ejemplo, las GPU NVIDIA GeForce serie 6 delegaron el descarte temprano, la rasterización, el MSAA , las consultas de profundidad, el mapeo de texturas y más a implementaciones de función fija. La CPU no dirige a la GPU sobre cómo procesar específicamente estas operaciones; estas características solo se pueden configurar hasta cierto punto. [ 4 ]
Función fija frente a sombreadores
En una canalización de función fija, las etapas de la canalización gráfica están predefinidas y pueden ser configuradas por el programador. Una canalización basada en sombreadores permite a los programadores reemplazar algunas de estas etapas con programas personalizados llamados sombreadores , lo que posibilita técnicas de renderizado más sofisticadas y una mayor flexibilidad. Sin embargo, incluso las canalizaciones modernas basadas en sombreadores no son totalmente programables; las API como OpenGL y Direct3D 12 definen canalizaciones gráficas que combinan etapas de sombreado programables con operaciones de función fija. [ 5 ] [ 6 ]
Referencias
- ↑ Peddie, Dr. Jon. "Chips gráficos famosos: los gráficos profesionales de IBM, el PGC y el 8514/A" . IEEE Computer Society .
- ↑ Kirk, David B.; Hwu, Wen-mei W. (22 de febrero de 2010). Programación de procesadores masivamente paralelos (1.ª ed.). Morgan Kaufmann Publishers . ISBN 978-0123814739.
- ↑ Kirk, David; Hwu, Wen-mei (2013). «Capítulo 2 - Historia de la computación con GPU». Programación de procesadores masivamente paralelos: un enfoque práctico . Elsevier/Morgan Kaufmann. págs. 23–39 . ISBN 978-93-5107-044-3.
- ↑ Kilgariff, Emmett; Fernando, Randima; Pharr, Matt (1 de enero de 2005). GPU Gems 2: Técnicas de programación para gráficos de alto rendimiento y computación de propósito general . Addison-Wesley . ISBN 0-321-33559-7.
- ↑ "Especificación de OpenGL 4.5 (Core Profile)" (PDF) . Grupo Khronos.
- ↑ "Pipelines y sombreadores con Direct3D 12" . Microsoft Learn . Microsoft.
- Renderizado 3D