Open3

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

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つに展開できる。