(57)【特許請求の範囲】
【請求項１】
グラフィクスコマンドを出力する発生器、
キャッシュ／コマンドプロセサと表示のためのポリゴンを変換しかつラスタライズするパイプライングラフィクスコンポーネンツとを有するグラフィクスハードウェアを含み、発生器によって出力されたグラフィクスコマンドを消費する消費器、および
発生器および消費器に結合される共用記憶装置を備え、
この共用記憶装置はその中に割り付けられた複数のバッファを含み、複数のバッファの各々は消費器への分配のために、発生器によって出力されたグラフィクスコマンドを受けかつ一時的にストアし、前記コマンドの少なくとも幾つかはポリゴン頂点コマンドを含み、発生器および消費器は他とは独立して各バッファにアクセスでき、
前記バッファは、前記グラフィクスハードウェアによる実行のためのポリゴン頂点コマンドを含む別のグラフィクスコマンドを含みかつ前記共用記憶装置のどこかにストアされている表示リストをコールするインラインコマンドをストアし、
前記ポリゴン頂点コマンドは前記パイプライングラフィクスコンポーネンツに与えられ、前記パイプライングラフィクスコンポーネンツは前記ポリゴン頂点コマンドに少なくとも部分的に基づいて画像を発生する、３Ｄグラフィクスシステム。
【請求項２】
発生器および消費器は独立したリードおよび／またはライトポインタを有する、請求項１記載の３Ｄグラフィクスシステム。
【請求項３】
消費器は発生器がアクティブなバッファへ書き込んだことに応答して消費器ライトポインタを選択的にインクリメントする、請求項２記載の３Ｄグラフィクスシステム。
【請求項４】
消費器は、その消費器がアクティブなバッファから読み出すことに応じて消費器リードポインタをインクリメントし、そのインクリメントした消費器リードポインタが消費器ライトポインタと所定の関係を有するとき、アクティブなバッファからの読出を中断する、請求項３記載の３Ｄグラフィクスシステム。
【請求項５】
共用記憶装置は、その共用記憶装置内の選択した場所に配置された複数の可変サイズバッファをストアする、請求項１記載の３Ｄグラフィクスシステム。
【請求項６】
共用記憶装置は各々が発生器および／または消費器によって独立してアクセスされ得る複数のバッファをストアする、請求項１記載の３Ｄグラフィクスシステム。
【請求項７】
消費器は、複数のバッファの少なくともアクティブな１つへ書き込みすることができないが、その複数のバッファの少なくとも前記アクティブな１つのためのライトポインタを、発生器とは独立して、維持する、請求項６記載の３Ｄグラフィクスシステム。
【請求項８】
発生器は前記複数のバッファの第１のバッファに関連する発生器リードポインタおよび発生器ライトポインタを与え、消費器は前記複数バッファの第１のバッファに関連する消費器リードポインタおよび消費器ライトポインタを独立して維持する、請求項６記載の３Ｄグラフィクスシステム。
【請求項９】
複数のバッファの第１のバッファは、発生器が共用記憶装置内のどこかへストアした表示リストを消費させかつどこかにストアされたその表示リストを消費した後にはその第１バッファからのグラフィクスコマンドの消費を再開させるように、消費器を制御するリードコマンドを含む、請求項６記載の３Ｄグラフィクスシステム。
【請求項１０】
リードコマンドは、表示リストの開始アドレスと長さとを特定し、その特定した開始アドレスで始まる特定した長さの表示リストを読み出すように消費器を制御する、請求項９記載の３Ｄグラフィクスシステム。
【請求項１１】
バッファの少なくとも１つは循環的な先入れ先出し（ＦＩＦＯ）アクセスを与える、請求項１記載の３Ｄグラフィクスシステム。
【請求項１２】
バッファの少なくとも１つは先入れ先出し（ＦＩＦＯ）アクセスを与える、請求項１記載の３Ｄグラフィクスシステム。
【請求項１３】
バッファの少なくとも１つは発生器および消費器の両方へ同時に選択的に付属され得る、請求項１記載の３Ｄグラフィクスシステム。
【請求項１４】
バッファの少なくとも１つは発生器に付属され、別のバッファが消費器に付属される、請求項１記載の３Ｄグラフィクスシステム。
【請求項１５】
バッファの少なくとも１つはまず発生器に付属され、次いで、発生器から離されかつ消費器に付属される、請求項１記載の３Ｄグラフィクスシステム。
【請求項１６】
バッファの少なくとも１つは発生器、消費器、またはその両方へ付属され得る、請求項１記載の３Ｄグラフィクスシステム。
【請求項１７】
複数のバッファの１つだけが一度に発生器に付属される、請求項１記載のグラフィクスシステム。
【請求項１８】
複数のバッファの１つだけが一度に消費器に付属される、請求項１記載の３Ｄグラフィクスシステム。
【請求項１９】
バッファの各々は１６Ｋバイトの最大サイズを有する、請求項１記載の３Ｄグラフィクスシステム。
【請求項２０】
発生器はバッファのサイズをセットする、請求項１記載の３Ｄグラフィクスシステム。
【請求項２１】
バッファの少なくとも１つはグラフィクスコマンドのフレームをストアするために動的にサイズを決められる、請求項１記載の３Ｄグラフィクスシステム。
【請求項２２】
発生器は、バッファ開始アドレスおよびバッファ長を特定するグラフィクスバッファ初期化コマンドを発行することによって複数のバッファを宣言する、請求項１記載の３Ｄグラフィクスシステム。
【請求項２３】
バッファの少なくとも１つは３２バイトの倍数である長さを有しかつ６４Ｋバイトの最小サイズを有する、請求項１記載の３Ｄグラフィクスシステム。
【請求項２４】
発生器はバッファの少なくとも１つに中断点を書き込み、消費器はその中断点への遭遇に応じてグラフィクスコマンドの消費を中断する、請求項１記載の３Ｄグラフィクスシステム。
【請求項２５】
バッファの少なくとも１つは、発生器がバッファ内の位置に上書きしたときを示すオーバフローステータス表示器を有する、請求項１記載の３Ｄグラフィクスシステム。
【請求項２６】
さらに、バッファの少なくとも１つのステータスを示すハードウェアステータスレジスタを備える、請求項１記載の３Ｄグラフィクスシステム。
【請求項２７】
ステータスレジスタは、バッファフルおよびバッファエンプティに関連する発生器ライトポインタの位置；バッファオーバフロー；発生器が現在少なくとも１つのバッファへ書き込んでいるかどうか；および消費器が現在少なくとも１つのバッファから読み出しているかどうかのパラメータを含む、請求項２６記載の３Ｄグラフィクスシステム。
【請求項２８】
さらに、複数のバッファの少なくとも１つに結合され、書込が読出を追い越すのを防止するために、フロー制御ロジックを与えるハードウェアコントローラを備える、請求項１記載の３Ｄグラフィクスシステム。
【請求項２９】
さらに、バッファの少なくとも１つに結合され、リードおよびライトポインタを最後の位置から最初の位置へラップするハードウェアコントローラを備える、請求項１記載の３Ｄグラフィクスシステム。
【請求項３０】
発生器は共用記憶装置内において前記バッファを動的に割り付ける、請求項１記載の３Ｄグラフィクスシステム。
【請求項３１】
発生器および消費器で共用される記憶装置、
前記共用記憶装置内に割り付けられ、グラフィクスコマンドを受けかつ一時的にストアする記憶バッファ、
前記バッファ内へグラフィクスコマンドを書き込み、バッファに関連する発生器ライトポインタおよび発生器リードポインタを維持する発生器、および
キャッシュ／コマンドプロセサと表示のためのポリゴンを変換しかつラスタライズするパイプライングラフィクスコンポーネンツとを有するグラフィクスハードウェアを含み、発生器ライトポインタとは独立した消費器ライトポインタおよび発生器リードポインタとは独立した消費器リードポインタを維持し、バッファ内にストアされているグラフィクスコマンドを消費する消費器を備え、
前記バッファは前記消費器による実行のために共用記憶装置のどこかにストアされている表示コマンドリストをコールするインラインコマンドをストアし、前記表示コマンドリストは表示のためのポリゴンを引き出すために前記パイプライングラフィクスコンポーネンツを制御するポリゴン頂点コマンドを含む、３Ｄグラフィクスシステム。
【請求項３２】
消費器は消費器がバッファから消費するたび毎に消費器リードポインタをインクリメントし、消費器リードポインタが消費器ライトポインタと所定の関係を有するときバッファからの消費を中断する、請求項３１記載の３Ｄグラフィクスシステム。
【請求項３３】
消費器は発生器がバッファへ書込を行ったことに応答して消費器ライトポインタを選択的に自動インクリメントする、請求項３１記載の３Ｄグラフィクスシステム。
【請求項３４】
グラフィクスコマンドを受けかつ一時的にストアするバッファ、
前記バッファ内へグラフィクスコマンドを書き込み、バッファに関連する発生器ライトポインタおよび発生器リードポインタを維持する発生器、および
発生器ライトポインタとは独立した消費器ライトポインタおよび発生器リードポインタとは独立した消費器リードポインタを維持し、バッファ内にストアされているグラフィクスコマンドを消費する消費器を備え、
発生器は、消費器が発生器のバッファへの書込に応答して消費器ライトポインタを自動インクリメントすべきかどうかを特定する構成コマンドを消費器に送る、グラフィクスシステム。
【請求項３５】
発生器ライトポインタに基づいてバッファ中へグラフィクスコマンドを書き込むグラフィクスコマンド発生器と、消費器リードポインタに基づいてバッファからグラフィクスコマンドを読み出すグラフィクスコマンド消費器とを含み、前記コマンド発生器は、そのコマンド発生器およびグラフィクスコマンド消費器によって共用される記憶装置内に前記バッファを割り付け、グラフィクスコマンド消費器は、キャッシュ／コマンドプロセサと表示のためのポリゴンを変換しかつラスタライズするパイプライングラフィクスコンポーネンツとを有するグラフィクスハードウェアを含む、３Ｄグラフィクスシステムにおいて、
消費器によって消費器ライトポインタが独立的に維持され、その消費器ライトポインタは発生器が前記バッファ中へ書き込んだ有効データの範囲を示し、消費器は消費器リードポインタが消費器ライトポインタに対して所定の関係を有することに応答してバッファからのグラフィクスコマンドを消費することを中止するようにし、
前記バッファは、前記消費器による実行のために共用記憶装置のどこかにストアされているグラフィクスコマンドのリストをコールするインラインコマンドをストアし、前記呼び出されたグラフィックスコマンドのリストは表示のためのポリゴンを引き出すために前記パイプライングラフィクスコンポーネンツに命令するポリゴン頂点コマンドを含むことを特徴とする、３Ｄグラフィクスシステム。
【請求項３６】
アプリケーションを実行するプロセサモジュール、グラフィクスプロセサモジュール、およびプロセサモジュールおよびグラフィクスプロセサモジュールに結合された少なくとも１つのメモリを含むインタラクティブな３Ｄグラフィクスシステムにおいて、プロセサモジュールとグラフィクスプロセサモジュールとの間のグラフィクスコマンドのフローを制御する方法であって、
アプリケーションの制御の下で、メモリ中の可変数のＦＩＦＯバッファを動的に確立し、そのアプリケーションがＦＩＦＯバッファの各々のサイズを特定し、
アプリケーションは、複数のＦＩＦＯバッファの少なくとも第１のＦＩＦＯバッファ中にグラフィクスコマンドを書き込むようにプロセサモジュールを制御し、そして
アプリケーションは、グラフィクスプロセサモジュールが前記プロセサの書込とは独立して第１のＦＩＦＯバッファからグラフィクスコマンドを読み出すのを制御するグラフィクスコマンドをグラフィクスプロセサモジュールに送り、
前記アプリケーションは、前記グラフィクスモジュールによる実行のために前記メモリのどこかにストアされているグラフィクスコマンドのリストをコールするインラインコマンドをＦＯＦＯバッファの少なくとも１つにストアし、前記呼び出されたグラフィックスコマンドのリストは表示のためのポリゴンを引き出すために前記パイプライングラフィクスコンポーネンツに命令するポリゴン頂点コマンドを含む、方法。
【請求項３７】
プロセサモジュールは前記複数のバッファの第１のバッファに関連するプロセサモジュールリードポインタおよびプロセサモジュールライトポインタを与え、そしてグラフィクスプロセサモジュールは前記第１のバッファに関連するグラフィクスプロセサモジュールリードポインタおよびグラフィクスプロセサモジュールライトポインタを独立して維持する、請求項３６記載の方法。
【請求項３８】
グラフィクスプロセサモジュールはグラフィクスプロセサモジュールが第１のバッファから読み出すたび毎にグラフィクスプロセサモジュールリードポインタをインクリメントし、グラフィクスプロセサモジュールリードポインタがグラフィクスプロセサモジュールライトポインタと所定の関係を有するとき第１のバッファからの読出を中断する、請求項３６記載の方法。
【請求項３９】
グラフィクスプロセサモジュールは、プロセサモジュールが第１のバッファへ書き込むことに応答してグラフィクスプロセサモジュールライトポインタを選択的に自動インクリメントする、請求項３６記載の方法。
【請求項４０】
グラフィクスプロセサモジュールは、プロセサモジュールとは独立して、複数のバッファの少なくともアクティブな１つのためのライトポインタを維持する、請求項３６記載の方法。
【請求項４１】
さらに、中断点を設定し、そしてグラフィクスプロセサモジュールがその中断点に遭遇することに応答してグラフィクスプロセサモジュールがバッファを読み出すのを少なくとも一時的に中断するようにした、請求項３６記載の方法。
【請求項４２】
選択的な制御ステップは、オーバフローの検出に応答してプロセサモジュールがバッファへ書き込むのを中断させるステップを含む、請求項３６記載の方法。
【請求項４３】
グラフィクスコマンドを受けかつそれを一時的にストアする共用記憶装置、
グラフィクスコマンドの第１セットと前記共用記憶装置中のどこかにストアされているグラフィクスコマンドの第２セットを参照するコマンドをと含むコマンドを前記共用記憶装置中のバッファへ書き込む発生器、および
バッファ中にストアされているグラフィクスコマンドの第１セットを消費し、参照コマンドに遭遇したことに応答して、それによって参照されたグラフィクスコマンドの第２セットを消費し、その後バッファからの付加的なコマンドを消費するためにバッファへリターンする消費器を備え、
前記消費器はキャッシュ／コマンドプロセサと表示のためのポリゴンを変換しかつラスタライズするパイプライングラフィクスコンポーネンツとを有するグラフィクスハードウェアを含み、
前記バッファは前記消費器による実行のために前記共用記憶装置のどこかにストアされている表示コマンドのリストをコールするインラインコマンドをストアし、前記呼び出された表示コマンドのリストは表示のためのポリゴンを引き出すために前記パイプライングラフィクスコンポーネンツに命令するポリゴン頂点コマンドを含む、３Ｄグラフィクスシステム。
【請求項４４】
バッファは循環バッファである、請求項４３記載の３Ｄグラフィクスシステム。
【請求項４５】
消費器はバッファへの書込はできないが、発生器とは独立してバッファのためのライトポインタを維持する、請求項４３記載の３Ｄグラフィクスシステム。
【請求項４６】
グラフィクスコマンドを受けかつそれを一時的にストアする共用記憶装置、
グラフィクスコマンドの第１セットと前記共用記憶装置中のどこかにストアされているグラフィクスコマンドの第２セットを参照するコマンドをと含むコマンドを前記共用記憶装置中のバッファへ書き込む発生器、および
バッファ中にストアされているグラフィクスコマンドの第１セットを消費し、参照コマンドに遭遇したことに応答して、それによって参照されたグラフィクスコマンドの第２セットを消費し、その後バッファからの付加的なコマンドを消費するためにバッファへリターンする消費器を備え、
前記消費器はキャッシュ／コマンドプロセサと表示のためのポリゴンを変換しかつラスタライズするパイプライングラフィクスコンポーネンツとを有するグラフィクスハードウェアを含み、
参照コマンドは、表示リストの開始アドレスを特定し、その特定した開始アドレスで始まる表示リストを読み出すように消費器を制御する、３Ｄグラフィクスシステム。
【請求項４７】
グラフィクスコマンドを受けかつそれを一時的にストアする共用記憶装置、
グラフィクスコマンドの第１セットと前記共用記憶装置中のどこかにストアされているグラフィクスコマンドの第２セットを参照するコマンドをと含むコマンドを前記共用記憶装置中のバッファへ書き込む発生器、および
バッファ中にストアされているグラフィクスコマンドの第１セットを消費し、参照コマンドに遭遇したことに応答して、それによって参照されたグラフィクスコマンドの第２セットを消費し、その後バッファからの付加的なコマンドを消費するためにバッファへリターンする消費器を備え、
前記消費器はキャッシュ／コマンドプロセサと表示のためのポリゴンを変換しかつラスタライズするパイプライングラフィクスコンポーネンツとを有するグラフィクスハードウェアを含み、
参参照コマンドは消費器が消費すべきデータユニットの数を特定する、３Ｄグラフィクスシステム。
【請求項４８】
グラフィクスコマンドの発生器、およびキャッシュ／コマンドプロセサと表示のためのポリゴンを変換しかつラスタライズするパイプライングラフィクスコンポーネンツとを有するグラフィクスハードウェアを含む消費器を備える、３Ｄグラフィクスシステムにおいて、グラフィクスコマンドの発生器からのグラフィクスコマンドをグラフィクスコマンドの消費器へ送る方法であって、
発生器および消費器に結合されたメモリ中の可変位置に配置された複数のサイズ可変バッファを作り、
サイズ可変バッファへ発生器によって発生されたグラフィクスコマンドを一時的にストアし、
前記バッファの少なくとも1つにメールのどこかにストアされている表示コマンドのリストを書き込み、
発生器とは独立してバッファをアクセスすることによってサイズ可変バッファからのグラフィクスコマンドを消費器によって消費し、
前記少なくとも1つのバッファ内の前記インラインコマンドに応答して、グラフィックスイメージ内で引き出すためにポリゴンの頂点を特定するポリゴン頂点コマンドを含む、表示コマンドのリストを実行し、
表示コマンドのリストを消費した後、前記バッファに書き込まれている前記表示リストをコールする前記インラインコマンドを有する前記バッファ内にアクセスし、消費されたグラフィクスコマンドおよび実行された表示リストの少なくとも一部に基づいてグラフィクスイメージの少なくとも一部を発生し、そして前記グラフィックスイメージの発生した部分をディスプレイに出力する、方法。
【請求項４９】
消費器は複数のバッファの少なくともアクティブな１つへ書き込むことはできず、さらに、発生器とは独立して、消費器が複数のバッファの少なくとも前記アクティブな１つのためのライトポインタを維持する、請求項４８記載の方法。
【請求項５０】
さらに、前記複数のバッファの第１バッファに関連する発生器リードポインタおよび発生器ライトポインタを発生器によって維持し、消費器によって、独立して、前記複数のバッファの前記第１バッファに関連する消費器リードポインタおよび消費器ライトポインタを維持する、請求項４９記載の方法。
【請求項５１】
さらに、消費器によって、アクティブなバッファから消費器が読み出すことに応じて消費器リードポインタをインクリメントし、そしてインクリメントした消費器リードポインタが消費器ライトポインタと所定の関係を有するときアクティブなバッファからの読出を中断する、請求項５０記載の方法。
【請求項５２】
さらに、発生器がアクティブなバッファへ書き込むことに応答して選択的に消費器ライトポインタをインクリメントする、請求項５１記載の方法。
【請求項５３】
複数のバッファの第１バッファはリードコマンドを含み、さらに、
(a) リードコマンドに遭遇することに応答して、発生器がメモリ内のどこかにストアした表示を消費し、
(b) どこかにストアされた表示リストを消費した後、第１バッファからのグラフィクスコマンドの消費を再開する、請求項４８記載の方法。
【請求項５４】
リードコマンドは表示リストの開始アドレスおよび長さを特定し、そしてステップ(a) では特定した開始アドレスで開始する特定した長さの表示リストを読み出すように消費器を制御する、請求項５３記載の方法。
【請求項５５】
複数のバッファの第１バッファは循環的な先入れ先出し（ＦＩＦＯ）アクセスを提供する、請求項４８記載の方法。
【請求項５６】
複数のバッファの第１バッファは直線的な先入れ先出し（ＦＩＦＯ）アクセスを提供する、請求項４８記載の方法。
【請求項５７】
さらに、発生器および消費器の両方へ複数のバッファのいずれかを同時に選択的に付属させる、請求項４８記載の方法。
【請求項５８】
複数のバッファの第１バッファを発生器へ付属させ、複数のバッファの第２バッファを消費器へ付属させる、請求項４８記載の方法。
【請求項５９】
複数のバッファの第１バッファを発生器へ付属させ、次いで、発生器から第１バッファを切り離し、第１バッファを消費器へ付属させる、請求項４８記載の方法。
【請求項６０】
複数のバッファのいずれかを発生器へ、または消費器へ、もしくは両方へ付属させる、請求項４８記載の方法。
【請求項６１】
複数のバッファの１つだけを一度に発生器へ付属させる、請求項４８記載の方法。
【請求項６２】
複数のバッファの１つだけを一度に消費器へ付属させる、請求項４８記載の方法。
【請求項６３】
３Ｄイメージを発生する方法であって、
発生器および消費器によって共用される記憶装置内に配置されたバッファに関連する発生器ライトポインタおよび発生器リードポインタを維持するステップ、
バッファへインライン表示リストコールを含むグラフィクスコマンドを書き込み、そしてその書込に応答して少なくともライトポインタを更新するステップ、
バッファに関連して、発生器ライトポインタとは独立した消費器ライトポインタおよび発生器リードポインタとは独立した消費器リードポインタを維持するステップ、および
消費器によってバッファ内にストアされたグラフィクスコマンドを消費するステップを含み、このステップでは、前記バッファ内の前記インライン表示リストコールに遭遇したことに応答して前記記憶装置内のどこかにストアされているポリゴン頂点グラフィックスコマンドを含む表示リストにアクセスし、その消費に応答して少なくともリードポインタを更新し、そして、表示リストを消費した後、インライン表示リスト後に前記バッファ内に続いて配置されている別のグラフィックスコマンドにアクセスして消費し、消費および実行ステップに少なくとも部分的に応答してグラフィクスイメージの少なくとも一部を発生し、そして前記グラフィックスイメージの発生した部分をディスプレイに出力する、方法。
【請求項６４】
３Ｄイメージを発生する方法であって、
グラフィックスコマンドの第１セットおよび共用記憶装置内のどこかにストアされた表示リストを参照するコマンドを含むコマンドを前記記憶装置内のバッファへ書き込み、
バッファにストアされているグラフィクスコマンドの第１セットを消費し、
参照コマンドへの遭遇に応答して、表示リスト中のポリゴン頂点コマンドを実行し、続いて、バッファからの付加的なコマンドを消費するように自動的にリターンし、消費されたグラフィクスコマンドの第１セットおよび前記表示リストに少なくとも部分的に応答してイメージの少なくとも一部を発生し、そして前記グラフィックスイメージの発生した部分をディスプレイに出力する、方法。
【請求項６５】
３Ｄグラフィクスコマンドを３Ｄグラフィクスコマンド消費器へ供給する方法であって、
(a) 所定の記憶位置で開始するコマンドシーケンスをストアし、
(b) コマンド消費器を所定の記憶位置で始まるストアされたポリゴン頂点コマンドを含む表示リストへ参照させる少なくとも１つのコマンドを含むグラフィクスコマンドストリームを、ＦＩＦＯバッファを通して、消費器へ供給し、そして
(c) コマンド消費器を表示リストへ参照させる前記少なくとも１つのコマンドへの遭遇に応答して、所定の記憶位置で始まる表示リストポリゴン頂点コマンドをコマンド消費器で実行し、
所定の記憶位置で開始するコマンドシーケンスを消費した後発生器は、ＦＩＦＯバッファからの前記グラフィックスコマンドストリームの付加的な部分へアクセスするために戻り、グラフィックスコマンド消費器は、前記表示リストポリゴン頂点コマンドを消費してイメージの少なくとも一部を発生し、そして前記グラフィックスイメージの発生した部分をディスプレイに出力する、方法。
【請求項６６】
ディスプレイ装置上に連続するグラフィックスイメージを効率的に発生させるための方法であって、
グラフィックスコマンドの第１セットおよび表示コマンドの別の予めストアしているリストをコールする少なくとも1つのコールコマンドを含むコマンドをメモリバッファへ書き込み、
フレームバッファメモリにおいて第１イメージの少なくとも一部を発生するためにグラフィックスコマンドの第１セットの少なくともいくつかを、３Ｄグラフィックスエンジンによって、消費し、
コールコマンドへの遭遇に応答して、３Ｄグラフィックスエンジンによって、表示リスト中のストアされている表示コマンドを読み出し、それに応じて前記フレームバッファメモリにおける前記第１イメージの少なくとも別の一部を発生し、
フレームバッファメモリにおいて第１イメージの少なくとも付加的な部分を発生するために、３Ｄグラフィックスエンジンは、前記メモリバッファ中にストアされているグラフィックスコマンドの第１セットの付加的なものを消費するように、呼び出された表示リストから自動的に戻り、
ディスプレイ装置上において第１イメージを表示し、
少なくともグラフィックスコマンドの第２セットおよび表示コマンドの同じ別の予めストアしているリストをコールする少なくとも1つのコールコマンドを含む付加的なコマンドをメモリバッファの同じかまたは異なるメモリへバッファへ書き込み、
同じまたは異なるフレームバッファメモリにおいて第２イメージの少なくとも一部を発生するためにグラフィックスコマンドの第２セットの少なくともいくつかを、３Ｄグラフィックスエンジンによって、消費し、
コールコマンドへの遭遇に応答して、３Ｄグラフィックスエンジンによって、表示リスト中のストアされている表示コマンドを読み出し、それに応じて前記同じまたは異なるフレームバッファメモリにおける前記第２イメージの少なくとも別の一部を発生し、
同じまたは異なるフレームバッファメモリにおいて第２イメージの少なくとも付加的な部分を発生するために、３Ｄグラフィックスエンジンは、前記メモリバッファ中にストアされているグラフィックスコマンドの第２セットの付加的なものを消費するように、呼び出された表示リストから自動的に戻り、そして
前記同じまたは異なるフレームの内容に基づいてディスプレイ装置上において第２イメージを表示する、方法。
【請求項６７】
前記消費ステップでは、先入れ先出し順序で消費し、それによって３Ｄグラフィックスエンジンが、グラフィックスコマンド発生器に対して同期する必要がある程度を、緩和する、請求項６６記載の方法。
【請求項６８】
さらに、グラフィックスコマンドを受けかつストアするために、可変数のサイズ可変メモリバッファを配置する、請求項６６記載の方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
この発明はコンピュータグラフィクスに関し、より特定的には、家庭用ビデオゲームプラットフォームのようなインタラクティブなグラフィクスシステムに関する。さらに特定的には、この発明は、グラフィクスコマンド発生器とグラフィクスコマンド消費器との間での効率的なグラフィクスコマンドのバッファリングに関する。
【０００２】
【発明の背景および発明の概要】
多くの人々はかなりリアルな恐竜，エイリアン，生き生きとしたおもちゃおよび他の空想的な動物を含む映画をかつて見たことがある。そのようなアニメーションはコンピュータグラフィクスによって可能とされた。そのような技術を用いて、コンピュータグラフィクスのアーティストは、各オブジェクトがどのように見えるべきかや時間の経過とともに外見上どのように変化すべきかを特定し、コンピュータは、そのオブジェクトをモデル化してテレビジョンやコンピュータスクリーンのようなディスプレイに表示する。コンピュータは、表示される映像の各部分を、場面中の各オブジェクトの位置や向き，各オブジェクトを照らすように見える照明の方向，各オブジェクトの表面テクスチャ，および他の要素に正確に基づいて、色付けしまた形作るために必要な多くのタスクを実行する。
【０００３】
コンピュータグラフィクスの生成は複雑であるので、ここ数年前のコンピュータによって生成された３次元（３Ｄ）グラフィクスは、ほとんど高価な特殊なフライトシミュレータ，ハイエンドグラフィクスワークステーションおよびスーパーコンピュータに限られていた。大衆は映画や高価なテレビコマーシャルにおいてこれらのコンピュータシステムによって生成された映像のいくつかを見たが、大部分の人はグラフィクスを生成しているコンピュータに対して実際に相互作用をさせることはできない。たとえば、Nintendo64（登録商標）や今や利用可能であるパソコン用の種々の３Ｄグラフィクスカードのような比較的安価な３Ｄグラフィクスプラットフォームの利用によって、このすべてが変わった。今や、家庭や会社の比較的安価なコンピュータグラフィクスシステム上でエキサイティングな３Ｄアニメーションやシミュレーションに対して相互作用を及ぼすことができる。
【０００４】
グラフィクスシステムの設計者が過去に直面した問題は、グラフィクスコマンド発生器とグラフィクスコマンド消費器との間でグラフィクスコマンドを如何に効率的にバッファリングするかということであった。この問題に対する種々のソリューションが提案されている。たとえば、グラフィクスコマンド発生器とグラフィクスコマンド消費器との間にバッファメモリを設けることがよく知られている。しばしば、このバッファメモリは、グラフィクスコマンド消費器の一部として（たとえば、グラフィクスチップのオンボードとして）接続される。グラフィクスコマンド発生器はグラフィクスコマンドをバッファメモリ中へ書き込み、そしてグラフィクスコマンド消費器はバッファメモリからこれらのグラフィクスコマンドを読み出す。そのようなバッファメモリのためには、典型的には、先入れ先出し（ＦＩＦＯ）バッファとして構成され、そのために、グラフィクスコマンド消費器は、グラフィクスコマンド発生器によってバッファ中へ書き込まれたと同じシーケンスでグラフィクスコマンドを読み出す。
【０００５】
発生器と消費器との間にそのようなバッファを配置することは、発生器と消費器とが同期しなければならないという程度を緩和する。発生器は、消費器がバッファからコマンドを読み出すレートとは独立したレートでバッファ中へコマンドを書き込むことができる。たとえ消費器がバッファからの読出において一時的な遅れを受けたとしても（たとえば、発生器が消費器に大きなもしくは複雑なプリミティブを引き出させようとするときに生じるかもしれない）、発生器は、発生器がバッファを満杯にしない限り、そして新たなコマンドを書き込むためのメモリスペースがなくなるまで停止することはない。同じように、新たなグラフィクスコマンドをバッファ中へ書き込む際の発生器の一時的な遅れは、発生器が追加のグラフィクスコマンドを書き込む機会を有する前にバッファ中のすべてのグラフィクスコマンドを消費器が消費しない限り、消費器を停止させることはない。
【０００６】
過去に遭遇した潜在的な問題は、バッファのサイズに関する。チップサイズや複雑さにおける制限のために、グラフィクスチップ上に非常に大きなコマンドバッファメモリを配置することはできない。グラフィクスハードウェア中の小さいサイズのＦＩＦＯバッファは、発生器と消費器との間の負荷バランスを適切にとれず、消費器が大きなプリミティブをレンダリングするときに発生器を停止させる。このように、過去に有意な仕事がなされたが、さらなる改良が可能である。
【０００７】
この発明は、グラフィクスコマンド発生器とグラフィクスコマンド消費器との間でグラフィクスコマンドをより効率的にバッファリングする技術および構成を提供することによって、この問題を解決する。この発明の局面によれば、発生器と消費器との間で共用される主メモリの一部が可変数のサイズ可変グラフィクスコマンドバッファへ割り付けられる。発生器はバッファの数や各々のサイズを特定することができる。グラフィクス消費器への書込は主メモリ中のバッファの任意のものへ送られ得る。バッファは消費器および発生器へ同時に付属させられ(attached) 得て、もしくは異なるバッファが消費器および発生器へ付属させられてもよい。異なるバッファが消費器および発生器へ付属させられるこのマルチバッファの方法においては、発生器は１つのバッファへ書き込むことができ、他方消費器は他のバッファから読み出すことができる。
【０００８】
消費器を発生器からさらに切り離すために、発生器および消費器は、この発明の他の局面に従って、それら自身のリードおよびライトポインタを独立的に維持する。消費器はバッファへ書き込むことはできないけれども、バッファ中の有効データの位置のトラッキングを保持するために使用するライトポインタを維持する。同じように、発生器はそれへ付属されていないバッファから読み出すことはできないが、バッファ中のデータの有効位置のトラッキングを保持するために使用するリードポインタを維持する。このポインタ構成の効果は、発生器を消費器からさらに切り離すことであり、それらの２つの間の同期化要求を減じる。
【０００９】
この発明によって提供される他の局面によれば、発生器は、ＦＩＦＯバッファへ「表示リストコール」コマンドを書き込むことができ、このコマンドはメモリ中のどこかにストアされている一連のグラフィクスコマンド（たとえば、表示リスト）を消費器に読み出させ、そして続いて、バッファの残りの読出へリターンさせる。ＦＩＦＯバッファから異種の(out-of-line) グラフィクスコマンドストリングをコールするこの能力は、付加的な柔軟性を与え、そして同期化要求をさらに減じる。
【００１０】
この発明の他の局面によれば、グラフィクスコマンド発生器は後続するコマンドを自動的に表示リストバッファへ向け直すコマンドを含むグラフィクスコマンドストリームを書き込むことができる。これを見えるようにする１つの方法は、グラフィクスコマンドのストリームを継続的に発生する向け直し可能な消火ホース(fire hose) としてグラフィクスコマンド発生器を想像することである。この消火ホースは通常グラフィクスコマンドをＦＩＦＯバッファへ流し込む。しかしながら、発生器は、このストリーム中に、「表示リスト開始」コマンドを含むことができ、このコマンドはそのコマンドに続くグラフィクスコマンドをそれに代えて表示リストへ書き込むようにする。ストリーム上にさらに挿入された「表示リスト終了」コマンドは、表示リストを終了させ、グラフィクスコマンドストリームを同じ（もしくは異なる）ＦＩＦＯバッファへ戻すように向け直すことができる。この特徴は、グラフィクスコマンド発生器によって非常に低いオーバヘッドで再使用可能な表示リストを効率的に生成することができるという利点を有する。
【００１１】
この発明によって提供される他の局面によれば、グラフィクスコマンド発生器は、多数のＦＩＦＯバッファの任意のものへ中断点(break point) を挿入することができる。この中断点は消費器を中断させることができる。そのような中断点は、緊密な同期が必要なときに発生器と消費器とを同期化するのに役立つ。
【００１２】
この発明によって提供されるさらに他の局面によれば、グラフィクスシステムは、グラフィクスコマンドを出力する発生器、発生器によって出力されたグラフィクスコマンドを消費する消費器、および発生器および消費器の間に結合される記憶装置を含む。記憶装置はその記憶装置中の可変位置に配置される複数のサイズ可変バッファをストアする。サイズ可変バッファの各々は、発生器によって出力されたグラフィクスコマンドを消費器へ分配するためにそれを受けかつ一時的にストアする。
【００１３】
この発明によって提供される別の局面によれば、消費器は複数のバッファの少なくともアクティブな１つへ書き込むことはできないが、発生器とは独立して複数のバッファのそのアクティブな少なくともの１つのためのライトポインタを維持する。発生器は複数のバッファの第１バッファに関連する発生器リードポインタおよび発生器ライトポインタを与え、消費器は、その同じバッファに関連する消費器リードポインタおよび消費器ライトポインタを独立して維持する。消費器は、アクティブなバッファから消費器が読み出すことに応じて消費器リードポインタをインクリメントし、インクリメントした消費器リードポインタが消費器ライトポインタに対して所定の関係を有するときそのアクティブなバッファからの読出を中断する(suspend) 。消費器は発生器がアクティブなバッファへ書き込むことに応答して消費器ライトポインタを選択的にインクリメントする。
【００１４】
この発明の他の局面によれば、バッファは、発生器が記憶装置中のどこかへストアしたグラフィクスコマンドのセットを消費器が消費し、どこかにストアされたグラフィクスコマンドを消費した後にバッファからのグラフィクスコマンドの消費を再開するように消費器を制御するリードコマンドを含む。このリードコマンドは、表示リストの開始アドレスおよび長さを特定する。リードコマンドは、その特定した開始アドレスで開始する特定した長さの表示リストを読み出すように消費器を制御する。
【００１５】
この発明の他の局面によれば、複数のバッファの任意のものは循環的なもしくは直線的な先入れ先出し（ＦＩＦＯ）アクセスを提供する。
【００１６】
この発明の他の局面によれば、複数のバッファの任意のものは発生器および消費器の両方へ同時に選択的に付属され、もしくはバッファの１つは発生器に付属され他のバッファが消費器に付属される。
【００１７】
この発明によって提供されるなおも他の局面によれば、発生器は複数のバッファの各々のサイズを割り付ける。そのような割付は、グラフィクスコマンドの少なくとも１フレームを各バッファがストアすることができるようになされる。
【００１８】
この発明の他の局面によれば、発生器は複数のバッファのいずれかへ中断点を書き込むことができる。消費器はこの中断点に遭遇したことに応じてグラフィクスコマンドの消費を中断することができる。
【００１９】
この発明のさらに他の局面によれば、各バッファは発生器がバッファの位置を上書きしたことを示すオーバフローステータス表示器(indicator)を提供する。
【００２０】
この発明のなおも他の局面によれば、ステータスレジスタもしくは他の表示器が複数のバッファの少なくとも１つのステータスを表示することができる。ステータスレジスタは、たとえば、
・発生器ライトポインタの位置、
・発生器リードポインタの位置、
・消費器ライトポインタの位置、および
・消費器リードポインタの位置
を表示することができる。
【００２１】
この発明のさらに他の局面によれば、グラフィクスシステムは
・グラフィクスコマンドを受けかつ一時的にストアする記憶バッファ、
・バッファ中へグラフィクスコマンドを書き込み、そのバッファに関連して発生器ライトポインタおよび発生器リードポインタを維持する発生器、および
・バッファ中にストアされたグラフィクスコマンドを消費し、発生器ライトポインタとは独立している消費器ライトポインタおよび発生器リードポインタとは独立している消費器リードポインタを維持する消費器
を含む。
【００２２】
この発明のなおも他の局面によれば、グラフィクスシステムは発生器ライトポインタに基づいてバッファ中へグラフィクスコマンドを書き込むグラフィクスコマンド発生器、および消費器リードポインタに基づいてバッファからグラフィクスコマンドを読み出すグラフィクスコマンド消費器を含む。発明のこの局面によれば、消費器ライトポインタは消費器によって独立して維持され、発生器がバッファ中へ書き込んだ有効データの範囲を表示する。消費器は、消費器リードポインタが消費器ライトポインタに対して所定の関係を有することに応じてバッファからグラフィクスコマンドを消費するのを中止する。
【００２３】
この発明によって提供されるなおも他の局面によれば、インタラクティブなグラフィクスシステムは、アプリケーションを実行するプロセサモジュール、グラフィクスプロセサモジュール、およびプロセサモジュールならびにグラフィクスプロセサモジュールに結合される少なくとも１つのメモリを含む。プロセサモジュールとグラフィクスプロセサモジュールとの間のグラフィクスコマンドのフローを制御する方法は
・ＦＩＦＯバッファの各々のサイズを特定するアプリケーションの制御の下で、メモリ中に可変数のＦＩＦＯバッファを動的に確立するステップ、
・複数のＦＩＦＯバッファ中の少なくとも第１バッファへグラフィクスコマンドを書き込むようにアプリケーションがプロセサモジュールを制御するステップ、および
・第１ＦＩＦＯバッファからグラフィクスコマンドを読み出すようにグラフィクスプロセサモジュールを制御するグラフィクスコマンドをアプリケーションがグラフィクスプロセサモジュールに送るステップ
を含む。
【００２４】
プロセサモジュールは複数のバッファの第１バッファに関連してプロセサモジュールリードポインタおよびプロセサモジュールライトポインタを与える。グラフィクスプロセサモジュールは、第１バッファに関連してグラフィクスプロセサモジュールリードポインタおよびグラフィクスプロセサモジュールライトポインタを独立して維持する。グラフィクスプロセサモジュールは、グラフィクスプロセサモジュールが第１バッファから読み出すたび毎にグラフィクスプロセサモジュールリードポインタをインクリメントし、そのグラフィクスプロセサモジュールリードポインタがグラフィクスプロセサモジュールライトポインタと所定の関係を有するときその第１バッファからの読出を中断する。グラフィクスプロセサモジュールはプロセサモジュールが第１バッファへ書き込むことに応答してグラフィクスプロセサモジュールライトポインタを選択的に自動的にインクリメントする。
【００２５】
この発明のなおも他の局面によれば、グラフィクスデータのフローを制御する方法は
・各々が複数の記憶位置を有する複数のサイズ可変ＦＩＦＯバッファ中へグラフィクスデータを書き込むステップ、
・複数の記憶位置の少なくとも１つに関連して中断点を設定するステップ、
・複数のバッファから所定の順序でグラフィクスデータを読み出すステップ、
・中断点に関連する少なくとも１つの記憶位置に遭遇したことに応答して読出ステップを一時的に中断し、割込を発生するステップ、および
・割込クリアコマンドの受信に応答して読出ステップを再開するステップ
を含む。
【００２６】
この発明によって提供されるなおもその他の局面によれば、グラフィクスシステムは
・グラフィクスコマンドを受けかつ一時的にストアする記憶装置、
・記憶装置中のどこかへストアされているグラフィクスコマンドの第１セットおよびグラフィクスコマンドの第２セットを参照するリードコマンドを含むコマンドを記憶装置中のバッファへ書き込む発生器、および
・バッファ中へストアされたグラフィクスコマンドの第１セットを消費し、リードコマンドへの遭遇に応答して、グラフィクスコマンドの第２セットを消費し、そしてバッファからの付加的なコマンドを引き続いて消費する消費器
を含む。
【００２７】
この発明の上述の目的，その他の目的，特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。
【００２８】
【実施例】
図１は対話型（インタラクティブ）３Ｄコンピュータグラフィクスシステム５０の一例を示す。システム５０は対話型３Ｄビデオゲームをステレオ音声とともにプレイするのに用いられ得る。これはまた多様な他のアプリケーションにも用いられ得る。
【００２９】
この実施例において、システム５０は３次元世界のディジタル表現ないしモデルをインタラクティブにかつリアルタイムに処理することができる。システム５０は、任意の視点から、その世界の一部または全部を表示することができる。たとえば、システム５０は、手持ちコントローラ５２ａおよび５２ｂまたは他の入力デバイスからのリアルタイム入力に応答して、視点をインタラクティブに変化できる。このことによって、ゲームプレーヤは、その世界内もしくは外の誰かの目を通してその世界を見ることができる。システム５０は、リアルタイム３Ｄインタラクティブ表示を必要としないアプリケーション（たとえば２Ｄ表示の発生やおよび／またはノンインタラクティブ表示）に使用できるが、高品質の３Ｄ映像を非常に速く表示する能力は、非常にリアルでエキサイティングなゲームプレイや他のグラフィクスインタラクションを創造するのに使用され得る。
【００３０】
システム５０を用いてビデオゲームまたは他のアプリケーションをプレイするために、ユーザはまず、主ユニット５４を、カラーテレビ５６または他の表示装置に、両者の間にケーブル５８を接続することによって、接続する。主ユニット５４はカラーテレビ５６を制御するためのビデオ信号およびオーディオ信号を発生する。ビデオ信号はテレビジョン画面５９上に表示されている映像を制御するものであり、オーディオ信号はテレビのステレオスピーカ６１Ｌおよび６１Ｒを通して音声として再生される。
【００３１】
ユーザはまた主ユニット５４を電源につなぐ必要がある。この電源は従来のＡＣアダプタ（図示せず）であってよく、そのＡＣアダプタは家庭用の標準的な壁ソケットに差し込まれ、家庭用電源を、主ユニット５４を駆動するのに適した低いＤＣ電圧信号に変換する。他の実施例ではバッテリが用いられてもよい。
【００３２】
ユーザは主ユニット５４を制御するために手持ちコントローラ５２ａおよび５２ｂを用いる。コントロール６０は、たとえば、３Ｄ世界内においてテレビ５６に表示されているキャラクタが移動すべき方向（上または下、左または右、近づいてまたは遠ざかって）を指示するために使用され得る。コントロール６０は、また他のアプリケーションのための入力（たとえばメニュー選択，ポインタ／カーソル制御，その他）を与える。コントローラ５２は多様な形態をとり得る。この実施例においては、図示されるコントローラ５２は、各々ジョイスティック，押しボタンおよび／または方向スイッチのようなコントロール６０を含む。コントローラ５２は、ケーブルによって、もしくは電磁波（たとえば電波または赤外線）を介してワイヤレスで、主ユニット５４に接続され得る。
【００３３】
ゲームのようなアプリケーションをプレイするために、ユーザはビデオゲームもしくはプレイしたいと思う他のアプリケーションをストアしている適宜の記憶媒体６２を選択し、その記憶媒体を主ユニット５４のスロット６４に差し込む。記憶媒体６２は、たとえば、特別にエンコードされおよび／または記号化された光学的ならびに／もしくは磁気的ディスクであってよい。ユーザは主ユニット５４をオンするために電源スイッチ６６を操作し、主ユニットがその記憶媒体６２にストアされているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザは主ユニットに入力を与えるためにコントローラ５２を操作する。たとえば、コントロール６０を操作することによってゲームもしくは他のアプリケーションをスタートさせる。他のコントロール６０を動かすことによって、動画キャラクタを異なる方向に移動させ、または３Ｄ世界におけるユーザの視点を変化させる。記憶媒体６２にストアされている具体的なソフトウェアによって、コントローラ５２上の種々のコントロール６０は異なる時間で異なる機能を達成することができる。
全体システムの例
図２はシステム５０の例示的なコンポーネントのブロック図であり、重要なコンポーネントは、
・主プロセサ（ＣＰＵ）１１０，
・主メモリ１１２，および
・グラフィクス／オーディオプロセサ１１４
を含む。
【００３４】
この実施例において、主プロセサ１１０（たとえばＩＢＭパワーＰＣ７５０の改良版）は、手持ちコントローラ５２（および／または他の入力デバイス）からの入力をグラフィクス／オーディオプロセサ１１４を通して受ける。主プロセサ１１０はユーザ入力にインタラクティブに応答し、光ディスクドライブのような大容量記憶媒体アクセス装置１０６を介して、たとえば外部記憶媒体６２から供給されるビデオゲームもしくは他のプログラムを実行する。一例として、ビデオゲームプレイの状況では、主プロセサ１１０は、多様なインタラクティブ制御機能に加えて、衝突検出および動画処理を実行する。
【００３５】
この実施例では、主プロセサ１１０は３Ｄグラフィクス／オーディオコマンドを発生し、それらをグラフィクス／オーディオプロセサ１１４に送る。グラフィクス／オーディオプロセサ１１４はこれらのコマンドを処理し、ディスプレイ５９上での可視映像を生成し、ステレオスピーカ６１Ｒおよび６１Ｌもしくは他の適宜の音声発生デバイス上でのステレオ音声を生成する。
【００３６】
実施例のシステム５０はビデオエンコーダ１２０を含み、このビデオエンコーダは、グラフィクス／オーディオプロセサ１１４からの映像信号を受けて、その映像信号をコンピュータモニタや家庭用テレビ５６のような標準的な表示装置上での表示に適したアナログおよび／またはディジタルビデオ信号に変換する。システム１００はまたオーディオコーデック（圧縮器／伸長器）１２２を含み、このオーディオコーデックはディジタル化されたオーディオ信号を圧縮しかつ伸長するとともに、必要に応じてディジタルオーディオ信号のフォーマットとアナログオーディオ信号のフォーマットとの間で変換を行う。オーディオコーデック１２２はバッファ１２４を介してオーディオ入力を受けることができ、処理（たとえば、プロセサが生成したおよび／または大容量記憶媒体アクセス装置１０６のストリームオーディオ出力を介して受信した他のオーディオ信号とのミキシング）するために、そのオーディオ入力をグラフィクス／オーディオプロセサ１１４に与える。この実施例におけるグラフィクス／オーディオプロセサ１１４は、オーディオタスクに利用可能なオーディオメモリ１２６にオーディオ関連情報をストアすることができる。グラフィクス／オーディオプロセサ１１４は、結果的に得られるオーディオ出力信号を、圧縮およびアナログ信号への変換のために、オーディオコーデック１２２に与え、したがってそのオーディオ出力信号が（たとえばバッファアンプ１２８Ｌおよび１２８Ｒを介して）スピーカ６１Ｌおよび６１Ｒによって再生され得る。
【００３７】
グラフィクス／オーディオプロセサ１１４はシステム１００内に存在するであろう種々の付加的なデバイスと通信する能力を有する。たとえば、パラレルディジタルバス１３０は大容量記憶媒体アクセス装置１０６および／または他のコンポーネントと通信するために用いられる。シリアル周辺バス１３２は多様な周辺機器または、たとえば、
・ＰＲＯＭおよび／またはＲＴＣ（リアルタイムクロック）１３４，
・モデム１３６もしくは他のネットワークインタフェース（それはシステム１００を、プログラム命令および／またはデータがダウンロードもしくはアップロードされ得るインターネットあるいは他のディジタルネットワークのようなテレコミュニケーションネットワーク１３８に接続する），および
・フラッシュメモリ１４０
を含む他のデバイスと通信する。
別の外部シリアルバス１４２は、付加的な拡張メモリ１４４（たとえばメモリカード）もしくは他のデバイスと通信するために使用され得る。コネクタが種々のデバイスをバス１３０，１３２および１４２に接続するために使用され得る。
グラフィクス／オーディオプロセサの例
図３は実施例のグラフィクス／オーディオプロセサ１１４を示すブロック図である。或る実施例においては、グラフィクス／オーディオプロセサ１１４はシングルチップＡＳＩＣであってよい。この実施例においては、グラフィクス／オーディオプロセサ１１４は、
・プロセサインタフェース１５０，
・メモリインタフェース／コントローラ１５２，
・３Ｄグラフィクスプロセサ１５４，
・オーディオディジタル信号プロセサ（ＤＳＰ）１５６，
・オーディオメモリインタフェース１５８，
・オーディオインタフェース／ミキサ１６０，
・周辺コントローラ１６２，および
・表示コントローラ１６４
を含む。
【００３８】
３Ｄグラフィクスプロセサ１５４はグラフィクス処理タスクを実行する。オーディオディジタル信号プロセサ１５６はオーディオ処理タスクを実行する。表示コントローラ１６４は主メモリ１１２からの映像情報にアクセスし、表示装置１０２上での表示のためにその映像情報をビデオエンコーダ１２０に与える。オーディオインタフェース／ミキサ１６０はオーディオコーデック１２２をインタフェースし、また異なるソースからのオーディオ（たとえば、大容量記憶媒体アクセス装置１０６からのオーディオストリーム，オーディオＤＳＰ１５６の出力，およびオーディオコーデック１２２を通して受ける外部オーディオ入力）をミックスすることができる。プロセサインタフェース１５０は主プロセサ１１０およびグラフィクス／オーディオプロセサ１１４の間のデータおよび制御インタフェースを提供する。
【００３９】
メモリインタフェース１５２はグラフィクス／オーディオプロセサ１１４とメモリ１１２との間のデータおよび制御インタフェースを提供する。この実施例においては、主プロセサ１１０は、プロセサインタフェース１５０およびグラフィクス／オーディオプロセサ１１４の一部であるメモリインタフェース１５２を介して、主メモリ１１２にアクセスする。周辺コントローラ１６２はグラフィクス／オーディオプロセサ１１４と上で述べた種々の周辺機器との間のデータおよび制御インタフェースを提供する。オーディオメモリインタフェース１５８はオーディオメモリ１２６とのインタフェースを提供する。
グラフィクスパイプラインの例
図４は図３の３Ｄグラフィクスプロセサ１５４をより詳細に示すグラフィクス処理システムを示す。この３Ｄグラフィクスプロセサ１５４は、とりわけ、コマンドプロセサ２００および３Ｄグラフィクスパイプライン１８０を含む。主プロセサ１１０はデータストリーム（たとえばグラフィクスコマンドストリームおよび表示リスト）をコマンドプロセサ２００に通信する。主プロセサ１１０はメモリレイテンシを最小化するために２レベルキャッシュ１１２を有し、さらにまたグラフィクス／オーディオプロセサ１１４に向けられたキャッシュされていないデータストリームのための書込収集(write-gathering)バッファ１１１を有する。この書込収集バッファ１１は部分キャッシュラインを全キャッシュラインに集め、バスの最大使用時に、グラフィクス／オーディオプロセサ１１４からのデータを１つのキャッシュラインに送る。
【００４０】
コマンドプロセサ２００は主プロセサ１１０からの表示コマンドを受け、それらを解剖し、メモリコントローラ１５２を介して共用メモリ１１２からのそのコマンドを処理するに必要な付加的なデータを入手する。コマンドプロセサ２００は、２Ｄおよび／または３Ｄ処理およびレンダリングのために、頂点コマンドのストリームをグラフィクスパイプライン１８０に与える。グラフィクスパイプライン１８０はこれらのコマンドに基づいて映像を生成する。結果として得られた映像情報は、表示コントローラ／ビデオインタフェースユニット１６４によるアクセスのために主メモリ１２０に転送され得て、この映像情報は表示装置１５６上にパイプライン１８０のフレームバッファ出力を表示する。
【００４１】
図５はグラフィクスプロセサ１５４を用いて実行される処理を図解的に示すブロックロジックフロー図である。主プロセサ１０は、グラフィクスコマンドストリーム２１０，表示リスト２１２および頂点アレイ２１４を主メモリ１１２にストアし、ポインタをバスインタフェース１５０を介してコマンドプロセサ２００に送る。主プロセサ１１０は主メモリ１１０内に割り付けられた１つ以上のグラフィクスＦＩＦＯバッファ２１０にグラフィクスコマンドをストアする。このコマンドプロセサ２００は、
・同期／フロー制御および負荷バランスのためにグラフィクスコマンドを受けかつバッファするオンチップＦＩＦＯメモリバッファ２１６を介して主メモリ１１２からのコマンドストリーム，
・オンチップコールＦＩＦＯメモリバッファ２１８を介して主メモリ１１２からの表示リスト２１２，および
・コマンドストリームからおよび／または主メモリ１１２の頂点アレイ２１４からの頂点アトリビュートを頂点キャッシュ２２０を介して
取り込む。
【００４２】
コマンドプロセサ２００はコマンド処理動作２００ａを実行し、そのコマンド処理動作２００ａはアトリビュート形式を浮動小数点フォーマットに変換し、結果的に得られた完全頂点ポリゴンデータをレンダリング／ラスタライゼーションのためにグラフィクスパイプライン１８０に与える。プログラマブルメモリ調停回路１３０（グラフィクスメモリ要求調停回路：図４）は、グラフィクスパイプライン１８０，コマンドプロセサ２００および表示コントローラ／ビデオインタフェースユニット１６４の間での共用主メモリ１１２へのアクセスを調停する。
【００４３】
図４は、グラフィクスパイプライン１８０が
・変換ユニット３００，
・セットアップ／ラスタライザ４００，
・テクスチャユニット５００，
・テクスチャ環境ユニット６００，および
・ピクセルエンジン７００
を含むことを示す。
【００４４】
変換ユニット３００は多様な２Ｄおよび３Ｄ変換および他の動作３００ａ（図５）を実行する。変換ユニット３００は変換処理３００ａに用いられるマトリクスをストアするための１つ以上のマトリクスメモリ３００ｂを含む。変換ユニット３００は、入来する頂点毎のジオメトリをオブジェクト空間からスクリーン空間へ変換し、そして入来するテクスチャ座標を変換しかつ投影テクスチャ座標（３００ｃ）を計算する。変換ユニット３００はまたポリゴンクリッピング／カリング(clipping/culling)３００ｄを実行する。変換ユニット３００ｂによってまた達成されるライティング(lighting) 処理３００ｅが、この実施例では８つまでの独立した照明(light：ライト)について、頂点毎にライティング計算を行う。変換ユニット３００は、エンボス(embossed)タイプのバンプマッピング効果およびポリゴンクリッピング／カリング動作（３００ｄ）のために、テクスチャ座標を発生する（３００ｃ）。
【００４５】
セットアップ／ラスタライザ４００はセットアップユニットを含み、このセットアップユニットは、変換ユニット３００からの頂点データを受け、三角形セットアップ情報を、エッジラスタライゼーション，テクスチャ座標ラスタライゼーションおよびカラーラスタライゼーションを実行する１つ以上のラスタライザユニット（４００ｂ）に送る。
【００４６】
テクスチャユニット５００は、オンチップテクスチャメモリ（ＴＭＥＭ）５０２を含んでもよく、たとえば、
・主メモリ１１２からのテクスチャ５０４の検索、
・たとえばマルチテクスチャ処理，ポストキャッシュテクスチャ伸長，テクスチャフィルタリング，エンボシング，投影テクスチャの使用を通しての陰影付け，およびアルファトランスパーレンシおよびデプスを用いるＢＬＩＴを含むテクスチャ処理（５００ａ）、
・バンプマッピング，偽(pseudo)テクスチャおよびテクスチャタイル(tiling)効果（５００ｂ）のためのテクスチャ座標変位を計算するバンプマップ処理、および
・間接テクスチャ処理（５００ｃ）
を含むテクスチャリングに関連する種々のタスクを実行する。
【００４７】
テクスチャユニット５００はテクスチャ環境処理（６００ａ）のためにフィルタされたテクスチャ値をテクスチャ環境ユニット６００に出力する。テクスチャ環境ユニット６００は、ポリゴンおよびテクスチャカラー／アルファ／デプスをブレンドし、また逆レンジベース(reverse range based)のフォグ効果を達成するために、テクスチャフォグ処理（６００ｂ）を実行する。テクスチャ環境ユニット６００はたとえばカラー／アルファ変調，エンボシング，詳細テクスチャ，テクスチャスワッピング，クランピングおよびデプスブレンディングに基づく多様な他の環境関連機能を実行する多数のステージを提供する。
【００４８】
ピクセルエンジン７００はデプス（ｚ）比較（７００ａ）およびピクセルブレンディング（７００ｂ）を実行する。この実施例では、ピクセルエンジン７００はデータを埋め込み（オンチップ）フレームバッファメモリ７０２にストアする。グラフィクスパイプライン１８０は、フレームバッファおよび／またはテクスチャ情報をローカルにストアするために１つ以上の埋め込みＤＲＡＭメモリ７０２を含む。ｚ比較７００ａは、現在有効なレンダリングモードに依存して、グラフィクスパイプライン１８０におけるより早い段階で実行される（たとえば、ｚ比較は、もしアルファブレンディングが要求されていないならば早くに実行され得る）。このピクセルエンジン７００は表示コントローラ／ビデオインタフェースユニット１６４による主メモリ１１２へのアクセスのために、オンチップフレームバッファ７０２を周期的に書き込むコピー動作７００ｃを含む。このコピー動作７００ｃはまた動的テクスチャ合成効果のために、埋め込みフレームバッファ７０２の内容を主メモリ１１２中のテクスチャにコピーするために使用され得る。アンチエイリアシング(anti-aliasing：エイリアス補正)および他のフィルタリングがコピー動作中に実行され得る。最終的に主メモリ１１２にストアされるグラフィクスパイプライン１８０のフレームバッファ出力は、表示コントローラ／ビデオインタフェースユニット１６４によってフレーム毎に読み出される。表示コントローラ／ビデオインタフェース１６４は表示装置５６上での表示のためにディジタルＲＧＢピクセル値を与える。
共用メモリ中に割り付けられたＦＩＦＯバッファ
この実施例において、グラフィクス／オーディオプロセサ１１４のオンボードのコマンドＦＩＦＯバッファ２１６（これは小規模のデュアルポートＲＡＭのストリーミングバッファであってよい）は、それ自身によって、プロセサ１１０とグラフィクスパイプライン１８０との間の負荷バランスをとる良好なジョブを行うには小さすぎる。このことによって、グラフィクス／オーディオプロセサ１１４が大きなプリミティブをレンダリングしているときには、プロセサ１１０は停止されることになる。この問題を改善するために、プロセサ１１０とグラフィクス／オーディオプロセサ１１４との間で共用される主メモリ１１２の一部をコマンドＦＩＦＯバッファ２１０として用いる。バッファ２１０を用いることによって、主プロセサ１１０およびグラフィクスプロセサ１１４がほぼそれらのピークレート(peak rate) で並列的に動作することができる。
【００４９】
並列処理を達成するためにバッファ２１０を用いる（少なくとも）２つの方法があり、中間モード(immediate mode)およびマルチバッファモード(multi-buffer mode) である。１つのバッファ２１０が主プロセサ１１０およびグラフィクスプロセサ１１４の両方へ付属させられるとき、システム５０は中間モードで動作している。主プロセサ１１０がグラフィクスコマンドをバッファ２１０へ書き込むと、グラフィクスプロセサ１１４はそれらを順に処理する。書込が読出を追い越すのを防ぎかつ循環的なバッファ動作を提供するためにバッファ２１０のリードおよびライトポインタを第１アドレスへラップさせるためにハードウェアサポートがフロー制御ロジックを与える。
【００５０】
好ましい実施例においては、また、マルチバッファモードにおいて、グラフィクス／オーディオプロセサ１１４が異なるバッファ２１０（１）から読出している間１つのバッファ２１０を主プロセサ１１０へ接続することができる。この場合、バッファ２１０（１）および２１０（２）は、いずれの特定のバッファ２１０へも同時的な読出および書込がないので、従来のＦＩＦＯというよりもバッファのように管理される。バッファの動的なメモリ管理が望まれるなら、マルチバッファモードが使用され得る。
【００５１】
図６は共用メモリ１１２の一部が発生器１１０および消費器１１４の間でのグラフィクス（およびオーディオ）コマンドをバッファリングするためにどのようにして割り当てられて多数のＦＩＦＯコマンドバッファ２１０（１），２１０（２），…，２１０（ｎ）を提供するかを示す。図６に示す例において、バッファ２１０の各々は主プロセサ１１０からのグラフィクス（および／またはオーディオ）コマンドを受け、それらのコマンドをグラフィクス／オーディオプロセサ１１４へ与える。主プロセサ１１０はこれらのバッファ２１０としての使用のために、主メモリ１１２の一部を割り当てる。主メモリの領域を記述するバッファデータ構造子(structure) が、主プロセサ１１０上で実行中のアプリケーションによって割り付けられる。
【００５２】
主プロセサ１１０はライトポインタ８０２を用いてバッファ中へグラフィクスコマンドを書き込む。グラフィクス／オーディオプロセサ１１４はリードポインタ８０４を用いてバッファ２１０からコマンドを読み出す。ライトポインタ８０２およびリードポインタ８０４は同じのもしくは異なるバッファをポイント（指示）することができる。この方法において、同じバッファ２１０が主プロセサ１１０およびグラフィクス／オーディオプロセサ１１４の両方へ同時に「付属」させられ、もしくは異なるバッファが発生器および消費器に異なる時間で付属させられ得る。
【００５３】
図６に示すマルチバッファの例において、主プロセサ１１０およびグラフィクス／オーディオプロセサ１１４は、「その」ＦＩＦＯバッファ２１０が割り当てられている場所で必ずしも一致する必要はない。図示する例において、主プロセサ１１０はグラフィクスコマンドを書き込むための現在のバッファとしてバッファ２１０（２）を用い、これに対して、グラフィクス／オーディオプロセサ１１４はグラフィクスコマンドを入手するために現在のバッファとして異なるバッファ２１０（１）を使用する。バッファ２１０は主プロセサ１１０，グラフィクス／オーディオプロセサ１１４あるいはその両方へ動的に付属させられ得る。バッファが主プロセサへ付属させられるとき、主プロセサはグラフィクスコマンドをバッファ２１０へ書き込む。実施例において、任意の一時に主プロセサ１１０へ付属させられる１つでかつ１つだけのバッファ２１０がある。バッファがグラフィクスプロセサ１１４へ付属されるとき、グラフィクスプロセサはその付属されたバッファ２１０からグラフィクスコマンドを読み出しかつ処理する。この実施例においては、ただ１つのバッファ２１０だけが任意の一時にグラフィクスプロセサ１１４へ付属され得る。
独立した消費器および発生器のリードおよびライトポインタ
グラフィクスコマンド発生器として作用する主プロセサ１１０は、それが付属されているバッファ２１０（２）から読み出す必要はないが、図６の例に示すように発生器リードポインタ８０６を維持する。同じように、グラフィクス／オーディオプロセサ１１４はグラフィクスコマンドの消費器として動作し、それゆえに、それが付属されているバッファ２１０（１）へ書き込む必要はないけれども、図６の例においては消費器ライトポインタ８０８を維持する。これらの付加的なポインタ８０６および８０８によって発生器および消費器がそれに付属されている各バッファ２１０を独立的に維持することができる。
【００５４】
主プロセサ１１０によって維持されている付加的なポインタ８０６およびグラフィクス／オーディオプロセサ１１４によって維持されている付加的なポインタ８０８はオーバラップ検出を与えるために使用される。これらの余分なポインタはバッファ２１０内において有効データがどこに存在するかを示す。たとえば、主プロセサ１１０はそれに付属されているバッファ２１０（２）を循環バッファとして取り扱い、ライトポインタがバッファ８１２の「終り」に達すると、バッファ８１０の「開始」にそのライトポインタを「ラップ(wrap)」する。しかしながら、消費器ライトポインタ８０２が消費器リードポインタ８０６へ遭遇すると、消費器は、グラフィクス／オーディオプロセサ１１４がまだ読み出していない有効な、先に書き込まれたデータを上書きするのを回避するために、消費器はその付属するバッファ２１０（２）への書込を中止する。同じように、グラフィクス／オーディオプロセサ１１４は、それの付属するバッファ２１０（１）からグラフィクス命令を漸進的に読み出すとき、それのリードポインタ８０４を継続的にインクリメントするが、リードポインタ８０４がライトポインタ８０８に遭遇すると、消費器はライトポインタをバッファ２１０（１）内の最終有効データを示すように用いているので、このインクリメントの手続きを中止する。
【００５５】
ポインタ８０２，８０４，８０６および８０８はバッファ２１０内の任意の位置をポイントすることができる。有効データは、したがってこれらのバッファ内の任意の場所に存在し、必ずしもバッファの始めまたは終りである必要はない。実際に、もしバッファ２１０が循環モード(circular mode) で動作すると、バッファの終りは始めにラップされ、そしてそれゆえにバッファは論理的には連続ループであるので、「開始」または「終了」の概念はない。
【００５６】
図７は独立した消費器および発生器のリードおよびライトポインタの簡単化した説明を提供する。図７の例において、消費器１１４はそれに付属されているバッファ２１０（１）からグラフィクスコマンドを読み出すために自動インクリメントリードポインタ８０４を用いる。消費器１１４はまた、バッファ２１０（１）中の最終有効グラフィクスコマンドをポイントする消費器ライトポイント８０８を維持する。この例において、消費器１１４はバッファ２１０（１）からグラフィクスコマンドを読み出し続け、各グラフィクスコマンドを読み出した後に、ライトポインタが示す同じ位置（図８参照）をポイントするまで、それのリードポインタ８０４をインクリメントする。リードポインタ８０４がライトポインタ８０８が示す位置に隣接する位置を示すように消費器１１４がそのリードポインタ８０４をインクリメントしたとき、消費器は、バッファ２１０（１）から有効グラフィクスコマンドのすべてを読み出しそしてそれゆえにバッファがエンプティになったことを「知る」。この状態は、消費器１１４が発生器１１０（もしバッファ２１０（１）が同時に発生器に付属されているなら）からのさらなるグラフィクスコマンドを待つ必要があるか、もしくは（もしマルチバッファが有効であるなら）、消費器が読出を開始するべく異なるバッファ２１０に向ける必要があることを示している。
【００５７】
同じように、発生器はそれに付属されているバッファ２１０（２）中へグラフィクスコマンドを書き続け、同じように、発生器リードポインタ８０６が示す位置の直前であるバッファの位置をライトポインタがポイントするまで、発生器ライトポインタ８０２を自動的にインクリメントする（図９参照）。この例において、ライトポインタ８０２とリードポインタ８０６との間の一致（実際にはごく接近して）は、バッファ２１０（２）がフルであることを示す。マルチバッファが有効であれば、発生器はこの時点でバッファ２１０（２）への書込を中止し、それを「セーブ」（閉じる）し、消費器に対してその「閉じた」バッファの内容を（今または後に）読み出すように指令し、主メモリ１１２中に割り当てることができるなおも他のバッファ２１０へ付加的なグラフィクスコマンドを書き込むのを開始する。発生器１１０および消費器１１４が同じバッファへ付属されると、そのバッファへさらなるコマンドを書き込む前に、発生器は、消費器がコマンドを読み出すまで待つ必要がある。以下に説明するように、このような頻繁な状況の切換を回避するために、好ましい実施例はプログラマブルなヒステリシス効果を提供でき、それは発生器がバッファへの書込の再開を許容される前に或る量によってバッファがエンプティにされることを要し、消費器がバッファからの読出の再開を許容される前に或る量によってバッファがフルになる必要がある。
【００５８】
好ましい実施例においては、主プロセサ１１０は、３２バイト転送でそれに付属されるバッファ２１０へグラフィクスコマンドを書き込む。主プロセサ１１０は書込収集バッファ／機能１１１（図４参照）を提供し、それは、グラフィクスコマンドを自動的に３２バイトワードへパックする(pack)。グラフィクスプロセサ１１４は３２バイト転送においてそれが付属されるバッファ２１０からグラフィクスコマンドを読み出す。
ＦＩＦＯバッファからの表示リストのコール
図１０は好ましい実施例によって提供される技術の一例であり、それによって、関数コールとほとんど同じように、ＦＩＦＯバッファ２１０の入力が表示リストをコールすることができる。この例において、コマンド８９０はメモリ中のどこかにストアされた表示リスト２１２をコールするグラフィクスコマンドＦＩＦＯ２１０中に挿入される。このコマンド８９０に遭遇すると、グラフィクスプロセサ１１４はＦＩＦＯバッファ２１０からのグラフィクスコマンドの読出を一時的中止し、代わって、主メモリ１１２中のどこかにストアされている表示リスト２１２からのコマンドを読み出し始める。表示リスト２１２の終りに達すると、グラフィクスプロセサ１１４はグラフィクスＦＩＦＯ２１０からの次の順次的なコマンドを読み出すためにリターンする。この技術は、主プロセサ１１２が各フレーム毎に表示リストを再書込する必要がなく、多数のフレームが同じ表示リスト２１２をコールできるという点で非常に有用である（たとえば、フレームからフレームへ静止したままであるジオメトリをレンダリングするような場合）。
【００５９】
図１１ないし図１３は、グラフィクスコマンドＦＩＦＯ２１０へ書き込むことによって主プロセサ１１０が自動的に表示リスト２１２を生成することができることを示す。図１１に示すように、主プロセサ１１０は主メモリ１１２中に割り付けたグラフィクスコマンドＦＩＦＯ２１０へグラフィクスコマンドストリームを書き込むことによって開始する。この書込プロセスにおける任意の時点で、主プロセサ１１０はＦＩＦＯバッファ２１０中へ「表示リスト開始(Begin Display List)」コマンド８９０を挿入することができ、そのコマンドによって、主プロセサからの別の書込を表示リスト２１２へ向けることができる。図１３は、主プロセサ１１０が表示リスト２１２の書込を終了すると、「表示リスト終了(End Display List)」コマンドを発生することを示し、このコマンドは表示リストを自動的に終了させ、主プロセサのコマンドストリーム出力をＦＩＦＯバッファ２１０へ自動的に向け直す効果を有する。主プロセサ１１０が向け直し可能な「消火ホース」コールストリーム出力を与え、その出力がＦＩＦＯバッファ２１０、表示リスト２１０および同じもしくは異なるＦＩＦＯバッファ２１２へグラフィクスコマンドを流出させることができることを思い浮かべることができる。この方法によって生成された表示リスト２１２はメモリ１１２中に留まり、いくつかのフレームあるいはフレーム部分に亘って静止したままであるイメージの一部のために再使用され得る。
具体例の詳細
グラフィクス／オーディオプロセサ１１４のグラフィクスインタフェースユニット部分２０２へのプロセサであるコマンドプロセサ２００は、主メモリ１１２中のＦＩＦＯバッファ２１０を管理するための制御ロジックを含む。図１４はその具体例を示す。図示する例において、ＣＰＵ１１０がグラフィクス／オーディオプロセサ１１４へ書き込んだすべてのものが主メモリ１１２へ送られる。グラフィクス／オーディオプロセサ１１４へ付属するグラフィクスＦＩＦＯ２１０へ割り付けられた主メモリ１１２の一部を規定する２つのレジスタがあり、それは
ＦＩＦＯベース(BASE)レジスタ８２２、および
ＦＩＦＯ先頭(TOP) レジスタ８２４
である。
【００６０】
ＦＩＦＯ＿ＢＡＳＥレジスタ８２２はＦＩＦＯ２１０のベースアドレスを規定する。ＦＩＦＯ＿ＴＯＰレジスタ８２４はＦＩＦＯにおける最終(last)アドレスを規定する。
【００６１】
コマンドプロセサ２００はハードウェア中においてＦＩＦＯ２１０のためのリードおよびライトポインタのトラッキングを保持する。ＦＩＦＯ中に書き込まれたすべてのデータがキャッシュライン(cache line)のサイズにされるので、有効バイトのトラッキングを保持する必要はない。ライトポインタ８０８はＦＩＦＯ＿ＢＡＳＥとＦＩＦＯ＿ＴＯＰとの間にあるアドレス中にキャッシュラインが書き込まれる毎に３２バイトによってインクリメントされる（最上位５ビットは０）。ＦＩＦＯ２１０の読出が一度に１キャッシュラインで行われる。リードポインタはキャッシュラインが読み出された後、３２によってインクリメントされる。
【００６２】
最初に、リードポインタ８０４およびライトポインタ８０８が同じ位置を示すように初期化され、それはＦＩＦＯがエンプティであることを意味する（図８参照）。ＦＩＦＯフル状態は、（リードポインタ−１）＝（ライトポインタ）である（図９参照）。ライトポインタ８０８はそれがＦＩＦＯ＿ＴＯＰへ達した後にＦＩＦＯ＿ＢＡＳＥ２０４（２）へラップされる。リードポインタ８０４もまたそれがＦＩＦＯ＿ＴＯＰ８２４へ達するときラップされる。リードポインタ８０４はハードウェアによって制御され、ラップされた場合においてもライトポインタ８０８を追い越さないようにされている。プロセサ１１０上で動いているアプリケーションによって、ライトポインタ８０８は、ラップされた後にも、リードポインタ８０４より大きくならないようにされる。
【００６３】
２つ（またはそれ以上）の異なるフレームからのデータは同じＦＩＦＯ２１０中へ存在することができる。第１フレームが内蔵ＤＲＡＭ７０２へコピーアウトされる前にコマンドプロセサ２００が第２フレームを実行するのを防止するために中断点機構が用いられ得る。ＦＩＦＯ中断点（レジスタ）８３２がイネーブルされると、コマンドプロセサ２００はＣＰ＿ＦＩＦＯ＿ＢＲＫレジスタを読み出さない。ＣＰＵ１１０はフレームの終わりでこのレジスタ８３２をプログラムすることができる。ＣＰＵ１１０はグラフィクス／オーディオプロセサ１１４上の書込バッファをフラッシュしなければならず、次いで、ＦＩＦＯライトポインタ８０８を読み出す。そして、ＣＰＵ１１０はＦＩＦＯ中断点レジスタ８３２へ値を書き込み、中断点をイネーブルする。
【００６４】
ＦＩＦＯ２１０のサイズが１フレーム中に送られたすべてのデータを保持するに十分大きければ、図９に示すＦＩＦＯフル状態は決して発生しない。しかしながら、このことは主メモリ１１２の２Ｍないし４ＭバイトをＦＩＦＯバッファ２１０のために割り付けることを意味する。アプリケーションの開発者はＦＩＦＯ２１０のために大きなメモリを使用したいとは思わないであろう。その場合、アプリケーションはフロー制御技術を実現する。レジスタ８２６および８２８はそのようなフロー制御を提供するために使用され得る。フロー制御は、主メモリ１１２中のキャッシュラインの数がＦＩＦＯ＿ＨＩＣＮＴ８２６より大きくなったときグラフィクス／オーディオプロセサ１１４がＣＰＵ１１０へ割込を発生させることによって、この実施例中において行われる。プロセサ１１０は割込を取り入れ、ＦＩＦＯ中のキャッシュラインの数がＦＩＦＯ＿ＬＯＣＮＴ８２８より小さくなるまで、スピン(spin)するかもしくは他の非グラフィクスタスクを行う。そのようなヒステリシス効果を提供する理由は、割込のオーバヘッドが高く、ＦＩＦＯ２１０の内容が「高水位マーク（high water mark：ハイウォータマーク） 」以下になったことをただチェックすることによって割込ルーチンに入るか割込ルーチンを出るかを行うことを望まないからである。割込はＦＩＦＯのカウントがＬＯＣＮＴ８２８以下になったとき発生され得る。この方法によって、アプリケーションは割込がかけられたとき他のタスクを行いリターンする。
ＦＩＦＯバッファの割付の例
好ましい実施例において、グラフィクスＡＰＩはスタティックなFXFifoObj の構造子を内部的に宣言する。この構造子はGXInitがコールされたとき初期化される。
【００６５】
【表１】
0004757406.tif 000002
【００６６】
ＦＩＦＯベースポインタは、この好ましい実施例においては３２ビットに合わされている。アプリケーションはＦＩＦＯのためにメモリを割り付ける責任がある。割付のためのサイズのパラメータはバイトにおけるＦＩＦＯのサイズである（最小ＦＩＦＯサイズは６４Ｋバイトであり、サイズは３２バイトの倍数である）。デフォルトによって、GXInitが中間モードグラフィクスのＦＩＦＯをセットアップすると、すなわち、ＣＰＵ１１０およびグラフィクスプロセサ１１４がＦＩＦＯに付属されると、リードおよびライトポインタはベースポインタに初期化され、高水位および低水位マーク（low water mark：ローウォータマーク）がイネーブルされる。GXInitは初期化したGXFifoObj へのポインタをアプリケーションへリターンする。
【００６７】
アプリケーションがマルチバッファモードで動作することを望むなら、次いで、追加のＦＩＦＯが割り付けられなければならない。任意の数のそのような追加のＦＩＦＯバッファ２１０が割り付けられ得る。アプリケーションは各追加のＦＩＦＯ毎にメモリに割り付け、GXFifoObj を同じように初期化する。次に例示する関数はGXFifoObj を初期化するために使用され得る。
【００６８】
【表２】
0004757406.tif 000003
【００６９】
通常、アプリケーションはＦＩＦＯリードおよびライトポインタをＦＩＦＯのベースアドレスへ初期化する必要があるだけである。一旦初期化されると、システムハードウェアはリードおよびライトポインタを自動的に制御する。
ＦＩＦＯの付属およびセーブ
ＦＩＦＯが一旦初期化されると、それはＣＰＵ１１０またはグラフィクスプロセサ１１４もしくはその両方へ付属される。ただ１つのＦＩＦＯが同時にＣＰＵ１１０およびグラフィクスプロセサ１１４のいずれかに付属され得る。ＦＩＦＯがＣＰＵ１１０に付属されると、ＣＰＵはＦＩＦＯに対してGXコマンドを発行する。ＦＩＦＯがグラフィクスプロセサ１１４に付属されたとき、プロセサ１１４はＦＩＦＯからグラフィクスコマンドを読み出すためにイネーブルされる。次に例示する関数がＦＩＦＯを付属させる。
【００７０】
【表３】
0004757406.tif 000004
【００７１】
どのＦＩＦＯオブジェクトが現在これらの例示的な関数によって付属されたかを問い合わせる。
【００７２】
【表４】
0004757406.tif 000005
【００７３】
マルチバッファモードにおいてＣＰＵ１１０がGXコマンドの書込を終了すると、ＦＩＦＯは新たなＦＩＦＯに切り換える前に「セーブ」されなければならない。次に例示する関数がＣＰＵのＦＩＦＯを「セーブ」する。
【００７４】
【表５】
0004757406.tif 000006
【００７５】
ＦＩＦＯがセーブされると、ＣＰＵの書込収集バッファ１１１がフラッシュされてすべてのグラフィクスコマンドが主メモリ１１２へ書き込まれる。さらに、現在のＦＩＦＯのリードおよびライトポインタがGXFifoObj の構造子中にストアされる。
【００７６】
グラフィクスプロセサ１１４のためにはセーブ関数はないということに留意されたい。グラフィクスプロセサが付属されると、グラフィクスコマンドは
・ＦＩＦＯがエンプティになる、
・ＦＩＦＯ中断点に遭遇する、あるいは
・ＧＰが先に獲得される
まで読み出され続ける。
ＦＩＦＯステータス
次の例示の関数はＦＩＦＯおよびＧＰ（グラフィクスパイプライン）のステータスを読み出すために使用され得る。
【００７７】
【表６】
0004757406.tif 000007
【００７８】
GXGetFifoStatus は特定のＦＩＦＯのステータスを獲得する。もし、ＦＩＦＯが現在ＣＰＵ１１０に付属されていると、パラメータcpu_writeはGX_TRUEである。ＦＩＦＯが現在グラフィクスプロセサ１１４に付属されていると、パラメータgp_readはGX_TRUEである。ＦＩＦＯがＣＰＵ１１０もしくはグラフィクスプロセサ１１４のいずれかに付属されているとき、ステータスはハードウェアの状態から直接に読み取られる。ＦＩＦＯが付属されていなければ、ステータスはGXFifoObj から読み出される。GXGetFifoStatus は特定されたＦＩＦＯがオーバフローしたかあるいはそこへの書込に十分な部屋(room)を有するかを報告する。一般的に、ハードウェアはＦＩＦＯがオーバフローしたこと、すなわちデータの量がＦＩＦＯのサイズを超えたことを検出することはできない。
【００７９】
ＦＩＦＯのオーバフローを検出する一般的な方法はないけれども、ハードウェアは、ＣＰＵライトポインタがＦＩＦＯの先頭に達したことを検出することができる。この状態が生じると、「fifowrap」の引数(argument)がGX_TRUEにリターンする。この「fifowrap」の引数は、もしＣＰＵのライトポインタが常にＦＩＦＯのベースに初期化されるとすると、ＦＩＦＯのオーバフローを検出するために使用され得る。「fifowrap」は、ＦＩＦＯが現在ＣＰＵ１１０に付属されていれば、セットされる。
【００８０】
GXGetGPStatus はグラフィクスプロセサ１１４のステータスを（それに付属されているＦＩＦＯに拘わらず）を取り込むために使用され得る。新たなグラフィクスプロセサのＦＩＦＯを付属させる前に必要な最小限の条件はグラフィクスプロセサ１１４がアイドル状態(idle)になるのを待つことである（しかし付加的な制約が存在する）。アンダーフローおよびオーバフローのステータスはライトポインタがハイウォータマークおよびローウォータマークに関連する場所を示す。
ＦＩＦＯのフロー制御
ＦＩＦＯがＣＰＵおよびグラフィクスプロセサの両方に付属されているとき（中間モード）、ＦＩＦＯがフルになり過ぎたときにはＣＰＵがコマンドの書込を停止するように注意しなければならない。「ハイウォータマーク」はグラフィクスコマンドがもはやＦＩＦＯへ書き込めなくなるであろう前に如何にＦＩＦＯのフルを取り込むかを規定する。好ましい実施例においては、ＣＰＵ内に１６Ｋバイトまでのグラフィクスコマンドがバッファリングされ得て、そのためにハイウォータマークを（ＦＩＦＯのサイズ−１６Ｋバイト）に設定することが望ましい。
【００８１】
ハイウォータマークに遭遇すると、プログラムは中断されるが、オーディオのような他の割込駆動タスクは作動する。プログラマはマルチスレッドプログラムにおいてどの具体的なスレッドが中断されるべきであるかを特定することを望む。
【００８２】
「ローウォータマーク」はプログラム（またはスレッド）が継続できる前に「ハイウォータマーク」に達した後にＦＩＦＯのエンプティを取り込まなければならない。ローウォータマークは（ＦＩＦＯのサイズ／２）に設定されることが望ましい。新たなコマンドデータの量がハイウォータマークに接近して留まっているときにプログラムが何らかのレジスタをポーリングしたり定常的にオーバフロー割込を受け付ける必要がないので、このローウォータマークはプログラムにおける頻繁な状況の切換を防止する。
【００８３】
マルチバッファモードにおいては、ハイおよびローウォータマークはディスエーブルされる。ＦＩＦＯがＣＰＵ１１０へ付属されていてＣＰＵがＦＩＦＯが保持できるより以上のコマンドを書き込むときに、ライトポインタは最終アドレスからベースアドレスへラップされ戻される。ＦＩＦＯにある先のグラフィクスコマンドは上書きされる。ライトポインタがＦＩＦＯの先頭へラップするときを検出することはできる（それは、コマンドが送られる前にＦＩＦＯのライトポインタがＦＩＦＯのベースに初期化されている場合に限ってオーバフローを示す）。上で述べたGXGetFifoStatus を参照のこと。
【００８４】
マルチバッファモードにおいてＦＩＦＯ（バッファ）のオーバフローを防止するために、ソフトウェアベースでチェックする方法が使用され得る。主プロセサ１１０上で実行中のプログラムはバッファサイズのそれ自身のカウンタを保持しなければならず、そして任意のグループのコマンドがバッファへ付加される前に、プログラムは部屋があるかどうかをチェックして判断する。もし部屋が利用可能であれば、グループのサイズがバッファサイズへ加えられ得る。もし部屋が利用可能でなければ、バッファはフラッシュされて新たなものが割り付けられる。表示リストコールの使用
好ましい実施例においてＦＩＦＯバッファ２１０から表示リストをコールするために、アプリケーションはまず、表示リストをストアするためのメモリ中のスペースを割り付ける。メモリエリアが一旦セットアップされると、アプリケーションは、たとえば次のものをコールする。
【００８５】
【表７】
0004757406.tif 000008
【００８６】
「リスト」の引数が表示リストがストアされる位置の開始アドレスであり、「サイズ」の引数が表示リストコマンドを書き込むための割り付けられたスペースにおいて利用可能なバイト数を示す場合、システムがオーバフローをチェックすることができる。
【００８７】
「GXBeginDisplayList」が一旦コールされると、別のGXコマンドが通常のコマンドＦＩＦＯに代わって表示リストへ書き込まれる。「GXEndDisplayList」コマンドは表示リストの終了へ信号を送り、先に向けられていたＦＩＦＯへコマンドストリームをリターンさせる。「GXEndDisplayList」コマンドはまた、生成された表示リストの実際のサイズを、好ましい実施例においては３２バイトの倍数としてリターンする。
【００８８】
実施例において、表示リストは入れ子(nest)されることはない。このことは、GXBeginDisplayListが一旦発行されると、GXEndDisplayListコマンドがやって来るまでに他のGXBeginDisplayListまたはGXCallDisplayList コマンドを発行することは違法であることを意味する。しかしながら、別の実施例においては、任意の所望の入れ子レベルに表示リストを入れ子することはできる。
グラフィクスＦＩＦＯ関数の例
以下に例示する関数はグラフィクスＦＩＦＯの管理を提供する。
【００８９】
【表８】
0004757406.tif 000009
【００９０】
グラフィクスＦＩＦＯの制限を設定する。この関数は初期化時にコールされる。ＦＩＦＯアドレスはグラフィクスパイプラインがフラッシュされない限り変更されることはない。SetDefaultのフラグがセットされると、ＦＩＦＯはリセットされ（すなわち、リード／ライトポインタをＦＩＦＯのベースへ）、そして割込がディスエーブルされる。デフォルトによって、ハイウォータマークがサイズの２／３に設定され、ローウォータマークがサイズの１／３に設定される。
【００９１】
【表９】
0004757406.tif 000010
【００９２】
この関数はＦＩＦＯの制限をセットする。リードポインタがローウォータマーク以下になったときもしくはライトポインタがハイウォータマーク以上になったとき、グラフィクスハードウェアはＣＰＵへ割込をかける。RdBreakMark がリードポインタ中断点を設定するために使用される。
【００９３】
【表１０】
0004757406.tif 000011
【００９４】
ＦＩＦＯに関連する割込をイネーブルしもしくはディスエーブルする。BreakPointは、先のフレームがまだコピーされているときにＣＰによってＦＩＦＯの読出をフォールトするために使用され得る。
【００９５】
【表１１】
0004757406.tif 000012
【００９６】
保留中の割込をクリアする。
【００９７】
【表１２】
0004757406.tif 000013
【００９８】
ＦＩＦＯリードおよびライトポインタをセットする。これらのポインタはハードウェアによって維持される。この関数はハードウェア値を無視する（たとえば、表示リストのコンパイルのために）。
【００９９】
【表１３】
0004757406.tif 000014
【０１００】
ＦＩＦＯのステータスおよびカウントをリターンする。
表示リスト関数の例
表示リストは予めコンパイルされたコマンドのアレイであり、グラフィクスパイプラインのためのデータである。次に例示するコマンドは表示リストを操作するためにＦＩＦＯバッファ２１０中へ挿入される。
【０１０１】
【表１４】
0004757406.tif 000015
【０１０２】
この関数は表示リストを生成しかつ開始させる。ＡＰＩは表示リストモードにされる。これに後続するすべてのＡＰＩ関数は、表示リスト関数の任意のものを除いて、EndDisplayListまでコールし、グラフィクスパイプラインに代わって表示リストバッファへそれらのデータおよびコマンドを送る。表示リストはこの実施例においては入れ子されない。すなわち、BeginDisplayListおよびEndDisplayListの間ではどんな表示リスト関数もコールされることはない。表示リストのためのメモリはアプリケーションによって割り付けられる。
【０１０３】
【表１５】
0004757406.tif 000016
【０１０４】
この関数は現在開かれている表示オブジェクトを終了させ、システムを中間モードに戻す。
【０１０５】
【表１６】
0004757406.tif 000017
【０１０６】
この関数は表示リストを実行する。
レジスタフォーマット
次のテーブルはＣＰＵ１１０によってアドレス可能なコマンドプロセサ２００における例示的なレジスタを示す。
【０１０７】
【表１７】
0004757406.tif 000018
【０１０８】
互換性のある他の実施例
上述のシステム５０のあるものは上で述べた家庭用ビデオゲームコンソールの構成以外としても実現できる。たとえば、或るものは、システム５０をエミュレートする異なる構成を有するプラットフォームもしくはそれと同等のものにおいて、システム５０のために書かれたグラフィクスアプリケーションや他のソフトウェアを実行させることができる。もし、他のプラットフォームがシステム５０のいくつかのもしくはすべてのハードウェアおよびソフトウェアリソースをエミュレートしシミュレートしおよび／または提供することができれば、その他のプラットフォームはそのソフトウェアを成功裏に実行することができる。
【０１０９】
一例として、エミュレータがシステム５０のハードウェアおよび／またはソフトウェア構成（プラットフォーム）とは異なるハードウェアおよび／またはソフトウェア構成（プラットフォーム）を提供できる。そのエミュレータシステムは、それのためにアプリケーションソフトウェアが書かれているシステムのいくつかのもしくはすべてのハードウェアおよび／またはソフトウェアコンポーネンツをエミュレートしもしくはシミュレートするソフトウェアおよび／またはハードウェアコンポーネンツを含む。たとえば、エミュレータシステムはパソコンのような汎用ディジタルコンピュータを含み、それはシステム５０のハードウェアおよび／またはファームウェアをシミュレートするソフトウェアエミュレータプログラムを実行する。上述のオーディオシステムのＤＳＰ処理がパソコンによってエミュレートされ得る。
【０１１０】
或る汎用ディジタルコンピュータ（たとえばＩＢＭやマッキントッシュのパソコンおよびそれらの同等物）は、ダイレクトＸ(DirectX)または他の標準的な３ＤグラフィクスコマンドＡＰＩｓに従った３Ｄグラフィクスパイプラインを提供する３Ｄグラフィクスカードを備える。それらはまた、音声コマンドの標準的なセットに基づいて高品質のステレオ音声を提供するステレオ音声カードを備える。エミュレータソフトウェアを実行するそのようなマルチメディアのハードウェアを備えるパソコンは、システム５０のグラフィクスおよび音声性能とほぼ等しい十分な性能を有する。エミュレータソフトウェアはパソコンプラットフォーム上のハードウェアリソースを制御して、それのためにゲームプログラマがゲームソフトウェアを書いた家庭用ビデオゲームコンソールプラットフォームの処理，３Ｄグラフィクス，音声，周辺および他の能力をシミュレートする。
【０１１１】
図１４はホストプラットフォーム１２０１，エミュレータコンポーネント１３０３および記憶媒体６２上のゲームソフトウェア実行可能バイナリ映像を用いる全体のエミュレーション処理を図解する。ホスト１２０１は、たとえばパソコン，ビデオゲームコンソールあるいは十分な計算力を有する任意の他のプラットフォームのような汎用または特定目的ディジタル計算装置である。エミュレータ１３０３はそのホストプラットフォーム１２０１上で走るソフトウェアおよび／またはハードウェアであり、記憶媒体６２からのコマンド，データおよび他の情報のそのホスト１２０１によって実行可能な形態へのリアルタイム変換を行う。たとえば、エミュレータ１３０３は記憶媒体６２からシステム５０によって実行されるように意図された「ソース」であるバイナリ映像プログラム命令を取り込み、これらのプログラム命令をホスト１２０１によって実行されもしくは処理され得るターゲットとなる形態に変換する。
【０１１２】
一例として、ソフトウェアがＩＢＭパワーＰＣまたは他の特定のプロセサを用いるプラットフォーム上での実行のために書かれかつホスト１２０１が異なる（たとえばインテル）プロセサを用いるパソコンである場合、エミュレータ１２０３は記憶媒体１３０５からの１つのもしくは一連のバイナリ映像プログラム命令を取り込み、これらのプログラム命令を１つまたはそれ以上の同等のインテルのバイナリ映像プログラム命令に変換する。エミュレータ１２０３はまたグラフィクス／オーディオプロセサ１１４によって処理されるように意図されたグラフィクスコマンドおよびオーディオコマンドを取り込みかつ／あるいは生成し、そしてホスト１２０１上で利用可能なハードウェアおよび／またはソフトウェアグラフィクス／オーディオ処理リソースによって処理され得る形態にこれらのコマンドを変換する。一例として、エミュレータ１３０３はホスト１２０１の特別なグラフィクスおよび／または音声ハードウェア（たとえば標準的なダイレクトＸ，オープンＧＬおよび／または音声ＡＰＩｓ）によって処理され得るコマンドにこれらのコマンドを変換する。
【０１１３】
システム５０の或るエミュレータは、上で述べたバッファリングおよびフロー制御技術のいくつかもしくはすべてを単に「無視」する。なぜなら、エミュレータは上で述べた実施例のハードウェア構成より非常に多いメモリリソースを持たなければならないからである。そのようなエミュレータは、典型的には、割付メモリリソースによるバッファ割付のための要求に応答するが、異なるフロー制御処理を提供するであろう。上で述べたステータスおよびフロー制御要求は、ハードウェアのエミュレートされた状態を維持しそのステータス要求に応答するためにその状態を使用することによってエミュレートされ得る。
【０１１４】
上で述べたビデオゲームシステムの特徴のいくつかあるいはすべてを提供するために使用されるエミュレータ１３０３は、グラフィクスユーザインタフェース（ＧＵＩ）を備え、そのＧＵＩはエミュレータを使ったゲームの実行のための種々の動作やスクリーンモードの選択を単純化しもしくは自動化する。一例において、そのようなエミュレータ１３０３はさらに、ソフトウェアがそれのために元々意図されていたホストプラットホームに比べて増強された機能性を含む。
【０１１５】
図１５はエミュレータ１３０３で用いるに適したエミュレーションホストシステム１２０１を図解的に示す。このシステム１２０１は処理ユニット１２０３およびシステムメモリ１２０５を含む。システムバス１２０７がシステムメモリ１２０５を含む種々のシステムコンポーネンツを処理ユニット１２０３に結合する。システムバス１２０７は多様なバスアーキテクチャのいずれかを用いるメモリバスもしくはメモリコントローラ，周辺バスおよびローカルバスを含むいくつかのタイプのバス構造の任意のものである。システムメモリ１２０７はＲＯＭ１２５２およびＲＡＭ１２５４を含む。起動中においてのようにパソコンシステム１２０１中のエレメント（要素）間に情報を伝送する手助けをする基本ルーチンを含む基本入力／出力システム（ＢＩＯＳ）１２５６がＲＯＭ１２５２中にストアされる。システム１２０１はさらに種々のドライブおよび関連のコンピュータ読出可能な媒体を含む。ハードディスクドライブ１２０９が（典型的には固定の）磁気ハードディスク１２１１から読み出しそれへ書き込む。付加的な（たぶんオプションとしての）磁気ディスクドライブ１２１３が着脱可能な「フロッピィ」または他の磁気ディスク１２５１から読み出しかつそれへ書き込む。光ディスクドライブ１２１７はＣＤ−ＲＯＭあるいは他の光学媒体のような着脱自在な光ディスク１２１９から読み出しかつそれへ書き込む。ハードディスクドライブ１２０９および光ディスクドライブ１２１７は、ハードディスクドライブインタフェース１２２１および光ディスクドライブインタフェース１２２５によって、システムバス１２０７にそれぞれ接続される。これらのドライブおよびその関連するコンピュータ読出可能な媒体は、パソコンシステム１２０１のためのコンピュータ読出可能な命令，データ構造，プログラムモジュール，ゲームプログラムおよび他のデータの不揮発性の記憶媒体を提供する。他の構成では、コンピュータによってアクセス可能なデータをストアすることができる他のタイプのコンピュータ読出可能な媒体（たとえば磁気カセット，フラッシュメモリカード，ディジタルビデオディスク，ベルヌーイカートリッジ，ＲＡＭ，ＲＯＭあるいはその他のもの）がまた使用できる。
【０１１６】
エミュレータ１３０３を含む多数のプログラムモジュールがハードディスク１２１１，着脱可能な磁気ディスク１２１５，光ディスク１２１９および／またはシステムメモリ１２０５のＲＯＭ１２５２および／またはＲＡＭ１２５４にストアされ得る。このようなプログラムモジュールはグラフィクス／音声ＡＰＩｓ，１つ以上のアプリケーションプログラム，他のプログラムモジュール，プログラムデータおよびゲームデータを提供するオペレーティングシステム（ＯＳ）を含む。ユーザは、キーボード１２２７，ポインティングデバイス１２２９，マイクロフォン，ジョイスティック，ゲームコントローラ，衛星アンテナ(satellite dish)，スキャナあるいはその他のもののような入力デバイスを通して、パソコンシステム１２０１にコマンドおよび情報を入力することができる。これらのそして他の入力デバイスは、システムバス１２０７に結合されたシリアルポートインタフェース１２３１を通して処理ユニット１２０３に接続され得るが、パラレルポート，ゲームポートファイヤワイヤバス(Fire Wire)もしくはユニバーサルシリアルバス（ＵＳＢ）のような他のインタフェースによって接続されてもよい。モニタまたは他のタイプの表示デバイスがまたビデオアダプタ１２３５のようなインタフェースを介してシステムバス１２０７に接続される。
【０１１７】
システム１２０１はモデム１１５４またはインターネットのようなネットワーク１１５２を通しての通信を確立するための他のネットワークインタフェース手段を含む。内蔵もしくは外付けであってよいモデム１１５４はシリアルポートインタフェース１２３１を介してシステムバス１２３に接続される。システム１２０１がローカルエリアネットワーク１１５８を介して遠隔コンピュータ装置１１５０（たとえば他のシステム１２０１）と通信するのを許容するために、ネットワークインタフェース１１５６がまた設けられてもよい（もしくはそのような通信はダイヤルアップもしくは他の通信手段のようなワイドエリアネットワーク１１５２もしくは他の通信経路を介してもよい）。システム１２０１はプリンタのような周辺出力装置および他の標準的な周辺装置を含む。
【０１１８】
一例では、ビデオアダプタ１２３５は、マイクロソフト(Microsoft)のダイレクトＸ７．０、または他のバージョンのような標準的な３Ｄグラフィクスアプリケーションプログラマインタフェースに基づいて発行された３Ｄグラフィクスコマンドに応答して、高速の３Ｄグラフィクスレンダリングを提供する３Ｄグラフィクスパイプラインチップセットを含んでもよい。１組のスピーカ１２３７はまた、バス１２０７によって与えられる音声コマンドに基づいて高品質ステレオ音声を生成するハードウェアおよび埋め込みソフトウェアを提供する従来の「音声カード」のような音声生成インタフェースを介して、システムバス１２０７に接続される。これらのハードウェア能力によって記憶媒体１３０５中にストアされているソフトウェアを再生するためにシステム１２０１に十分なグラフィクスおよび音声の速度性能を与えることができる。
【０１１９】
上で参照したすべての書類をここで、参照によって取り入れる。
【０１２０】
最も現実的かつ好ましい実施例であると現在考えられているものに関連してこの発明が説明されたが、この発明は開示された実施例に限定されるものではなく、逆に、特許請求の範囲内に含まれる種々の変形例や等価的な構成をカバーするように意図されていることを理解されたい。
【図面の簡単な説明】
【図１】図１はインタラクティブコンピュータグラフィクスシステムの実施例を示す全体図である。
【図２】図２は図１実施例のコンピュータグラフィクスシステムのブロック図である。
【図３】図３は図２に示す実施例のグラフィクス／オーディオプロセサのブロック図である。
【図４】図４は図３に示す実施例の３Ｄグラフィクスプロセサのブロック図である。
【図５】図４のグラフィクス／オーディオプロセサの例示的なロジックフロー図である。
【図６】図６はマルチバッファリングの例を示す。
【図７】図７は独立した消費器および発生器のリードならびにライトポインタの例を示す。
【図８】図８はエンプティおよびフルバッファ状態の例を示す。
【図９】図９はエンプティおよびフルバッファ状態の例を示す。
【図１０】図１０はＦＩＦＯバッファからの表示リストのコールの例を示す。
【図１１】図１１は表示リスト作成例を示す。
【図１２】図１２は表示リスト作成例を示す。
【図１３】図１３は表示リスト作成例を示す。
【図１４】図１４はＦＩＦＯ管理の実施例を示す。
【図１５】図１５は互換性のある実施例を示す。
【図１６】図１６は別の互換性のある実施例を示す。
【符号の説明】
５０  …インタラクティブ３Ｄコンピュータグラフィクスシステム
５４  …主ユニット
１１０  …主プロセサ
１１１  …書込収集バッファ
１１２  …主メモリ
１１４  …グラフィクス／オーディオプロセサ
１８０  …グラフィクスパイプライン
２００  …キャッシュ／コマンドプロセサ
２１０  …グラフィクスコマンドＦＩＦＯ
２１２  …表示リスト
８０２  …発生器ライトポインタ
８０４  …発生器リードポインタ
８０６  …消費器ライトポインタ
８０８  …消費器リードポインタ
８９０  …中断点
【図１】
0004757406.tif 000019
【図２】
0004757406.tif 000020
【図３】
0004757406.tif 000021
【図４】
0004757406.tif 000022
【図５】
0004757406.tif 000023
【図６】
0004757406.tif 000024
【図７】
0004757406.tif 000025
【図８】
0004757406.tif 000026
【図９】
0004757406.tif 000027
【図１０】
0004757406.tif 000028
【図１１】
0004757406.tif 000029
【図１２】
0004757406.tif 000030
【図１３】
0004757406.tif 000031
【図１４】
0004757406.tif 000032
【図１５】
0004757406.tif 000033
【図１６】
0004757406.tif 000034