Así que me estoy enseñando GLSL y estoy tratando de descubrir por qué se supone que es más rápido que la tubería de función fija.
La razón por la que tengo un problema es que, según tengo entendido, los sombreadores que crea están reemplazando secciones de la tubería que estaban allí antes. Entonces, ¿cómo es que simplemente proporcionar su propia versión acelera las cosas?
Lo único que puedo pensar es que si intentaste decir tu propia ecuación de iluminación antes, tendrías que hacer el cálculo en la CPU, pero ahora puedes hacer los cálculos en la GPU que serán más rápidos.
¿Estoy entendiendo esto correctamente?
Respuestas:
Los sombreadores que cree no serán su propia versión de canalización de función fija (FFP), sino una operación personalizada de manipulación de vértices y píxeles para lograr algo interesante y complejo.
Muchas de las cosas que hace a través de una tubería programable (PP) funcionarán más rápido que sus posibles implementaciones de FFP, porque PP reduce la cantidad de pasadas o la cantidad de combinación y magia de mapa de cubos requerida para representar estas cosas hipotéticas en FFP.
Imagine implementar algo tan común como la iluminación por píxel en FFP con solo datos de vértice interpolados y textura de muestra en sus manos. Ni siquiera es posible hacerlo "honestamente", solo piratea para casos especiales dependiendo de mapas de cubos precalculados fieles y algunas mezclas serias. Con PP, se trata de colorear un producto de punto entre la dirección de la luz y el vértice normal.
Con todo, PP convierte lento e imposible en rápido y posible. Pero si decide escribir un sombreador para implementar los mismos algoritmos utilizados en FFP, descubrirá que FFP será un poco más rápido porque está muy optimizado para hardware.
fuente
En términos teóricos, la tubería programable es más lenta que la tubería de función fija. Ningún procesador de propósito general puede competir con un procesador de casos especiales. La tubería de función fija original era poco más que un montón de puertas lógicas en una línea que es lo más rápido posible teóricamente.
Sin embargo, en estos días la tubería programable es la norma. Por lo tanto, el hardware está orientado hacia la tubería programable. Habiendo perdido las eficiencias iniciales de tener un circuito creado específicamente para un determinado flujo de datos, debe adaptarse al caso más común, que es el enfoque basado en sombreador. Sin embargo, para las opciones de compatibilidad con versiones anteriores, la canalización de funciones fijas todavía está disponible, pero el costo es que las funciones fijas antiguas deben ser transferidas a sombreadores, lo que puede incurrir en un costo. Esto explicaría la diferencia de rendimiento.
fuente
La razón principal por la que podría pensar es una fase en la tubería fija, que su programa no lo necesita. por ejemplo, imagina un juego donde todas las luces son estáticas, puedes implementar fácilmente un sombreador que ni siquiera intente calcular la luz dinámica. en este caso, el sombreador funciona más rápido que un sombreador precompilado que verifica algunas ecuaciones para la luz dinámica (un sombreador de uso general). También hay otros ejemplos, puede pensar fácilmente en muchos aspectos que deberían considerarse para una tubería fija, pero puede ignorar la implementación en sus propios códigos GLSL.
fuente
Eso es exactamente, sus sombreadores están reemplazando partes de la tubería. Pero a menudo sus sombreadores están especializados en un efecto específico que desea lograr y no manejan todas las características especiales posibles que podrían activarse, por lo tanto, son más simples que un sombreador que emula la canalización completa de funciones fijas. Mientras que la ruta de función fija debe tener en cuenta muchas cosas y características de OpenGL que quizás no desee usar (o que ni siquiera haya escuchado).
Y los días en que se realizó la función fija en un hardware especial (opuesto a un hardware totalmente programable) han terminado, lo que probablemente sucede cuando usa la tubería de función fija es que su controlador solo carga sus propios sombreadores especiales que implementan rutas de función fija. Pero estos pueden ser muy complejos, para proporcionar todas y cada una de las características que ofrece la tubería de función fija.
fuente