(57)【要約】  スケーラブルシェーダアーキテクチャを開示する。このアーキテクチャでは、シェーダが多数のパイプラインを含み、その各々はラスタピクセルデータに処理オペレーションを実施可能である。シェーダパイプラインは必要に応じて機能的に除去可能であり、欠陥のあるシェーダパイプラインがチップの廃棄を生じることを防止する。シェーダはシェーダディストリビュータを含み、これはラスタピクセルデータを処理して選択的に処理されるラスタピクセルデータを種々のシェーダパイプラインに分配し、好適には負荷をバランスする。シェーダコレクタは種々のシェーダパイプラインの出力を適切な順へフォーマットして陰影付ピクセルデータを形成する。シェーダ命令プロセッサ（スケジューラ）は目的のタスクを実施するよう個々のシェーダパイプラインをプログラムする。シェーダパイプラインはシェーダゲートキーパを有する。【選択図】図３
2007533029.tif 000002
【特許請求の範囲】
【請求項１】
それぞれがラスタピクセルデータを処理する複数のパイプラインシェーダと、
ラスタピクセルデータを前記複数のシェーダパイプラインに選択的に分配するシェーダディストリビュータと、
前記シェーダパイプラインの計算結果を集めて、陰影付ピクセルデータを形成するシェーダコレクタと、
を備えるシェーダ。
【請求項２】
各シェーダパイプラインが、ラスタピクセルデータの処理をプログラムするコマンドを与えるシェーダスケジューラを含む、請求項１に記載のシェーダ。
【請求項３】
前記コマンドが、少なくとも一つのシェーダパイプラインに分岐オペレーションを実行させる分岐コマンドを含む、請求項２に記載のシェーダ。
【請求項４】
前記ラスタピクセルデータを前記シェーダディストリビュータに送るラスタライザを更に含む、請求項１に記載のシェーダ。
【請求項５】
前記シェーダディストリビュータによって受け取られる前記ラスタピクセルデータは、前記シェーダパイプラインにデータの損失なく適合することができるセグメントに分割される、請求項４に記載のシェーダ。
【請求項６】
前記シェーダパイプラインの少なくとも一つが、前記ラスタピクセルデータを処理して、テクスチャ情報を加える、請求項１に記載のシェーダ。
【請求項７】
前記シェーダパイプラインの少なくとも一つが、算術オペレーションを前記ラスタピクセルデータに対して実行する、請求項１に記載のシェーダ。
【請求項８】
前記シェーダディストリビュータが、前記シェーダパイプラインの少なくとも一つを、受信した設定情報に基づいて、機能無効にする、請求項１に記載のシェーダ。
【請求項９】
前記シェーダディストリビュータは、前記シェーダパイプラインの前記少なくとも一つを、ラスタピクセルデータを前記少なくとも一つのシェーダパイプラインに分配しないことによって、機能無効にする、請求項８に記載のシェーダ。
【請求項１０】
前記設定情報は、前記少なくとも一つのシェーダパイプラインを特定する、請求項８に記載のシェーダ。
【請求項１１】
アプリケーションプログラムを動作させる中央処理ユニットであって、該アプリケーションプログラムが該中央処理ユニットにデータを生成させる、該中央処理ユニットと、
前記データをフレームバッファピクセルデータに変換する処理ユニットであって、シェーダを有する該処理ユニットと、
を備え、
前記シェーダは、
それぞれがラスタピクセルデータを処理する複数のシェーダパイプラインと、
ラスタピクセルデータを前記複数のシェーダパイプラインに選択的に分配するシェーダディストリビュータと、
陰影付ピクセルデータを前記複数のシェーダパイプラインから集めるシェーダコレクタと、
を有する、コンピュータシステム。
【請求項１２】
フレームバッファピクセルデータを記憶するためのフレームバッファメモリを備える、請求項１１に記載のコンピュータシステム。
【請求項１３】
前記フレームバッファピクセルデータを表示するためのディスプレイを更に備える、請求項１１に記載のコンピュータシステム。
【請求項１４】
前記処理ユニットが、前記ラスタピクセルデータの処理を制御するコマンドを与えるシェーダスケジューラを含む、請求項９に記載のコンピュータシステム。
【請求項１５】
前記コマンドが、少なくとも一つのシェーダパイプラインに分岐オペレーションを実行させる分岐コマンドを含む、請求項１４に記載のコンピュータシステム。
【請求項１６】
前記処理ユニットが、前記ラスタピクセルデータを前記シェーダディストリビュータに送るラスタライザを更に含む、請求項１１に記載のコンピュータシステム。
【請求項１７】
前記シェーダディストリビュータによって受け取られる前記ラスタピクセルデータが、前記複数のシェーダパイプラインの一つにデータの損失無く適合することができるセグメントに分割される、請求項１６に記載のコンピュータシステム。
【請求項１８】
前記シェーダパイプラインの少なくとも一つが、ラスタピクセルデータを選択的に処理してテクスチャ情報を加える、請求項１１に記載のコンピュータシステム。
【請求項１９】
少なくとも一つのシェーダパイプラインが、算術オペレーションを前記ラスタピクセルデータに対して選択的に実行する、請求項１１に記載のコンピュータシステム。
【請求項２０】
前記シェーダディストリビュータが、前記シェーダパイプラインの少なくとも一つを、受信される設定情報に基づいて、機能無効にする、請求項１１に記載のコンピュータシステム。
【請求項２１】
前記シェーダディストリビュータは、前記シェーダパイプラインの前記少なくとも一つを、ラスタピクセルデータを前記少なくとも一つのシェーダパイプラインに分配しないことによって、機能無効にする、請求項２０に記載のコンピュータシステム。
【請求項２２】
前記設定情報は、前記少なくとも一つのシェーダパイプラインを特定する、請求項２０に記載のコンピュータシステム。
【請求項２３】
未加工のグラフィックデータを受け取るフロントエンドと、
前記未加工のグラフィックデータを幾何図形プリミティブへと編成するジオメトリエンジンと、
前記幾何図形プリミティブをラスタピクセルデータに変換するラスタライザと、
前記ラスタピクセルデータを処理するシェーダと、
を備え、
前記シェーダは、
それぞれが前記ラスタピクセルデータの少なくとも一部を処理する複数のシェーダパイプラインと、
前記ラスタピクセルデータを選択的に受け取り、前記ラスタピクセルデータを前記複数のシェーダパイプラインに分配するシェーダディストリビュータと、
陰影付ピクセルデータを前記複数のシェーダパイプラインの出力から形成するシェーダコレクタと、
を含む、
グラフィック処理集積回路。
【請求項２４】
前記シェーダが、プログラムコマンドを前記複数のシェーダパイプラインに与えるシェーダスケジューラを含み、前記プログラムコマンドが前記ラスタピクセルデータの処理を制御する、請求項２３に記載のグラフィック処理集積回路。
【請求項２５】
ラスタピクセルデータが、前記シェーダパイプラインの一つ以上にデータの損失無く適合することができるセグメントに分割される、請求項２４に記載のグラフィック処理集積回路。
【請求項２６】
前記シェーダディストリビュータが、少なくとも一つのシェーダパイプラインを機能有効にする、請求項２３に記載のグラフィック処理集積回路。
【請求項２７】
前記シェーダディストリビュータが、前記少なくとも一つのシェーダパイプラインを、ラスタピクセルデータを該少なくとも一つのシェーダパイプラインに分配しないことによって、機能無効にする、請求項２６に記載のグラフィック処理集積回路。
【請求項２８】
前記シェーダディストリビュータが、前記少なくとも一つのシェーダパイプラインを特定するコマンド信号を受け取る、請求項２６に記載のグラフィック処理集積回路。
【請求項２９】
少なくとも一つのシェーダパイプラインが、前記ラスタピクセルデータを選択的に処理して、テクスチャ情報を加える、請求項２３に記載のグラフィック処理集積回路。
【請求項３０】
前記シェーダパイプラインの少なくとも一つが、算術オペレーションを前記ラスタピクセルデータに対して実行する、請求項２３に記載のグラフィック処理集積回路。
【請求項３１】
前記シェーダパイプラインの少なくとも一つが、分岐オペレーションを実行する、請求項２３に記載のグラフィック処理集積回路。
【請求項３２】
ラスタピクセルデータをラスタライザから受け取るステップであって、前記ラスタピクセルデータが、幾何図形プリミティブに関する情報と、前記幾何図形プリミティブ内のピクセルに関する情報とを含む、該ステップと、
前記受信したラスタピクセルデータを、所定の長さのセグメントに分割するステップと、
エンドオブセグメントタグを前記セグメントのそれぞれに加えるステップと、
前記セグメントを複数のシェーダパイプラインに選択的に分配するステップと、
を含み、
各シェーダパイプラインが、前記セグメントの一つを処理し、
第１のシェーダパイプラインが、前記セグメントのうちの第１のセグメントを受け取り、第２のシェーダパイプラインが前記セグメントのうちの第２のセグメントを受け取り、利用可能な場合に、付加的なシェーダパイプラインが、Ｎ個のシェーダパイプラインが前記セグメントのうちのＮ個を受け取るまで、前記セグメントのうちの一つを連続して受け取り、
セグメントを受け取るべき全てのシェーダパイプラインがセグメントを受け取った後に、前記セグメントのうちの次のセグメントが前記第１のシェーダパイプラインに与えられる、
シェーダを動作させる方法。
【請求項３３】
シェーダパイプラインのいずれかが、前記セグメントのうちの一つを受け取ることがない、請求項３２に記載のシェーダを動作させる方法。
【請求項３４】
シェーダパイプラインが機能無効にされる、請求項３３に記載のシェーダを動作させる方法。
【請求項３５】
前記シェーダパイプラインからの処理結果を集めて編成することによって、陰影付ピクセルデータを形成するステップを更に含む、請求項３２に記載のシェーダを動作させる方法。
【請求項３６】
第１のシェーディングパイプラインを、オペレーションを実行するための第１のセットの命令でプログラムするステップと、
ラスタピクセルデータを受け取るステップと、
前記ラスタピクセルデータの一部を前記第１のシェーディングパイプラインに選択的に分配するステップと、
第２のシェーディングパイプラインを、オペレーションを実行するための第２のセットの命令でプログラムするステップと、
前記ラスタピクセルデータの一部を前記第２のシェーディングパイプラインに選択的に分配するステップと、
少なくとも前記第１のシェーディングパイプラインの出力を集めて編成し、陰影付ピクセルデータを形成するステップと、
を含む、シェーダを動作させる方法。
【請求項３７】
前記第１及び第２のセットの命令が異なる、請求項３６に記載のシェーダを動作させる方法。
【請求項３８】
前記ラスタピクセルデータを選択的に分配する前記ステップが、前記ラスタピクセルデータを、デッドロックを防止するように分割するステップを含む、請求項３６に記載のシェーダを動作させる方法。
【請求項３９】
グラフィック処理プログラムを記憶するコンピュータ読み取り可能な媒体であって、該グラフィック処理プログラムが、
幾何図形プリミティブに関する情報と、前記幾何図形プリミティブ内のピクセルに関する情報とを含むラスタピクセルデータを受け取り、
前記受け取られたラスタピクセルデータを所定の長さのセグメントに分割し、
エンドオブセグメントタグを前記セグメントの各々に加え、
前記セグメントを複数のシェーダパイプラインに分配し、
前記シェーダパイプラインのそれぞれが、少なくとも一つのセグメントを処理し、
第１のシェーダパイプラインが第１のセグメントを受け取り、第２のシェーダパイプラインが第２のセグメントを受け取り、利用可能な場合に、Ｎ個のシェーダパイプラインがＮ個の付加的なセグメントを受け取るまで、付加的なシェーダパイプラインが連続してセグメントを受け取り、
セグメントを受け取るべき全ての前記シェーダパイプラインがセグメントを受け取った後、次のセグメントが前記第１のシェーダパイプラインに与えられる、
ように前記グラフィックシステムを制御する、コンピュータ読み取り可能な媒体。
【請求項４０】
前記シェーダパイプラインの少なくとも一つが、セグメントを受け取らない、請求項３９に記載のコンピュータ読み取り可能な媒体。
【請求項４１】
セグメントを受け取らない前記シェーダパイプラインの何れか一つが、機能無効にされる、請求項４０に記載のコンピュータ読み取り可能な媒体。
【請求項４２】
前記シェーダパイプラインの計算結果を編成することを含む、請求項３９に記載のコンピュータ読み取り可能な媒体。
【請求項４３】
グラフィック処理プログラムを記憶するコンピュータ読み取り可能な媒体であって、該グラフィック処理プログラムが、
第１のシェーディングパイプラインを、オペレーションを実行するための第１のセットの命令でプログラムするステップと、
ラスタピクセルデータを受け取るステップと、
前記ラスタピクセルデータの一部を前記第１のシェーディングパイプラインに選択的に分配するステップと、
第２のシェーディングパイプラインを、オペレーションを実行するための第２のセットの命令でプログラムするステップと、
前記ラスタピクセルデータの一部を前記第２のシェーディングパイプラインに選択的に分配するステップと、
少なくとも前記第１のシェーディングパイプラインの出力を集めて編成し、陰影付ピクセルデータを形成するステップと、
を実行するようにグラフィックシステムを制御する、コンピュータ読み取り可能な媒体。
【請求項４４】
前記第１及び第２のセットの命令が異なる、請求項４３に記載のコンピュータ読み取り可能な媒体。
【請求項４５】
前記ラスタピクセルデータを選択的に分配するステップは、前記ラスタピクセルデータを、デッドロックを防止するように分割することを含む、請求項４３に記載のコンピュータ読み取り可能な媒体。
【請求項４６】
ラスタピクセルデータをラスタライザから受け取るステップであって、前記ラスタピクセルデータが、幾何図形プリミティブに関する情報と、前記幾何図形プリミティブ内のピクセル用のピクセル情報を含む、該ステップと、
前記受信されるラスタピクセルデータを、所定の長さのセグメントに分割するステップと、
前記セグメントを、複数のシェーダパイプラインに分配するステップと、
シェーダパイプラインに、その特定のシェーダパイプラインが分配されたセグメントを処理すべきことを通知する有効フィールドを送るステップと、
前記分配されたセグメントを、前記特定のシェーダパイプラインを用いて処理するステップと、
を含む、シェーダを動作させる方法。
【請求項４７】
前記分配されたセグメントを、前記複数のシェーダパイプラインのうち、前記特定のシェーダパイプラインを除く全てのシェーダパイプラインから消去するステップを更に含む、
請求項４６に記載のシェーダを動作させる方法。
【請求項４８】
複数のシェーダパイプラインのうち動作しているシェーダパイプラインを決定するステップと、
ラスタピクセルデータを、決定された動作しているシェーダパイプラインのみに送るステップと、
を含む、シェーダを動作させる方法。
【請求項４９】
未加工のグラフィックデータを受け取るフロントエンドと、
前記未加工のグラフィックデータを幾何図形プリミティブへと編成するジオメトリエンジンと、
前記幾何図形プリミティブをラスタピクセルデータに変換するラスタライザと、
前記ラスタピクセルデータを処理するシェーダであって、前記ラスタピクセルデータを複数のシェーダパイプラインに分配するシェーダディストリビュータを含み、陰影付ピクセルデータを前記複数のシェーダパイプラインの出力から形成するシェーダコレクタを更に含む、該シェーダと、
前記処理されたピクセルデータをフレームバッファデータへと処理するラスタオペレーションプロセッサと、
を備えるグラフィック処理ユニット。
【発明の詳細な説明】
【関連出願の相互参照】
【０００１】
[0001]本出願は、２００４年４月２０日に出願された”グラフィックシェーダアーキテクチャ”と題する米国仮特許出願第６０／５６１，６１７号（整理番号Ｐ００１２７８）の利益を主張するものであり、当該仮出願は参照として本明細書に組み込まれる。
【発明の分野】
【０００２】
[0002]本発明は、コンピュータシステムに関するものであり、より詳細にはコンピュータシェーディングに関するものである。
【発明の背景】
【０００３】
[0003]グラフィック処理は、現代の高性能計算システムにとって重要な特徴である。グラフィック処理では、算術手順を実施して図形プリミティブ、例えば三角形又は矩形をレンダリング、即ち描画し、所望の視覚画像を生成する。実時間グラフィック処理は、視覚的に満足のいく動画を生成するために、図形プリミティブの高速処理に基づいている。
【０００４】
[0004]初期のグラフィックシステムは、滑らかな表面をもつ図形プリミティブからなる画像オブジェクトを表示することに限定されていた。即ち、視覚的なテクスチャ、隆起（ｂｕｍｐ）、スクラッチ、又は他の表面の特徴が、図形プリミティブではモデル化されていなかった。そして、画質を向上するために、実世界の特質のテクスチャマッピングが導入された。一般的には、テクスチャマッピングは、画像を図形プリミティブの表面上にマッピングするものであり、複雑な画像の外観を、オブジェクトの実際の三次元の細部をレンダリングすることに関連する高い計算コストをもたらすことなく、生成するものである。
【０００５】
[0005]グラフィック処理は、通常、アプリケーションプログラムインターフェイス（ＡＰＩ）を用いて実行されるものであり、ＡＰＩは、マルチプラットフォームのオペレーティングシステム及びハードウェアで実行することが可能な標準ソフトウェアインターフェイスを提供する。ＡＰＩの例には、オープングラフィックライブラリ（ＯｐｅｎＧＬ）とＤ３Ｄがある。一般的には、このようなアプリケーションプログラムは、関連のハードウェアによって実行される所定の標準化されたコマンドのセットを含む。例えば、ＯｐｅｎＧＬをサポートするコンピュータシステムでは、オペレーティングシステムとアプリケーションソフトウェアプログラムが、システムハードウェアに関する如何なる仕様も知ることなく、標準に基づいて呼び出しを行うことができる。アプリケーションの作者は、ＡＰＩを使用して、それらのコマンドが如何に実装されるかについての関心をもつことなく、それらアプリケーションの視覚的態様を設計することが可能である。
【０００６】
[0006]ＡＰＩは、それらが専用ハードウェアによってサポートされる場合に、特に有益である。実際に、グラフィック画像の高速処理は、しばしば、半導体基板上に製造された専用のグラフィック処理ユニット（ＧＰＵ）を用いて実行される。有益なことに、ＧＰＵを設計し使用して、他のシステムリソースに大きな影響を与えることなく、高速且つ正確にコマンドを処理することができる。
【０００７】
[0007]図１は、グラフィック処理ユニット１０２を含むグラフィックシステム１００の簡略化したブロック図を示している。図示するように、グラフィック処理ユニット１０２は、ホストインタフェイス／フロントエンド１０４を有している。ホストインタフェイス／フロントエンド１０４は、未加工のグラフィックデータを中央処理ユニット（ＣＰＵ）１０３から受け取る。当該ＣＰＵ１０３は、メモリ１０５に記憶されたアプリケーションプログラムを実行する。ホストインタフェイス／フロントエンド１０４は、入力情報を蓄積し、当該情報をジオメトリエンジン１０６に供給する。ジオメトリエンジンは、フレームバッファメモリ１２０にフレームバッファインタフェイス１１６を介してアクセスする。ジオメトリエンジン１０６は、フレームバッファメモリ１２０に記憶されている「モデル」座標における図形プリミティブの三次元の頂点を、二次元フレームバッファ座標へと生成、スケーリング、回転、及び投影する。通常、三角形が三次元オブジェクト用の図形プリミティブとして使用されるが、矩形がしばしば二次元オブジェクト（例えばテキスト表示）用に使用される。
【０００８】
[0008]ジオメトリエンジン１０６からの図形プリミティブの頂点の二次元フレームバッファ座標は、ラスタライザ１０８に与えられる。ラスタライザ１０８は、図形プリミティブ内の全ピクセルの位置を特定する。これは、通常、図形プリミティブを定義するライン間に延在するラスタ（水平）ラインに沿って実行される。ラスタライザ１０８の出力は、ラスタピクセルデータと称される。
【０００９】
[0009]ラスタピクセルデータは、シェーダ１１０に与えられ、シェーダ１１０は、入力データ（コード、位置、テクスチャ、状態、定数等）を、シェーダプログラム（命令の系列）を使用して処理し、出力データを生成する。シェーダはグラフィック処理に関連して記述されるものであるが、一般には、多くの他の機能に有益なものである。シェーダは、データを並列に扱うように、大容量のデータを同時に扱うことができる処理機能の集合、であると考えることができる。
【００１０】
[0010]シェーダ１１０は、テクスチャエンジン１１２を含み、当該テクスチャエンジン１１２は、ラスタピクセルデータを所望のテクスチャ及び光学的特長を有するように変更する。テクスチャエンジン１１２は、フレームバッファメモリ１２０に記憶されたデータへのアクセスが可能であり、大容量のデータを非常に高速に処理するハードウェアパイプラインを用いて実装することが可能である。陰影付（Ｓｈａｄｅｄ）ピクセルデータは、次いで、ラスタオペレーションプロセッサ１１４（図１のＲａｓｔｅｒ  Ｏｐ）に送られ、当該ラスタオペレーションプロセッサ１１４が、任意的に、追加の処理を陰影付ピクセルデータに施す。その結果のピクセルデータは、フレームバッファメモリ１２０にフレームバッファインタフェイス１１６によって記憶される。フレームピクセルデータは、ディスプレイ１２２に表示するなど、種々の処理に使用される。
【００１１】
[0011]プログラム可能なシェーダは、達成可能な視覚効果における柔軟性を実現し、グラフィック機能が利用可能とされてから当該グラフィック機能がグラフィックＡＰＩの一部として標準化されるまでの間の時間を削減することが可能である。プログラム可能なシェーダは、そのモードにおいて標準ＡＰＩコマンドが実施される標準ＡＰＩモードと、そのモードにおいて新たなグラフィックの特徴をプログラム可能な非標準モードと、を有することができる。
【００１２】
[0012]シェーダはそれ自体が有益であると分かっている一方で、シェーダの性能に対する要求は、既存のシェーダの性能を超えている。既存のシェーダを改良することは幾つかの要求に対処できるが、かかる改良は実装することが困難である。さらに、将来の要求が既存のシェーダアーキテクチャ及び実装形態の改良によって達成可能な能力を超えることが予想される。したがって、新たなシェーダアーキテクチャが有益となろう。新たな高性能のプログラム可能なシェーダアーキテクチャは、ソフトウェアプログラム化されたグラフィック特徴を実現するものであり、更に有益であろう。また、新たな高性能のプログラム可能なシェーダアーキテクチャは、必要に応じてシェーダの性能への要求を満たすよう拡張可能であり、且つ進化したグラフィック機能を実現するよう拡張可能であり、有益であろう。
【００１３】
[0013]さらに、ＧＰＵは大きく複雑な半導体デバイスであり、高速で動作して多くの熱を発生するものであるので、また、シェーダはＧＰＵの大部分を占めるので、シェーダの欠陥はＧＰＵチップの廃棄の大部分をもたらす。シェーダの処理機能を提供しつつシェーダの機能部を有効又は無効にする能力を有するシェーダアーキテクチャが、有益であろう。
【発明の簡単な概要】
【００１４】
[0014]本発明の原理は、新規、有用、且つ非自明なスケーラブルシェーダアーキテクチャを提供する。かかるシェーダアーキテクチャは、必要に応じてスケールアップ及びスケールダウンが可能であり、性能要求を満たし、低減又は向上された性能をもつことが可能である。
【００１５】
[0015]本発明の原理を用いた幾つかの実施の形態は、高性能でプログラム可能な形態をとることができ、多数のシェーダパイプラインを含むことができ、それらの各々がデータ処理オペレーションをラスタピクセルデータに実施するようにプログラムすることが可能である。有益なことに、シェーダパイプラインは同一のものであり、これらを個別にプログラムすることができ、個々のシェーダパイプラインを無効にすることができ、一以上のシェーダパイプラインが無効である場合でもシェーダ処理オペレーションを実行することができる。
【００１６】
[0016]本発明の実施の形態では、シェーダディストリビュータが、ラスタピクセルデータを、多種のシェーダパイプラインに、当該シェーダパイプラインの負荷を同等にするようなバランスのとれた形で有益に、分配する。しかしながら、有益な場合には、一以上のシェーダパイプラインを機能的に無効にすることができ、これによってシェーダパイプラインにおける欠陥が機能しないチップを生じさせることを防止する。シェーダコレクタは、シェーダパイプラインの出力を集めて編成することにより、当該出力を適切な順として、陰影付ピクセルデータをもたらす。シェーダ命令プロセッサは、必要に応じて個々のシェーダパイプラインをプログラムして、その処理タスクを実行する。本発明の幾つかの実施の形態は、一より多いシェーダ命令プロセッサを有する。
【００１７】
[0017]各シェーダパイプラインは、ゲートキーパを含み、当該ゲートキーパは、シェーダディストリビュータ及びシェーダ命令プロセッサと連携し、これによってシェーダパイプラインを通るピクセルデータが必要に応じて制御及び処理される。
【００１８】
[0018]前述の及び他の側面並びに利点は、図面を参照しつつ、本発明の好適な実施の形態を以下に詳細に説明することによって、より良く理解される。
【好適な実施の形態の説明】
【００１９】
[0024]本発明の原理は、新規、スケーラブル、且つプログラム可能なシェーダアーキテクチャを提供する。当該原理に従うシェーダアーキテクチャは、多数のシェーダパイプラインを含み、当該シェーダパイプラインは、処理オペレーションをラスタピクセルデータに実施し陰影付ピクセルデータを生成するようにプログラムすることが可能である。一以上のシェーダパイプラインは、シェーダの機能を維持しつつ、機能無効にすることが可能である。これは、チップの廃棄を削減することを可能にし、所与のチップにおいて利用可能なパイプラインの数を単に調整することによって低性能又は高性能のチップを実施することを可能にする。かかるシェーダアーキテクチャは、シェーダディストリビュータを有し、当該シェーダディストリビュータは、処理されたラスタピクセルデータではあるが、ラスタピクセルデータを多種のシェーダパイプラインに、有益にはそれらの負荷をバランスさせるように与える。シェーダコレクタは、シェーダパイプラインの出力を集めて適切な順に編成し、陰影付ピクセルデータを生成する。シェーダ命令プロセッサ（スケジューラ）は、個々のシェーダパイプラインを目的のタスクを実行するようにプログラムする。幾つかの実施の形態は、各シェーダパイプライン用に一つのシェーダ命令プロセッサを有するといったように、多数のシェーダ命令プロセッサを使用することが可能である。
【００２０】
[0025]各シェーダパイプラインは、種々の処理オペレーション（プログラム）を実装する相異なるセットのプログラムコマンドを実行するようにプログラムすることが可能である。それらのコマンドは、分岐命令（branching  instructions）、テクスチャ処理、並びに、浮動小数点、固定小数点、及び又は整数値を用いる算術オペレーションを含む。各シェーダパイプラインは、シェーダゲートキーパを含み、当該ゲートキーパは、シェーダディストリビュータ及びシェーダ命令プロセッサと連携し、これによってシェーダパイプラインを通るデータを必要に応じて処理する。
【００２１】
[0026]新規なシェーダアーキテクチャをより良く理解するためには、その機能をより詳細に理解することが役立つであろう。ここで、図１に戻る。シェーダへの入力は、グラフィックシステムにおいて使用される図形プリミティブの頂点の二次元表示座標である。さらに、テクスチャステーション１１２は、フレームバッファ１２０内のデータへのアクセスが可能である。通常、必ずしもそうではないが、それらの図形プリミティブは三角形である。例えば、図２Ａは、図形プリミティブの三角形２０２を定義する頂点の座標（０，０）、（１，０）、及び（１，１）を示している。矩形が使用される場合には、追加の座標（０，１）が図形プリミティブに含まれる。しかしながら、テキストといった二次元プリミティブを除いて、三角形が最も一般的である。
【００２２】
[0027]三角形２０２の頂点２０１が既知になると、図形プリミティブ内のピクセルが決定される。これは、これらのピクセルが、図形プリミティブを形成する線２１０の間に位置するピクセルだからである。通常、ピクセルはラスタ走査線に沿って編成される。例えば、図２Ｂは、走査線２９９によって配列された、三角形２０２内の複数のピクセル２９８を示す。
【００２３】
[0028]図３は、本発明の原理に従っているシェーダアーキテクチャの高レベルのブロック図である。シェーダ３００は、図１の一般的なシェーダ１１０の新規、有用、且つ非自明な実施の形態である。シェーダ３００の目的は、ラスタライザ１０８からのラスタピクセルデータを、フレームバッファに送られるべき各ピクセルについての適切な色値及び深度値に変換することである(ラスタピクセルデータは、フラグメントごとに未加工のＸ，Ｙと、色、深度、テクスチャ、座標等といった頂点の属性ごとに平面方程式と、を有する）。そうするために、シェーダ３００は、グラフィックＡＰＩ機能に応答し、また、アプリケーションプログラムコマンドに応答して、算術方程式を解くための多数のオペレーションを実行し、所望の色値及び深度値を生成して、陰影付ピクセルデータを形成する。ラスタオペレーションプロセッサによる追加の処理の後、陰影付ピクセルデータは、フレームピクセルデータに変換され、当該フレームピクセルデータはフレームバッファインタフェイス１１６によってフレームバッファメモリ１２０内に記憶される（図１を参照のこと）。
【００２４】
[0029]シェーダ３００の注目すべき特徴は、その多数のシェーダパイプライン３０２である。各シェーダパイプライン３０２は、フレームバッファメモリ１２０に記憶されたプログラム情報を介して個々にプログラム可能であり、算術及び他の処理オペレーションをラスタピクセルデータに実施し、陰影付ピクセルデータを生成する。シェーダ３００は、四つのシェーダパイプライン３０２を有するように示されているが、一般には、１からＮ個のシェーダパイプライン３０２からなることができる。なお、Ｎは、整数である。この拡張性を使用して、単にシェーダパイプラインを追加又は減らすことによって、シェーダ処理パワーを制御することが可能である。さらに、かかる拡張性は、シェーダパイプライン３０２の冗長構成を実現する。言い換えると、欠陥のあるシェーダパイプライン３０２を機能無効にする能力を、シェーダ３００の全体の動作を維持しつつ、実現する。シェーダパイプライン３０２は、有益なことに同一のものであるので、必要に応じて追加のパイプライン３０２を製造することは、比較的単純な作業である。これは、同じマスク及び半導体製造プロセスを利用可能であるからである。
【００２５】
[0030]シェーダ３００は、また、シェーダディストリビュータ３０４を含む。シェーダディストリビュータ３０４の一つの機能は、ラスタライザ１０８からの情報（ラスタピクセルデータ）を、種々のシェーダパイプライン３０２に分配することであり、これによって、シェーダパイプラインがラスタピクセルデータを処理し得るようになる。有益なことに、この分配は、シェーダパイプライン３０２間でのバランスした負荷を提供するように実施される。即ち、各シェーダパイプライン３０２は、同様の量の処理を実施し、他のものを超えるように選択されない。シェーダディストリビュータ３０４の他の機能は、ラスタライザ１０８からのデータを処理して、シェーダパイプライン３０２が必要なものだけを受け取るようにする。
【００２６】
[0031]制御データの一部は、状態データと称されるものであり、ラスタライザから到来しシェーダパイプラインによって利用されないものであり、シェーダディストリビュータ３０４によってファーストインファーストアウト（ＦＩＦＯ）バッファメモリ３０６に与えられる。状態データの他に、ファーストインファーストアウトバッファメモリ３０６は、また、シェーダパイプラインを通らないピクセルカバレージデータ及びＸ−Ｙ座標を受け取る。
【００２７】
[0032]シェーダパイプライン３０２はラスタピクセルデータを個別に処理するので、シェーダパイプライン３０２の出力は、結果として生じる処理済のピクセルデータがフレームバッファ内のピクセルに（ラスタ走査線によって）、適切に整合するように編成されなければならない。シェーダ３００は、したがって、シェーダコレクタ３０８を有している。このシェーダコレクタ３０８は、シェーダパイプライン３０２の出力と、ファーストインファーストアウトバッファメモリ３０６の出力とを受け取り、シェーダオペレーションの結果を編成して、ラスタオペレーションプロセッサ（ＲＰＯ）１１４用の陰影付ピクセルデータを生成する。
【００２８】
[0033]シェーダコレクタ３０８の出力は、フレームバッファインタフェイス１１６を介してフレームバッファメモリ１２０に与えられ、それ故にディスプレイ１２２に与えられる。シェーダパイプライン３０２は全て、フレームバッファメモリからデータを（テクスチャ要求を経て）要求するので、シェーダ３００は、また、その処理を支援するＬ２キャッシュメモリ３１０を含んでいる。
【００２９】
[0034]シェーダ３００は、本発明の原理に従うシェーダアーキテクチャを有する。このアーキテクチャは、多数の個別にプログラム可能なシェーダパイプライン、シェーダパイプラインにデータを分配するシェーダディストリビュータ、及び、シェーダパイプラインの計算結果を集め、シェーダパイプラインの計算結果を編成して、ＲＯＰ１１４によって使用される陰影付ピクセルデータを生成するシェーダコレクタを実現する。陰影付ピクセルデータはＲＯＰ１１４によって更に処理されて、フレームバッファデータを形成する。全体のアーキテクチャのスキームは明確であるが、本発明の利益及び応用の理解を助けるために、シェーダ３００のより詳細な説明が有益であろう。そのために、図４は、シェーダ３００の部分４００の更に詳細なブロック図を示す。部分４００は、一つのシェーダパイプライン３０２と一つのスケジューラのみを示すが、多数のシェーダパイプライン３０２及び多数のスケジューラが本発明の原理に完全に従うことを理解すべきである。
【００３０】
[0035]図４を参照すると、シェーダディストリビュータ３０４はラスタライザ１０８からの情報を受け取り、次いでラスタストリーム情報及び矩形ラスタストリーム情報をシェーダパイプライン３０２内のシェーダゲートキーパ４０４（更に詳細には後述する）に、分配する。ラスタライザ１０８からの情報は、二つの主なフォーマット、平面方程式情報として示す三角平面方程式情報、及びラスタストリーム情報の形式の三角ラスタピクセルデータの形態をとっている。さらに、シェーダ３００は、また、三角形の図形プリミティブに関する入力である二次元の情報を取り扱うので、シェーダディストリビュータ３０４はまた、三角ラスタピクセルデータを受け取る。
【００３１】
[0036]シェーダディストリビュータ３０４の主な機能は、三角平面方程式情報とラスタストリーム情報とを、個々のシェーダパイプライン３０２に分配することであり、シェーダパイプライン３０２間のシェーダパイプライン負荷をバランスさせるようにすることが有益である。即ち、処理において優先されるシェーダパイプライン３０２はなく、各々が同じ機能をもつ。これによって、通常、種々のシェーダパイプライン３０２によって実行される均等な作業をもたらす。先述したように、シェーダパイプライン３０２に必要とされないが他の目的に必要とされる情報は、シェーダディストリビュータ３０４によってファーストインファーストアウトバッファメモリ３０６（図３を参照のこと）に転送される。
【００３２】
[0037]データをシェーダパイプライン３０２に実際に分配することには、二つのフェーズ、即ちセグメンテーションと分配において実行される。これは、少なくとも部分的には、各シェーダパイプライン３０２が、一時に限られた数のピクセルに対する処理を実行するからである。この数は、通常、グラフィックオペレーションを完了するために処理されなければならないピクセルの数より非常に小さいものである。したがって、入力データは、「エンドオブセグメント（ｅｎｄ−ｏｆ−ｓｅｇｍｅｎｔ）」トークンを用いて部分に分割される。エンドオブセグメントトークン及び他のリソースの制限は、入力データを「セグメント」と呼ばれるグループに分断する。
【００３３】
[0038]分割は、入力ラスタストリーム情報をセグメントに分断する処理である。実際に分割をすることには、多くの理由がある。その一つは多数のシェーダパイプライン３０２間の負荷バランスにあり、他の一つは単一のシェーダパイプライン３０２によってなし得る作業負荷サイズにある。後者は、シェーダパイプライン内のシェーダ処理ステーション３０９によって取り扱うことが可能なピクセルの数に依存する。この数は、デッドロックと称される条件によって制限される。これについては後述する。単一のシェーダパイプライン３０２によって取り扱うことのできるピクセルの数は、また、シェーダ登録ファイル（ＲＡＭ）４２０のメモリ記憶容量によって制限される。
【００３４】
[0039]単一の処理ステーション３０９、及びシェーダ登録ファイル（ＲＡＭ）４２０のメモリ記憶容量によって取り扱うことの可能な最大のピクセル数に加えて、他の実用性がセグメントのサイズを制限する。各シェーダゲートキーパ４０４は、制限された量のＲＡＭを有する。実際に、ＲＡＭは、セグメントの一部となり得る三角形（属性及びピクセル）の数を制限する。その数は、シェーダゲートキーパ４０４のＲＡＭの中に占める各三角形のワードの数に依存し、これは三角形ごとに処理されるテクスチャ座標の数（及びそれぞれの次元)といった因子に動的に依存する。処理される実際のピクセルの数は、シェーダパイプラインの編成とシェーダパイプラインプロセッサ３０９の利用可能なレイテンシー（待ち時間）に依存する。
【００３５】
[0040]分割することの別の理由は、シェーダパイプライン３０２が状態バンドル（ｓｔａｔｅ  ｂｕｎｄｌｅｓ）を再循環し得ないことにある。状態バンドルは、シェーダのオペレーションを制御するデータである。状態バンドルは処理済データにはなり得ないので、セグメント境界、従ってセグメントが必要である。
【００３６】
[0041]分割に関連するのは、データを編成する方法である。一実施の形態では、シェーダ３００は、ピクセルクワッド（ｑｕａｄｓ）について演算を行う。これは、同時に処理されるコンポーネントを有する２×２のピクセルブロックである。次いで、クワッドのセグメントが形成される。しかしながら、クワッドを使用することは、本発明の原理の要件ではない。幾つかの実施の形態では、特定のピクセルのグループを全く処理しないことがあり、一方、他の幾つかの実施の形態ではグループにおけるピクセルの他の数を使用することもある。例えば、これは、トライアッド（Ｔｒｉａｄｓ）と呼ばれる３ピクセルのグループである。一般的に、ピクセルのグループ化は、１〜Ｍの数を用いることができる。なお、Ｍは整数である。
【００３７】
[0042]分配は、シェーダパイプライン３０２の一つを選択し、そのシェーダパイプライン３０２に完全なセグメントを供給し、次いで、次のセグメントを次のシェーダパイプライン３０２に供給するプロセスである。シェーダ３００（図３を参照のこと）では、セグメントの分配のシーケンスが、動作可能なシェーダパイプライン３０２間の単純なラウンドロビン方式の割り当てである。例えば、四つのシェーダパイプライン３０２があり、その三つが動作可能である場合には、分配シーケンスは三つの動作可能なシェーダパイプライン３０２の間におけるものとなる。第１のセグメントはシェーダパイプライン０に向かい、次のセグメントがシェーダパイプライン１に向かい、次のセグメントがシェーダパイプライン２に向かい、次いでシェーダパイプライン０に戻るであろう。
【００３８】
[0043]先述したように、シェーダディストリビュータ３０４は、（動作時及び製造時のいずれかにおいて）選択されたシェーダパイプライン３０２を無効にするよう構成可能である。これは、欠陥のあるシェーダパイプライン３０２の機能が他のシェーダパイプライン３０２によって実施されることを可能とし、製造者が低下又は向上させた性能のデバイスを提供することを可能にする。したがって、欠陥のあるシェーダパイプライン３０２は、必ずしも全体の半導体チップの廃棄をもたらさない。シェーダパイプラインが作動することを決定するのに、如何なる方法も使用可能である。例えば、製造時におけるチップのテスト、テストプログラム、チップ又はその計算結果の視覚検査を使用して、作動するシェーダパイプライン３０２を特定することができる。
【００３９】
[0044]ここで図３に戻る。選択されたシェーダパイプライン３０２を無効にすることは、シェーダパイプラインを実現することに関連する。単一の三角形は非常に大きいものであってもよいので、それを処理することが多数のセグメントに及ぶことも可能である。しかし、一つのシェーダパイプライン３０２は、所与の時間で一つのセグメントを処理することができるだけであるから、大きな三角形は、多数のシェーダパイプライン３０２によって処理されなければならない。これを支援するために、シェーダディストリビュータ３０４は、三角形の情報を実際にはセグメントを処理していないシェーダパイプライン３０２の全てにブロードキャストする。受け取ったシェーダパイプライン３０２の各々は、プログラム情報を使用してそれ自体を設定するよう試み、到来するラスタピクセルデータを受け取る準備をする。次いで、セグメントを処理するシェーダパイプライン３０２は、ラスタピクセルデータを受け取って、その処理を開始する。ラスタピクセルデータは、唯一のシェーダパイプライン３０２に分配される。
【００４０】
[0045]分配の実施を支援し、使用されないシェーダパイプラインをターンオフするために、シェーダ３００は、パイプイネーブルマスク（ｐｉｐｅ  ｅｎａｂｌｅ  ｍａｓｋ）を使用することができる。これは、どのシェーダパイプライン３０２が動作可能であるかをシェーダ３００に通知する。かかるマスク信号は、シェーダディストリビュータ３０４にバス４０８を介して与えることができる。動作可能なシェーダパイプライン３０２は、それらのマスクビットを１に設定し、動作不可能なピクセルパイプラインはそれらのマスクを０に設定する。マスク信号は、ジャンパスイッチ、ソフトウェアコマンド、ハードウェア、又は他のメカニズムによって与えられる。
【００４１】
[0046]セグメントを処理しない全てのシェーダパイプラインを設定することは、明確な利点を有する。この利点は、三角形が他のセグメントに波及する場合、そのセグメントを既に設定されたシェーダパイプライン３０２に送ることができるというものである。そして、その三角形を一つのシェーダパイプライン３０２上で有効にすることによって、セグメント内の三角形用のラスタデータを処理することが可能である。このプロセスは、新たなセグメントに波及する大きな三角形用の新たなプログラムデータを送る必要性を避けるだけでなく、追加のシェーダパイプライン３０２が複雑なメカニズムを要せずに有効とされて、シェーダディストリビュータ３０４からセグメントを再送することを可能にする。利用可能なシェーダパイプライン３０２は、単に、到来するセグメントを受容し、有効化を待つだけである。三角形の情報がシェーダパイプラインによって利用されない場合には、その三角形の情報はシェーダゲートキーパによって上書きされる。
【００４２】
[0047]シェーダディストリビュータ３０４の出力ストリームについて幾つか言及することが有益であろう。シェーダディストリビュータ３０４は、少なくとも一つの非ゼロのピクセルを有する三角形の情報を転送するだけである。このメカニズムは、ナル三角形放棄（Ｎｕｌｌ  Ｔｒｉａｎｇｌｅ  Ｄｉｓｃａｒｄ）と呼ばれる。これは、シェーダパイプライン３０２のデータを要求することで処理パワーを浪費しないことを保障することによってオペレーションの処理を改善する。
【００４３】
[0048]幾つかの実施の形態では、シェーダディストリビュータ３０４は、シェーダパイプライン３０２のプログラミングに関連する機能を有している。これらの実施の形態では、プログラミング命令が、シェーダディストリビュータ３０４によってシェーダパイプライン３０２に送られる。これら実施の形態の幾つかにおいては、最初のＮ個（８個とする）プログラミング命令が送られる。かかる実施の形態において、又はシェーダディストリビュータがシェーダパイプライン３０２にプログラム情報を送らない実施の形態においては、スケジューラ４２４がプログラム命令をシェーダパイプラインに与える。スケジューラ４２４は、次いで、シェーダディストリビュータ３０４からシェーダパイプライン３０２へのラスタピクセルデータの適用を調整しなければならない。
【００４４】
[0049]図１及び図３を参照すると、プログラム命令のコピーが、有益なことにフレームバッファメモリ１２０に記憶されている。シェーダパイプライン３０２のプログラミングは、フラグメントプログラム、即ち完全なグラフィカルプログラムのサブセットを実装する小さな命令セットを用いて実行される。フラグメントプログラムが使用される理由は、シェーダパイプライン３０２がリソースを制限するからである。このことは、完全なグラフィックプログラムが通常非常に大きくてシェーダパイプライン３０２に直接与えることができないことを意味する。このように、フラグメントプログラムが形成され、シェーダパイプライン３０２に与えられる。例えば、Ｎ個の（８個とする）プログラム命令を得て、対応のフラグメントプログラムに変換して、シェーダパイプライン３０２をプログラムするのに使用することができる。セグメントがＮ（８）個の命令によって処理された後、次のＮ（８）個の命令を実装する他のフラグメントプログラムが形成され、シェーダパイプライン３０２に与えられる。
【００４５】
[0050]先述したように、本発明の幾つかの実施の形態では、最初のＮ個の命令がシェーダディストリビュータ３０４を介して与えられる。これは、多くの異なる方法で実施することが可能である。例えば、最初のＮ個の命令をスケジューラ２４２に（直接に、又は他のメカニズムを介して）送ることが可能である。スケジューラ４２４は、次いで、最初のフラグメントプログラムを最初のＮ個の命令から形成することが可能である。この最初のフラグメントプログラムは、次いで直接、シェーダパイプライン３０２に送ることが可能である。後続のフラグメントプログラム、及び／又は最初のフラグメントプログラムは、次いで、それ自身のフレームバッファメモリ１２０に直接、又はある種の他のメカニズムを解してアクセスするシェーダプロセッサ４２４によって形成することができる。所与のシェーダパイプライン３０２はフラグメントプログラムを用いてプログラムすることが可能なだけである一方、異なるシェーダパイプライン３０２を異なるフラグメントプログラムでプログラムすることが可能であることに注意されたい。さらに、パイプラインルーピングと分岐を必要に応じて実行して、所望のフラグメントプログラムを実装し、フラグメントプログラムを連続して動作させる。
【００４６】
[0051]説明した実施の形態では、分岐命令は、最後のシェーディングパスの終端に付け加えることができる。分岐オペレーションが発生する場合には、新たなプログラム命令が提供される間、シェーダパイプラインを介する空のパスが発生する。次のパスは、シェーダ計算の下部（ｓｈａｄｅｒ  ｃｏｍｐｕｔａｔｉｏｎ  ｂｏｔｔｏｍ）で再開される。これはシェーダ登録ファイル４２０の内容の読み込みを実現する。分岐オペレーションは二つのパスを必要とするが、分岐オペレーションは有益となりうる。例えば大きな分岐ブロックは、しばしばシェーダの再コンパイルを不要とする。
【００４７】
[0052]ここで図４に戻る。プログラム可能なシェーダパイプラインは、参照文献、例えば先述のように組みこまれた特許文献により知られているが、シェーダ３００は新規なシェーダゲートキーパ４０４を有している。シェーダゲートキーパ４０４は、セグメント、三角方程式情報、及び、プログラムデータをシェーダディストリビュータ３０４から受け取る。これは、三角形のストリーム情報が全てのシェーダパイプライン３０２に送られるような態様で、行われる。しかしながら、シェーダディストリビュータ３０４は、処理される三角形を有効にする。
【００４８】
[0053]陰影付ピクセルデータが処理された後、シェーダコレクタ３０８は、陰影付ピクセルデータを多数のシェーダパイプライン３０２から集め、当該データをファーストインファーストアウトバッファメモリ３０６からのカバレージデータ、及びＸ、Ｙと結合して、編成された陰影付ピクセルデータパケットを形成する。得られたデータは、ラスタオペレーションプロセッサ１１４に送られ、当該プロセッサ１１４が、追加の処理（グラフィック処理ユニット１０２を参照）を実行する。ラスタオペレーションプロセッサが処理を行った後、最終的なフレームピクセルデータがフレームバッファインタフェイス１１６に出力される
【００４９】
[0054]種々の実施の形態を説明したが、それらは例示の目的のみに提供されたものであり、制限を目的にするものでないこと理解されたい。特定の数、例えば、クワッドの使用に関する先の言及は、説明及び例示だけを目的としている。従って、好適な実施の形態の幅、及び範囲は、上述の例示的な実施の形態の何れかによって限定されるべきものではなく、特許請求の範囲及びその均等の範囲に基づいてのみ定義されるべきものである。
【図面の簡単な説明】
【００５０】
【図１】従来技術のグラフィックシステムを概略的に示す図である。
【図２Ａ】三角形の幾何図形プリミティブを概略的に示す図である。
【図２Ｂ】各走査線に沿って配列されたピクセルをもつ三角形の幾何図形プリミティブを示す図である。
【図３】多数のシェーダパイプラインを有しており、本発明の原理に従っているシェーダアーキテクチャの高レベルのブロック図である。
【図４】図３に示すシェーダアーキテクチャから選択されたアーキテクチャの特徴を示し、幾つかのシェーダパイプラインのうちの一つのみを示すブロック図である。
【図１】
2007533029.tif 000003
【図２Ａ】
2007533029.tif 000004
【図２Ｂ】
2007533029.tif 000005
【図３】
2007533029.tif 000006
【図４】
2007533029.tif 000007
【国際調査報告】
2007533029.tif 000008
2007533029.tif 000009
2007533029.tif 000010