(57)【特許請求の範囲】
【請求項１】
グラフィックスプリミティブを処理するための構成可能グラフィックスレンダリングパイプラインであって、
処理がアーリーＺモードで進行すべきか、又は、レイトＺモードで進行すべきかを決定するように構成されたセットアップエンジンと、
前記セットアップエンジンから幾何プリミティブを受け取り、前記幾何プリミティブを一以上のピクセルプリミティブに変換するように構成されたラスタエンジンと、
ピクセルプリミティブに関連する一以上のサンプルに対してシェーディングオペレーションを実行するように構成されたシェーダエンジンと、
前記サンプルの各々に対してＺテストを実行するように構成されたＺラスターオペレーション（ＺＲＯＰ）ユニットと、
各サンプルについて、該サンプルに関連する前記Ｚテストの結果に基づいて、該サンプルが保持されるべきか、又は、廃棄されるべきかを決定するように構成されたＺリゾルブエンジンと、
前記シェーダエンジンと前記ＺＲＯＰユニットとの間のデータフローパスを変更して、アーリーＺモードとレイトＺモードの両者をサポートするように構成されたプレラスターオペレーション（ＰＲＯＰ）ユニットと、
を備え、
前記ピクセルプリミティブに関連する前記サンプルは、該グラフィックスレンダリングパイプラインがアーリーＺモード用に構成されている場合に、最初に前記ＺＲＯＰユニット及び前記Ｚリゾルブエンジンによって処理され、次に前記シェーダエンジンによって処理され、該サンプルは、該グラフィックスレンダリングパイプラインがレイトＺモード用に構成されている場合に、最初に前記シェーダエンジンによって処理され、次に前記ＺＲＯＰユニット及び前記Ｚリゾルブエンジンによって処理され、
前記セットアップエンジンが、前記グラフィックスレンダリングパイプラインがレイトＺモード用に構成されている間に受け取った前記幾何プリミティブの個数を履歴カウントとして記録する履歴カウンタを有し、
前記セットアップエンジンが、前記履歴カウントがトリガ値に等しいときに、前記グラフィックスレンダリングパイプラインをアーリーＺモードに切り替えることが可能になる、
グラフィックスレンダリングパイプライン。
【請求項２】
前記セットアップエンジンが、前記幾何プリミティブに関連するレンダリング状態を評価して、アーリーＺモードからレイトＺモードへの変更、又は、レイトＺモードからアーリーＺモードへの変更が行われるべきであるか否かを決定するように構成されている、請求項１に記載のグラフィックスレンダリングパイプライン。
【請求項３】
前記セットアップエンジンは、アーリーＺモードからレイトＺモード、又は、レイトＺモードからアーリーＺモードへの切り替え前に、フラッシュオペレーションを実行するように構成されている、請求項１又は２に記載のグラフィックスレンダリングパイプライン。
【請求項４】
前記セットアップエンジンは、アーリーＺモードからレイトＺモードへの切り替え、又は、レイトＺモードからアーリーＺモードへの切り替えが行われるべきであると決定する際に、Ｚモードトークンを生成するように構成されており、
前記Ｚモードトークンは、該グラフィックスレンダリングパイプライン中を伝送され、受け取られたときに一以上のデータフローパス制御ユニットにモードを切り替えさせる、
請求項１〜３のいずれか一項に記載のグラフィックスレンダリングパイプライン。
【請求項５】
前記Ｚモードトークンは、一以上のデータフローパス制御ユニットに、モードを切り替える前にローカルフラッシュオペレーションを開始させる、請求項４に記載のグラフィックスレンダリングパイプライン。
【請求項６】
前記サンプルがピクセルである、請求項１〜５のいずれか一項に記載のグラフィックスレンダリングパイプライン。
【請求項７】
前記セットアップエンジンが、アーリーＺモードからレイトＺモード、又は、レイトＺモードからアーリーＺモードへ切り替えるために、前記ＰＲＯＰユニットに前記シェーダエンジンと前記ＺＲＯＰユニットとの間の前記データフローパスを変更するよう指示するように構成されている、請求項１〜６のいずれか一項に記載のグラフィックスレンダリングパイプライン。
【請求項８】
グラフィックスプリミティブを処理するように構成されたコンピュータシステムであって、
メモリと、
構成可能グラフィックスレンダリングパイプラインを有する処理ユニットと、
を備え、
前記グラフィックスレンダリングパイプラインが、
処理がアーリーＺモードで進行すべきか、又は、レイトＺモードで進行すべきかを決定するように構成されたセットアップエンジンと、
前記セットアップエンジンから幾何プリミティブを受け取り、前記幾何プリミティブを一以上のピクセルプリミティブに変換するように構成されたラスタエンジンと、
ピクセルプリミティブに関連する一以上のサンプルに対してシェーディングオペレーションを実行するように構成されたシェーダエンジンと、
前記サンプルの各々に対してＺテストを実行するように構成されたＺラスターオペレーション（ＺＲＯＰ）ユニットと、
各サンプルについて、該サンプルに関連する前記Ｚテストの結果に基づいて、該サンプルが保持されるべきか、又は、廃棄されるべきかを決定するように構成されたＺリゾルブエンジンと、
前記シェーダエンジンと前記ＺＲＯＰユニットとの間のデータフローパスを変更して、アーリーＺモードとレイトＺモードの両者をサポートするように構成されたプレラスターオペレーション（ＰＲＯＰ）ユニットと、
を有し、
前記ピクセルプリミティブに関連する前記サンプルは、該グラフィックスレンダリングパイプラインがアーリーＺモード用に構成されている場合に、最初に前記ＺＲＯＰユニット及び前記Ｚリゾルブエンジンによって処理され、次に前記シェーダエンジンによって処理され、該サンプルは、該グラフィックスレンダリングパイプラインがレイトＺモード用に構成されている場合に、最初に前記シェーダエンジンによって処理され、次に前記ＺＲＯＰユニット及び前記Ｚリゾルブエンジンによって処理され、
前記セットアップエンジンが、前記グラフィックスレンダリングパイプラインがレイトＺモード用に構成されている間に受け取った前記幾何プリミティブの個数を履歴カウントとして記録する履歴カウンタを有し、
前記セットアップエンジンが、前記履歴カウントがトリガ値に等しいときに、前記グラフィックスレンダリングパイプラインをアーリーＺモードに切り替えることが可能になる、
コンピュータシステム。
【請求項９】
前記セットアップエンジンが、前記幾何プリミティブに関連するレンダリング状態を評価して、アーリーＺモードからレイトＺモードへの変更、又は、レイトＺモードからアーリーＺモードへの変更が行われるべきであるか否かを決定するように構成されている、請求項８に記載のコンピュータシステム。
【請求項１０】
前記セットアップエンジンが、アーリーＺモードからレイトＺモード、又は、レイトＺモードからアーリーＺモードへの切り替え前にフラッシュオペレーションを実行するように構成されている、請求項８又は９に記載のコンピュータシステム。
【発明の詳細な説明】
【発明の背景】
【０００１】
＜発明の分野＞
[0001]本発明の実施の形態は、広く、コンピュータグラフィックスに関するものであり、より詳細には、アーリー（early）Ｚモードを使用するグラフィックスレンダリングパイプラインの最適化に関するものである。
【０００２】
＜関連技術の説明＞
[0002]グラフィックスレンダリングエンジンは、一般に、データフロースタイルのパイプラインに編成された専用処理エンジンのセットによって構成されている。データフェッチエンジンの後において、セットアップエンジンが一般にグラフィックスレンダリングエンジンの最上層にある。このセットアップエンジンは、三角形のような幾何プリミティブを操作し、幾何プリミティブの変形又は簡略化された表現をラスタエンジンへ送出する。ラスタエンジンは、各幾何プリミティブと関連するピクセルカバレッジを求め、関連した奥行き値（Ｚ値）を伴う陰影のないピクセルプリミティブの順次ストリームを生成する。そして、シェーダエンジンが、ラスタエンジンからの陰影のないピクセルの順次ストリームを操作し、陰影付きのピクセルのストリームを生成する。所与のピクセルの色の計算に加えて、一部のシェーダエンジンは、ピクセルのＺ値を任意に、生成又は修正する。また、Ｚラスターオペレーション（ＺＲＯＰ）エンジンが、新しいピクセルが保存されるべきであるか、又は、廃棄されるべきであるかを、Ｚテストと呼ばれるオペレーションによって判定する。Ｚテストは、新しいピクセルの奥行き及びステンシルデータを、現在のデプスバッファ中の新しいピクセルのロケーションに前もって格納されている奥行き及びステンシルデータと比較する。ピクセルがＺテストで存続すると、ＺＲＯＰエンジンは、新しいピクセルの奥行き及びステンシルデータを現在のデプスバッファへ任意に書き込む。Ｚリゾルブエンジンは、Ｚテストの結果を、遅延バッファリングされたデータであって対応のピクセルに関連したデータにマージする。Ｚリゾルブエンジンは、Ｚテストで存続したピクセルをカラーラスターオペレーション（ＣＲＯＰ）エンジンへ伝送し、Ｚテストで存続しなかったピクセルを廃棄する。カラーラスターオペレーション（ＣＲＯＰ）エンジンは、新しいピクセルのカラーデータを更新し、現在のカラーバッファに書き込む。
【０００３】
[0003]グラフィックスレンダリングパイプラインにおける処理ステップの精確なシーケンスは、一般に、レンダリングプロセスにおけるシーケンシャルデータの依存性の最も簡単な低減に対応するように設計されている。例えば、三角形プリミティブは、ピクセルプリミティブへとラスタライズされてから、ピクセルオペレーションが三角形によって覆われたピクセルの集合に対して行われるべきである。さらに、ピクセルのＺ値は、計算後に、デプスバッファ中の以前に計算されたＺ値と比較されるべきである。Ｚテストは、一般に、シェーディング後に行われ、Ｚテストの前に奥行き又はステンシル計算を完了する機会をシェーダエンジンに与える。
【０００４】
[0004]周知のように、シェーダエンジンは、グラフィックスレンダリングパイプラインの最も高価な要素であり、最大のロジックリソースと最大の電力を消費する。さらに、シェーダエンジンにおいて一般的に実行される複雑なシェーディングアルゴリズムは、シェーダエンジンがグラフィックスレンダリングパイプラインにおける主要な性能ボトルネックになる原因となる。ラスタエンジンにおけるアーリーＺカリング（culling：遮蔽部分除去）は、遮蔽されることが既知のプリミティブを、これらプリミティブに関係した作業がシェーダエンジン内でトリガされる前に、廃棄することによって、ある程度の性能向上を達成する。しかし、アーリーＺカリングは、些細な廃棄の仕組みに過ぎず、より精確なＺテストの代用にはならない。アーリーＺカリングを採用する場合であっても、Ｚテストのステップは、シェーダエンジンによって処理されるピクセルの半分以上を廃棄することがある。更に重要なことに、シェーダエンジンは、通常は、シェーディングオペレーション中に廃棄されたピクセルの大部分のＺ値を修正することもなく、シェーダエンジンによるこれらピクセルの探索を不必要なものとする。したがって、標準的なアーキテクチャでは、シェーダエンジン、即ち、グラフィックスレンダリングパイプラインにおける単一の最も高価なリソースが実質的に非効率的なレベルで動作することとなる。
【０００５】
[0005]以上の説明の通り、当分野において求められていることは、グラフィックスレンダリングパイプラインにおけるシェーダエンジンの効率を改良する技術である。
【発明の概要】
【０００６】
[0006]本発明のある実施の形態は、グラフィックスプリミティブを処理する構成可能グラフィックスレンダリングパイプラインを説明する。グラフィックスレンダリングパイプラインは、処理がアーリーＺモードで進行すべきであるか、又は、レイトＺモードで進行すべきであるかを決定するように構成されたセットアップエンジンと、セットアップエンジンから幾何プリミティブを受け取り、幾何プリミティブを一以上のピクセルプリミティブに変換するように構成されたラスタエンジンと、ピクセルプリミティブに関連する一以上のサンプルに対してシェーディングオペレーションを実行するように構成されたシェーダエンジンと、各サンプルに対してＺテストを実行するように構成されたＺラスターオペレーション（ＺＲＯＰ）ユニットと、各サンプルについて、そのサンプルが当該サンプルに関連するＺテストの結果に基づいて保持されるべきか、又は、廃棄されるべきかを決定するように構成されたＺリゾルブエンジンと、シェーダエンジンとＺＲＯＰユニットとの間のデータフローパスを変更してアーリーＺモードとレイトＺモードの両者をサポートするように構成されたプレラスターオペレーション（ＰＲＯＰ）ユニットと、を備える。ピクセルプリミティブに関連するサンプルは、グラフィックスレンダリングパイプラインがアーリーＺモード用に構成されている場合には、最初にＺＲＯＰユニット及びＺリゾルブエンジンによって処理され、次いでシェーダエンジンによって処理される。また、サンプルは、グラフィックスレンダリングパイプライがレイトＺモード用に構成されている場合には、最初にシェーダエンジンによって処理され、次にＺＲＯＰユニット及びＺリゾルブエンジンによって処理される。
【０００７】
[0007]本明細書に開示するグラフィックスレンダリングパイプラインの一つの利点は、適切な環境下で、サンプルがシェーダエンジンへ送られる前にＺテストが実施され、それによって、従来技術のアーキテクチャに対して、グラフィックスレンダリングパイプラインの処理効率を増大させることである。
【０００８】
[0008]上記の本発明の特徴を詳細に理解できるように、上に簡単に要約した本発明のより詳細な説明を、実施の形態を参照することによって行なう。これら実施の形態の一部について、添付の図面に示す。しかしながら、添付の図面は本発明の典型的な実施の形態のみを示しており、本発明はその他の同等に効果的な実施の形態を含むものであるので、添付の図面は本発明の範囲を限定するものとみなされるべきでないことに注意すべきである。
【詳細な説明】
【０００９】
[0015]本発明は、殆どのグラフィックスレンダリングパイプラインの周知の性能ボトルネックである、シェーダエンジンの作業負荷を低減することによって、グラフィックスレンダリングパイプラインの全体的な効率を改善する。グラフィックスレンダリングパイプラインを動的に再構成してアーリーＺテストをある種の状況において許可し、遮蔽されたピクセルがシェーディング前に廃棄されるようにすることによって、シェーダエンジンは、従来のグラフィックスレンダリングパイプラインに一般的に存在する過剰な作業から解放される。
【００１０】
[0016]図１は、本発明のある実施の形態に係るグラフィックスレンダリングパイプライン１００によるデータフローの概念図である。図示するように、セットアップエンジン１１０は、プロセッサ（図示せず）上で実行しているドライバから幾何プリミティブを受け取る。セットアップエンジン１１０は、入力プリミティブを操作し、ラスタエンジン１１５への提示に適した形態で、変形及び処理された幾何プリミティブを送出する。セットアップエンジン１１０は更に「状態バンドル（state  bundles）」を含む入力コマンドを操作する。状態バンドルは、後続のグラフィックスプリミティブがグラフィックスレンダリングパイプライン１００の様々な処理ユニットにおいてどのように処理されるかを定義するデータを含むが、これに限定されるものではない。状態バンドルからのデータは、後の参照のためにこれらの処理ユニットに保持される。セットアップエンジン１１０は、グラフィックスレンダリングパイプライン１００内のレンダリング状態を追跡し、レンダリング状態のある種の変化を調整する。レンダリング状態は、グラフィックスレンダリングパイプライン１００内の様々なポイントでのレンダリングプロセスに関連する種々の変数、モード、及び設定条件を含むが、これに限定されるものではない。一部のレンダリング状態変数、モード、又は設定条件は、所与のプリミティブに関するレンダリングプロセスを初期化する前に設定され、一部のレンダリング状態は、プリミティブがグラフィックスレンダリングパイプライン１００を進むときに動的に更新される。以下により詳細に説明するように、履歴（ヒステリシス）カウントは、セットアップエンジン１１０内で管理されるレンダリング状態の一要素である。履歴カウントは履歴カウンタ１１１に保持される。
【００１１】
[0017]ラスタエンジン１１５は、幾何プリミティブのカバレッジを計算し、ピクセルプリミティブを更なる処理のために送出する。さらに、ラスタエンジン１１５は各ピクセルについて関連のＺ値を計算する。
【００１２】
[0018]Ｚラスターオペレーションユニット（ＺＲＯＰ）１２０は、現在のピクセルプリミティブのＺ値を、対応するピクセルロケーション用に前もって格納されたＺ値と比較する。ＺＲＯＰ１２０からの結果によって、様々なピクセルプリミティブが保存されるか、又は、廃棄されるかが決定される。より詳細には、ＺＲＯＰエンジン１２０は、現在の各ピクセルのＺ値を、デプスバッファ（図示せず）に前もって格納された対応するピクセルロケーションのＺ値と比較する。この場合にも、このプロセスは「Ｚテスト」として知られたものである。現在のピクセルがＺテストに合格した場合には、ＺＲＯＰ１２０は、そのピクセルのＺ値を任意にデプスバッファ書き込む。このデプスバッファは、一般的には、フレームバッファ１６０に存在するものである。ピクセルがＺテストに合格しない場合には、ピクセルは、プレラスターオペレーション（ＰＲＯＰ）１３０ユニット内に存在するＺリゾルブエンジン（図示せず）によって廃棄され、ＺＲＯＰ１２０は如何なるＺ値情報もデプスバッファには書き込まない。当業者には理解されるように、ピクセルの可視性を決定するＺ値に加えて、特定のピクセルがＺテストに合格したか、又は、失敗したかを最終的に決定する際に、ステンシル値を、Ｚ値と共に任意に使用してもよい。したがって、本明細書中のＺ値への言及は、適切であるならば、ステンシル値にも当てはまる。
【００１３】
[0019]シェーダエンジン１４０は、ピクセルプリミティブを操作して、シェーダエンジン１４０のプログラミングによって決定されたピクセルのカラー及びＺ値を、計算するが、これに限定されるものではない。カラーラスターオペレーションユニット（ＣＲＯＰ）１５０は、ＺＲＯＰ１２０内のＺテストの結果に応じて、各々の合格ピクセルのカラー値をフレームバッファ１６０に書き込む。
【００１４】
[0020]ＰＲＯＰ１３０ユニットは、ＺＲＯＰ１２０、ＣＲＯＰ１５０及びシェーダエンジン１４０の間のピクセルプリミティブの流れを管理し、各ピクセルプリミティブの現在のレンダリング状態に従ってオペレーションの順番を順序付ける。本明細書に説明するように、ＰＲＯＰ１３０は、「レイト」Ｚモードと「アーリー」Ｚモードの二つのモードのうちの一方で動作する。レイトＺモードのデータフローパス１３２はＰＲＯＰ１３０を通る実線で表されている。レイトＺモードでは、シェーダエンジン１４０は、まず、ピクセルプリミティブを操作して、これらに限定されるものではないが、関連するピクセルのカラー及びＺ値を計算する。シェーダエンジン１４０は、その演算結果をＺテストのためにＺＲＯＰ１２０へ向ける。上述のように、ＺＲＯＰ１２０は、Ｚテストに合格した全てのピクセルについてデプスバッファ中のＺ値を更新し、この情報をＰＲＯＰ１３０内のＺリゾルブエンジンへ送り、当該ＰＲＯＰ１３０は、次に、Ｚテストに合格しなかった全てのピクセルを廃棄し、合格したピクセルを、残りのカラー及びフレームバッファ更新のために、ＣＲＯＰ１５０へ伝送する。
【００１５】
[0021]上述したように、多くの場合に、Ｚ値はシェーダエンジン１４０によって変更されない。したがって、アーリーＺモードでは、Ｚテストはシェーディングの前に実施され、これによって、（i）シェーディングオペレーションによって変更されていないＺ値を有するピクセル、及び、（ii）Ｚテストによって廃棄されることになっているピクセルの処理に関連する過剰な作業から、シェーダエンジン１４０を解放する。アーリーＺモード用のデータフローパス１３１はＰＲＯＰ１３０を通る破線で表されている。ここで、ラスタエンジン１１５からのピクセルプリミティブは、Ｚテストの用のＺＲＯＰ１２０へルーティングされ、また、シェーダエンジン１４０へルーティングされる前にＰＲＯＰ１３０内のＺリゾルブエンジンへルーティングされる。この場合も、Ｚテストの結果を使用して、リゾルブエンジンはＺテストに合格しなかった全てのピクセルを廃棄し、合格したピクセルをシェーディングオペレーションのためにシェーダエンジン１４０へ伝送する。シェーダエンジン１４０はＺテストを切り抜けたピクセルだけを処理するので、アーリーＺモードで処理されるピクセルの個数は、レイトＺモードで処理されるピクセルの個数より実質的に削減される。シェーディング後、シェーダエンジン１４０は陰影付きのピクセルをＣＲＯＰ１５０へ伝送する。
【００１６】
[0022]グラフィックスレンダリングパイプライン１００がアーリーＺモードであるか、又は、レイトＺモードであるかとは無関係に、Ｚテストは一般に全ピクセルに対して必要である。説明したように、アーリーＺモードの場合には、シェーダエンジン１４０は、Ｚテストによって廃棄されたピクセルに関連する計算から解放され、改善したシステム性能をもたらす。レイトＺモードの場合には、シェーダエンジン１４０は、各ピクセルの最終的な処分とは無関係に全ピクセルに陰影を付ける。レイトＺモードは一般的なケースであり、グラフィックスレンダリングパイプライン１００で利用できる全てのレンダリング状態に対応し、一方、アーリーＺモードは、ある特定の頻繁に現れるレンダリング状態に制限され、適格なプリミティブが描画されるときに臨機応変的に実施される。
【００１７】
[0023]図２は、本発明のある実施の形態に係る図１のＰＲＯＰ１３０を通るデータフローの概念図である。レイトＺモード用のデータフローパス１３２は実線で表されている。レイトＺモードでは、ＰＲＯＰ１３０は、ラスタエンジン１１５からマルチプレクサ２２１を経由してシェーダエンジン１４０へピクセルデータをルーティングする。シェーダエンジン１４０から返されるデータは、次に、マルチプレクサ２２０を介して伝送される。マルチプレクサ２２０の出力は、Ｚテスト用のＺＲＯＰ１２０へルーティングされ、ＺＲＯＰ１２０によって発生する可能性がある可変の遅延（レイテンシー）に対応するために遅延バッファ２１２へルーティングされる。Ｚリゾルブエンジン２１４は、ＺＲＯＰ１２０によって実行されたＺテストの結果を、遅延バッファ２１２を通過したシェーダエンジン１４０からのデータとマージし、陰影付きの各ピクセルを伝送するか、又は、廃棄する。Ｚテストに合格した陰影付きのピクセルは、次に、マルチプレクサ２２２によって選択され、フレームバッファ１６０へ書き込まれる前に、最終的なカラー処理のためにＣＲＯＰ１５０へ伝送される。
【００１８】
[0024]図１と同様に、アーリーＺモード用のデータフローパス１３１は破線で表されている。アーリーＺモードでは、ＰＲＯＰ１３０は、ラスタエンジン１１５からのデータをマルチプレクサ２２０へそのまま渡すように構成されている。マルチプレクサ２２０によって伝送されたデータは、ＺＲＯＰ１２０にルーティングされ、また、ＺＲＯＰ１２０によって発生する可能性がある可変の遅延に対応するために第２の遅延バッファ２１２とへルーティングされる。この場合も、ＺテストはＺＲＯＰ１２０内で行われる。Ｚリゾルブエンジン２１４は、ＺＲＯＰ１２０によって実行されたＺテストの結果を、第２の遅延バッファ２１２中のデータとマージし、Ｚテストに合格したピクセルをシェーディングのためにシェーダエンジン１４０へ伝送する。陰影付きのピクセルは、次に、シェーダエンジン１４０から第３のマルチプレクサ２２２を経由し、フレームバッファ１６０へ書き込まれる前に最終的なカラー処理のために、ＣＲＯＰ１５０へルーティングされる。
【００１９】
[0025]アーリーＺモードは、略全ての環境下で、グラフィックスレンダリングパイプライン１００の好ましい、より高性能の動作モードである。セットアップエンジン１１０は、グラフィックスレンダリングパイプライン１００がアーリーＺモードで動作し得るか、又は、グラフィックスレンダリングパイプライン１００がレイトＺモードで動作すべきであるかを判定する。一般に、アーリーＺモードは、現在のレンダリング状態がプリミティブに関連するＺ値がシェーダエンジン１４０によって変更される予定がないことを示す場合に、使用される。上述したように、全てのレンダリングオペレーションが、レイトＺモードではサポートされている。しかし、以下に説明するように、アーリーＺモードは、ある特定のレンダリングモードが現れたときに実施される。
【００２０】
[0026]一般に、アーリーＺモード動作を不可能にする一つのレンダリング状態が存在する。そのレンダリング状態は、シェーダプログラムがＺ値を内部的に計算又は修正するときにいつでも確立されるものであり、以下の疑似コードでは、ＤｅｐｔｈＲｅｐｌａｃｅＳｈａｄｅｒ  ＝＝  ｔｒｕｅであるときに明示される。その他の可能なレンダリング状態の組には、アーリーＺモードが許容される二つの規則があり、第１の規則は、シェーダ及びポストシェーダカラーオペレーションがフラグメントカバレッジに影響を与えない“ＥａｒｌｙＺＮｏＫｉｌｌ”として定義されるものである。アーリーＺモードが許容される第２の規則は“ＥａｒｌｙＺＮｏＵｐｄａｔｅ”として定義されものであり、この場合には、Ｚ値書き込みが禁止されているので、シェーダによってカバレッジが変更されることがあるピクセル又はサンプルに対してＺテストが実行される場合であっても、Ｚテストはグラフィックスレンダリングパイプライン１００内でシェーディングの前に移すことが可能である。より詳細には以下に説明するように、履歴カウンタ１１１は、アーリーＺモードへの切り替えが行われる前に特定のカウントに到達すべきである。以下の疑似コードは、アーリーＺモードが有効にされる前に成り立つべき条件を要約している。
EarlyZGlobalOK  =  
DepthReplaceShader  ==  false;    //シェーダはＺを計算又は修正しない
EarlyZNoKillOK  =    //シェーダはフラグメントカバレッジに影響を与えない
AlphaTestEnable        ==  false  &&
AlphaToCovgEnable      ==  false  &&
ShaderPixelKillEnable  ==  false  &&
TextureColorKeyEnable  ==  false;
EarlyZNoUpdateOK  =    //Ｚ結果は格納されない
(DepthTestEnable      == false  ||
DepthWriteEnable     == false)  &&
(StencilTestEnable    == false  ||
(StencilMask          == 0x0)  &&
AllowEarlyZNoUpdate   == true;;
EarlyZEnable  =  //アーリーＺモードへ切り替えるためのレンダリング状態規準に適合
EarlyZGlobalOK  &&
(EarlyZNoKillOK  ||  EarlyZNoUpdateOK)  &&
(EarlyZHysteresisFSM.AllowEarlyZ  ==  true);
【００２１】
[0027]したがって、上記の疑似コードがＥａｒｌｙＺＥｎａｂｌｅ変数に真条件をもたらす場合には、セットアップエンジン１１０は、ＰＲＯＰ１３０に対して、グラフィックスレンダリングパイプライン１００がレイトＺモードでの進行中の作業を完了したならば、グラフィックスレンダリングパイプライン１００をアーリーＺモードで動作させるように指示することが可能である。上述したように、ＥａｒｌｙＺＥｎａｂｌｅが真であるのは、シェーダエンジン１４０がＺ値を修正又は計算しないとき（ＤｅｐｔｈＲｅｐｌａｃｅＳｈａｄｅｒ  ＝＝  ｆａｌｓｅ）、グラフィックスレンダリングパイプライン１００が二つの特有のレンダリングモードのうちの一方にあるとき（ＥａｒｌｙＺＮｏＫｉｌｌＯＫ  ＝＝  ｔｒｕｅ  又は  ＥａｒｌｙＺＮｏＵｐｄａｔｅＯＫ  ＝＝  ｔｒｕｅ）、また、履歴カウンタ１１１がアーリーＺモードへの遷移を許容する状態にあるとき（ＥａｒｌｙＺＨｙｓｔｅｒｅｓｉｓＦＳＭ．ＡｌｌｏｗＥａｒｌｙＺ  ＝＝  ｔｒｕｅ）である。上に列挙したレンダリング状態のそれぞれの定義を以下に説明する。これらのレンダリング状態変数及び対応の関数は、当業者によって容易に認識され理解される。
DepthReplaceShader      ：シェーダエンジンはＺ値を計算又は変更する（通常は頂点Ｚ値を補間するのに対して）；
AlphaTestEnable        ：フラグメントアルファ値が参照値と比較され、指定された条件が満たされないならば、フラグメントを消す；
AlphaToCovgEnable      ：フラグメントアルファが、ラスタエンジンによって計算されたカバレッジマスクと論理積演算されるサンプルカバレッジマスクに変換される；
ShaderPixelKillEnable  ：フラグメントシェーダがフラグメントを消す；
TextureColorKeyEnable  ：テクスチャ値の基準とのカラーキー比較がフラグメントを消す；
DepthTestEnable        ：奥行きテスト（Ｚバッファリング）が有効にされる；
DepthWriteEnable        ：奥行きテストに合格する奥行き値がメモリに書き込まれる；
StencilTestEnable      ：ステンシルテストが有効にされる；
StencilMask            ：どのステンシルビットがメモリに書き込まれるかを示すビットマスク；
AllowEarlyZNoUpdate    ：ＥａｒｌｙＺＮｏＵｐｄａｔｅモードを許可する。ＥａｒｌｙＺＮｏＫｉｌｌモードとは異なり、このモードは、Ｚテストがシェーダによって消されるフラグメントに対して実行されることがあるので、常に性能が勝っているとは限らない。
【００２２】
[0028]レイトＺモードからアーリーＺモードへ切り替えるとき、又は、アーリーＺモードからレイトＺモードへ切り替えるときに、二つの潜在的な問題が存在する。第一に、プリミティブデータがグラフィックスレンダリングパイプライン１００に未だ存在する場合には、モードの切り替えによって、ピクセルデータの損失、若しくは誤りが生じるか、又は、処理効率が低下することがある。例えば、グラフィックスレンダリングパイプライン１００に未だレイトＺモードプリミティブがある場合にアーリーＺモードへ切り替えると、Ｚテストが早く始まり、このことによって、Ｚテストが最終的なＺ値に基づかないので、ピクセルデータが失われるか、又は、不正確になる。一方、グラフィックスレンダリングパイプライン１００に未だアーリーＺモードプリミティブがある場合にレイトＺモードへ切り替えると、アーリーＺテスト中に廃棄される筈であったピクセルがシェーダエンジン１４０によって処理されるという結果になるので、処理が非効率的になる。プリミティブデータがグラフィックスレンダリングパイプライン１００に残っている間にモードを切り替えることに関連する問題を解決するために、「フラッシュ」がモードを切り替える前にグラフィックスレンダリングパイプライン１００上で実行される。パイプラインフラッシュ技術は当分野において既知であり、技術的に実施可能な任意の形式で実施することができる。フラッシュを実行することによって、グラフィックスレンダリングパイプライン１００内で進行中の作業を、モード切り替え前に、ある所定の完了レベルまでで排出させることが可能である。しかしながら、フラッシュを実行する場合に、「バブル」と呼ばれるパイプラインの非アクティブ化の期間が、排出した作業負荷の後に一般にもたらされる。このようなバブルは、潜在的な計算サイクルが事実上待機状態であるため、全体的な性能を下げる。したがって、モード切り替えに関する第２の問題は、フラッシュが非常に頻繁に実行される場合に、グラフィックスレンダリングパイプライン１００をフラッシュすることに付随する性能ペナルティが全体的な性能を低下させることである。この第２の問題を解決するために、グラフィックスレンダリングパイプライン１００がモードを切り替えることを許容されるレートは、レート制限履歴メカニズムを使用して制御される。
【００２３】
[0029]履歴カウンタ１１１は、セットアップエンジン１１０に提供されたプリミティブの個数を記録し、閾値数分のこのようなプリミティブが検出されたときに、セットアップエンジン１１０はレイトＺモードからアーリーＺモードへの切り替えを始める。より詳細には、レイトＺモードは、グラフィックスレンダリングパイプライン１００内で許可されたレンダリング状態の全てを一般に受け入れるので、レイトＺモードはデフォルト動作モードであるとして認識される。レイトＺモードで動作し、かつ、ＥａｒｌｙＺＥｎａｂｌｅが真である場合に、セットアップエンジン１１０は、フラッシュの実行を条件として、且つ、セットアップエンジン１１０が閾値数分のプリミティブに遭遇していることを条件として、グラフィックスレンダリングパイプライン１００のアーリーＺモードへのモード切り替えを臨機応変的に開始する。したがって、グラフィックスレンダリングパイプライン１００は、アーリーＺモードへの切り替えが可能とされる前に、最小個数のプリミティブの期間に亘ってレイトＺモードに保持され、それによって、モード切り替えのレートを低下させる。
【００２４】
[0030]ある実施の形態では、履歴カウンタ１１１は、状態バンドル内に記述されたカウント値であって、セットアップエンジン１１０に伝送され、履歴カウンタ１１１が利用できるようにされたカウンタ値を用いてプログラムされる。履歴カウンタ１１１によって保持された履歴カウントは、セットアップエンジン１１０がレイトＺモードへのモード変更を開始するときには何時でも（又は、グラフィックスレンダリングパイプライン１００がレイトＺモードのため最初に構成されるときに）カウント値に設定される。履歴カウントをカウンタ値に設定すると、プリミティブがセットアップエンジン１１０に受け取られる度に、履歴カウントは、例えば、インクリメント操作又はデクリメント操作等によって進められる。このプロセスは、履歴カウンタが、零のようなトリガ値に到達するまで継続する。トリガ値に到達した履歴カウントは、所定の閾値数分のプリミティブがセットアップエンジン１１０へ提示されたことを示し、セットアップエンジンは、最小の閾値数分のプリミティブを処理するためにグラフィックスレンダリングパイプライン１００をレイトＺモードに保つ。このとき、セットアップエンジン１１０は、適切であるならば、グラフィックスレンダリングパイプライン１００においてアーリーＺモードへのモード変更を開始する。
【００２５】
[0031]別の実施の形態では、Ｚモード切り替えに関連するペナルティは、スイッチがアーリーＺモードとレイトＺモードとの間で行なわれているときに、グラフィックスレンダリングパイプライン１００中で処理位置を変えるパイプライン要素だけを選択的に排出することによって、部分的に緩和される。このような実施の形態では、「Ｚモードトークン」と呼ばれる状態バンドルコマンドが、セットアップエンジン１１０によって生成され、グラフィックスレンダリングパイプライン１００のコンフィギュレーションをアーリーＺモードからレイトＺモードへ変更し、又は、同様にその逆に変更するために使用される。セットアップエンジン１１０は、Ｚモードトークンをグラフィックスレンダリングパイプライン１００中に伝送して、Ｚモードトークンをパイプライン中の各処理エレメントを通過させる。パイプラインが再構成されるときにグラフィックスレンダリングパイプライン１００中の処理位置を変更する各処理エレメントは、Ｚモードトークンが現れた場合に、局所的で選択的なフラッシュを実施するために必要な機能を有する。
【００２６】
[0032]アーリーＺモードで動作する場合に、新しいレンダリング状態がアーリーＺモードと相容れないとき、セットアップエンジン１１０は、上述したように、最初にフラッシュを実行し、続いてＰＲＯＰ１３０にデータフローパスを変更するように指示することによって、グラフィックスレンダリングパイプライン１００をレイトＺモードへ戻す。このような状況では、セットアップエンジン１１０は、一般に、閾値数分のプリミティブがセットアップエンジン１１０へ提示されているという制約を受けない。
【００２７】
[0033]上記の振る舞いに加えて、履歴カウンタ１１１は、複数の異なるモードで動作するように構成される。これらモードには、強制的にグラフィックスレンダリングパイプライン１００を常にレイトＺモードで動作させるモード、又は、グラフィックスレンダリングパイプライン１００が履歴カウント値とは無関係にモードを切り替えることを常に可能にするモードがあるが、これらに限定されない。さらに、履歴カウンタ１１１は、履歴カウントを、上述したように、例えば、カウント値に設定させるある種のリセット条件に応答する。
【００２８】
[0034]図３は、本発明のある実施の形態に従って図１のグラフィックスレンダリングパイプライン１００における動作モードを切り替える方法ステップのフローチャートである。方法ステップを、図１、２、４Ａ及び４Ｂと関連して説明するが、当業者は方法ステップを任意の順序で実行するシステムが本発明の範囲に含まれることを理解するであろう。
【００２９】
[0035]動作モードを切り替える本方法はステップ３１０で始まり、ここでは、セットアップエンジン１１０が操作の対象とするプリミティブを受け取る。ステップ３１２において、セットアップエンジン１１０は、現在の動作モードがアーリーＺモードであるか、又は、レイトＺモードであるかを判定する。現在の動作モードがレイトＺモードであるならば、この方法はステップ３１１へ進み、履歴カウントが更新される。上述したように、履歴カウントは、レイトＺモードに入るとき、又は、グラフィックスレンダリングパイプライン１００が最初にレイトＺモード用に構成されたときに、セットアップエンジン１１０へ伝送された状態バンドルに記述されているカウント値に設定される。レイトＺモード動作中に、履歴カウントは、セットアップエンジン１１０が新しいプリミティブを受け取る度に、デクリメント操作又はインクリメント操作等によって進められる。履歴カウンタ１１１を更新した後、この方法はステップ３２０へ進み、そこでセットアップエンジン１１０は、レンダリング状態変数ＥａｒｌｙＺＥｎａｂｌｅが真であることによって示されるように、モード変更が行われるべきか否かを判定する。ＥａｒｌｙＺＥｎａｂｌｅが偽である場合には、モード変更は行われず、本方法はステップ３４０へ進み、セットアップエンジン１１０がプリミティブストリーム中の次のプリミティブを待ち受ける。しかしながら、ＥａｒｌｙＺＥｎａｂｌｅが真である場合には、モード変更が行われるべきであり、本方法はステップ３２１へ進む。ステップ３２１において、セットアップエンジン１００は、フラッシュオペレーションを開始して、グラフィックスレンダリングパイプライン１００をフラッシュし、進行中の作業を完了させる。この方法は、次にステップ３２２へ進み、そこで、セットアップエンジン１１０は、図２に示すようにアーリーＺモード動作用にグラフィックスレンダリングパイプライン１００のデータフローを再構成するよう、ＰＲＯＰ１３０に指示する。ステップ３２２が終了すると、グラフィックスレンダリングパイプライン１００はアーリーＺモード用に構成され、本方法はステップ３４０へ進み、セットアップエンジンはプリミティブストリーム中の次のプリミティブを待ち受ける。この方法はその後にステップ３１０へ戻る。
【００３０】
[0036]ステップ３１２を再び参照する。現在の動作モードがアーリーＺモードである場合には、本方法はステップ３３０へ進み、そこでセットアップエンジン１１０は、処理されるべき次のプリミティブに基づいて、モード変更が行われるべきか否かを判定する。ＥａｒｌｙＺＥｎａｂｌｅ変数が真であることによって示されるように、次のプリミティブがアーリーＺモードで処理されるべき場合には、モード変更が行われる必要がなく、本方法はステップ３４０へ進む。一方、次のプリミティブがレイトＺモードで処理されるべき場合には、モード変更が行われる必要があり、本方法はステップ３３１へ進む。ステップ３３１において、セットアップエンジン１００は、フラッシュオペレーションを開始して、グラフィックスレンダリングパイプライン１００をフラッシュし、進行中の作業を完了させる。本方法は、次にステップ３３２へ進み、そこでセットアップエンジン１１０は、図２に示すように、レイトＺモード動作用にグラフィックスレンダリングパイプライン１００のデータフローを再構成するよう、ＰＲＯＰ１３０に指示する。ステップ３３２が終了すると、グラフィックスレンダリングパイプライン１００はレイトＺモード用に構成され、この方法はステップ３４０へ進み、そこでセットアップエンジン１１０はプリミティブストリーム中の次のプリミティブを待ち受ける。この方法はその後にステップ３１０へ戻る。
【００３１】
[0037]図４ａは、本発明のある実施の形態に従ってレイトＺモードで動作しているときの図１のグラフィックスレンダリングパイプライン１００の論理的なコンフィギュレーションを示している。セットアップエンジン１１０は、入力プリミティブを操作し、ラスタエンジン１１５への提示に適した形態で変換され処理された幾何プリミティブを送出する。ラスタエンジン１１５は、幾何プリミティブのカバレッジを計算し、ピクセルプリミティブをシェーダエンジン１４０へ送出する。また、ラスタエンジン１１５は、各ピクセルのＺ値を計算する。シェーダエンジン１４０は、ピクセルカラーと、場合によってＺ値とを計算するが、これらに限定されることはなく、更なる処理のためにカラーデータ４３２とＺデータ４３１との間に計算結果を分配する。ＺＲＯＰ１２０はＺテストを実施し、テスト結果をＺリゾルブエンジン２１４へ伝送し、当該Ｚリゾルブエンジンは、Ｚテストに合格しなかったピクセルを廃棄し、Ｚテストに合格したピクセルをＣＲＯＰ１５０へ伝送する。ＣＲＯＰ１５０は、Ｚリゾルブエンジン２１４によって伝送されたピクセルのカラー値をフレームバッファ１６０に保存する。
【００３２】
[0038]図４ｂは、本発明のある実施の形態に従ってアーリーＺモードで動作しているときの図１のグラフィックスレンダリングパイプライン１００の論理的なコンフィギュレーションを示している。レイトＺモードと同様に、セットアップエンジン１１０は入力プリミティブを操作し、ラスタエンジン１１５への提示に適した形態で変換され処理された幾何プリミティブを送出する。しかしながら、レイトＺモードとは異なって、ラスタエンジン１１５は、幾何プリミティブのカバレッジを計算し、ピクセルプリミティブをＺテストのためＺＲＯＰ１２０へそのまま送出する。ＺＲＯＰ１２０はその計算結果をＺリゾルブエンジン２１４へ伝送し、当該Ｚリゾルブエンジンは、Ｚテストに合格したピクセルだけをシェーダエンジン１４０へ伝送する。Ｚリゾルブエンジン２１４によってこの時点で廃棄されたピクセルは、更なる処理を必要としない。シェーダエンジン１４０はピクセルカラー値を計算し、ＣＲＯＰ１５０はピクセルカラー値をフレームバッファ１６０に保存する。
【００３３】
[0039]図４ａ及び４ｂに示したフローは、図１及び２において説明したように、グラフィックスレンダリングパイプライン１００を通るデータフローを構成するＰＲＯＰ１３０から得られる。ＰＲＯＰ１３０は、それ以外には、アーリーＺモードとレイトＺモードの両者においてグラフィックスレンダリングパイプライン１００のオペレーションに影響を与えないので、図４ａ及び４ｂには示していない。
【００３４】
[0040]別の実施の形態では、各幾何プリミティブは、プリミティブがアーリーＺモードで処理されるべきか、又は、レイトＺモードで処理されるべきかを示す状態ビット（「Ｚモードフラグ」）を含む。このＺモードフラグは、幾何プリミティブ及び関連するピクセルのＥａｒｌｙＺＥｎａｂｌｅ状態を計算する上記の規則に基づいて決定される。各幾何プリミティブは、対応するＺモードフラグに従ってルーティングされ処理される。適切である場合には、グラフィックスレンダリングパイプライン１００内の各処理エレメントは、アーリーＺモードとレイトＺモードの両者について独立した状態記憶を有する。Ｚモードのそれぞれに独立した状態を処理エレメント内に与えることによって、レイトＺモード処理を必要とするプリミティブは、グラフィックスレンダリングパイプライン１００の如何なる部分もフラッシュする必要なしに、アーリーＺモード処理を必要とするプリミティブとインターリーブされる。
【００３５】
[0041]図５は本発明の一以上の態様を実施するように構成された計算装置の概念図である。計算装置５００は、限定するものではないが、プロセッサ５１０と、システムメモリ５１５と、グラフィックス処理ユニット（ＧＰＵ）５２０と、ＧＰＵ５２０に接続されたローカルメモリ５２５と、を備えている。ＧＰＵ５２０は、データを処理するために使用される少なくとも一つのレンダリングエンジン５２１を有している。レンダリングエンジン５２１は、上述したようにデータを処理するために使用される少なくとも一つのグラフィックスレンダリングパイプライン１００を有している。当業者は、本明細書に開示した教示を実施するように構成された一以上の処理ユニットを有する任意のシステムが、本発明の範囲に包含されることを認識するであろう。したがって、計算装置５００のアーキテクチャは本発明の範囲を決して限定するものではない。
【００３６】
[0042]上記の事項は本発明の実施の形態を対象としているが、本発明の他の実施の形態及び更なる実施の形態を、本発明の基本的な範囲から逸脱することなく考案することができる。例えば、上記の説明はピクセルのＺテストに焦点を合わせているが、本発明の教示は任意の形式のサンプルのＺテスト（ピクセル、フラグメント、サブピクセル、又は、その他の形式のカラー値表現）にもそのまま適用可能である。したがって、本発明の範囲は特許請求の範囲の記載によって決定される。
【図面の簡単な説明】
【００３７】
【図１】本発明のある実施の形態に係るグラフィックスレンダリングパイプラインによるデータフローの概念図である。
【図２】本発明のある実施の形態に係る図１のＰＲＯＰによるデータフローの概念図である。
【図３】本発明のある実施の形態に係る図１のグラフィックスレンダリングパイプラインにおける動作モードを切り替える方法ステップのフローチャートである。
【図４ａ】本発明のある実施の形態に従ってレイトＺモードで動作する場合の図１のグラフィックスレンダリングパイプラインの論理的なコンフィギュレーションを説明する図である。
【図４ｂ】本発明のある実施の形態に従ってアーリーＺモードで動作する場合の図１のグラフィックスレンダリングパイプラインの論理的なコンフィギュレーションを説明する図である。
【図５】本発明の一以上の態様を実施するように構成された計算装置の概念図である。
【符号の説明】
【００３８】
１１０…セットアップエンジン、１１１…履歴カウンタ、１１５…ラスタエンジン、１２０…Ｚラスターオペレーションユニット、１３０…プレラスターオペレーションユニット、１３１…アーリーＺモードパス、１３２…レイトＺモードパス、１４０…シェーダエンジン、１５０…カラーラスターオペレーションユニット、１６０…フレームバッファ、２２０，２２１，２２２…マルチプレクサ、２１２…遅延バッファ、２１４…Ｚリゾルブエンジン、４３１…Ｚデータ、４３２…カラーデータ、５００…計算装置、５１０…プロセッサ、５１５…システムメモリ、５２０…グラフィックス処理ユニット、５２１…レンダリングエンジン、５２５…ローカルメモリ。
【図１】
0004513108.tif 000002
【図２】
0004513108.tif 000003
【図３】
0004513108.tif 000004
【図４ａ】
0004513108.tif 000005
【図４ｂ】
0004513108.tif 000006
【図５】
0004513108.tif 000007