(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-09-11
(45)【発行日】2024-09-20
(54)【発明の名称】深度バッファプレパス
(51)【国際特許分類】
G06T 15/40 20110101AFI20240912BHJP
【FI】
G06T15/40 500
(21)【出願番号】P 2023515324
(86)(22)【出願日】2021-09-23
(86)【国際出願番号】 US2021051810
(87)【国際公開番号】W WO2022066948
(87)【国際公開日】2022-03-31
【審査請求日】2023-09-04
(32)【優先日】2020-09-24
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(73)【特許権者】
【識別番号】508301087
【氏名又は名称】エーティーアイ・テクノロジーズ・ユーエルシー
【氏名又は名称原語表記】ATI TECHNOLOGIES ULC
【住所又は居所原語表記】One Commerce Valley Drive East, Markham, Ontario, L3T 7X6 Canada
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ヤン ヘンリック アクレニウス
(72)【発明者】
【氏名】ミカ ツオミ
(72)【発明者】
【氏名】キーア カッリオ
(72)【発明者】
【氏名】パラニ ピライ
(72)【発明者】
【氏名】ローラン ルフェーブル
【審査官】益戸 宏
(56)【参考文献】
【文献】米国特許出願公開第2019/0295313(US,A1)
【文献】特表2017-531254(JP,A)
【文献】米国特許出願公開第2014/0118347(US,A1)
【文献】国際公開第2007/052682(WO,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/40
(57)【特許請求の範囲】
【請求項1】
装置であって、
シーンの複数のプリミティブを記憶するキャッシュと、
前記キャッシュに結合された制御ユニットと、を備え、
前記制御ユニットは、
前記キャッシュに記憶された前記複数のプリミティブのうち選択されたプリミティブに対して、前記シーンのレンダリングに関連付けられた処理の第1の部分を実行することであって、前記処理の第1の部分は第1のテストを含む、ことと、
前記複数のプリミティブに対して、前記第1のテストの結果に基づいて処理の第2の部分を実行することであって、前記処理の第2の部分は前記シーンのレンダリングに関連付けられている、ことと、
前記処理の第2の部分の結果として、前記シーンのシェーディングされたピクセルを生成することと、
前記シェーディングされたピクセルをディスプレイに送ることと、
を行うように構成されている、
装置。
【請求項2】
前記第1のテストは深度バッファプレパステストであり、前記複数のプリミティブは前記シーンの所定のタイルに対応しており、
前記制御ユニットは、
前記深度バッファプレパステストに合格するピクセルサンプルの第1のサブセットを識別することと、
前記深度バッファプレパステストに不合格であるピクセルサンプルの第2のサブセットを識別することと、
を行うように更に構成されている、
請求項1の装置。
【請求項3】
前記処理の第2の部分はカラーシェーディングを含み、
前記制御ユニットは、
ピクセルサンプルの前記第1のサブセットに対してのみカラーシェーディングを実行して、ピクセルサンプルの前記第1のサブセットに対応するシェーディングされたピクセルを生成することと、
ピクセルサンプルの前記第2のサブセットに対するカラーシェーディングをスキップすることと、
を行うように更に構成されている、
請求項2の装置。
【請求項4】
前記制御ユニットは、
所定のピクセルサンプルに対して、第1の深度関数を用いて前記深度バッファプレパステストを実行することと、
前記所定のピクセルサンプルに対して、第2の深度関数を用いて第2の深度バッファテストを実行することと、
を行うように更に構成されており、
前記第2の深度関数は、前記第1の深度関数と異なる、
請求項3の装置。
【請求項5】
前記第1の深度関数は小なり関数であり、前記第2の深度関数は小なり等号関数である、
請求項4の装置。
【請求項6】
前記制御ユニットは、
前記ピクセルサンプルが前記深度バッファプレパステストに合格したことに応じて、前記所定のピクセルサンプルについて、プレパスバッファにおける対応するインジケータを第1の値に設定することと、
前記対応するインジケータが前記第1の値を有することに応じて、前記所定のピクセルサンプルについて前記第2の深度関数を用いて前記第2の深度バッファテストを実行することと、
前記所定のピクセルサンプルが前記第2の深度バッファテストに合格したことに応じて、前記所定のピクセルサンプルをシェーディングし、前記プレパスバッファにおける前記対応するインジケータを第2の値に設定することと、
を行うように更に構成されている、
請求項4のシステム。
【請求項7】
前記制御ユニットは、1つ以上のプリミティブが1つ以上の条件を満たすことに応じて、前記深度バッファプレパステストを実行する前に前記1つ以上のプリミティブを破棄するように更に構成されている、
請求項4の装置。
【請求項8】
方法であって、
キャッシュに記憶されたシーンの複数のプリミティブのうち選択されたプリミティブに対して、前記シーンのレンダリングに関連付けられた処理の第1の部分を実行することであって、前記処理の第1の部分は第1のテストを含む、ことと、
前記複数のプリミティブに対して、前記第1のテストの結果に基づいて処理の第2の部分を実行することであって、前記処理の第2の部分は前記シーンのレンダリングに関連付けられている、ことと、
前記処理の第2の部分の結果として、前記シーンのシェーディングされたピクセルを生成することと、
前記シェーディングされたピクセルをディスプレイに送ることと、を含む、
方法。
【請求項9】
前記第1のテストは深度バッファプレパステストであり、前記複数のプリミティブは前記シーンの所定のタイルに対応しており、
前記方法は、
前記深度バッファプレパステストに合格するピクセルサンプルの第1のサブセットを識別することと、
前記深度バッファプレパステストに不合格であるピクセルサンプルの第2のサブセットを識別することと、を更に含む、
請求項8の方法。
【請求項10】
前記処理の第2の部分はカラーシェーディングを含み、
前記方法は、
ピクセルサンプルの前記第1のサブセットについてのみカラーシェーディングを実行して、ピクセルサンプルの前記第1のサブセットに対応するシェーディングされたピクセルを生成することと、
ピクセルサンプルの前記第2のサブセットに対するカラーシェーディングをスキップすることと、を更に含む、
請求項9の方法。
【請求項11】
所定のピクセルサンプルに対して、第1の深度関数を用いて前記深度バッファプレパステストを実行することと、
前記所定のピクセルサンプルに対して、第2の深度関数を用いて第2の深度バッファテストを実行することと、を更に含み、
前記第2の深度関数は、前記第1の深度関数と異なる、
請求項10の方法。
【請求項12】
前記第1の深度関数は大なり関数であり、前記第2の深度関数は大なり等号関数である、
請求項11の方法。
【請求項13】
前記所定のピクセルサンプルが前記深度バッファプレパステストに合格したことに応じて、前記所定のピクセルサンプルについて、プレパスバッファにおける対応するインジケータを第1の値に設定することと、
前記対応するインジケータが前記第1の値を有することに応じて、前記所定のピクセルサンプルについて前記第2の深度関数を用いて前記第2の深度バッファテストを実行することと、
前記所定のピクセルサンプルが前記第2の深度バッファテストに合格したことに応じて、前記所定のピクセルサンプルをシェーディングし、前記プレパスバッファにおける前記対応するインジケータを第2の値に設定することと、を更に含む、
請求項11の方法。
【請求項14】
1つ以上のプリミティブが1つ以上の条件を満たすことに応じて、前記深度バッファプレパステストを実行する前に前記1つ以上のプリミティブを破棄することを更に含む、
請求項11の方法。
【請求項15】
システムであって、
シーンの複数のプリミティブを記憶するメモリと、
前記メモリに結合されたプロセッサと、を備え、
前記プロセッサは、
前記メモリに記憶された前記複数のプリミティブのうち選択されたプリミティブに対して、前記シーンのレンダリングに関連付けられた処理の第1の部分を実行することであって、前記処理の第1の部分は第1のテストを含む、ことと、
前記複数のプリミティブに対して、前記第1のテストの結果に基づいて処理の第2の部分を実行することであって、前記処理の第2の部分は前記シーンのレンダリングに関連付けられている、ことと、
前記処理の第2の部分の結果として、前記シーンのシェーディングされたピクセルを生成することと、
前記シェーディングされたピクセルをディスプレイに送ることと、
を行うように構成されている、
システム。
【請求項16】
前記第1のテストは深度バッファプレパステストであり、前記複数のプリミティブは前記シーンの所定のタイルに対応しており、
前記プロセッサは、
前記深度バッファプレパステストに合格するピクセルサンプルの第1のサブセットを識別することと、
前記深度バッファプレパステストに不合格であるピクセルサンプルの第2のサブセットを識別することと、
を行うように更に構成されている、
請求項15のシステム。
【請求項17】
前記処理の第2の部分はカラーシェーディングを含み、
前記プロセッサは、
ピクセルサンプルの前記第1のサブセットに対してのみカラーシェーディングを実行して、ピクセルサンプルの前記第1のサブセットに対応するシェーディングされたピクセルを生成することと、
ピクセルサンプルの前記第2のサブセットに対するカラーシェーディングをスキップすることと、
を行うように更に構成されている、
請求項16のシステム。
【請求項18】
前記プロセッサは、
所定のピクセルサンプルに対して、第1の深度関数を用いて前記深度バッファプレパステストを実行することと、
前記所定のピクセルサンプルに対して、第2の深度関数を用いて第2の深度バッファテストを実行することと、
を行うように更に構成されており、
前記第2の深度関数は、前記第1の深度関数と異なる、
請求項17のシステム。
【請求項19】
前記第1の深度関数は小なり関数であり、前記第2の深度関数は小なり等号関数である、
請求項18のシステム。
【請求項20】
前記プロセッサは、
前記所定のピクセルサンプルが前記深度バッファプレパステストに合格したことに応じて、前記所定のピクセルサンプルについて、プレパスバッファにおける対応するインジケータを第1の値に設定することと、
前記対応するインジケータが前記第1の値を有することに応じて、前記所定のピクセルサンプルについて前記第2の深度関数を用いて前記第2の深度バッファテストを実行することと、
前記所定のピクセルサンプルが前記第2の深度バッファテストに合格したことに応じて、前記所定のピクセルサンプルをシェーディングし、前記プレパスバッファにおける前記対応するインジケータを第2の値に設定することと、
を行うように更に構成されている、
請求項18のシステム。
【発明の詳細な説明】
【背景技術】
【0001】
(関連技術の説明)
グラフィックスプロセッサは、しばしば、幾何学的モデルからコンピュータ生成画像を生成するために、コンピュータグラフィックス処理システム内で使用される。幾何学的モデルは、仮想シーンの様々なオブジェクト、詳細、光源及び他の要素を定義する。コンピューティングシステムは、幾何学的モデル及びソフトウェアアプリケーションからの他の入力に基づいて、所定のシーンをどのようにレンダリングするかを決定する。これらの入力は、点、線、多角形、三次元固体物及び他のオブジェクト等の図形オブジェクトを含む。これらのオブジェクトは、より一般的には「プリミティブ」と呼ばれ得る。
【0002】
グラフィックス処理ユニット(graphics processing unit、GPU)又は他のタイプのプロセッサは、入力及び幾何学的モデルを処理して、所望の画像又はビデオフレームを表すピクセルの色値の二次元又は三次元配列を生成する。フレームのそれぞれのピクセルは、色及びテクスチャを含む、それに関連付けられた複数の属性を有する。典型的に、シェーダは、ピクセルを表す最終値を達成するために、それぞれのピクセルの属性に対して算術演算及び論理演算を実行するために使用される。最終値は、フレームバッファに入れられ、ピクセルがディスプレデバイスに送られる場合に使用される。
【0003】
複数のプリミティブがレンダリングされ、スクリーン上の同じピクセルに投影される場合、レンダリングエンジンは、何れのプリミティブが可視であり、何れのプリミティブが隠されているかを決定する必要がある。オクルージョン問題(occlusion issues)を解決するための1つの技術は、ピクセルシェーダが深度バッファを用いて深度テストを実行することを伴う。スクリーン上のそれぞれのピクセルについて、視点から最も近いオブジェクトまでの距離が深度バッファに記憶される。プリミティブがスクリーン空間の所定のピクセルに投影される場合に、レンダリングされたプリミティブが、以前にレンダリングされた最も近いプリミティブよりもスクリーン(すなわち、視点)に近いかどうかを決定するために、深度テストが実行される。プリミティブが以前にレンダリングされたプリミティブよりも視点に近い場合、プリミティブはテストに合格する。そうではなく、プリミティブが以前にレンダリングされたプリミティブよりも視点から遠く離れている場合、プリミティブはテストに不合格となる。視点は、ユーザの視点又は遠近感を表す仮想カメラによって定義される。
【0004】
第1の手法では、アプリケーションは、視点から遠く離れた距離に1.0の値を割り当て、視点の位置又は視点に非常に近い位置に0.0の値を割り当てる。第1の手法では、新しいプリミティブがレンダリングされる場合に、プリミティブの深度値は、プリミティブによってカバーされる各ピクセルについて、深度バッファ内の現在の値と比較される。プリミティブの深度値が、所定のピクセルに対する深度バッファ内の現在の値未満の場合、プリミティブはテストに合格し、プリミティブの深度値は、所定のピクセルに対する深度バッファに書き込まれる。そうではなく、プリミティブの深度値が、所定のピクセルに対する深度バッファ内の現在の値よりも大きい場合、プリミティブはテストに不合格であり、深度バッファ値は同じままである。第2の手法では、アプリケーションは、視点から遠く離れた距離に0.0の値を割り当て、視点の位置又は視点に非常に近い位置に1.0の値を割り当てる。第2の手法では、合格又は不合格の結果を構成するものについての判定が、第1の手法と比較すると逆になる。他の手法では、0.0~1.0以外の範囲を使用して、視点から遠く離れた距離及び視点に近接した距離に他の値を割り当てることができる。
【0005】
本明細書に記載の方法及びメカニズムの利点は、添付の図面と併せて以下の説明を参照することによってよりよく理解され得る。
【図面の簡単な説明】
【0006】
【
図1】コンピューティングシステムの一実施形態のブロック図である。
【
図2】グラフィックスをレンダリングするシステムの別の実施形態の論理ブロック図である。
【
図3】コンピューティングシステムの一実施形態のブロック図である。
【
図4】深度バッファプレパス(depth buffer pre-pass)を実行するための擬似コードの一例を示す図である。
【
図5】深度バッファプレパスを実行するための方法の一実施形態を示す一般化されたフロー図である。
【
図6】シェーダパイプラインを通る異なるパスにおいてタイルごとに別々の作業部分を実行するための方法の一実施形態を示す一般化されたフロー図である。
【
図7】深度プレパスを通して何れのプリミティブを送信すべきかを決定するための方法の一実施形態を示す一般化されたフロー図である。
【
図8】パス間で深度テスト関数を変更する方法の一実施形態を示す一般化されたフロー図である。
【
図9】パス間で深度テスト関数を変更する方法の一実施形態を示す一般化されたフロー図である。
【
図10】深度プレパスを実行するための方法の一実施形態を示す一般化されたフロー図である。
【
図11】カラーパスを実行するための方法の一実施形態を示す一般化されたフロー図である。
【
図12】カラーパス深度テストによって使用される深度関数を変更するための方法の一実施形態を示す一般化されたフロー図である。
【
図13】深度プレパスによる処理のためのプリミティブを選択する方法の一実施形態を示す一般化されたフロー図である。
【発明を実施するための形態】
【0007】
以下の説明では、本明細書に提示される方法及びメカニズムの十分な理解を提供するために、多数の具体的な詳細が記載されている。しかしながら、当業者は、これらの具体的な詳細なしに様々な実施形態が実施され得ることを認識すべきである。いくつかの例では、本明細書に記載のアプローチを不明瞭にすることを避けるために、周知の構造、構成要素、信号、コンピュータプログラム命令及び手法が詳細に示されていない。説明を簡単且つ明確にするために、図に示される要素は必ずしも縮尺どおりに描かれているわけではないことが理解されよう。例えば、いくつかの要素の寸法は、他の要素に対して誇張されている場合がある。
【0008】
深度バッファプレパス(depth buffer pre-pass)を実装するための様々なシステム、装置及び方法が本明細書で開示される。プロセッサは、アプリケーションを実行して仮想シーンをレンダリングする。一実施形態では、プロセッサ上で実行されるアプリケーションは、ピクセルシェーダが呼び出される前に深度プレパスを実行させる。深度プレパスの間、仮想シーンの深度部分のみがレンダリングされ、何れのプリミティブが可視であり、何れのプリミティブが隠されているかを判定する。次いで、当該シーンが再描画されるが、隠れたプリミティブはピクセルシェーダに送信されない。比較的大きな割合のプリミティブが重なる場合、この技術は、隠れたプリミティブについてピクセルシェーディングを回避することができるので、レンダリングアプリケーションの効率を高める。
【0009】
一実施形態では、上記の手法はビニング(binning)と併せて採用され、この場合、スクリーンの小さい領域のみが一度に描画される。一実施形態では、システムはバッチビナ(batch binner)を含み、バッチビナでは、特定の数のプリミティブが蓄積され、次いで、スクリーンの小部分(すなわち、タイル)がレンダリングされる。一実施形態では、バッチのためのプリミティブは、プリミティブをフェッチすることを伴うアクセスレイテンシを低減させるためにキャッシュに記憶される。一実施形態では、バッチ内のプリミティブの数は、キャッシュのサイズに基づいて決定される。この実施形態では、キャッシュは、レンダリングされている色表面及び/又は深度表面に従ってサイズ決定される。
【0010】
一実施形態では、仮想シーンの所定のフレームがタイルに分割され、シーンがタイルごとにレンダリングされる。各タイル(すなわち、ビン)は任意の数のプリミティブを含み、プリミティブは複数のタイルにまたがることができ、これらのプリミティブは複数回再生され得る。システムがタイルを処理している間、タイル内の各プリミティブの深度部分が最初にレンダリングされ、次いで、プレパス深度テスト(pre-pass depth test)に合格した各プリミティブに関連付けられた色情報についてタイルが再び処理される。カラーパスの間、ピクセルシェーダは、仮想シーンを表すためにピクセルをシェーディングする。次いで、ピクセルは、ディスプレイに送られるようにディスプレイコントローラに提供され得る。このプロセスは、ビデオゲーム、映画又は他のアプリケーションの各フレームに対して繰り返すことができる。
【0011】
図1を参照すると、コンピューティングシステム100の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム100は、少なくともプロセッサ105A~105Nと、入力/出力(input/output、I/O)インターフェース120と、バス125と、メモリコントローラ130と、ネットワークインターフェース135と、メモリデバイス140と、ディスプレイコントローラ150と、ディスプレイ155と、を含む。他の実施形態では、コンピューティングシステム100は、他の構成要素を含み、及び/又は、コンピューティングシステム100は、別の態様で構成される。プロセッサ105A~105Nは、システム100に含まれる任意の数のプロセッサを表す。
【0012】
一実施形態では、プロセッサ105Aは、中央処理ユニット(central processing unit、CPU)等の汎用プロセッサである。この実施形態では、プロセッサ105Aは、システム100内の他のプロセッサと通信するため、及び/又は、それらのプロセッサのうち1つ以上の演算を制御するためのドライバ110(例えば、グラフィックドライバ)を実行する。実施形態に応じて、ドライバ110は、ハードウェア、ソフトウェア及び/又はファームウェアの任意の好適な組み合わせを使用して実装することができることに留意されたい。一実施形態では、プロセッサ105Nは、高度に並列アーキテクチャを有するデータ並列プロセッサである。データ並列プロセッサは、グラフィックス処理ユニット(GPU)、デジタル信号プロセッサ(digital signal processor、DSP)、フィールドプログラマブルゲートアレイ(field programmable gate array、FPGA)、特定用途向け集積回路(application specific integrated circuit、ASIC)等を含む。いくつかの実施形態では、プロセッサ105A~105Nは、複数のデータ並列プロセッサを含む。一実施形態では、プロセッサ105Nは、ディスプレイ155に送られるようにディスプレイコントローラ150にピクセルを提供するGPUである。
【0013】
メモリコントローラ130は、プロセッサ105A~105Nによってアクセス可能な任意の数及びタイプのメモリコントローラを表す。メモリコントローラ130は、プロセッサ105A~105Nから分離されているものとして示されているが、これは単に1つの可能な実施形態を表すことを理解されたい。他の実施形態では、メモリコントローラ130は、プロセッサ105A~105Nのうち1つ以上の内部に埋め込むことができ、及び/又は、メモリコントローラ130は、プロセッサ105A~105Nのうち1つ以上と同じ半導体ダイに位置することができる。メモリコントローラ130は、任意の数及びタイプのメモリデバイス140に結合される。メモリデバイス140は、任意の数及びタイプのメモリデバイスを表す。例えば、メモリデバイス140内のメモリのタイプは、ダイナミックランダムアクセスメモリ(Dynamic Random Access Memory、DRAM)、スタティックランダムアクセスメモリ(Static Random Access Memory、SRAM)、NANDフラッシュメモリ、NORフラッシュメモリ、強誘電体ランダムアクセスメモリ(Ferroelectric Random Access Memory、FeRAM)等を含む。
【0014】
I/Oインターフェース120は、任意の数及びタイプのI/Oインターフェース(例えば、ペリフェラルコンポーネントインターコネクト(peripheral component interconnect、PCI)バス、PCI-Extended(PCI-X)、PCIE(PCI Express)バス、ギガビットイーサネット(登録商標)(gigabit Ethernet、GBE)バス、ユニバーサルシリアルバス(universal serial bus、USB))を表す。様々なタイプの周辺デバイス(図示省略)がI/Oインターフェース120に結合される。そのような周辺デバイスには、ディスプレイ、キーボード、マウス、プリンタ、スキャナ、ジョイスティック、他のタイプのゲームコントローラ、メディア記録デバイス、外部記憶デバイス、ネットワークインターフェースカード等が含まれるが、これらに限定されない。ネットワークインターフェース135は、ネットワークを介してネットワークメッセージを受信及び送信することができる。
【0015】
様々な実施形態において、コンピューティングシステム100は、コンピュータ、ラップトップ、モバイルデバイス、ゲームコンソール、サーバ、ストリーミングデバイス、ウェアラブルデバイス、又は、様々な他のタイプのコンピューティングシステム若しくはデバイスのうち何れかである。コンピューティングシステム100の構成要素の数は、実施形態ごとに変化することに留意されたい。例えば、他の実施形態では、
図1に示される数よりも多い又は少ない各構成要素が存在する。また、他の実施形態では、コンピューティングシステム100は、
図1に示されていない他の構成要素を含むことにも留意されたい。加えて、他の実施形態では、コンピューティングシステム100は、
図1に示される以外の方法で構築される。
【0016】
図2を参照すると、グラフィックスをレンダリングするためのシステム200の一実施形態の論理ブロック図が示されている。一実施形態では、システム200は、処理要素202、アプリケーション205及びメモリ225等の構成要素を含む。処理要素202は、少なくともシェーダ210A~210N及び制御ユニット220を含む。シェーダ210A~210Nは、任意の数及びタイプのシェーダ(例えば、ジオメトリシェーダ、ライトシェーダ、ピクセルシェーダ)を表す。処理要素202は、1つ以上のCPU、GPU、FPGA、ASIC、DSP及び/又は他の処理リソースを含む。また、システム200は、任意の数及びタイプの他の構成要素を含むことができ、他の構成要素は実装ごとに異なることに留意されたい。一実施形態では、アプリケーション205は、ビデオゲーム、映画又は他のアプリケーションのシーンを表すためにピクセルをレンダリングするためのグラフィックスアプリケーションである。一実施形態では、アプリケーション205は、メモリ225に記憶され、処理要素202上で実行されるプログラム命令を含む。アプリケーション205は、汎用プロセッサ上で、又は、FPGA若しくはASIC等の固定ハードウェア上で実行することができる。同様に、シェーダ210A~210Nは、ソフトウェア及び/又はハードウェアの任意の好適な組み合わせを使用して実装され得る。
【0017】
様々な実施形態では、シェーダ210A~210Nは、投影面上に投影される所定のシーンのシーンジオメトリについて深度値を生成するジオメトリシェーダを含む。深度バッファプレパス中に、プリミティブ217のジオメトリが生成され、深度バッファ240を使用してプリミティブ217に対して深度バッファテストが実行される。一実施形態では、プリミティブ217は、スクリーンの単一のタイルに対応する。この実施形態では、アプリケーション205は、タイルごとにフレームをレンダリングする。深度バッファプレパス中に、プリミティブは、ピクセルサンプル(すなわち、フラグメント)にラスタライズされ、可視のピクセルサンプルが識別され、対応するインジケータがプレパスバッファ235に記憶される。本明細書で使用される場合、「ピクセルサンプル」は、プリミティブの一部を生成するのに必要なデータとして定義され、その部分は、スクリーン空間の単一ピクセルに投影される。「ピクセルサンプル」、「サンプル」及び「フラグメント」という用語は、本明細書では互換的に使用され得ることに留意されたい。
【0018】
深度バッファプレパスの後、カラーパス(color pass)が可視ピクセルサンプルに対して実行されて、ピクセルサンプルの色値をレンダリングする。次に、色値は、カラーバッファ245に記憶される。隠れたピクセルサンプルは、カラーパスにおいてレンダリングされず、これは、ピクセルシェーダによって実行される作業の量を低減するのに役立つ。ピクセルシェーダは、レンダリングされたオブジェクトの各ピクセルに適用される色及び追加の外観属性を生成する。最終的に、シェーディングされたピクセルは、ディスプレイ(例えば、
図1のディスプレイ155)に送られるようにフレームバッファ250に書き込まれる。
【0019】
図3を参照すると、コンピューティングシステム300の一実施形態のブロック図が示されている。一実施形態では、コンピューティングシステム300は、少なくとも、ジオメトリバッファ305、制御ユニット310、プレパスバッファ315及びシェーダパイプライン320を含む。制御ユニット310は、ソフトウェア及び/又はハードウェアの任意の好適な組み合わせを使用して実装され得る。制御ユニット310は、制御ロジック310とも呼ばれ得ることに留意されたい。コンピューティングシステム300は、図を不明瞭にすることを避けるために示されていない任意の数の他の構成要素(例えば、メモリデバイス、フレームバッファ、ディスプレイ)を含み得る。
【0020】
一実施形態では、制御ユニット310は、ジオメトリバッファ305のピクセルを、深度バッファプレパスにおいてシェーダパイプライン320によって処理させる。深度バッファプレパスは、スパース(すなわち、選択されたプリミティブがテストされ書き込まれる)であってもよく、又は、深度バッファプレパスは、フル(すなわち、全てのプリミティブがテストされ書き込まれる)であってもよい。深度バッファプレパスの間、可視のピクセルサンプルが識別され、この情報がプレパスバッファ315に記録される。例えば、一実施形態では、プリミティブによってカバーされる各ピクセルサンプルは、プレパスバッファ315内に対応するインジケータを有する。この実施形態では、プリミティブが所定のピクセルロケーションにおいて可視である場合、所定のピクセルロケーションに対応するインジケータは、深度バッファプレパス中に第1の値(例えば、1)に設定される。プリミティブは、ピクセルサンプルごとに処理することができ、各ピクセルサンプルは個別に処理することができることに留意されたい。
【0021】
深度バッファプレパスの後、シェーダパイプライン320を通して、カラーパスが、レンダリングされたプリミティブに対して起動される。フル深度バッファプレパス(full depth buffer pre-pass)が実行された場合、カラーパスによって処理されているプリミティブの所定のピクセルサンプルについて、プレパスバッファ315内の対応するインジケータが第2の値(例えば、0)に設定されている場合、カラーパスは、所定のピクセルサンプルについてスキップされる。これにより、カラーパス中に処理されるピクセルサンプルの数が少なくなるので、カラーパスがより効率的になる。スパース深度バッファプレパス(sparse depth buffer pre-pass)が実行された場合であって、所定のプリミティブがスパース深度バッファプレパス中に処理されなかった場合、所定のプリミティブの全てのピクセルサンプルは、プレパスバッファ315における対応するインジケータの値にかかわらず、カラーパス中に処理される。
【0022】
フル深度バッファプレパスが実行される場合、各可視ピクセルサンプルは、プレパスバッファ315に設定されたビットを有する。フル深度バッファプレパスの後、深度バッファは、等号深度関数(EQUAL depth function)が可視サンプルに対して真であるような最終深度値を含む。この場合、深度関数が小なり又は大なり(LESS or GREATER)である場合、深度関数は、可視サンプル(すなわち、プレパスバッファ315に設定された対応するインジケータを有するサンプル)に対して変更されることになる。この場合、小なり深度関数(LESS depth function)は小なり等号(LESS_OR_EQUAL)に変更され、大なり深度関数(GREATER depth function)は大なり等号(GREATER_OR_EQUAL)に変更される。一実施形態では、レンダリングされたピクセルサンプルは、プレパスインジケータを消費する。これは、小なり又は大なり深度関数が使用される場合、ピクセルサンプルごとに1つのプリミティブのみがレンダリングされることを意味する。しかしながら、小なり等号又は大なり等号深度関数を既に有するプリミティブの場合、同じ深度でレンダリングされた複数のプリミティブが存在し得る。複数のプリミティブが同じ深度でレンダリングされる場合、レンダリングされる最後のプリミティブは可視のままである。
【0023】
スパース深度バッファプレパスが実行される場合、深度バッファは、カラーパスの開始時にその最終状態にない。スパース深度バッファプレパス中に処理されなかった任意のプリミティブは、プレパスバッファコンテンツのみに基づいて可視性を決定することができない。むしろ、スパース深度バッファプレパス中に処理されなかったプリミティブのピクセルサンプルは、対応するプレパスバッファ値が第2の値(例えば、0)である場合、スキップされないことになる。また、一実施形態では、深度バッファは、スパース深度バッファプレパス中に処理されなかったプリミティブの可視ピクセルサンプルについて、カラーパス中に更新される。
【0024】
シェーダパイプライン320は、1~Nの任意の数のシェーダユニット325A~325Nを含み、Nは1より大きい正の整数である。シェーダユニット325A~325Nは、シェーダステージ325A~325Nとも呼ばれ得ることに留意されたい。シェーダユニット325A~325Nは、頂点シェーダ、ライトシェーダ、ラスタライザステージ、ピクセルシェーダ、ジオメトリシェーダ、フラグメントシェーダ、計算シェーダ等の任意の数及びタイプのシェーダを含み得る。一実施形態では、シェーダパイプライン320を通るカラーパスの出力は、シーンを表す複数のピクセルを含む。第2のパスの出力は、更なる処理を受けることができ、記憶されることができ、及び/又は、ディスプレイに送られ得る。
【0025】
図4を参照すると、深度バッファプレパスを実行するための擬似コード400の一実施形態が示されている。擬似コード400の場合、Qは、深度プレパス405について選択されたプリミティブPのサブセットである。QがプリミティブPの全てを含む場合、これは、フル深度プレパスが実行されていることを意味する。QがプリミティブPのサブセットを含む場合、これはスパース深度プレパスである。Q内の各プリミティブpについて、各サンプル[x,y]は、深度値(すなわち、z)が深度バッファ(すなわち、z_buffer)内に記憶された値未満であるかどうかを判定するために処理される。座標[x,y]は、スクリーン空間内の[x,y]ピクセルロケーションを指すことに留意されたい。この説明の目的のために、小なり関数(LESS THAN function)が擬似コード400に使用されると仮定する。別の実施形態では、大なり関数(GREATER THAN function)が、深度プレパスのために使用され得る。この実施形態では、擬似コード400に類似した擬似コードを使用することができ、ステップに対応する変更を加えて、小なり関数ではなく大なり関数を使用する。
【0026】
サンプルの深度値が特定のピクセルロケーションの深度バッファ値未満の場合、これは、サンプルが、このピクセルロケーションについて以前にレンダリングされた任意のサンプルよりも近く、サンプルが可視であることを意味する。したがって、サンプルの深度値が所定のピクセルロケーションの深度バッファ値未満の場合、その所定のピクセルロケーションにプレパスインジケータが設定される。プレパスインジケータは、擬似コード400において「p_buffer[x,y]」として指定される。また、深度バッファは、サンプルの深度値を記憶するように更新される。
【0027】
深度プレパス405がQ内のプリミティブpについて終了した後、カラーパス410が起動される。プリミティブpがQ内にあり(すなわち、プリミティブpが深度プレパス405内に含まれていた)、プレパスバッファ値が「0」であり、深度関数が小なり(LESS THAN)である場合、ピクセルサンプルは、カラーパス410中にオプションでスキップされる。そうでない場合、P内の各プリミティブpに対して及びp内の各サンプル[x,y]に対して、条件付きステップが実行される。条件付きステップの第1の部分は、サンプルの深度値(すなわち、p.z[x,y])がピクセルロケーションの深度バッファ値(すなわち、z_buffer[x,y])未満であるかどうかを判定する。条件付きステップの第2の部分は、プレパスバッファインジケータ(すなわち、p_buffer[x,y])が設定されているかどうか、サンプルの深度値がピクセルロケーションの深度バッファ値に等しいかどうかを判定する。条件付きステップの第1の部分又は第2の部分の何れかが真である場合、ピクセルがシェーディングされ(すなわち、shade(p,x,y))、プレパスバッファインジケータがクリアされ、pがQ内にない(すなわち、プリミティブが深度プレパス内に含まれなかった)場合、ピクセルロケーションの深度バッファがサンプルの深度値で更新される。擬似コード400は、特定の実装において実行され得る擬似コードの一例であることに留意されたい。他の実施形態では、他のステップを有する他の擬似コード例が実行され得る。
【0028】
小なり深度関数(LESS THAN depth function)の場合、深度バッファプレパスがプリミティブの全てを含む場合に、深度バッファプレパス中に設定されたそのプレパスバッファインジケータを有する任意のピクセルサンプルは、カラーパス中に正確に1回シェーディングされることに留意されたい。深度バッファプレパスに含まれないプリミティブは、カラーパス中にこれらのピクセルサンプルを追加の回数でレンダリングし得る。同様に、大なり深度関数(GREATER THAN depth function)が深度バッファプレパスに使用される場合であって、深度バッファプレパスがプリミティブの全てを含む場合に、深度バッファプレパス中に設定されたそのプレパスバッファインジケータを有する任意のピクセルサンプルは、カラーパス中に正確に1回シェーディングされる。
【0029】
図5を参照すると、深度バッファプレパスを実行するための方法500の一実施形態が示されている。説明のために、この実施形態におけるステップ及び
図6~
図13のステップが順番に示されている。しかしながら、記載された方法の様々な実施形態において、記載された要素のうち1つ以上は、図示されたものとは異なる順序で同時に実行されてもよいし、完全に省略されてもよいことに留意されたい。必要に応じて、他の追加の要素も実行される。本明細書に記載の様々なシステム又は装置の何れも、方法500を実施するように構成されている。
【0030】
制御ユニットは、複数のプリミティブに対して、第1の深度関数を用いて第1の深度バッファテストを実行する(ブロック505)。一実施形態では、複数のプリミティブはキャッシュに記憶され、複数のプリミティブはスクリーンの所定のタイルに対応する。一実施形態では、第1の深度関数は、小なり比較(LESS THAN comparison)である。別の実施形態では、第1の深度関数は、大なり比較(GREATER THAN comparison)である。次に、制御ユニットは、第1の深度バッファテストに合格した各ピクセルサンプルに対して、インジケータを設定する(ブロック510)。言い換えれば、制御ユニットは、同じスクリーンピクセルに投影される他のプリミティブの他のピクセルサンプルよりも視点に近いプリミティブの各ピクセルサンプルの指標を記憶する。ピクセルサンプルは、第1の深度バッファテストの結果としてシェーディングされていないことに留意されたい。
【0031】
次いで、制御ユニットは、複数のプリミティブに対して第2の深度バッファテストを実行する(ブロック515)。ブロック515において、インジケータがクリアされたピクセルサンプルについて、第1の深度関数を用いて第2の深度バッファテストが実行される。それらのインジケータのセットを有するピクセルサンプルについて、第2の深度バッファテストは、第2の深度関数を用いて実行され、ここで、第2の深度関数は、第1の深度関数とは異なる。一実施形態では、第1の深度関数が大なり(GREATER THAN)である場合、第2の深度関数は大なり等号(GREATER THAN OR EQUAL TO)である。別の実施形態では、第1の深度関数が小なり(LESS THAN)である場合、第2の深度関数は小なり等号(LESS THAN OR EQUAL TO)である。次に、ピクセルシェーダは、第2の深度バッファテストに合格したピクセルサンプルのみをシェーディングする。また、ピクセルシェーダは、シェーディングされたピクセルのインジケータをクリアする(ブロック520)。次に、制御ユニットは、シェーディングされたピクセルをディスプレイに送る(ブロック525)。ブロック525の後、方法500は終了する。
【0032】
図6を参照すると、シェーダパイプラインを通る異なるパスにおいてタイルごとに別々の作業部分を実行するための方法600の一実施形態が示されている。アプリケーションは、シーンの所定のタイルをレンダリングすることに関連付けられた処理の第1の部分のために、シェーダパイプラインを通して複数のプリミティブを起動する(ブロック605)。一実施形態では、処理の第1の部分は、複数のプリミティブの深度部分をレンダリングするための深度バッファプレパスを含む。例えば、一実施形態では、ブロック605は、(
図10の)方法1000を実行することによって実施される。処理の第1の部分の間に、第1のテストが、複数のプリミティブのピクセルサンプルに対して実行される(ブロック610)。一実施形態では、第1のテストは深度バッファテストである。他の実施形態では、第1のテストは他のタイプのテストであり得る。次に、アプリケーションは、シーンの所定のタイルをレンダリングすることに関連付けられた処理の第2の部分のために、シェーダパイプラインを通して第1のテストに合格したピクセルサンプルを起動する(ブロック615)。一実施形態では、処理の第2の部分は、第1のテストに合格したそれらのプリミティブのカラーシェーディングを実行することを含む。例えば、一実施形態では、ブロック615は、(
図11の)方法1100を実行することによって実施される。次いで、シェーダパイプラインは、処理の第2の部分の結果として所定のタイルについてシェーディングされたピクセルを生成する(ブロック620)。レンダリングするシーンのタイルが更にある場合(条件分岐ブロック625、「はい」)、方法600はブロック605に戻る。そうではなく、シーンの全てのタイルがレンダリングされた場合(条件分岐ブロック625、「いいえ」)、方法600は終了する。
【0033】
図7を参照すると、深度バッファプレパスを通して何れのプリミティブを送信するかを決定するための方法700の一実施形態が示されている。制御ユニットは、プリミティブのタイルが処理される準備ができているという指標を受信する(ブロック705)。これに応じて、制御ユニットは、タイルからの何れのプリミティブに対して深度バッファプレパスを実行すべきかを決定する(ブロック710)。タイル内にプリミティブの単一のレイヤのみが存在する場合(条件分岐ブロック715、「はい」)、制御ユニットは、タイルに対する深度バッファプレパスをスキップする(ブロック720)。ブロック720の後、制御ユニットは、タイルについてピクセルシェーダを通るカラーパスを開始する(ブロック725)。ブロック725の後、方法700は終了する。
【0034】
そうではなく、タイル内にプリミティブの2つ以上のレイヤが存在する場合(条件分岐ブロック715、「いいえ」)、制御ユニットは、同じレイヤの一部であるプリミティブについてレイヤごとにプリミティブを分析する(ブロック730)。別の実施形態では、制御ユニットは、ブロック730において、プリミティブごとにプリミティブを分析する。各プリミティブについて、プリミティブのレイヤの面積が閾値未満である場合(条件分岐ブロック735、「はい」)、制御ユニットは、プリミティブに対する深度バッファプレパスをスキップする(ブロック740)。そうではなく、プリミティブのレイヤの面積が閾値以上の場合(条件分岐ブロック735、「いいえ」)、制御ユニットは、深度バッファプレパスを通してプリミティブを送信する(ブロック745)。ブロック740及びブロック745の後、分析するプリミティブが更に存在する場合(条件分岐ブロック750、「はい」)、方法700は条件分岐ブロック735に戻る。そうではなく、分析するプリミティブがそれ以上存在しない場合(条件分岐ブロック750、「いいえ」)、方法700はブロック725にジャンプする。他の実施形態では、他の条件がチェックされて、深度バッファプレパスを通してプリミティブを送信するかどうかが決定され得ることに留意されたい。
【0035】
図8を参照すると、パス間で深度テスト関数を変更するための方法の一実施形態が示されている。制御ユニットは、深度バッファプレパス中にタイルを処理する場合に小なり深度テスト(LESS THAN depth test)を使用する(ブロック805)。タイルのプリミティブによってカバーされる各ピクセルサンプルについて、ピクセルサンプルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値未満である場合(条件分岐ブロック810、「はい」)、制御ユニットは、プレパスバッファに対応するインジケータを設定し、深度バッファ値を、そのピクセルロケーションにおけるプリミティブの深度値で更新する(ブロック815)。ピクセルサンプルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値以上の場合、(条件分岐ブロック810、「いいえ」)、制御ユニットは、プレパスバッファにおける対応するインジケータを変更(修正)しない(ブロック820)。次いで、深度バッファプレパスが終了した後、制御ユニットは、タイルのプリミティブに対してカラーパスを開始する(ブロック825)。
【0036】
プリミティブによってカバーされる各ピクセルサンプルについて、制御ユニットは、プリミティブが深度プレパスを通過したかどうか、サンプルについてのプレパスバッファインジケータがクリア(すなわち、0)されているかどうか、及び、プリミティブについての深度関数が小なり(LESS THAN)であるかどうかを判定する(条件分岐ブロック830)。プリミティブが深度プレパスを通過した場合であって、サンプルについてのプレパスバッファインジケータがクリアされている場合であって、プリミティブのための深度関数が小なりである場合(条件分岐ブロック830、「はい」)、制御ユニットは、サンプルに対してカラーパスをスキップする(ブロック835)。そうではなく、プリミティブが深度プレパスによって処理されなかった場合、サンプルに対するプレパスバッファインジケータが設定されている場合(すなわち、1)、又は、プリミティブのための深度関数が小なり等号(LESS THAN OR EQUAL TO)である場合(条件分岐ブロック830、「いいえ」)、制御ユニットは、ピクセルロケーションにおけるプリミティブの深度がそのピクセルロケーションの深度バッファ値未満であるかどうかを判定する(条件分岐ブロック840)。
【0037】
ピクセルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値未満の場合(条件分岐ブロック840、「はい」)、制御ユニットは、そのピクセルロケーションのプリミティブをシェーディングさせる(ブロック850)。また、そのピクセルロケーションのプレパスバッファインジケータがクリアされる(ブロック855)。プリミティブが深度プレパスによって処理されなかった場合(条件分岐ブロック860、「いいえ」)、そのピクセルロケーションの深度バッファ値は、そのピクセルロケーションにおけるプリミティブの深度値で更新される(ブロック865)。そうではなく、プリミティブが深度プレパスによって処理された場合(条件分岐ブロック860、「はい」)、深度バッファ値は変更されないままである(ブロック870)。
【0038】
ピクセルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値以上の場合(条件分岐ブロック840、「いいえ」)、制御ユニットは、そのピクセルロケーションにプレパスバッファインジケータが設定されているかどうか、及び、そのピクセルロケーションにおけるプリミティブの深度値が、そのピクセルロケーションの深度バッファ値に等しいかどうかを判定する(条件分岐ブロック845)。そのピクセルロケーションにプレパスバッファインジケータが設定されており、そのピクセルロケーションにおけるプリミティブの深度値がそのピクセルロケーションの深度バッファ値に等しい場合(条件分岐ブロック845、「はい」)、制御ユニットは、そのピクセルロケーションのプリミティブをシェーディングさせる(ブロック850)。そうではなく、そのピクセルロケーションのプレパスバッファインジケータがクリアされている場合、又は、そのピクセルロケーションにおけるプリミティブに対する深度値が、そのピクセルロケーションに対する深度バッファ値よりも大きい場合(条件分岐ブロック845、「いいえ」)、制御ユニットは、そのサンプルに対してカラーパスをスキップする(ブロック835)。
【0039】
図9を参照すると、パス間で深度テスト関数を変更するための方法の一実施形態が示されている。制御ユニットは、深度バッファプレパス中にタイルを処理する場合に大なり深度テスト(GREATER THAN depth test)を使用する(ブロック905)。タイルのプリミティブによってカバーされる各ピクセルサンプルに対して、ピクセルサンプルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値よりも大きい場合(条件分岐ブロック910、「はい」)、制御ユニットは、プレパスバッファにおける対応するインジケータを設定し、深度バッファ値を、そのピクセルロケーションにおけるプリミティブの深度値で更新する(ブロック915)。ピクセルサンプルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値以下である場合、(条件分岐ブロック910、「いいえ」)、制御ユニットは、プレパスバッファにおける対応するインジケータを変更(修正)しない(ブロック920)。次いで、深度バッファプレパスが終了した後、制御ユニットは、タイルのプリミティブに対してカラーパスを開始する(ブロック925)。
【0040】
プリミティブによってカバーされる各ピクセルサンプルについて、制御ユニットは、プリミティブが深度プレパスを通過したかどうか、サンプルについてのプレパスバッファインジケータがクリアされているかどうか、及び、プリミティブについての深度関数が大なり(GREATER THAN)であるかどうかを判定する(条件分岐ブロック930)。プリミティブが深度プレパスを通過した場合であって、サンプルに対するプレパスバッファインジケータがクリアされている場合であって、プリミティブのための深度関数が大なりである場合(条件分岐ブロック930、「はい」)、制御ユニットは、サンプルに対してカラーパスをスキップする(ブロック935)。そうではなく、プリミティブが深度プレパスによって処理されなかった場合、サンプルにプレパスバッファインジケータが設定されている場合、又は、プリミティブについての深度関数が大なり等号(GREATER THAN OR EQUAL TO)である場合(条件分岐ブロック930、「いいえ」)、制御ユニットは、ピクセルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値よりも大きいかどうかを判定する(条件分岐ブロック940)。
【0041】
ピクセルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値よりも大きい場合(条件分岐ブロック940、「はい」)、制御ユニットは、そのピクセルロケーションについてプリミティブをシェーディングさせる(ブロック950)。また、そのピクセルロケーションのプレパスバッファインジケータがクリアされる(ブロック955)。プリミティブが深度プレパスによって処理されなかった場合(条件分岐ブロック960、「いいえ」)、そのピクセルロケーションの深度バッファ値は、そのピクセルロケーションにおけるプリミティブの深度値で更新される(ブロック965)。そうではなく、プリミティブが深度プレパスによって処理された場合(条件分岐ブロック960、「はい」)、深度バッファ値は変更されないままである(ブロック970)。
【0042】
ピクセルロケーションにおけるプリミティブの深度が、そのピクセルロケーションの深度バッファ値以下である場合(条件分岐ブロック940、「いいえ」)、制御ユニットは、そのピクセルロケーションにプレパスバッファインジケータが設定されているかどうか、及び、そのピクセルロケーションにおけるプリミティブに対する深度値が、そのピクセルロケーションに対する深度バッファ値に等しいかどうかを判定する(条件分岐ブロック945)。そのピクセルロケーションに対するプレパスバッファインジケータが設定されており、そのピクセルロケーションにおけるプリミティブの深度値が、そのピクセルロケーションの深度バッファ値に等しい場合(条件分岐ブロック945、「はい」)、制御ユニットは、そのピクセルロケーションのプリミティブをシェーディングさせる(ブロック950)。そうではなく、そのピクセルロケーションのプレパスバッファインジケータがクリアされている場合、又は、そのピクセルロケーションにおけるプリミティブの深度値が、そのピクセルロケーションの深度バッファ値未満である場合(条件分岐ブロック945、「いいえ」)、制御ユニットは、そのサンプルに対してカラーパスをスキップする(ブロック935)。
【0043】
図10を参照すると、深度プレパスを実行するための方法1000の一実施形態が示されている。タイル内の選択されたプリミティブに対して、深度プレパスが起動される(ブロック1005)。次に、プリミティブは、何れのスクリーンピクセルが各プリミティブによってカバーされるかを判定し、カバーされたピクセルサンプルごとにフラグメントを出力するために、ラスタライザに提供される(ブロック1010)。次に、初期深度テスト(early depth test)が、選択されたプリミティブについてラスタライザによって生成された各フラグメントに対して実行される(条件分岐ブロック1015)。初期深度テストは、フラグメントが可視であるかどうかを判定するために各フラグメントに対して実行される。プリミティブのフラグメントが初期深度テストに不合格である場合(条件分岐ブロック1015、「不合格」)、深度バッファ及びプレパスバッファは変更(修正)されないままである(ブロック1020)。サンプルは、深度バッファ解像度における要素であることに留意されたい。言い換えれば、深度バッファの解像度は、サンプルのレベルである。「サンプル」及び「フラグメント」という用語は、本明細書において互換的に使用することができることにも留意されたい。
【0044】
そうではなく、プリミティブのフラグメントが初期深度テストに合格した場合(条件分岐ブロック1015、「合格」)、対応するピクセルサンプルの深度バッファ値が更新され、サンプルロケーションにおけるプレパスバッファにおける対応するインジケータが更新される(ブロック1025)。また、シェーディングが、フラグメントに対してスキップされる(ブロック1030)。プレパスバッファインジケータの各々は、対応する深度バッファ値を有することに留意されたい。ブロック1030の後、方法1000は終了する。
【0045】
図11を参照すると、カラーパスを実行するための方法1100の一実施形態が示されている。タイル内の全てのプリミティブに対してカラーパスが起動される(ブロック1105)。次に、プリミティブは、何れのスクリーンピクセルが各プリミティブによってカバーされるかを判定し、カバーされたピクセルサンプルごとにフラグメントを出力するために、ラスタライザに提供される(ブロック1110)。次に、各プリミティブフラグメントによってカバーされた各サンプルについて、プレパスバッファインジケータが読み取られる(条件分岐ブロック1115)。プレパスバッファインジケータが所定のピクセルサンプルに設定されている場合(条件分岐ブロック1115、「はい」)、変更(修正)された深度関数が使用される(ブロック1125)。例えば、元の深度関数が小なりであった場合、修正された深度関数は小なり等号になる。代替的に、元の深度関数が大なりであった場合、修正された深度関数は大なり等号になる。
【0046】
プレパスバッファインジケータが設定されていない場合(条件分岐ブロック1115、「いいえ」)、制御ユニットは、プリミティブが深度プレパスに含まれていたかどうか、及び、深度関数が小なり又は大なりであるかをオプションで判定する(条件分岐ブロック1120)。プリミティブが深度プレパスに含まれていた場合であって、深度関数が小なり又は大なりである場合(条件分岐ブロック1120、「はい」)、深度バッファ及びプレパスバッファは変更(修正)されないままである(ブロック1140)。ブロック1140の後、方法1100は、所定のサンプルについて終了する。プリミティブが深度プレパスに含まれていない場合、又は、深度関数が小なり等号又は大なり等号である場合(条件分岐ブロック1120、「いいえ」)の何れかにおいて、元の深度関数が使用される(ブロック1130)。条件分岐ブロック1120はオプションであり、実行される必要がないことに留意されたい。条件分岐ブロック1120が実施されていない場合、方法1100は、条件分岐ブロック1115の「いいえ」行程からブロック1130に直接進む。ブロック1130の後、初期深度テストが実行される(条件分岐ブロック1135)。
【0047】
フラグメントが初期深度テストに不合格である場合(条件分岐ブロック1135、「不合格」)、深度バッファ及びプレパスバッファは変更(修正)されないままである(ブロック1140)。そうではなく、フラグメントが初期深度テストに合格した場合(条件分岐ブロック1135、「合格」)、制御ユニットは、プリミティブが深度プレパスに含まれていたかどうかを判定する(条件分岐ブロック1145)。プリミティブが深度プレパスに含まれていた場合(条件分岐ブロック1145、「はい」)、これは、深度値が等しいことが既知であることを意味し、制御ユニットは、サンプルロケーションにおいてプレパスバッファにおける対応するインジケータをクリアする(ブロック1155)。次に、制御ユニットは、フラグメントに対するシェーディングに進む(ブロック1160)。ブロック1160の後、方法1100は、フラグメントについて終了する。プリミティブがプレパスに含まれていなかった場合(条件分岐ブロック1145、「いいえ」)、深度バッファ値が更新され(ブロック1150)、制御ユニットは、サンプルロケーションでプレパスバッファにおける対応するインジケータをクリアする(ブロック1155)。別の実施形態では、条件分岐ブロック1145は強制的に「いいえ」にされ、方法1100は、この場合、条件分岐ブロック1135の「合格」行程から直接ブロック1150に進む。ブロック1155の後、制御ユニットは、フラグメントに対するシェーディングに進む(ブロック1160)。
【0048】
図12を参照すると、カラーパス深度テストによって使用される深度関数を変更(修正)するための方法1200の一実施形態が示されている。制御ユニットは、複数のプリミティブのうち選択されたプリミティブに対して、小なり深度関数又は大なり深度関数の何れかを用いて第1の深度バッファテストを実行する(ブロック1205)。一実施形態では、複数のプリミティブがキャッシュに記憶され、複数のプリミティブはスクリーンの所定のタイルに対応する。次に、制御ユニットは、第1の深度バッファテストの結果に基づいて深度バッファ値を更新する(ブロック1210)。次に、制御ユニットは、複数のプリミティブに対して、小なり等号深度関数又は大なり等号深度関数の何れかを用いて第2の深度バッファテストを実行する(ブロック1215)。例えば、第1の深度バッファテストが小なり関数を使用した場合、第2の深度テストは小なり等号深度関数を使用する。代替的に、第1の深度バッファテストが大なり関数を使用した場合、第2の深度テストは大なり等号深度関数を使用する。
【0049】
次に、ピクセルシェーダは、第2の深度バッファテストに合格したそれらのプリミティブのみをシェーディングする(ブロック1220)。次に、制御ユニットは、シェーディングされたピクセルをディスプレイに送る(ブロック1225)。ブロック1225の後、方法1200は終了する。方法1200を実施する場合、プレパスバッファが使用されないので、等しい深度値を有する複数のサンプルがある場合、Z個の等しいサンプルの全てがシェーディングされ、最後のサンプルが表示されることになる。対照的に、プレパスバッファが使用され、プレパスインジケータがプレパスによって処理されたサンプルのために記憶される場合、単一パスシステムの場合のように、第1のZ個の等しいサンプルのみがシェーディングされる。
【0050】
図13を参照すると、深度プレパスによって処理するためのプリミティブを選択するための方法1300の一実施形態が示されている。制御ユニットは、処理される準備ができているプリミティブのシーケンスを受信する(ブロック1305)。一実施形態では、制御ユニットは、ジオメトリ処理ステップによって生成されたプリミティブの完全なセットのサブセットのみを受信する。この実施形態では、プリミティブの面方向に基づいていくつかのプリミティブを除去することによって、プリミティブが予めフィルタリングされる。例えば、1つのシナリオでは、背面向きのプリミティブが除去される。また、一実施形態では、プリミティブは、視錐台内のそれらのプリミティブのみが制御ユニットによって受信されるように、視錐台に基づいて予めフィルタリングされる。一実施形態では、視錐台境界と交差するプリミティブは、錐台にクリッピングされる。また、一実施形態では、プリミティブの入力シーケンスは、プリミティブのスクリーンポジションに基づいて予めフィルタリングされる。例えば、処理が複数のタイルに対して並列に同時に実行される場合、タイルは複数の処理ユニットにわたって分散され得る。
【0051】
次に、制御ユニットは、受信したプリミティブのシーケンスから分析するプリミティブを選択する(ブロック1310)。次いで、制御ユニットは、選択されたプリミティブが任意の以前の入力プリミティブと連続レイヤを形成するかどうかを判定する(ブロック1315)。一実施形態では、制御ユニットは、プリミティブが共有頂点を有するかどうかをチェックすることによって、プリミティブが以前のプリミティブと連続レイヤを形成するかどうかを判定する。一実施形態では、頂点チェックは、完全な頂点座標を使用する必要はないが、各頂点は、チェック及び記憶するより少ない数のビットを有するハッシュに縮小され得ることに留意されたい。選択されたプリミティブが以前のプリミティブとともに連続レイヤを形成する場合(条件分岐ブロック1320、「はい」)、制御ユニットは、連続レイヤのプリミティブの累積面積を計算する(ブロック1325)。一実施形態では、制御ユニットは、プリミティブの個別のレイヤごとに個別の累積面積和を維持する。選択された第1のプリミティブに対して、デフォルトでは、条件分岐ブロック1320において「はい」行程が選択されるべきであり、次いで、制御ユニットは、単一のプリミティブの面積を計算することになる。選択されたプリミティブが以前のプリミティブと連続レイヤを形成しない場合(条件分岐ブロック1320、「いいえ」)、制御ユニットは、タイルがプリミティブの複数のレイヤを含むことを示すマルチレイヤフラグを設定する(ブロック1330)。マルチレイヤフラグが以前に設定されていた場合、ブロック1330はスキップされ得る。代替的に、別の実施形態では、制御ユニットは、個別のレイヤの総数を追跡するためのカウンタを維持する。ブロック1330の後に(又は同時に)、制御ユニットは、プリミティブの面積を計算する(ブロック1335)。
【0052】
ブロック1325及びブロック1335の後、未だ分析されていないタイルのプリミティブが更に存在する場合(条件分岐ブロック1340、「はい」)、方法1300はブロック1310に戻る。そうではなく、タイルの全てのプリミティブが分析された場合(条件分岐ブロック1340、「いいえ」)、マルチレイヤフラグが設定されていない場合(条件分岐ブロック1345、「いいえ」)、制御ユニットは、深度バッファプレパスを通してタイルのプリミティブを送信しない(ブロック1350)。ブロック1350の後、方法1300は終了する。別の実施形態では、制御ユニットがレイヤの総数を追跡するカウンタを維持する場合、条件分岐ブロック1345において、カウンタを閾値と比較することができる。マルチレイヤフラグが設定されている場合(条件分岐ブロック1345、「はい」)、各プリミティブについて、プリミティブのレイヤの対応する累積面積が閾値よりも大きい場合(条件分岐ブロック1355、「はい」)、制御ユニットは、深度バッファプレパスを通じてプリミティブを送信する(ブロック1360)。そうではなく、プリミティブのレイヤの対応する累積面積が閾値以下である場合(条件分岐ブロック1355、「いいえ」)、制御ユニットは、プリミティブに対する深度バッファプレパスをスキップする(ブロック1365)。ブロック1360及びブロック1365の後、方法1300は終了する。一実施形態では、方法1300において選択されたプリミティブに対して深度バッファプレパスが実行された後、タイルのプリミティブの全てがカラーパスにおいて処理される。
【0053】
様々な実施形態では、ソフトウェアアプリケーションのプログラム命令を使用して、本明細書に記載の方法及び/又はメカニズムを実施する。例えば、汎用又は専用プロセッサによって実行可能なプログラム命令が企図される。様々な実施形態では、そのようなプログラム命令は、高レベルプログラミング言語によって表される。他の実施形態では、プログラム命令は、高レベルプログラミング言語からバイナリ、中間又は他の形式にコンパイルされる。あるいは、ハードウェアの動作又は設計を説明するプログラム命令が書かれる。そのようなプログラム命令は、C等の高レベルプログラミング言語によって表される。あるいは、Verilog等のハードウェア設計言語(hardware design language、HDL)が使用される。様々な実施形態では、プログラム命令は、様々な非一時的なコンピュータ可読記憶媒体の何れかに記憶される。記憶媒体は、プログラム実行のためにプログラム命令をコンピューティングシステムに提供するために、使用中にコンピューティングシステムによってアクセス可能である。一般的に言えば、そのようなコンピューティングシステムは、少なくとも1つ以上のメモリと、プログラム命令を実行するように構成された1つ以上のプロセッサと、を含む。
【0054】
上記の実施形態は、実施形態の非限定的な例にすぎないことを強調しておきたい。上記の開示が十分に理解されると、多数の変形及び修正が当業者に明らかになるであろう。以下の特許請求の範囲は、全てのそのような変形及び修正を包含すると解釈されることが意図されている。