2010年11月1日 星期一

撰寫程式來讓 PS3 顯示 BMP 圖 (VMX 篇)。

記得之前有關 libfreevec 的文章吧?
若不記得,請翻閱 Shady 之前的文章。

這次並不是像之前一樣,
VMX 只是約略簡介而已,
這次 Shady 要講解在"撰寫程式來讓 PS3 顯示 BMP 圖 (程式篇)。"中,
有使用的VMX指令。
這次要介紹的 VMX 指令是 vec_perm,其使用詳細請行如下:

#include< altivec.h >
vector unsigned char va, vb, vc, vd;
vd = vec_perm(va, vb, vc);

它的實際運作如下:

若 va = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
而 vb = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16},
且 vc = {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, 5, 21, 6, 22, 7, 23},
所以 vd 的結果會是 {0, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, 7, 0, 8}。

為何如此,解釋如下:

內容:va va va va ... va va va va, vb vb vb vb ... vb vb vb vb
位置:00 01 02 03 ... 12 13 14 15, 16 17 18 19 ... 28 29 30 31
以上是 va 和 vb 之內容與位置對應的表示圖,
所以 vc 的內容是 va 和 vb 之內容所對應的位置,
也就是說 vc 代表為索引用的變數。
因此這個範例之結果為 vd 的第一元素為 va 第一元素,
而 vd 第二元素為 vb 第一元素,
再來 vd 第三元素為 va 第二元素...之後以此類推。
vc 的每個元素的索引值範圍為 0 ~ 31,不能低於 0,也不能高於 31。

OK!Shady 就只介紹這個 VMX 指令,
其它指令請參考此處(小心,當中有些指令是 Cell 的 PPU 所沒有的)。

為什麼 Shady 只介紹 vec_perm 呢?
因為 BMP 的顏色保存順序為 alpha、藍、綠、紅,
所以 Shady 才會才用 vec_perm 來搬運資料,
以至於顏色會對應成 PS3 的 FB 的 alpha、紅、綠、藍順序。

下一篇就是"程式篇"了。

沒有留言:

張貼留言