[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/