OpenGL le permite compartir el mismo sombreador entre múltiples programas. Además de ahorrar pequeñas cantidades de memoria y un controlador de sombreador, ¿hay algún beneficio de rendimiento del lado de la GPU para hacer esto?
OpenGL le permite compartir el mismo sombreador entre múltiples programas. Además de ahorrar pequeñas cantidades de memoria y un controlador de sombreador, ¿hay algún beneficio de rendimiento del lado de la GPU para hacer esto?
Dudo que haya un beneficio de rendimiento del lado de la GPU.
Cuando vincula un sombreador genérico a un programa, por ejemplo, una implementación eficiente debería poder eliminar los atributos no utilizados entre ese sombreador y los otros sombreadores en ese programa y posiblemente incluso simplificar la lógica del sombreador como resultado. Por supuesto, esto no es un beneficio real sobre una combinación de sombreadores ajustados a mano, pero ayuda a administrar la complejidad / combinatoria y posiblemente reduce la cantidad de compilaciones que el controlador tiene que hacer.
Sin embargo, puede haber inconvenientes para hacer esto en términos de golpear implementaciones ineficientes del compilador del controlador. Y hay algunos por ahí, consulte: http://aras-p.info/blog/2010/09/29/glsl-optimizer/ para ver algunas cosas simples que algunas implementaciones pueden equivocarse.