ソフトウェア'画面→画面'BitBlt高速化GRADDフィルター、r0.0.6

Copyright (c) 2001 Takayuki 'January June' Suwa / Beliefia Productions

0. 目次



1. はじめに

本製品は、非アクセラレーションGRADDでの単純な"画面間"BitBlt操作を加速するGRADDフィルタードライバーです。

GRADD環境下では概略すると、全てのグラフィック描画コマンドは次のような階層化された処理チェーンを通り抜けます:
GRADDクライアント
GRADD VMI(ビデオマネージャーインターフェース)コマンドを使用してグラフィックを描画するプログラムやサブシステム。例えば、OS/2プレゼンテーションマネージャードライバー(GRE2VMAN.DLL)。
GRADDビデオマネージャー
VMAN(VMAN.DLL)と言います。GRADDクライアントから全てのVMIコマンドを受け取り、VHI(ビデオハードウェアインターフェース)コマンドに変換し、そして適切なGRADDビデオドライバーに送ります。
GHIの応答がソフトウェアエミュレーション(GRADDビデオドライバーは何もできなかった)を示していれば、VMANは代わりに汎用ソフトウェアグラフィックエンジン(SOFTDRAW.DLL)を呼び出します。
GRADDビデオドライバー
VHIコマンドを処理する実体です。もちろんビデオハードウェア依存です。
GRADDフィルタードライバーとして、SSSBBACC.DLLはGRADDビデオマネージャーとGRADDビデオドライバーとの間にインストールされ、単純な(しかし決定的に重要な)形式の"画面間"BitBlt GHIコマンドを監視します: 当該コマンドがソフトウェアエミュレーションと反応した場合、SSSBBACCはそれを奪い取り、代わりにSOFTDRAWより高速な独自のブリッターで処理した上でVMANにその完了を報告します。
アセンブラー記述の、MMX及び整数SSEに対応したブリッターは非キャッシュメモリ読み取り及び"write-combine"メモリ書き込みに高度に最適化され、不要かつ極端に遅い外部バスサイクルの発生を出来るだけ抑えるように設計されています。

典型的には、そのような低速のBitBltは1.5〜2.5倍程度高速化されることが期待できます。非アクセラレーションまたはアクセラレーションが貧弱なGHI(例えばGENGRADD、24bppでのM64GRADD、またはINTGRADDなど)の利用者に強くお薦めします。

1.1. 著作権・免責

  1. 本ソフトウェア(SSSBBACC.DLL、及びそのソース)及び付随文書一式(以降、"製品")の著作権は、全てそれらの作成者である諏訪 貴介(すわ たかゆき)及びBeliefia Productionsに帰属します。
  2. 本製品は、提供の時点で作成途上のものであり、将来において機能または外観の変更または削除、及び開発または保守の撤退が予告なしに行われることがあります。
  3. 本製品は、特定物として現存するがままの状態で提供され、商品性および特定目的適合性の保証を含むいかなる明示または黙示の保証も適用されません。
  4. 著作権者は、契約上の責任、もしくは違法行為(過失等を含む)であるとを問わず、本製品の使用によるいかなる損害に関しても、予見の有無を問わず、責任を負いません。
最初に本ソフトウェア(SSSBBACC.DLL)をインストールした時点で、上記の条項に同意したものとみなします。もし、上記条項に同意できない場合は、本製品に含まれるファイルの全てを削除して下さい。

1.2. 動作環境

本ソフトウェアは、以下に準じた環境で動作致します:
注意!!
幾つかのMMX非搭載Pentiumでは、オンチップFPUを使った大量の非キャッシュメモリ読み取りを行うとトラップが発生する問題があることが知られています。
MMX非搭載Pentiumマシンには本ソフトウェアの利用はお薦めできません。

1.3. 連絡先

本製品に関するご質問・お問い合せにつきましては、電子メール
にて受け付け致します。その他の連絡方法についてはご容赦下さい。

1.4. 改訂履歴



2. 使用法


2.1. 収録内容

SSSBBACC.dll
ソフトウェア'画面→画面'BitBlt高速化GRADDフィルター ドライバーファイル
README.htm / READMEJ.htm
この文書
source\*
SSSBBACC.dllのソースコード一式
source\fromIBM\*.H
DDK由来のC/C++ヘッダーファイル

2.2. ドライバーのインストール

  1. お望みの場所に展開して下さい (例: C:\SSSBBACC)
  2. SSSBBACC.DLLをLIBPATHの通った場所にコピーして下さい (例: C:\OS2\DLL)
  3. CONFIG.SYSから下記のような行
    SET C1=GRADD1,GRADD2,GRADD3
    を探して、"SSSBBACC"を追加して下さい。例えば:
    SET C1=GRADD1,GRADD2,GRADD3,SSSBBACC
  4. 任意選択で(すが強く推奨します)、"write-combining"をVRAMに適用して下さい。
  5. システムを再始動して下さい。
  6. 始動ドライブの\OS2\INSTALLディレクトリにあるGRADD.LOGを確認して下さい。正常にインストールされた場合、次のようになります:
    yyyymmddThhmmss VMAN:ProcessGraddList(): Module GRADD1 loaded successfully
    yyyymmddThhmmss VMAN:ProcessGraddList(): Module GRADD2 loaded successfully
    yyyymmddThhmmss VMAN:ProcessGraddList(): Module GRADD3 loaded successfully
    yyyymmddThhmmss VMAN:ProcessGraddList(): Module SSSBBACC loaded successfully

2.3. 設定とか

  1. 既定設定で、SSSBBACC.DLLはMMX及び整数SSEを検出して自動的に利用を試みます:
  2. MMXまたは整数SSEを利用したくない場合、CONFIG.SYSに次の環境変数をダミーの内容付きで設定して下さい:
    SSSBBACC_NOSSEINT
    整数SSEの使用を抑止
    SSSBBACC_NOMMX
    MMXの使用を抑止
  3. 幾つかのMMX搭載CPUでは、汎用FPU整数ブリッターの方が他より速いことがあります。
    整数SSEまたはMMXの使用を無効にして試してみて下さい。

2.4. 使用前後の比較

サンプルケースです (当方開発環境): SysBench "BitBlt S->S Copy"の結果:
ATI Mach64 GRADD [M64GRADD] (病的に遅い、右方向への24bpp画面間BitBlt)
24bpp : 1.501 → 4.358 million pixels/second (2.90倍高速化)
SVGA Generic GRADD [GENGRADD] (完全ソフトウェア処理)
8bpp : 4.616 → 12.586 million pixels/second (2.73倍高速化)
16bpp : 2.548 → 6.281 million pixels/second (2.47倍高速化)
24bpp : 1.471 → 4.184 million pixels/second (2.84倍高速化)


3. クレジット

開発
プログラミング
Takayuki 'January June' Suwa / Beliefia Productions
ドキュメンテーション
Takayuki 'January June' Suwa / Beliefia Productions
Special thanks to
Masaharu 'Densuke' Nagata
WARP4 Developer's Toolkitのライセンスに基づいた複製を快諾して下さりありがとうございます。


Copyright 2001 Takayuki 'January June' Suwa / Beliefia Productions. All rights reserved.
Beliefia Productions and its logo design are trademarks of Beliefia Productions. All rights reserved.
Other copyrighted works (images, musics, programs, and so on), trademarks and servicemarks in this document are owned by their respective owners.

[This document is HTML3.2(Wilbur)-compliant.]