1

シェーダー モデル 2.0 では、256 個の定数レジスタを使用できます。私はさまざまなシェーダーを見ていて、単一のレジスタを構成するものを理解しようとしていますか?

たとえば、私のインスタンス化シェーダーでは、次の変数が関数の外側で宣言されています。

float4x4 InstanceTransforms[40];
float4 InstanceDiffuses[40];

float4x4 View;
float4x4 Projection;

float3 LightDirection = normalize(float3(-1, -1, -1));
float3 DiffuseLight = 1;
float3 AmbientLight = 0.66; 

float Alpha;

texture Texture;

いくつのレジスターを消費しましたか? それらをどのように数えますか?

4

1 に答える 1

6

各定数レジスタはfloat4.

float3float2およびfloatそれぞれがレジスタ全体を割り当てます。float4x44 つのレジスタを使用します。配列は、割り当てられたレジスタの数に要素の数を掛けるだけです。また、コンパイラーはおそらく、さまざまな計算で定数として使用するために、いくつかのレジスター自体を割り当てます。

シェーダーが何を使用しているかを実際に知る唯一の方法は、シェーダーを逆アセンブルすることです。そのために、少し前に私が尋ねた次の質問に興味があるかもしれません: HLSL: コンパイル時に一定のレジスタ制限を強制する

これも一見の価値があるかもしれません: HLSL: Index to unaligned/packed floats。40 個の配列が 40 個のレジスタを使用する理由と、float代わりに 10 個を使用する方法について説明します。

定数textureレジスタではなく、テクスチャ サンプラー (16 個あります) を使用します。

参考までに、ps_2_0 レジスターvs_2_0 レジスターのリストを以下に示します。

于 2010-08-08T03:18:34.123 に答える