(57)【要約】  フラグメントプロセッサは、フラグメントシェーダー分配器と、フラグメントシェーダー収集器と、複数のフラグメントシェーダーパイプラインとを備える。各フラグメントシェーダーパイプラインは、フラグメントのセグメントに対してフラグメントシェーダープログラムを実行する。複数のフラグメントシェーダーパイプラインは、平行して動作し、同一又は異なるフラグメントシェーダープログラムを実行する。フラグメントシェーダー分配器は、ラスタライズユニットからフラグメントのストリームを受け取り、選択されているフラグメントシェーダーパイプラインの容量に達するまで、フラグメントストリームの一部を、選択されているフラグメントシェーダーパイプラインに送る。次いで、フラグメントシェーダー分配器は、別のフラグメントシェーダーパイプラインを選択する。各フラグメントシェーダーパイプラインの容量は、何種類かのリソースによって制限される。フラグメントシェーダー分配器は、フラグメントを送るときに、選択されているフラグメントシェーダーパイプラインの残りの利用可能なリソースを追跡する。フラグメントシェーダー収集器は、複数のフラグメントシェーダーパイプラインから、処理されたフラグメントを取得する。【選択図】  図３
2008512771.tif 000002
【特許請求の範囲】
【請求項１】
フラグメントストリームのフラグメントのそれぞれの少なくとも１つの値を決定するようにされているフラグメントプロセッサを含んでいるグラフィックス処理サブシステムであって、
フラグメントのセグメントに対してフラグメントシェーダープログラムの少なくとも一部を実行するようにされている第１のフラグメントシェーダーパイプラインと、
フラグメントストリームを受け取り、前記フラグメントストリームの第１の部分を実行するための前記第１のフラグメントシェーダーパイプラインを選択し、受け取った前記ストリームのフラグメントのそれぞれについて、前記受け取ったフラグメントが、前記選択したフラグメントシェーダーパイプラインの前記フラグメントのセグメント内に収まるかを判定し、前記受け取ったフラグメントが、前記選択したフラグメントシェーダーパイプラインの前記フラグメントのセグメント内に収まるという判定に応答して、前記受け取ったフラグメントを、前記選択したフラグメントシェーダーパイプラインに送るようにされている、フラグメントシェーダー分配器と、
フラグメントシェーダー収集器であって、前記第１のフラグメントシェーダーパイプラインを選択し、前記フラグメントシェーダー収集器が選択した前記フラグメントシェーダーパイプラインが前記フラグメントのセグメントに対する前記フラグメントシェーダープログラムの実行を完了したことを示す信号に応答して、前記フラグメントシェーダー収集器が選択したフラグメントシェーダーパイプラインから、前記フラグメントのセグメントにおける各フラグメントを取得するようにされている、前記フラグメントシェーダー収集器と、
を備えている、グラフィックス処理サブシステム。
【請求項２】
前記受け取ったフラグメントが、前記第１のフラグメントシェーダーパイプラインの前記フラグメントのセグメント内に収まるかを判定するようにすることにおいて、前記フラグメントシェーダー分配器が、前記受け取ったフラグメントのいくつかのリソース要件を調べ、前記選択したフラグメントシェーダーパイプラインの利用可能なリソースの測定値を求め、前記受け取ったフラグメントの前記リソース要件が、前記選択したフラグメントシェーダーパイプラインの利用可能なリソースの前記測定値を超えていないという判定に応答して、前記受け取ったフラグメントが前記選択したフラグメントシェーダーパイプラインの前記フラグメントのセグメント内に収まることを示す信号を生成する、ようにされている、請求項１に記載のグラフィックス処理サブシステム。
【請求項３】
前記フラグメントシェーダー分配器が複数のカウンタを更に備えており、前記カウンタのそれぞれが、前記選択されているフラグメントシェーダーパイプラインのリソースに対応しており、
前記フラグメントシェーダー分配器が、前記受け取ったフラグメントのそれぞれの前記リソース要件によって前記複数のカウンタの値を変更するように、更にされている、
請求項２に記載のグラフィックス処理サブシステム。
【請求項４】
前記複数のカウンタのそれぞれに、前記選択されているフラグメントシェーダーパイプラインの前記対応するリソースの限界を表すリソース限界値が関連付けられており、
前記受け取ったフラグメントが前記第１のフラグメントシェーダーパイプラインの前記フラグメントのセグメント内に収まることを示す信号を生成するようにすることにおいて、前記フラグメントシェーダー分配器が、前記複数のカウンタのいずれも、それぞれに関連付けられているリソース限界値に達していないことを判定するようにされている、
請求項３に記載のグラフィックス処理サブシステム。
【請求項５】
フラグメントのセグメントに対してフラグメントシェーダープログラムの少なくとも一部を実行するようにされている第２のフラグメントシェーダーパイプライン、
を更に備えており、
前記受け取ったフラグメントが、前記選択したフラグメントシェーダーパイプラインの前記フラグメントのセグメント内に収まらないという判定に応答して、前記フラグメントシェーダー分配器が、前記第２のフラグメントシェーダーパイプラインを選択し、前記受け取ったフラグメントを、前記新たに選択したフラグメントシェーダーパイプラインに送るようにされている、
請求項１に記載のグラフィックス処理サブシステム。
【請求項６】
前記フラグメントシェーダー収集器が、
前記第２のフラグメントシェーダーパイプラインが選択されたことを示す信号を受信するようにされており、且つ、前記信号に応答して、
前記第２のフラグメントシェーダーパイプラインを選択し、前記フラグメントシェーダー収集器が選択した前記フラグメントシェーダーパイプラインが前記フラグメントのセグメントに対する前記フラグメントシェーダープログラムの実行を完了したことを示す信号に応答して、前記フラグメントシェーダー収集器が選択したフラグメントシェーダーパイプラインから、前記フラグメントのセグメントにおける各フラグメントを取得する、ようにされている、
請求項５に記載のグラフィックス処理サブシステム。
【請求項７】
前記フラグメントシェーダー収集器がサイドＦＩＦＯを介して前記信号を受信する、請求項６に記載のグラフィックス処理サブシステム。
【請求項８】
前記フラグメントシェーダー分配器が、前記フラグメントシェーダーパイプラインの１つに送る、受け取ったフラグメントのそれぞれについて、フラグメントパケットをサイドＦＩＦＯに挿入するように、更にされている、請求項７に記載のグラフィックス処理サブシステム。
【請求項９】
前記フラグメントパケットのそれぞれが、前記受け取ったフラグメントの一連の属性を含んでいる、請求項８に記載のグラフィックス処理サブシステム。
【請求項１０】
前記フラグメントシェーダー収集器が、前記フラグメントパケットのそれぞれの前記一連の属性と、前記フラグメントシェーダー収集器が選択した前記フラグメントシェーダーパイプラインから取得される対応するフラグメントとを対応付けるようにされている、請求項９に記載のグラフィックス処理サブシステム。
【請求項１１】
フラグメントのセグメントに対してフラグメントシェーダープログラムの少なくとも一部を実行するようにされている第３のフラグメントシェーダーパイプライン、
を更に備えており、
前記受け取ったフラグメントが前記第２のフラグメントシェーダーパイプラインの前記フラグメントのセグメント内に収まらないという判定に応答して、前記フラグメントシェーダー分配器が、前記第３のフラグメントシェーダーパイプラインを選択し、前記受け取ったフラグメントを、前記新たに選択したフラグメントシェーダーパイプラインに送るようにされており、
前記フラグメントシェーダー収集器が、
前記第３のフラグメントシェーダーパイプラインが選択されたことを示す信号を受信するようにされており、且つ、前記信号に応答して、
前記第３のフラグメントシェーダーパイプラインを選択し、前記フラグメントシェーダー収集器が選択した前記フラグメントシェーダーパイプラインが前記フラグメントのセグメントに対する前記フラグメントシェーダープログラムの実行を完了したことを示す信号に応答して、前記フラグメントシェーダー収集器が選択したフラグメントシェーダーパイプラインから、前記フラグメントのセグメントにおける各フラグメントを取得する、ようにされている、
請求項６に記載のグラフィックス処理サブシステム。
【請求項１２】
前記フラグメントシェーダー分配器及び前記フラグメントシェーダー収集器が、複数のフラグメントシェーダーパイプラインからラウンドロビン順序において選択するようにされている、請求項１１に記載のグラフィックス処理サブシステム。
【請求項１３】
前記第１のフラグメントシェーダーパイプライン及び前記第２のフラグメントシェーダーパイプラインが、同じフラグメントシェーダープログラムの個別のインスタンスを平行に実行するようにされている、請求項５に記載のグラフィックス処理サブシステム。
【請求項１４】
前記第１のフラグメントシェーダーパイプライン及び前記第２のフラグメントシェーダーパイプラインが、異なるフラグメントシェーダープログラムの個別のインスタンスを平行に実行するようにされている、請求項５に記載のグラフィックス処理サブシステム。
【請求項１５】
前記選択されているフラグメントシェーダーパイプラインの前記利用可能なリソースが、前記フラグメントのセグメントにおけるフラグメントの最大数を含んでいる、請求項２に記載のグラフィックス処理サブシステム。
【請求項１６】
前記フラグメントのセグメントにおける前記フラグメントの最大数が、前記選択されているフラグメントシェーダーパイプラインにおけるパイプライン段数に一致する、請求項１５に記載のグラフィックス処理サブシステム。
【請求項１７】
前記選択されているフラグメントシェーダーパイプラインの前記利用可能なリソースが、一連のデータレジスタを含んでおり、
前記受け取ったフラグメントの前記リソース要件がデータレジスタの必要量を含んでおり、前記データレジスタの必要量が、前記受け取ったフラグメントに対して実行されるフラグメントシェーダープログラムによって決まる、
請求項２に記載のグラフィックス処理サブシステム。
【請求項１８】
前記選択されているフラグメントシェーダーパイプラインの前記利用可能なリソースが属性データの格納スペースを含んでおり、
前記受け取ったフラグメントの前記リソース要件が、前記受け取ったフラグメントに関連付けられている一連の属性を含んでいる、
請求項２に記載のグラフィックス処理サブシステム。
【請求項１９】
前記受け取ったフラグメントに関連付けられている前記一連の属性が、ジオメトリプリミティブの一連の属性から継承される、請求項１８に記載のグラフィックス処理サブシステム。
【請求項２０】
前記フラグメントシェーダー分配器が、
前記受け取ったフラグメントが、関連付けられているジオメトリプリミティブをカバーしていないという判定に応答して、
前記受け取ったフラグメントを破棄するようにされている、請求項１に記載のグラフィックス処理サブシステム。
【請求項２１】
前記受け取るフラグメントが、複数のフラグメントを含んでいるフラグメントグループの一部であり、
前記フラグメントシェーダー分配器が、前記フラグメントグループの中の前記破棄するフラグメントを、第２の受け取ったフラグメントに置き換えて、前記第２の受け取ったフラグメントを含んでいる前記フラグメントグループを、前記選択したフラグメントシェーダーパイプラインに送るようにされている、
請求項２０に記載のグラフィックス処理サブシステム。
【請求項２２】
前記フラグメントのセグメントに関連付けられているジオメトリプリミティブの最大数が、前記受け取ったフラグメントに関連付けられている前記一連の属性のサイズに反比例する、請求項１８に記載のグラフィックス処理サブシステム。
【請求項２３】
フラグメントストリームのピクセルフラグメントのそれぞれの少なくとも１つの値を決定する方法であって、
フラグメントのセグメントに対してフラグメントシェーダープログラムの少なくとも一部を実行するようにされており、且つ少なくとも１つの利用可能なリソースを有する第１のフラグメントシェーダーパイプライン、を選択するステップと、
フラグメントストリームにおけるフラグメントを受け取る、受取ステップと、
前記選択されているフラグメントシェーダーパイプラインの前記利用可能なリソースの測定値を、前記受け取ったフラグメントのリソース要件だけ減らす、低減ステップと、
前記受け取ったフラグメントを、前記選択されているフラグメントシェーダーパイプラインに送り、前記選択されているフラグメントシェーダーパイプラインの前記フラグメントシェーダープログラムによって処理する、送りステップと、
前記受け取ったフラグメントの属性を含んでいるフラグメントパケットをＦＩＦＯに送る、送りステップと、
前記選択されているフラグメントシェーダーパイプラインの前記利用可能なリソースの前記測定値がリソース限界値に達していないことに応答して、前記フラグメントストリームにおける第１の複数の以降のフラグメントについて、前記受取ステップと、前記低減ステップと、前記受け取ったフラグメントを送る前記送りステップと、フラグメントパケットを送る前記送りステップと、を繰り返すステップと、
前記選択されているフラグメントシェーダーパイプラインの前記利用可能なリソースの前記測定値が前記リソース限界値に達したことに応答して、フラグメントのセグメントに対してフラグメントシェーダープログラムの少なくとも一部を実行するようにされており、且つ少なくとも１つの利用可能なリソースを有する第２のフラグメントシェーダーパイプライン、を選択するステップと、
前記選択されているフラグメントシェーダーパイプラインの利用可能なリソースの前記測定値がリソース限界値に達していないことに応答して、前記フラグメントストリームにおける第２の複数の以降のフラグメントについて、前記受取ステップと、前記低減ステップと、前記受け取ったフラグメントを送る前記送りステップと、フラグメントパケットを送る前記送りステップと、を繰り返すステップと、
を含んでいる、方法。
【請求項２４】
前記フラグメントパケットを送る前記送りステップが、
前記選択されているフラグメントシェーダーパイプラインの前記利用可能なリソースの前記測定値が前記リソース限界値に達したことに応答して、前記フラグメントパケットにエンドオブセグメント・インジケータを含めるステップ、
を含んでいる、請求項２３に記載の方法。
【請求項２５】
フラグメントを取得するための第１のフラグメントシェーダーパイプラインを選択するステップと、
前記フラグメントパケットをＦＩＦＯから取得するステップと、
フラグメントを取得するための選択した前記フラグメントシェーダーパイプラインから、対応するフラグメントを取得する、取得ステップと、
前記取得したフラグメントパケットの属性を、前記対応するフラグメントと組み合わせて、組み合わされたフラグメントを形成する、組合せステップと、
前記組み合わされたフラグメントを次のストリーム処理ユニットに送る、送りステップと、
前記フラグメントパケットが前記エンドオブセグメント・インジケータを含んでいないという判定に応答して、前記ＦＩＦＯ内の次のフラグメントパケットについて、前記取得ステップと、前記組合せステップと、前記送りステップとを繰り返すステップと、
前記フラグメントパケットが前記エンドオブセグメント・インジケータを含んでいることに応答して、フラグメントを取得するための第２のフラグメントシェーダーパイプラインを選択するステップと、
を更に含んでいる、請求項２４に記載の方法。
【請求項２６】
前記第１のフラグメントシェーダーパイプライン及び前記第２のフラグメントシェーダーパイプラインが、キャッシュメモリサブシステムにインタフェースを介して接続されており、
前記フラグメントストリームにおける前記第２の複数の以降のフラグメントについて、前記受取ステップと、前記低減ステップと、前記受け取ったフラグメントを送る前記送りステップと、フラグメントパケットを送る前記送りステップと、を繰り返す前に、ある時間期間だけ一時停止するステップであって、前記ある時間期間の長さが、前記第１のフラグメントシェーダーパイプライン及び前記第２のフラグメントシェーダーパイプラインから前記キャッシュメモリシステムへの一連のメモリアクセスを最適化するものである、前記ステップと、
を更に含んでいる、請求項２３に記載の方法。
【請求項２７】
前記フラグメントパケットの前記属性がフラグメントのポジションを含んでいる、請求項２３に記載の方法。
【発明の詳細な説明】
【発明の分野】
【０００１】
[0001]本発明は、コンピュータグラフィックスの分野に関する。多くのコンピュータグラフィックスイメージは、特定の視点からの３次元シーンと光との相互作用をモデリングすることによって、数学的に作成される。レンダリングと称されるこの処理では、その特定の視点からのシーンの２次元イメージを生成し、これは実際の景色の写真を撮影することに似ている。
【発明の背景】
【０００２】
[0002]コンピュータグラフィックス、特にリアルタイムのコンピュータグラフィックスの需要が高まるにつれて、レンダリング処理を加速するようにされているグラフィックス処理サブシステムを備えたコンピュータシステムが普及している。これらのコンピュータシステムでは、レンダリング処理は、コンピュータの汎用ＣＰＵ（中央処理装置）とグラフィックス処理サブシステムとで分担される。一般には、ＣＰＵは、高レベルの演算、例えば、あるシーンにおけるオブジェクトのポジション、モーション、及び衝突を求める演算を実行する。ＣＰＵは、これらの高レベル演算から、目的のレンダリングされた一又は複数のイメージを定義するレンダリングコマンド及びデータのセットを生成する。例えば、レンダリングコマンド及びデータは、シーンのジオメトリ、ライティング、シェーディング、テクスチャリング、モーション、シーンのカメラパラメータの一又は複数を定義することができる。グラフィックス処理サブシステムは、レンダリングコマンド及びデータのセットから、一又は複数のレンダリングされたイメージを作成する。
【０００３】
[0003]一般に、グラフィックス処理サブシステムでは、入力される要素をストリーム処理ユニットの連鎖によって連続的に読み取って演算を行うストリーム処理モデル（ｓｔｒｅａｍ−ｐｒｏｃｅｓｓｉｎｇ  ｍｏｄｅｌ）を使用する。あるストリーム処理ユニットの出力は、連鎖における次のストリーム処理ユニットへの入力である。一般に、データは、ストリーム処理ユニットの連鎖を一方向、「下流」にのみ流れる。ストリーム処理ユニットの例としては、２次元又は３次元の頂点を処理する頂点プロセッサ、２次元又は３次元の一連の頂点によって定義されているジオメトリプリミティブ（ｇｅｏｍｅｔｒｉｃ  ｐｒｉｍｉｔｉｖｅ）を処理してフラグメントと称される一連のピクセル又はサブピクセルを生成するラスタライザプロセッサ、フラグメントを処理してその色及びその他の属性を求めるフラグメントプロセッサが挙げられる。
【０００４】
[0004]多くのグラフィックス処理サブシステムは、高度にプログラマブルであり、特に、複雑なライティングアルゴリズムやシェーディングアルゴリズムを実行することができる。このプログラマブル性を利用するため、アプリケーションには、一又は複数のグラフィックス処理サブシステムプログラムを含めることができ、このプログラムは、ＣＰＵによって実行されるメインプログラムと平行にグラフィックス処理サブシステムによって実行される。これらのグラフィックス処理サブシステムプログラムは、単にシェーディングアルゴリズムやライティングアルゴリズムを実行するだけではないが、しばしばシェーディングプログラム又はシェーダーと称される。
【０００５】
[0005]プログラマブルなストリーム処理ユニットのそれぞれが、別のストリーム処理ユニット上で実行されているシェーディングプログラムと平行して、それぞれの個別のシェーディングプログラムを実行するようにできる。複雑なアルゴリズムを実装する場合、協働して目的の結果を達成する各ストリーム処理ユニットに合わせて作成されている個別のシェーディングプログラムを使用することがしばしばある。このような実装においては、連鎖における最初の方のストリーム処理ユニットのシェーディングプログラムの出力が、連鎖における以降のストリーム処理ユニットのシェーディングプログラムの入力に関連することがある。
【０００６】
[0006]プログラマブルなフラグメントプロセッサは、レンダリングパフォーマンスを高めるうえでのボトルネックとなることがしばしばある。一般に、プログラマブルなフラグメントプロセッサは、レンダリングするフラグメントごとに自身のシェーディングプログラムを１回実行しなければならない。フラグメントシェーディングプログラムが数百から数千の命令を含んでおり、レンダリングする各イメージが数百万のフラグメントによって生成されるならば、フラグメントプロセッサに求められる計算量は膨大である。
【０００７】
[0007]従って、グラフィックス処理におけるプログラマブルなフラグメントプロセッサのパフォーマンスを向上させることが望まれている。更に、プログラマブルなフラグメントプロセッサを、様々なコスト目標及びパフォーマンス目標が満たされるように、容易且つ効率的にスケールアップ及びスケールダウンできることが望まれている。
【発明の概要】
【０００８】
[0008]本発明の実施形態においては、フラグメント処理ユニットは、フラグメントシェーダー分配器（ｆｒａｇｍｅｎｔ  ｓｈａｄｅｒ  ｄｉｓｔｒｉｂｕｔｏｒ）と、フラグメントシェーダー収集器（ｆｒａｇｍｅｎｔ  ｓｈａｄｅｒ  ｃｏｌｌｅｃｔｏｒ）と、複数のフラグメントシェーダーパイプラインとを含んでいる。フラグメントシェーダーパイプラインのそれぞれは、フラグメントのセグメントに対してフラグメントシェーダープログラムを実行するようにされている。複数のフラグメントシェーダーパイプラインは、平行して動作し、同一又は異なるフラグメントシェーダープログラムを実行する。フラグメントシェーダー分配器は、ラスタライズユニットからフラグメントのストリームを受け取る。フラグメントシェーダー分配器は、選択されているフラグメントシェーダーパイプラインの容量に達するまで、又は事前に設定されている時間長の間に更なるフラグメントが到着しなくなるまで、フラグメントストリームの一部を、選択されているフラグメントシェーダーパイプラインに送る。次いで、フラグメントシェーダー分配器は、別のフラグメントシェーダーパイプラインを選択する。選択されているフラグメントシェーダーパイプラインに送られるフラグメントストリームの一部を、フラグメントストリームのセグメントと称する。フラグメントシェーダーパイプラインのそれぞれの容量は、何種類かのリソースによって制限される。フラグメントシェーダー分配器は、フラグメントを送るときに、選択されているフラグメントシェーダーパイプラインの残りの利用可能なリソースを追跡する。フラグメントシェーダー収集器は、複数のフラグメントシェーダーパイプラインから、処理されたフラグメントを取得する。フラグメントシェーダー収集器は、フラグメントストリームの順序を維持するため、フラグメントシェーダー分配器と同じ選択順序に従う。
【０００９】
[0009]実施形態においては、グラフィックス処理サブシステムは、フラグメントストリームの各フラグメントの少なくとも１つの値を求めるようにされているフラグメントプロセッサを含んでいる。フラグメントプロセッサは、フラグメントのセグメントに対してフラグメントシェーダープログラムの少なくとも一部を実行するようにされている第１のフラグメントシェーダーパイプラインを備えている。フラグメントプロセッサは、フラグメントシェーダー分配器も含んでいる。フラグメントシェーダー分配器は、フラグメントストリームを受け取り、フラグメントストリームの第１の部分を実行するための第１のフラグメントシェーダーパイプラインを選択し、受け取ったストリームのフラグメントのそれぞれについて、受け取ったフラグメントが、選択したフラグメントシェーダーパイプラインのフラグメントのセグメント内に収まるかを判定し、受け取ったフラグメントが、選択したフラグメントシェーダーパイプラインのフラグメントのセグメント内に収まるという判定に応答して、受け取ったフラグメントを、選択したフラグメントシェーダーパイプラインに送るように、されている。フラグメントシェーダー収集器は、第１のフラグメントシェーダーパイプラインを選択し、フラグメントシェーダー収集器が選択したフラグメントシェーダーパイプラインがフラグメントのセグメントに対するフラグメントシェーダープログラムの実行を完了したことを示す信号に応答して、フラグメントシェーダー収集器が選択したフラグメントシェーダーパイプラインから、フラグメントのセグメントにおける各フラグメントを取得するようにされている。
【００１０】
[0010]更なる実施形態においては、受け取ったフラグメントが、第１のフラグメントシェーダーパイプラインのフラグメントのセグメント内に収まるかを判定するようにすることにおいて、フラグメントシェーダー分配器は、受け取ったフラグメントのいくつかのリソース要件を調べ、選択したフラグメントシェーダーパイプラインの利用可能なリソースの測定値を求め、受け取ったフラグメントのリソース要件が、選択したフラグメントシェーダーパイプラインの利用可能なリソースの測定値を超えていないという判定に応答して、受け取ったフラグメントが、選択したフラグメントシェーダーパイプラインのフラグメントのセグメント内に収まることを示す信号を生成するように、されている。
【００１１】
[0011]別の実施形態においては、グラフィックス処理サブシステムは、フラグメントのセグメントに対してフラグメントシェーダープログラムの少なくとも一部を実行するようにされている第２のフラグメントシェーダーパイプラインを含んでいる。フラグメントシェーダー分配器は、受け取ったフラグメントが、選択したフラグメントシェーダーパイプラインのフラグメントのセグメント内に収まるという判定に応答して、第２のフラグメントシェーダーパイプラインを選択し、受け取ったフラグメントを、選択したフラグメントシェーダーパイプラインに送るようにされている。更なる実施形態においては、フラグメントシェーダー収集器は、第２のフラグメントシェーダーパイプラインが選択されたことを示す信号を受け取るようにされている。フラグメントシェーダー収集器は、この信号に応答して、その第２のフラグメントシェーダーパイプラインを選択するようにされている。更に、フラグメントシェーダー収集器は、フラグメントシェーダー収集器が選択したフラグメントシェーダーパイプラインがフラグメントのセグメントに対するフラグメントシェーダープログラムの実行を完了したことを示す信号に応答して、フラグメントシェーダー収集器が選択したフラグメントシェーダーパイプラインから、フラグメントのセグメントにおける各セグメントを取得するように、されている。
【００１２】
[0012]以下、本発明について図面を参照しながら説明する。
【詳細な説明】
【００１３】
[0018]図１は、本発明の実施形態を実施するのに適したコンピュータシステム１００（例：パーソナルコンピュータ、ビデオゲームコンソール、携帯情報端末、その他のデジタル装置）のブロック図である。コンピュータシステム１００は、ソフトウェアアプリケーションと、オプションとしてオペレーティングシステムとを実行する中央処理装置（ＣＰＵ）１０５を含んでいる。実施形態においては、ＣＰＵ  １０５は、実際には、平行して動作するいくつかの個別の中央処理装置である。メモリ１１０は、ＣＰＵ  １０５が使用できるようにアプリケーション及びデータを格納している。ストレージ１１５は、アプリケーション及びデータのための不揮発性ストレージを提供し、固定ディスクドライブ、リムーバブルディスクドライブ、フラッシュメモリデバイス、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、又はその他の光ストレージデバイスを含むことができる。ユーザ入力装置１２０は、一又は複数のユーザからのユーザ入力をコンピュータシステム１００に伝え、キーボード、マウス、ジョイスティック、タッチスクリーン、マイクロフォンのうちの１つ以上を含むことができる。ネットワークインタフェース１２５は、コンピュータシステム１００が電子通信ネットワークを介して別のコンピュータシステムと通信できるようにし、ローカルエリアネットワーク又はワイドエリアネットワーク（例：インターネット）を通じての有線通信又は無線通信を含むことができる。ＣＰＵ  １０５、メモリ１１０、データストレージ１１５、ユーザ入力装置１２０、ネットワーク１２５などのコンピュータシステム１００の構成要素は、一又は複数本のデータバス１６０によって接続されている。データバスの例として、ＩＳＡ、ＰＣＩ、ＡＧＰ、ＰＣＩ、ＰＣＩ−Ｅｘｐｒｅｓｓ、ＨｙｐｅｒＴｒａｎｓｐｏｒｔデータバスが挙げられる。
【００１４】
[0019]更に、グラフィックスサブシステム１３０が、データバス１６０と、コンピュータシステム１００の構成要素とに接続されている。このグラフィックスサブシステムは、コンピュータシステムのマザーボードに組み込むか、又はコンピュータシステムに固定的又は取り外し自在に接続された個別の回路基板に組み込むことができる。グラフィックスサブシステム１３０は、グラフィックス処理ユニット（ＧＰＵ）１３５とグラフィックスメモリとを含んでいる。グラフィックスメモリは、出力イメージの各ピクセルのピクセルデータを格納するのに使用されるディスプレイメモリ１４０（例：フレームバッファ）を含んでいる。ピクセルデータは、ＣＰＵ  １０５からディスプレイメモリ１４０に直接提供することができる。或いは、ＣＰＵ  １０５が、目的の出力イメージを定義するデータ若しくはコマンド、又はその両方をＧＰＵ  １３５に提供し、ＧＰＵ  １３５が、これらのデータ及びコマンドから一又は複数の出力イメージのピクセルデータを生成する。目的の出力イメージを定義するデータ若しくはコマンド、又はその両方は、追加のメモリ１４５に格納される。実施形態においては、ＧＰＵ  １３５は、ジオメトリ、ライティング、シェーディング、テクスチャリング、モーション、シーンのカメラパラメータのうちの一又は複数を定義するレンダリングコマンド及びレンダリングデータから、出力イメージのピクセルデータを生成する。
【００１５】
[0020]別の実施形態においては、ディスプレイメモリ１４０若しくは追加のメモリ１４５、又はその両方は、メモリ１１０の一部であり、ＣＰＵ  １０５と共有されている。或いは、ディスプレイメモリ１４０若しくは追加のメモリ１４５、又はその両方は、グラフィックスサブシステム１３０専用に設けられている一又は複数の個別のメモリである。グラフィックスサブシステム１３０は、イメージのピクセルデータをディスプレイメモリ１４０から定期的に出力し、ディスプレイ装置１５０に表示する。ディスプレイ装置１５０は、コンピュータシステム１００からの信号に応答して視覚情報を表示することのできる任意のデバイスであり、例えば、ＣＲＴディスプレイ、ＬＣＤディスプレイ、プラズマディスプレイ、ＯＬＥＤディスプレイである。コンピュータシステム１００は、ディスプレイ装置１５０にアナログ信号又はデジタル信号を提供することができる。
【００１６】
[0021]更なる実施形態においては、グラフィックス処理サブシステム１３０は、ＧＰＵ  １３５に類似する一又は複数の追加のＧＰＵ  １５５を含んでいる。更なる実施形態においては、グラフィックス処理サブシステム１３０は、グラフィックスコプロセッサ１６５を含んでいる。グラフィックス処理コプロセッサ１６５と追加のＧＰＵ  １５５は、ＧＰＵ  １３５と平行して、又はＧＰＵ  １３５の代わりに動作するようにされている。追加のＧＰＵ  １５５は、ＧＰＵ  １３５と同様に、レンダリングコマンドから出力イメージのピクセルデータを生成する。追加のＧＰＵ  １５５は、ＧＰＵ  １３５と連携して動作し、出力イメージの別の部分のピクセルデータを同時に生成する、或いは別の出力イメージのピクセルデータを同時に生成することができる。ある実施形態においては、グラフィックスコプロセッサ１６５は、ＧＰＵ  １３５若しくは追加のＧＰＵ  １５５、又はその両方のために、レンダリングに関連するタスク、例えば、ジオメトリの変換、シェーダーの計算、背面カリング演算を実行する。
【００１７】
[0022]追加のＧＰＵ  １５５は、ＧＰＵ  １３５と同じ回路基板に配置して、データバス１６０との接続をＧＰＵ  １３５と共有することができ、或いは、データバス１６０に個別に接続されている追加の回路基板に配置することができる。追加のＧＰＵ  １５５は、ＧＰＵ  １３５と同じモジュール又はチップパッケージに組み込むこともできる。追加のＧＰＵ  １５５は、ディスプレイメモリ１４０及び追加のメモリ１４５に類似する自身のディスプレイメモリ及び追加のメモリを備えていることができ、或いは、メモリ１４０及び１４５をＧＰＵ  １３５と共有することができる。ある実施形態においては、グラフィックスコプロセッサ１６５は、コンピュータシステムのチップセット（図示していない）、例えば、データバス１６０の制御に使用されるノースブリッジチップ又はサウスブリッジチップに組み込まれている。
【００１８】
[0023]図２は、本発明の実施形態によるグラフィックス処理サブシステムのレンダリングパイプライン２００のブロック図を示している。パイプライン２００は、ＧＰＵ  １３５に実装、及び／又は上述のように実装することができる。パイプライン２００は、頂点処理ユニット２０５と、視点・カリング（ＶＰＣ）ユニット２１０と、セットアップユニット２１５と、ラスタライザユニット２２０と、カラーアセンブリブロック２２５と、フラグメント処理ユニット２３０とを含んでいる。
【００１９】
[0024]頂点処理ユニット２０５は、目的の一又は複数のレンダリングされたイメージを定義するために使用されるレンダリングコマンド及びレンダリングデータ（例：ジオメトリ、ライティング、シェーディング、テクスチャリング、モーション、シーンのカメラパラメータのうちの少なくとも１つ）を受け取る。レンダリングデータは、ジオメトリプリミティブを定義する一又は複数の頂点を含むようにできる。各頂点は、一般には２次元座標系又は３次元座標系で表現されるポジションを有する。ポジションに加えて、各頂点には様々な属性も関連付けられている。一般的に、頂点の属性としては、頂点ごとに指定される任意の特性を含んでいることができる。ある実施形態においては、頂点の属性としては、頂点の色、透明度、ライティング、シェーディングなどの特性や、頂点のアニメーション、頂点に関連付けられるジオメトリプリミティブを求めるのに使用されるスカラー属性又はベクトル属性が含まれる。
【００２０】
[0025]頂点処理ユニット２０５は、各頂点に対して一又は複数の頂点プログラム（頂点シェーダーとも称する）を実行して、変換された頂点を作成する。頂点処理ユニット２０５はプログラマブルであり、レンダリングアプリケーションは、頂点の特定のセットに使用する頂点プログラムを指定することができる。簡易な実施形態においては、頂点プログラムは、３次元世界の座標系から２次元のスクリーン座標系に頂点を変換する。より複雑な頂点プログラムを使用すると、様々な視覚効果（例：ライティング及びシェーディング、プロシージャルジオメトリ（ｐｒｏｃｅｄｕｒａｌ  ｇｅｏｍｅｔｒｙ）、アニメーション演算）を実施することができる。この技術分野においては、そのような「頂点ごとの」演算の膨大な例が公知であり、その詳細な説明については、本発明を理解するうえで重要ではないため省略する。頂点シェーダープログラムは、頂点及びデータに対する各種の数学演算及び論理演算を使用するアルゴリズムを実行することができ、条件付き実行経路や分岐実行経路、直接的及び間接的なメモリアクセスを含むことができる。
【００２１】
[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]更に、フラグメントシェーダーパイプラインは、一般には、各フラグメントに対してフラグメントシェーダープログラムを実行している間、いくつかのデータレジスタを使用してデータを一時的に格納する。各フラグメントはフラグメントシェーダープログラムの個別のインスタンスによって実行されるため、フラグメントごとにデータレジスタセットが必要である。ある実施形態においては、各フラグメントシェーダーパイプラインは、自身のデータレジスタのプールをセグメントのフラグメントグループの間で動的に割り当てることができる。例えば、フラグメントシェーダーパイプラインが８８０個のデータレジスタを含む場合、フラグメントグループあたり４つのデータレジスタを使用してフラグメントシェーダープログラムが実行されるならば、セグメントには最大２２０個のフラグメントグループを含めることができる。同様に、フラグメントグループあたり５つのデータレジスタを使用する場合、セグメントには最大１７６個のフラグメントグループを含めることができる。フラグメントシェーダー分配器４００がフラグメントグループを処理するとき、セグメント化器４１０は、フラグメントシェーダープログラムを実行するのに各フラグメントグループに必要であるデータレジスタの数が反映されるように、レジスタカウンタ４２５を変更する。
【００５０】
[0055]圧縮配列器４３０は、カバーされていないフラグメントグループ（例：８ブロック４０４のうちフラグメントグループ４６０、４６２、４６４）を破棄し、ある実施形態では、残りのフラグメントグループを４ブロックに編成し、これらのブロックは、同じか又は異なるジオメトリプリミティブに関連付けられた４つのフラグメントグループのセットである。例えば、圧縮配列器４３０は、フラグメントグループ４３２、４３４、４３６、４３８を４ブロック４５０に編成し、フラグメントグループ４４０、４４２、４４４、４４６を４ブロック４５５に編成する。この場合、４ブロック４５５は、異なるジオメトリプリミティブ（この例においてはジオメトリプリミティブ４０２及び４０６）に関連付けられているフラグメントグループを含んでいる。この例においては、フラグメントグループ４４８は、次の４ブロック（図を簡略化するために省略する）に含まれることになる。フラグメントシェーダー分配器４００は、圧縮配列器４３０によって作成されたフラグメントグループの４ブロックを、選択されているフラグメントシェーダーパイプラインに送る。
【００５１】
[0056]図３に示したように、平行して動作する複数のフラグメントシェーダーパイプラインを使用する場合、これらのフラグメントシェーダーパイプラインは、一般には、テクスチャの探索及びその他のメモリアクセスをほぼ同時に実行する。その結果として、キャッシュ速度と、外部メモリへのデータアクセス要求が不均一になり、アクセスが混み合ったり長いアイドル時間が生じたりする。メモリアクセス速度を均一にし、全体のレイテンシを低減させるため、本発明の実施形態では、メモリアクセスを順にずらす（ｓｔａｇｇｅｒ）命令タイミング方式を使用している。
【００５２】
[0057]図５は、本発明の実施形態による命令タイミング方式５００を示している。タイミング方式５００においては、第１のフラグメントシェーダーパイプラインの第１のパスの一連のフラグメントシェーダー命令を発行し、第１のフラグメントシェーダーパイプラインがこれらの命令の実行を開始する。次いで、タイミング方式５００では、短い時間期間だけ待機した後、第２のフラグメントシェーダーパイプラインの第１のパス５１０の一連のフラグメントシェーダー命令を送る。更なる遅延の後、第３のフラグメントシェーダーパイプラインの第１のパス５１５及び第４のフラグメントシェーダーパイプラインの第１のパス５２０の一連のフラグメントシェーダー命令についても、この手順を繰り返す。その結果として、フラグメントシェーダーパイプラインは、それぞれのフラグメントシェーダープログラムを順にずらして実行し、従って、一連のフラグメントシェーダーパイプラインからのメモリアクセスがより長い時間期間に広がり、同時メモリ要求のピーク数、従ってメモリアクセスの平均レイテンシが減少する。フラグメントシェーダー命令の更なるパス、例えば、一連のフラグメントシェーダーパイプラインの第２のパス５２５、５３０、５３５、５４０の一連のフラグメントシェーダー命令についても、同様に命令を順にずらして実行する。
【００５３】
[0058]本発明は、グラフィックス処理サブシステムのフラグメント処理ユニットのパフォーマンスを、様々なコスト目標及びパフォーマンス目標が満たされるように、容易且つ効率的にスケールアップ及びスケールダウンを行えるようにする。本発明は、４つのフラグメントシェーダーパイプラインを有する一例のフラグメント処理ユニットを参照しながら説明したが、本発明は、ストリーム処理システムにおける任意の数の平行なパイプラインを有する任意の種類の処理ユニットに適用することができる。本発明は、その具体的な実施例及び実施形態に関連して説明したが、これらは単に説明を目的としたものであり、本発明を制限するものではない。従って、本発明の範囲は、特許請求の範囲によってのみ定められるものとする。
【図面の簡単な説明】
【００５４】
【図１】本発明の実施形態を実施するのに適している一例のコンピュータシステムのブロック図である。
【図２】本発明の実施形態によるグラフィックス処理サブシステムのレンダリングパイプラインのブロック図を示している。
【図３】本発明の実施形態によるフラグメント処理ユニットのフラグメントシェーダー部分を示している。
【図４】本発明の実施形態によるフラグメントシェーダー分配器を示している。
【図５】本発明の実施形態による命令タイミング方式を示している。
【図１】
2008512771.tif 000003
【図２】
2008512771.tif 000004
【図３】
2008512771.tif 000005
【図４】
2008512771.tif 000006
【図５】
2008512771.tif 000007
【国際調査報告】
2008512771.tif 000008