OpenGLでは、複数のプログラム間で同じシェーダーを共有できます。少量のメモリとシェーダーハンドルを保存する以外に、これを行うことでGPU側のパフォーマンス上の利点はありますか?
OpenGLでは、複数のプログラム間で同じシェーダーを共有できます。少量のメモリとシェーダーハンドルを保存する以外に、これを行うことでGPU側のパフォーマンス上の利点はありますか?
回答:
GPU側のパフォーマンスの利点があるとは思わない。
たとえば、汎用シェーダーをプログラムにバインドする場合、効率的な実装により、そのシェーダーとそのプログラム内の他のシェーダーとの間の未使用の属性を削除し、結果としてシェーダーロジックを単純化することができます。もちろん、これは手動で調整されたシェーダーの組み合わせよりも実際的な利点はありませんが、複雑さ/組み合わせを管理し、ドライバーが行う必要のあるコンパイルの数を減らすことができます。
ただし、非効率的なドライバーコンパイラー実装を実現するという点では、これを行うには欠点があります。また、いくつかの実装もあります。http://aras-p.info/blog/2010/09/29/glsl-optimizer/をチェックしてください。いくつかの実装が間違っている可能性があるという単純なことだけです。