Radeon HD 3850を搭載したラップトップ用にゲームのレンダラーを調整しています。このチップはかなりの処理能力を備えていますが、メモリ帯域幅が限られているため、より多くのシェーダー作業をより少ないパスに移動しようとしています。
以前は、単純なマルチパスモデルを使用していました。
-
FP16ブレンドバッファーをバインドしてクリアします(デプスバッファー付き)
- 深度のみのパス
- ライトごとに、追加のライトパスを実行します
-
バックバッファをバインドし、テクスチャとしてブレンドバッファを使用します
- トーンマッピングパス
このメソッドのパフォーマンスを向上させるために、ライトの数とタイプをカウントしてカスタムGLSLシェーダーを動的に構築する新しいレンダリングパスを作成しました。これらのシェーダーは、すべてのライトパラメーターをユニフォームとして受け入れ、すべてのライティングを1回のパスで実行します。なんらかの限界にぶつかると思っていたので、まずは1灯でテストしました。それから3つ。次に21で、エラーやアーティファクトがなく、優れたパフォーマンスを発揮します。これは私の実際の質問につながります:
ユニフォームの最大数は取得できますか?
この方法は古いハードウェアで実行可能ですか、それともユニフォームははるかに制限されていますか?
押しすぎると、どの時点でエラーが発生しますか?シェーダーのコンパイル?プログラムのリンク?プログラムを使用していますか?