(57)【要約】遅延プリミティブバッチビニングを用いたハイブリッドレンダリングのためのシステム、方法及びコンピュータプログラム製品が提供される。プリミティブのシーケンスからプリミティブバッチが生成される。プリミティブバッチ内のプリミティブについて最初のビン切片が識別される。処理のためのビンが識別される。ビンは、スクリーンスペースの領域に対応する。識別されたビンを区切るプリミティブのピクセルが処理される。識別されたビンを区切るプリミティブが処理されている間に、次のビン切片が識別される。【選択図】図８
2019530070.tif 000002
【特許請求の範囲】
【請求項１】
１つ以上のプリミティブのシーケンスからプリミティブバッチを生成することであって、前記プリミティブバッチ内のプリミティブは、表示領域を画定する複数のビンに関連する１つ以上の行及び１つ以上の列を区切る、ことと、
前記プリミティブバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた行でソートすることと、
前記プリミティブバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた列でソートすることと、
クエリされた行及び列を区切る前記プリミティブバッチ内の全てのプリミティブをラスタライズすることと、
プリミティブを含む全てのビン内の全てのプリミティブがラスタライズされるまで、プリミティブを含む全てのビンをクエリすることと、を含む、
方法。
【請求項２】
前記プリミティブバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた行でソートすることは、前記１つ以上のプリミティブによって区切られた最小行と、前記１つ以上のプリミティブによって区切られた最大行と、を決定することを含む、
請求項１の方法。
【請求項３】
前記プリミティブバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた列でソートすることは、前記１つ以上のプリミティブによって区切られた最小列と、前記１つ以上のプリミティブによって区切られた最大列と、を決定することを含む、
請求項１の方法。
【請求項４】
新たなプリミティブを前記プリミティブバッチに挿入する前に、バッチ中断条件が存在するかどうかを判別することをさらに含む、
請求項１の方法。
【請求項５】
バッチ中断条件は、プリミティブを記憶するのに十分なスペースがメモリにないこと、前記プリミティブバッチをフラッシュするイベントが発行されたこと、又は、十分な状態コンテキストがないこと、のうち何れかを含む、
請求項４の方法。
【請求項６】
前記１つ以上のプリミティブの全て又はプリミティブのグループによって区切られた全ての行を含むマスクを記憶することをさらに含む、
請求項１の方法。
【請求項７】
プロセッサによって実行されると、前記プロセッサに動作を行わせる命令を記憶するコンピュータ可読記憶媒体であって、
前記動作は、
１つ以上のプリミティブのシーケンスからプリミティブバッチを生成することであって、前記プリミティブバッチ内のプリミティブは、表示領域を画定する複数のビンに関連する１つ以上の行及び１つ以上の列を区切る、ことと、
前記プリミティブバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた行でソートすることと、
前記プリミティブバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた列でソートすることと、
クエリされた行及び列を区切る前記プリミティブバッチ内の全てのプリミティブをラスタライズすることと、
プリミティブを含む全てのビン内の全てのプリミティブがラスタライズされるまで、プリミティブを含む全てのビンをクエリすることと、を含む、
コンピュータ可読記憶媒体。
【請求項８】
前記プリミティブバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた行でソートすることは、前記１つ以上のプリミティブによって区切られた最小行と、前記１つ以上のプリミティブによって区切られた最大行と、を決定することを含む、
請求項７のコンピュータ可読記憶媒体。
【請求項９】
前記プリミティブバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた列でソートすることは、前記１つ以上のプリミティブによって区切られた最小列と、前記１つ以上のプリミティブによって区切られた最大列と、を決定することを含む、
請求項７のコンピュータ可読記憶媒体。
【請求項１０】
前記動作は、新たなプリミティブを前記プリミティブバッチに挿入する前に、バッチ中断条件が存在するかどうかを判別することをさらに含む、
請求項７のコンピュータ可読記憶媒体。
【請求項１１】
バッチ中断条件は、プリミティブを記憶するのに十分なスペースがメモリにないこと、前記プリミティブバッチをフラッシュするイベントが発行されたこと、又は、十分な状態コンテキストがないこと、のうち何れかを含む、
請求項１０のコンピュータ可読記憶媒体。
【請求項１２】
前記動作は、前記１つ以上のプリミティブの全て又はプリミティブのグループによって区切られた全ての行を含むマスクを記憶することをさらに含む、
請求項７のコンピュータ可読記憶媒体。
【請求項１３】
第１ラスタライザと、
前記第１ラスタライザに関連する第１ソータであって、前記第１ラスタライザは、生成されたプリミティブのバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた行でソートする第１ソートを実行し、前記１つ以上のプリミティブによって区切られた行に関する情報を前記第１ソータに記憶するように構成されており、前記生成されたプリミティブのバッチ内のプリミティブは、表示領域を画定する複数のビンに関連する１つ以上の行及び１つ以上の列を区切る、第１ソータと、
第２ラスタライザと、
前記第２ラスタライザに関連する第２ソータであって、前記第２ラスタライザは、前記１つ以上のプリミティブの前記第１ソートを受信し、前記生成されたプリミティブのバッチ内の１つ以上のプリミティブを、前記１つ以上のプリミティブによって区切られた列でソートする第２ソータを実行し、前記１つ以上のプリミティブによって区切られた列に関する情報を前記第２ソータに記憶するように構成されており、前記第２ソータは、プリミティブを含む全てのビン内の全てのプリミティブがラスタライズされるまで、ラスタライズのためにクエリされた行及び列を区切る前記第１ソート及び前記第２ソートから、前記プリミティブのバッチ内の全てのプリミティブを転送するように構成されている、第２ソータと、を備える、
システム。
【請求項１４】
前記第１ラスタライザは、前記１つ以上のプリミティブによって区切られた最小行と、前記１つ以上のプリミティブによって区切られた最大行と、を前記第１ソータに記憶するようにさらに構成されている、
請求項１３のシステム。
【請求項１５】
前記第２ラスタライザは、前記１つ以上のプリミティブによって区切られた最小列と、前記１つ以上のプリミティブによって区切られた最大列と、を前記第２ソータに記憶するようにさらに構成されている、
請求項１３のシステム。
【請求項１６】
前記第１ラスタライザは、前記第１ソータ内の前記１つ以上のプリミティブの全て又はプリミティブのグループによって区切られた全ての行を含むマスクを記憶するようにさらに構成されている、
請求項１３のシステム。
【請求項１７】
前記第１ラスタライザは、行を区切る前記１つ以上のプリミティブの当該行のクエリを実行するようにさらに構成されている、
請求項１３のシステム。
【請求項１８】
前記第２ラスタライザは、列を区切る前記１つ以上のプリミティブの当該列のクエリを実行するようにさらに構成されている、
請求項１３のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１６年８月２９日に出願された米国特許出願第１５／２５０，３５７号の利益を主張し、その内容は、完全に記載されているかのように、参照により本明細書に組み込まれる。
【背景技術】
【０００２】
表示画像は、通常、数百万のドットを含み、各ドットは、数千又は数百万の色のうち１つの色を表す。これらのドットは、画像素子又は「ピクセル」として知られている。各ピクセルには、色、深度、透過性又はテクスチャ属性等の複数の属性が関連付けられている。これらの属性は、電子デバイスの表示画面上にレンダリングされる前に操作され処理される。
【０００３】
ピクセルは、各ピクセルの色値を決定するためにグラフィックオブジェクトをレンダリングすることによって生成される。例示的なグラフィックオブジェクトは、点、線、ポリゴン及び三次元（３Ｄ）高次サーフェスを含む。点、線及びポリゴンは、殆どの３Ｄレンダリング命令の基礎となるレンダリングプリミティブを表す。３Ｄオブジェクト等のより複雑な構造は、このようなプリミティブの組み合わせ又はメッシュから形成される。特定のシーンを表示するために、シーンに関連する潜在的な寄与ピクセルを有するプリミティブは、プリミティブのエッジ内にあるピクセルを決定し、これらの各ピクセルに対応するプリミティブの属性を取得することによって個別にレンダリングされる。
【０００４】
３Ｄシーンには数千、数百万又は数億のプリミティブが存在することが多いため、各プリミティブを個別に完全にラスタライズすると、複雑な３Ｄ画像を表示画面にレンダリングする際に最適なシステムパフォーマンスが得られない場合がある。このような従来のグラフィックスシステムは、ラスタライズ処理が１つのプリミティブから次のプリミティブへ移動するにつれて、メモリからの色及び深度値の読み出し及び書き込みを繰り返してしまうという課題がある。ラスタライズされたピクセルを直ちにシェーディングすると、不要な処理オーバーヘッド及びシステムメモリ帯域幅の全体的な非効率的な使用に繋がる可能性がある。
【発明の概要】
【課題を解決するための手段】
【０００５】
実施形態は、概して、グラフィックスパイプラインの処理に関する。より具体的には、実施形態は、グラフィックスパイプラインにおいてグラフィックスをレンダリングするための遅延プリミティブバッチビニングメカニズムに関する。
【０００６】
遅延プリミティブバッチビニングを用いてグラフィックスをレンダリングするシステム、方法及びコンピュータプログラム製品が提供される。プリミティブバッチは、一連のプリミティブのシーケンスから生成される。プリミティブがプリミティブバッチに到着すると、プリミティブに関する第１ビン切片（intercept）が識別される。バッチがクローズした後、第１ビンが処理のために識別される。ビンは、スクリーンスペースの領域に対応する。識別されたビンを区切る（インターセプトする）プリミティブが処理される。識別されたビンを区切るプリミティブ毎に、次のビン切片が識別され、識別されたビンによって囲まれたプリミティブに含まれるピクセルが詳細なラスタライズのために送信される。この処理は、プリミティブバッチのプリミティブによって交差されたあらゆるビンに対して繰り返される。開示された実施形態のさらなる特徴及び利点と、様々な実施形態の構造及び動作とは、添付の図面を参照して以下に詳細に説明される。本開示は、本明細書に記載の特定の実施形態に限定されないことに留意されたい。このような実施形態は、例示目的のためだけに本明細書に提示される。本明細書に含まれる教示に基づいて、さらなる実施形態が当業者に明らかになるであろう。
【０００７】
本明細書に組み込まれて本明細書の一部を形成する添付の図面は、本開示を例示し、説明と共に、実施形態の原理を説明し、当業者が実施形態を製造及び使用することを可能にするのにさらに役立つ。様々な実施形態が図面を参照して以下に説明され、同じ符号は、全体を通して同様の要素を指すために使用される。
【図面の簡単な説明】
【０００８】
【図１】一実施形態による、グラフィックス処理システムのブロック図である。
【図２】一実施形態による、処理モジュールのブロック図である。
【図３】一実施形態による、即時モードレンダリングシステムのブロック図である。
【図４Ａ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図４Ｂ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図４Ｃ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図４Ｄ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図４Ｅ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図４Ｆ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図４Ｇ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図４Ｈ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図４Ｉ】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【図５】一実施形態による、遅延プリミティブバッチビニングの処理を示すフロー図である。
【図６】一実施形態による、遅延シェーディング処理を示すフロー図である。
【図７】一実施形態による、即時モードレンダリングシステムにおけるバッチビニング及びソートの一例を示す図である。
【図８】一実施形態による、バッチビニング及びソートを実行するシステムの例示的な概略図である。
【図９Ａ】一実施形態による、バッチビニング及びソートを実行する例示的な方法のフロー図である。
【図９Ｂ】一実施形態による、バッチビニング及びソートを実行する例示的な方法のフロー図である。
【発明を実施するための形態】
【０００９】
添付の図面を参照して実施形態を説明する。全体的に、要素が最初に現れる図面は、通常、対応する符号の左端の数字によって示される。
【００１０】
以下の詳細な説明において、「１つの実施形態」、「一実施形態」、「例示的な実施形態」等の言及は、説明した実施形態が特定の特徴、構造又は特性を含むことができることを示しているが、全ての実施形態が必ずしも特定の特徴、構造又は特性を含むわけではない。また、このような表現は、必ずしも同じ実施形態を指しているわけではない。さらに、特定の特徴、構造又は特性が実施形態に関連して説明される場合、このような特徴、構造又は特性が他の実施形態に関連して影響を及ぼすことは、明示的に説明されているか否かに関わらず、当業者の知識の範囲内であると考えられる。
【００１１】
「実施形態」という用語は、全ての実施形態が、説明した特徴、利点又は動作モードを含むことを要求するものではない。本発明の範囲から逸脱することなく代替の実施形態を考案することができ、関連する詳細を曖昧にしないように、周知の要素を詳細に説明しないか省略する場合がある。また、本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、限定することを意図するものではない。例えば、本明細書で使用される場合、単数形は、文脈が明らかにそうでないことを示さない限り、複数形も含むことを意図している。「備える」、「備えている」、「含む」及び／又は「含んでいる」という用語は、本明細書で使用される場合、記載された特性、整数、ステップ、動作、要素及び／又はコンポーネントの存在を特定するが、１つ以上の他の特性、整数、ステップ、動作、要素、コンポーネント及び／又はこれらのグループの存在若しくは追加を排除するものではないことを理解されたい。
【００１２】
データを効率的にレンダリングして処理するために、グラフィックス処理装置（ＧＰＵ）は、ハードウェアパイプラインを含む。ハードウェアパイプラインは、特定のタイプのデータの処理又は特定のタイプの機能を実行する。グラフィックスパイプラインは、３Ｄコンピュータグラフィックス、画像、ビデオ等の処理及びレンダリングを行う。各画像又はフレームは、点、線、ポリゴン、又は、メッシュに編成されたプリミティブの組み合わせを含むプリミティブを使用して、レンダリングされる。各フレーム又は画像内のプリミティブは、何れのピクセルがプリミティブのエッジ内にあるかを決定し、これらの各ピクセルに対応するプリミティブの属性を計算することによって、個別に描画される。
【００１３】
従来の即時モードレンダリングシステムでは、グラフィックス処理パイプラインは、プリミティブがパイプラインによって受信された順序でシーン内の各プリミティブをレンダリングするように構成されている。例えば、プリミティブは、プリミティブの頂点に対応するｘ、ｙ、ｚ座標、色又はテクスチャｕ、ｖ座標等の属性のセットを含むことができる。シーン内の全ての前向き（forward facing）プリミティブは、ラスタライズされシェーディングされる（現在のＧＰＵのシェーディング処理では、補間、テクスチャリング、ライティング及び結合の動作を含むユーザ記述動作が行われる）。従来の即時モードレンダリンググラフィックスパイプラインは、ラスタライズ処理が１つのプリミティブから次のプリミティブに移動するにつれて、メモリからの色及び深度値の読み出しを繰り返してしまうという課題がある。例えば、スクリーン上のプリミティブに関連するフラグメントの空間的分離がオンチップの色及び深度の読み出し／書き込みキャッシュの容量を超える場合、プリミティブを適切に処理するためにシステムメモリへの反復トリップが必要になる。プリミティブ処理におけるこの欠点は、グラフィックスパイプラインにおける画像のレンダリングを著しく遅延させ、効率的な画像レンダリングに影響を及ぼし、電子デバイス上の最終画像を取得するのに必要とされる電力を増加させるボトルネックである。
【００１４】
図１は、実施形態を実施可能なグラフィックス処理システム１００の図である。グラフィックス処理システム１００は、アプリケーションモジュール１１０と、アプリケーションプログラミングインタフェース（ＡＰＩ）１２０と、ドライバモジュール１３０と、処理モジュール１４０と、ディスプレイモジュール１５０と、を含む。アプリケーションモジュール１１０は、例えば、ビデオゲームアプリケーション等のグラフィックス処理を必要とするエンドユーザアプリケーションとすることができるが、これに限定されない。一実施形態によれば、ＡＰＩ１２０は、アプリケーションモジュール１１０とドライバモジュール１３０との間の仲介として機能するように構成されている。特に、ＡＰＩ１２０は、グラフィックス機能が多くの異なるハードウェアシステム（例えば、処理モジュール１４０）上で動作するように、広範囲の共通グラフィックス機能がソフトウェア開発者によって書き込まれるのを可能にすることができる。ＡＰＩ１２０の例には、ＤｉｒｅｃｔＸ（Ｍｉｃｒｏｓｏｆｔ（登録商標）製）及びＯｐｅｎＧＬ（Ｓｉｌｉｃｏｎ  Ｇｒａｐｈｉｃｓ製）が含まれるが、これらに限定されない。ディスプレイモジュール１５０は、例えば、ブラウン管ディスプレイ、液晶ディスプレイ、発光ダイオードディスプレイ又は他の同様のタイプのディスプレイデバイスとすることができるが、これらに限定されない。
【００１５】
実施形態によれば、ドライバモジュール１３０は、アプリケーションモジュール１１０からのより高いレベルのグラフィックス計算プログラムが処理モジュール１４０と対話するのを可能にするコンピュータプログラムである。例えば、ドライバモジュール１３０は、処理モジュール１４０の製造者によって書き込まれ、ＡＰＩ１２０から受信した標準コードを、処理モジュール１４０の処理ユニットによって理解されるネイティブフォーマットに変換することができる。ドライバモジュール１３０は、例えば、これらに限定されないが、アプリケーションモジュール１１０又はユーザからの入力が処理モジュール１４０の設定を指示することを可能にする。このような設定には、アンチエイリアス制御、テクスチャフィルタ制御、バッチビニング制御及び遅延ピクセルシェーディング制御の選択が含まれる。例えば、ユーザは、グラフィックス処理ハードウェア及びソフトウェアと共にユーザに供給されるＵＩを含むユーザインタフェース（ＵＩ）を介して、これらの設定のうち１つ以上を選択することができる。
【００１６】
ドライバモジュール１３０は、処理モジュール１４０にコマンドを発行する。一実施形態では、ドライバモジュール１３０は、ＡＰＩ１２０を介してアプリケーションモジュール１１０からグラフィックス動作を受信する。グラフィックス動作は、例えば、これらに限定されないが、グラフィックスシーンのテクスチャマッピングを含むことができる。当業者に理解されるように、テクスチャは、テクスチャマッピング動作中、グラフィックスシーンに細部、表面テクスチャ又は色を追加するために使用される。
【００１７】
一実施形態では、処理モジュール１４０は、プリミティブのシーケンスを受信し、プリミティブを、時間的に関連するプリミティブバッチに日和見的に（opportunistically）セグメント化するように構成されている。一実施形態によれば、プリミティブのシーケンスは、例えば、バッチフル条件、状態記憶フル条件、又は、以前にレンダリングされたプリミティブへの依存性が決定される等の所定の条件が満たされるまでキャプチャされる。一例では、プリミティブバッチは、所定の最大バッチ値に基づいて形成される。別の例では、折り畳み（collapsible）バッチビニング技術を使用してもよく、この技術では、プリミティブバッチについて最初に収集されたプリミティブの最大量が一定にされているが、ビンのプリミティブの処理中に、完成したプリミティブを破棄し、処理中に新たなプリミティブを動的に挿入して柔軟なプリミティブバッチを形成することが可能になる。
【００１８】
レンダリングされたプリミティブを表示するスクリーンスペースは、市松模様等のいくつかのブロックに分割されてもよい。スクリーンスペースの各ブロックは、ビンに関連付けられてもよい。一実施形態によれば、ビンのサイズは動的であり、処理条件に基づいて任意のサイズになるように構成することができる。バッチの受信されたプリミティブのシーケンスの各プリミティブは、１つ以上のビンと交差することができる。バッチ内の受信プリミティブ毎に最初のビン切片が計算される。ここで、最初のビン切片は、プリミティブが交差するスクリーンの最も左上のビンである。バッチがクローズした後に、第１ビンが処理のために識別される。識別されたビンを区切るプリミティブが処理される。ビンを区切ると識別されたプリミティブ毎に次のビン切片が識別され、識別されたビンによって囲まれたプリミティブに含まれるピクセルが、詳細なラスタライズのために送信される。次のビン切片は、処理されたプリミティブが交差するラスタ順で次に最も左上にあるビンである。
【００１９】
一実施形態によれば、遅延シェーディング動作が有効になると、ピクセルシェーディングが遅延される。一実施形態では、処理モジュール１４０は、ｘ、ｙスクリーン座標に基づいてプリミティブに関連するフラグメントを蓄積する。プリミティブは「ピクセルフラグメント」にラスタライズされる。処理モジュール１４０は、フラグメントに対してテストを実行し、何れのフラグメントをシェーディングする必要があるかを判別するためにフィルタリング動作を実行するように構成されている。レンダリングされる任意の所定のシーンにおいて、例えば、プリミティブが重なり合ってもよいし、プリミティブが透明であってもよい。したがって、特定のプリミティブ及びこれらに対応するフラグメントは、シーンの最終的な色又は深度に寄与しない可能性がある。処理モジュール１４０は、任意のシェーディング動作を実行する前に、最終的なピクセル色又はピクセル深度に寄与しないフラグメントを破棄するように構成されている。即時モードレンダリングシステムにおける遅延プリミティブバッチビニングの使用は、日和見的に用いられ、プリミティブバッチサイズが、１バッチ当たり１つしかプリミティブ要素を受信させない１つ以上の条件に基づいている場合に、若干の遅延を即時モードレンダリングシステムに生じさせる。また、遅延プリミティブバッチビニングは、完全に内蔵されたハードウェア処理であるため、外部帯域幅が減少する。遅延バッチビニング処理メカニズムについては、以下により詳細に説明する。
【００２０】
図２は、処理モジュール１４０の一実施形態の図である。処理モジュール１４０は、処理ユニット２１０と、メモリ管理ユニット（ＭＭＵ）２２０と、メモリデバイス２３０と、を含む。処理ユニット２１０は、例えば、これらに限定されないが、中央処理装置（ＣＰＵ）、グラフィックス処理装置（ＧＰＵ）、アクセラレーテッドプロセッシングユニット（ＡＰＵ）、特定用途向け集積回路（ＡＳＩＣ）コントローラ若しくは他の類似のタイプの処理ユニット又はこれらの組み合わせとすることができる。処理ユニット２１０は、命令を実行し、図１のグラフィックス処理システム１００に関連する動作を実行するように構成されている。例えば、グラフィックス処理システム１００は、グラフィックスをレンダリングし表示するように構成することができる。ＭＭＵ２２０は、処理ユニット２１０によって要求されたメモリデバイス２３０へのアクセスを処理するように構成されている。ＭＭＵ２２０の機能は、例えば、これらに限定されないが、仮想アドレスの物理アドレスへの変換（例えば、仮想メモリ管理）、キャッシュ制御及びバスアービトレーションを含む。メモリデバイス２３０は、例えば、これらに限定されないが、ランダムアクセスメモリデバイス（例えば、ダイナミックランダムアクセスメモリ、スタティックランダムアクセスメモリ等）、フラッシュメモリデバイス又は他の類似のタイプのメモリデバイスとすることができる。
【００２１】
図３は、実施形態による、即時モードレンダリングシステム３００を示す図である。即時モードレンダリングシステム３００は、プロセッサ３０２と、ＣＰＵ３０４と、ＧＰＵ３０６と、を含む。ブロック図３００に示す例におけるＧＰＵ３０６は、上述したグラフィックスパイプラインの欠点を解決するために、バッチビニングモジュール３１２及びアキュムレータ３１６を含む。
【００２２】
ＣＰＵ３０４及びＧＰＵ３０６は、メモリインタフェース３２２に通信可能に接続されている。一実施形態では、ＧＰＵ３０６は、電子デバイス上で数学的に集中的なアプリケーションを迅速に処理するように設計された特殊な電子回路であるプロセッサである。ＧＰＵは、コンピュータグラフィックスアプリケーション、画像及びビデオに共通する数学的に集中的なデータ等の大規模なデータブロックの並列処理に効率的である、高度に並列な構造を有することができる。
【００２３】
メモリインタフェース３２２は、ランダムアクセスメモリ（ＲＡＭ）（図示省略）等のメインメモリ又はプライベートメモリにアクセスするために、ＣＰＵ３０４及びＧＰＵ３０６と図２のメモリ管理ユニット２２０との間のインタフェースを提供する。メモリインタフェース３２２は、例えば、アプリケーションの一部又は他の処理ロジックの実行中に、処理ロジック命令、定数値及び変数値を記憶することができる。例えば、一実施形態では、ＣＰＵ３０４上で１つ以上の動作を実行するための制御ロジックの一部は、ＣＰＵ３０４による動作の各々の部分の実行中にメモリインタフェース３２２内に常駐することができる。本明細書で使用される「処理ロジック」又は「ロジック」という用語は、制御フローコマンド、計算を実行するためのコマンド、及び、リソースへの関連アクセスのためのコマンドを指す。
【００２４】
一例では、メモリインタフェース３２２は、ＣＰＵ３０４がＧＰＵ３０６にコマンドを送信するために使用されるかＧＰＵ３０６によって直接使用されるコマンドバッファ又はメインメモリ（図示省略）からコマンドバッファへのアクセスを含むことができる。また、メモリインタフェース３２２は、プロセスリスト及びプロセス情報を含むことができる。プロセスリスト及びプロセス情報は、スケジューリング情報をＧＰＵ３０６及び／又は関連するスケジューリングハードウェアに通信するためにＣＰＵ３０４上で実行されるスケジューリングソフトウェアによって使用される。
【００２５】
ＧＰＵ３０６は、コマンドプロセッサ３０８と、プリミティブパイプライン３１０と、プリミティブバッチモジュール３１２と、スキャンコンバータ３１４と、アキュムレータ３１６と、深度及び色処理モジュール３１８と、ユニファイドシェーダシステム３２０と、を含む。コマンドプロセッサ３０８は、ＧＰＵ３０６内の処理を制御する。また、コマンドプロセッサ３０８は、実行される命令をメモリインタフェース３２２のコマンドバッファから取り出し、ＧＰＵ３０６上でのこれらの命令の実行を調整する。一例では、ＣＰＵ３０４は、（図１の）アプリケーション１１１に基づいてコマンドをメモリインタフェース３２２の適切なコマンドバッファに入力するか、コマンドをコマンドプロセッサ３０８に直接送信する。コマンドプロセッサ３０８は、ハードウェア、ファームウェア若しくはソフトウェア又はこれらの組み合わせで実装することができる。一実施形態では、コマンドプロセッサ３０８は、スケジューリングロジックを含むロジックを実施するためのマイクロコードを有するＲＩＳＣエンジンとして実装される。
【００２６】
プリミティブパイプライン３１０は、ＧＰＵ３０６による表示のために最終的にレンダリングされることになるプリミティブのシーケンスを生成する。プリミティブは、点、線、ポリゴン、又は、メッシュに編成されたプリミティブの組み合わせを含む。一般的に生成されるプリミティブは三角形である。プリミティブパイプライン３１０は、プログラムデータ及び３Ｄオブジェクトデータを使用して、ジオメトリをワールド座標空間からスクリーン空間に変換する。全てのサーフェス、ジオメトリ、テッセレーション、クリッピング、カリング、ビューポート変換及びプリミティブ設定処理が完了すると、スクリーン空間内の一連のプリミティブがラスタライズのために出力される。
【００２７】
プリミティブバッチモジュール３１２は、プリミティブパイプライン３１０からプリミティブのシーケンスを受信するように構成されている。一実施形態によれば、プリミティブバッチモジュール３１２は、プリミティブのシーケンスを受信すると、プリミティブバッチを生成するように構成されている。プリミティブバッチは、プリミティブのシーケンスのサブセットをセグメント化又はキャプチャすることによって生成される。一実施形態によれば、プリミティブバッチに含まれるプリミティブは、時間的に関連する。時間的に関連するプリミティブは、所定の閾値が満たされるまでバッチにセグメント化される。例えば、バッチフル閾値、状態記憶フル閾値、プリミティブ依存性閾値、又は、入力プリミティブが最後のプリミティブとして識別されるかどうか等の所定の条件が満たされるまで、プリミティブのシーケンスがプリミティブバッチにキャプチャされてもよい。一例では、プリミティブバッチは、所定の最大バッチ値に基づいて形成される。別の例では、折り畳みバッチビニング技術を使用することができ、この技術では、収集されたプリミティブの最大量が一定にされているが、必要に応じてプリミティブを動的に挿入したりバッチから削除することができる。一実施形態によれば、プリミティブバッチが最大容量にある場合、プリミティブの追加のシーケンスのダブルバッファリングが実行される。ダブルバッファリングは、プリミティブバッチの処理中に発生する。このようにして、処理が行われている間、プリミティブが受信され記憶され続けることができる。
【００２８】
一実施形態によれば、プリミティブバッチモジュール３１２は、プリミティブバッチがキャプチャされている間、プリミティブバッチに含まれるプリミティブに関する最初のビン切片を識別するように構成されている。レンダリングされたプリミティブを表示するスクリーンスペースは、市松模様等のいくつかの矩形ブロックに分割されてもよい。スクリーンスペースの各矩形ブロックは、ビンに関連付けられてもよい。受信したプリミティブのシーケンスは、プリミティブの位置及びサイズに基づいて１つ以上のビンと交差することができる。一実施形態によれば、プリミティブの最初のビン切片は、プリミティブが交差する最も左上のビンである。最初のビン切片が計算され、当該情報がビン毎に記憶される。リンクリスト又はスコアボード等のビン毎のプリミティブストレージは、プリミティブバッチに関する情報を記憶するために利用される。例えば、ビン毎のプリミティブストレージは、ビン毎に交差するプリミティブのリストを識別する情報を記憶することができる。別の例では、特殊なビン処理ウォーク順序を決定することができ、最初のビン切片を記憶することだけを要求することができる。
【００２９】
一実施形態によれば、プリミティブバッチモジュール３１２は、処理するためのビンを識別するように構成されている。一実施形態によれば、ビンは、プリミティブバッチに含まれるプリミティブの対応するスクリーン位置に基づいて識別することができる。例えば、スクリーンスペースの最も左上の矩形ブロック領域に関連するプリミティブを含むビンを最初に処理することができる。一実施形態によれば、プリミティブバッチモジュール３１２は、ビン毎のストレージを使用して、処理されるビンを識別するように構成されている。例えば、プリミティブバッチモジュール３１２は、最初のビン切片の全ての座標を分析することによって、何れのビンが、交差するプリミティブを含む最も左上のビンであるかを決定することができる。
【００３０】
プリミティブバッチモジュール３１２は、識別されたビンと交差するバッチの全てのプリミティブを処理するようにさらに構成されている。例えば、識別されたビンと交差するプリミティブ毎に、当該ビン内に位置するプリミティブの部分は、プリミティブバッチモジュール３１２によって処理される。次に、プリミティブの処理された部分は、ラスタライズのためにスキャンコンバータ３１４に渡される。次いで、プリミティブバッチモジュール３１２は、処理されたプリミティブに対して次のビン切片を識別するようにさらに構成されている。一実施形態によれば、次のビン切片は、処理されたプリミティブが交差する次の最も左上のビンである。次のビン切片に関する情報は、ビン毎のストレージ領域に記憶されてもよい。
【００３１】
プリミティブがプリミティブバッチモジュール３１２によって受信されると、到着識別子が各プリミティブに割り当てられる。到着順序は、識別されたビンのプリミティブが処理される順序を決定する。したがって、プリミティブバッチモジュール３１２が、特定のビンについて複数の交差するプリミティブを識別した場合、当該ビン内に含まれるプリミティブは、割り当てられた到着識別子を使用して、到着に基づく順序で処理される。一実施形態によれば、プリミティブバッチモジュール３１２は、プリミティブバッチの全てのプリミティブが完全に処理されるまで、プリミティブを含む連続するビンの各々に対して全てのプリミティブを繰り返し処理するように構成されている。
【００３２】
一例では、スキャンコンバータ３１４は、渡されたプリミティブ及びビンのエッジの内側に何れのピクセルがあるかを決定するために使用される、プリミティブ及びビン位置データをプリミティブバッチモジュール３１２から受信する。深度及び色処理モジュール３１８は、結果として生じるピクセルをアキュムレータ３１６に渡す前に、各ピクセル又はフラグメントに対して複数の深度テスト動作を実行して、以前にレンダリングされたオブジェクトの背後にあると判別し得る隠れたフラグメントを日和見的に除去することができる。次に、残ったピクセル又はフラグメントの情報がアキュムレータ３１６に渡される。一実施形態では、遅延シェーディング処理動作を有効にすることができる。遅延シェーディング動作が有効な場合、ピクセルシェーディングは、識別されたビンの完全なピクセルセットを受信するまで遅延する。アキュムレータ３１６は、スキャンコンバータ３１４から受信したデータに基づいて、ビン内の各フラグメントのソースピクセルｘ、ｙ、ｚ座標位置を使用して、何をシェーディングする必要があるかを判別する。また、ソース位置及びｚ座標は、所定のＸ、Ｙスクリーン位置に対して以前に受信されたフラグメントが到着フラグメントよりも眼から遠いかどうかを判別するために、アキュムレータ３１６によって使用される。
【００３３】
次に、アキュムレータ３１６は、ビン内の寄与フラグメント及び非寄与フラグメントを決定するように構成されている。深度及び色処理モジュール３１８によって実行される深度テストは、プリミティブの特定の部分を除去してもよいし、最終的な色又は深度テストには考慮しなくてもよい。アキュムレータ３１６は、最終的な色又は深度に寄与しないフラグメントをさらに識別し、これらのフラグメントを破棄するように構成されている。このようにして、アキュムレータ３１６は、何れのフラグメントがシェーディングされるかを決定するために、フィルタリング動作を実行する。例えば、所定のスクリーンＸ、Ｙについて、フラグメントが不透明（すなわち、半透明ではない）であり且つ以前に受信されたフラグメントよりも眼に近いと判断された場合、当該以前のフラグメントは、最終的な色に寄与しないため破棄される。別の実施形態では、プリミティブのシーケンス内で後に到着するピクセル又はフラグメントが、初期の日和見的な階層Ｚ深度テストに合格したが、同じビンの同じスクリーンＸＹに対して以前に処理された不透明ピクセルよりも眼から遠いとソースＺを使用して判別された場合、到着フラグメントを、アキュムレータ３１６によるピクセルシェーディングの前に破棄することができる。したがって、実施形態は、必要とされるピクセルシェーディング動作の数を減らす遅延バッチビニング処理メカニズムを生成する。
【００３４】
アキュムレータ３１６がビンに対してフィルタリング動作を完了すると、アキュムレータ３１６は、ビンの全てのピクセルについて残りのピクセル（つまり、寄与フラグメント）を、ユニファイドシェーダシステムに含まれるベクトル単位の幅のグループに編成し、次に、シェーディング動作を完了するために、当該グループをユニファイドシェーダシステム３２０に送信する。
【００３５】
一例では、ユニファイドシェーダシステム３２０は、各グループのフラグメントを特定のシェーダプログラムと関連付ける。ユニファイドシェーダシステム３２０は、いくつかの異なるタイプのシェーダプログラムを実行することができる処理要素の配列を含むことができる。ユニファイドシェーダシステム３２０は、例えば、頂点シェーダ、ジオメトリシェーダ及びピクセルシェーダを実行することができ、ピクセルシェーダは、アキュムレータ３１６によってアセンブルされ入力されたピクセルのグループに対してユーザ提供プログラムを実行することができる。ユニファイドシェーダシステム３２０は、通常のグラフィックス処理タスク（例えば、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ等）に加えて、一般的な計算動作（例えば、数学的アルゴリズム、物理シミュレーション等）を実行することができる。
【００３６】
当業者であれば、実施形態が単一の即時モードレンダリングシステムに言及して説明されているが、実施形態が複数の即時モードレンダリングシステムを含むように拡張可能であることを理解するであろう。
【００３７】
図４Ａ〜図４Ｉは、実施形態による、即時モードレンダリングシステムにおける遅延バッチビニングの一例を示す図である。図４Ａは、複数の矩形領域又はビン４０４Ａ〜４０４Ｐに分割されたスクリーンスペース領域４０２を示している。当業者であれば、図４Ａに示す区分が非限定的な例に過ぎず、他の区分も考えられ、開示された実施形態の範囲内で利用できることを理解するであろう。
【００３８】
図４Ｂは、第１プリミティブ４０６の受信を示している。第１プリミティブ４０６に関する最初のビン切片が計算される。この例では、第１プリミティブ４０６の最初のビン切片はビン４０４Ａである。換言すると、ビン４０４Ａは、第１プリミティブ４０６が交差する最も左上のビンである。当業者であれば、最初のビン切片を決定するための他の技術を本開示と矛盾なく利用できることを理解するであろう。しかしながら、本明細書で説明する目的のために、最も左上のビン切片は、プリミティブによって区切られた最も上のビンの行を最初に決定し、次に、当該行内のプリミティブによって区切られた最も左のビンを決定することによって、計算される。この構成は、他の方向及び処理順序に容易に適応可能である。
【００３９】
図４Ｃは、第２プリミティブ４０８の受信を示している。図４Ｂの第１プリミティブ４０６と同様に、第２プリミティブ４０８の最初のビン切片が計算される。この例では、第２プリミティブ４０８の第１ビン切片は、（４０４Ｇではなく）ビン４０４Ｄである。なぜなら、ビン４０４Ｄは、プリミティブによって区切られた最も上のビン行にあり、当該行内においてプリミティブによって区切られた最も左のビン（実際には、唯一のビン）であるからである。
【００４０】
図４Ｄは、第３プリミティブ４１０の受信を示している。図４Ｂの第１プリミティブ４０６及び図４Ｃの第２プリミティブ４０８と同様に、第３プリミティブ４１０の最初のビン切片が計算される。この例では、第３プリミティブ４１０の最初のビン切片は、ビン４０４Ｆである。
【００４１】
図４Ｅは、第１プリミティブ４０６、第２プリミティブ４０８及び第３プリミティブ４１０を含むプリミティブバッチの生成を示している。上述したように、プリミティブバッチは、所定の閾値に基づくプリミティブ（例えば、メモリの制約に基づいて処理可能ないくつかのプリミティブ等）を含むことができる。また、後続の受信プリミティブ（図示省略）が第１プリミティブ４０６、第２プリミティブ４０８及び第３プリミティブ４１０のうち少なくとも１つの処理に依存しているという判別に基づいて、受信プリミティブのセットを使用してバッチを生成することができる。このような依存性は、後続の受信プリミティブの最終的なシェーディングに影響を与える可能性がある。このようなシナリオでは、プリミティブバッチは、後続の受信プリミティブを含まないであろう。むしろ、後続の受信プリミティブに対して新たなプリミティブバッチが生成され、新たなプリミティブバッチは、現在のバッチが処理されて依存性が解決されると処理することができる。新たなプリミティブバッチは、後で処理される。図４Ｅに戻ると、プリミティブバッチが完了すると、プリミティブの処理が開始する。この例では、プリミティブの処理は、ビン４０４Ａから開始して、ビン毎に行われる。ビン４０４Ａでは、ビン４０４Ａと交差する第１プリミティブ４０６の部分が処理され、ラスタライズのために送信される。第１プリミティブ４０６の部分が処理されている間に、第１プリミティブ４０６の次のビン切片が計算される。この例では、第１プリミティブ４０６の次のビン切片は、ビン４０４Ｂである。最初のビン切片の計算と同様に、次のビン切片は、プリミティブが交差する次の最も左上のビンである。
【００４２】
図４Ｆは、プリミティブバッチ内のプリミティブのさらなる処理を示している。図示するように、処理は、規則的な方法（すなわち、ウォーク順）で、プリミティブ交差を有する次のビンに移動する。この例では、ビンの各列について、ビンのウォーク順が左から右へと実行される。しかしながら、実施形態は、この順序スキームに限定されない。一実施形態によれば、ウォーク順及び処理のための次のビンは、動的であってもよい。識別されたウォーク順が維持される限り、ウォーク順の向きは、複数の開始方向及び開始位置を含むことができる。
【００４３】
図４Ｆでは、ビン４０４Ｂが処理のために識別され、ビン４０４Ｂと交差する第１プリミティブ４０６の部分が処理されてラスタライズのために送信される。第１プリミティブ４０６の次のビン切片がビン４０４Ｅとして決定され、ビン４０４Ｅは、プリミティブ４０６が交差する次に最も左上のビンである。
【００４４】
図４Ｇは、プリミティブ交差を有する次のビンが処理されることを示している。ビン４０４Ｃは、交差するプリミティブを有していないのでスキップされ、ビン４０４Ｄと交差するプリミティブが処理される。この例では、ビン４０４Ｄと交差する第２プリミティブ４０８の部分が処理され、ラスタライズのために送信される。同時に、第２プリミティブ４０８の次のビン切片がビン４０４Ｇとして計算される。
【００４５】
図４Ｈは、第１プリミティブ４０６の次のビン切片がビン４０４Ｆとして計算される間に、ビン４０４Ｅと交差する第１プリミティブ４０６の部分が処理されるので、前の図と同様の処理を示している。
【００４６】
図４Ｉは、ビン４０４Ｆと交差するプリミティブの処理を示している。図示したように、複数のプリミティブ（すなわち、第１プリミティブ４０６及び第３プリミティブ４１０）は、ビン４０４Ｆと交差する。上述したように、各プリミティブには、プリミティブの処理シーケンスを維持するために到着識別子が割り当てられている。したがって、この例では、第１プリミティブ４０６が最初に処理され、続いて第３プリミティブ４１０が処理される。ビン４０４Ｆと交差する第１プリミティブ４０６の部分が処理されてラスタライズのために送信され、第１プリミティブ４０６の次のビン切片がビン４０４Ｉとして計算される。その後、ビン４０４Ｆと交差する第３プリミティブ４１０の部分が処理されてラスタライズのために送信され、第３プリミティブ４１０の次のビン切片がビン４０４Ｇとして計算される。
【００４７】
図４Ｉは、重複する部分を含むプリミティブを示していることに留意することが重要である。従来の即時モードレンダリングシステムでは、ビン４０４Ｆ内に位置し、第１プリミティブ４０６に関連するピクセルは、ビン４０４Ｆ内の第３プリミティブ４１０の部分によって当該ピクセルが完全に覆われ／隠されていても、シェーディングされる。これは、従来の即時モードレンダリングシステムでは、第１プリミティブ４０６のレンダリング時に、第３プリミティブ４１０のピクセルが分からないためである。実施形態では、（ＨｉＺ及び／又はアーリーＺテストで）識別されたビンについてプリミティブバッチの各プリミティブの全てのピクセルがラスタライズされるまで、ビン内のピクセルのシェーディングを延期することができる。実施形態では、ピクセルは所定のピクセルスクリーン位置に蓄積され、テスト及び比較を通じて、何れのピクセルが最終的な色又は深度に寄与しているかを決定することができる。そして、寄与するピクセルのみがシェーディングされる。したがって、不要なシェーディング動作が実行されない。
【００４８】
図５は、例示的な実施形態による、遅延プリミティブバッチビニングの処理を示すフロー図である。
【００４９】
ステップ５０２では、プリミティブのシーケンスからプリミティブバッチを生成することができる。例えば、プリミティブバッチを、ＧＰＵ３０６のプリミティブバッチモジュール３１２によって生成することができる。生成されたプリミティブバッチは、プリミティブのシーケンスのサブセットを含む。プリミティブバッチに含まれるプリミティブは、時間的に関連する。時間的に関連するプリミティブは、所定の閾値が満たされるまでバッチにセグメント化される。例えば、バッチフル閾値、状態記憶フル閾値、入力プリミティブが最後のプリミティブとして識別されるかどうか、又は、プリミティブ依存性閾値等の所定の条件が満たされるまで、プリミティブのシーケンスをプリミティブバッチにキャプチャしてもよい。
【００５０】
ステップ５０４では、プリミティブバッチに含まれるプリミティブについて最初のビン切片が識別される。例えば、最初のビン切片は、ＧＰＵ３０６のバッチビニングモジュール３１２によって識別されてもよい。ビンは、スクリーンスペースの矩形の境界領域に対応する。スクリーンスペースは、複数の矩形ブロックに分割されてもよい。したがって、所定のスクリーンスペースに対して複数のビンが存在し得る。一実施形態によれば、ビンの数は、矩形の境界領域の数に対応してもよい。プリミティブバッチに含まれるプリミティブは、１つ以上のビンと交差する場合がある。プリミティブの最初のビン切片は、プリミティブが交差する最も左上のビンである。プリミティブバッチの全てのプリミティブに対して最初のビン切片が計算され、当該情報がビン毎に記憶される。
【００５１】
ステップ５０６では、処理のためのビンが識別される。例えば、処理のためのビンは、ＧＰＵ３０６のバッチビニングモジュール３１２によって識別されてもよい。ビンの処理順序は、予め決めておくことができる。例えば、ビンの処理順序は、スクリーンスペース領域内のビンの左から右への横断に基づくことができる。したがって、このようなシナリオでは、最も左上のビンが最初に処理され、次に、右に隣接する次のビンが処理される。ステップ５０４で識別された最初のビン切片情報は、処理されるビンを決定する際に使用され得る。最初のビン切片に基づいて、プリミティブを含む最も左上のビンが処理されるビンとして識別される。
【００５２】
ステップ５０８では、識別されたビンを区切るプリミティブが処理される。例えば、識別されたビンと交差するプリミティブは、ＧＰＵ３０６のバッチビニングモジュール３１２によって処理される。識別されたビンと交差するプリミティブ毎に、当該ビン内に位置するプリミティブの部分が処理される。次に、プリミティブの処理された部分は、ラスタライズのために転送される。複数のプリミティブが特定のビンと交差する場合、識別されたビンの全てのプリミティブが後続のビンに移動する前に処理されるので、複数のプリミティブを１つのビンの間に処理することができる。
【００５３】
ステップ５１０では、処理されたプリミティブについて次のビン切片が識別される。例えば、ステップ５１０は、ＧＰＵ３０６のバッチビニングモジュール３１２によって実行されてもよい。一実施形態によれば、次のビン切片は、処理されたプリミティブが交差する次の最も左上のビンである。次のビン切片に関する情報をさらに記憶してもよい。
【００５４】
図６は、例示的な実施形態による、遅延シェーディング処理を示すフロー図である。
【００５５】
ステップ６０２では、各プリミティブに関連するピクセルシェーディングは、識別されたビンに対する完全なピクセルセットを受信するまで遅延する。例えば、ピクセルのシェーディングは、処理ユニット２１０のアキュムレータ２１６によって遅延されてもよい。実施形態によれば、遅延シェーディング動作が有効になると、ピクセルのシェーディングが遅延する。遅延シェーディング動作は、プリミティブに関連するピクセルのシェーディングを停止するコマンドである。
【００５６】
ステップ６０４では、識別されたビンに関連する寄与フラグメント及び非寄与フラグメントが決定される。例えば、ステップ６０４は、処理ユニット２１０のアキュムレータ２１６によって実行されてもよい。プリミティブは、「ピクセルフラグメント」にラスタライズされる。その後、フラグメントをシェーディングして、ディスプレイの各ピクセルでの最終的な混合に使用される色を計算する。識別されたビン内のフラグメントは重複する可能性がある。このような重複は、これらのフラグメントが完全に隠れているかフラグメントであるために、特定のフラグメントが最終的な色又は深度に寄与していないことをもたらし得る。このようなフラグメントが、非寄与フラグメントであると決定される。透明なフラグメントは特殊な処理を必要とし、所定のビンに対してスクリーンＸ、Ｙ毎に２つ以上のピクセルをシェーディングする必要があり得る。当業者は、複数の透明なピクセルと、１つの不透明なバッキングプリミティブと、をシェーディングする必要性を理解するであろう。一方、最終的なピクセルの色又は深度を考慮に入れるフラグメントは、寄与フラグメントと決定される。
【００５７】
ステップ６０６では、非寄与フラグメントが破棄される。非寄与フラグメントは、処理ユニット２１０のアキュムレータ２１６によって破棄されてもよい。非寄与フラグメントは、シェーディング動作を実行する前に破棄される。フラグメントが寄与していないと判別された場合、このようなピクセルに対してシェーディング動作を実行する必要がなく、帯域幅及びＡＬＵ機能の非効率的な使用になるので、当該フラグメントが破棄される。このようにして、実施形態は、必要とされるピクセルシェーディング動作の数を低減する。
【００５８】
ステップ６０８では、識別されたビンの寄与フラグメントがシェーディングされる。
【００５９】
実施形態は、例えば、汎用プログラミング言語（Ｃ又はＣ＋＋等）、Ｖｅｒｉｌｏｇ  ＨＤＬ、ＶＨＤＬ、Ａｌｔｅｒａ  ＨＤＬ（ＡＨＤＬ）等を含むハードウェア記述言語（ＨＤＬ）、ＧＰＵへの前処理として実行するプログラム可能シェーダ、又は、他の利用可能なプログラミング及び／若しくは回路図キャプチャツール（回路キャプチャツール等）を使用することによって、達成することができる。プログラムコードは、半導体、磁気ディスク、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ等）を含む任意の周知のコンピュータ可読媒体に配置することができる。このように、コードを、インターネットを含む通信ネットワークを介して送信することができる。上述したシステム及び技術によって達成される機能及び／又は提供される構造は、プログラムコードで具現化され、集積回路の製造の一部としてハードウェアに変換することができるコア（ＣＰＵコア及び／又はＧＰＵコア等）で表すことができることを理解されたい。
【００６０】
実施形態では、制御ロジック（ソフトウェア）が内部に記憶された有形のコンピュータ使用可能媒体又はコンピュータ可読媒体を含む有形の装置又は製品は、本明細書ではコンピュータプログラム製品又はプログラム記憶デバイスとも呼ばれる。これには、限定されないが、上述した即時モードレンダリングシステム３００及びメモリインタフェース３２２と、上述した任意の組み合わせを具現化する有形の製造品とが含まれる。このような制御ロジックは、（即時モードレンダリングシステム３００等の）１つ以上のデータ処理デバイスによって実行されると、このようなデータ処理デバイスを本明細書で説明するように動作させる。
【００６１】
本文書では、「コンピュータプログラム媒体」及び「コンピュータ使用可能媒体」という用語は、概して、リムーバブル記憶装置又はハードディスクドライブ等の媒体を指すのに使用される。コンピュータプログラム媒体及びコンピュータ使用可能媒体は、メモリ半導体（例えば、ＤＲＡＭ等）とすることができ、システムメモリ及びグラフィックスメモリ等のメモリを指すこともできる。これらのコンピュータプログラム製品は、ＡＰＤにソフトウェアを提供するための手段である。
【００６２】
図７は、一実施形態による、即時モードレンダリングシステムにおけるバッチビニング及びソートの一例を示す図である。図７は、複数の矩形領域又はビン７０４Ａ〜７０４Ｐ（Ｂ０〜Ｂ１５とも示されている）に分割されたスクリーンスペース領域７０２を示している。当業者であれば、図７に示す区分は非限定的な例であり、他の区分も考えられ、開示された実施形態の範囲内で利用できることを理解するであろう。セクタは、行（Ｒ０，Ｒ１，Ｒ２，Ｒ３）及び列（Ｃ０，Ｃ１，Ｃ２，Ｃ３）に分割することができる。
【００６３】
プリミティブ（「Ｔ１」，「Ｔ２」，「Ｔ３」と示されている）は、スクリーンスペース領域７０２のセクタ内に示されている。例示目的で、プリミティブＴ１は、交差ビンＢ０，Ｂ１，Ｂ２，Ｂ５，Ｂ６として示されている。任意の数のプリミティブがスクリーンスペース領域７０２を占有し、より多くの又はより少ないビンと交差し得ることを理解されたい。また、図７に示すように、プリミティブＴ１は、行Ｒ０，Ｒ１及び列Ｃ０，Ｃ１，Ｃ２にのみ存在するビンと交差する。したがって、行Ｒ２，Ｒ３及び／又は列Ｃ３のビンは、プリミティブＴ１の処理のために考慮される必要はない。プリミティブＴ２は、行Ｒ１，Ｒ２及び列Ｃ２，Ｃ３にのみ存在するビンと交差するように示されている。プリミティブＴ３は、行Ｒ０，Ｒ１及び列Ｃ２，Ｃ３に存在するビンのみと交差するように示されている。さらに、例示目的で３つのプリミティブのみが示されているが、スクリーンスペース領域７０２を占有することができるプリミティブの数はいくつであってもよいことに留意されたい。
【００６４】
バッチビニングモードでは、プリミティブが処理される順序は次の通りである。Ｔ１−Ｂ０、Ｔ１−Ｂ１、Ｔ１−Ｂ２、Ｔ３−Ｂ２、Ｔ３−Ｂ３、Ｔ１−Ｂ５、Ｔ１−Ｂ６、Ｔ２−Ｂ６、Ｔ３−Ｂ６、Ｔ２−Ｂ７、Ｔ３−Ｂ７、Ｔ２−Ｂ１０、Ｔ２−Ｂ１１。したがって、複数のプリミティブが所定のビン（ビンＢ２，Ｂ６，Ｂ７の場合等）を区切るときはいつでも、これら全てのプリミティブセクションが連続して処理され、キャッシュ利用率及びメモリ効率が向上する。即時モードレンダリングでは、処理順序は、Ｔ１（これが区切る全てのビン）、Ｔ２、Ｔ３である。処理がビンＢ２，Ｂ６，Ｂ７に複数回戻るので、このラスタライズ順はメモリの非効率性を引き起こす。
【００６５】
図８は、一実施形態による、バッチビニング及びソートを実行するシステム８００の例示的な概略図である。システム８００は、Ｖスパンソータ８２０に動作可能に接続されたＶスパンラスタライザ８１０を含み、Ｖスパンソータ８２０は、Ｈスパンラスタライザ８３０に動作可能に接続されている。Ｈスパンラスタライザ８３０は、Ｈスパンソータ８４０に動作可能に接続されている。Ｖスパンラスタライザ８１０、Ｖスパンソータ８２０、Ｈスパンラスタライザ８３０及びＨスパンソータ８４０の例示的な動作については、以下の図９に示す例示的な方法のコンテキストで説明される。
【００６６】
図９Ａ〜図９Ｂは、一実施形態による、バッチビニング及びソートを実行する例示的な方法９００Ａ／９００Ｂのフロー図である。ステップ９１０〜９５０は、Ｖスパンラスタライザ８１０及びＶスパンソータ８２０によって実行される。ステップ９６０〜９９０は、Ｈスパンラスタライザ８３０及びＨスパンソータ８４０によって実行される。ステップ９１０において、方法は、（例えば、プリミティブパイプライン３１０から）プリミティブを受信し、当該プリミティブが区切る行によってプリミティブを記憶する（すなわち、Ｖスパンラスタライザ８１０が、プリミティブが区切る行を計算して行ソータ（例えば、Ｖスパンソータ８２０）に記憶する）ことによって開始する。例えば、図７に戻ると、プリミティブＴ１は、ビンＢ０，Ｂ１，Ｂ２，Ｂ５，Ｂ６を区切り、これらは行Ｒ０，Ｒ１にのみ位置する。したがって、Ｒ０は、プリミティブＴ１が区切る最小（min）行であり、Ｒ１は、プリミティブＴ１が区切る最大（max）行である。プリミティブＴ２は、ビンＢ６，Ｂ７，Ｂ１０，Ｂ１１（行Ｒ１，Ｒ２にのみ位置する）を区切るので、Ｒ１は、プリミティブＴ２が区切る最小行であり、Ｒ２は、プリミティブＴ２が区切る最大行である。プリミティブＴ３は、ビンＢ２，Ｂ３，Ｂ６，Ｂ７（行Ｒ０，Ｒ１にのみ位置する）を区切るので、Ｒ０は、プリミティブＴ３が区切る最小行であり、Ｒ１は、プリミティブＴ３が区切る最大行である。これらの最小行及び最大行は、Ｖスパンソータ８２０に記憶される。情報は、１６のプリミティブ幅（例えば、１６の最小行ＩＤ及び最大行ＩＤ）のメモリに記憶され、プリミティブの行毎にプリミティブのグループサイズで符号化される。符号化は、プリミティブのセットが接触する行の最小値の中の最小値及び最大値の中の最大値（例えば、Ｒ０（Ｔ１の最小値）及びＲ２（Ｔ２の最大値））、及び／又は、行のマスク（例えば、階層的マスク）の形態であってもよい。すなわち、全てのプリミティブによって区切られる行（例えば、Ｔ１，Ｔ２，Ｔ３の場合にはＲ０，Ｒ１，Ｒ２）、又は、プリミティブのグループによって区切られる行（例えば、プリミティブＴ１，Ｔ３の場合にはＲ０，Ｒ１）を表す行マスクを記憶することができる。
【００６７】
バッチ中断条件（すなわち、Ｔ１，Ｔ２，Ｔ３等のプリミティブのバッチの処理を終了させる条件）が満たされない場合（ステップ９２０）、方法は、ステップ９１０に戻る。例えば、バッチ中断条件は、プリミティブを記憶するのに十分なスペースがメモリにない場合、バッチをフラッシュする（すなわち、処理をコミットする）イベントがドライバによって処理に挿入された場合、又は、十分な状態コンテキストがない場合に発生する。状態コンテキストは、例えば、ピクセルシェーダのエクスポート数、頂点シェーダのパラメータの数、アンチエイリアシングモードが有効かどうか、ピクセル当たりのサンプル数、レンダリングターゲットの数等のように、描画に関連する全てのレジスタデータを含む。しかしながら、ステップ９２０でバッチ中断条件が満たされると、ステップ９４０でさらに処理するために、プリミティブを含む各行が送信される（ステップ９３０）。すなわち、Ｖスパンラスタライザ８１０は、ステップ９３０においてプリミティブを含む各行を方法９００Ａの次のステップ（すなわち、ステップ９４０）に送信することによって、ステップ９２０においてバッチ中断条件を満たす場合に当該次のステップにおいて各行がプリミティブを含むと考慮することによって、方法９００Ａを実行し続ける。
【００６８】
ステップ９４０では、ステップ９３０において送信された行からの全てのプリミティブが、ステップ９６０におけるさらなる処理のために送信される。すなわち、Ｖスパンラスタライザ８１０及びＶスパンソータ８２０は、ステップ９３０でのさらなる処理のために送信された行からの全てのプリミティブを、ステップ９６０でのさらなる処理のためにＨスパンラスタライザ８３０及びＨスパンソータ８４０に送信することによって、方法９００Ａを実行し続ける。方法は、この時点で複数の方向に進む。例えば、方法はステップ９５０に進み、ここでは、例えば、スクリーンスペース領域７０２からの全ての行（すなわち、Ｒ０，Ｒ１，Ｒ２，Ｒ３）が処理されたかどうかが判別される。すなわち、ステップ９４０でさらに処理するために、ステップ９３０でプリミティブを含む全ての行が送信されたかどうかが判別される。これらが送信されていない場合、方法は、ステップ９３０に戻り、ステップ９４０でのさらなる処理のために、未だ送信されていないプリミティブを含む追加の行を送信する。送信されている場合、方法は、ステップ９１０に戻る。また、ステップ９４０で現在の行からの全てのプリミティブがさらなる処理のためにステップ９６０に送信されると、これらのプリミティブが（例えば、Ｈスパンラスタライザ８３０によって）受信され、（例えば、Ｈスパンソータ８４０によって）記憶され、これらのプリミティブが区切る列が計算され記憶される（ステップ９６０）。次に、プリミティブを含むように計算された各列は、ステップ９８０におけるさらなる処理のために送信される（ステップ９７０）。すなわち、Ｈスパンラスタライザ８３０は、ステップ９７０においてプリミティブを含む各列を方法９００Ｂの次のステップ（すなわち、ステップ９８０）に送信することによって、当該次のステップにおいて各列がプリミティブを含むと考慮することによって、方法９００Ｂを実行し続ける。例えば、図７に戻ると、プリミティブＴ１が列Ｃ０を区切るので、当該列が送信される。ステップ９８０では、さらなる処理のためにステップ９７０で送信された列からの全てのプリミティブが、ステップ９９５におけるラスタライズのためにＨスパンラスタライザ８３０及びＨスパンソータ８４０によって送信される。このステップの後（すなわち、ステップ９８０）、例えば、スクリーンスペース領域７０２からの全ての列（すなわち、Ｃ０，Ｃ１，Ｃ２，Ｃ３）が処理されたかどうかが判別される（ステップ９９０）。すなわち、ステップ９９５でさらに処理するために、ステップ９８０でプリミティブを含む全ての列が送信されたかどうかが判別される。送信されている場合、方法は、ステップ９６０に戻る。送信されていない場合、方法は、ステップ９７０に戻り、ステップ９８０でのさらなる処理のために、未だ送信されていないプリミティブを含む追加の列を送信する。ステップ９９５では、（例えば、レンダリングのための境界領域を設定するための）シザー矩形が、現在の行及び列（例えば、ビンＸ、Ｙ）に従って設定され、サブピクセル精度を有するラスタライザ（例えば、スキャンコンバータ３１４）によってラスタライズが実行される。
【００６９】
したがって、図７の例では、方法９００（すなわち、９００Ａ及び９００Ｂ）は、（例えば、Ｖスパンラスタライザ８１０を使用して）プリミティブについて行Ｒ０を調査し、次に、（例えば、Ｈスパンラスタライザ８３０を使用して）列Ｃ０，Ｃ１，Ｃ２，Ｃ３を調査することを含む。行Ｒ０の全ての列をクエリした後、方法は、戻って行Ｒ１をクエリし、次に、行Ｒ１の全ての列をクエリする。しかしながら、行及び列の最小値及び最大値の情報が分かっているため、プリミティブが交差していないことが分かっている行及び列のクエリは無視されることに留意されたい。したがって、さらなる行が処理される前に、Ｒ０を区切るバッチの全てのプリミティブが処理され、Ｖスパンラスタライザ８１０に送信される。図７に示す例を再度使用すると、行Ｒ１が処理される前に、プリミティブＴ１，Ｔ３がＶスパンラスタライザ８１０に送信される。
【００７０】
本開示に含まれる教示に基づいて、図面に示されたもの以外のデータ処理デバイス、コンピュータシステム及び／又はコンピュータアーキテクチャを使用して実施形態を製造及び使用する方法が当業者には明らかであろう。特に、実施形態は、本明細書に記載されたもの以外のソフトウェア、ハードウェア及び／又はオペレーティングシステムの実装で動作することができる。
【００７１】
（結論）
概要及び要約（もしあれば）ではなく、詳細な説明は、特許請求の範囲を解釈するために使用されていることを意図していると理解されたい。概要及び要約（もしあれば）は、発明者によって想定された１つ以上ではあるが全てではない例示的な実施形態を記載することができ、このため、本発明又は添付の特許請求の範囲を如何なる意味においても限定する意図はない。
【００７２】
本明細書では例示的な分野及び用途についての例示的な実施形態を参照しながら本発明を説明してきたが、本発明はこれらに限定されないことを理解されたい。他の実施形態及びこれらに対する修正が可能であり、これらは本発明の範囲及び趣旨の範囲内である。例えば、本段落の一般性を制限することなく、実施形態は、図面に示される及び／又は本明細書に記載されたソフトウェア、ハードウェア、ファームウェア及び／又はエンティティに限定されない。さらに、実施形態（本明細書に明示的に記載されているかどうかに関わらず）は、本明細書に記載されている例以外の分野及び用途に対して著しい有用性を有する。
【００７３】
本明細書では、特定の機能の実装及びこれらの関係を示す機能ビルディングブロックを用いて実施形態を説明した。これらの機能ビルディングブロックの境界は、説明の便宜上、本明細書では任意に定義されている。特定の機能及び関係（又は、これらの均等物）が適切に実行される限り、代替の境界を定義することができる。また、代替の実施形態は、本明細書に記載されたものとは異なる順序を使用して機能ブロック、ステップ、動作、方法等を実行してもよい。
【００７４】
本明細書における「１つの実施形態」、「一実施形態」、「例示的な実施形態」又は類似の表現への言及は、記載された実施形態が特定の特徴、構造又は特性を含むことができることを示しているが、全ての実施形態が必ずしも特定の特徴、構造又は特性を含まなくてもよい。さらに、このような表現は、必ずしも同じ実施形態を指しているわけではない。さらにまた、特定の特徴、構造又は特性が実施形態に関連して説明される場合、このような特徴、構造又は特性を他の実施形態に組み込むかどうかは、本明細書で明示的に言及又は説明しているかどうかに関わらず、当業者の知識の範囲内であろう。
【００７５】
本発明の広さ及び範囲は、上記の例示的な実施形態の何れによっても限定されるべきではなく、以下の特許請求の範囲及びこれらの均等物に従ってのみ定義されるべきである。
【図１】
2019530070.tif 000003
【図２】
2019530070.tif 000004
【図３】
2019530070.tif 000005
【図４Ａ】
2019530070.tif 000006
【図４Ｂ】
2019530070.tif 000007
【図４Ｃ】
2019530070.tif 000008
【図４Ｄ】
2019530070.tif 000009
【図４Ｅ】
2019530070.tif 000010
【図４Ｆ】
2019530070.tif 000011
【図４Ｇ】
2019530070.tif 000012
【図４Ｈ】
2019530070.tif 000013
【図４Ｉ】
2019530070.tif 000014
【図５】
2019530070.tif 000015
【図６】
2019530070.tif 000016
【図７】
2019530070.tif 000017
【図８】
2019530070.tif 000018
【図９Ａ】
2019530070.tif 000019
【図９Ｂ】
2019530070.tif 000020
【国際調査報告】
2019530070.tif 000021
2019530070.tif 000022
2019530070.tif 000023