(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-07-05
(45)【発行日】2022-07-13
(54)【発明の名称】優先プリミティブバッチのビニング及びソートを用いたハイブリッドレンダリング
(51)【国際特許分類】
G06T 15/00 20110101AFI20220706BHJP
【FI】
G06T15/00 501
(21)【出願番号】P 2019511883
(86)(22)【出願日】2017-08-25
(86)【国際出願番号】 US2017048762
(87)【国際公開番号】W WO2018044738
(87)【国際公開日】2018-03-08
【審査請求日】2020-08-25
(32)【優先日】2016-08-29
(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)【参考文献】
【文献】国際公開第01/037220(WO,A1)
【文献】特表2003-515798(JP,A)
【文献】特表2008-520021(JP,A)
【文献】米国特許出願公開第2015/0325037(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06T 15/00
(57)【特許請求の範囲】
【請求項1】
複数の行及び複数の列を有する表示領域をラスタライズする方法であって、
各プリミティブが前記複数の行のうち何れの行と交差するかに基づいて、シーケンスのプリミティブを異なる行グループに蓄積することによって、1つ以上のプリミティブのシーケンスからプリミティブバッチを生成することと、
各行グループを順に処理することと、を含み、
各行グループを処理することは、
行グループ内の1つ以上のプリミティブ毎に1つ以上のプリミティブ列交差を識別することであって、プリミティブ列交差及び行の異なる組み合わせの各々は、異なるビンを識別する、ことと、
プリミティブを含むビン毎に、ビンの領域に対応するラスタライズ用の表示境界領域を設定することと、
表示境界を使用して、ビンと交差するプリミティブをラスタライズすることと、を含む、
方法。
【請求項2】
前記1つ以上のプリミティブによって区切られた最小行と、前記1つ以上のプリミティブによって区切られた最大行と、を決定することをさらに含む、
請求項1の方法。
【請求項3】
新たなプリミティブを前記プリミティブバッチに挿入する前に、バッチ中断条件が存在するかどうかを判別することをさらに含む、
請求項1の方法。
【請求項4】
前記バッチ中断条件は、プリミティブを記憶するのに十分なスペースがメモリにないこと、前記プリミティブバッチをフラッシュするイベントが発行されたこと、又は、十分な状態コンテキストがないこと、のうち何れかを含む、
請求項3の方法。
【請求項5】
前記複数の行の各々において前記複数の列のうち何れが少なくとも1つのプリミティブを含むかを示すマスクを記憶することをさらに含む、
請求項1の方法。
【請求項6】
プロセッサによって実行されると、
複数の行及び複数の列を有する表示領域をラスタライズする動作を前記プロセッサ
に行わせる命令を記憶するコンピュータ可読記憶媒体であって、
前記動作は、
各プリミティブが複数の行のうち何れの行と交差するかに基づいて、シーケンスのプリミティブを異なる行グループに蓄積することによって、1つ以上のプリミティブのシーケンスからプリミティブバッチを生成することと、
各行グループを順に処理することと、を含み、
各行グループを処理することは、
行グループ内の1つ以上のプリミティブ毎に1つ以上のプリミティブ列交差を識別することであって、プリミティブ列交差及び行の異なる組み合わせの各々は、異なるビンを識別する、ことと、
プリミティブを含むビン毎に、ビンの領域に対応するラスタライズ用の表示境界領域を設定することと、
表示境界を使用して、ビンと交差するプリミティブをラスタライズすることと、を含む、
コンピュータ可読記憶媒体。
【請求項7】
前記1つ以上のプリミティブによって区切られた最小行と、前記1つ以上のプリミティブによって区切られた最大行と、を決定することをさらに含む、
請求項6のコンピュータ可読記憶媒体。
【請求項8】
前記プリミティブバッチ内の1つ以上のプリミティブを、前記1つ以上のプリミティブによって区切られた列でソートすることは、前記1つ以上のプリミティブによって区切られた最小列と、前記1つ以上のプリミティブによって区切られた最大列と、を決定することを含む、
請求項6のコンピュータ可読記憶媒体。
【請求項9】
前記動作は、新たなプリミティブを前記プリミティブバッチに挿入する前に、バッチ中断条件が存在するかどうかを判別することをさらに含む、
請求項6のコンピュータ可読記憶媒体。
【請求項10】
前記バッチ中断条件は、プリミティブを記憶するのに十分なスペースがメモリにないこと、前記プリミティブバッチをフラッシュするイベントが発行されたこと、又は、十分な状態コンテキストがないこと、のうち何れかを含む、
請求項9のコンピュータ可読記憶媒体。
【請求項11】
前記動作は、前記複数の行の各々において前記複数の列のうち何れが少なくとも1つのプリミティブを含むかを示すマスクを記憶することをさらに含む、
請求項6のコンピュータ可読記憶媒体。
【請求項12】
複数の行及び複数の列を有する表示領域をラスタライズするシステムであって、
各プリミティブが複数の行のうち何れの行と交差するかに基づいて、シーケンスのプリミティブを異なる行グループに蓄積することによって、1つ以上のプリミティブのシーケンスから生成されたプリミティブバッチを記憶するように構成されたメモリと、
各行グループを順に処理するように構成された処理ユニットと、を備え、
各行グループを処理することは、
行グループ内の1つ以上のプリミティブ毎に1つ以上のプリミティブ列交差を識別することであって、プリミティブ列交差及び行の異なる組み合わせの各々は、異なるビンを識別する、ことと、
プリミティブを含むビン毎に、ビンの領域に対応するラスタライズ用の表示境界領域を設定することと、
表示境界を使用して、ビンと交差するプリミティブをラスタライズすることと、を含む、
システム。
【請求項13】
前記処理ユニットは、前記1つ以上のプリミティブによって区切られた最小行と、前記1つ以上のプリミティブによって区切られた最大行と、を各行に記憶するようにさらに構成されている、
請求項12のシステム。
【請求項14】
前記処理ユニットは、新たなプリミティブを前記プリミティブバッチに挿入する前に、バッチ中断条件が存在するかどうかを判別するようにさらに構成されている、
請求項12のシステム。
【請求項15】
前記処理ユニットは、前記1つ以上のプリミティブの全てによって区切られた全ての行を含むマスクを記憶するようにさらに構成されている、
請求項12のシステム。
【請求項16】
前記バッチ中断条件は、プリミティブを記憶するのに十分なスペースがメモリにないこと、前記プリミティブバッチをフラッシュするイベントが発行されたこと、又は、十分な状態コンテキストがないこと、のうち何れかを含む、
請求項14のシステム。
【発明の詳細な説明】
【技術分野】
【0001】
(関連出願の相互参照)
本願は、2016年8月29日に出願された米国特許出願第15/250,357号の利益を主張し、その内容は、完全に記載されているかのように、参照により本明細書に組み込まれる。
【背景技術】
【0002】
表示画像は、通常、数百万のドットを含み、各ドットは、数千又は数百万の色のうち1つの色を表す。これらのドットは、画像素子又は「ピクセル」として知られている。各ピクセルには、色、深度、透過性又はテクスチャ属性等の複数の属性が関連付けられている。これらの属性は、電子デバイスの表示画面上にレンダリングされる前に操作され処理される。
【0003】
ピクセルは、各ピクセルの色値を決定するためにグラフィックオブジェクトをレンダリングすることによって生成される。例示的なグラフィックオブジェクトは、点、線、ポリゴン及び三次元(3D)高次サーフェスを含む。点、線及びポリゴンは、殆どの3Dレンダリング命令の基礎となるレンダリングプリミティブを表す。3Dオブジェクト等のより複雑な構造は、このようなプリミティブの組み合わせ又はメッシュから形成される。特定のシーンを表示するために、シーンに関連する潜在的な寄与ピクセルを有するプリミティブは、プリミティブのエッジ内にあるピクセルを決定し、これらの各ピクセルに対応するプリミティブの属性を取得することによって個別にレンダリングされる。
【0004】
3Dシーンには数千、数百万又は数億のプリミティブが存在することが多いため、各プリミティブを個別に完全にラスタライズすると、複雑な3D画像を表示画面にレンダリングする際に最適なシステムパフォーマンスが得られない場合がある。このような従来のグラフィックスシステムは、ラスタライズ処理が1つのプリミティブから次のプリミティブへ移動するにつれて、メモリからの色及び深度値の読み出し及び書き込みを繰り返してしまうという課題がある。ラスタライズされたピクセルを直ちにシェーディングすると、不要な処理オーバーヘッド及びシステムメモリ帯域幅の全体的な非効率的な使用に繋がる可能性がある。
【発明の概要】
【課題を解決するための手段】
【0005】
実施形態は、概して、グラフィックスパイプラインの処理に関する。より具体的には、実施形態は、グラフィックスパイプラインにおいてグラフィックスをレンダリングするための遅延プリミティブバッチビニングメカニズムに関する。
【0006】
遅延プリミティブバッチビニングを用いてグラフィックスをレンダリングするシステム、方法及びコンピュータプログラム製品が提供される。プリミティブバッチは、一連のプリミティブのシーケンスから生成される。プリミティブがプリミティブバッチに到着すると、プリミティブに関する第1ビン切片(intercept)が識別される。バッチがクローズした後、第1ビンが処理のために識別される。ビンは、スクリーンスペースの領域に対応する。識別されたビンを区切る(インターセプトする)プリミティブが処理される。識別されたビンを区切るプリミティブ毎に、次のビン切片が識別され、識別されたビンによって囲まれたプリミティブに含まれるピクセルが詳細なラスタライズのために送信される。この処理は、プリミティブバッチのプリミティブによって交差されたあらゆるビンに対して繰り返される。開示された実施形態のさらなる特徴及び利点と、様々な実施形態の構造及び動作とは、添付の図面を参照して以下に詳細に説明される。本開示は、本明細書に記載の特定の実施形態に限定されないことに留意されたい。このような実施形態は、例示目的のためだけに本明細書に提示される。本明細書に含まれる教示に基づいて、さらなる実施形態が当業者に明らかになるであろう。
【0007】
本明細書に組み込まれて本明細書の一部を形成する添付の図面は、本開示を例示し、説明と共に、実施形態の原理を説明し、当業者が実施形態を製造及び使用することを可能にするのにさらに役立つ。様々な実施形態が図面を参照して以下に説明され、同じ符号は、全体を通して同様の要素を指すために使用される。
【図面の簡単な説明】
【0008】
【
図1】一実施形態による、グラフィックス処理システムのブロック図である。
【
図2】一実施形態による、処理モジュールのブロック図である。
【
図3】一実施形態による、即時モードレンダリングシステムのブロック図である。
【
図4A】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図4B】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図4C】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図4D】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図4E】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図4F】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図4G】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図4H】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図4I】一実施形態による、遅延プリミティブバッチビニング処理の例を示す図である。
【
図5】一実施形態による、遅延プリミティブバッチビニングの処理を示すフロー図である。
【
図6】一実施形態による、遅延シェーディング処理を示すフロー図である。
【
図7】一実施形態による、即時モードレンダリングシステムにおけるバッチビニング及びソートの一例を示す図である。
【
図8】一実施形態による、バッチビニング及びソートを実行するシステムの例示的な概略図である。
【
図9A】一実施形態による、バッチビニング及びソートを実行する例示的な方法のフロー図である。
【
図9B】一実施形態による、バッチビニング及びソートを実行する例示的な方法のフロー図である。
【発明を実施するための形態】
【0009】
添付の図面を参照して実施形態を説明する。全体的に、要素が最初に現れる図面は、通常、対応する符号の左端の数字によって示される。
【0010】
以下の詳細な説明において、「1つの実施形態」、「一実施形態」、「例示的な実施形態」等の言及は、説明した実施形態が特定の特徴、構造又は特性を含むことができることを示しているが、全ての実施形態が必ずしも特定の特徴、構造又は特性を含むわけではない。また、このような表現は、必ずしも同じ実施形態を指しているわけではない。さらに、特定の特徴、構造又は特性が実施形態に関連して説明される場合、このような特徴、構造又は特性が他の実施形態に関連して影響を及ぼすことは、明示的に説明されているか否かに関わらず、当業者の知識の範囲内であると考えられる。
【0011】
「実施形態」という用語は、全ての実施形態が、説明した特徴、利点又は動作モードを含むことを要求するものではない。本発明の範囲から逸脱することなく代替の実施形態を考案することができ、関連する詳細を曖昧にしないように、周知の要素を詳細に説明しないか省略する場合がある。また、本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、限定することを意図するものではない。例えば、本明細書で使用される場合、単数形は、文脈が明らかにそうでないことを示さない限り、複数形も含むことを意図している。「備える」、「備えている」、「含む」及び/又は「含んでいる」という用語は、本明細書で使用される場合、記載された特性、整数、ステップ、動作、要素及び/又はコンポーネントの存在を特定するが、1つ以上の他の特性、整数、ステップ、動作、要素、コンポーネント及び/又はこれらのグループの存在若しくは追加を排除するものではないことを理解されたい。
【0012】
データを効率的にレンダリングして処理するために、グラフィックス処理装置(GPU)は、ハードウェアパイプラインを含む。ハードウェアパイプラインは、特定のタイプのデータの処理又は特定のタイプの機能を実行する。グラフィックスパイプラインは、3Dコンピュータグラフィックス、画像、ビデオ等の処理及びレンダリングを行う。各画像又はフレームは、点、線、ポリゴン、又は、メッシュに編成されたプリミティブの組み合わせを含むプリミティブを使用して、レンダリングされる。各フレーム又は画像内のプリミティブは、何れのピクセルがプリミティブのエッジ内にあるかを決定し、これらの各ピクセルに対応するプリミティブの属性を計算することによって、個別に描画される。
【0013】
従来の即時モードレンダリングシステムでは、グラフィックス処理パイプラインは、プリミティブがパイプラインによって受信された順序でシーン内の各プリミティブをレンダリングするように構成されている。例えば、プリミティブは、プリミティブの頂点に対応するx、y、z座標、色又はテクスチャu、v座標等の属性のセットを含むことができる。シーン内の全ての前向き(forward facing)プリミティブは、ラスタライズされシェーディングされる(現在のGPUのシェーディング処理では、補間、テクスチャリング、ライティング及び結合の動作を含むユーザ記述動作が行われる)。従来の即時モードレンダリンググラフィックスパイプラインは、ラスタライズ処理が1つのプリミティブから次のプリミティブに移動するにつれて、メモリからの色及び深度値の読み出しを繰り返してしまうという課題がある。例えば、スクリーン上のプリミティブに関連するフラグメントの空間的分離がオンチップの色及び深度の読み出し/書き込みキャッシュの容量を超える場合、プリミティブを適切に処理するためにシステムメモリへの反復トリップが必要になる。プリミティブ処理におけるこの欠点は、グラフィックスパイプラインにおける画像のレンダリングを著しく遅延させ、効率的な画像レンダリングに影響を及ぼし、電子デバイス上の最終画像を取得するのに必要とされる電力を増加させるボトルネックである。
【0014】
図1は、実施形態を実施可能なグラフィックス処理システム100の図である。グラフィックス処理システム100は、アプリケーションモジュール110と、アプリケーションプログラミングインタフェース(API)120と、ドライバモジュール130と、処理モジュール140と、ディスプレイモジュール150と、を含む。アプリケーションモジュール110は、例えば、ビデオゲームアプリケーション等のグラフィックス処理を必要とするエンドユーザアプリケーションとすることができるが、これに限定されない。一実施形態によれば、API120は、アプリケーションモジュール110とドライバモジュール130との間の仲介として機能するように構成されている。特に、API120は、グラフィックス機能が多くの異なるハードウェアシステム(例えば、処理モジュール140)上で動作するように、広範囲の共通グラフィックス機能がソフトウェア開発者によって書き込まれるのを可能にすることができる。API120の例には、DirectX(Microsoft(登録商標)製)及びOpenGL(Silicon Graphics製)が含まれるが、これらに限定されない。ディスプレイモジュール150は、例えば、ブラウン管ディスプレイ、液晶ディスプレイ、発光ダイオードディスプレイ又は他の同様のタイプのディスプレイデバイスとすることができるが、これらに限定されない。
【0015】
実施形態によれば、ドライバモジュール130は、アプリケーションモジュール110からのより高いレベルのグラフィックス計算プログラムが処理モジュール140と対話するのを可能にするコンピュータプログラムである。例えば、ドライバモジュール130は、処理モジュール140の製造者によって書き込まれ、API120から受信した標準コードを、処理モジュール140の処理ユニットによって理解されるネイティブフォーマットに変換することができる。ドライバモジュール130は、例えば、これらに限定されないが、アプリケーションモジュール110又はユーザからの入力が処理モジュール140の設定を指示することを可能にする。このような設定には、アンチエイリアス制御、テクスチャフィルタ制御、バッチビニング制御及び遅延ピクセルシェーディング制御の選択が含まれる。例えば、ユーザは、グラフィックス処理ハードウェア及びソフトウェアと共にユーザに供給されるUIを含むユーザインタフェース(UI)を介して、これらの設定のうち1つ以上を選択することができる。
【0016】
ドライバモジュール130は、処理モジュール140にコマンドを発行する。一実施形態では、ドライバモジュール130は、API120を介してアプリケーションモジュール110からグラフィックス動作を受信する。グラフィックス動作は、例えば、これらに限定されないが、グラフィックスシーンのテクスチャマッピングを含むことができる。当業者に理解されるように、テクスチャは、テクスチャマッピング動作中、グラフィックスシーンに細部、表面テクスチャ又は色を追加するために使用される。
【0017】
一実施形態では、処理モジュール140は、プリミティブのシーケンスを受信し、プリミティブを、時間的に関連するプリミティブバッチに日和見的に(opportunistically)セグメント化するように構成されている。一実施形態によれば、プリミティブのシーケンスは、例えば、バッチフル条件、状態記憶フル条件、又は、以前にレンダリングされたプリミティブへの依存性が決定される等の所定の条件が満たされるまでキャプチャされる。一例では、プリミティブバッチは、所定の最大バッチ値に基づいて形成される。別の例では、折り畳み(collapsible)バッチビニング技術を使用してもよく、この技術では、プリミティブバッチについて最初に収集されたプリミティブの最大量が一定にされているが、ビンのプリミティブの処理中に、完成したプリミティブを破棄し、処理中に新たなプリミティブを動的に挿入して柔軟なプリミティブバッチを形成することが可能になる。
【0018】
レンダリングされたプリミティブを表示するスクリーンスペースは、市松模様等のいくつかのブロックに分割されてもよい。スクリーンスペースの各ブロックは、ビンに関連付けられてもよい。一実施形態によれば、ビンのサイズは動的であり、処理条件に基づいて任意のサイズになるように構成することができる。バッチの受信されたプリミティブのシーケンスの各プリミティブは、1つ以上のビンと交差することができる。バッチ内の受信プリミティブ毎に最初のビン切片が計算される。ここで、最初のビン切片は、プリミティブが交差するスクリーンの最も左上のビンである。バッチがクローズした後に、第1ビンが処理のために識別される。識別されたビンを区切るプリミティブが処理される。ビンを区切ると識別されたプリミティブ毎に次のビン切片が識別され、識別されたビンによって囲まれたプリミティブに含まれるピクセルが、詳細なラスタライズのために送信される。次のビン切片は、処理されたプリミティブが交差するラスタ順で次に最も左上にあるビンである。
【0019】
一実施形態によれば、遅延シェーディング動作が有効になると、ピクセルシェーディングが遅延される。一実施形態では、処理モジュール140は、x、yスクリーン座標に基づいてプリミティブに関連するフラグメントを蓄積する。プリミティブは「ピクセルフラグメント」にラスタライズされる。処理モジュール140は、フラグメントに対してテストを実行し、何れのフラグメントをシェーディングする必要があるかを判別するためにフィルタリング動作を実行するように構成されている。レンダリングされる任意の所定のシーンにおいて、例えば、プリミティブが重なり合ってもよいし、プリミティブが透明であってもよい。したがって、特定のプリミティブ及びこれらに対応するフラグメントは、シーンの最終的な色又は深度に寄与しない可能性がある。処理モジュール140は、任意のシェーディング動作を実行する前に、最終的なピクセル色又はピクセル深度に寄与しないフラグメントを破棄するように構成されている。即時モードレンダリングシステムにおける遅延プリミティブバッチビニングの使用は、日和見的に用いられ、プリミティブバッチサイズが、1バッチ当たり1つしかプリミティブ要素を受信させない1つ以上の条件に基づいている場合に、若干の遅延を即時モードレンダリングシステムに生じさせる。また、遅延プリミティブバッチビニングは、完全に内蔵されたハードウェア処理であるため、外部帯域幅が減少する。遅延バッチビニング処理メカニズムについては、以下により詳細に説明する。
【0020】
図2は、処理モジュール140の一実施形態の図である。処理モジュール140は、処理ユニット210と、メモリ管理ユニット(MMU)220と、メモリデバイス230と、を含む。処理ユニット210は、例えば、これらに限定されないが、中央処理装置(CPU)、グラフィックス処理装置(GPU)、アクセラレーテッドプロセッシングユニット(APU)、特定用途向け集積回路(ASIC)コントローラ若しくは他の類似のタイプの処理ユニット又はこれらの組み合わせとすることができる。処理ユニット210は、命令を実行し、
図1のグラフィックス処理システム100に関連する動作を実行するように構成されている。例えば、グラフィックス処理システム100は、グラフィックスをレンダリングし表示するように構成することができる。MMU220は、処理ユニット210によって要求されたメモリデバイス230へのアクセスを処理するように構成されている。MMU220の機能は、例えば、これらに限定されないが、仮想アドレスの物理アドレスへの変換(例えば、仮想メモリ管理)、キャッシュ制御及びバスアービトレーションを含む。メモリデバイス230は、例えば、これらに限定されないが、ランダムアクセスメモリデバイス(例えば、ダイナミックランダムアクセスメモリ、スタティックランダムアクセスメモリ等)、フラッシュメモリデバイス又は他の類似のタイプのメモリデバイスとすることができる。
【0021】
図3は、実施形態による、即時モードレンダリングシステム300を示す図である。即時モードレンダリングシステム300は、プロセッサ302と、CPU304と、GPU306と、を含む。ブロック
図300に示す例におけるGPU306は、上述したグラフィックスパイプラインの欠点を解決するために、バッチビニングモジュール312及びアキュムレータ316を含む。
【0022】
CPU304及びGPU306は、メモリインタフェース322に通信可能に接続されている。一実施形態では、GPU306は、電子デバイス上で数学的に集中的なアプリケーションを迅速に処理するように設計された特殊な電子回路であるプロセッサである。GPUは、コンピュータグラフィックスアプリケーション、画像及びビデオに共通する数学的に集中的なデータ等の大規模なデータブロックの並列処理に効率的である、高度に並列な構造を有することができる。
【0023】
メモリインタフェース322は、ランダムアクセスメモリ(RAM)(図示省略)等のメインメモリ又はプライベートメモリにアクセスするために、CPU304及びGPU306と
図2のメモリ管理ユニット220との間のインタフェースを提供する。メモリインタフェース322は、例えば、アプリケーションの一部又は他の処理ロジックの実行中に、処理ロジック命令、定数値及び変数値を記憶することができる。例えば、一実施形態では、CPU304上で1つ以上の動作を実行するための制御ロジックの一部は、CPU304による動作の各々の部分の実行中にメモリインタフェース322内に常駐することができる。本明細書で使用される「処理ロジック」又は「ロジック」という用語は、制御フローコマンド、計算を実行するためのコマンド、及び、リソースへの関連アクセスのためのコマンドを指す。
【0024】
一例では、メモリインタフェース322は、CPU304がGPU306にコマンドを送信するために使用されるかGPU306によって直接使用されるコマンドバッファ又はメインメモリ(図示省略)からコマンドバッファへのアクセスを含むことができる。また、メモリインタフェース322は、プロセスリスト及びプロセス情報を含むことができる。プロセスリスト及びプロセス情報は、スケジューリング情報をGPU306及び/又は関連するスケジューリングハードウェアに通信するためにCPU304上で実行されるスケジューリングソフトウェアによって使用される。
【0025】
GPU306は、コマンドプロセッサ308と、プリミティブパイプライン310と、プリミティブバッチモジュール312と、スキャンコンバータ314と、アキュムレータ316と、深度及び色処理モジュール318と、ユニファイドシェーダシステム320と、を含む。コマンドプロセッサ308は、GPU306内の処理を制御する。また、コマンドプロセッサ308は、実行される命令をメモリインタフェース322のコマンドバッファから取り出し、GPU306上でのこれらの命令の実行を調整する。一例では、CPU304は、(
図1の)アプリケーション111に基づいてコマンドをメモリインタフェース322の適切なコマンドバッファに入力するか、コマンドをコマンドプロセッサ308に直接送信する。コマンドプロセッサ308は、ハードウェア、ファームウェア若しくはソフトウェア又はこれらの組み合わせで実装することができる。一実施形態では、コマンドプロセッサ308は、スケジューリングロジックを含むロジックを実施するためのマイクロコードを有するRISCエンジンとして実装される。
【0026】
プリミティブパイプライン310は、GPU306による表示のために最終的にレンダリングされることになるプリミティブのシーケンスを生成する。プリミティブは、点、線、ポリゴン、又は、メッシュに編成されたプリミティブの組み合わせを含む。一般的に生成されるプリミティブは三角形である。プリミティブパイプライン310は、プログラムデータ及び3Dオブジェクトデータを使用して、ジオメトリをワールド座標空間からスクリーン空間に変換する。全てのサーフェス、ジオメトリ、テッセレーション、クリッピング、カリング、ビューポート変換及びプリミティブ設定処理が完了すると、スクリーン空間内の一連のプリミティブがラスタライズのために出力される。
【0027】
プリミティブバッチモジュール312は、プリミティブパイプライン310からプリミティブのシーケンスを受信するように構成されている。一実施形態によれば、プリミティブバッチモジュール312は、プリミティブのシーケンスを受信すると、プリミティブバッチを生成するように構成されている。プリミティブバッチは、プリミティブのシーケンスのサブセットをセグメント化又はキャプチャすることによって生成される。一実施形態によれば、プリミティブバッチに含まれるプリミティブは、時間的に関連する。時間的に関連するプリミティブは、所定の閾値が満たされるまでバッチにセグメント化される。例えば、バッチフル閾値、状態記憶フル閾値、プリミティブ依存性閾値、又は、入力プリミティブが最後のプリミティブとして識別されるかどうか等の所定の条件が満たされるまで、プリミティブのシーケンスがプリミティブバッチにキャプチャされてもよい。一例では、プリミティブバッチは、所定の最大バッチ値に基づいて形成される。別の例では、折り畳みバッチビニング技術を使用することができ、この技術では、収集されたプリミティブの最大量が一定にされているが、必要に応じてプリミティブを動的に挿入したりバッチから削除することができる。一実施形態によれば、プリミティブバッチが最大容量にある場合、プリミティブの追加のシーケンスのダブルバッファリングが実行される。ダブルバッファリングは、プリミティブバッチの処理中に発生する。このようにして、処理が行われている間、プリミティブが受信され記憶され続けることができる。
【0028】
一実施形態によれば、プリミティブバッチモジュール312は、プリミティブバッチがキャプチャされている間、プリミティブバッチに含まれるプリミティブに関する最初のビン切片を識別するように構成されている。レンダリングされたプリミティブを表示するスクリーンスペースは、市松模様等のいくつかの矩形ブロックに分割されてもよい。スクリーンスペースの各矩形ブロックは、ビンに関連付けられてもよい。受信したプリミティブのシーケンスは、プリミティブの位置及びサイズに基づいて1つ以上のビンと交差することができる。一実施形態によれば、プリミティブの最初のビン切片は、プリミティブが交差する最も左上のビンである。最初のビン切片が計算され、当該情報がビン毎に記憶される。リンクリスト又はスコアボード等のビン毎のプリミティブストレージは、プリミティブバッチに関する情報を記憶するために利用される。例えば、ビン毎のプリミティブストレージは、ビン毎に交差するプリミティブのリストを識別する情報を記憶することができる。別の例では、特殊なビン処理ウォーク順序を決定することができ、最初のビン切片を記憶することだけを要求することができる。
【0029】
一実施形態によれば、プリミティブバッチモジュール312は、処理するためのビンを識別するように構成されている。一実施形態によれば、ビンは、プリミティブバッチに含まれるプリミティブの対応するスクリーン位置に基づいて識別することができる。例えば、スクリーンスペースの最も左上の矩形ブロック領域に関連するプリミティブを含むビンを最初に処理することができる。一実施形態によれば、プリミティブバッチモジュール312は、ビン毎のストレージを使用して、処理されるビンを識別するように構成されている。例えば、プリミティブバッチモジュール312は、最初のビン切片の全ての座標を分析することによって、何れのビンが、交差するプリミティブを含む最も左上のビンであるかを決定することができる。
【0030】
プリミティブバッチモジュール312は、識別されたビンと交差するバッチの全てのプリミティブを処理するようにさらに構成されている。例えば、識別されたビンと交差するプリミティブ毎に、当該ビン内に位置するプリミティブの部分は、プリミティブバッチモジュール312によって処理される。次に、プリミティブの処理された部分は、ラスタライズのためにスキャンコンバータ314に渡される。次いで、プリミティブバッチモジュール312は、処理されたプリミティブに対して次のビン切片を識別するようにさらに構成されている。一実施形態によれば、次のビン切片は、処理されたプリミティブが交差する次の最も左上のビンである。次のビン切片に関する情報は、ビン毎のストレージ領域に記憶されてもよい。
【0031】
プリミティブがプリミティブバッチモジュール312によって受信されると、到着識別子が各プリミティブに割り当てられる。到着順序は、識別されたビンのプリミティブが処理される順序を決定する。したがって、プリミティブバッチモジュール312が、特定のビンについて複数の交差するプリミティブを識別した場合、当該ビン内に含まれるプリミティブは、割り当てられた到着識別子を使用して、到着に基づく順序で処理される。一実施形態によれば、プリミティブバッチモジュール312は、プリミティブバッチの全てのプリミティブが完全に処理されるまで、プリミティブを含む連続するビンの各々に対して全てのプリミティブを繰り返し処理するように構成されている。
【0032】
一例では、スキャンコンバータ314は、渡されたプリミティブ及びビンのエッジの内側に何れのピクセルがあるかを決定するために使用される、プリミティブ及びビン位置データをプリミティブバッチモジュール312から受信する。深度及び色処理モジュール318は、結果として生じるピクセルをアキュムレータ316に渡す前に、各ピクセル又はフラグメントに対して複数の深度テスト動作を実行して、以前にレンダリングされたオブジェクトの背後にあると判別し得る隠れたフラグメントを日和見的に除去することができる。次に、残ったピクセル又はフラグメントの情報がアキュムレータ316に渡される。一実施形態では、遅延シェーディング処理動作を有効にすることができる。遅延シェーディング動作が有効な場合、ピクセルシェーディングは、識別されたビンの完全なピクセルセットを受信するまで遅延する。アキュムレータ316は、スキャンコンバータ314から受信したデータに基づいて、ビン内の各フラグメントのソースピクセルx、y、z座標位置を使用して、何をシェーディングする必要があるかを判別する。また、ソース位置及びz座標は、所定のX、Yスクリーン位置に対して以前に受信されたフラグメントが到着フラグメントよりも眼から遠いかどうかを判別するために、アキュムレータ316によって使用される。
【0033】
次に、アキュムレータ316は、ビン内の寄与フラグメント及び非寄与フラグメントを決定するように構成されている。深度及び色処理モジュール318によって実行される深度テストは、プリミティブの特定の部分を除去してもよいし、最終的な色又は深度テストには考慮しなくてもよい。アキュムレータ316は、最終的な色又は深度に寄与しないフラグメントをさらに識別し、これらのフラグメントを破棄するように構成されている。このようにして、アキュムレータ316は、何れのフラグメントがシェーディングされるかを決定するために、フィルタリング動作を実行する。例えば、所定のスクリーンX、Yについて、フラグメントが不透明(すなわち、半透明ではない)であり且つ以前に受信されたフラグメントよりも眼に近いと判断された場合、当該以前のフラグメントは、最終的な色に寄与しないため破棄される。別の実施形態では、プリミティブのシーケンス内で後に到着するピクセル又はフラグメントが、初期の日和見的な階層Z深度テストに合格したが、同じビンの同じスクリーンXYに対して以前に処理された不透明ピクセルよりも眼から遠いとソースZを使用して判別された場合、到着フラグメントを、アキュムレータ316によるピクセルシェーディングの前に破棄することができる。したがって、実施形態は、必要とされるピクセルシェーディング動作の数を減らす遅延バッチビニング処理メカニズムを生成する。
【0034】
アキュムレータ316がビンに対してフィルタリング動作を完了すると、アキュムレータ316は、ビンの全てのピクセルについて残りのピクセル(つまり、寄与フラグメント)を、ユニファイドシェーダシステムに含まれるベクトル単位の幅のグループに編成し、次に、シェーディング動作を完了するために、当該グループをユニファイドシェーダシステム320に送信する。
【0035】
一例では、ユニファイドシェーダシステム320は、各グループのフラグメントを特定のシェーダプログラムと関連付ける。ユニファイドシェーダシステム320は、いくつかの異なるタイプのシェーダプログラムを実行することができる処理要素の配列を含むことができる。ユニファイドシェーダシステム320は、例えば、頂点シェーダ、ジオメトリシェーダ及びピクセルシェーダを実行することができ、ピクセルシェーダは、アキュムレータ316によってアセンブルされ入力されたピクセルのグループに対してユーザ提供プログラムを実行することができる。ユニファイドシェーダシステム320は、通常のグラフィックス処理タスク(例えば、頂点シェーダ、ジオメトリシェーダ、ピクセルシェーダ等)に加えて、一般的な計算動作(例えば、数学的アルゴリズム、物理シミュレーション等)を実行することができる。
【0036】
当業者であれば、実施形態が単一の即時モードレンダリングシステムに言及して説明されているが、実施形態が複数の即時モードレンダリングシステムを含むように拡張可能であることを理解するであろう。
【0037】
図4A~
図4Iは、実施形態による、即時モードレンダリングシステムにおける遅延バッチビニングの一例を示す図である。
図4Aは、複数の矩形領域又はビン404A~404Pに分割されたスクリーンスペース領域402を示している。当業者であれば、
図4Aに示す区分が非限定的な例に過ぎず、他の区分も考えられ、開示された実施形態の範囲内で利用できることを理解するであろう。
【0038】
図4Bは、第1プリミティブ406の受信を示している。第1プリミティブ406に関する最初のビン切片が計算される。この例では、第1プリミティブ406の最初のビン切片はビン404Aである。換言すると、ビン404Aは、第1プリミティブ406が交差する最も左上のビンである。当業者であれば、最初のビン切片を決定するための他の技術を本開示と矛盾なく利用できることを理解するであろう。しかしながら、本明細書で説明する目的のために、最も左上のビン切片は、プリミティブによって区切られた最も上のビンの行を最初に決定し、次に、当該行内のプリミティブによって区切られた最も左のビンを決定することによって、計算される。この構成は、他の方向及び処理順序に容易に適応可能である。
【0039】
図4Cは、第2プリミティブ408の受信を示している。
図4Bの第1プリミティブ406と同様に、第2プリミティブ408の最初のビン切片が計算される。この例では、第2プリミティブ408の第1ビン切片は、(404Gではなく)ビン404Dである。なぜなら、ビン404Dは、プリミティブによって区切られた最も上のビン行にあり、当該行内においてプリミティブによって区切られた最も左のビン(実際には、唯一のビン)であるからである。
【0040】
図4Dは、第3プリミティブ410の受信を示している。
図4Bの第1プリミティブ406及び
図4Cの第2プリミティブ408と同様に、第3プリミティブ410の最初のビン切片が計算される。この例では、第3プリミティブ410の最初のビン切片は、ビン404Fである。
【0041】
図4Eは、第1プリミティブ406、第2プリミティブ408及び第3プリミティブ410を含むプリミティブバッチの生成を示している。上述したように、プリミティブバッチは、所定の閾値に基づくプリミティブ(例えば、メモリの制約に基づいて処理可能ないくつかのプリミティブ等)を含むことができる。また、後続の受信プリミティブ(図示省略)が第1プリミティブ406、第2プリミティブ408及び第3プリミティブ410のうち少なくとも1つの処理に依存しているという判別に基づいて、受信プリミティブのセットを使用してバッチを生成することができる。このような依存性は、後続の受信プリミティブの最終的なシェーディングに影響を与える可能性がある。このようなシナリオでは、プリミティブバッチは、後続の受信プリミティブを含まないであろう。むしろ、後続の受信プリミティブに対して新たなプリミティブバッチが生成され、新たなプリミティブバッチは、現在のバッチが処理されて依存性が解決されると処理することができる。新たなプリミティブバッチは、後で処理される。
図4Eに戻ると、プリミティブバッチが完了すると、プリミティブの処理が開始する。この例では、プリミティブの処理は、ビン404Aから開始して、ビン毎に行われる。ビン404Aでは、ビン404Aと交差する第1プリミティブ406の部分が処理され、ラスタライズのために送信される。第1プリミティブ406の部分が処理されている間に、第1プリミティブ406の次のビン切片が計算される。この例では、第1プリミティブ406の次のビン切片は、ビン404Bである。最初のビン切片の計算と同様に、次のビン切片は、プリミティブが交差する次の最も左上のビンである。
【0042】
図4Fは、プリミティブバッチ内のプリミティブのさらなる処理を示している。図示するように、処理は、規則的な方法(すなわち、ウォーク順)で、プリミティブ交差を有する次のビンに移動する。この例では、ビンの各列について、ビンのウォーク順が左から右へと実行される。しかしながら、実施形態は、この順序スキームに限定されない。一実施形態によれば、ウォーク順及び処理のための次のビンは、動的であってもよい。識別されたウォーク順が維持される限り、ウォーク順の向きは、複数の開始方向及び開始位置を含むことができる。
【0043】
図4Fでは、ビン404Bが処理のために識別され、ビン404Bと交差する第1プリミティブ406の部分が処理されてラスタライズのために送信される。第1プリミティブ406の次のビン切片がビン404Eとして決定され、ビン404Eは、プリミティブ406が交差する次に最も左上のビンである。
【0044】
図4Gは、プリミティブ交差を有する次のビンが処理されることを示している。ビン404Cは、交差するプリミティブを有していないのでスキップされ、ビン404Dと交差するプリミティブが処理される。この例では、ビン404Dと交差する第2プリミティブ408の部分が処理され、ラスタライズのために送信される。同時に、第2プリミティブ408の次のビン切片がビン404Gとして計算される。
【0045】
図4Hは、第1プリミティブ406の次のビン切片がビン404Fとして計算される間に、ビン404Eと交差する第1プリミティブ406の部分が処理されるので、前の図と同様の処理を示している。
【0046】
図4Iは、ビン404Fと交差するプリミティブの処理を示している。図示したように、複数のプリミティブ(すなわち、第1プリミティブ406及び第3プリミティブ410)は、ビン404Fと交差する。上述したように、各プリミティブには、プリミティブの処理シーケンスを維持するために到着識別子が割り当てられている。したがって、この例では、第1プリミティブ406が最初に処理され、続いて第3プリミティブ410が処理される。ビン404Fと交差する第1プリミティブ406の部分が処理されてラスタライズのために送信され、第1プリミティブ406の次のビン切片がビン404Iとして計算される。その後、ビン404Fと交差する第3プリミティブ410の部分が処理されてラスタライズのために送信され、第3プリミティブ410の次のビン切片がビン404Gとして計算される。
【0047】
図4Iは、重複する部分を含むプリミティブを示していることに留意することが重要である。従来の即時モードレンダリングシステムでは、ビン404F内に位置し、第1プリミティブ406に関連するピクセルは、ビン404F内の第3プリミティブ410の部分によって当該ピクセルが完全に覆われ/隠されていても、シェーディングされる。これは、従来の即時モードレンダリングシステムでは、第1プリミティブ406のレンダリング時に、第3プリミティブ410のピクセルが分からないためである。実施形態では、(HiZ及び/又はアーリーZテストで)識別されたビンについてプリミティブバッチの各プリミティブの全てのピクセルがラスタライズされるまで、ビン内のピクセルのシェーディングを延期することができる。実施形態では、ピクセルは所定のピクセルスクリーン位置に蓄積され、テスト及び比較を通じて、何れのピクセルが最終的な色又は深度に寄与しているかを決定することができる。そして、寄与するピクセルのみがシェーディングされる。したがって、不要なシェーディング動作が実行されない。
【0048】
図5は、例示的な実施形態による、遅延プリミティブバッチビニングの処理を示すフロー図である。
【0049】
ステップ502では、プリミティブのシーケンスからプリミティブバッチを生成することができる。例えば、プリミティブバッチを、GPU306のプリミティブバッチモジュール312によって生成することができる。生成されたプリミティブバッチは、プリミティブのシーケンスのサブセットを含む。プリミティブバッチに含まれるプリミティブは、時間的に関連する。時間的に関連するプリミティブは、所定の閾値が満たされるまでバッチにセグメント化される。例えば、バッチフル閾値、状態記憶フル閾値、入力プリミティブが最後のプリミティブとして識別されるかどうか、又は、プリミティブ依存性閾値等の所定の条件が満たされるまで、プリミティブのシーケンスをプリミティブバッチにキャプチャしてもよい。
【0050】
ステップ504では、プリミティブバッチに含まれるプリミティブについて最初のビン切片が識別される。例えば、最初のビン切片は、GPU306のバッチビニングモジュール312によって識別されてもよい。ビンは、スクリーンスペースの矩形の境界領域に対応する。スクリーンスペースは、複数の矩形ブロックに分割されてもよい。したがって、所定のスクリーンスペースに対して複数のビンが存在し得る。一実施形態によれば、ビンの数は、矩形の境界領域の数に対応してもよい。プリミティブバッチに含まれるプリミティブは、1つ以上のビンと交差する場合がある。プリミティブの最初のビン切片は、プリミティブが交差する最も左上のビンである。プリミティブバッチの全てのプリミティブに対して最初のビン切片が計算され、当該情報がビン毎に記憶される。
【0051】
ステップ506では、処理のためのビンが識別される。例えば、処理のためのビンは、GPU306のバッチビニングモジュール312によって識別されてもよい。ビンの処理順序は、予め決めておくことができる。例えば、ビンの処理順序は、スクリーンスペース領域内のビンの左から右への横断に基づくことができる。したがって、このようなシナリオでは、最も左上のビンが最初に処理され、次に、右に隣接する次のビンが処理される。ステップ504で識別された最初のビン切片情報は、処理されるビンを決定する際に使用され得る。最初のビン切片に基づいて、プリミティブを含む最も左上のビンが処理されるビンとして識別される。
【0052】
ステップ508では、識別されたビンを区切るプリミティブが処理される。例えば、識別されたビンと交差するプリミティブは、GPU306のバッチビニングモジュール312によって処理される。識別されたビンと交差するプリミティブ毎に、当該ビン内に位置するプリミティブの部分が処理される。次に、プリミティブの処理された部分は、ラスタライズのために転送される。複数のプリミティブが特定のビンと交差する場合、識別されたビンの全てのプリミティブが後続のビンに移動する前に処理されるので、複数のプリミティブを1つのビンの間に処理することができる。
【0053】
ステップ510では、処理されたプリミティブについて次のビン切片が識別される。例えば、ステップ510は、GPU306のバッチビニングモジュール312によって実行されてもよい。一実施形態によれば、次のビン切片は、処理されたプリミティブが交差する次の最も左上のビンである。次のビン切片に関する情報をさらに記憶してもよい。
【0054】
図6は、例示的な実施形態による、遅延シェーディング処理を示すフロー図である。
【0055】
ステップ602では、各プリミティブに関連するピクセルシェーディングは、識別されたビンに対する完全なピクセルセットを受信するまで遅延する。例えば、ピクセルのシェーディングは、処理ユニット210のアキュムレータ216によって遅延されてもよい。実施形態によれば、遅延シェーディング動作が有効になると、ピクセルのシェーディングが遅延する。遅延シェーディング動作は、プリミティブに関連するピクセルのシェーディングを停止するコマンドである。
【0056】
ステップ604では、識別されたビンに関連する寄与フラグメント及び非寄与フラグメントが決定される。例えば、ステップ604は、処理ユニット210のアキュムレータ216によって実行されてもよい。プリミティブは、「ピクセルフラグメント」にラスタライズされる。その後、フラグメントをシェーディングして、ディスプレイの各ピクセルでの最終的な混合に使用される色を計算する。識別されたビン内のフラグメントは重複する可能性がある。このような重複は、これらのフラグメントが完全に隠れているかフラグメントであるために、特定のフラグメントが最終的な色又は深度に寄与していないことをもたらし得る。このようなフラグメントが、非寄与フラグメントであると決定される。透明なフラグメントは特殊な処理を必要とし、所定のビンに対してスクリーンX、Y毎に2つ以上のピクセルをシェーディングする必要があり得る。当業者は、複数の透明なピクセルと、1つの不透明なバッキングプリミティブと、をシェーディングする必要性を理解するであろう。一方、最終的なピクセルの色又は深度を考慮に入れるフラグメントは、寄与フラグメントと決定される。
【0057】
ステップ606では、非寄与フラグメントが破棄される。非寄与フラグメントは、処理ユニット210のアキュムレータ216によって破棄されてもよい。非寄与フラグメントは、シェーディング動作を実行する前に破棄される。フラグメントが寄与していないと判別された場合、このようなピクセルに対してシェーディング動作を実行する必要がなく、帯域幅及びALU機能の非効率的な使用になるので、当該フラグメントが破棄される。このようにして、実施形態は、必要とされるピクセルシェーディング動作の数を低減する。
【0058】
ステップ608では、識別されたビンの寄与フラグメントがシェーディングされる。
【0059】
実施形態は、例えば、汎用プログラミング言語(C又はC++等)、Verilog HDL、VHDL、Altera HDL(AHDL)等を含むハードウェア記述言語(HDL)、GPUへの前処理として実行するプログラム可能シェーダ、又は、他の利用可能なプログラミング及び/若しくは回路図キャプチャツール(回路キャプチャツール等)を使用することによって、達成することができる。プログラムコードは、半導体、磁気ディスク、光ディスク(CD-ROM、DVD-ROM等)を含む任意の周知のコンピュータ可読媒体に配置することができる。このように、コードを、インターネットを含む通信ネットワークを介して送信することができる。上述したシステム及び技術によって達成される機能及び/又は提供される構造は、プログラムコードで具現化され、集積回路の製造の一部としてハードウェアに変換することができるコア(CPUコア及び/又はGPUコア等)で表すことができることを理解されたい。
【0060】
実施形態では、制御ロジック(ソフトウェア)が内部に記憶された有形のコンピュータ使用可能媒体又はコンピュータ可読媒体を含む有形の装置又は製品は、本明細書ではコンピュータプログラム製品又はプログラム記憶デバイスとも呼ばれる。これには、限定されないが、上述した即時モードレンダリングシステム300及びメモリインタフェース322と、上述した任意の組み合わせを具現化する有形の製造品とが含まれる。このような制御ロジックは、(即時モードレンダリングシステム300等の)1つ以上のデータ処理デバイスによって実行されると、このようなデータ処理デバイスを本明細書で説明するように動作させる。
【0061】
本文書では、「コンピュータプログラム媒体」及び「コンピュータ使用可能媒体」という用語は、概して、リムーバブル記憶装置又はハードディスクドライブ等の媒体を指すのに使用される。コンピュータプログラム媒体及びコンピュータ使用可能媒体は、メモリ半導体(例えば、DRAM等)とすることができ、システムメモリ及びグラフィックスメモリ等のメモリを指すこともできる。これらのコンピュータプログラム製品は、APDにソフトウェアを提供するための手段である。
【0062】
図7は、一実施形態による、即時モードレンダリングシステムにおけるバッチビニング及びソートの一例を示す図である。
図7は、複数の矩形領域又はビン704A~704P(B0~B15とも示されている)に分割されたスクリーンスペース領域702を示している。当業者であれば、
図7に示す区分は非限定的な例であり、他の区分も考えられ、開示された実施形態の範囲内で利用できることを理解するであろう。セクタは、行(R0,R1,R2,R3)及び列(C0,C1,C2,C3)に分割することができる。
【0063】
プリミティブ(「T1」,「T2」,「T3」と示されている)は、スクリーンスペース領域702のセクタ内に示されている。例示目的で、プリミティブT1は、交差ビンB0,B1,B2,B5,B6として示されている。任意の数のプリミティブがスクリーンスペース領域702を占有し、より多くの又はより少ないビンと交差し得ることを理解されたい。また、
図7に示すように、プリミティブT1は、行R0,R1及び列C0,C1,C2にのみ存在するビンと交差する。したがって、行R2,R3及び/又は列C3のビンは、プリミティブT1の処理のために考慮される必要はない。プリミティブT2は、行R1,R2及び列C2,C3にのみ存在するビンと交差するように示されている。プリミティブT3は、行R0,R1及び列C2,C3に存在するビンのみと交差するように示されている。さらに、例示目的で3つのプリミティブのみが示されているが、スクリーンスペース領域702を占有することができるプリミティブの数はいくつであってもよいことに留意されたい。
【0064】
バッチビニングモードでは、プリミティブが処理される順序は次の通りである。T1-B0、T1-B1、T1-B2、T3-B2、T3-B3、T1-B5、T1-B6、T2-B6、T3-B6、T2-B7、T3-B7、T2-B10、T2-B11。したがって、複数のプリミティブが所定のビン(ビンB2,B6,B7の場合等)を区切るときはいつでも、これら全てのプリミティブセクションが連続して処理され、キャッシュ利用率及びメモリ効率が向上する。即時モードレンダリングでは、処理順序は、T1(これが区切る全てのビン)、T2、T3である。処理がビンB2,B6,B7に複数回戻るので、このラスタライズ順はメモリの非効率性を引き起こす。
【0065】
図8は、一実施形態による、バッチビニング及びソートを実行するシステム800の例示的な概略図である。システム800は、Vスパンソータ820に動作可能に接続されたVスパンラスタライザ810を含み、Vスパンソータ820は、Hスパンラスタライザ830に動作可能に接続されている。Hスパンラスタライザ830は、Hスパンソータ840に動作可能に接続されている。Vスパンラスタライザ810、Vスパンソータ820、Hスパンラスタライザ830及びHスパンソータ840の例示的な動作については、以下の
図9に示す例示的な方法のコンテキストで説明される。
【0066】
図9A~
図9Bは、一実施形態による、バッチビニング及びソートを実行する例示的な方法900A/900Bのフロー図である。ステップ910~950は、Vスパンラスタライザ810及びVスパンソータ820によって実行される。ステップ960~990は、Hスパンラスタライザ830及びHスパンソータ840によって実行される。ステップ910において、方法は、(例えば、プリミティブパイプライン310から)プリミティブを受信し、当該プリミティブが区切る行によってプリミティブを記憶する(すなわち、Vスパンラスタライザ810が、プリミティブが区切る行を計算して行ソータ(例えば、Vスパンソータ820)に記憶する)ことによって開始する。例えば、
図7に戻ると、プリミティブT1は、ビンB0,B1,B2,B5,B6を区切り、これらは行R0,R1にのみ位置する。したがって、R0は、プリミティブT1が区切る最小(min)行であり、R1は、プリミティブT1が区切る最大(max)行である。プリミティブT2は、ビンB6,B7,B10,B11(行R1,R2にのみ位置する)を区切るので、R1は、プリミティブT2が区切る最小行であり、R2は、プリミティブT2が区切る最大行である。プリミティブT3は、ビンB2,B3,B6,B7(行R0,R1にのみ位置する)を区切るので、R0は、プリミティブT3が区切る最小行であり、R1は、プリミティブT3が区切る最大行である。これらの最小行及び最大行は、Vスパンソータ820に記憶される。情報は、16のプリミティブ幅(例えば、16の最小行ID及び最大行ID)のメモリに記憶され、プリミティブの行毎にプリミティブのグループサイズで符号化される。符号化は、プリミティブのセットが接触する行の最小値の中の最小値及び最大値の中の最大値(例えば、R0(T1の最小値)及びR2(T2の最大値))、及び/又は、行のマスク(例えば、階層的マスク)の形態であってもよい。すなわち、全てのプリミティブによって区切られる行(例えば、T1,T2,T3の場合にはR0,R1,R2)、又は、プリミティブのグループによって区切られる行(例えば、プリミティブT1,T3の場合にはR0,R1)を表す行マスクを記憶することができる。
【0067】
バッチ中断条件(すなわち、T1,T2,T3等のプリミティブのバッチの処理を終了させる条件)が満たされない場合(ステップ920)、方法は、ステップ910に戻る。例えば、バッチ中断条件は、プリミティブを記憶するのに十分なスペースがメモリにない場合、バッチをフラッシュする(すなわち、処理をコミットする)イベントがドライバによって処理に挿入された場合、又は、十分な状態コンテキストがない場合に発生する。状態コンテキストは、例えば、ピクセルシェーダのエクスポート数、頂点シェーダのパラメータの数、アンチエイリアシングモードが有効かどうか、ピクセル当たりのサンプル数、レンダリングターゲットの数等のように、描画に関連する全てのレジスタデータを含む。しかしながら、ステップ920でバッチ中断条件が満たされると、ステップ940でさらに処理するために、プリミティブを含む各行が送信される(ステップ930)。すなわち、Vスパンラスタライザ810は、ステップ930においてプリミティブを含む各行を方法900Aの次のステップ(すなわち、ステップ940)に送信することによって、ステップ920においてバッチ中断条件を満たす場合に当該次のステップにおいて各行がプリミティブを含むと考慮することによって、方法900Aを実行し続ける。
【0068】
ステップ940では、ステップ930において送信された行からの全てのプリミティブが、ステップ960におけるさらなる処理のために送信される。すなわち、Vスパンラスタライザ810及びVスパンソータ820は、ステップ930でのさらなる処理のために送信された行からの全てのプリミティブを、ステップ960でのさらなる処理のためにHスパンラスタライザ830及びHスパンソータ840に送信することによって、方法900Aを実行し続ける。方法は、この時点で複数の方向に進む。例えば、方法はステップ950に進み、ここでは、例えば、スクリーンスペース領域702からの全ての行(すなわち、R0,R1,R2,R3)が処理されたかどうかが判別される。すなわち、ステップ940でさらに処理するために、ステップ930でプリミティブを含む全ての行が送信されたかどうかが判別される。これらが送信されていない場合、方法は、ステップ930に戻り、ステップ940でのさらなる処理のために、未だ送信されていないプリミティブを含む追加の行を送信する。送信されている場合、方法は、ステップ910に戻る。また、ステップ940で現在の行からの全てのプリミティブがさらなる処理のためにステップ960に送信されると、これらのプリミティブが(例えば、Hスパンラスタライザ830によって)受信され、(例えば、Hスパンソータ840によって)記憶され、これらのプリミティブが区切る列が計算され記憶される(ステップ960)。次に、プリミティブを含むように計算された各列は、ステップ980におけるさらなる処理のために送信される(ステップ970)。すなわち、Hスパンラスタライザ830は、ステップ970においてプリミティブを含む各列を方法900Bの次のステップ(すなわち、ステップ980)に送信することによって、当該次のステップにおいて各列がプリミティブを含むと考慮することによって、方法900Bを実行し続ける。例えば、
図7に戻ると、プリミティブT1が列C0を区切るので、当該列が送信される。ステップ980では、さらなる処理のためにステップ970で送信された列からの全てのプリミティブが、ステップ995におけるラスタライズのためにHスパンラスタライザ830及びHスパンソータ840によって送信される。このステップの後(すなわち、ステップ980)、例えば、スクリーンスペース領域702からの全ての列(すなわち、C0,C1,C2,C3)が処理されたかどうかが判別される(ステップ990)。すなわち、ステップ995でさらに処理するために、ステップ980でプリミティブを含む全ての列が送信されたかどうかが判別される。送信されている場合、方法は、ステップ960に戻る。送信されていない場合、方法は、ステップ970に戻り、ステップ980でのさらなる処理のために、未だ送信されていないプリミティブを含む追加の列を送信する。ステップ995では、(例えば、レンダリングのための境界領域を設定するための)シザー矩形が、現在の行及び列(例えば、ビンX、Y)に従って設定され、サブピクセル精度を有するラスタライザ(例えば、スキャンコンバータ314)によってラスタライズが実行される。
【0069】
したがって、
図7の例では、方法900(すなわち、900A及び900B)は、(例えば、Vスパンラスタライザ810を使用して)プリミティブについて行R0を調査し、次に、(例えば、Hスパンラスタライザ830を使用して)列C0,C1,C2,C3を調査することを含む。行R0の全ての列をクエリした後、方法は、戻って行R1をクエリし、次に、行R1の全ての列をクエリする。しかしながら、行及び列の最小値及び最大値の情報が分かっているため、プリミティブが交差していないことが分かっている行及び列のクエリは無視されることに留意されたい。したがって、さらなる行が処理される前に、R0を区切るバッチの全てのプリミティブが処理され、Vスパンラスタライザ810に送信される。
図7に示す例を再度使用すると、行R1が処理される前に、プリミティブT1,T3がVスパンラスタライザ810に送信される。
【0070】
本開示に含まれる教示に基づいて、図面に示されたもの以外のデータ処理デバイス、コンピュータシステム及び/又はコンピュータアーキテクチャを使用して実施形態を製造及び使用する方法が当業者には明らかであろう。特に、実施形態は、本明細書に記載されたもの以外のソフトウェア、ハードウェア及び/又はオペレーティングシステムの実装で動作することができる。
【0071】
(結論)
概要及び要約(もしあれば)ではなく、詳細な説明は、特許請求の範囲を解釈するために使用されていることを意図していると理解されたい。概要及び要約(もしあれば)は、発明者によって想定された1つ以上ではあるが全てではない例示的な実施形態を記載することができ、このため、本発明又は添付の特許請求の範囲を如何なる意味においても限定する意図はない。
【0072】
本明細書では例示的な分野及び用途についての例示的な実施形態を参照しながら本発明を説明してきたが、本発明はこれらに限定されないことを理解されたい。他の実施形態及びこれらに対する修正が可能であり、これらは本発明の範囲及び趣旨の範囲内である。例えば、本段落の一般性を制限することなく、実施形態は、図面に示される及び/又は本明細書に記載されたソフトウェア、ハードウェア、ファームウェア及び/又はエンティティに限定されない。さらに、実施形態(本明細書に明示的に記載されているかどうかに関わらず)は、本明細書に記載されている例以外の分野及び用途に対して著しい有用性を有する。
【0073】
本明細書では、特定の機能の実装及びこれらの関係を示す機能ビルディングブロックを用いて実施形態を説明した。これらの機能ビルディングブロックの境界は、説明の便宜上、本明細書では任意に定義されている。特定の機能及び関係(又は、これらの均等物)が適切に実行される限り、代替の境界を定義することができる。また、代替の実施形態は、本明細書に記載されたものとは異なる順序を使用して機能ブロック、ステップ、動作、方法等を実行してもよい。
【0074】
本明細書における「1つの実施形態」、「一実施形態」、「例示的な実施形態」又は類似の表現への言及は、記載された実施形態が特定の特徴、構造又は特性を含むことができることを示しているが、全ての実施形態が必ずしも特定の特徴、構造又は特性を含まなくてもよい。さらに、このような表現は、必ずしも同じ実施形態を指しているわけではない。さらにまた、特定の特徴、構造又は特性が実施形態に関連して説明される場合、このような特徴、構造又は特性を他の実施形態に組み込むかどうかは、本明細書で明示的に言及又は説明しているかどうかに関わらず、当業者の知識の範囲内であろう。
【0075】
本発明の広さ及び範囲は、上記の例示的な実施形態の何れによっても限定されるべきではなく、以下の特許請求の範囲及びこれらの均等物に従ってのみ定義されるべきである。