[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 2280] test022.
こんにちは、川合です。
部分flushの使い方を説明した、test022をベータリリースしました。
test022はmt_xor0(旧test012)を部分flushに対応させて、flushする
範囲を少なくしたものです。
マシン / CPU : グラフィック mt_xor0 test017 test022
1.AT/Duron 690MHz : nVIDIA RIVA128 0.119% 0.077% 0.115%
2.AT/Cyrix6x68 150MHz(PR200+) : S3 ViRGE 0.231% 0.225% 0.204%
3.TOWNS/i486SX 20MHz : 標準VRAM 512KB 1.27 % 2.38 % 1.21 %
mt_xor0 : 工夫のないflush (4800dots)
test017 : 差分flush
test022 : 部分flush (3600dots)
以上によってmt_xor0に対して確実に効果があることが分かります。
この例ではDuronでtest017の方が負荷が小さくなっていますが、これは
領域内でも変化しないドットが多いためです(しかもDuronならこの程
度の差分計算をキャッシュ内で済ませることができるのでしょう)。
---
仮に、512x256の画面内で、32x32のキャラクターが30個くらい動いて
いるとします。ゲームなどではありうる状況でしょう。
もしこれを普通にflushしたら、256x512=128Kドットの描画が必要で
す。しかし部分flushなら2x30x32x32(最初の2は消去と描画があるから
です)=60Kドット程度で済みます。
差分flushの場合、転送が60Kドットで済むことを128KBの2つのバッフ
ァを比較することでシステムは認識しますが、部分flushの場合はそう
いう判断をする必要はないのでその分高速になります。
またキャラクター移動は一度に8ドット未満の移動しかしないかもし
れません。そうであれば、消去のための32x32の範囲と描画のための32x
32の範囲はかなりオーバーラップしていることになります。この2つの
正方形をすっぽり含むような長方形を対象に部分flushすることで、2回
の部分flushを1度にまとめることができるでしょう。
この場合32x32x2=2Kドットに対して40x40=1.6Kドットなので、描画ド
ット数を2割以上削減することができます。キャラクターの大きさの割
に動きの遅いキャラクターには有効ではないかと考えています。
この部分flushによって、BM.BINの負荷がどの程度改善されるのかた
いへん興味があるのですが、Solidさんはお忙しいようですしソースも
ないので、ちょっと分かりません(BMの場合は、星の問題もあります
ね・・・星の消去、描画に関してはtrevize1, estoril1をお待ちくだ
さい)。
それでは。
--
川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/