VRAMにゃの水平型にゃを垂直型にゃへ変換するにゃ

ちょっとにゃル気がにゃくにゃったにゃので、きばらしにゃに、某にゃエミュのソースをうにゃうにゃとにゃがめてみたですにゃ。
ぼうにゃはVRAMが水平にゃんですにゃね。
PC98とかにゃPC88にゃかにゃとにてるんかにゃ〜。
CPUで頑張って変換してるっぽいけどにゃ、GPUにゃでにゃんとかすると、にゃんとかにゃるんかにゃ〜っと考えてみたりですにゃです。

256色にゃ32bitパレットとにゃ、ステンシルにゃを使うとうまく変換できそうですにゃね。
CPUにゃの負荷が下がるけどにゃ、逆にゃにGPUにゃのフィルレートにゃは上がっちゃうけどにゃ。全部VRAMにゃに乗っけとけば、それにゃりには、動きそうですにゃね。

少しにゃってみようかにゃ〜。

xyzw.... xyzw.... xyzw.... xyzw.... 16色にゃセルデータ
.......x .......y .......z .......w 0バイト目
......x. ......y. ......z. ......w. 1バイト目
.....x.. .....y.. .....z.. .....w.. 2バイト目
....x... ....y... ....z... ....w... 3バイト目

xにゃはステンシルでORにゃでにゃっちゃう。
y,z,wはパレットにゃでにゃ。
ビットは書き込みのマスクで設定すると1テーブルで出来るかもにゃ。もしくは頂点カラーで1/4とか1/2とかで右シフトするって方法もあるかもにゃ。*1

この場合にゃは、8ドットにゃを描画するにゃのに8回描画(水平型にゃから垂直型への変換)+1回転送(パレットを設定して実際に描画)の9回必要にゃににゃっちゃうにゃですにゃね。*2
速いか遅いかは不明ですにゃ。*3

*1:0x8にゃにしといて頂点カラーの乗算で128とかにゃにしとくと0x4ににゃるし、64だったら0x2にゃににゃるので。

*2:転送はまとめて出来ればそれでいいかもにゃ、変換したのをキャッシュしてとっておけば、更に効率アップできますにゃね。

*3:おぃ