| 【発明の名称】 |
グラフィクスシステム |
| 【発明者】 |
【氏名】ファーハッド フォーラディ
【氏名】ロバート ムーア
|
| 【要約】 |
【課題】グラフィクスコマンド発生器とグラフィクスコマンド消費器との間でグラフィクスコマンドを効率的にバッファリングする技術を提供する。
【解決手段】グラフィクスシステムは3DグラフィクスパイプラインおよびオーディオDSPを含むグラフィクス/オーディオプロセサを備える。主メモリ112の一部を割り付けることによって、可変数、可変サイズのグラフィクスコマンドバッファ812を設ける。グラフィクスFIFOへの全ての書き込みが主メモリ112中のバッファに送られる。発生器および消費器は独立して自身のリードおよびライトポインタ802,808を維持する。消費器はバッファ内のデータの有効位置をトラッキングするためにライトポインタ808を使用する。発生器は、バッファへ、消費器がメモリのどこかへストアされている一連のグラフィクスコマンドを読み出しかつその後バッファの残りを読み出すようにリードコマンドを書き込む。 |
【特許請求の範囲】
【請求項1】グラフィクスコマンドを出力する発生器、発生器によって出力されたグラフィクスコマンドを消費する消費器、および発生器および消費器の間に結合され、消費器への分配のために、発生器によって出力されたグラフィクスコマンドを受けかつ一時的にストアする少なくとも1つのバッファをストアする記憶装置を備え、発生器および消費器は前記バッファを他方とは独立してアクセスすることができる、グラフィクスシステム。 【請求項2】発生器および消費器は独立したリードおよび/またはライトポインタを有する、請求項1記載のグラフィクスシステム。 【請求項3】記憶装置はその記憶装置内の選択された位置に配置された複数のサイズ可変バッファをストアする、請求項1記載のグラフィクスシステム。 【請求項4】記憶装置は各々が発生器および/または消費器によって独立してアクセスされ得る複数のバッファをストアする、請求項1記載のグラフィクスシステム。 【請求項5】消費器は、複数のバッファの少なくともアクティブな1つへ書き込みすることができないが、その複数のバッファの少なくとも前記アクティブな1つのためのライトポインタを発生器とは独立して維持する、請求項4記載のグラフィクスシステム。 【請求項6】消費器は発生器がアクティブなバッファへ書き込んだことに応答して消費器ライトポインタを選択的にインクリメントする、請求項2記載のグラフィクスシステム。 【請求項7】発生器は前記複数のバッファの第1のバッファに関連する発生器リードポインタおよび発生器ライトポインタを与え、消費器は前記複数のバッファの前記第1バッファに関連する消費器リードポインタおよび消費器ライトポインタを独立して維持する、請求項4記載のグラフィクスシステム。 【請求項8】消費器は、その消費器がアクティブなバッファから読み出すことに応じて消費器リードポインタをインクリメントし、そのインクリメントした消費器リードポインタが消費器ライトポインタと所定の関係を有するとき、アクティブなバッファからの読出を中断する、請求項6記載のグラフィクスシステム。 【請求項9】複数のバッファの第1バッファは、発生器が記憶装置内のどこかへストアしたグラフィクスコマンドのセットを消費させかつどこかにストアされたそのグラフィクスコマンドを消費した後にはその第1バッファからのグラフィクスコマンドの消費を再開させるように、消費器を制御するリードコマンドを含む、請求項4記載のグラフィクスシステム。 【請求項10】リードコマンドは、表示リストの開始アドレスと長さとを特定し、その特定した開始アドレスで始まる特定した長さの表示リストを読み出すように消費器を制御する、請求項9記載のグラフィクスシステム。 【請求項11】バッファは循環的な先入れ先出し(FIFO)アクセスを与える、請求項1記載のグラフィクスシステム。 【請求項12】バッファは直線的な先入れ先出し(FIFO)アクセスを与える、請求項1記載のグラフィクスシステム。 【請求項13】バッファは発生器および消費器の両方へ同時に選択的に付属され得る、請求項1記載のグラフィクスシステム。 【請求項14】バッファは発生器に付属され、別のバッファが消費器に付属される、請求項1記載のグラフィクスシステム。 【請求項15】バッファはまず発生器に付属され、次いで、発生器から離されかつ消費器に付属される、請求項1記載のグラフィクスシステム。 【請求項16】バッファは発生器、消費器、またはその両方へ付属され得る、請求項1記載のグラフィクスシステム。 【請求項17】1つのバッファだけが一度に発生器に付属される、請求項1記載のグラフィクスシステム。 【請求項18】1つのバッファだけが一度に消費器に付属される、請求項1記載のグラフィクスシステム。 【請求項19】バッファは16Kバイトの最大サイズを有する、請求項1記載のグラフィクスシステム。 【請求項20】発生器はバッファのサイズをセットする、請求項1記載のグラフィクスシステム。 【請求項21】バッファはグラフィクスコマンドのフレームをストアするために動的にサイズを決められる、請求項1記載のグラフィクスシステム。 【請求項22】発生器は、バッファ開始アドレスおよびバッファ長を特定するグラフィクスバッファ初期化コマンドを発行することによってバッファを宣言する、請求項1記載のグラフィクスシステム。 【請求項23】バッファは32バイトの倍数である長さを有しかつ64Kバイトの最小サイズを有する、請求項1記載のグラフィクスシステム。 【請求項24】発生器はバッファに中断点を書き込み、消費器はその中断点への遭遇に応じてグラフィクスコマンドの消費を中断する、請求項1記載のグラフィクスシステム。 【請求項25】バッファは、発生器がバッファ内の位置に上書きしたときを示すオーバフローステータス表示器を有する、請求項1記載のグラフィクスシステム。 【請求項26】さらに、バッファのステータスを示すハードウェアステータスレジスタを備える、請求項1記載のグラフィクスシステム。 【請求項27】ステータスレジスタは、バッファフルおよびバッファエンプティに関連する発生器ライトポインタの位置;バッファオーバフロー;発生器が現在バッファへ書き込んでいるかどうか;および消費器が現在バッファから読み出しているかどうかのパラメータを含む、請求項26記載のグラフィクスシステム。 【請求項28】さらに、バッファに結合され、書込が読出を追い越すのを防止するために、フロー制御ロジックを与えるハードウェアコントローラを備える、請求項1記載のグラフィクスシステム。 【請求項29】さらに、バッファに結合され、リードおよびライトポインタを最後の位置から最初の位置へラップするハードウェアコントローラを備える、請求項1記載のグラフィクスシステム。 【請求項30】発生器はプロセサを含み、消費器はグラフィクスパイプラインを有するグラフィクスプロセサを含む、請求項1記載のグラフィクスシステム。 【請求項31】記憶装置は主システムメモリを含み、発生器は主システムメモリ内において前記バッファを動的に割り付ける、請求項1記載のグラフィクスシステム。 【請求項32】グラフィクスコマンドを受けかつ一時的にストアする記憶バッファ、前記バッファ内へグラフィクスコマンドを書き込み、バッファに関連する発生器ライトポインタおよび発生器リードポインタを維持する発生器、および発生器ライトポインタとは独立した消費器ライトポインタおよび発生器リードポインタとは独立した消費器リードポインタを維持し、バッファ内にストアされているグラフィクスコマンドを消費する消費器を備える、グラフィクスシステム。 【請求項33】消費器は消費器がバッファから消費するたび毎に消費器リードポインタをインクリメントし、消費器リードポインタが消費器ライトポインタと所定の関係を有するときバッファからの消費を中断する、請求項32記載のグラフィクスシステム。 【請求項34】消費器は発生器がバッファへ書込を行ったことに応答して消費器ライトポインタを選択的に自動的にインクリメントする、請求項32記載のグラフィクスシステム。 【請求項35】発生器は、消費器が発生器のバッファへの書込に応答して消費器ライトポインタを自動的にインクリメントすべきかどうかを特定する構成コマンドを消費器に送る、請求項32記載のグラフィクスシステム。 【請求項36】発生器ライトポインタに基づいてバッファ中へグラフィクスコマンドを書き込むグラフィクスコマンド発生器と、消費器リードポインタに基づいてバッファからグラフィクスコマンドを読み出すグラフィクスコマンド消費器とを含むグラフィクスシステムにおいて、消費器によって消費器ライトポインタが独立的に維持され、その消費器ライトポインタは発生器が前記バッファ中へ書き込んだ有効データの範囲を示し、消費器は消費器リードポインタが消費器ライトポインタに対して所定の関係を有することに応答してバッファからのグラフィクスコマンドを消費することを中止するようにしたことを特徴とする、グラフィクスシステム。 【請求項37】アプリケーションを実行するプロセサモジュール、グラフィクスプロセサモジュール、およびプロセサモジュールおよびグラフィクスプロセサモジュールに結合された少なくとも1つのメモリを含むインタラクティブなグラフィクスシステムにおいて、プロセサモジュールとグラフィクスプロセサモジュールとの間のグラフィクスコマンドのフローを制御する方法であって、アプリケーションの制御の下で、メモリ中の可変数のFIFOバッファを動的に確立し、そのアプリケーションがFIFOバッファの各々のサイズを特定し、アプリケーションは、複数のFIFOバッファの少なくとも第1のFIFOバッファ中にグラフィクスコマンドを書き込むようにプロセサモジュールを制御し、そしてアプリケーションは、グラフィクスプロセサモジュールが前記プロセサの書込とは独立して第1のFIFOバッファからグラフィクスコマンドを読み出すのを制御するグラフィクスコマンドをグラフィクスプロセサモジュールに送る、方法。 【請求項38】プロセサモジュールは複数の第1のバッファに関連するプロセサモジュールリードポインタおよびプロセサモジュールライトポインタを与え、そしてグラフィクスプロセサモジュールは前記第1のバッファに関連するグラフィクスプロセサモジュールリードポインタおよびグラフィクスプロセサモジュールライトポインタを独立して維持する、請求項37記載の方法。 【請求項39】グラフィクスプロセサモジュールはグラフィクスプロセサモジュールが第1のバッファから読み出すたび毎にグラフィクスプロセサモジュールリードポインタをインクリメントし、グラフィクスプロセサモジュールリードポインタがグラフィクスプロセサモジュールライトポインタと所定の関係を有するとき第1のバッファからの読出を中断する、請求項37記載の方法。 【請求項40】グラフィクスプロセサモジュールは、プロセサモジュールが第1のバッファへ書き込むことに応答してグラフィクスプロセサモジュールライトポインタを選択的に自動的にインクリメントする、請求項37記載の方法。 【請求項41】グラフィクスプロセサモジュールは、プロセサモジュールとは独立して、複数のバッファの少なくともアクティブな1つのためのライトポインタを維持する、請求項37記載の方法。 【請求項42】さらに、中断点を設定し、そしてグラフィクスプロセサモジュールがその中断点に遭遇することに応答してグラフィクスプロセサモジュールがバッファを読み出すのを少なくとも一時的に中断するようにした、請求項37記載の方法。 【請求項43】選択的な制御ステップは、オーバフローの検出に応答してプロセサモジュールがバッファへ書き込むのを中断させるステップを含む、請求項37記載の方法。 【請求項44】グラフィクスデータのフローを制御する方法であって、グラフィクスデータを各々が複数の記憶位置を有する複数のサイズ可変FIFOバッファへ書き込むステップ、複数の記憶位置の少なくとも1つに関連する中断点を設定するステップ、所定の順序で複数のバッファからグラフィクスデータを読み出すステップ、中断点に関連する少なくとも1つの記憶位置への遭遇に応答して読出ステップを一時的に中断して割り込みを発生するステップ、および割り込みクリアコマンドの受信に応答して読出ステップを再開するステップを含む、方法。 【請求項45】再開ステップは中断点ディスエーブルコマンドの受信に応答して行われる、請求項44記載の方法。 【請求項46】書込ステップは、第1イメージフレームに対応するグラフィクスデータをバッファの第1部分へ書き込むステップ、および第2イメージフレームに対応するグラフィクスデータをバッファの第2部分へ書き込むステップを含み、そして設定ステップは第1および第2バッファ部分を分離する位置に関連して中断点を設定するステップを含む、請求項44記載の方法。 【請求項47】所定順序は先入れ先出し(FIFO)である、請求項44記載の方法。 【請求項48】書込ステップは汎用処理ハードウェアによって行われ、読出ステップは特定目的グラフィクスハードウェアによって行われる、請求項44記載の方法。 【請求項49】読出ステップおよび書込ステップは実質的に同時に行われる、請求項44記載の方法。 【請求項50】書込ステップは読出ステップが開始する前に完了する、請求項44記載の方法。 【請求項51】再開された読出ステップは、別の中断点に遭遇するか、バッファがエンプティになるかあるいはグラフィクスデータによって表されるイメージフレームが異常終了するまで継続する、請求項44記載の方法。 【請求項52】さらに、バッファのステータスを表示するステップを含む、請求項44記載の方法。 【請求項53】ステータス表示ステップは、バッファフルおよびバッファエンプティに関連するライトポインタの位置;バッファオーバフロー;書込ステップがアクティブであること;コマンド処理がアイドル状態であるかどうか;および読出ステップがアクティブであることの、パラメータの少なくとも3つを表示する、請求項52記載の方法。 【請求項54】書込ステップはバッファを循環的に書き込むステップを含み、読出ステップはバッファを循環的に読み出すステップを含む、請求項44記載の方法。 【請求項55】グラフィクスコマンドを受けかつそれを一時的にストアする記憶装置、前記記憶装置中のどこかにストアされているグラフィクスコマンドの第1セットおよびグラフィクスコマンドの第2セットを参照するコマンドを含むコマンドを前記記憶装置中のバッファへ書き込む発生器、およびバッファ中にストアされているグラフィクスコマンドの第1セットを消費し、参照コマンドに遭遇したことに応答して、それによって参照されたグラフィクスコマンドの第2セットを消費し、その後バッファからの付加的なコマンドを消費するためにバッファへリターンする消費器を備える、グラフィクスシステム。 【請求項56】バッファは循環バッファである、請求項55記載のグラフィクスシステム。 【請求項57】参照コマンドは表示リストの開始アドレスを特定し、その参照コマンドはその特定された開始アドレスで開始する表示リストを読み出すように消費器を制御する、請求項55記載のグラフィクスシステム。 【請求項58】参照コマンドは消費器が消費すべきデータユニットの数を特定する、請求項55記載のグラフィクスシステム。 【請求項59】消費器はバッファへの書込はできないが、発生器とは独立してバッファのためのライトポインタを維持する、請求項55記載のグラフィクスシステム。 【請求項60】グラフィクスシステムにおいて、グラフィクスコマンドの発生器からのグラフィクスコマンドをグラフィクスコマンドの消費器へ送る方法であって、発生器および消費器に結合されたメモリ中の可変位置に配置された複数のサイズ可変バッファを作り、サイズ可変バッファへ発生器によって発生されたグラフィクスコマンドを一時的にストアし、発生器とは独立してバッファをアクセスすることによってサイズ可変バッファからのグラフィクスコマンドを消費器によって消費し、そして消費されたグラフィクスコマンドの少なくとも一部に基づいてグラフィクスイメージの少なくとも一部を発生する、方法。 【請求項61】消費器は複数のバッファの少なくともアクティブな1つへ書き込むことはできず、さらに、発生器とは独立して、消費器が複数のバッファの少なくとも前記アクティブな1つのためのライトポインタを維持する、請求項60記載の方法。 【請求項62】さらに、前記複数のバッファの第1バッファに関連する発生器リードポインタおよび発生器ライトポインタを発生器によって維持し、消費器によって、独立して、前記複数のバッファの前記第1バッファに関連する消費器リードポインタおよび消費器ライトポインタを維持する、請求項60記載の方法。 【請求項63】さらに、消費器によって、アクティブなバッファから消費器が読み出すことに応じて消費器リードポインタをインクリメントし、そしてインクリメントした消費器リードポインタが消費器ライトポインタと所定の関係を有するときアクティブなバッファからの読出を中断する、請求項62記載の方法。 【請求項64】さらに、発生器がアクティブなバッファへ書き込むことに応答して選択的に消費器ライトポインタをインクリメントする、請求項63記載の方法。 【請求項65】複数のバッファの第1バッファはリードコマンドを含み、さらに、(a) リードコマンドに遭遇することに応答して、発生器が記憶装置のどこかにストアしたグラフィクスコマンドのセットを消費し、(b) どこかにストアされたグラフィクスコマンドを消費した後、第1バッファからのグラフィクスコマンドの消費を再開する、請求項60記載の方法。 【請求項66】リードコマンドは表示リストの開始アドレスおよび長さを特定し、そしてステップ(a) では特定した開始アドレスで開始する特定した長さの表示リストを読み出すように消費器を制御する、請求項65記載の方法。 【請求項67】複数のバッファの第1バッファは循環的な先入れ先出し(FIFO)アクセスを提供する、請求項60記載の方法。 【請求項68】複数のバッファの第1バッファは直線的な先入れ先出し(FIFO)アクセスを提供する、請求項60記載の方法。 【請求項69】さらに、発生器および消費器の両方へ複数のバッファのいずれかを同時に選択的に付属させる、請求項60記載の方法。 【請求項70】複数のバッファの第1バッファを発生器へ付属させ、複数のバッファの第2バッファを消費器へ付属させる、請求項60記載の方法。 【請求項71】複数のバッファの第1バッファを発生器へ付属させ、次いで、発生器から第1バッファを切り離し、第1バッファを消費器へ付属させる、請求項60記載の方法。 【請求項72】複数のバッファのいずれかを発生器へ、または消費器へ、もしくは両方へ付属させる、請求項60記載の方法。 【請求項73】複数のバッファの1つだけを一度に発生器へ付属させる、請求項60記載の方法。 【請求項74】複数のバッファの1つだけを一度に消費器へ付属させる、請求項60記載の方法。 【請求項75】イメージを発生する方法であって、バッファに関連する発生器ライトポインタおよび発生器リードポインタを維持するステップ、バッファへグラフィクスコマンドを書き込み、そしてその書込に応答して少なくともライトポインタを更新するステップ、バッファに関連して、発生器ライトポインタとは独立した消費器ライトポインタおよび発生器リードポインタとは独立した消費器リードポインタを維持するステップ、バッファ内にストアされたグラフィクスコマンドを消費し、その消費に応答して少なくともリードポインタを更新するステップ、および消費ステップに少なくとも部分的に応答してグラフィクスイメージの少なくとも一部を発生するステップを含む、方法。 【請求項76】イメージを発生する方法であって、記憶装置内のどこかにストアされたグラフィクスコマンドの第1セットおよびグラフィクスコマンドの第2セットを参照するコマンドを含むコマンドを前記記憶装置内のバッファへ書き込むステップ、バッファにストアされているグラフィクスコマンドの第1セットを消費するステップ、参照コマンドへの遭遇に応答して、グラフィクスコマンドの第2セットを消費し、その後、バッファからの付加的なコマンドを消費するように自動的にリターンするステップ、および消費されたグラフィクスコマンドの第1セットおよび第2セットに少なくとも部分的に応答してイメージの少なくとも一部を発生するステップを含む、方法。 【請求項77】グラフィクスコマンドの第2セットは表示リストを含む、請求項76記載の方法。 【請求項78】データ構造子を発生する方法であって、表示リストの開始を示す所定のコマンドを含むグラフィクスコマンドストリームをコマンドストリームバッファへ書き込むステップ、および所定のコマンドに応答して、コマンドストリームバッファからのグラフィクスコマンドストリームを表示リストバッファへ向け直すステップを含む、方法。 【請求項79】コマンドストリームバッファは先入れ先出し(FIFO)バッファを含む、請求項78記載の方法。 【請求項80】さらに、表示リストバッファからのグラフィクスコマンドストリームをコマンドストリームバッファへ向け直す別の所定のコマンドを書き込むステップを含む、請求項78記載の方法。 【請求項81】3Dグラフィクスコマンドを3Dグラフィクスコマンド消費器へ供給する方法であって、(a) 所定の記憶位置で開始するコマンドシーケンスをストアするステップ、および(b) FIFOバッファを通してコマンド消費器を所定の記憶位置へ参照させる少なくとも1つのコマンドを含むグラフィクスコマンドストリームを消費器へ供給するステップを含み、所定の記憶位置で開始するコマンドシーケンスを消費した後発生器はFIFOバッファへリターンする、方法。
|
【発明の詳細な説明】【0001】 【産業上の利用分野】この発明はコンピュータグラフィクスに関し、より特定的には、家庭用ビデオゲームプラットフォームのようなインタラクティブなグラフィクスシステムに関する。さらに特定的には、この発明は、グラフィクスコマンド発生器とグラフィクスコマンド消費器との間での効率的なグラフィクスコマンドのバッファリングに関する。 【0002】 【発明の背景および発明の概要】多くの人々はかなりリアルな恐竜,エイリアン,生き生きとしたおもちゃおよび他の空想的な動物を含む映画をかつて見たことがある。そのようなアニメーションはコンピュータグラフィクスによって可能とされた。そのような技術を用いて、コンピュータグラフィクスのアーティストは、各オブジェクトがどのように見えるべきかや時間の経過とともに外見上どのように変化すべきかを特定し、コンピュータは、そのオブジェクトをモデル化してテレビジョンやコンピュータスクリーンのようなディスプレイに表示する。コンピュータは、表示される映像の各部分を、場面中の各オブジェクトの位置や向き,各オブジェクトを照らすように見える照明の方向,各オブジェクトの表面テクスチャ,および他の要素に正確に基づいて、色付けしまた形作るために必要な多くのタスクを実行する。 【0003】コンピュータグラフィクスの生成は複雑であるので、ここ数年前のコンピュータによって生成された3次元(3D)グラフィクスは、ほとんど高価な特殊なフライトシミュレータ,ハイエンドグラフィクスワークステーションおよびスーパーコンピュータに限られていた。大衆は映画や高価なテレビコマーシャルにおいてこれらのコンピュータシステムによって生成された映像のいくつかを見たが、大部分の人はグラフィクスを生成しているコンピュータに対して実際に相互作用をさせることはできない。たとえば、Nintendo64(登録商標)や今や利用可能であるパソコン用の種々の3Dグラフィクスカードのような比較的安価な3Dグラフィクスプラットフォームの利用によって、このすべてが変わった。今や、家庭や会社の比較的安価なコンピュータグラフィクスシステム上でエキサイティングな3Dアニメーションやシミュレーションに対して相互作用を及ぼすことができる。 【0004】グラフィクスシステムの設計者が過去に直面した問題は、グラフィクスコマンド発生器とグラフィクスコマンド消費器との間でグラフィクスコマンドを如何に効率的にバッファリングするかということであった。この問題に対する種々のソリューションが提案されている。たとえば、グラフィクスコマンド発生器とグラフィクスコマンド消費器との間にバッファメモリを設けることがよく知られている。しばしば、このバッファメモリは、グラフィクスコマンド消費器の一部として(たとえば、グラフィクスチップのオンボードとして)接続される。グラフィクスコマンド発生器はグラフィクスコマンドをバッファメモリ中へ書き込み、そしてグラフィクスコマンド消費器はバッファメモリからこれらのグラフィクスコマンドを読み出す。そのようなバッファメモリのためには、典型的には、先入れ先出し(FIFO)バッファとして構成され、そのために、グラフィクスコマンド消費器は、グラフィクスコマンド発生器によってバッファ中へ書き込まれたと同じシーケンスでグラフィクスコマンドを読み出す。 【0005】発生器と消費器との間にそのようなバッファを配置することは、発生器と消費器とが同期しなければならないという程度を緩和する。発生器は、消費器がバッファからコマンドを読み出すレートとは独立したレートでバッファ中へコマンドを書き込むことができる。たとえ消費器がバッファからの読出において一時的な遅れを受けたとしても(たとえば、発生器が消費器に大きなもしくは複雑なプリミティブを引き出させようとするときに生じるかもしれない)、発生器は、発生器がバッファを満杯にしない限り、そして新たなコマンドを書き込むためのメモリスペースがなくなるまで停止することはない。同じように、新たなグラフィクスコマンドをバッファ中へ書き込む際の発生器の一時的な遅れは、発生器が追加のグラフィクスコマンドを書き込む機会を有する前にバッファ中のすべてのグラフィクスコマンドを消費器が消費しない限り、消費器を停止させることはない。 【0006】過去に遭遇した潜在的な問題は、バッファのサイズに関する。チップサイズや複雑さにおける制限のために、グラフィクスチップ上に非常に大きなコマンドバッファメモリを配置することはできない。グラフィクスハードウェア中の小さいサイズのFIFOバッファは、発生器と消費器との間の負荷バランスを適切にとれず、消費器が大きなプリミティブをレンダリングするときに発生器を停止させる。このように、過去に有意な仕事がなされたが、さらなる改良が可能である。 【0007】この発明は、グラフィクスコマンド発生器とグラフィクスコマンド消費器との間でグラフィクスコマンドをより効率的にバッファリングする技術および構成を提供することによって、この問題を解決する。この発明の局面によれば、発生器と消費器との間で共用される主メモリの一部が可変数のサイズ可変グラフィクスコマンドバッファへ割り付けられる。発生器はバッファの数や各々のサイズを特定することができる。グラフィクス消費器への書込は主メモリ中のバッファの任意のものへ送られ得る。バッファは消費器および発生器へ同時に付属させられ(attached) 得て、もしくは異なるバッファが消費器および発生器へ付属させられてもよい。異なるバッファが消費器および発生器へ付属させられるこのマルチバッファの方法においては、発生器は1つのバッファへ書き込むことができ、他方消費器は他のバッファから読み出すことができる。 【0008】消費器を発生器からさらに切り離すために、発生器および消費器は、この発明の他の局面に従って、それら自身のリードおよびライトポインタを独立的に維持する。消費器はバッファへ書き込むことはできないけれども、バッファ中の有効データの位置のトラッキングを保持するために使用するライトポインタを維持する。同じように、発生器はそれへ付属されていないバッファから読み出すことはできないが、バッファ中のデータの有効位置のトラッキングを保持するために使用するリードポインタを維持する。このポインタ構成の効果は、発生器を消費器からさらに切り離すことであり、それらの2つの間の同期化要求を減じる。 【0009】この発明によって提供される他の局面によれば、発生器は、FIFOバッファへ「表示リストコール」コマンドを書き込むことができ、このコマンドはメモリ中のどこかにストアされている一連のグラフィクスコマンド(たとえば、表示リスト)を消費器に読み出させ、そして続いて、バッファの残りの読出へリターンさせる。FIFOバッファから異種の(out-of-line) グラフィクスコマンドストリングをコールするこの能力は、付加的な柔軟性を与え、そして同期化要求をさらに減じる。 【0010】この発明の他の局面によれば、グラフィクスコマンド発生器は後続するコマンドを自動的に表示リストバッファへ向け直すコマンドを含むグラフィクスコマンドストリームを書き込むことができる。これを見えるようにする1つの方法は、グラフィクスコマンドのストリームを継続的に発生する向け直し可能な消火ホース(fire hose) としてグラフィクスコマンド発生器を想像することである。この消火ホースは通常グラフィクスコマンドをFIFOバッファへ流し込む。しかしながら、発生器は、このストリーム中に、「表示リスト開始」コマンドを含むことができ、このコマンドはそのコマンドに続くグラフィクスコマンドをそれに代えて表示リストへ書き込むようにする。ストリーム上にさらに挿入された「表示リスト終了」コマンドは、表示リストを終了させ、グラフィクスコマンドストリームを同じ(もしくは異なる)FIFOバッファへ戻すように向け直すことができる。この特徴は、グラフィクスコマンド発生器によって非常に低いオーバヘッドで再使用可能な表示リストを効率的に生成することができるという利点を有する。 【0011】この発明によって提供される他の局面によれば、グラフィクスコマンド発生器は、多数のFIFOバッファの任意のものへ中断点(break point) を挿入することができる。この中断点は消費器を中断させることができる。そのような中断点は、緊密な同期が必要なときに発生器と消費器とを同期化するのに役立つ。 【0012】この発明によって提供されるさらに他の局面によれば、グラフィクスシステムは、グラフィクスコマンドを出力する発生器、発生器によって出力されたグラフィクスコマンドを消費する消費器、および発生器および消費器の間に結合される記憶装置を含む。記憶装置はその記憶装置中の可変位置に配置される複数のサイズ可変バッファをストアする。サイズ可変バッファの各々は、発生器によって出力されたグラフィクスコマンドを消費器へ分配するためにそれを受けかつ一時的にストアする。 【0013】この発明によって提供される別の局面によれば、消費器は複数のバッファの少なくともアクティブな1つへ書き込むことはできないが、発生器とは独立して複数のバッファのそのアクティブな少なくともの1つのためのライトポインタを維持する。発生器は複数のバッファの第1バッファに関連する発生器リードポインタおよび発生器ライトポインタを与え、消費器は、その同じバッファに関連する消費器リードポインタおよび消費器ライトポインタを独立して維持する。消費器は、アクティブなバッファから消費器が読み出すことに応じて消費器リードポインタをインクリメントし、インクリメントした消費器リードポインタが消費器ライトポインタに対して所定の関係を有するときそのアクティブなバッファからの読出を中断する(suspend) 。消費器は発生器がアクティブなバッファへ書き込むことに応答して消費器ライトポインタを選択的にインクリメントする。 【0014】この発明の他の局面によれば、バッファは、発生器が記憶装置中のどこかへストアしたグラフィクスコマンドのセットを消費器が消費し、どこかにストアされたグラフィクスコマンドを消費した後にバッファからのグラフィクスコマンドの消費を再開するように消費器を制御するリードコマンドを含む。このリードコマンドは、表示リストの開始アドレスおよび長さを特定する。リードコマンドは、その特定した開始アドレスで開始する特定した長さの表示リストを読み出すように消費器を制御する。 【0015】この発明の他の局面によれば、複数のバッファの任意のものは循環的なもしくは直線的な先入れ先出し(FIFO)アクセスを提供する。 【0016】この発明の他の局面によれば、複数のバッファの任意のものは発生器および消費器の両方へ同時に選択的に付属され、もしくはバッファの1つは発生器に付属され他のバッファが消費器に付属される。 【0017】この発明によって提供されるなおも他の局面によれば、発生器は複数のバッファの各々のサイズを割り付ける。そのような割付は、グラフィクスコマンドの少なくとも1フレームを各バッファがストアすることができるようになされる。 【0018】この発明の他の局面によれば、発生器は複数のバッファのいずれかへ中断点を書き込むことができる。消費器はこの中断点に遭遇したことに応じてグラフィクスコマンドの消費を中断することができる。 【0019】この発明のさらに他の局面によれば、各バッファは発生器がバッファの位置を上書きしたことを示すオーバフローステータス表示器(indicator)を提供する。 【0020】この発明のなおも他の局面によれば、ステータスレジスタもしくは他の表示器が複数のバッファの少なくとも1つのステータスを表示することができる。ステータスレジスタは、たとえば、・発生器ライトポインタの位置、・発生器リードポインタの位置、・消費器ライトポインタの位置、および・消費器リードポインタの位置を表示することができる。 【0021】この発明のさらに他の局面によれば、グラフィクスシステムは・グラフィクスコマンドを受けかつ一時的にストアする記憶バッファ、・バッファ中へグラフィクスコマンドを書き込み、そのバッファに関連して発生器ライトポインタおよび発生器リードポインタを維持する発生器、および・バッファ中にストアされたグラフィクスコマンドを消費し、発生器ライトポインタとは独立している消費器ライトポインタおよび発生器リードポインタとは独立している消費器リードポインタを維持する消費器を含む。 【0022】この発明のなおも他の局面によれば、グラフィクスシステムは発生器ライトポインタに基づいてバッファ中へグラフィクスコマンドを書き込むグラフィクスコマンド発生器、および消費器リードポインタに基づいてバッファからグラフィクスコマンドを読み出すグラフィクスコマンド消費器を含む。発明のこの局面によれば、消費器ライトポインタは消費器によって独立して維持され、発生器がバッファ中へ書き込んだ有効データの範囲を表示する。消費器は、消費器リードポインタが消費器ライトポインタに対して所定の関係を有することに応じてバッファからグラフィクスコマンドを消費するのを中止する。 【0023】この発明によって提供されるなおも他の局面によれば、インタラクティブなグラフィクスシステムは、アプリケーションを実行するプロセサモジュール、グラフィクスプロセサモジュール、およびプロセサモジュールならびにグラフィクスプロセサモジュールに結合される少なくとも1つのメモリを含む。プロセサモジュールとグラフィクスプロセサモジュールとの間のグラフィクスコマンドのフローを制御する方法は・FIFOバッファの各々のサイズを特定するアプリケーションの制御の下で、メモリ中に可変数のFIFOバッファを動的に確立するステップ、・複数のFIFOバッファ中の少なくとも第1バッファへグラフィクスコマンドを書き込むようにアプリケーションがプロセサモジュールを制御するステップ、および・第1FIFOバッファからグラフィクスコマンドを読み出すようにグラフィクスプロセサモジュールを制御するグラフィクスコマンドをアプリケーションがグラフィクスプロセサモジュールに送るステップを含む。 【0024】プロセサモジュールは複数のバッファの第1バッファに関連してプロセサモジュールリードポインタおよびプロセサモジュールライトポインタを与える。グラフィクスプロセサモジュールは、第1バッファに関連してグラフィクスプロセサモジュールリードポインタおよびグラフィクスプロセサモジュールライトポインタを独立して維持する。グラフィクスプロセサモジュールは、グラフィクスプロセサモジュールが第1バッファから読み出すたび毎にグラフィクスプロセサモジュールリードポインタをインクリメントし、そのグラフィクスプロセサモジュールリードポインタがグラフィクスプロセサモジュールライトポインタと所定の関係を有するときその第1バッファからの読出を中断する。グラフィクスプロセサモジュールはプロセサモジュールが第1バッファへ書き込むことに応答してグラフィクスプロセサモジュールライトポインタを選択的に自動的にインクリメントする。 【0025】この発明のなおも他の局面によれば、グラフィクスデータのフローを制御する方法は・各々が複数の記憶位置を有する複数のサイズ可変FIFOバッファ中へグラフィクスデータを書き込むステップ、・複数の記憶位置の少なくとも1つに関連して中断点を設定するステップ、・複数のバッファから所定の順序でグラフィクスデータを読み出すステップ、・中断点に関連する少なくとも1つの記憶位置に遭遇したことに応答して読出ステップを一時的に中断し、割込を発生するステップ、および・割込クリアコマンドの受信に応答して読出ステップを再開するステップを含む。 【0026】この発明によって提供されるなおもその他の局面によれば、グラフィクスシステムは・グラフィクスコマンドを受けかつ一時的にストアする記憶装置、・記憶装置中のどこかへストアされているグラフィクスコマンドの第1セットおよびグラフィクスコマンドの第2セットを参照するリードコマンドを含むコマンドを記憶装置中のバッファへ書き込む発生器、および・バッファ中へストアされたグラフィクスコマンドの第1セットを消費し、リードコマンドへの遭遇に応答して、グラフィクスコマンドの第2セットを消費し、そしてバッファからの付加的なコマンドを引き続いて消費する消費器を含む。 【0027】この発明の上述の目的,その他の目的,特徴および利点は、図面を参照して行う以下の実施例の詳細な説明から一層明らかとなろう。 【0028】 【実施例】図1は対話型(インタラクティブ)3Dコンピュータグラフィクスシステム50の一例を示す。システム50は対話型3Dビデオゲームをステレオ音声とともにプレイするのに用いられ得る。これはまた多様な他のアプリケーションにも用いられ得る。 【0029】この実施例において、システム50は3次元世界のディジタル表現ないしモデルをインタラクティブにかつリアルタイムに処理することができる。システム50は、任意の視点から、その世界の一部または全部を表示することができる。たとえば、システム50は、手持ちコントローラ52aおよび52bまたは他の入力デバイスからのリアルタイム入力に応答して、視点をインタラクティブに変化できる。このことによって、ゲームプレーヤは、その世界内もしくは外の誰かの目を通してその世界を見ることができる。システム50は、リアルタイム3Dインタラクティブ表示を必要としないアプリケーション(たとえば2D表示の発生やおよび/またはノンインタラクティブ表示)に使用できるが、高品質の3D映像を非常に速く表示する能力は、非常にリアルでエキサイティングなゲームプレイや他のグラフィクスインタラクションを創造するのに使用され得る。 【0030】システム50を用いてビデオゲームまたは他のアプリケーションをプレイするために、ユーザはまず、主ユニット54を、カラーテレビ56または他の表示装置に、両者の間にケーブル58を接続することによって、接続する。主ユニット54はカラーテレビ56を制御するためのビデオ信号およびオーディオ信号を発生する。ビデオ信号はテレビジョン画面59上に表示されている映像を制御するものであり、オーディオ信号はテレビのステレオスピーカ61Lおよび61Rを通して音声として再生される。 【0031】ユーザはまた主ユニット54を電源につなぐ必要がある。この電源は従来のACアダプタ(図示せず)であってよく、そのACアダプタは家庭用の標準的な壁ソケットに差し込まれ、家庭用電源を、主ユニット54を駆動するのに適した低いDC電圧信号に変換する。他の実施例ではバッテリが用いられてもよい。 【0032】ユーザは主ユニット54を制御するために手持ちコントローラ52aおよび52bを用いる。コントロール60は、たとえば、3D世界内においてテレビ56に表示されているキャラクタが移動すべき方向(上または下、左または右、近づいてまたは遠ざかって)を指示するために使用され得る。コントロール60は、また他のアプリケーションのための入力(たとえばメニュー選択,ポインタ/カーソル制御,その他)を与える。コントローラ52は多様な形態をとり得る。この実施例においては、図示されるコントローラ52は、各々ジョイスティック,押しボタンおよび/または方向スイッチのようなコントロール60を含む。コントローラ52は、ケーブルによって、もしくは電磁波(たとえば電波または赤外線)を介してワイヤレスで、主ユニット54に接続され得る。 【0033】ゲームのようなアプリケーションをプレイするために、ユーザはビデオゲームもしくはプレイしたいと思う他のアプリケーションをストアしている適宜の記憶媒体62を選択し、その記憶媒体を主ユニット54のスロット64に差し込む。記憶媒体62は、たとえば、特別にエンコードされおよび/または記号化された光学的ならびに/もしくは磁気的ディスクであってよい。ユーザは主ユニット54をオンするために電源スイッチ66を操作し、主ユニットがその記憶媒体62にストアされているソフトウェアに基づいてビデオゲームもしくは他のアプリケーションを実行し始めるようにする。ユーザは主ユニットに入力を与えるためにコントローラ52を操作する。たとえば、コントロール60を操作することによってゲームもしくは他のアプリケーションをスタートさせる。他のコントロール60を動かすことによって、動画キャラクタを異なる方向に移動させ、または3D世界におけるユーザの視点を変化させる。記憶媒体62にストアされている具体的なソフトウェアによって、コントローラ52上の種々のコントロール60は異なる時間で異なる機能を達成することができる。 全体システムの例図2はシステム50の例示的なコンポーネントのブロック図であり、重要なコンポーネントは、・主プロセサ(CPU)110,・主メモリ112,および・グラフィクス/オーディオプロセサ114を含む。 【0034】この実施例において、主プロセサ110(たとえばIBMパワーPC750の改良版)は、手持ちコントローラ52(および/または他の入力デバイス)からの入力をグラフィクス/オーディオプロセサ114を通して受ける。主プロセサ110はユーザ入力にインタラクティブに応答し、光ディスクドライブのような大容量記憶媒体アクセス装置106を介して、たとえば外部記憶媒体62から供給されるビデオゲームもしくは他のプログラムを実行する。一例として、ビデオゲームプレイの状況では、主プロセサ110は、多様なインタラクティブ制御機能に加えて、衝突検出および動画処理を実行する。 【0035】この実施例では、主プロセサ110は3Dグラフィクス/オーディオコマンドを発生し、それらをグラフィクス/オーディオプロセサ114に送る。グラフィクス/オーディオプロセサ114はこれらのコマンドを処理し、ディスプレイ59上での可視映像を生成し、ステレオスピーカ61Rおよび61Lもしくは他の適宜の音声発生デバイス上でのステレオ音声を生成する。 【0036】実施例のシステム50はビデオエンコーダ120を含み、このビデオエンコーダは、グラフィクス/オーディオプロセサ114からの映像信号を受けて、その映像信号をコンピュータモニタや家庭用テレビ56のような標準的な表示装置上での表示に適したアナログおよび/またはディジタルビデオ信号に変換する。システム100はまたオーディオコーデック(圧縮器/伸長器)122を含み、このオーディオコーデックはディジタル化されたオーディオ信号を圧縮しかつ伸長するとともに、必要に応じてディジタルオーディオ信号のフォーマットとアナログオーディオ信号のフォーマットとの間で変換を行う。オーディオコーデック122はバッファ124を介してオーディオ入力を受けることができ、処理(たとえば、プロセサが生成したおよび/または大容量記憶媒体アクセス装置106のストリームオーディオ出力を介して受信した他のオーディオ信号とのミキシング)するために、そのオーディオ入力をグラフィクス/オーディオプロセサ114に与える。この実施例におけるグラフィクス/オーディオプロセサ114は、オーディオタスクに利用可能なオーディオメモリ126にオーディオ関連情報をストアすることができる。グラフィクス/オーディオプロセサ114は、結果的に得られるオーディオ出力信号を、圧縮およびアナログ信号への変換のために、オーディオコーデック122に与え、したがってそのオーディオ出力信号が(たとえばバッファアンプ128Lおよび128Rを介して)スピーカ61Lおよび61Rによって再生され得る。 【0037】グラフィクス/オーディオプロセサ114はシステム100内に存在するであろう種々の付加的なデバイスと通信する能力を有する。たとえば、パラレルディジタルバス130は大容量記憶媒体アクセス装置106および/または他のコンポーネントと通信するために用いられる。シリアル周辺バス132は多様な周辺機器または、たとえば、・PROMおよび/またはRTC(リアルタイムクロック)134,・モデム136もしくは他のネットワークインタフェース(それはシステム100を、プログラム命令および/またはデータがダウンロードもしくはアップロードされ得るインターネットあるいは他のディジタルネットワークのようなテレコミュニケーションネットワーク138に接続する),および・フラッシュメモリ140を含む他のデバイスと通信する。別の外部シリアルバス142は、付加的な拡張メモリ144(たとえばメモリカード)もしくは他のデバイスと通信するために使用され得る。コネクタが種々のデバイスをバス130,132および142に接続するために使用され得る。 グラフィクス/オーディオプロセサの例図3は実施例のグラフィクス/オーディオプロセサ114を示すブロック図である。或る実施例においては、グラフィクス/オーディオプロセサ114はシングルチップASICであってよい。この実施例においては、グラフィクス/オーディオプロセサ114は、・プロセサインタフェース150,・メモリインタフェース/コントローラ152,・3Dグラフィクスプロセサ154,・オーディオディジタル信号プロセサ(DSP)156,・オーディオメモリインタフェース158,・オーディオインタフェース/ミキサ160,・周辺コントローラ162,および・表示コントローラ164を含む。 【0038】3Dグラフィクスプロセサ154はグラフィクス処理タスクを実行する。オーディオディジタル信号プロセサ156はオーディオ処理タスクを実行する。表示コントローラ164は主メモリ112からの映像情報にアクセスし、表示装置102上での表示のためにその映像情報をビデオエンコーダ120に与える。オーディオインタフェース/ミキサ160はオーディオコーデック122をインタフェースし、また異なるソースからのオーディオ(たとえば、大容量記憶媒体アクセス装置106からのオーディオストリーム,オーディオDSP156の出力,およびオーディオコーデック122を通して受ける外部オーディオ入力)をミックスすることができる。プロセサインタフェース150は主プロセサ110およびグラフィクス/オーディオプロセサ114の間のデータおよび制御インタフェースを提供する。 【0039】メモリインタフェース152はグラフィクス/オーディオプロセサ114とメモリ112との間のデータおよび制御インタフェースを提供する。この実施例においては、主プロセサ110は、プロセサインタフェース150およびグラフィクス/オーディオプロセサ114の一部であるメモリインタフェース152を介して、主メモリ112にアクセスする。周辺コントローラ162はグラフィクス/オーディオプロセサ114と上で述べた種々の周辺機器との間のデータおよび制御インタフェースを提供する。オーディオメモリインタフェース158はオーディオメモリ126とのインタフェースを提供する。 グラフィクスパイプラインの例図4は図3の3Dグラフィクスプロセサ154をより詳細に示すグラフィクス処理システムを示す。この3Dグラフィクスプロセサ154は、とりわけ、コマンドプロセサ200および3Dグラフィクスパイプライン180を含む。主プロセサ110はデータストリーム(たとえばグラフィクスコマンドストリームおよび表示リスト)をコマンドプロセサ200に通信する。主プロセサ110はメモリレイテンシを最小化するために2レベルキャッシュ112を有し、さらにまたグラフィクス/オーディオプロセサ114に向けられたキャッシュされていないデータストリームのための書込収集(write-gathering)バッファ111を有する。この書込収集バッファ11は部分キャッシュラインを全キャッシュラインに集め、バスの最大使用時に、グラフィクス/オーディオプロセサ114からのデータを1つのキャッシュラインに送る。 【0040】コマンドプロセサ200は主プロセサ110からの表示コマンドを受け、それらを解剖し、メモリコントローラ152を介して共用メモリ112からのそのコマンドを処理するに必要な付加的なデータを入手する。コマンドプロセサ200は、2Dおよび/または3D処理およびレンダリングのために、頂点コマンドのストリームをグラフィクスパイプライン180に与える。グラフィクスパイプライン180はこれらのコマンドに基づいて映像を生成する。結果として得られた映像情報は、表示コントローラ/ビデオインタフェースユニット164によるアクセスのために主メモリ120に転送され得て、この映像情報は表示装置156上にパイプライン180のフレームバッファ出力を表示する。 【0041】図5はグラフィクスプロセサ154を用いて実行される処理を図解的に示すブロックロジックフロー図である。主プロセサ10は、グラフィクスコマンドストリーム210,表示リスト212および頂点アレイ214を主メモリ112にストアし、ポインタをバスインタフェース150を介してコマンドプロセサ200に送る。主プロセサ110は主メモリ110内に割り付けられた1つ以上のグラフィクスFIFOバッファ210にグラフィクスコマンドをストアする。このコマンドプロセサ200は、・同期/フロー制御および負荷バランスのためにグラフィクスコマンドを受けかつバッファするオンチップFIFOメモリバッファ216を介して主メモリ112からのコマンドストリーム,・オンチップコールFIFOメモリバッファ218を介して主メモリ112からの表示リスト212,および・コマンドストリームからおよび/または主メモリ112の頂点アレイ214からの頂点アトリビュートを頂点キャッシュ220を介して取り込む。 【0042】コマンドプロセサ200はコマンド処理動作200aを実行し、そのコマンド処理動作200aはアトリビュート形式を浮動小数点フォーマットに変換し、結果的に得られた完全頂点ポリゴンデータをレンダリング/ラスタライゼーションのためにグラフィクスパイプライン180に与える。プログラマブルメモリ調停回路130(グラフィクスメモリ要求調停回路:図4)は、グラフィクスパイプライン180,コマンドプロセサ200および表示コントローラ/ビデオインタフェースユニット164の間での共用主メモリ112へのアクセスを調停する。 【0043】図4は、グラフィクスパイプライン180が・変換ユニット300,・セットアップ/ラスタライザ400,・テクスチャユニット500,・テクスチャ環境ユニット600,および・ピクセルエンジン700を含むことを示す。 【0044】変換ユニット300は多様な2Dおよび3D変換および他の動作300a(図5)を実行する。変換ユニット300は変換処理300aに用いられるマトリクスをストアするための1つ以上のマトリクスメモリ300bを含む。変換ユニット300は、入来する頂点毎のジオメトリをオブジェクト空間からスクリーン空間へ変換し、そして入来するテクスチャ座標を変換しかつ投影テクスチャ座標(300c)を計算する。変換ユニット300はまたポリゴンクリッピング/カリング(clipping/culling)300dを実行する。変換ユニット300bによってまた達成されるライティング(lighting) 処理300eが、この実施例では8つまでの独立した照明(light:ライト)について、頂点毎にライティング計算を行う。変換ユニット300は、エンボス(embossed)タイプのバンプマッピング効果およびポリゴンクリッピング/カリング動作(300d)のために、テクスチャ座標を発生する(300c)。 【0045】セットアップ/ラスタライザ400はセットアップユニットを含み、このセットアップユニットは、変換ユニット300からの頂点データを受け、三角形セットアップ情報を、エッジラスタライゼーション,テクスチャ座標ラスタライゼーションおよびカラーラスタライゼーションを実行する1つ以上のラスタライザユニット(400b)に送る。 【0046】テクスチャユニット500は、オンチップテクスチャメモリ(TMEM)502を含んでもよく、たとえば、・主メモリ112からのテクスチャ504の検索、・たとえばマルチテクスチャ処理,ポストキャッシュテクスチャ伸長,テクスチャフィルタリング,エンボシング,投影テクスチャの使用を通しての陰影付け,およびアルファトランスパーレンシおよびデプスを用いるBLITを含むテクスチャ処理(500a)、・バンプマッピング,偽(pseudo)テクスチャおよびテクスチャタイル(tiling)効果(500b)のためのテクスチャ座標変位を計算するバンプマップ処理、および・間接テクスチャ処理(500c) を含むテクスチャリングに関連する種々のタスクを実行する。 【0047】テクスチャユニット500はテクスチャ環境処理(600a)のためにフィルタされたテクスチャ値をテクスチャ環境ユニット600に出力する。テクスチャ環境ユニット600は、ポリゴンおよびテクスチャカラー/アルファ/デプスをブレンドし、また逆レンジベース(reverse range based)のフォグ効果を達成するために、テクスチャフォグ処理(600b)を実行する。テクスチャ環境ユニット600はたとえばカラー/アルファ変調,エンボシング,詳細テクスチャ,テクスチャスワッピング,クランピングおよびデプスブレンディングに基づく多様な他の環境関連機能を実行する多数のステージを提供する。 【0048】ピクセルエンジン700はデプス(z)比較(700a)およびピクセルブレンディング(700b)を実行する。この実施例では、ピクセルエンジン700はデータを埋め込み(オンチップ)フレームバッファメモリ702にストアする。グラフィクスパイプライン180は、フレームバッファおよび/またはテクスチャ情報をローカルにストアするために1つ以上の埋め込みDRAMメモリ702を含む。z比較700aは、現在有効なレンダリングモードに依存して、グラフィクスパイプライン180におけるより早い段階で実行される(たとえば、z比較は、もしアルファブレンディングが要求されていないならば早くに実行され得る)。このピクセルエンジン700は表示コントローラ/ビデオインタフェースユニット164による主メモリ112へのアクセスのために、オンチップフレームバッファ702を周期的に書き込むコピー動作700cを含む。このコピー動作700cはまた動的テクスチャ合成効果のために、埋め込みフレームバッファ702の内容を主メモリ112中のテクスチャにコピーするために使用され得る。アンチエイリアシング(anti-aliasing:エイリアス補正)および他のフィルタリングがコピー動作中に実行され得る。最終的に主メモリ112にストアされるグラフィクスパイプライン180のフレームバッファ出力は、表示コントローラ/ビデオインタフェースユニット164によってフレーム毎に読み出される。表示コントローラ/ビデオインタフェース164は表示装置56上での表示のためにディジタルRGBピクセル値を与える。 共用メモリ中に割り付けられたFIFOバッファこの実施例において、グラフィクス/オーディオプロセサ114のオンボードのコマンドFIFOバッファ216(これは小規模のデュアルポートRAMのストリーミングバッファであってよい)は、それ自身によって、プロセサ110とグラフィクスパイプライン180との間の負荷バランスをとる良好なジョブを行うには小さすぎる。このことによって、グラフィクス/オーディオプロセサ114が大きなプリミティブをレンダリングしているときには、プロセサ110は停止されることになる。この問題を改善するために、プロセサ110とグラフィクス/オーディオプロセサ114との間で共用される主メモリ112の一部をコマンドFIFOバッファ210として用いる。バッファ210を用いることによって、主プロセサ110およびグラフィクスプロセサ114がほぼそれらのピークレート(peak rate) で並列的に動作することができる。 【0049】並列処理を達成するためにバッファ210を用いる(少なくとも)2つの方法があり、中間モード(immediate mode)およびマルチバッファモード(multi-buffer mode) である。1つのバッファ210が主プロセサ110およびグラフィクスプロセサ114の両方へ付属させられるとき、システム50は中間モードで動作している。主プロセサ110がグラフィクスコマンドをバッファ210へ書き込むと、グラフィクスプロセサ114はそれらを順に処理する。書込が読出を追い越すのを防ぎかつ循環的なバッファ動作を提供するためにバッファ210のリードおよびライトポインタを第1アドレスへラップさせるためにハードウェアサポートがフロー制御ロジックを与える。 【0050】好ましい実施例においては、また、マルチバッファモードにおいて、グラフィクス/オーディオプロセサ114が異なるバッファ210(1)から読出している間1つのバッファ210を主プロセサ110へ接続することができる。この場合、バッファ210(1)および210(2)は、いずれの特定のバッファ210へも同時的な読出および書込がないので、従来のFIFOというよりもバッファのように管理される。バッファの動的なメモリ管理が望まれるなら、マルチバッファモードが使用され得る。 【0051】図6は共用メモリ112の一部が発生器110および消費器114の間でのグラフィクス(およびオーディオ)コマンドをバッファリングするためにどのようにして割り当てられて多数のFIFOコマンドバッファ210(1),210(2),…,210(n)を提供するかを示す。図6に示す例において、バッファ210の各々は主プロセサ110からのグラフィクス(および/またはオーディオ)コマンドを受け、それらのコマンドをグラフィクス/オーディオプロセサ114へ与える。主プロセサ110はこれらのバッファ210としての使用のために、主メモリ112の一部を割り当てる。主メモリの領域を記述するバッファデータ構造子(structure) が、主プロセサ110上で実行中のアプリケーションによって割り付けられる。 【0052】主プロセサ110はライトポインタ802を用いてバッファ中へグラフィクスコマンドを書き込む。グラフィクス/オーディオプロセサ114はリードポインタ804を用いてバッファ210からコマンドを読み出す。ライトポインタ802およびリードポインタ804は同じのもしくは異なるバッファをポイント(指示)することができる。この方法において、同じバッファ210が主プロセサ110およびグラフィクス/オーディオプロセサ114の両方へ同時に「付属」させられ、もしくは異なるバッファが発生器および消費器に異なる時間で付属させられ得る。 【0053】図6に示すマルチバッファの例において、主プロセサ110およびグラフィクス/オーディオプロセサ114は、「その」FIFOバッファ210が割り当てられている場所で必ずしも一致する必要はない。図示する例において、主プロセサ110はグラフィクスコマンドを書き込むための現在のバッファとしてバッファ210(2)を用い、これに対して、グラフィクス/オーディオプロセサ114はグラフィクスコマンドを入手するために現在のバッファとして異なるバッファ210(1)を使用する。バッファ210は主プロセサ110,グラフィクス/オーディオプロセサ114あるいはその両方へ動的に付属させられ得る。バッファが主プロセサへ付属させられるとき、主プロセサはグラフィクスコマンドをバッファ210へ書き込む。実施例において、任意の一時に主プロセサ110へ付属させられる1つでかつ1つだけのバッファ210がある。バッファがグラフィクスプロセサ114へ付属されるとき、グラフィクスプロセサはその付属されたバッファ210からグラフィクスコマンドを読み出しかつ処理する。この実施例においては、ただ1つのバッファ210だけが任意の一時にグラフィクスプロセサ114へ付属され得る。 独立した消費器および発生器のリードおよびライトポインタグラフィクスコマンド発生器として作用する主プロセサ110は、それが付属されているバッファ210(2)から読み出す必要はないが、図6の例に示すように発生器リードポインタ806を維持する。同じように、グラフィクス/オーディオプロセサ114はグラフィクスコマンドの消費器として動作し、それゆえに、それが付属されているバッファ210(1)へ書き込む必要はないけれども、図6の例においては消費器ライトポインタ808を維持する。これらの付加的なポインタ806および808によって発生器および消費器がそれに付属されている各バッファ210を独立的に維持することができる。 【0054】主プロセサ110によって維持されている付加的なポインタ806およびグラフィクス/オーディオプロセサ114によって維持されている付加的なポインタ808はオーバラップ検出を与えるために使用される。これらの余分なポインタはバッファ210内において有効データがどこに存在するかを示す。たとえば、主プロセサ110はそれに付属されているバッファ210(2)を循環バッファとして取り扱い、ライトポインタがバッファ812の「終り」に達すると、バッファ810の「開始」にそのライトポインタを「ラップ(wrap)」する。しかしながら、消費器ライトポインタ802が消費器リードポインタ806へ遭遇すると、消費器は、グラフィクス/オーディオプロセサ114がまだ読み出していない有効な、先に書き込まれたデータを上書きするのを回避するために、消費器はその付属するバッファ210(2)への書込を中止する。同じように、グラフィクス/オーディオプロセサ114は、それの付属するバッファ210(1)からグラフィクス命令を漸進的に読み出すとき、それのリードポインタ804を継続的にインクリメントするが、リードポインタ804がライトポインタ808に遭遇すると、消費器はライトポインタをバッファ210(1)内の最終有効データを示すように用いているので、このインクリメントの手続きを中止する。 【0055】ポインタ802,804,806および808はバッファ210内の任意の位置をポイントすることができる。有効データは、したがってこれらのバッファ内の任意の場所に存在し、必ずしもバッファの始めまたは終りである必要はない。実際に、もしバッファ210が循環モード(circular mode) で動作すると、バッファの終りは始めにラップされ、そしてそれゆえにバッファは論理的には連続ループであるので、「開始」または「終了」の概念はない。 【0056】図7は独立した消費器および発生器のリードおよびライトポインタの簡単化した説明を提供する。図7の例において、消費器114はそれに付属されているバッファ210(1)からグラフィクスコマンドを読み出すために自動インクリメントリードポインタ804を用いる。消費器114はまた、バッファ210(1)中の最終有効グラフィクスコマンドをポイントする消費器ライトポイント808を維持する。この例において、消費器114はバッファ210(1)からグラフィクスコマンドを読み出し続け、各グラフィクスコマンドを読み出した後に、ライトポインタが示す同じ位置(図8参照)をポイントするまで、それのリードポインタ804をインクリメントする。リードポインタ804がライトポインタ808が示す位置に隣接する位置を示すように消費器114がそのリードポインタ804をインクリメントしたとき、消費器は、バッファ210(1)から有効グラフィクスコマンドのすべてを読み出しそしてそれゆえにバッファがエンプティになったことを「知る」。この状態は、消費器114が発生器110(もしバッファ210(1)が同時に発生器に付属されているなら)からのさらなるグラフィクスコマンドを待つ必要があるか、もしくは(もしマルチバッファが有効であるなら)、消費器が読出を開始するべく異なるバッファ210に向ける必要があることを示している。 【0057】同じように、発生器はそれに付属されているバッファ210(2)中へグラフィクスコマンドを書き続け、同じように、発生器リードポインタ806が示す位置の直前であるバッファの位置をライトポインタがポイントするまで、発生器ライトポインタ802を自動的にインクリメントする(図9参照)。この例において、ライトポインタ802とリードポインタ806との間の一致(実際にはごく接近して)は、バッファ210(2)がフルであることを示す。マルチバッファが有効であれば、発生器はこの時点でバッファ210(2)への書込を中止し、それを「セーブ」(閉じる)し、消費器に対してその「閉じた」バッファの内容を(今または後に)読み出すように指令し、主メモリ112中に割り当てることができるなおも他のバッファ210へ付加的なグラフィクスコマンドを書き込むのを開始する。発生器110および消費器114が同じバッファへ付属されると、そのバッファへさらなるコマンドを書き込む前に、発生器は、消費器がコマンドを読み出すまで待つ必要がある。以下に説明するように、このような頻繁な状況の切換を回避するために、好ましい実施例はプログラマブルなヒステリシス効果を提供でき、それは発生器がバッファへの書込の再開を許容される前に或る量によってバッファがエンプティにされることを要し、消費器がバッファからの読出の再開を許容される前に或る量によってバッファがフルになる必要がある。 【0058】好ましい実施例においては、主プロセサ110は、32バイト転送でそれに付属されるバッファ210へグラフィクスコマンドを書き込む。主プロセサ110は書込収集バッファ/機能111(図4参照)を提供し、それは、グラフィクスコマンドを自動的に32バイトワードへパックする(pack)。グラフィクスプロセサ114は32バイト転送においてそれが付属されるバッファ210からグラフィクスコマンドを読み出す。 FIFOバッファからの表示リストのコール図10は好ましい実施例によって提供される技術の一例であり、それによって、関数コールとほとんど同じように、FIFOバッファ210の入力が表示リストをコールすることができる。この例において、コマンド890はメモリ中のどこかにストアされた表示リスト212をコールするグラフィクスコマンドFIFO210中に挿入される。このコマンド890に遭遇すると、グラフィクスプロセサ114はFIFOバッファ210からのグラフィクスコマンドの読出を一時的中止し、代わって、主メモリ112中のどこかにストアされている表示リスト212からのコマンドを読み出し始める。表示リスト212の終りに達すると、グラフィクスプロセサ114はグラフィクスFIFO210からの次の順次的なコマンドを読み出すためにリターンする。この技術は、主プロセサ112が各フレーム毎に表示リストを再書込する必要がなく、多数のフレームが同じ表示リスト212をコールできるという点で非常に有用である(たとえば、フレームからフレームへ静止したままであるジオメトリをレンダリングするような場合)。 【0059】図11ないし図13は、グラフィクスコマンドFIFO210へ書き込むことによって主プロセサ110が自動的に表示リスト212を生成することができることを示す。図11に示すように、主プロセサ110は主メモリ112中に割り付けたグラフィクスコマンドFIFO210へグラフィクスコマンドストリームを書き込むことによって開始する。この書込プロセスにおける任意の時点で、主プロセサ110はFIFOバッファ210中へ「表示リスト開始(Begin DisplayList)」コマンド890を挿入することができ、そのコマンドによって、主プロセサからの別の書込を表示リスト212へ向けることができる。図13は、主プロセサ110が表示リスト212の書込を終了すると、「表示リスト終了(End Display List)」コマンドを発生することを示し、このコマンドは表示リストを自動的に終了させ、主プロセサのコマンドストリーム出力をFIFOバッファ210へ自動的に向け直す効果を有する。主プロセサ110が向け直し可能な「消火ホース」コールストリーム出力を与え、その出力がFIFOバッファ210、表示リスト210および同じもしくは異なるFIFOバッファ212へグラフィクスコマンドを流出させることができることを思い浮かべることができる。この方法によって生成された表示リスト212はメモリ112中に留まり、いくつかのフレームあるいはフレーム部分に亘って静止したままであるイメージの一部のために再使用され得る。 具体例の詳細グラフィクス/オーディオプロセサ114のグラフィクスインタフェースユニット部分202へのプロセサであるコマンドプロセサ200は、主メモリ112中のFIFOバッファ210を管理するための制御ロジックを含む。図14はその具体例を示す。図示する例において、CPU110がグラフィクス/オーディオプロセサ114へ書き込んだすべてのものが主メモリ112へ送られる。グラフィクス/オーディオプロセサ114へ付属するグラフィクスFIFO210へ割り付けられた主メモリ112の一部を規定する2つのレジスタがあり、それはFIFOベース(BASE)レジスタ822、およびFIFO先頭(TOP) レジスタ824である。 【0060】FIFO_BASEレジスタ822はFIFO210のベースアドレスを規定する。FIFO_TOPレジスタ824はFIFOにおける最終(last)アドレスを規定する。 【0061】コマンドプロセサ200はハードウェア中においてFIFO210のためのリードおよびライトポインタのトラッキングを保持する。FIFO中に書き込まれたすべてのデータがキャッシュライン(cache line)のサイズにされるので、有効バイトのトラッキングを保持する必要はない。ライトポインタ808はFIFO_BASEとFIFO_TOPとの間にあるアドレス中にキャッシュラインが書き込まれる毎に32バイトによってインクリメントされる(最上位5ビットは0)。FIFO210の読出が一度に1キャッシュラインで行われる。リードポインタはキャッシュラインが読み出された後、32によってインクリメントされる。 【0062】最初に、リードポインタ804およびライトポインタ808が同じ位置を示すように初期化され、それはFIFOがエンプティであることを意味する(図8参照)。FIFOフル状態は、(リードポインタ−1)=(ライトポインタ)である(図9参照)。ライトポインタ808はそれがFIFO_TOPへ達した後にFIFO_BASE204(2)へラップされる。リードポインタ804もまたそれがFIFO_TOP824へ達するときラップされる。リードポインタ804はハードウェアによって制御され、ラップされた場合においてもライトポインタ808を追い越さないようにされている。プロセサ110上で動いているアプリケーションによって、ライトポインタ808は、ラップされた後にも、リードポインタ804より大きくならないようにされる。 【0063】2つ(またはそれ以上)の異なるフレームからのデータは同じFIFO210中へ存在することができる。第1フレームが内蔵DRAM702へコピーアウトされる前にコマンドプロセサ200が第2フレームを実行するのを防止するために中断点機構が用いられ得る。FIFO中断点(レジスタ)832がイネーブルされると、コマンドプロセサ200はCP_FIFO_BRKレジスタを読み出さない。CPU110はフレームの終わりでこのレジスタ832をプログラムすることができる。CPU110はグラフィクス/オーディオプロセサ114上の書込バッファをフラッシュしなければならず、次いで、FIFOライトポインタ808を読み出す。そして、CPU110はFIFO中断点レジスタ832へ値を書き込み、中断点をイネーブルする。 【0064】FIFO210のサイズが1フレーム中に送られたすべてのデータを保持するに十分大きければ、図9に示すFIFOフル状態は決して発生しない。しかしながら、このことは主メモリ112の2Mないし4MバイトをFIFOバッファ210のために割り付けることを意味する。アプリケーションの開発者はFIFO210のために大きなメモリを使用したいとは思わないであろう。その場合、アプリケーションはフロー制御技術を実現する。レジスタ826および828はそのようなフロー制御を提供するために使用され得る。フロー制御は、主メモリ112中のキャッシュラインの数がFIFO_HICNT826より大きくなったときグラフィクス/オーディオプロセサ114がCPU110へ割込を発生させることによって、この実施例中において行われる。プロセサ110は割込を取り入れ、FIFO中のキャッシュラインの数がFIFO_LOCNT828より小さくなるまで、スピン(spin)するかもしくは他の非グラフィクスタスクを行う。そのようなヒステリシス効果を提供する理由は、割込のオーバヘッドが高く、FIFO210の内容が「高水位マーク(high water mark:ハイウォータマーク) 」以下になったことをただチェックすることによって割込ルーチンに入るか割込ルーチンを出るかを行うことを望まないからである。割込はFIFOのカウントがLOCNT828以下になったとき発生され得る。この方法によって、アプリケーションは割込がかけられたとき他のタスクを行いリターンする。 FIFOバッファの割付の例好ましい実施例において、グラフィクスAPIはスタティックなFXFifoObj の構造子を内部的に宣言する。この構造子はGXInitがコールされたとき初期化される。 【0065】 【表1】
【0066】FIFOベースポインタは、この好ましい実施例においては32ビットに合わされている。アプリケーションはFIFOのためにメモリを割り付ける責任がある。割付のためのサイズのパラメータはバイトにおけるFIFOのサイズである(最小FIFOサイズは64Kバイトであり、サイズは32バイトの倍数である)。デフォルトによって、GXInitが中間モードグラフィクスのFIFOをセットアップすると、すなわち、CPU110およびグラフィクスプロセサ114がFIFOに付属されると、リードおよびライトポインタはベースポインタに初期化され、高水位および低水位マーク(low water mark:ローウォータマーク)がイネーブルされる。GXInitは初期化したGXFifoObj へのポインタをアプリケーションへリターンする。 【0067】アプリケーションがマルチバッファモードで動作することを望むなら、次いで、追加のFIFOが割り付けられなければならない。任意の数のそのような追加のFIFOバッファ210が割り付けられ得る。アプリケーションは各追加のFIFO毎にメモリに割り付け、GXFifoObj を同じように初期化する。次に例示する関数はGXFifoObj を初期化するために使用され得る。 【0068】 【表2】
【0069】通常、アプリケーションはFIFOリードおよびライトポインタをFIFOのベースアドレスへ初期化する必要があるだけである。一旦初期化されると、システムハードウェアはリードおよびライトポインタを自動的に制御する。 FIFOの付属およびセーブFIFOが一旦初期化されると、それはCPU110またはグラフィクスプロセサ114もしくはその両方へ付属される。ただ1つのFIFOが同時にCPU110およびグラフィクスプロセサ114のいずれかに付属され得る。FIFOがCPU110に付属されると、CPUはFIFOに対してGXコマンドを発行する。FIFOがグラフィクスプロセサ114に付属されたとき、プロセサ114はFIFOからグラフィクスコマンドを読み出すためにイネーブルされる。次に例示する関数がFIFOを付属させる。 【0070】 【表3】
【0071】どのFIFOオブジェクトが現在これらの例示的な関数によって付属されたかを問い合わせる。 【0072】 【表4】
【0073】マルチバッファモードにおいてCPU110がGXコマンドの書込を終了すると、FIFOは新たなFIFOに切り換える前に「セーブ」されなければならない。次に例示する関数がCPUのFIFOを「セーブ」する。 【0074】 【表5】
【0075】FIFOがセーブされると、CPUの書込収集バッファ111がフラッシュされてすべてのグラフィクスコマンドが主メモリ112へ書き込まれる。さらに、現在のFIFOのリードおよびライトポインタがGXFifoObj の構造子中にストアされる。 【0076】グラフィクスプロセサ114のためにはセーブ関数はないということに留意されたい。グラフィクスプロセサが付属されると、グラフィクスコマンドは・FIFOがエンプティになる、・FIFO中断点に遭遇する、あるいは・GPが先に獲得されるまで読み出され続ける。 FIFOステータス次の例示の関数はFIFOおよびGP(グラフィクスパイプライン)のステータスを読み出すために使用され得る。 【0077】 【表6】
【0078】GXGetFifoStatus は特定のFIFOのステータスを獲得する。もし、FIFOが現在CPU110に付属されていると、パラメータcpu_writeはGX_TRUEである。FIFOが現在グラフィクスプロセサ114に付属されていると、パラメータgp_readはGX_TRUEである。FIFOがCPU110もしくはグラフィクスプロセサ114のいずれかに付属されているとき、ステータスはハードウェアの状態から直接に読み取られる。FIFOが付属されていなければ、ステータスはGXFifoObj から読み出される。GXGetFifoStatus は特定されたFIFOがオーバフローしたかあるいはそこへの書込に十分な部屋(room)を有するかを報告する。一般的に、ハードウェアはFIFOがオーバフローしたこと、すなわちデータの量がFIFOのサイズを超えたことを検出することはできない。 【0079】FIFOのオーバフローを検出する一般的な方法はないけれども、ハードウェアは、CPUライトポインタがFIFOの先頭に達したことを検出することができる。この状態が生じると、「fifowrap」の引数(argument)がGX_TRUEにリターンする。この「fifowrap」の引数は、もしCPUのライトポインタが常にFIFOのベースに初期化されるとすると、FIFOのオーバフローを検出するために使用され得る。「fifowrap」は、FIFOが現在CPU110に付属されていれば、セットされる。 【0080】GXGetGPStatus はグラフィクスプロセサ114のステータスを(それに付属されているFIFOに拘わらず)を取り込むために使用され得る。新たなグラフィクスプロセサのFIFOを付属させる前に必要な最小限の条件はグラフィクスプロセサ114がアイドル状態(idle)になるのを待つことである(しかし付加的な制約が存在する)。アンダーフローおよびオーバフローのステータスはライトポインタがハイウォータマークおよびローウォータマークに関連する場所を示す。 FIFOのフロー制御FIFOがCPUおよびグラフィクスプロセサの両方に付属されているとき(中間モード)、FIFOがフルになり過ぎたときにはCPUがコマンドの書込を停止するように注意しなければならない。「ハイウォータマーク」はグラフィクスコマンドがもはやFIFOへ書き込めなくなるであろう前に如何にFIFOのフルを取り込むかを規定する。好ましい実施例においては、CPU内に16Kバイトまでのグラフィクスコマンドがバッファリングされ得て、そのためにハイウォータマークを(FIFOのサイズ−16Kバイト)に設定することが望ましい。 【0081】ハイウォータマークに遭遇すると、プログラムは中断されるが、オーディオのような他の割込駆動タスクは作動する。プログラマはマルチスレッドプログラムにおいてどの具体的なスレッドが中断されるべきであるかを特定することを望む。 【0082】「ローウォータマーク」はプログラム(またはスレッド)が継続できる前に「ハイウォータマーク」に達した後にFIFOのエンプティを取り込まなければならない。ローウォータマークは(FIFOのサイズ/2)に設定されることが望ましい。新たなコマンドデータの量がハイウォータマークに接近して留まっているときにプログラムが何らかのレジスタをポーリングしたり定常的にオーバフロー割込を受け付ける必要がないので、このローウォータマークはプログラムにおける頻繁な状況の切換を防止する。 【0083】マルチバッファモードにおいては、ハイおよびローウォータマークはディスエーブルされる。FIFOがCPU110へ付属されていてCPUがFIFOが保持できるより以上のコマンドを書き込むときに、ライトポインタは最終アドレスからベースアドレスへラップされ戻される。FIFOにある先のグラフィクスコマンドは上書きされる。ライトポインタがFIFOの先頭へラップするときを検出することはできる(それは、コマンドが送られる前にFIFOのライトポインタがFIFOのベースに初期化されている場合に限ってオーバフローを示す)。上で述べたGXGetFifoStatus を参照のこと。 【0084】マルチバッファモードにおいてFIFO(バッファ)のオーバフローを防止するために、ソフトウェアベースでチェックする方法が使用され得る。主プロセサ110上で実行中のプログラムはバッファサイズのそれ自身のカウンタを保持しなければならず、そして任意のグループのコマンドがバッファへ付加される前に、プログラムは部屋があるかどうかをチェックして判断する。もし部屋が利用可能であれば、グループのサイズがバッファサイズへ加えられ得る。もし部屋が利用可能でなければ、バッファはフラッシュされて新たなものが割り付けられる。 表示リストコールの使用好ましい実施例においてFIFOバッファ210から表示リストをコールするために、アプリケーションはまず、表示リストをストアするためのメモリ中のスペースを割り付ける。メモリエリアが一旦セットアップされると、アプリケーションは、たとえば次のものをコールする。 【0085】 【表7】
【0086】「リスト」の引数が表示リストがストアされる位置の開始アドレスであり、「サイズ」の引数が表示リストコマンドを書き込むための割り付けられたスペースにおいて利用可能なバイト数を示す場合、システムがオーバフローをチェックすることができる。 【0087】「GXBeginDisplayList」が一旦コールされると、別のGXコマンドが通常のコマンドFIFOに代わって表示リストへ書き込まれる。「GXEndDisplayList」コマンドは表示リストの終了へ信号を送り、先に向けられていたFIFOへコマンドストリームをリターンさせる。「GXEndDisplayList」コマンドはまた、生成された表示リストの実際のサイズを、好ましい実施例においては32バイトの倍数としてリターンする。 【0088】実施例において、表示リストは入れ子(nest)されることはない。このことは、GXBeginDisplayListが一旦発行されると、GXEndDisplayListコマンドがやって来るまでに他のGXBeginDisplayListまたはGXCallDisplayList コマンドを発行することは違法であることを意味する。しかしながら、別の実施例においては、任意の所望の入れ子レベルに表示リストを入れ子することはできる。 グラフィクスFIFO関数の例以下に例示する関数はグラフィクスFIFOの管理を提供する。 【0089】 【表8】
【0090】グラフィクスFIFOの制限を設定する。この関数は初期化時にコールされる。FIFOアドレスはグラフィクスパイプラインがフラッシュされない限り変更されることはない。SetDefaultのフラグがセットされると、FIFOはリセットされ(すなわち、リード/ライトポインタをFIFOのベースへ)、そして割込がディスエーブルされる。デフォルトによって、ハイウォータマークがサイズの2/3に設定され、ローウォータマークがサイズの1/3に設定される。 【0091】 【表9】
【0092】この関数はFIFOの制限をセットする。リードポインタがローウォータマーク以下になったときもしくはライトポインタがハイウォータマーク以上になったとき、グラフィクスハードウェアはCPUへ割込をかける。RdBreakMark がリードポインタ中断点を設定するために使用される。 【0093】 【表10】
【0094】FIFOに関連する割込をイネーブルしもしくはディスエーブルする。BreakPointは、先のフレームがまだコピーされているときにCPによってFIFOの読出をフォールトするために使用され得る。 【0095】 【表11】
【0096】保留中の割込をクリアする。 【0097】 【表12】
【0098】FIFOリードおよびライトポインタをセットする。これらのポインタはハードウェアによって維持される。この関数はハードウェア値を無視する(たとえば、表示リストのコンパイルのために)。 【0099】 【表13】
【0100】FIFOのステータスおよびカウントをリターンする。 表示リスト関数の例表示リストは予めコンパイルされたコマンドのアレイであり、グラフィクスパイプラインのためのデータである。次に例示するコマンドは表示リストを操作するためにFIFOバッファ210中へ挿入される。 【0101】 【表14】
【0102】この関数は表示リストを生成しかつ開始させる。APIは表示リストモードにされる。これに後続するすべてのAPI関数は、表示リスト関数の任意のものを除いて、EndDisplayListまでコールし、グラフィクスパイプラインに代わって表示リストバッファへそれらのデータおよびコマンドを送る。表示リストはこの実施例においては入れ子されない。すなわち、BeginDisplayListおよびEndDisplayListの間ではどんな表示リスト関数もコールされることはない。表示リストのためのメモリはアプリケーションによって割り付けられる。 【0103】 【表15】
【0104】この関数は現在開かれている表示オブジェクトを終了させ、システムを中間モードに戻す。 【0105】 【表16】
【0106】この関数は表示リストを実行する。 レジスタフォーマット次のテーブルはCPU110によってアドレス可能なコマンドプロセサ200における例示的なレジスタを示す。 【0107】 【表17】
【0108】互換性のある他の実施例上述のシステム50のあるものは上で述べた家庭用ビデオゲームコンソールの構成以外としても実現できる。たとえば、或るものは、システム50をエミュレートする異なる構成を有するプラットフォームもしくはそれと同等のものにおいて、システム50のために書かれたグラフィクスアプリケーションや他のソフトウェアを実行させることができる。もし、他のプラットフォームがシステム50のいくつかのもしくはすべてのハードウェアおよびソフトウェアリソースをエミュレートしシミュレートしおよび/または提供することができれば、その他のプラットフォームはそのソフトウェアを成功裏に実行することができる。 【0109】一例として、エミュレータがシステム50のハードウェアおよび/またはソフトウェア構成(プラットフォーム)とは異なるハードウェアおよび/またはソフトウェア構成(プラットフォーム)を提供できる。そのエミュレータシステムは、それのためにアプリケーションソフトウェアが書かれているシステムのいくつかのもしくはすべてのハードウェアおよび/またはソフトウェアコンポーネンツをエミュレートしもしくはシミュレートするソフトウェアおよび/またはハードウェアコンポーネンツを含む。たとえば、エミュレータシステムはパソコンのような汎用ディジタルコンピュータを含み、それはシステム50のハードウェアおよび/またはファームウェアをシミュレートするソフトウェアエミュレータプログラムを実行する。上述のオーディオシステムのDSP処理がパソコンによってエミュレートされ得る。 【0110】或る汎用ディジタルコンピュータ(たとえばIBMやマッキントッシュのパソコンおよびそれらの同等物)は、ダイレクトX(DirectX)または他の標準的な3DグラフィクスコマンドAPIsに従った3Dグラフィクスパイプラインを提供する3Dグラフィクスカードを備える。それらはまた、音声コマンドの標準的なセットに基づいて高品質のステレオ音声を提供するステレオ音声カードを備える。エミュレータソフトウェアを実行するそのようなマルチメディアのハードウェアを備えるパソコンは、システム50のグラフィクスおよび音声性能とほぼ等しい十分な性能を有する。エミュレータソフトウェアはパソコンプラットフォーム上のハードウェアリソースを制御して、それのためにゲームプログラマがゲームソフトウェアを書いた家庭用ビデオゲームコンソールプラットフォームの処理,3Dグラフィクス,音声,周辺および他の能力をシミュレートする。 【0111】図14はホストプラットフォーム1201,エミュレータコンポーネント1303および記憶媒体62上のゲームソフトウェア実行可能バイナリ映像を用いる全体のエミュレーション処理を図解する。ホスト1201は、たとえばパソコン,ビデオゲームコンソールあるいは十分な計算力を有する任意の他のプラットフォームのような汎用または特定目的ディジタル計算装置である。エミュレータ1303はそのホストプラットフォーム1201上で走るソフトウェアおよび/またはハードウェアであり、記憶媒体62からのコマンド,データおよび他の情報のそのホスト1201によって実行可能な形態へのリアルタイム変換を行う。たとえば、エミュレータ1303は記憶媒体62からシステム50によって実行されるように意図された「ソース」であるバイナリ映像プログラム命令を取り込み、これらのプログラム命令をホスト1201によって実行されもしくは処理され得るターゲットとなる形態に変換する。 【0112】一例として、ソフトウェアがIBMパワーPCまたは他の特定のプロセサを用いるプラットフォーム上での実行のために書かれかつホスト1201が異なる(たとえばインテル)プロセサを用いるパソコンである場合、エミュレータ1203は記憶媒体1305からの1つのもしくは一連のバイナリ映像プログラム命令を取り込み、これらのプログラム命令を1つまたはそれ以上の同等のインテルのバイナリ映像プログラム命令に変換する。エミュレータ1203はまたグラフィクス/オーディオプロセサ114によって処理されるように意図されたグラフィクスコマンドおよびオーディオコマンドを取り込みかつ/あるいは生成し、そしてホスト1201上で利用可能なハードウェアおよび/またはソフトウェアグラフィクス/オーディオ処理リソースによって処理され得る形態にこれらのコマンドを変換する。一例として、エミュレータ1303はホスト1201の特別なグラフィクスおよび/または音声ハードウェア(たとえば標準的なダイレクトX,オープンGLおよび/または音声APIs)によって処理され得るコマンドにこれらのコマンドを変換する。 【0113】システム50の或るエミュレータは、上で述べたバッファリングおよびフロー制御技術のいくつかもしくはすべてを単に「無視」する。なぜなら、エミュレータは上で述べた実施例のハードウェア構成より非常に多いメモリリソースを持たなければならないからである。そのようなエミュレータは、典型的には、割付メモリリソースによるバッファ割付のための要求に応答するが、異なるフロー制御処理を提供するであろう。上で述べたステータスおよびフロー制御要求は、ハードウェアのエミュレートされた状態を維持しそのステータス要求に応答するためにその状態を使用することによってエミュレートされ得る。 【0114】上で述べたビデオゲームシステムの特徴のいくつかあるいはすべてを提供するために使用されるエミュレータ1303は、グラフィクスユーザインタフェース(GUI)を備え、そのGUIはエミュレータを使ったゲームの実行のための種々の動作やスクリーンモードの選択を単純化しもしくは自動化する。一例において、そのようなエミュレータ1303はさらに、ソフトウェアがそれのために元々意図されていたホストプラットホームに比べて増強された機能性を含む。 【0115】図15はエミュレータ1303で用いるに適したエミュレーションホストシステム1201を図解的に示す。このシステム1201は処理ユニット1203およびシステムメモリ1205を含む。システムバス1207がシステムメモリ1205を含む種々のシステムコンポーネンツを処理ユニット1203に結合する。システムバス1207は多様なバスアーキテクチャのいずれかを用いるメモリバスもしくはメモリコントローラ,周辺バスおよびローカルバスを含むいくつかのタイプのバス構造の任意のものである。システムメモリ1207はROM1252およびRAM1254を含む。起動中においてのようにパソコンシステム1201中のエレメント(要素)間に情報を伝送する手助けをする基本ルーチンを含む基本入力/出力システム(BIOS)1256がROM1252中にストアされる。システム1201はさらに種々のドライブおよび関連のコンピュータ読出可能な媒体を含む。ハードディスクドライブ1209が(典型的には固定の)磁気ハードディスク1211から読み出しそれへ書き込む。付加的な(たぶんオプションとしての)磁気ディスクドライブ1213が着脱可能な「フロッピィ」または他の磁気ディスク1251から読み出しかつそれへ書き込む。光ディスクドライブ1217はCD−ROMあるいは他の光学媒体のような着脱自在な光ディスク1219から読み出しかつそれへ書き込む。ハードディスクドライブ1209および光ディスクドライブ1217は、ハードディスクドライブインタフェース1221および光ディスクドライブインタフェース1225によって、システムバス1207にそれぞれ接続される。これらのドライブおよびその関連するコンピュータ読出可能な媒体は、パソコンシステム1201のためのコンピュータ読出可能な命令,データ構造,プログラムモジュール,ゲームプログラムおよび他のデータの不揮発性の記憶媒体を提供する。他の構成では、コンピュータによってアクセス可能なデータをストアすることができる他のタイプのコンピュータ読出可能な媒体(たとえば磁気カセット,フラッシュメモリカード,ディジタルビデオディスク,ベルヌーイカートリッジ,RAM,ROMあるいはその他のもの)がまた使用できる。 【0116】エミュレータ1303を含む多数のプログラムモジュールがハードディスク1211,着脱可能な磁気ディスク1215,光ディスク1219および/またはシステムメモリ1205のROM1252および/またはRAM1254にストアされ得る。このようなプログラムモジュールはグラフィクス/音声APIs,1つ以上のアプリケーションプログラム,他のプログラムモジュール,プログラムデータおよびゲームデータを提供するオペレーティングシステム(OS)を含む。ユーザは、キーボード1227,ポインティングデバイス1229,マイクロフォン,ジョイスティック,ゲームコントローラ,衛星アンテナ(satellite dish),スキャナあるいはその他のもののような入力デバイスを通して、パソコンシステム1201にコマンドおよび情報を入力することができる。これらのそして他の入力デバイスは、システムバス1207に結合されたシリアルポートインタフェース1231を通して処理ユニット1203に接続され得るが、パラレルポート,ゲームポートファイヤワイヤバス(Fire Wire)もしくはユニバーサルシリアルバス(USB)のような他のインタフェースによって接続されてもよい。モニタまたは他のタイプの表示デバイスがまたビデオアダプタ1235のようなインタフェースを介してシステムバス1207に接続される。 【0117】システム1201はモデム1154またはインターネットのようなネットワーク1152を通しての通信を確立するための他のネットワークインタフェース手段を含む。内蔵もしくは外付けであってよいモデム1154はシリアルポートインタフェース1231を介してシステムバス123に接続される。システム1201がローカルエリアネットワーク1158を介して遠隔コンピュータ装置1150(たとえば他のシステム1201)と通信するのを許容するために、ネットワークインタフェース1156がまた設けられてもよい(もしくはそのような通信はダイヤルアップもしくは他の通信手段のようなワイドエリアネットワーク1152もしくは他の通信経路を介してもよい)。システム1201はプリンタのような周辺出力装置および他の標準的な周辺装置を含む。 【0118】一例では、ビデオアダプタ1235は、マイクロソフト(Microsoft)のダイレクトX7.0、または他のバージョンのような標準的な3Dグラフィクスアプリケーションプログラマインタフェースに基づいて発行された3Dグラフィクスコマンドに応答して、高速の3Dグラフィクスレンダリングを提供する3Dグラフィクスパイプラインチップセットを含んでもよい。1組のスピーカ1237はまた、バス1207によって与えられる音声コマンドに基づいて高品質ステレオ音声を生成するハードウェアおよび埋め込みソフトウェアを提供する従来の「音声カード」のような音声生成インタフェースを介して、システムバス1207に接続される。これらのハードウェア能力によって記憶媒体1305中にストアされているソフトウェアを再生するためにシステム1201に十分なグラフィクスおよび音声の速度性能を与えることができる。 【0119】上で参照したすべての書類をここで、参照によって取り入れる。 【0120】最も現実的かつ好ましい実施例であると現在考えられているものに関連してこの発明が説明されたが、この発明は開示された実施例に限定されるものではなく、逆に、特許請求の範囲内に含まれる種々の変形例や等価的な構成をカバーするように意図されていることを理解されたい。
|
| 【出願人】 |
【識別番号】000233778 【氏名又は名称】任天堂株式会社
|
| 【出願日】 |
平成13年6月28日(2001.6.28) |
| 【代理人】 |
【識別番号】100090181 【弁理士】 【氏名又は名称】山田 義人
|
| 【公開番号】 |
特開2002−132489(P2002−132489A) |
| 【公開日】 |
平成14年5月10日(2002.5.10) |
| 【出願番号】 |
特願2001−195710(P2001−195710) |
|