citro3dを学ぶ #1 GPUのShader命令

完全に備忘録です。#1とありますが順番になっているわけではありません。内容はバラバラです。そもそも#2をかくかどうかすらわかりません。
今回はShader命令について書いていきます。オペランドの指定の仕方などはある程度はわかることを前提とします。



目次:

DP4

dp4 r0, r1, r2

一番出てくる。Dot Product 4-componentの略。四次元ベクトルの内積を計算します。ちなみにDot Productは内積という意味。
例: r0 = r1 ・r2

DP3

dp3 r0, r1, r2

dp4の三次元バージョン。三次元ベクトルの内積を計算する。
例: r0 = r1 ・r2

MOV

mov r0, r1

みんな大好きARMでお馴染みのmov命令!値コピー。
例: r0 = r1

RCP

rcp r0, r1

最初の要素の逆数を計算し、各要素に格納する。
例: r0[0 ~ n] = 1/r1.x

RSQ

rsq r0, r1

最初の要素の平方根の逆数を計算し、各要素に格納する。
例: r0[0 ~ n] =1/√r1.x

MUL

mul r0, r1, r2

ベクトルの各要素ごとで乗算をする。
例: r1(1, 2, 3, 4) * r2(0.1, 0.2, 0.3, 0.4) = r0(0.1, 0.4, 0.9, 1.6)

ADD

add r0, r1, r2

ベクトルの各要素ごとで加算をする。
例: r1(1, 2, 3, 4) + r2(0.1, 0.2, 0.3, 0.4) = r0(1.1, 2.2, 3.3, 4.4)

MAX

max r0, r1, r2

ベクトルの各要素ごとで最大値をとる。
例: r1(1.2, 4.9, 3.0, 2.5), r2(1.8, 3.4, 0.3, 2.5) -> r0(1.8, 4.9, 3.0, 2.5)

MIN

min r0, r1, r2

ベクトルの各要素ごとで最小値をとる。
例: r1(1.2, 0.9, 0, 0.5), r2(1.8, 3.4, 0.3, 0.5) -> r0(1.2, 0.3, 0, 0.5)

MAD

mad r0, r1, r2, r3

2つのベクトルを乗算して、4つ目のベクトルを加算する。
例: r0 = r1 * r2 + r3

おまけ

VSCodeを使っている場合は、pica200という拡張機能をインストールすることで、Shaderファイルが見やすくなるのでおすすめです。



よく使うものだけを紹介したので全てではありませんが、これだけでも理解すればだいぶ読めると思います。
数学の知識が少しいりますね。それでは。