FC2ブログ
東方移植計画
PSPのプログラミングとかが全く解らない初心者が
多くの人に愛される弾幕系シューティングゲームをPSPに移植してみる試み。
                      ------Last update 7/15(記事以外)------
スポンサーサイト
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
画像がsliceしたりswizzleしたり
もう6月も終わりですね。早いものです。

どうやらそろそろ200HIT行きそうです。ありがとうございます。

/*
7/1追記:遂に200HIT行きました。皆様本当にありがとうございます。
*/

今回はPSPのプログラミングをするにあたって必須らしい ←よくわかってない

slice
swizzleメモ話です。
さて、まずsliceの方からメモっておきましょう。

sliceは、GPUのキャッシュをなるたけ有効利用するための機能だそうです。

具体的に言うと、画像を32だか64bit毎に縦に切って描画するという方法を取るそうです。

一体何のこっちゃ・・・と思いますが、仕方なくググって見ることに。

・・・pspsdk/psp/sdk/samples/gu/blitのサンプルコードが使えるそうです。

それで、なーぜ遅くなるかというと、どうやらキャッシュミスを起こしてうんたらかんたらだとか。

キャッシュの量が足りなくなるのかしらん?

まあ、それは知らなくても何とかなりそうなので横に置いておいて、

簡単にまとめると、これを使えば画像描画が早くなる!らしいです。少なくとも私はそう解釈しました。

次にswizzleです。こっちは辞書引いても見当違いのが・・・

因みに辞書では、スウィズルとかいうカクテルが出てきました。

さて、例によってgoogle先生にお願いしてみます。

・・・その前に、さっきのサンプルプログラムにsizzleってのが有った気が・・・

同じ物?別の物?

・・・なんかどっちにしても同じ検索結果が出てきたからどうでもいいや。

さて、気を取り直してswizzleっちゅーのは、メモリの並び替えをしてくれるそうです。

つまり、pspのGuにとって都合の良い形式の事を「swizzle」と呼ぶそうです。

こっちも画像描画が早くなる!らしいです。再び私はそう解釈しました。

というわけで、こんな感じっぽいです。(どんな感じやら

結局の所、やっときゃ描画はやくなっからやっとけよ兄ちゃん!ってことですね。



・・・いったいいつ完成する事やら。
スポンサーサイト




コメント
▼この記事へのコメント<(あれば表示)
ちなみにDXPを使う場合はsliceもswizzleも内部で自動的に行う仕様だったりします。
2009/06/30(火) 22:33:29 | URL | by憂煉 (#-) [ 編集]
早速のコメントありがとうございます。
DXPヘッダファイルは一通り読んだので一応大丈夫ですよ^^
しかしDXPを使わずにswizzle等する方法が解らないという^^;
まだまだ勉強が必要ですね・・・
2009/07/01(水) 17:29:50 | URL | by紅黒 (#-) [ 編集]
blit.cというサンプルにあるswizzle_fast関数をそのまま自分のソースにコピペして使うのが手っ取り早いです。
swizzle_fast(出力先, 入力元, テクスチャの幅*1ピクセルを表すのに必要なサイズ, 高さ);
という感じで実行させれば出力先に勝手に吐いてくれます。
出力先は前もってmallocなどで確保してください。
第3引数は、幅が512の32bitテクスチャーなら512*4、幅が256の16bitテクスチャーなら256*2という感じになります。
8bitパレットはそのままで、4bitパレットは1/2だったかな?
まだ32bitしか使ったことないのでわかりません^^;
高さは8の倍数にする必要があります。
あとはsceGuTexModeの第4引数にGU_TRUEか1を指定するだけでswizzleされたテクスチャーが使えるようになります。

sliceもそのままコピペして使えますね。
幅を32pixで切るのは32bit時で、16bitなどでは64pixとかにすると早くなるっぽいです。
speed.cというサンプルで色々試せます。

両方合わせると、とてつもなく描画が早くなります。
VRAMにテクスチャーをおいた場合はswizzleしない方が早くなるので、弾画像なんかはそのままVRAMに置いてsliceすると良いです。
パレットの場合はswizzleした方が早かったと思います。
まだ試してませんが、swizzleしたパレットをVRAMに置いてsliceで弾を描画したらとてつもないことになりそうですw
2009/07/02(木) 05:55:49 | URL | by七次元 (#sGvNOJjo) [ 編集]
swizzle済みのデータを元に戻したい場合はDXPのソース内にあるunswizzle_fast関数をコピペすればできます。…いらないかw
VRAMでswizzleをするか否かは画像のフォーマットやサイズに左右されるっぽいので試行錯誤してみてください。
あと、malloc関数だとメモリアラインメントが取れないのでmemalign関数がオススメです。
2009/07/02(木) 14:33:49 | URL | by憂煉 (#-) [ 編集]
mallocでは自動で16byteにアライメントされるので、自分はそのままゴリゴリ使ってますね。
まあ、最初はmemalignの存在を知らなかっただけなんですが^^;
2009/07/02(木) 16:11:14 | URL | by七次元 (#sGvNOJjo) [ 編集]
あれ、mallocは8byteアラインメントだったような・・・
とか思って調べたらちゃんと16byteアラインメントになってましたw

あああ・・・DXP開発初期にmemalignの存在知らなくて強引にアラインメント取るアルゴリズム作ってた私はなんだったんだorz
2009/07/02(木) 19:56:57 | URL | by憂煉 (#-) [ 編集]
皆さん、超ためになるコメントありがとうございますm(_ _)m
基本、サンプルの継ぎ接ぎで何とかなりそうな気がしてきました^^;
しかし標準ライブラリ?にも使える関数が沢山あるんですねー^^;

なんか突然アクセス数が増えた・・・と思ったら憂煉様のブログからリンクして頂いたようで。
どうもありがとうございますm(_ _)m
2009/07/02(木) 21:28:12 | URL | by紅黒 (#-) [ 編集]
自分のは基本的にはサンプルを改造したものを使ってます。
GUの使い方がさっぱりなんでほとんどコピペ状態ですね^^;
確か、妖々夢の人もサンプルのを流用していたと思います。

最初にリンク貼ろうと思ってたけど、俺のところから変な人が流れてくると困るのでリンク貼らなかったとか言い訳してみる^^;
今回、本当に私がターゲットにされてたので貼らないで正解だったようです。
2009/07/03(金) 02:32:10 | URL | by七次元 (#sGvNOJjo) [ 編集]
そうなんですかー。
サンプルを残していった先人様達は偉大ですね・・・w

リンクの件は全然気にしてませんよ^^
まだ何も形として出していないどころか助言を頂いているだけなので^^;
2009/07/03(金) 16:12:34 | URL | by紅黒 (#-) [ 編集]

■ コメントを投稿する
URL:
Comment:
Pass:
秘密: 管理者にだけ表示を許可する
 
トラックバック
この記事のトラックバックURL

▼この記事へのトラックバック(あれば表示)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。