(57)【特許請求の範囲】
【請求項１】
グラフィック処理システムで使用するためのグラフィックスプロセッサを操作する方法であって、
前記グラフィックスプロセッサが、
コマンドリストの一部に含まれるコマンドに対する応答として描画される複数のプリミティブのうちから、サンプリング点の集合の中のそれぞれのサンプリング点に関して処理する1つまたは複数のプリミティブを選択するのを補助することができるデータを導出するために、格納されている前記コマンドリストの一部に含まれるコマンドのシーケンスで第1の処理パスを実行し、
それぞれのサンプリング点で処理されるプリミティブを選択することを補助するための前記導出したデータを格納し、
前記格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブの前記シーケンスのうちから、第2の処理パスにおけるそれぞれのサンプリング点について処理される前記1つまたは複数のプリミティブを選択するのを助けるために前記格納されているデータを使用して、前記格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画される前記プリミティブを処理するために、前記コマンドのシーケンスで第2の処理パスを実行するステップを含み、
前記グラフィックスプロセッサによって実行されるグラフィックスコマンドのリストが、前記グラフィックスプロセッサにプリミティブを描画させることを命令するコマンドを含み、前記グラフィックスプロセッサによって前記コマンドが実行される前に用意され、メモリ内に格納され、
前記グラフィック処理システムに提供された前記コマンドリストの一部のコマンドシーケンスの最後に、グラフィックスプロセッサに前記コマンドリストの一部のコマンドシーケンスの先頭に戻り、前記コマンドリストの一部のコマンドシーケンスを再び実行させ、分岐が選択されたときに、前記第１の処理パスに続く前記第2の処理パスの実行をトリガーするように、前記グラフィック処理システムの状態の変化をトリガーする、条件分岐コマンドが含まれ、
前記分岐を選択するための条件は、前記グラフィック処理システムの現在状態であることを特徴とする方法。
【請求項２】
前記第1の処理パスは、それぞれのサンプル位置で可視である前記プリミティブを前記プリミティブの深さ値に基づき決定するためにそれぞれのサンプル位置で深さテストを実行するステップを含むことを特徴とする請求項1に記載の方法。
【請求項３】
前記コマンドリスト部分上の前記第1の処理パスは、前記コマンドリストの前記一部に含まれる前記コマンドに対する応答として描画される前記プリミティブ上で深さのみのレンダリングパスを実行するステップを含むことを特徴とする請求項1または2のいずれか一項に記載の方法。
【請求項４】
前記第1の処理パスで導出され、前記第1の処理パスの後に格納されるデータは、前記第1の処理パスから導出された深さバッファを含むことを特徴とする請求項1から3のいずれか一項に記載の方法。
【請求項５】
前記第2の処理パスのそれぞれのサンプリング点で処理される1つまたは前記プリミティブの前記選択または識別を補助するために前記第1の処理パスで導出され格納されるデータは、それぞれのサンプリング点について、前記第2の処理パスにおける前記サンプリングで処理される前記プリミティブを識別するために使用されうる識別子を含むことを特徴とする請求項1から4のいずれか一項に記載の方法。
【請求項６】
前記第1の処理パスを実行されたコマンドリストの前記一部に含まれる前記コマンドに対して実行される前記第2の処理パスは、前記プリミティブをディスプレイ上に表示するために必要な前記データを供給するレンダリングパスを含むことを特徴とする請求項1から5のいずれか一項に記載の方法。
【請求項７】
前記第2の処理パスは、前記第2の処理パスにおけるそれぞれのサンプリング点について処理される前記プリミティブを決定するために、前記第1の処理パスからの格納されているプリミティブ識別子を使用するか、または前記第2の処理パスは、前記第2の処理パスにおけるそれぞれのサンプリング点について処理される前記1つまたは複数のプリミティブを決定するために、前記第1の処理パスからの格納されている深さバッファ値を使用することを特徴とする請求項1から6のいずれか一項に記載の方法。
【請求項８】
前記グラフィックスプロセッサそれ自体で前記第1の処理パスについて前記コマンドリストから読み込まれたデータの一部または全部を格納して、次いで、前記第2の処理パスについて前記グラフィックスプロセッサ上のメモリ内で利用可能な状態にあるようにするステップを含むことを特徴とする請求項1から7のいずれか一項に記載の方法。
【請求項９】
グラフィックス処理システムであって、
コマンドリストの一部に含まれるコマンドに対する応答として描画される複数のプリミティブのうちから、サンプリング点の集合の中のそれぞれのサンプリング点に関して処理する1つまたは複数のプリミティブを選択するのを補助することができるデータを導出するために、格納されている前記コマンドリストの一部に含まれるコマンドのシーケンスで第1の処理パスを実行する手段と、
それぞれのサンプリング点で処理されるプリミティブを選択することを補助するための前記導出したデータを格納する手段と、
前記格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブの前記シーケンスのうちから、第2の処理パスにおけるそれぞれのサンプリング点について処理される前記プリミティブを選択するのを助けるために前記格納されているデータを使用して、前記格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画される前記プリミティブを処理するために、前記コマンドのシーケンスで第2の処理パスを実行する手段と、
グラフィックスプロセッサに前記コマンドリストの部分のコマンドシーケンスの開始に戻り、前記コマンドリストの部分のコマンドシーケンスを再び実行させ、分岐が選択されたときに、前記第１の処理パスに続く前記第2の処理パスの実行をトリガーするように、前記グラフィック処理システムの状態の変化をトリガーする、前記グラフィック処理システムに提供された前記コマンドリストの部分のコマンドシーケンスの最後に含まれる特殊な条件付き分岐コマンドに応答する手段と、
を備え、
グラフィックプロセッサにより実行される前記グラフィックス処理システムのリストは、前記グラフィックス処理システムにプリミティブを描画させることを命令するコマンドを含み、前記グラフィックス処理システムによって前記コマンドが実行される前に用意され、メモリ内に格納され、
前記分岐を選択するための条件は、前記グラフィックス処理システムの現在状態であることを特徴とするグラフィックス処理システム。
【請求項１０】
前記第1の処理パスを実行する手段は、それぞれのサンプル位置で可視である前記プリミティブを前記プリミティブの深さ値に基づき決定するためにそれぞれのサンプル位置で深さテストを実行する手段を含むことを特徴とする請求項9に記載のシステム。
【請求項１１】
前記コマンドリスト部分上で第1の処理パスを実行する手段は、前記コマンドリストの前記一部に含まれる前記コマンドに対する応答として描画される前記プリミティブ上で深さのみのレンダリングパスを実行する手段を含むことを特徴とする請求項9または10のいずれか一項に記載のシステム。
【請求項１２】
前記第1の処理パスで導出され、前記第1の処理パスの後に格納されるデータは、前記第1の処理パスから導出された深さバッファを含むことを特徴とする請求項9から11のいずれか一項に記載のシステム。
【請求項１３】
前記第2の処理パスのそれぞれのサンプリング点で処理される1つまたは前記プリミティブの前記選択または識別を補助するために前記第1の処理パスで導出され格納されるデータは、それぞれのサンプリング点について、前記第2の処理パスにおける前記サンプリングで処理される前記プリミティブを識別するために使用されうる識別子を含むことを特徴とする請求項9から12のいずれか一項に記載のシステム。
【請求項１４】
前記第1の処理パスを実行されたコマンドリストの前記一部に含まれる前記コマンドに対し第2の処理パスを実行する手段は、前記プリミティブをディスプレイ上に表示するために必要な前記データを供給するレンダリングパスを実行する手段を含むことを特徴とする請求項9から13のいずれか一項に記載のシステム。
【請求項１５】
前記第2の処理パスを実行する手段は、前記第2の処理パスにおけるそれぞれのサンプリング点について処理される前記プリミティブを決定するために、前記第1の処理パスからの格納されているプリミティブ識別子を使用する手段、および/または前記第2の処理パスにおけるそれぞれのサンプリング点について処理される前記1つまたは複数のプリミティブを決定するために、前記第1の処理パスからの格納されている深さバッファ値を使用する手段を含むことを特徴とする請求項9から14のいずれか一項に記載のシステム。
【請求項１６】
グラフィックスプロセッサそれ自体で前記第1の処理パスについて前記コマンドリストから読み込まれたデータの一部または全部を格納して、次いで、前記第2の処理パスについて前記グラフィックスプロセッサ上のメモリ内で利用可能な状態にあるようにする手段を備えることを特徴とする請求項9から15のいずれか一項に記載のシステム。
【請求項１７】
データ処理手段上で実行されたときに請求項1から8のいずれか一項に記載のステップを実行するコンピュータソフトウェアコードを備えることを特徴とするコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータグラフィックスの処理に関するものであり、具体的には、例えば、ディスプレイ画面に表示する三次元(3D)グラフィックスの処理に関するものである。
【背景技術】
【０００２】
当業で知られているように、3Dグラフィックス処理は、通常、表示するシーンを複数の類似の基本コンポーネント(いわゆる「プリミティブ」)に分割して、3Dグラフィックス処理オペレーションを実行しやすくすることから始める。これらの「プリミティブ」は、通常、三角形などの単純な多角形の形態をとる。
【０００３】
表示するシーンに対応するプリミティブは、通常、グラフィックス処理システム用のアプリケーションプログラムインターフェイスにより生成され、そのために、グラフィックスの表示を必要とするアプリケーション(例えば、ゲーム)から受け取ったグラフィックス描画命令(リクエスト)を使用する。
【０００４】
それぞれのプリミティブは、このステージでは、通常、一組の頂点により定義され、一組の頂点により表される。1つのプリミティブに対するそれぞれの頂点には、その頂点を表す一組のデータ(位置、色、テクスチャ、および他の属性データ)が関連付けられている。次いで、このデータは、例えば、表示する頂点(頂点が関係する(複数の)プリミティブ)のラスター処理およびレンダリングを行うときに使用される。
【０００５】
例えばシーンを表示するために、シーンに対するプリミティブおよびそれらのプリミティブの頂点が生成され、定義された後、これらは、グラフィックス処理システムにより処理されうる。
【０００６】
このプロセスは、基本的に、処理するシーン領域を覆うサンプリング点の配列の中のどのサンプリング点が1つのプリミティブによって覆われるかを決定すること、およびそのサンプリング点でそのプリミティブを表すためにそれぞれのサンプリング点が(例えば、色などに関して)持つべき外観を決定することを伴う。これらのプロセスは、一般に、ラスター処理およびレンダリングとそれぞれ称される。
【０００７】
ラスター処理プロセスでは、1つのプリミティブに対し使用すべきサンプル位置(つまり、表示するシーン内でプリミティブを表すために使用するサンプル点の(x,y)位置)を決定する。これは、典型的には、1つのプリミティブの複数の頂点の位置を使用して決定される。
【０００８】
次いで、レンダリングプロセスは、サンプル点でプリミティブを表示する(つまり、それぞれのサンプル点に「陰影を付ける」)のに必要な、赤色、緑色、および青色(RGB)値ならびに「アルファ」(透明度)値などのデータを導出する。これは、当業で知られているように、テクスチャの適用、サンプル点データ値のブレンドなどを伴うことがある。
【０００９】
(3Dグラフィックスの文献では、「ラスター処理」という用語は、ときには、サンプル位置およびレンダリングへの両方のプリミティブ変換を指すために使用される。しかし、ここでの「ラスター処理」は、サンプリング点アドレスのみへのプリミティブデータの変換を指すために使用される。)
【００１０】
これらのプロセスは、典型的には、サンプリング点を、グラフィックス処理オペレーション(レンダリングなど)の実行対象となる「フラグメント」と通常呼ばれる個別のグラフィック構成要素として「表現する」ことにより実行される。それぞれのそのようなフラグメントは、所定の1つのサンプリング点またはサンプリング点の集合に対応し、実際に、注目するその1つのまたは複数のサンプリング点(フラグメントを使用してレンダリングされる(複数の)サンプリング点)でプリミティブを表現し、それをレンダリングするために使用されうる。
【００１１】
したがって、「フラグメント」は、事実上、プリミティブの所定の1つ(または複数)の画面空間サンプル点に補間されるようなプリミティブデータの集合(に関連付けられたもの)である。これは、さらに、注目する(複数の)サンプル点(フラグメント位置)でプリミティブに陰影を付けるのに必要なプリミティブ毎のおよび他の状態データをも含むことができる。それぞれのグラフィックスフラグメントは処理されるときにシーンの1つの「ピクセル」に事実上相当するものと考えるのは道理にかなっている。
【００１２】
実際、それぞれのグラフィックス「フラグメント」は、最終的な表示に含まれる単一ピクセル(画素)に対応しうる(ピクセルは、最終的な表示内において特異点であるため、グラフィックスプロセッサのオペレーション(レンダリング)対象の「フラグメント」と表示のピクセルとの間に1対1のマッピングがありうる)。しかし、フラグメントと表示ピクセルとの間に1対1対応関係がない場合もありえ、例えば、縮小などの特定の形態の後処理が最終画像を表示するのに先立ってレンダリングされた画像に対し実行される。
【００１３】
「直接モード」グラフィックス処理またはレンダリングと通常呼ばれる、グラフィックス処理に関して知られている技術の1つでは、プリミティブは、生成されるときに次々に処理される(ラスター処理およびレンダリング)。
【００１４】
このタイプのシステムでは、プリミティブ(その頂点)は、先着順でグラフィックスシステムに渡され、したがって、プリミティブは、受け取った順にレンダリングされる。
【００１５】
また、グラフィックス処理システムでは、いわゆる「タイルベース」または「遅延」レンダリングを使用することも知られている。タイルベースレンダリングでは、シーン全体が直接モードレンダリングで事実上一度に処理されるのとは異なり、表示するシーンは、通常「タイル」と呼ばれる複数のより小さな部分領域に分割される。それぞれのタイル(部分領域)は、別々に(典型的は次々に)レンダリングされ、次いでレンダリングされたタイル(部分領域)は再結合されて、表示できる完全なシーンを構成する。このような構成において、シーンは、典型的には、規則正しいサイズおよび形状の部分領域(タイル)(通常は、例えば、正方形または矩形)に分割されるが、これは、本質的なことではない。
【００１６】
直接モードとタイルベースレンダリングの両方において、ラスター処理およびレンダリングプロセスへの入力は、典型的には、グラフィックスプロセッサによって実行されるグラフィックスコマンドのリストを含む。この「コマンドリスト」は、当業で知られているように、プリミティブを描画するようグラフィックスプロセッサに命令するコマンド、およびレンダリング状態変更、タイル開始および停止コマンド(タイルベースシステムの)などの他のグラフィックスプロセスを命令するコマンドを含む。
【００１７】
直接モードのレンダリングでは、このコマンドリストは、単純に、次々に実行されるコマンドを列挙するだけであるが、タイルベースのレンダリングでは、リストは、複数の「タイル」に分割されうる、および典型的には分割される(つまり、他のタイルに対するコマンドと別にそれぞれのタイルについてコマンドを列挙する)。
【００１８】
現行のグラフィックス処理システムの欠点の1つは、プリミティブは逐次的に処理され、また典型的には、完全な前から後ろへの順でないため、所定のサンプリング点(したがってフラグメントおよびピクセル)は、シーンが表示のため処理されるときに複数回陰影付けされうることである。これは、最初に受け取って、レンダリングされたプリミティブが後のプリミティブによって順次覆われるときに生じ、したがって、レンダリングされた最初のプリミティブは、実際には注目する(複数の)ピクセル(および(複数の)サンプリング点)では見えない。プリミティブは、この方法で何回か上書きされることがあり、これにより、典型的には、複数の、最終的には冗長な、レンダリングオペレーションがレンダリングされるシーン毎に実行されることになる。この現象は、一般に「オーバードロー」と称される。
【００１９】
このような最終的に冗長なオペレーションを実行する結果としては、フレームレートの低下、およびメモリ帯域幅要件の増大がある(例えば、後のプリミティブによって上書きされるプリミティブに対するデータをフェッチする結果として)。これらは両方とも、望ましいものでなく、グラフィックス処理システムの全体的性能を低下させる。これらの問題は、レンダリングされるシーンが広くなり、複雑になるほど(潜在的に見えるビュー内の表面が増えるので)、またプログラム可能なフラグメントシェーディングの使用が増大すると(プログラム可能なフラグメントシェーディングを使用して所定のフラグメントに陰影を付けるコストが比較的大きいので)、悪化する傾向がある。
【００２０】
「オーバードロー」の問題は、前から後ろへの順でレンダリングするプリミティブを送ることにより著しく低減される可能性がある。しかし、テクスチャなどの資源へのコヒーレントなアクセスの必要性およびフレーム毎のAPIコール数を最小限に抑える必要性などの他のグラフィックス処理要件のせいで、一般的には、プリミティブに対する他の好ましい順序付け要件が必須になる。また、レンダリングの前に行うプリミティブの完全な前から後ろへのソートは実用的でない場合があるが、それでもグラフィックス処理ユニットに対するプリミティブの十分なスループットを維持する。これらおよび他のファクターは、1つのフレームに対するプリミティブの前から後ろへの順序付けが、一般的には、実際に可能である、または望ましいというわけではないことを意味している。
【００２１】
したがって、表示するシーンを処理するときに実行される「オーバードロー」の量を減らすことを試みる多くの他の技術が提案されている(つまり、不可視のプリミティブおよび/またはフラグメントなどのレンダリングを避ける)。
【００２２】
例えば、プリミティブ(またはフラグメント)がレンダリングのため送られる前に、いくつかの形態の隠面消去を実行し、プリミティブ(またはフラグメントなど)がすでにレンダリングされているプリミティブ(またはフラグメント)によって遮られるかどうか(その場合、新しいフラグメントおよび/またはプリミティブはレンダリングされる必要はない)を確認することが知られている。このような隠面消去は、例えば、当業で知られているように、早期閉塞カリングおよび/または早期Z(深さ)試験プロセスを含むことができる。
【００２３】
しかし、これらの「早期」(レンダリングの前の)隠面消去技術では、新しいプリミティブまたはフラグメント(「早期」テストされているプリミティブまたはフラグメント)が処理されるときにすでにレンダリングされているプリミティブを考慮することしかできない。これは、関連するテストデータ(Zバッファなど)が、すでに処理されているプリミティブに対するデータのみを含むからである。したがって、これらのテストでは、例えば、プリミティブが実際にレンダリング順序で後の方のプリミティブにより塞がれる「オーバードロー」を回避することはできない。
【００２４】
また、アプリケーション(例えば、ゲーム)開発者が、それぞれのシーンが実際に2回レンダリングされ、まず最初にZテストおよびZ書き込み以外のすべてのレンダリング状態を無効化してすべての不透明シーンジオメトリを描画し、次いで2度目に、完全なレンダリング状態を有効化してすべての不透明シーンジオメトリを描画するようにアプリケーションを構成することも知られている。
【００２５】
これは、第1のレンダリングパスが、それぞれのフラグメント(サンプル)位置に対する最も近い不透明プリミティブのZ(深さ)値をZバッファに有効に書き込む効果を有する。第2の完全なレンダリングパスでは、次にZバッファが最も近い不透明プリミティブのZ値を書き込まれるので、第2のパスにおける早期Zテストでは、塞がれているフラグメントをより効果的に除去することができ、特に、注目するフラグメントに先立ってレンダリングされたプリミティブだけでなく、第1の「Z-only」レンダリングパスでレンダリングされたすべてのプリミティブを考慮する。
【００２６】
したがって、この技術は、より効率的な早期Zテストプロセスを実現しうるが、所定のシーンがアプリケーションによって生成されなければならず、またグラフィックス処理システムによって2回、つまりZ-onlyパスで1回、次いで再び、「完全」レンダリングパスでもう1回処理されなければならないという不利点を有する。これは、性能の高い、例えば、デスクトップ、グラフィックスシステムではあまり問題になりえないが、他の、携帯型およびモバイルデバイスなどの性能の低いグラフィックスシステムは、例えば、それぞれの潜在的に見えるシーン全体を2回生成してレンダリングすることが望ましくないものとなる帯域幅の制約を有することがある。
【００２７】
Timo Alia、Ville Miettinen、およびPetri Nordlund著「Delay Streams for Graphics Hardware」、Siggraph 2003で説明されている、他の提案では、グラフィックス処理パイプラインは、遅延ストリームおよび第2の早期閉塞テストステージを含むように修正されている。第2の早期閉塞テストは、ラスター処理およびレンダリングの前に、ただし第1の早期閉塞テストステージおよび遅延ストリームの後に、実行される。
【００２８】
ここでの考え方は、所定のプリミティブまたはフラグメントが第2の早期閉塞テストステージに達するまでに、より多くのフラグメントが、例えば、Zバッファデータに関わっているはずであり(意図的な遅延ストリームで、プリミティブまたはフラグメントが第2の早期閉塞テストステージに達する前により多くのフラグメントがその処理を完了する時間的余裕を持たせられるため)、第2の閉塞テストステージにおいて標準の単一早期閉塞テスト構成の場合よりも多くのプリミティブを考慮することができるというものである。
【先行技術文献】
【非特許文献】
【００２９】
【非特許文献１】Timo Alia、Ville Miettinen、およびPetri Nordlund著「Delay Streams for Graphics Hardware」、Siggraph 2003
【発明の概要】
【発明が解決しようとする課題】
【００３０】
しかし、この構成では、第2の早期閉塞テストステージおよび遅延ストリームの追加など、グラフィックス処理パイプラインにいくつか修正を施す必要がある。
【００３１】
したがって、出願人は、グラフィックス処理システムにおける「オーバードロー」の問題を軽減することを試みる改善の余地がまだあると確信している。
【課題を解決するための手段】
【００３２】
本発明の第1の態様によれば、グラフィックスプロセッサによって実行されるグラフィックスコマンドのリストが、グラフィックスプロセッサにプリミティブを描画させることを命令するコマンドを含み、グラフィックスプロセッサによってそのコマンドが実行される前に用意され、メモリ内に格納される、グラフィックスプロセッサを操作する方法が提供され、この方法は、
グラフィックスプロセッサが、
コマンドリストの一部に含まれるそれらのコマンドに対する応答として描画される複数のプリミティブのうちから、サンプリング点の集合の中のそれぞれのサンプリング点に関して処理する1つまたは複数のプリミティブを選択するのを補助することができるデータを導出するために、格納されているコマンドリストの一部に含まれるコマンドのシーケンスで第1の処理パスを実行し、
それぞれのサンプリング点で処理されるプリミティブを選択することを補助するための導出データを格納し、
第2の処理パスにおけるそれぞれのサンプリング点について処理される1つまたは複数のプリミティブを、格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブのシーケンスのうちから選択するのを助けるため格納されているデータを使用して、格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブを処理するために、コマンドのこのシーケンスで第2の処理パスを実行するステップを含む。
【００３３】
本発明の第2の態様によれば、グラフィックス処理システムによって実行されるグラフィックスコマンドのリストが、グラフィックス処理システムにプリミティブを描画させることを命令するコマンドを含み、グラフィックス処理システムによってそのコマンドが実行される前に用意され、メモリ内に格納される、グラフィックス処理システムが実現され、このグラフィックス処理システムは、
コマンドリストの一部に含まれるそれらのコマンドに対する応答として描画される複数のプリミティブのうちから、サンプリング点の集合の中のそれぞれのサンプリング点に関して処理する1つまたは複数のプリミティブを選択するのを補助することができるデータを導出するために、格納されているコマンドリストの一部に含まれるコマンドのシーケンスで第1の処理パスを実行する手段と、
それぞれのサンプリング点で処理されるプリミティブを選択することを補助するための導出データを格納する手段と、
第2の処理パスにおけるそれぞれのサンプリング点について処理されるプリミティブを、格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブのシーケンスのうちから選択するのを助けるため格納されているデータを使用して、格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブを処理するために、コマンドのこのシーケンスで第2の処理パスを実行する手段とを備える。
【００３４】
本発明は、格納されているグラフィックスコマンドリスト(つまり、一組のグラフィックスコマンド)の一部に含まれるコマンドのシーケンスが1回処理されて、サンプリング点の集合の中のそれぞれのサンプリング点においてどのプリミティブが処理されるかを選択するのを助ける情報を決定し(例えば、好ましくは、以下でさらに説明されるように、どのプリミティブが可視であるかを決定し)、次いで2度目に処理されるが、ただし、決定されたプリミティブ情報を使用して第2の処理パスにおいて所定のサンプリング点に対しどのプリミティブが処理(レンダリング)されるべきかを識別するのを助ける、グラフィックス処理システムおよび方法を実現する。
【００３５】
言い換えると、上述のアプリケーション駆動型の2ステージレンダリングプロセスと同様に、本発明では、第1の処理パスを使用して、所定の(およびそれぞれの)サンプリング点についてレンダリングされるプリミティブの集合(コマンドリストの一部が対応するプリミティブの集合)の中のプリミティブを決定する(例えば、好ましくは、プリミティブの可視性を決定する)のを助け、次いで、決定されたプリミティブ処理(例えば、可視性)情報を使用する第2の処理パスを実行する。
【００３６】
したがって、本発明は、とりわけ、コマンドリストの一部に対応するプリミティブの第2の処理(レンダリング)パスが、それぞれのサンプリング点において処理されるプリミティブに関するより正確な、および/または詳細な情報を使用して実行され、これにより、例えば、第2のパスに対しレンダリングプロセスからプリミティブおよびフラグメントをより効率的にカリングすることができ、またこれにより、第2の処理パスで生じるオーバードローの量を減らすか、さらにはオーバードローをなくすことができ、その結果有効利用できるようになり、またそのパスについて上で説明されている問題を軽減することができる、システムを実現する。特に、本発明では、例えば、レンダリング順序に関して後の方で到達するプリミティブから生成されるフラグメントによって塞がれるプリミティブを第2の処理パスで考慮できる(したがって、例えば、1つのサンプリング点について不可視プリミティブをレンダリングするのを回避できる)。
【００３７】
さらに、本発明は、特にグラフィックスプロセッサがモバイルおよび携帯型デバイスで使用されうるような性能のおよび/または制約されたシステムで使用されるという状況において、上述の2ステージアプリケーション駆動型構成に勝る構成を実現する。
【００３８】
特に、本発明では2つの処理「パス」のそれぞれについて格納されているコマンドリストを使用するので、アプリケーションレベルのアプローチでは生じるような(アプリケーションレベルのアプローチでは、一組の新しいプリミティブコマンドなどが、たとえ同じプリミティブ集合を生成するとしても、第2のレンダリングパスのためにグラフィックスプロセッサに送られるため)、2度目に再びシーンを完全に生成する必要性が回避される。
【００３９】
これは、例えば、本発明におけるメモリ帯域幅および処理に関する著しい節約をもたらしうるが、それは、例えば、プリミティブに対するジオメトリが2回処理される(例えば、変換されクリッピングされる)必要がなく、またタイルベースシステムでは、ジオメトリをタイル内に2回ソートする必要がないからである。同様に、アプリケーションのシーンデータ構造体も、2回取り出される必要はない。
【００４０】
本発明は、さらに、アプリケーション(例えば、ゲーム)開発者による特定のアクションまたはステップを一切必要としないものとすることができる。両方の処理パスに対し同じコマンドリストおよびデータ構造体を使用するので、本発明を実装するために必要な修正は、グラフィックス処理システムそれ自体において実行することができ、したがってホストシステムおよびアプリケーションのオペレーションに対し変更を加える必要がない。
【００４１】
本発明は、さらに、上述の遅延ストリームおよび第2の早期閉塞テスト構成よりも有利であるが、それは、本発明が、例えば、この「遅延ストリーム」構成が必要とする既存のグラフィックス処理パイプラインに対するアーキテクチャ上の修正を必要としないからである。
【００４２】
実際、本発明の鍵となる利点は、既存の、および知られているグラフィックス処理アーキテクチャにおいて、またそのために使用することができ、また特に、その利点を発揮させるために既存の、および知られているパイプラインコンポーネントおよび機能を単純に再利用できる点である。これは、とりわけ、本発明が、第2の一組のコマンドを発行して、実際に、プリミティブをもう一度生成する(アプリケーションレベルのアプローチのように)代わりに、また単一のレンダリングパスでさらに多くの可視性情報を使用できるようにパイプラインを修正する(「遅延ストリーム」アプローチのように)代わりに、所定のコマンドリスト(の一部)をグラフィックスパイプラインに2回通すことにより効果的に機能するからである。
【００４３】
格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブのうちどれが本発明の第2の処理パスにおけるそれぞれのサンプリング点について処理されるかを選択することを補助するためのデータを導出または決定する第1の処理パスは、例えば、プリミティブがサンプリング点で処理されるかどうかを決定するために使用される基準に応じて、所望の、好適な方法で実行されうる。
【００４４】
好ましくは、第1の処理パスでは、サンプリング点集合の中のそれぞれのサンプリング点について、それぞれのサンプリング点に対し処理される1つまたは複数のプリミティブの選択を補助するために使用されうるデータを決定する。
【００４５】
(ここで、「第1」の処理パスと記述しているが、これは、そのパスを単純に本発明の処理パスのうちの第1の処理パスであるものとして区別することを意図されており、例えば、そのパスが実行されうるコマンドリスト(または他の何らかのもの)上のすべての処理パスのうちの第1のパスであることを要求するわけではない(そのような場合もありうるけれども)ことに留意されたい。同様のことが、「第2」の処理パスという記述に対し当てはまる。また、他の処理パスが、本発明の第1の処理パスと第2の処理パスとの間で実行されることも可能であろう(好ましいことではないが)。
【００４６】
同様に、コマンドリスト部分に含まれるコマンドで処理パスを実行すると記述されている場合、これは、グラフィックス処理システムによるそれらのコマンドの一部または全部の実行を伴う処理を指し示すことを意図されており、リストへの書き込みなどの、コマンドリストそれ自体のある種の形態の処理の実行を指し示すことを意図されていない。本発明の処理パスでは、コマンドリストが読み込まれ、そのコマンドが実行される(適宜)。つまり、コマンドリストはそれ自体書き込まれることはない。
【００４７】
特に好ましい一実施形態では、第1の処理パスにおいて、コマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブのうちのどの(複数の)プリミティブが注目するサンプリング点で可視となるかの識別を補助しうるデータを導出または決定する。これは、例えば、コマンドリスト部分に対応するプリミティブを通る第2のパスで、必要ならば、可視プリミティブのみを処理(例えば、好ましくはレンダリング)し、これにより、例えば、所定のサンプリング点で実際には可視とならないプリミティブを第2の処理パスにおいてレンダリング(処理)するのを回避することができるので特に有用である。
【００４８】
したがって、特に好ましい一実施形態では、それぞれのサンプリング点で処理されるコマンドリストの一部に対応する複数のプリミティブからの1つまたはそのプリミティブの選択を補助するためにデータを導出するステップまたは手段は、コマンドリストの一部に対応する(それに対する応答として描画される)複数のプリミティブのうちのどの1つまたは複数のプリミティブがそれぞれのサンプリング点で可視であるか、または可視である可能性があるかの識別を補助することができるデータを導出または決定する(そして次いで、そのデータを格納する)ステップを含む。
【００４９】
これらの構成におけるプリミティブの可視性「テスト」は、必要に応じて実行されうるが、好ましい一実施形態では、当業で知られているように、プリミティブのZ(深さ)値に基づきそれぞれのサンプル位置で可視(例えば、好ましくは、定義されている可視性テストに応じて、最も近い)プリミティブを決定するためにそれぞれのサンプル位置で深さ(Z)テストを実行するステップを含む。
【００５０】
そのため、特に好ましい一実施形態では、第1の処理パスは、好ましくは、プリミティブのZ(深さ)値に基づき、それぞれのサンプル位置で処理される1つまたはそのプリミティブを識別するために使用されうるデータを決定するために、それぞれのサンプル位置でコマンドリストの一部に対応するプリミティブ上でZテスト(深さテスト)を実行するステップを含む。
【００５１】
これらの構成では、例えば処理されるプリミティブを決定するために使用される深さテストZ比較機能は、必要に応じて(また、処理されるグラフィックスデータに関して適宜-実際には、処理されるデータ(プリミティブ)に対し定義されたテストが使用されるべきである)<(より小さい)、<=(以下)、>(より大きい)、または>=(以上)とすることが可能である。
【００５２】
好ましくは、プリミティブは、深さ(または他の)試験を実行できるように第1の処理パスで適切な方法により(また、好ましくは、深さ(または他の)試験に関する限り注目するグラフィックス処理システムに対し通常の方法で)レンダリングされる。
【００５３】
同様に、本発明の特に好ましい一実施形態では、本発明の第1の処理パスで導出される「プリミティブ選択」データは、処理されるコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブを処理することから(例えば、導出されたデータを使用することから)(および好ましくはプリミティブをレンダリングすることから)(少なくとも一部は)導出されることはここでは理解されるであろう。同様に、本明細書でさらに説明されるように、本発明は、好ましくは、第1の処理パスにおいて、処理されるコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブをレンダリング(描画)し(好ましくは、以下でさらに説明されるように、より限定された、例えば「深さのみ」の方式で)、次いで、第2の処理パスで(好ましくはこのときには表示(出力)のために)再び処理されるコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブをレンダリング(描画)するステップを含む。
【００５４】
特に好ましい一実施形態では、それぞれのサンプリング点で処理される1つまたはそのプリミティブ(例えば、可視であるか、または可視になる可能性のある)の選択を補助するためのデータを決定するのに必要な処理(レンダリング)のみが、第1の処理パスで実行される。これは、コマンドリストの一部に含まれるいくつかのコマンドが、第1の処理パスでは実際には実行されないことを意味することがある。
【００５５】
したがって、深さテストベースの決定の場合、特に好ましい一実施形態では、コマンドリスト部分に対する第1の処理パスは、好ましくは、コマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブに対しZ-only(深さのみ)レンダリングパス、つまりプリミティブがレンダリングされるが、有効にされているレンダリング状態のみがZの読み込みおよび書き込みおよびZテストである処理パスを実行するステップを含む。
【００５６】
コマンドリストを介した第1の処理パスで実行される処理を制限するステップは、処理パスをより効率的なものにでき、また消費する資源が少なくて済むという利点を有し、したがって、例えば、制約のきついシステムで実行する許容性が高まる。例えば、Z-onlyレンダリングパスの場合、Zバッファに書き込みが行われうるが、他のメモリアクセスは、減少するか、または最小限に抑えられ、フラグメントプロセッサはアイドル状態のままにされうる。
【００５７】
そのため、特に好ましい一実施形態では、コマンドリスト(格納されているコマンドリストの一部に対応するプリミティブの)の第1の処理パスは、それぞれのサンプリング点で処理される1つまたはそのプリミティブの選択を補助するためのデータを決定するのに必要な処理のみを実行するステップを含む。
【００５８】
したがって、深さテストベースのテストの場合、好ましい一実施形態では、格納されているコマンドリストの一部に対応するプリミティブの第1の処理パスは、処理される格納されているコマンドリストの一部に対応するプリミティブのうちどの1つまたは複数のプリミティブを第2の処理パスにおけるそれぞれのサンプリング点で処理することができるか、または処理すべきか(例えば、可視となるか)の識別を補助するデータを決定するためにプリミティブ上でZ-onlyレンダリングパスを実行するステップを含む。
【００５９】
しかし、また、必要ならばコマンドリストを介して第1の処理パスにおけるそれぞれのサンプリング点で処理される(複数の)プリミティブに関係するデータを決定するのに必要な最小限以上の処理を実行することも可能であろう。これは、例えば、第1の処理パスにおいて他の有用なデータ構造体を構築できるようにするために望ましい場合がある。例えば、第1の処理パスでは、さらに、第2の処理パスで使用するためにプリミティブが処理され、そのデータが次いで格納される(例えばバッファリングされる)いくつかの補間オペレーションを実行することも可能であろう。
【００６０】
グラフィックス処理システムは、好適な、所望の方法で、第1の処理パスを実行するように構成されうる。好ましくは、これは、この目的のために適したレンダリング状態(Z-onlyレンダリング状態など)に設定される。(当業で知られているように、グラフィックスプロセッサが設定されるレンダリング状態は、プロセッサが、受け取ったグラフィックスプリミティブに対して実行する処理を決定し、したがって、実行される処理を制御するために使用できる。)
【００６１】
この目的のための(レンダリング)「状態」は、第1の処理パスについてコマンドリストの一部を送る前に、例えば、当業で知られているように、プロセッサをフラッシュし、その状態を新しい(例えば、Z-only)状態に大域的に(つまり、すべての処理ユニットについて)設定することにより設定されうる。
【００６２】
しかし、好ましい一実施形態では、出願人の以前の英国特許出願第2420261号で説明されている技術などにおいて、グラフィックス処理システムが、例えばプリミティブおよび/またはフラグメントに関連付けられうる多数の定義済みレンダリング状態を有する場合、好ましくは、利用可能な定義済みレンダリング状態(インデックス「0」(または他のインデックス)のレンダリング状態など)の1つは、本発明の第1の処理パスに使用されるレンダリング状態(例えば、好ましくは、Z-onlyレンダリング状態)に設定される。これにより、次いで、例えば、プリミティブ(および/またはフラグメントなど)に、これらが第1の処理パスに送られるときに、適切な「第1のパス」レンダリング状態インデックスなどをタグとして付け、例えば処理パイプライン全体の状態を大域的にフラッシュして変更しなくても、それに応じた処理が行われるようにできる。
【００６３】
好ましくは、この構成では、本発明の方法による第1の処理パスが、一組のコマンドに対してトリガーされたときに、その一組のコマンドに対する応答として描画されるそれぞれのプリミティブ(例えば、レンダリング状態インデックス(またはタグなど))に関連付けられている定義済みレンダリング状態は、プリミティブが第1のパス処理に送られる前に定義済み「第1のパス」レンダリング状態に変更される(書き換えられる)(ただし、このパスについてのみ変更される)。これにより、次いで、プリミティブは例えばそのパスに対するZ-onlyの第1のパスレンダリング状態を自動的にピックアップすることができ、しかも、それの、および/またはプロセッサのレンダリング状態の早期の再定義またはその状態への変更を行わなくてよい。
【００６４】
これは、同様に、グラフィックス処理システムがフラグメントシェーディングプログラムをサポートしている場合に好ましいが、それは、第1のパス(例えば、Z-only)処理(レンダリング状態)用に予約され、使用される定義済みフラグメントプログラムアドレスがあるからである。これにより、ここでもまた、次いで、本発明の第1のパスに通されるときに、プリミティブおよびフラグメントに、この定義済みフラグメントプログラムアドレスをタグとして付けることができ、そうすることで、例えば、大域的な第1のパス(例えば、Z-only)状態をグラフィックスプロセッサに適用する必要性、ならびに/あるいはプリミティブおよび/またはフラグメントが本発明の第1のパスに通されるという情報を送るようにプロセッサの直接ステージを修正する必要性も回避されうる。
【００６５】
したがって、これらの構成における予約されているプログラムアドレスは、第1のパス処理に対する適切なアクション(例えば、フラグメントシェーダープログラム)をトリガーすべきである。好ましい一実施形態では、これは、単純に、フラグメントシェーダー(ステージまたはユニット)をバイパスさせるだけである(例えば、Z-onlyレンダリング状態の場合に、例えば、フラグメントシェーディングプログラムを実行する必要はなく、したがって、フラグメントシェーダーを初期化する回路が、単純に、予約されているプログラムアドレスに応じてそれをバイパスできるからである)。
【００６６】
それぞれのサンプリング点について処理される1つのまたはそのプリミティブの選択の補助に使用するため第1の処理パスで導出され、格納されるデータは、好適な、所望の形式をとりうる。このデータは、例えば、第1の処理パスの性質に依存しうる。これは、好ましくは、第2の処理パスにおける1つのサンプリング点について処理されるプリミティブを選択するための正確な、または控え目な情報をもたらすデータを含む。
【００６７】
第1の処理パスで導出されるデータを使用すると、1つの、またはそれぞれのサンプリング点に関して処理される単一のプリミティブを識別できる場合があり、また好ましい一実施形態では、識別でき、またはこのデータを使用すると、せいぜい、1つの、またはそれぞれのサンプリング点に関して処理されるべきプリミティブのグループを識別することのみできる場合がある。この後者の場合は、このデータを使用することで、第2の処理パスにおける1つのサンプリング点について処理されるプリミティブの数を減らすことが可能なので、それでも有利である場合がある。
【００６８】
第1の処理パスで決定されたデータは、第2の処理パスにおける1つのサンプリング点について処理される1つまたは複数のプリミティブを直接、例えば、示すことが可能であり、また好ましい一実施形態では、示すか、または、サンプリング点について処理される1つまたは複数のプリミティブの識別番号を導出するために使用されうるデータであることが、例えば、可能であり、また好ましい他の実施形態では、そのようなデータである。
【００６９】
後者の場合、このデータは、所定のサンプリング点についてプリミティブが処理されないように除外または除去するために使用されうるデータを、例えば含むことができ、また好ましい一実施形態では、そのようなデータを含む(その結果、プリミティブの部分集合のみが、せいぜい、第2の処理パスにおけるサンプリング点について処理されることになる)。
【００７０】
したがって、好ましい一実施形態では、導出される1つまたは複数のプリミティブの選択を補助するためのデータは、1つのサンプリング点について処理されるべき、その1つまたは複数のプリミティブ、好ましくはそのプリミティブの識別を保持しうるデータを含む。
【００７１】
好ましい他の実施形態では、データは、サンプリング点について処理されるべきでない1つまたは複数のプリミティブの識別を補助しうるデータを含み、これにより、例えば、好ましくは、これらのプリミティブを識別し、第2の処理パスにおけるサンプリング点について処理からカリングまたは除去することができる。ここでもまた、このデータを使用すると、好ましくは、単一のプリミティブ以外のすべてを処理から省くことができるが、所定のサンプリング点についてプリミティブのうちの1つを除いて全部ではなく一部を除去することしかできない場合がある。
【００７２】
同様に、好ましい一実施形態では、1つのサンプリング点について処理される1つまたは複数のプリミティブの選択を補助するように導出されたデータは、1つの(それぞれの)サンプリング点について処理されるコマンドリストの一部に対応する複数のプリミティブのうちの1つまたはそのプリミティブの識別番号を示しうるか、または識別番号を導出するために使用されうるデータを含む。
【００７３】
好ましい一実施形態では、決定され、格納されているデータは、1つのサンプリング点に対する最も近い(または最も遠い)プリミティブの決定を補助し、および/または1つのサンプリング点で最も近い(または最も遠い)プリミティブを直接示す。
【００７４】
特に好ましい一実施形態では、第1の処理パスにおいて導出され、第1の処理パスの後に格納されるデータは、第1の処理パスから導出された深さバッファ(つまり、第1の処理パスにおいてそれぞれのサンプリング点について決定されるZ値)を含む。これらの深さバッファ値は、当業で知られているように、それぞれのサンプリング点で見られる最も近い(最も遠い)プリミティブの深さを示し、したがって、例えば、深さテストを介して、第2の処理パスにおいてそれぞれのサンプリング点でどの(複数の)プリミティブが処理されるべきか(つまり、可視となるか)を決定(識別)するために使用されうる。(これは、上述のアプリケーション駆動型の2ステージプロセスと似ており、そこでは第1のパスは、深さバッファに「書き込む」ために使用され、次いで、深さ情報を使用して、第2の処理パスに対しプリミティブを「フィルタリング」することができる。)
【００７５】
この場合、深さバッファ値は、直接的には、第2の処理パスにおけるそれぞれのサンプリング点について処理されるプリミティブを示さないが、以下でさらに説明されるように、これらの値は第2の処理パスにおけるサンプリング点についてプリミティブを処理からカリングするために使用できるので、処理される(複数の)プリミティブを選択(または識別)するための情報を提供する。
【００７６】
この方法で深さバッファデータを格納し、使用するのは、第1の処理パスが、上述のように、コマンドリストの一部に対応するプリミティブ上のZ-onlyパスである場合に、特に適しており有利であると思われる。
【００７７】
他の好ましい実施形態では、第2の処理パスにおけるそれぞれのサンプリング点で処理される1つの、またはそのプリミティブの選択または識別を補助するために導出され、格納されるデータは、処理されるプリミティブの識別子(つまり、第2の処理パスにおけるそれぞれのサンプリングで処理されるプリミティブを識別するために使用されうる識別子)を含む。これは、例えば第1の処理パスがZ値を生成しない場合に適切なものと言える。また、これにより、Zテストではなくプリミティブ識別子を使用して第2のパス(少なくともいくつかの状況において、望ましい、および/または有利である可能性のある)で処理されるプリミティブを識別することができる。
【００７８】
この場合、決定され格納されるデータは、第2の処理パスにおける1つのサンプリング点について処理されるプリミティブを直接示す。
【００７９】
このようなプリミティブ識別子の格納は、必要に応じて、第1の処理パスにおけるZバッファへの書き込みの代わりに行われるか、または書き込みとともに行われうる。好ましくは、Zバッファも同様に、決定され格納される。
【００８０】
この構成におけるプリミティブ識別子は、必要に応じて生成されうる。好ましくは、プリミティブが第1のパスに対するパイプラインに入るときに、IDをそれぞれのプリミティブに割り当てるために増分カウンターが使用され、次いで、第1のパスにおけるサンプリング点について識別された関連プリミティブのIDが、例えば、対応するZバッファ要素が書き込まれる(適宜)ときに、適切なプリミティブIDストア(例えば、バッファ)に書き込まれる。
【００８１】
次いで、第2の処理パスで、カウンターがリセットされて再起動され(それぞれのプリミティブは、第1のパスでピックアップしたのと同じIDを第2のパスにおいてカウンターからピックアップする)、プリミティブは、前のようにカウンターからIDを割り当てられ、次いで、それぞれのフラグメントは、そのフラグメントについて第2のパスからのそれぞれのプリミティブIDを注目する(複数の)サンプリング点に対するプリミティブIDバッファ(第1のパスからの)内にすでに格納されているプリミティブIDと比較し、それに応じて(つまり、IDが注目する(複数の)サンプリング点に対する格納されているプリミティブIDと一致しているかどうかに応じて)第2のパスで陰影付けされ、書き出される(または書き出されない)ようにすることが可能である。
【００８２】
この場合、第1の処理パスからのZバッファ値は(もし存在すれば)、プリミティブIDがその目的のために使用されるため、サンプリング点毎の処理の(またはそうでない)テストに使用される必要はなく、また好ましくは使用されない。しかし、Z値は、それでも、必要ならば、早期階層Zテストなどの他のテストに使用することも可能である。
【００８３】
本発明の第1の処理パスを通ったコマンドリストの一部に含まれるコマンドで実行される第2の処理パスは、好適な、所望のそのようなパスとしてよい。これは、好ましくは、コマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブ上の「通常」または「完全」レンダリングパス、つまり、プリミティブをディスプレイに表示するために必要なプリミティブに対するデータを提供するレンダリングプロセスを含む。したがって、第2のパスは、例えば、好ましくは完全レンダリング状態を有効にして実行される。
【００８４】
第2の処理パスでは、第1のパスからの決定されたプリミティブ選択(例えば、可視性(または他の))情報を使用する。ここでもまた、この情報は、所望の、好適な方法で使用されうるが、好ましくは、第1の処理パスにおけるサンプリング点について処理される(複数の)プリミティブであると決定された(複数の)プリミティブ以外のものを所定のサンプリング点について処理することを可能な限り回避するために使用される(これにより、第2の処理パスの効率が最大化される)。
【００８５】
上述のように、第1の処理パスで、所定のサンプリング点で処理されるプリミティブの識別子を決定し、格納する場合、第2の処理パスでは、好ましくは、上述のように、格納されている識別子を使用して、それぞれのサンプリング点に対する適切なプリミティブを決定し、次いで、そのサンプリング点で(そのサンプリング点について)そのプリミティブのみを処理(好ましくはレンダリング)する。
【００８６】
処理されるプリミティブを識別するために第1のパスで決定され、格納されたデータが深さバッファ(Z値)を含む場合、第2の処理パスでは、それぞれのサンプリング点について処理されるプリミティブを決定するために、格納されている深さバッファ値を使用して適切な深さテストを実行することができ、また好ましい一実施形態では、実行する。
【００８７】
したがって、好ましい一実施形態では、第2の処理パスは、第1の処理パスからの格納されているプリミティブ識別子を使用して、1つのサンプリング点について、また好ましくはそれぞれのサンプリング点について処理されるプリミティブを決定し、他の好ましい実施形態では、第2の処理パスは、第1の処理パスからの格納されている深さバッファ値を使用して、1つのサンプリング点について、また好ましくはそれぞれのサンプリング点について処理される(複数の)プリミティブを決定する。
【００８８】
特に好ましい一実施形態では、深さテストが第2の処理パスで実行される場合、第1の処理パスで導出される深さバッファ値を使用して実行される深さテスト(Zテスト)は、早期深さテスト(つまり、(フラグメント)レンダリングの前に予め実行される深さテスト)である。次いで、これにより、早期深さテストにおいて、それぞれのサンプリング点に関して、注目するサンプリング点について処理されるべき1つのプリミティブを除くすべてのプリミティブ(フラグメント)をレンダリングの前にカリングすることができるであろう(そのプリミティブのみ(そのプリミティブからのフラグメント)(またはそのプリミティブと同じ深さ値を有するプリミティブ)がこの早期深さテストに通らなければならないので)。
【００８９】
これらの構成における(複数の)深さテストは、必要に応じて、また例えば、知られている、好適な技術を使用して実行されうる。
【００９０】
しかし、ここでは、深さテストが第2の処理パスで使用される場合、その深さテストが<=(以下)または>=(以上)の形式である場合に(適宜)、その結果として、正しいプリミティブが第2の処理パスにおける1つのサンプリング点について処理されるであろうが、<(より小さい)または>(より大きい)の形式の深さ比較が第2の処理パスで使用された場合には、それにより、すべてのプリミティブが第2のパスで深さテストに不合格となる可能性がある(深さバッファはすでに1つのサンプリング点について処理されるプリミティブの深さ値を含んでいるので)ことに留意されたい。
【００９１】
したがって、好ましい一実施形態では、本発明は、この可能性を考慮する、つまり、必要ならば、所望のプリミティブが第2のパスで必ず深さテスト(Zテスト)に合格するように構成または配列されるが、ただし、その深さ値は、すでに、深さバッファ(第1のパスからの)内に存在しているものとする。
【００９２】
この可能性は、必要ならばいろいろな方法で考慮することができる。まず第1に、どのプリミティブが第2の処理パスで処理されるかを決定するために使用されるテストが、処理すべきプリミティブと第2の処理パスで処理されるプリミティブに対する格納されている識別子の比較を含む場合には、これはまったく生じない。この場合、第2の処理パスで処理するプリミティブが、第2の処理パスで1つのプリミティブ(およびしたがって、フラグメントおよびサンプリング点)に割り当てられたプリミティブ識別番号と第1の処理パスで所定のサンプリング点(フラグメント)について格納されている識別番号との間の識別番号比較を介して決定されるので、正しいプリミティブは、常に、第2の処理パスでテストに「合格する」。
【００９３】
また、例えば、深さテストが以下、または以上としてすでに定義されている一連のプリミティブに対し本発明を実行することのみが可能であり、したがって、本発明が正しい結果を生み出すことが保証されうる。プリミティブが、より小さい、またはより大きいのテストを受けるものとして生成される場合、本発明は、それらのプリミティブに関して無効化されうる。この構成は、例えば、グラフィックスプロセッサドライバのソフトウェア変更により実装することが可能であり、したがって、本発明は、加える変更を最小限に抑え、また局所的変更に留めて、既存の設計で使用できる。
【００９４】
他の特に好ましい実施形態では、第2の処理パスで実行される深さテストは、Z比較機能、<=(以下)、または>=(以上)を使用するように(適宜)設定される。必要ならば、Z比較機能は、第2の処理パスのためにこれに変更される。
【００９５】
したがって、好ましい一実施形態では、これらのプリミティブを通る第2のパスに対する深さテストは、Z比較機能、<(より小さい)を<=(以下)に変更し、Z比較機能、>(より大きい)を>=(以上)に変更して実行される。
【００９６】
この変更は、グラフィックスプロセッサにおいて自動的に行われ、固定されるものとすることが可能であるか、または例えば、グラフィックスプロセッサ内に備えられるが、必要ならば有効にする作業をアプリケーション開発者および/またはプラットフォーム開発者に任すことも可能である。
【００９７】
この後者の場合には、第2の処理パスに対するZ比較機能を変更する可能性は、例えば、グラフィックスプロセッサドライバの構成オプションとして実現することが可能であり、これにより、プラットフォームインテグレータは、このアプローチを使用するかどうかを決定することができる。例えば、<テストを<=テストで、また>テストを>=テストで置き換えるのを有効にするフラグを有するアプリケーション拡張が備えられ、この機能が有効にされる場合にアプリケーションから呼び出されるようにすることが可能である。これにより、本発明に対するこの変更を、必要ならばドライバのソフトウェア変更のみで実装することができる。
【００９８】
また、必要ならば、本発明を使用できるように、アプリケーション開発者側で、<=および>=機能を、<および>機能の代わりに使用するようにそのアプリケーションを書く(書き換える)ことも可能である。
【００９９】
他の好ましい実施形態では、第1のパスで決定され、格納されているZ値は、必要ならば、適宜オフセットし(つまり、Z比較の<(より小さい)ファミリの視点から離れるか、またはZ比較の>(より大きい)ファミリの視点に向かって)、これによりここでもまた、適切なプリミティブが第2の処理パスでZテストに合格することを確実にする。Z値をこのようにオフセットすることで、第2の処理パスについてZ比較機能を<=(または>=)に変更する必要がなくなるが、それでも再び、本発明を使用せずに1つのサンプリング点で描画されるのと同じプリミティブが、本発明を使用したときに必ず描画されるべきであり、Zテストの結び付きの結果に影響を及ぼしてはならない。
【０１００】
これらの構成では、第1の処理パスで決定されたZ値に適用されるオフセットは、好ましくは、何らかの効果を伴ってZ値に適用されうる最小のオフセットである。したがって、整数のZバッファの場合、第1の処理パスで書き込まれるZ値は、好ましくは、オフセットするように適宜1ずつ増分または減分される。浮動小数点数のZバッファの場合、好ましくは、決定されたZ値に加算または決定されたZ値から減算されうる(適宜)最小数が、Z値をオフセットするために、Zバッファに書き込まれる前に、Z値に加算(またはそれぞれ、減算)される。(これらの場合の最小値は、例えば、Z値の指数およびその仮数の一定サイズから決定されることが可能であり、また好ましくは決定される。)
【０１０１】
上述のように、本発明で実行されるコマンドリストは、メモリ内に格納される(また、それに応じて、本発明の実行時にそこから読み出される)。
【０１０２】
コマンドリストが格納されているメモリは、好適な、所望のそのようなメモリとしてよい。これは、当業で知られているように、典型的にはホストシステムメモリなどのグラフィックス処理システムに外付けのメモリであり、好ましい一実施形態ではそのようなメモリである。しかし、コマンドリスト(コマンドリストの一部)をグラフィックスプロセッサそれ自体のチップ上に、例えば、オンチップバッファ内に格納することも可能である(このバッファは、例えば、DRAMの形態をとらなくてもよいが、FIFOなどの他の何らかの形態のバッファとすることができる)。
【０１０３】
本発明の方法で処理されるグラフィックスコマンドリストは、直接モードのレンダリングシステムでレンダリングするシーンに対するコマンドリスト、またはタイルベースシステムにおける所定のタイルに対するコマンドリストなどの、好適な、所望のそのようなリストとしてよい。好ましい一実施形態では、本発明は、タイルベースのレンダリングシステムにおいて、複数のタイルに対する、好ましくはそれぞれのタイルについて別々のコマンドリストに関して実行される。
【０１０４】
格納されているコマンドリストは、好適な、所望のグラフィックスコマンドを含みうるが、これは、多数のプリミティブの描画をトリガーする少なくとも一部のコマンドを含むべきであり、このコマンドリストの一部は、処理するプリミティブのシーケンスを生成する。したがって、このコマンドリストは、プリミティブのストリームをグラフィックスプロセッサ(処理パイプライン)に注入する効果を有するコマンドを含むべきである。
【０１０５】
プリミティブの描画を命令するコマンドリスト内のコマンドは、好適な、所望のそのようなコマンドとしてよい。したがって、これらは、例えば、それぞれ単一プリミティブの描画を命令するか、例えば、プリミティブのシーケンスの描画を命令することが可能である。同様に、これらのコマンドは、描画する(複数の)プリミティブに対するより詳細なデータ構造体を構成することが可能であり、および/または例えば、関連プリミティブデータが見つかるアドレスをより単純に表すことが可能である。
【０１０６】
前者の場合、これらのコマンドは、例えば、コマンドのオペランドに直接埋め込まれたプリミティブを描画するために必要なデータを伴う「draw_single_polygon(多角形データ)」の形式とすることができる(このデータは、例えば、変換前または変換後データ(グラフィックス処理システムに応じて適宜)としてよい)。
【０１０７】
後者の場合、「set_attrib_address(attrib[1-16], address)」、「set_triangle_index_address(format, address)」、および「draw_triangles(first_triangle, triangle_count)」の形式のコマンドを使用することが可能であり、当業で知られているように、例えば、この場合には、描画されるプリミティブは、「set_triangle_index_address()」コマンドによって設定され、「draw_triangles()」コマンドによってインスタンス化されるコーナーインデックスの配列内の3つの要素からなるグループで形成される三角形である。
【０１０８】
したがって、コマンドリストは、インデックスバッファからのデータを使用してプリミティブを描画するための他のコマンドが埋め込まれている、例えば、整数のコーナーインデックスバッファなどのプリミティブデータインデックスバッファのアドレスを設定するコマンドを含むことができる。
【０１０９】
一般に、本発明が適用可能であるが、コマンドリストおよびプリミティブを描画するためのコマンドは構造化される。
【０１１０】
本発明の方法で処理される格納されているコマンドリストの一部は、好適な、所望のそのような部分を含むことができる。これは、注目するコマンドリスト全体を含むが、好ましい一実施形態では、これは、所定のコマンドリストの部分集合(つまり、所定のコマンドリスト全体とはならない集合)である。
【０１１１】
特に好ましい一実施形態では、本発明の方法で処理されるコマンドリストの一部は、一連の(連続的な)不透明プリミティブを描画させるコマンドリストの一部を含む。本発明は、不透明プリミティブが一般的に、例えば、深さテスト技術を使用してカリングするのに好適であるので、不透明プリミティブのシーケンスを処理するのに特に適用可能である。
【０１１２】
したがって、好ましい一実施形態では、本発明は、第1の処理パスでプリミティブを次々にグラフィックス処理に通すことにより、不透明プリミティブのシーケンスを処理し、次いで、第2の処理パスのためにプリミティブを次々にグラフィックス処理に再び通す。
【０１１３】
処理されるプリミティブに関係するデータが導出されるサンプリング点も、同様に、所望の、好適なそのようなサンプリング点(およびサンプリング点の集合)とすることができる。好ましい一実施形態では、これらは、表示するため処理するときにプリミティブをラスター処理する際に使用される、複数のサンプリング点、好ましくは、それらのサンプリング点を含む。したがって、タイルベースのレンダリングシステムでは、例えば、サンプリング点(およびサンプリング点の集合)は、好ましくは、表示するためタイルを処理するときに使用されるサンプリング点の集合を含む。
【０１１４】
本発明の方法によるグラフィックス処理システムのオペレーションは、例えば、そのようなオペレーションをトリガーするのに適した機構を使用して、所望の、好適な方法でトリガーされうる。
【０１１５】
特に好ましい一実施形態では、本発明の方法によるオペレーションは、このオペレーションをトリガーするのに適したコマンドをコマンドリストに入れることによりトリガーされる。
【０１１６】
最も好ましくは、コマンドは、本発明の第1の処理パスをトリガーする本発明の方法により処理されるコマンドリストの一部の先頭(例えば、一連の不透明プリミティブの描画の始め)に挿入される。このコマンドは、それに応じて、グラフィックスプロセッサを、好ましくはZ-onlyレンダリングモードなどの、第1の処理パスを実行するためのモードに、例えば、設定し、好ましくは設定する。
【０１１７】
同様に、コマンドは、好ましくはコマンドリストの一部の末尾(例えば、好ましくは、一連の不透明プリミティブを描画するための一組のコマンドの終わり)に挿入され、これにより、グラフィックス処理は、コマンドリストのその部分に戻され、それを再実行するが、このときには、異なるモードである(例えば、好ましくは、通常の(または完全な)レンダリング状態が有効化される)。
【０１１８】
この後者(「終わり」の)コマンドは、好ましくは、グラフィックスプロセッサが現在第1のパス(例えば、Z-only)モードに入っている(つまり、本発明の第1の処理パスを終了したばかりである)場合にコマンドリストの一部の先頭に戻る分岐および処理モードの変更をトリガーし、そうでない場合にはトリガーしない条件付き分岐コマンドである(つまり、分岐条件は、現在の処理モードが第1のパスモードであるかどうかである)。
【０１１９】
この方法の条件付き分岐コマンドを使用すると、第2の処理パスの後も通常どおり処理を続けられるようにしながら、本発明の第1の処理パスの後にコマンドリストの一部で第2の処理パスを直接的にトリガーしやすくなる。
【０１２０】
必要ならば「一部の開始」および「一部の終了」のコマンドを組み合わせて単一のコマンドにすることも可能である。例えば、命令がオペレーションコードフィールド内のいくつかのビットによって識別される場合、命令ワード内の他の場所にあるいくつかのスペアビットを使用することにより1つのオペレーションコードを区別することが可能である。それとは別に、分岐アドレスの方向、つまり前方/後方、またはゼロアドレスを使用して、実行するコマンドを区別することも可能である。
【０１２１】
好ましい一実施形態では、このようなコマンドは、グラフィックスプロセッサドライバが本発明の方法で処理されるコマンドリストの一部を識別し(例えば、一連の不透明プリミティブを描画する)、適切なコマンドを適宜コマンドリストの適切な部分の前および末尾に挿入することによりコマンドリストに入れられる。
【０１２２】
また、本発明の方法により別のやり方でオペレーションをトリガーし、制御することも可能である。
【０１２３】
例えば、グラフィックスプロセッサそれ自体は、例えば、第1の(例えば、Z-only)処理パスでは、この方法で(例えば、不透明であるかどうか確認するためにそれぞれのプリミティブに割り当てられたレンダリング状態を考慮することにより)処理されるコマンドリストの一部を識別し、例えば、第1の処理パスが完了した後に処理がそのアドレス(コマンド)にジャンプして戻れるようにその一部の先頭コマンドのリストにアドレスを格納することが可能である。デバイスまたは周辺機器レジスタは、例えば、「新しいタイル」コマンドリストコマンドの副作用として第1の(例えば、Z-only)処理パスを有効にすることが可能である。
【０１２４】
それに加えて、またはそれとは別に、このコマンドリスト内のコマンドは、例えば、この目的のためのコマンド毎の予約ビットを備えることにより、本発明の方法による処理を受けるものとしてタグ付けすることが可能である。次いで、コマンドリスト内のこのようなタグ付けされたコマンドのシーケンスは、これに応じて、処理に適しており、また本発明の方法で処理されることになっている一連のコマンド(コマンドリストの一部)を区分する。
【０１２５】
上述の形式の分岐コマンドの使用は、本発明の状況においてだけでなく、それ自体において新しく、有利なものとしてよいと考えられる。
【０１２６】
したがって、本発明の第3の態様によれば、グラフィックス処理システムのオペレーションを制御する方法が提供され、この方法は、
グラフィックス処理システムに用意されたコマンドリストに、コマンドリスト内の他の位置への分岐をトリガーするだけでなく、分岐が選ばれたときにグラフィックス処理システムの状態の変化もトリガーする分岐コマンドを入れるステップを含む。
【０１２７】
本発明の第4の態様によれば、グラフィックス処理システムが実現され、このシステムは、
実行のためグラフィックス処理システムが受け取ったコマンドリスト内のグラフィックスコマンドに対する応答として、コマンドリスト内の他の位置への分岐およびグラフィックス処理システムの状態の変更を行う手段を備える。
【０１２８】
本発明の第5の態様によれば、グラフィックス処理システムのオペレーションを制御する方法が提供され、この方法は、
グラフィックス処理システムに備えられているコマンドリストに、分岐を選ぶ条件がグラフィックス処理システムの現在状態である条件付き分岐コマンドを入れるステップを含む。
【０１２９】
本発明の第6の態様によれば、グラフィックス処理システムが実現され、このシステムは、
実行のためグラフィックス処理システムが受け取ったコマンドリスト内の条件付き分岐コマンドに対する応答として、グラフィックス処理システムの状態に応じてコマンドリスト内の他の位置に分岐するか、または分岐しないための手段を備える。
【０１３０】
当業者であれば理解するように、本発明のこれらの態様および実施形態は、適宜、本明細書で説明されている本発明の好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備える。
【０１３１】
したがって、例えば、グラフィックス処理システムの状態は、好ましくは、そのレンダリング状態であり、分岐コマンドによってトリガーされた状態変化は、好ましくは、「完全」レンダリング状態への変化であり、および/または分岐の選択の条件となる状態は、好ましくは、グラフィックス処理システムがZ-only状態であるかどうかである。同様に、この構成では、好ましくは、分岐コマンドは、グラフィックス処理システムの現在状態を条件とするとともに、分岐が選ばれた場合にその状態の変化をトリガーする。
【０１３２】
上記のことから、特に好ましい一実施形態では、本発明は、第1の「Z-only」処理パスを実行して、深さバッファに書き込み、次いで第2の処理パスを実行して、表示するプリミティブをレンダリングするが、早期Zテストおよび「書き込まれた」深さバッファを使用し、第2の処理パスからプリミティブをカリングするステップを含むことは理解されるであろう。
【０１３３】
したがって、本発明の第7の態様によれば、グラフィックスプロセッサにプリミティブを描画させることを命令するコマンドを含む、グラフィックスプロセッサによって実行されるグラフィックスコマンドのリストが、グラフィックスプロセッサによってそのコマンドが実行される前に用意され、メモリ内に格納される、グラフィックスプロセッサを操作する方法が提供され、この方法は、
格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブに対しZ-only処理パスを実行して、それらのプリミティブに対する適切な深さ値を深さバッファに書き込むステップと、
格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブに対し第2の処理パスを実行して、表示するためそれらのプリミティブをレンダリングし、その際に書き込まれた深さバッファおよび早期Zテストを使用して、この処理パスにおける処理からプリミティブをカリングするステップを含む。
【０１３４】
本発明の第8の態様によれば、グラフィックス処理システムにプリミティブを描画させることを命令するコマンドを含む、グラフィックス処理システムによって実行されるグラフィックスコマンドのリストが、グラフィックス処理システムによってそのコマンドが実行される前に用意され、メモリ内に格納される、グラフィックス処理システムが実現され、このグラフィックス処理システムは、
格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブに対しZ-only処理パスを実行して、それらのプリミティブに対する適切な深さ値を深さバッファに書き込む手段と、
格納されているコマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブに対し第2の処理パスを実行して、表示するためそれらのプリミティブをレンダリングし、その際に書き込まれた深さバッファおよび早期Zテストを使用して、この処理パスにおける処理からプリミティブをカリングする手段とを備える。
【０１３５】
当業者であれば理解するように、本発明のこれらの態様は、適宜、本明細書で説明されている本発明の好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備える。そこで、例えば、処理される格納されているコマンドリストの一部は、好ましくは、一連の不透明プリミティブの描画を行わせる部分である。同様に、第2の処理パスで実行される深さテストは、好ましくは、<=または>=の形式であるか、または第1のパスで決定された深さバッファ値は、好ましくは、上述のように、第2のパスで使用される前にオフセットされる。
【０１３６】
当業者であれば理解するように、上述の本発明のさまざまな機能に、さまざまな変更、修正、および/または追加を行うことができる。
【０１３７】
例えば、第1の処理パスは、できる限り早い段階にプリミティブおよび/またはフラグメントを処理から排除することを試みるために、(複数の)早期Zテスト、階層Zテスト、閉塞カリング技術などの、隠面消去技術を使用することが可能であり、また好ましい一実施形態では、使用する。
【０１３８】
同様に、第2の処理パスは、できる限り早い段階にプリミティブおよび/またはフラグメントを処理から排除することを試みるために、階層Zテスト、閉塞カリング技術などの、隠面消去技術を使用することが可能であり、また好ましい一実施形態では、使用する。
【０１３９】
本発明では、本発明の方法により処理されるコマンドリストの一部は、メモリからグラフィックスプロセッサによって2回読み込まれる、つまり第1の処理パスについて1回、第2の処理パスにいてもう一度読み込まれることは理解されるであろう。(言い換えると、第1の処理パスは、メモリからコマンドリストの一部を読み込むステップを含み、第2の処理パスは、メモリからもう一度コマンドリストの一部を読み込むステップを含む。同様に、本発明は、コマンドリストの一部を読み込み、コマンドリストのその部分に対し第1の処理パスを実行し、次いで、コマンドリストの一部を再び読み込んで、コマンドリストの一部に対し第2の処理パスを実行するステップを伴う。)
【０１４０】
コマンドリストの一部を毎回元の場所(例えば、外部メモリ)から読み込むことは可能であるが、特に好ましい一実施形態では、第1の処理パスに対するコマンドリストから読み込まれたデータの一部または全部が、第1の処理パスについて読み込まれた後または読み込まれるとともに、グラフィックスプロセッサそのものに格納されること(例えば、グラフィックスプロセッサそのものにバッファリングされること)が可能であり、また好ましくは格納されるので、これは、第2の処理パスではグラフィックスプロセッサ上の「ローカル」メモリ(オンチップメモリの)内で利用可能な状態になっている。したがって、これにより、第2の処理パスに対し、元の、例えば、外部のメモリからそのデータを読み込む必要がなくなる。
【０１４１】
したがって、好ましい一実施形態では、格納されているコマンドは、第1の処理パスと第2の処理パスの両方について同じメモリから読み込まれるが、他の好ましい実施形態では、コマンドリストの一部に含まれるコマンドの一部または全部は、第2の処理パスでは異なるメモリから読み込まれる。(しかし、これらの場合のそれぞれにおいて(また、実際に、本発明では一般に)、第2の処理パスについて読み込まれる(格納されている)コマンドは、第1の処理パスに使用される格納されているコマンドからのものであるか、それに由来するものであり、第2の処理パスについてこれらのコマンドの新たな生成はないことに留意されたい(本発明では、コマンドのシーケンスは、1回生成され、第2の処理パスについては再び生成されることはない)。)
【０１４２】
例えば、利用可能なオンチップメモリが制限されている場合、本発明の方法で処理されることになるコマンドリストの一部は、例えば、オンチップメモリに収まるサイズに常に制限される可能性があるか(例えば、これよりも大きい、一連の不透明プリミティブの実行を命令する部分などの部分は、「オンチップ」に収まる多数のより小さな部分に分割される)、またはコマンドリストの一部は、「オンチップ」メモリ内に格納され(第2のパスでそこから取り出され)、データの残りは次いで第2の処理パスのために他の(外部)メモリから取り出されうる。また、例えば、両方の構成を使用することも可能であり、その際に、例えば、コマンドリストの一部は、オンチップメモリの容量を閾値を超える値の量だけ超える場合により小さな部分に分けられる。
【０１４３】
この目的のために備えられている「オンチップ」メモリ(バッファ)のサイズは、必要に応じて、例えば、「オンチップ」メモリの性能とコストのトレードオフ関係に基づき選択されうる。
【０１４４】
上述のように、上記の態様における本発明は、メモリからコマンドリストの一部を2回読み込む必要があるけれども、出願人は、コマンドリストの一部を2回読み込まなくても本発明の目的と利点を活かすことも可能であることを認識している。この場合、システムは、その代わりに、第1の処理パスから十分な情報を生成し、格納(バッファリング)し、これにより、コマンドリストを再度読み込まなくても第2の処理パスを実行することができる。したがって、これは、それと引き替えに、第1の処理パスからデータを「オンチップ」に格納し、そのパスにおいてさらに処理を実行しなければならない可能性があるが、コマンドリストの一部を再び読み込む必要はなくなる。
【０１４５】
したがって、本発明の第9の態様によれば、グラフィックス処理システムにおいてプリミティブを処理する方法が提供され、この方法は、
プリミティブのシーケンスに対し第1の処理パスを実行して、サンプリング点の集合の中のそれぞれのサンプリング点について、そのサンプリング点について処理されるプリミティブのシーケンス内の複数のプリミティブのうちの1つまたは複数のプリミティブを決定するステップと、
データを格納しておき、決定された1つまたは複数のプリミティブをそれぞれのサンプリング点で処理できるようにするステップと、
格納されているデータを使用して第2の処理パスを実行し、それぞれのサンプリング点についてプリミティブのシーケンス内のそれぞれの1つまたは複数のプリミティブを処理するステップと、を含む。
【０１４６】
本発明の第10の態様によれば、グラフィックス処理システムが実現され、このシステムは、
プリミティブのシーケンスに対し第1の処理パスを実行して、サンプリング点の集合の中のそれぞれのサンプリング点について、そのサンプリング点について処理されるプリミティブのシーケンス内の複数のプリミティブのうちの1つまたは複数のプリミティブを決定する手段と、
データを格納しておき、決定された1つまたは複数のプリミティブをそれぞれのサンプリング点で処理できるようにする手段と、
格納されているデータを使用して第2の処理パスを実行し、それぞれのサンプリング点についてプリミティブのシーケンス内のそれぞれの1つまたは複数のプリミティブを処理する手段と、を備える。
【０１４７】
当業者であれば理解するように、本発明のこれらの態様および実施形態は、適宜、本明細書で説明されている本発明の好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備える。したがって、例えば、第2の処理パスでは、好ましくは、表示するプリミティブを(格納されているデータを使用して)レンダリングする。
【０１４８】
本発明のこれらの態様および実施形態では、プリミティブのシーケンスは、好ましくは、上述のように、コマンドリストの格納されている部分の読み込みを介して供給される。しかし、これらのプリミティブは、さらにまたはその代わりに、例えば、CPUによって一度に1つずつグラフィックスプロセッサに供給されうるか、またはダイレクトメモリアクセス(DMA)などを介してストリーミングされうる。
【０１４９】
好ましくは、第1の処理パスでは、上述のように、グラフィックス深さテスト技術を使用して、プリミティブのシーケンスの中のどの1つまたは複数のプリミティブがそれぞれのサンプリング点で処理されるかを決定する。好ましくは、これは、それぞれのサンプリング点で単一のプリミティブを決定する(およびそのデータを格納する)。
【０１５０】
本発明のこれらの態様の好ましい一構成では、第1の処理パスは、必要である補間オペレーションを実行するステップを含むが、テクスチャをサンプリングするステップを含まず、このため、第1の処理パスの後に格納される情報をサンプリング点毎に生成し、サンプリング点が第2のパスで、例えばレンダリングされるようにできる(それぞれのサンプリング点に関してプリミティブのシーケンス全体を再処理することなく)。次いで、このデータは、表示するサンプリング点をレンダリングするために第2のパスで使用されうる。
【０１５１】
この構成には、コマンドリストを再度読み込まなくて済むという利点があるが(上述のように)、第1のパスの後にさらにデータを「オンチップ」で格納する必要がある。また、これは、プリミティブのセットアップおよび補間を第1のパスで実行することを必要とする(が、それでも、テクスチャの読み込み、および第2のパスで塞がれているフラグメント(プリミティブ)に対しフラグメントプログラムを実行するコストを回避することができる)。
【０１５２】
本発明のこれらの態様の他の好ましい実施形態では、第2の処理パスが実行されうるように第1の処理パスの後に格納されるデータは、第1のパスで、注目するサンプリング点に書き込むプリミティブ状態であることが判明している、例えば、コーナーインデックス、レンダリング状態データ(例えば、インデックス)などを含む、プリミティブ毎の状態データの束を含む。次いで、第2の処理パスが、格納されているプリミティブ状態データに対し実行され、これによりサンプリング点をレンダリングすることができる。
【０１５３】
ここでもまた、この構成は、プリミティブ状態データを適宜、例えば、好ましくは、オンチップのプリミティブ状態データタイルバッファに格納する必要があるが、例えば、第2の処理パスでコマンドリストを再読み込みし、コマンドリストを解釈し、プリミティブをラスター処理し、Zバッファ読み込み、書き込み、および比較を例えば実行する必要がなくなる。この構成では、また、例えば、後のプリミティブに対する副作用を有するプリミティブ状態を識別し、そのようなコマンドの場合に、「プリミティブ状態データバッファ」をフラッシュする必要がありうる。
【０１５４】
好ましいこのような構成では、それぞれのサンプリング点に対し格納されるプリミティブデータは、注目するサンプリング点に書き込む(描画される)コマンドであると判明したプリミティブコマンドを含む。これは、プリミティブコマンドがそれ自体、表示する注目するプリミティブをレンダリングするのに必要なすべての(状態)データを含む場合に特に都合がよいことがある。
【０１５５】
本発明の方法で処理されるプリミティブは、好適な、所望のそのようなプリミティブとしてよい。これらは、好ましくは、当業で知られているように、単純な多角形の形をとる。好ましい一実施形態では、これらのプリミティブは三角形である。
【０１５６】
特に好ましい一実施形態では、本発明のさまざまな機能は、表示デバイスのフレームバッファに書き込まれるデータを生成して出力する単一のグラフィックス処理プラットフォーム上で実行される。
【０１５７】
本発明のさまざまな機能、要素などは、必要に応じて実装することができ、また例えば、好ましくは、本発明のさまざまなステップおよび機能などを実行するように動作可能な、適切な機能ユニット、プロセッサ、処理ロジック、回路、マイクロプロセッサ装置などを備え、および/またはこれらによって実行される。
【０１５８】
本発明は、「パイプライン化」された構成を備えるグラフィックスプロセッサなどの、任意の形態または構成のグラフィックスプロセッサに適用可能である。好ましい一実施形態では、これは、ハードウェアグラフィックスパイプライン、好ましくはレンダリングパイプラインに適用される。
【０１５９】
本発明は、2Dグラフィックス処理、3Dグラフィックス処理、直接モードレンダリング、遅延モードレンダリング、タイルベースレンダリングなどのすべての形態のグラフィックス処理およびレンダリングに適用可能であるが、これは、遅延モードレンダリングおよび特にタイルベースレンダラーを使用するグラフィックスレンダラーに特に適用可能である。
【０１６０】
上記から理解されるように、本発明は、3Dグラフィックスプロセッサおよび処理デバイスに特に適用可能であり、それに応じて、本明細書で説明されている本発明の複数の態様のうちの1つまたは複数の態様の装置を含む、またはその態様に従う、またはその態様に従って動作する、3Dグラフィックスを処理するためのグラフィックスプロセッサ、グラフィックス処理プラットフォーム、および/またはグラフィックス処理方法に拡張される。上述の特定の機能を実行するためにハードウェアが必要であることを前提条件とすると、そのような3Dグラフィックスプロセッサは、他の何らかの方法で、3Dグラフィックスプロセッサが備える、通常の機能ユニットなどの1つまたは複数またはすべてを備えることができる。
【０１６１】
同様に、好ましい一実施形態では、本発明は、本明細書で説明されている本発明の複数の態様のうちの1つまたは複数の態様の装置を含む、またはその態様に従う、またはその態様に従って動作する、2Dグラフィックスを処理するためのグラフィックスプロセッサ、グラフィックス処理プラットフォーム、および/またはグラフィックス処理方法に拡張される。上述の特定の機能を実行するためにハードウェアが必要であることを前提条件とすると、そのような2Dグラフィックスプロセッサは、他の何らかの方法で、2Dグラフィックスプロセッサが備える、通常の機能ユニットなどの1つまたは複数またはすべてを備えることができる。
【０１６２】
また、本発明は、好適な、所望の出力および好適な表示デバイスなどの出力デバイス向けにグラフィックスを処理するために使用されうる。したがって、これは、例えば、表示画面に表示するためのグラフィックス処理、印刷するためのグラフィックス処理(例えば、プリンタレンダリングエンジン)などに使用されうる。
【０１６３】
上記から理解されるように、本発明は、プリミティブを描画するためのグラフィックコマンドのシーケンスの生成、および次いで、グラフィックスコマンドのその生成されたシーケンス上での本発明の2つの処理パスの実行を伴う。
【０１６４】
本発明の他の態様によれば、グラフィックスプロセッサにプリミティブの描画を命令するグラフィックスコマンドのリストがグラフィックスプロセッサによって実行されるように生成される、グラフィックス処理システム内のグラフィックスプロセッサを動作させる方法が提供され、この方法は、
グラフィックスプロセッサが、
グラフィックスコマンドの生成されたシーケンスで第1の処理パスを実行して、グラフィックスコマンドの生成されたシーケンスに含まれるそれらのコマンドに対する応答として描画される複数のプリミティブのうちから、サンプリング点の集合の中のそれぞれのサンプリング点に関して処理する1つまたは複数のプリミティブを選択するのを補助することができるデータを導出し、
それぞれのサンプリング点で処理されるプリミティブを選択することを補助するための導出データを格納し、
コマンドの生成されたシーケンスで第2の処理パスを実行して、第2の処理パスにおけるそれぞれのサンプリング点について処理される1つまたは複数のプリミティブを、コマンドの生成されたシーケンスに含まれるコマンドに対する応答として描画されるプリミティブのシーケンスのうちから選択するのを助けるため格納されているデータを使用して、コマンドの生成されたシーケンスに含まれるコマンドに対する応答として描画されるプリミティブを処理するステップを含む。
【０１６５】
本発明の他の態様によれば、グラフィックスプロセッサにプリミティブの描画を命令するグラフィックスコマンドのリストがグラフィックスプロセッサによって実行されるように生成される、グラフィックス処理システムで使用するグラフィックスプロセッサが実現され、このグラフィックスプロセッサは、
グラフィックスコマンドの生成されたシーケンスで第1の処理パスを実行して、グラフィックスコマンドの生成されたシーケンスに含まれるそれらのコマンドに対する応答として描画される複数のプリミティブのうちから、サンプリング点の集合の中のそれぞれのサンプリング点に関して処理する1つまたは複数のプリミティブを選択するのを補助することができるデータを導出する手段と、
それぞれのサンプリング点で処理されるプリミティブを選択することを補助するための導出データを格納する手段と、
コマンドの生成されたシーケンスで第2の処理パスを実行して、第2の処理パスにおけるそれぞれのサンプリング点について処理される1つまたは複数のプリミティブを、コマンドの生成されたシーケンスに含まれるコマンドに対する応答として描画されるプリミティブのシーケンスのうちから選択するのを助けるため格納されているデータを使用して、コマンドの生成されたシーケンスに含まれるコマンドに対する応答として描画されるプリミティブを処理する手段とを備える。
【０１６６】
当業者であれば、本発明のこれらの態様および実施形態は、適宜、本明細書で説明されている好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備えることを理解するであろう。したがって、例えば、グラフィックスコマンドの生成されたシーケンスは、好ましくは、一連の不透明プリミティブの描画をトリガーする。
【０１６７】
実際、当業者であれば、本発明の説明されている態様および実施形態はすべて、適宜、本明細書で説明されている好ましい、およびオプションの機能の1つまたは複数あるいはすべてを備えることができ、好ましくは備えることを理解するであろう。
【０１６８】
本発明による方法は、少なくとも部分的にはソフトウェアを使用して、例えばコンピュータプログラムを使用して実装されうる。そのため、他の態様から見たときに、本発明は、データ処理手段にインストールされたときに本明細書で説明されている方法を実行するように特に適合されたコンピュータソフトウェア、データ処理手段上でプログラム要素が実行されたときに本明細書で説明されている方法を実行するコンピュータソフトウェアコード部分を含むコンピュータプログラム要素、およびデータ処理システム上でプログラムが実行されたときに本明細書で説明されている1つまたは複数の方法のすべてのステップを実行するように適合されたコード手段を含むコンピュータプログラムを提供することがわかる。データ処理システムは、マイクロプロセッサシステム、プログラム可能なFPGA(フィールドプログラマブルゲートアレイ)などとしてよい。
【０１６９】
本発明は、さらに、データ処理手段を備えるグラフィックスプロセッサ、レンダラー、またはマイクロプロセッサシステムを動作させるために使用されたときに前記データ処理手段と併せて前記プロセッサ、レンダラー、またはシステムに本発明の方法のステップを実行させるそのようなソフトウェアを含むコンピュータソフトウェアキャリアにも拡大適用される。このようなコンピュータソフトウェアキャリアは、ROMチップ、CD ROM、またはディスクなどの物理的記憶媒体とすることが可能であるか、またはケーブル上の電子信号、光信号、または衛星もしくは同様のものなどへの無線信号などの信号とすることが可能である。
【０１７０】
さらに、本発明の方法のステップすべてが、コンピュータソフトウェアによって実行される必要はないことは理解されるであろうし、したがって、さらに広い観点から、本発明は、コンピュータソフトウェア、および本明細書で説明されている方法の複数のステップのうちの少なくとも1つを実行するためにコンピュータソフトウェアキャリア上にインストールされたそのようなソフトウェアを提供する。
【０１７１】
したがって、本発明は、コンピュータシステムとともに使用するためコンピュータプログラム製品として適宜具現化されうる。そのような実装は、コンピュータ可読媒体、例えば、ディスケット、CD-ROM、ROM、またはハードディスクなどの、有形の媒体上に固定された、あるいは限定はしないが、光またはアナログ通信回線を含む有形の媒体上で、あるいは限定はしないが、マイクロ波、赤外線、または他の伝送技術を含む無線技術の無形の手段を使用して、モデムまたは他のインターフェイスデバイスを介して、コンピュータシステムに伝送可能な、一連のコンピュータ可読命令を含むことができる。これら一連のコンピュータ可読命令は、本明細書ですでに説明されている機能の全部または一部を具現化する。
【０１７２】
当業者であれば、このようなコンピュータ可読命令は、多くのコンピュータアーキテクチャまたはオペレーティングシステムとともに使用するために多くのプログラミング言語で作成されうることを理解するであろう。さらに、このような命令は、限定はしないが半導体、磁気、または光を含む、現在の、または将来のメモリ技術を使用して格納されるか、または、限定はしないが光、赤外線、またはマイクロ波を含む、現在の、または将来の通信技術を使用して伝送されうる。このようなコンピュータプログラム製品は、印刷または電子文書を添付した取り外し可能媒体、例えばシステムROMまたは固定ディスク上のコンピュータシステムにプリインストールされている、例えば市販ソフトウェアとして配布されるか、あるいはサーバーまたはネットワーク、例えばインターネットまたはワールドワイドウェブ上の電子掲示板から配布されうることが企図される。
【０１７３】
本発明の多数の好ましい実施形態について、付属の図面を参照しつつ、実施例のみを使って説明する。
【図面の簡単な説明】
【０１７４】
【図１】本発明を実装することができるグラフィックス処理システムの第1の実施形態の概略を示す図である。
【図２】本発明の方法で処理できるコマンドリストの第1の実施形態の概略を示す図である。
【図３】本発明の方法のオペレーションをトリガーするためのコマンドリストの第2の実施形態の概略を示す図である。
【図４】本発明を実装することができるグラフィックスプロセッサシステムの第2の実施形態の概略を示す図である。
【図５】本発明の一実施形態によりZ値のオフセットを行う方法の概略を示す図である。
【発明を実施するための形態】
【０１７５】
類似の参照番号は、断りのない限り、図全体を通して類似のコンポーネントおよび要素に使用される。
【０１７６】
図1は、本発明の方法で動作させうる例示的なグラフィックス処理システムの第1の実施形態の本発明の実装に関連するパイプラインステージを示している。図1は、グラフィックスデータ(頂点データ)に変換および照明オペレーションが実行された後のパイプラインステージ(「変換後」パイプラインステージ)を示している。
【０１７７】
図1に示されているグラフィックス処理システムは、タイルベースシステムであるが、本発明は、上述のように、直接モードレンダリングシステムなどの他のシステムにも等しく適用可能である。
【０１７８】
図1に示されているように、この実施形態のグラフィックス処理システムは、入力として、コマンドリスト2を受け取る。これらのリストは、グラフィックス処理システムへの入力としてコマンドリストリーダー3によって外部メモリから読み込まれる。
【０１７９】
グラフィックス処理システム1は、さらに、位置および可変データなどの、処理されるプリミティブの頂点に関係するデータ5を読み込むことができる頂点ローダー4を備える。ここでもまた、このデータは、外部メモリから取り出すことができる。
【０１８０】
図1に示されているように、読み込みコマンドおよび頂点データが、プリミティブセットアップステージ5に送られ、そこで、当業で知られているように、受け取ったコマンドおよび頂点データに対する応答としてレンダリングされるプリミティブをセットアップする。
【０１８１】
コマンドリストリーダーは、さらに、コマンドリストリーダーによって読み込まれたコマンドによって指示されるような適切なレンダリング状態に対しパイプラインを制御し、構成するレンダリング状態ユニット6への入力を行う。したがって、このレンダリング状態ユニットは、図1に示されているように、プリミティブセットアップステージ5からパイプラインを通して渡されるプリミティブに対し適切なオペレーションを実行するために適切な状態へのグラフィックスプロセッサ1のステージを構成する。
【０１８２】
図1に示されているグラフィックス処理アーキテクチャでは、プリミティブ保存Zテストステージ7が、プリミティブセットアップステージ5の前に来る。当業で知られているように、このプリミティブ保存Zテストステージ7は、階層Zバッファ、Zピラミッド8からの深さ値データを使用して、すでに処理されているプリミティブによって塞がれていると判定されうるプリミティブを保存される形で除去することを試みる(つまり、その深さ値は、Zピラミッド8内に存在する)。
【０１８３】
次のステージでは、処理パイプラインがプリミティブセットアップステージ5でプリミティブ保存Zテストに合格するプリミティブを「セットアップ」する。
【０１８４】
次いで、これらのプリミティブは、適切なサンプル位置に合わせてラスター処理され、それらのサンプル位置を表すフラグメントがレンダリングのため生成される。これは、ラスター処理ステージ9で実行される。
【０１８５】
次いで、ラスター処理されたフラグメントは、フラグメント早期Zテストステージ10に送られ、そこで、当業で知られているように、Zバッファ16内の値を使用して、すでに処理されているフラグメントによって塞がれているとすでに判定されうるフラグメントをカリングすることを試みる。
【０１８６】
次いで、フラグメント早期Zテストステージ10に合格したフラグメントは、フラグメントシェーディングステージ11に送られ、そこでフラグメントに陰影付けが行われる。このようなシェーディングは、当業で知られているように、フラグメントに対しフラグメントシェーダープログラムを実行する、テクスチャをフラグメントに適用する(例えば、テクスチャキャッシュ12を使用して)、ブレンディングを適用する、フラグメントに対しフォギングまたは他のオペレーションを実行するなどの、好適な、所望のフラグメントシェーディングプロセスを伴いうる。フラグメントシェーディングステージ11は、さらに、図1に示されているようなフラグメントシェーダープログラムおよびユニフォーム13などの他の入力をも使用できる。
【０１８７】
次いで、とりわけ、当業で知られているように、フラグメントの位置に対するZバッファ値16を使用してレンダリングされたフラグメントが実際に最終画像内に見られるかどうかを判定するためにフラグメントに対しパイプライン深さテストの終わりを実行し、さらに例えば、必要なアルファおよび/またはステンシルテストを実行する、フラグメントテストステージ14がある。
【０１８８】
次いで、フラグメントテストステージ14に合格したフラグメントは、フラグメントオペレーションステージ15に渡され、そこで、フレームバッファとのブレンド、ディザリングなどフラグメントに対し必要な残りのオペレーションを実行する。
【０１８９】
最後に、出力フラグメント、色、などの値が適切な色バッファ17に書き込まれ、そこから例えば、表示するためフレームバッファに出力できる。1つのフラグメントに対する深さ値は、さらに、当業で知られているように、Zバッファ16に適宜書き込まれる。
【０１９０】
色バッファ17およびZバッファ16は、当業で知られているように、バッファが表すそれぞれのサンプリング点(本質的に、処理されるタイルのそれぞれのサンプリング点)について、適切な色など、またはZ値をそれぞれ格納する。
【０１９１】
図1は、4つの色バッファ17および1つのZバッファ16を有する構成を示している。しかし、当業者であれば理解するように、レンダリングパイプラインの終わりの出力バッファの異なる組合せおよび構成を、必要に応じて使用することも可能である。
【０１９２】
図1(および後述の図4)に示されているようなグラフィックスプロセッサのステージ、要素、およびユニットなどのそれぞれは、必要に応じて実装することが可能であり、そこで、例えば、必要なオペレーションおよび機能を実行する適切な回路、および/または処理ロジックなどを備えることは理解されるであろう。
【０１９３】
次に、本発明の一実施形態による図1に示されているグラフィック処理システムのオペレーションについて、説明する。
【０１９４】
上述のように、本発明は、例えば、好ましくは、プリミティブを表示するのに必要なデータを用意するために、グラフィックス処理システムに2回通るグラフィックスコマンドのリストの一部に含まれるコマンドに対する応答として描画されるプリミティブを送ることを伴うが、第1のパスでは、それぞれのサンプル点でどのプリミティブが存在するかを判定することが意図されており、次いで第2のパスでは、それぞれのサンプル点で存在することが判明しているプリミティブをより完全に処理する。
【０１９５】
したがって、本発明の方法によるオペレーションにおいて、コマンドリストリーダー3は、最初に、本発明の方法によるオペレーションが適用されるコマンドリストの一部を読み込み、識別する(そのようなオペレーションをトリガーするのに好適な機構について、以下で詳述する)。
【０１９６】
コマンドリストのそのような一部を識別することに対する応答として、コマンドリストリーダー3は、この実施形態ではZ-only処理モードでコマンドリストのその一部を処理するようにプロセッサ1を構成するのに適したコマンドをレンダリング状態ユニット6に送る。このZ-only処理モードでは、グラフィックス処理システム1は、有効化されている書き込み状態のみがZの読み込みおよび書き込みおよびZテストであるように構成される。
【０１９７】
次いで、コマンドリストの一部に含まれるコマンドに対応するプリミティブは、処理パイプラインを通じて通常どおりに渡されるが、ただし、この特別なZ-only処理モードが設定される。
【０１９８】
これにより、Zバッファ16および階層Zピラミッド8に、プリミティブリストの一部に含まれるプリミティブに対する適切なZ値を書き込むことができるが、それと同時に、メモリアクセスおよびフラグメント処理およびシェーディングは、例えば、最小限に抑えられる。
【０１９９】
本発明の方法により処理されるコマンドリストの一部分の終わりに達したとき(ここでもまた、コマンドリストリーダー3にこのことを示すための機構については、以下で詳述する)、コマンドリストリーダー3は、このことを認識し、コマンドリストの同じ部分に対する処理を再びトリガーするが(つまり、2度目にメモリからコマンドリストの一部を読み込む)、このときに、この実施形態では、(コマンドリストのその一部分に対応するプリミティブの)コマンドリストのその一部分の処理に対するレンダリング状態を注目するコマンドリストの一部について受け取ったコマンドによって示される通常のレンダリング状態に設定する。言い換えると、コマンドリストリーダー3は、レンダリング状態ユニット6に、グラフィックスプロセッサ1がコマンドリストの一部で第2のパスに対し「通常の」方法でプリミティブを処理するように構成させる。
【０２００】
このことは、第2の処理パスにおいて、プリミティブは通常どおり処理されるが、例えば、プリミティブ保存Zテスト7およびフラグメント早期Zテスト10が実行されると、これらのテストでは、Z値およびZバッファ16内にすでに格納されているデータおよび第1の処理パスからのZピラミッド8を使用することを意味する。この結果、これらのテストは、注目するサンプリング点について処理される実際のプリミティブ(およびフラグメント)を除くすべてを処理からカリングする(そして、グラフィックス処理システムの通常、Zテストなどのハードウェアのみを使用する)であろう。
【０２０１】
言い換えると、第1の処理パスで書き込まれたZバッファ16は第2の処理パスで実行されたZテストとともに、システムが第2の処理パスのそれぞれのサンプリング点について処理されるべきプリミティブを決定することを可能にする。
【０２０２】
これにより、システムは、この方法で処理されているコマンドリストの一部に含まれるコマンドに対する応答として描画される他のプリミティブによって実際には塞がれるプリミティブの、フラグメントシェーディングなどの不要な処理を第2のパスにおいて回避することができ、それによって、コマンドリストのその部分での第2の処理パスの効率がよくなる。
【０２０３】
図2および3は、この実施形態における本発明の方法によるオペレーションをトリガーする構成の概略を示している。
【０２０４】
図2は、メモリ内のコマンドリストストリームが単一プリミティブを描画するためのコマンドを含む場合に、この方法を実行する好ましい一実施形態を示している。図3は、コマンドストリームがメモリからのプリミティブデータを必要とする複数のプリミティブを描画するためのコマンドを含む状況を示している。
【０２０５】
図2および3に示されるいるリストは両方とも、タイルベースのレンダリングシステムに関係しており、したがって、図2および3に示されているように、とりわけ、新規タイル開始コマンド「T」および新しいタイルに処理を分岐させる無条件分岐コマンド「B」を含む。しかし、図3に示されているタイル関係コマンドを無視したとすると、そのコマンドリストストリームは、同様に、直接モードの非タイルグラフィックス処理ユニットに入力されるコマンドリストにも対応する。
【０２０６】
図2に示されている構成について最初に説明する。
【０２０７】
図2に示されているように、コマンドリスト30は、上述のように、当業で知られているように、新規タイル開始コマンド31および無条件分岐コマンド32(新規タイルの開始をトリガーする)を含む。組み合わされたコマンドリスト30は、さらに、プリミティブを描画するように命令する一連のコマンド33を含む。この実施形態では、「プリミティブ描画」コマンド33は、さらに、プリミティブを描画するのに必要なすべてのデータを含む。これらのコマンドは、グラフィックスプロセッサ用のドライバによって生成され、グラフィックスプロセッサのコマンドリストリーダー3によってアクセスできるようにメモリ内に格納される。
【０２０８】
図2は、コマンドリスト内に挿入される新しい2つのコマンド、つまり、「Z-Onlyモード有効化」コマンド「Z」34および「Z-Onlyモード条件分岐」コマンド「Zb」35も示している。これらの新しいコマンドは、本発明の方法での処理が望ましいコマンドリストの一部分のまわりにドライバによって挿入され、以下でさらに説明されるように、本発明の方法でオペレーションをトリガーする動作をする。
【０２０９】
この実施形態では、本発明の方法によるオペレーションは、Z値を修正しないシェーダーとともに不透明プリミティブ(つまり、それらのプリミティブを通して何かを見せる可能性のない(背後にある何かを表示するために)プリミティブ)を描画するためにコマンドのシーケンスに対し実行され、それに応じて、ドライバは、それらのシーケンスを認識し、次いで、図2に示されているように、Z-onlyモード有効化コマンド34をコマンド(プリミティブ)のそのようなシーケンスの先頭に挿入し、Z-onlyモード条件分岐コマンド35をそのようなシーケンス(シーケンス38、37、36)の末尾に挿入する。
【０２１０】
次いで、コマンドリストリーダー3が、プリミティブリスト内のZ-onlyモード有効化コマンド34を認識すると、有効化されているレンダリング状態のみが、上述のように、Zの読み込みおよび書き込みおよびZテストである「Z-only」処理モードへのグラフィックスプロセッサ1の切り替えがトリガーされる。次いで、図2に示されているシーケンス38などのコマンドのシーケンスは、コマンドリストリーダーがシーケンスの末尾にあるZ-onlyモード条件分岐コマンド35を識別するまでこのモードで処理される。
【０２１１】
Z-onlyモード条件分岐コマンドは、現在のレンダリングモードが「通常」であるか、または「Z-only」であるかというのが分岐条件である条件付き分岐を符号化する。これは、また、分岐を選ぶ副作用として、Z-onlyモードから通常レンダリングモードへの遷移をトリガーする。
【０２１２】
この効果は、コマンドリストの関連する部分の第1の処理パスの終わりに(例えば、図2の部分38)、コマンドリストリーダーは、Z-onlyモード条件分岐コマンド35によって示された条件分岐をトリガーし(その時点でグラフィックスプロセッサ1がZ-onlyモード有効化コマンド34によってトリガーされてZ-onlyモードに入るので)、これによりコマンドリストの部分38の先頭に分岐して戻るが、グラフィックス処理を通常のレンダリングモードにも切り替えるというものである。
【０２１３】
次いで、これらのコマンドによって表されるコマンドリストの部分38が、上述のように、グラフィックスプロセッサ1によって2度目にトラバースされるが、このときに、描画されるプリミティブは、上述のように早期にZカリングでき、例えば、最も近い表面のみがシェーディングのためサンプリング点およびフラグメントを生成する。
【０２１４】
次いで、この第2のパスで2度目にZ-onlyモード条件分岐コマンド35に到達したときに、その際にプロセッサが通常モードで処理しており(つまり、グラフィックス処理はZ-onlyモードに入らない)、分岐が選ばれず、通常の方法によるコマンドリストの残り部分の処理が続けられうるため、分岐コマンドは、トリガーされない。
【０２１５】
図3は、わずかに異なるコマンドリスト構成を示している。図3は、とりわけ、「新規タイル」コマンド31、および「三角形描画」コマンド40を含むコマンドリスト45をここでもまた示している。しかし、この場合、三角形描画コマンド40は、それ自体は、すべての必要なプリミティブデータを含むわけではなく、したがって、その代わりに、描画されるべきできであることをコマンド40が示している三角形に対応する適切なプリミティブ(三角形)データの1つ(または複数)のプリミティブリストからの読み込みをトリガーする。
【０２１６】
図3に示されているように、ここでもまた、適切なZ-Onlyモード有効化コマンド34およびZ-Onlyモード条件分岐コマンド35は、図3に示されているシーケンス41、42、および43などの、本発明が適用される三角形(プリミティブ)描画コマンド40のシーケンスのまわりのコマンドリスト内に挿入される。
【０２１７】
これらのコマンドは、次いで、図2に関して上で説明されている方法によるオペレーションをトリガーする。
【０２１８】
上記から、図2および図3の両方の構成において、例えば図3に示されているコマンド41のシーケンスは、シーケンス41内に包含されている三角形描画コマンド40に対する応答として描画されるプリミティブに対応するプリミティブの対応するシーケンスを有効に表すので、(不透明)プリミティブのシーケンスは、本発明の方法により処理されるという効果があることは理解されるであろう。
【０２１９】
図2および3は、グラフィックスプロセッサに供給されるコマンドリスト内に適切なコマンドを入れることにより本発明のオペレーションをトリガーすることを例示しているけれども、このオペレーションは、必要ならば、他の方法でもトリガーされうる。例えば、グラフィックスプロセッサは、それ自体、一連の不透明プリミティブを例えば描画するコマンドを識別し、次いで、そのような一連のプリミティブについて本発明の方法によるオペレーションをトリガーする(および例えば、2つの処理パスをそのような一連のプリミティブに実行できるために必要な、アドレスデータなどのデータを格納する)ことが可能である。
【０２２０】
グラフィックスプロセッサ1は、適切な、所望の方法でコマンドリスト内に含まれるコマンドに対する応答として上記のオペレーションに対する適切なZ-onlyモードおよび通常モードに合わせて構成されうる。例えば、処理パイプラインをZ-onlyモードまたは通常レンダリングモードに適宜設定するようにトリガーされる大域的レンダリング状態変更がありうる。
【０２２１】
例えば、出願人の前の方で述べた英国特許出願第2420261号で説明されているようなシステムと同様に、プリミティブおよびフラグメントなどは、内部フィールド内に多数の定義済みレンダリング状態のうちの1つへのインデックスを入れて、次いで好ましくは、これらの定義済みレンダリング状態のうちの1つが、Z-onlyモードレンダリング状態に設定される。この場合、Z-onlyモードがトリガーされると、それぞれのプリミティブのレンダリング状態インデックスを特定のZ-onlyモード定義済みレンダリング状態(例えば、レンダリング状態インデックス0)に書き換えてから、それをグラフィックスプロセッサに通し、ラスタライザーに送ることが可能である。これらのプリミティブは、したがって、プロセッサを通じてZ-onlyモードパスのZ-onlyレンダリング状態を自動的にピックアップする。
【０２２２】
また、Z-onlyモードレンダリング状態に対するフラグメントプログラムアドレス(フラグメントシェーディングが使用される)を同様に予約することも可能であり、また予約することが好ましい。次いで、このアドレスは、好ましくは、フラグメントシェーダーのバイパスをトリガーする(フラグメントプログラムは、通常、Z-onlyモードレンダリング状態に必要にならないので)。
【０２２３】
この実施形態では、プリミティブのシーケンスに対する第2の処理パスが、Z比較機能<=(以下)または>=(以上)を使用して実行される場合、そのZ比較機能は、第2の処理パスで使用される。
【０２２４】
しかし、注目するプリミティブの示されているZ比較機能が<(より小さい)または>(より大きい)である場合、その(元のグラフィックス描画命令によって)示されているZ比較機能は、第2の処理パスで、Z比較機能<=(以下)または>=(以上)にそれぞれ変更される。
【０２２５】
これは、所望のプリミティブ(フラグメント)が、それでも、第2の処理パスにおけるZ比較テストに必ず合格するようにするために行われるが、ただし、Zバッファ16およびZピラミッド8は、すでに、注目するサンプリング点に対するそのプリミティブ(フラグメント)の深さ値を含むものとする。これにより、本発明なしで描画されるのと同じプリミティブ(フラグメント)が常に生成されることが保証され、Zテストにおける結び付きの結果は、第2の処理パスについて影響を受けない。
【０２２６】
この実施形態では、必要ならば、第2の処理パスに対するZ比較機能へのこの変更は、ドライバサポートソフトウェアにおいて実行される。例えば、これをドライバのコンパイルオプションとして用意することが可能であり、これにより、プラットフォームインテグレータはこの修正を加えるかどうかを決定することができる。
【０２２７】
また、例えば、プリミティブリストの一部に対し指定された深さテストが<または>(より小さい、またはより大きい)である場合に(つまり、いずれにせよ深さテストが<=または>=(以下、または以上)として指定されている一連のプリミティブに対してのみ本発明を有効にするため)、本発明の方法によるオペレーションを禁止することも可能である。したがって、これにより、本発明を実装するときに深さテストのZ比較機能を変える必要がなくなる。
【０２２８】
上記の変更は両方とも、ドライバのソフトウェア変更のみで可能であり、したがって、本発明は、加える変更を最小限に抑え、また局所的変更に留めて、既存の設計で例えば使用できる。
【０２２９】
代替えの構成では、さらに正しいプリミティブおよびフラグメントが、第2の処理パスのZテストに必ず合格するようにするために、上述のように必要に応じてZ比較機能を変更する代わりに、第1の処理パスで書き込まれたZ値を、Z比較の<(より小さい)ファミリでは視点から離れる方向に、またはZ比較の>(より大きい)ファミリでは視点に向かう方向にオフセットし、ここでもまた正しいフラグメント(プリミティブ)が第2の処理パスで陰影を付けられるようにすることが可能である。
【０２３０】
図5は、これを例示しており、またZ比較機能<(より小さい)が使用されるときについて一組のオフセットZ値72を与えるように視点71から離れる第1の処理パスで決定されたZ値70のオフセットを示している。
【０２３１】
この構成では、第1の処理パスで決定されたZ値70は、何らかの効果を持つ第1の処理パスから決定されたZ値に加算できる(または、適宜、減算できる)可能な最小の量でオフセットされる。
【０２３２】
したがって、整数のZバッファの場合、第1の処理パスで書き込まれるZ値は、適宜、適宜1ずつ増分または減分される。
【０２３３】
浮動小数点数のZ値の場合、適用される最小のオフセットは、Z値それ自体に応じて変わるが、現在のZ値に対し加算または減算できる最小の数は、その場合、Z値の指数およびその仮数の一定のサイズから容易に決定されうる。
【０２３４】
次いで、決定されたオフセットは、Z値をZバッファ16に(したがってさらに、Zピラミッド8に)書き込む前に第1の処理パスで決定されたZ値に適用される。
【０２３５】
上述のようにZ値のオフセット実行またはZ比較機能の変更に対する代替えの構成では、Zバッファを、第1の処理パスで、それぞれのサンプリング点に適用されると決定されたプリミティブの識別番号が格納されるプリミティブIDバッファで増やすことが可能である。次いで、第2の処理パスで、フラグメント毎のテストにZバッファを使用する代わりに、それぞれのフラグメントでは、そのIDを、そのフラグメント(フラグメントが対応している1つまたは複数のサンプリング点に対する)および第2の処理パスで陰影を付けられ書き出されたプリミティブIDバッファ内に格納されているIDと一致するフラグメントのみに対するプリミティブIDバッファにすでに格納されているプリミティブIDと比較する。
【０２３６】
言い換えると、第2の処理パスで、フラグメント毎の(サンプリング点毎の)早期深さテストは、フラグメントに関連付けられているプリミティブ識別番号と第1の処理パスで生成されたプリミティブIDバッファに格納されているプリミティブ識別番号との識別番号比較で置き換えられる。
【０２３７】
この構成では、プリミティブ識別番号は、例えば、入力されるそれぞれのプリミティブについて増分されるカウンターを使用することにより割り当てられ、プリミティブはレンダリングパイプラインに流し込まれるときにこのカウンターからIDを割り当てられる。次いで、第2の処理パスで、プリミティブカウンターは、プリミティブがパイプラインに流し込まれるときに適切な識別番号を再び取得するようにリセットされうる。
【０２３８】
図4は、上記の代替えの構成のうちのいくつかの概略を示すグラフィックス処理システムの第2の実施形態を示している。
【０２３９】
図4に示されているように、この実施形態のグラフィックス処理システム50は、図1に示されている実施形態と似た多数のコンポーネントを備える。しかし、上記の代替えの構成を組み込むために使用されうるその実施形態に対するいくつかの追加もある。
【０２４０】
図4は、さらに、外部メモリから、コマンドリストおよび頂点データなどの関連するデータにアクセスするために、コマンドリストリーダー3および頂点データ4などの、グラフィックス処理システムによって使用される外部メモリインターフェイス51の概略も示す。
【０２４１】
図4は、最初に、上述のように、Zバッファ16に書き込まれる前に、適切なオフセットを第1のZ-onlyモードの処理パスで決定されたZ値に適用するために、上述のように、使用されうるZオフセットステージ52の概略を示している。
【０２４２】
図4は、さらに、第2の処理パスで処理される適切なプリミティブを識別するために、上述のように、使用されうるプリミティブIDカウンター53およびプリミティブIDバッファ54の概略を示している。
【０２４３】
上述のように、この構成では、この実施形態において16ビットカウンターであるプリミティブIDカウンター53は、コマンドリストの一部が本発明の方法により処理される場合にリセットされ、次いで、入力されるコマンドリストの一部によって表されるシーケンスのそれぞれのプリミティブに対し増分される。次いで、これらのプリミティブは、レンダリングパイプラインに流れるときにカウンターから適切なIDを取得する。
【０２４４】
第1の処理パスでは、所定のサンプリング点に対する所定のフラグメントに割り当てられたプリミティブ識別番号(カウンター値)は、その深さ値がZバッファ16内の対応するZバッファ要素に書き込まれるときにプリミティブIDバッファ54に書き込まれる。この実施形態では、プリミティブIDバッファ54は、16ビットのサンプリング点毎のバッファであるが、他の構成も、もちろん、使用可能である。
【０２４５】
次いで、コマンドリストの一部に対する第2の処理パス(つまり、完全なレンダリング状態パス)で、プリミティブカウンター53は、最初に、コマンドリストの一部に対応するプリミティブが、レンダリングパイプラインに流れるときに第1の処理パスの場合と同じIDをカウンターから取得するようにリセットされる。
【０２４６】
しかし、この第2の処理パスでは、Zバッファ16は、サンプル点毎のテストには使用されない(Zピラミッド8は、そのまま保存される形で使用されうるが)。その代わりに、それぞれのフラグメントでは、その割り当てられたプリミティブIDをプリミティブIDバッファ54内に格納されているその1つまたは複数のサンプル位置に対する対応するプリミティブIDと比較され、一致しないフラグメントはカリングされ、一致するフラグメントは陰影を付けられ、色バッファに書き出されるといったことが行われる。
【０２４７】
図4は、さらに、グラフィックス処理プラットフォーム50それ自体の外部メモリから取り出されたデータを格納するために使用されうるオンチップバッファ55の概略を示している。このバッファは、とりわけ、プリミティブリストおよび頂点位置を、例えば、本発明を実装するときに外部メモリから2回読み出す必要をなくすか、またはその必要性を減じるために使用されうる。
【０２４８】
このバッファを使用するには、コマンドリストおよび頂点データなどが、この実施形態の第1のZ-only処理パスにおいて外部メモリから読み込まれる場合、そのデータは、プリミティブリストのその部分に実行される第2の処理パスについてそのバッファ内で利用可能なようにバッファ55に格納される。
【０２４９】
バッファ55は、好ましくはZ-onlyコマンドによってリセットされる(つまり、その後、新しいZ-onlyコマンドが関係するコマンドリストの部分について新規データを書き込めるように)。
【０２５０】
図4に示されているバッファ55は、長さKのサイズを有するものとして、つまり、最大K個までのプリミティブからなる一連のプリミティブ(のシーケンス)に対しデータを格納できるものとして示されている。このバッファは、例えば、以下の方法のうちの1つで使用されうる。
【０２５１】
最初に、バッファ55は、固定長Kなので、本発明の方法により処理されるコマンドリストの一部が、バッファ55の長さKよりも長い場合、コマンドリストは、バッファ55にそれぞれ収まるようにそれよりも短い長さに分割することが可能であり、それによって、コマンドリストの部分全体のそれぞれのそのような短い長さは事実上、その長さに応じたZ-onlyの第1の処理パス構成を有することになる。
【０２５２】
それとは別に、バッファ55に、例えば、この実施形態の方法により処理されるコマンドリストの所定の一部の最初のK個のコマンドリストエントリおよび関連する頂点位置を書き込むことが可能である。この場合、コマンドリストのその部分に対する第2の処理パスでは、最初のK個のコマンドなどは、バッファ55から取り出されるが、残りのコマンドなどは、外部メモリから再び取り出される。
【０２５３】
さらに、例えば、バッファ55の長さKのある倍数を定義し、これを超えるとコマンドリストの一部がさらに複数の小部分に分けられるようにすることが可能であり、それぞれには本発明の方法によるそれ固有の処理が設定される。
【０２５４】
上記の実施形態は、コマンドリストがグラフィックスプロセッサによって2回読み込まれ、実行される構成に関して説明されているが、それが必要でない構成を備えることも可能であり、ただし第1の処理パスに続いてさらに多くのデータをオンチップに格納することを必要とする。
【０２５５】
例えば、第1の処理パスでは、テクスチャのサンプリングなしで、注目するプリミティブに対するテクスチャおよび他の何らかの変更を含めて補間オペレーションを実行し、次いで、コマンドリストの再解析を行わなくても第2の処理パスを実行させるのに十分な情報をサンプリング点毎にバッファリングすることが可能である。処理されるプリミティブ(フラグメント)が決定された後、これらは、バッファリングされている情報を使用して第2のパスで処理されうる。
【０２５６】
この構成では、コマンドなどを2度目に読み込む必要がなくなるが、第1の処理パスでより大きな内部バッファおよびより多くの処理ステップを必要とすることになる。
【０２５７】
さらに代替えの方法では、第1の処理パスで決定されるようにそのサンプリング点に書き込んだプリミティブコマンドをサンプリング点毎に格納する。次いで、完全レンダリング状態である第2の処理パスは、ここでもまた、コマンドリストを読み込む必要はないが、その代わりに、第2の処理パスでサンプリング点を処理するためにどの状態をセットアップするかを正確に決定するために、格納されているプリミティブコマンドを使用してバッファ内のサンプリング点について実行されうる。
【０２５８】
この構成では、64ビットのプリミティブコマンドタイルバッファが、好ましくは使用される。
【０２５９】
上記のことから、本発明は、その好ましい実施形態において、少なくとも、不可視フラグメントのレンダリングを回避するための改善された技術を実現することがわかる。
【０２６０】
したがって、本発明は、その好ましい実施形態において少なくとも、外部メモリ帯域幅の使用の低減、およびそれに応じて、使用電力量の低減をもたらすことができる。また、これは、レンダリング速度および複雑なシーンの処理能力を高めやすく、アプリケーションに対し透過的な方法でそれを行うことができる。
【０２６１】
これは、本発明の好ましい実施形態において少なくとも、コマンドリストの一部に含まれるコマンドに対する応答として描画されるプリミティブを2回、つまりZ-onlyレンダリングモードで1回、次に完全レンダリング状態を有効にしてもう1回、処理するようにグラフィックス処理システムを構成し、ただし、第1の処理パスから決定されたZ値を使用して第2の処理パスにおいてプリミティブおよびフラグメントを処理からカリングすることにより達成される。好ましい一実施形態では、このオペレーションをトリガーするためにコマンドリスト内の一連の不透明プリミティブを描画するための一連のコマンドの先頭および末尾にコマンドが挿入される。
【符号の説明】
【０２６２】
1  グラフィックス処理システム
2  コマンドリスト
3  コマンドリストリーダー
4  頂点ローダー
5  データ、プリミティブセットアップステージ
6  レンダリング状態ユニット
7  プリミティブ保存Zテストステージ
8  Zピラミッド
9  ラスター処理ステージ
10  フラグメント早期Zテストステージ
11  フラグメントシェーディングステージ
12  テクスチャキャッシュ
13  ユニフォーム
14  フラグメントテストステージ
15  フラグメントオペレーションステージ
16  Zバッファ
17  色バッファ
30  コマンドリスト
31  新規タイル開始コマンド
32  無条件分岐コマンド
33  コマンド
34  「Z-Onlyモード有効化」コマンド「Z」
35  「Z-Onlyモード条件分岐」コマンド「Zb」
38、37、36  シーケンス
40  「三角形描画」コマンド
41、42、および43  シーケンス
45  コマンドリスト
50  グラフィックス処理システム
51  外部メモリインターフェイス
52  Zオフセットステージ
53  プリミティブIDカウンター
54  プリミティブIDバッファ
55  オンチップバッファ
70  Z値
71  視点
72  オフセットZ値
【図１】
0005538750.tif 000002
【図２】
0005538750.tif 000003
【図３】
0005538750.tif 000004
【図４】
0005538750.tif 000005
【図５】
0005538750.tif 000006