GLSL でレイキャスティング シェーダーを書こうとしていますが、耐えられないほど遅いです。ということで、AMDの「GPU Shader Analyzer」をインストールしたので、実際に何が生成されているのか見てみます。私は 2 FPS から 12 まで持っていますが、それでも素晴らしいとは言えません。
改善できる気がしますが、3 つの点で行き詰っています。
奇妙なアンダースコア: 意味はわかります
ADD R1.x, R0.x, -C6.x
。R0.x から C6.x を減算し、R1.x に格納します。同様にADD R4.x, R1.x, R2.w, R4.x
; R1.x と R2.w を乗算し、R4.x を加算して R4.x に格納します。しかし、時々 のような電話がかかってきて、アンダースコアの意味がわかりません。MUL __, PV16.x, C1.x
末尾の「E」:通常、私の掛け算は に変わります
MUL a, b, c
。でもたまに見かけMUL_e a, b, c
ます。これはSQRT_e
、RSQ_e
およびでも発生しRCP_e
ます。マジック:私は単にこれらの指示を理解していません.
LOOP_DX10 i0 FAIL_JUMP_ADDR(10) VALID_PIX
ループを開始します。しかし、パラメータは何ですか?ALU_BREAK: ADDR(48) CNT(3)
わかりません。SETGT_INT R0.y, 350, R3.y
私の for ループには i < 350 がありますが、他は何ですか?PREDNE_INT __, R0.y, 0.0f
多分私を0に設定しますか?しかし、なぜ浮動小数点 0 なのですか?ALU_PUSH_BEFORE: ADDR(51) CNT(34)
プッシュはスタックを考えさせますか?PREDGT __, R0.x, R3.x
全く分からない。JUMP POP_CNT(1) ADDR(8) VALID_PIX
無条件ジャンプだけどPOP_CNTって何?ALU: ADDR(85) CNT(1)
うわー。BREAK ADDR(9)
9 にジャンプしますか?POP (1) ADDR(8)
スタックからフレームを削除しますか? なぜ8?ENDLOOP i0 PASS_JUMP_ADDR(2)
LOOP_DX10 から始まるループを終了します。CNDE_INT R0.x, R2.z, 0.0f, 1065353216
x = q? a : b ですが、どの変数がどれかわかりません。
誰かがこれらを説明してもらえますか? 最初の 2 つのドキュメントが見つかりません。最後のドキュメントも理解できません。残念ながら、私はこれまでアセンブリを行ったことがありません。