次のページ 前のページ 目次へ

8. グラフィック操作時に``雪が降る'' 現象の回避方法

S3 Vision864 チップ搭載のカードでは、S3 チップの動作時に、ピクセルクロッ クとメモリクロック値 MCLK に依存した、自動訂正機能があります。ほとんど のクロックチップでは、この値を読み出すことはできないので(今のと ころ S3 SDAC だけで MLCK 値を読み出せます)、この値は推定するかユーザー が指定しなければなりません(デフォルト値は 60 [MHz])。

XF86Config ファイル用の新しい `s3MCLK' エントリを使って、次 の例のような指定ができます:

 s3MCLK 55
 

このように MCLK に 55 MHz を設定すると雪の量が減るでしょう。ただし、 MCLK の値を小さくすると性能が少し落ちるので、低すぎる値は使用しないで ください(大抵の場合は、きっと 55 か 50 で良いでしょう)。

以下に示すのは、MLCK の概算値(+/- 1〜2 MHz 程度の誤差があります)を 決める際に便利な短いシェルスクリプトです。このスクリプトを実行する前に 次の行を XF86Config ファイルの Device セクションに追加し X ウィン ドウを再起動する必要があります:

 s3MNadjust -31 255
 

このオプション(テストとデバッグ専用です)を使うと、画面がちらついたり雪 が降ったりして悲惨なことになるので、以下のテスト用スクリプトを実行した らすぐにこのオプションを取り除かなければなりません。

このスクリプトを実行すると、xbench や x11perf が実行され、MLCK 値を決 めるためのテストが実行されます。この結果は MHz 単位で表示されます。4 つのテストが実行されるので、推定値は 4 つまで得られます(最初の値が 最も正確でしょう)。


#!/bin/sh

exec 2> /dev/null

scale=2

calc() {
  m=`awk 'BEGIN{printf "%.'$scale'f\n",'"( $1 + $2 ) / $3; exit}" `
  [ -z "$m" ] && m=` echo "scale=$scale; ( $1 + $2 ) / $3" | bc `
  [ -z "$m" ] && m=` echo "$scale $1 $2 + $3 / pq" | dc `
  echo $m
}

run_xbench() { 
  r=` ( echo 1; echo 2; echo 3; echo 4 ) | xbench -only $1 | grep rate `
  [ -z "$r" ] && return
  cp="$2 $3"
  set $r
  calc $3 $cp
}  

run_x11perf() {
  r=` x11perf $1 | grep trep | tr '(/)' '   ' `
  [ -z "$r" ] && return
  cp="$2 $3"
  set $r
  calc `calc 1000 0 $4` $cp    
}

run_x11perf "-rect500 -rop GXxor"     3.86  5.53  #  0 1  #    4.11    5.52  #
run_xbench invrects500                4.63  5.48  #  0 1  #    4.69    5.48  #

run_x11perf "-rect500 -rop GXcopy"  -16.42 13.90  #  0 1  #  -14.99   13.88  #
run_xbench fillrects500              -7.81 13.57  #  0 1  #   -8.53   13.58  #

exit


次のページ 前のページ 目次へ