1

新しい3DAPI(D3D11など)で固定関数ブレンディングモードをまだ使用している理由を理解しようとして、私は座礁していました。D3D10では、シェーダーを使用するために、固定機能のAlphaClippingが削除されました。理由は、ほとんどすべての状況に対してはるかに強力なアプローチだからです。

では、なぜブレンド操作(現在レンダリングしているRenderTargetからのテクスチャサンプル)を計算または所有できないのでしょうか?ビデオカードパイプラインに、これを実現するのを困難にするハードウェア設計の問題がありますか?

これが役立つ理由は、屈折オブジェクトオーバーレイごとに2つのrenderTarget間を行き来する必要がないため、屈折シェーダーをより高速に実行できるようにすることができるためです。OSまたはゲームUI用の屈折ウィンドウシステムなど。

D3D12でこれを見たいので、これはディスカッションフォーラムではないので、このようなアイデアを提案するのに最適な場所はどこでしょうか。または、これはD3D11ですでに可能ですか?

4

2 に答える 2

3

では、なぜブレンド操作を計算したり所有したりできないのでしょうか。

誰があなたができないと言いますか?shader_image_load_store(および同等のD3D11)を使用すると、画像で必要なほとんどすべてのことを実行できます。ルールに従っていることを条件とします。その最後の部分は、一般的に人々をつまずかせるものです。シェーダーで完全な読み取り/変更/書き込みを実行して、後のフラグメントシェーダーの呼び出しで間違った値が読み取られないようにすることは、最も一般的なケースではほとんど不可能です。レンダリングされた各オブジェクトはそれ自体とオーバーラップしないと言って制限する必要があります。また、レンダリングされたオブジェクトの間にメモリバリアを挿入する必要があります(他のレンダリングされたオブジェクトとオーバーラップする可能性があります)。または、リンクリストアプローチを使用します。

しかし、要点はこれです。これらのメカニズムを使用すると、シェーダーでブレンディングを実装するだけでなく、順序に依存しない透過性を(リンクリストを介して)実装します。あなたが今やりたいことをするのを妨げるものは何もありません。

もちろん、パフォーマンス以外は何もありません。固定機能ブレンダーは、フラグメントシェーダー操作と並行して実行できるため、常に高速になります。ブレンディングユニットはフラグメントシェーダーとは別のハードウェアであるため、フラグメントシェーダー操作を同時に実行しながらブレンディング操作を実行できます(明らかに、ブレンドされるフラグメントではなく、後のフラグメントから)。

ブレンドハードウェアの読み取り/変更/書き込みメカニズムは、ブレンド専用に設計されていますが、image_load_storeはより一般的なメカニズムです。また、ジェネリックはハードウェアの進化の長期的には特定のものを上回る可能性がありますが、当面および近い将来、固定機能のブレンディングは、パフォーマンスの面で毎回image_load_storeブレンディングを上回ることが期待できます。

必要な場合にのみ使用してください。そして、それでも、本当に本当に必要かどうかを判断します。

于 2012-05-21T22:30:43.260 に答える
1

ビデオカードパイプラインに、これを実現するのを困難にするハードウェア設計の問題がありますか?

はい、これは実際に当てはまります。フラグメントシェーダーでブレンディングを行うことができれば、フィードバックループが発生する可能性があり、これは非常に複雑になります。ブレンディングは、パフォーマンスと並列化の理由から、別のハードワイヤードステージで行われます。

于 2012-05-21T22:16:15.893 に答える