2

PowerVRは言う

lowpベクトルのコンポーネントをスウィズリングすることはコストがかかるため、避ける必要があります。

スウィズリングとは正確には何ですか?

color.brg  // This fits the definition I'm familiar with.

しかし、がvec4の場合vec3(color.b, color.r, color.g)、またははどうでしょうか。vec3(color)

単一のコンポーネントにアクセスまたは変更することは、スウィズルを構成しますか?私は本当にそうは思いませんが、そうでない場合は、手動でさらにいくつかの代入操作を行うだけで、スウィズリングを回避できます。私はそれを行うのに問題はありませんが、スウィズル表記なしでコードを書くだけで同じ効果をより速い速度で得ることができれば、それは私には魔法のように思えます。

4

2 に答える 2

3

GLSL仕様によれば、「スウィズルマスク」は、ベクトルタイプのコンポーネントフィールドセレクターとして定義されています。または.brgのように、スウィズルマスクです。それらのすべてはスウィズリングを行います。.rgba.b

PowerVRが話していることに関しては、それは彼ら次第です。.rgb同じ順序でコンポーネントを選択するので、おそらく問題ありません。または多分そうではありません。

于 2011-08-31T02:46:16.280 に答える
2

lowp ベクトルのコンポーネントのスウィズリングはコストがかかるため、避ける必要があります。

lowp ベクトルはチャネルごとに 8 ビット フローティングです。Powervr についてはわかりませんが、一般的に言えば、フローティング 32 ビット レジスタ (またはアーキテクチャによっては 16 ビット) 間で移動データを転送する方が、フローティング 8 ビットよりも効率的です。 、追加のマスキン/移動命令を必要としないためです。ほとんどの GPU メモリはそのように配置されています。

スウィズリングとは正確には何ですか?

簡単に言えば、

swizzle は、ソースのどのチャネル (またはソースの組み合わせ) が宛先のどのチャネルに入る必要があるかを示します

例:

vec3 dest.rgb = vec3(src1.r, src2.r, src3.r);

src1.r チャネルを dest.r チャネルに、src2.r チャネルを dest.g チャネルに、src3.r チャネルを dest.b チャネルに移動します。

スウィズルを使用すると、手動でチャネルを移動するよりも効率的です。これは、GPU がハードウェアでサポートしているためです (GPU コンパイラの中には、それを検出して移動を最適化できるものもあります)。

于 2014-04-04T12:21:42.313 に答える