Open3

MiniShade: ベクタシャッフル命令の実装を考える

okuokuokuoku

実装が必要な命令

現状では、4種類の命令が出力されているようだ:

VectorShuffleは OpTypeVectorで宣言されたベクタに作用する。 Compositeはより一般的 で、aggregate(= 構造体と配列)、行列、ベクタのいずれかとなる。

重要な問題として、 これらは可変長命令であるため 簡単な方法でエンコードできない。

okuokuokuoku

手抜きで良さそう

実際に出力される OpCompositeConstruct 等のComposite命令を確認してみると、これらも fvec4 等vectorの型に対してのみの出力となっていた。というわけで、単純に要素間 move に展開して良さそうに見える。

例えば、アセンブリ

             628:    6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 626 43 17
             630:    7(fvec3) CompositeConstruct 628 628 628

float 値の 628 を3つ繰り返した fvec3 を生成するが、この CompositeConstruct は move 命令3つに展開できる。