以下の説明は、当業者が本発明を作製および使用することを可能にするために実施例として提示されている。本発明は、本明細書に記載される実施形態に限定されず、開示された実施形態に対する様々な修正は、当業者にとって明らかであろう。実施形態は、実施例としてのみ記述される。
本開示は、シーンのタイルベースのレンダリングを実施するための一つ以上の処理ユニットを含むグラフィック処理システムに関連する。本明細書の原理に従って構成されたグラフィック処理システムは、任意のタイルベースのアーキテクチャを有してもよく、例えば、システムはタイルベースの遅延レンダリングを実施するよう動作可能であり得る。各処理ユニットは、任意の他の処理ユニットとは独立して、かつ任意の他のタイルとは独立してタイルを処理することができる場合がある。処理ユニットは、例えば、任意の種類のグラフィカルおよび/またはベクタおよび/またはストリーム処理ユニットであり得る。各処理ユニットは、シーンのプリミティブの幾何学的形状処理および/または断片処理を実施するためのレンダリングパイプラインを含み得る。各処理ユニットは、GPUの異なる物理コアであってもよい。
グラフィック処理システムは、ハードウェア構成要素(例えば、GPU)およびソフトウェア構成要素(例えば、GPUなどのグラフィック処理装置のハードウェア処理ユニット)およびソフトウェア構成要素(例えば、GPUなどのグラフィック処理装置のハードウェア処理ユニットで実行するためのファームウェア、手順およびタスク)を含んでもよい。グラフィック処理システムは、ハードウェア構成要素用のソフトウェアドライバ(例えば、GPU用のドライバ)を備えてもよい。ソフトウェアドライバは、グラフィック処理システムを含むデータ処理システムでサポートされてもよい。ソフトウェアドライバは、データ処理システムで実行しているソフトウェアアプリケーションのハードウェアコンポーネントへのインタフェースを提供してもよい。
タイルベースのレンダリングシステムは、複数のタイルに分割されたレンダリング空間を使用する。当技術分野で知られているように、タイルは、任意の適切な形状およびサイズ、例えば、長方形(正方形を含む)または六角形とすることができる。レンダリング空間のタイルは、例えば、グラフィック処理システムでレンダリングされるフレームを表すレンダターゲットの一部分に関連し得る。フレームは、画像またはビデオフレームの全てまたは一部であり得る。一部の実施例では、レンダ出力は、表示される最終画像ではなく、代わりに、そのテクスチャを含む画像をレンダリングする際に表面に後で加えることができるテクスチャを表すことができる。下記の例では、レンダ出力は、表示される画像を表すフレームであるが、その他の例では、レンダ出力は、テクスチャまたは環境マップなどの他の表面を表すことができることを理解するべきである。
タイルベースのレンダリングシステムは一般に、(i)レンダリング空間の各タイルに対して、幾何学的形状のどの品目がそのタイルをレンダリングすることに関連し得るか(例えば、少なくとも部分的にどのプリミティブがタイルに重なるか)を判定するため幾何学的形状(例えば、プリミティブ)を処理する幾何学的形状処理段階、および(ii)例えば、バッファの記憶用の(フレームバッファなど)および/または表示用のレンダリングシステムからの出力であり得る、例えば、タイル内の画素の位置に画素値を生成するためなどの、タイルをレンダリングするため特定のタイルをレンダリングことに関連する幾何学的形状を処理するレンダリング段階(すなわち、「断片処理段階))という動作の二つの別個の段階を実施する。タイルに関連する幾何学的形状を処理することは、例えば、タイルの試料位置でのプリミティブのサンプリングによってプリミティブ断片を生成し、どの断片が見えるかを判定し、断片がどのように画素の外観に影響を与えるかを判定することを含み得る。試料位置と画素の間の関係は1対1である場合がある。別の方法として、複数の試料位置は、複数の試料位置に対して決定されたレンダリングされた値を組み合わせることによって最終画素値を生成することができるように、各画素位置に関連し得る。これは、アンチエイリアシングの実装に有用であり得る。
処理ユニットは、例えば、タイリング、幾何学的形状処理、テクスチャマッピング、シェーディング、深さ処理、頂点処理、タイル加速、クリップ処理、カリング、プリミティブアセンブリ、カラー処理、ステンシル処理、アンチエイリアシング、レイトレーシング、ピクセル化、およびテッセレーションなどを含む、幾何学的形状処理段階およびレンダリング段階におけるグラフィック処理の任意の態様の一部または全部を実施するように構成され得る。異なる処理ユニットは、レンダリングの異なる態様を実施するように構成され得る。一部の実施例では、処理ユニットの全ては同一であり得る。
一般に、断片処理エンジンは、断片処理を集合的または個別に実施するよう、すなわち、レンダリング段階で処理を実施するように配置されたグラフィック処理システムの部分を含む。断片処理エンジンは、グラフィック処理システムの特定のアーキテクチャに適切な任意の方法で配置された一つ以上の機能ユニットを含んでもよい。一般に、幾何学的形状エンジンは、タイリングを含む幾何学的形状処理を集合的または個別に実施するように配置されたグラフィック処理システムの部分を含む。幾何学的形状エンジンは、グラフィック処理システムの特定のアーキテクチャに適切な任意の方法で配置された一つ以上の機能ユニットを含んでもよい。グラフィック処理システムの部分は、その断片処理エンジンとその幾何学的形状エンジンとの間で共有され得る。本明細書で説明し、図で説明した幾何学的形状ユニット、タイリングエンジン、および処理ユニットの構成は、例として提供され、また当然のことながら、幾何学的形状ユニット、タイリングエンジンおよび処理ユニットの異なる構成が他のアーキテクチャで採用され得る。
本明細書に記載の原理に従って構成されたグラフィック処理システムは、任意の種類のシーンをレンダリングするように配置され得る。一部のアプリケーションでは、レンダリング処理のフォルトが識別されて適切なアクションが取られるように、シーンのレンダリングを保護する必要がある。例えば、自動車のコンテクストでは、グラフィック処理システムを使用して、ダッシュボード表示画面で表示するために機器クラスタをレンダリングし得る。機器クラスタは、車両の速度や車両のフォルトの詳細など、ドライバに重要情報を提供する。このような重要情報がドライバに確実に提示されることが重要であり、車両規則は通常、ISO26262標準のASIL Bなどの所定の安全レベルを満たす方法で重要情報がレンダリングされることを必要とする。機器クラスタは、時間およびどのラジオステーションが選択されているかなどの非重要情報を追加的に提供してもよく、またこの非重要情報のレンダリングは、所定の安全基準を満たすために必要ではない。
図2は、本明細書に記載の実施例で言及されるグラフィック処理システムにおけるレンダリングのための機器クラスタ200を図示する。機器クラスタは、ダイヤルの端の周りに速度値208と、角度方向が車両の現在の速度を示す針207とを有する従来のダイヤルの形態の速度計202を含む。機器クラスタは、油温ゲージ203、情報アイコン204(例えば、選択されたラジオステーションを示す)、非重要警告アイコン205(例えば、空調システムでのフォルトを示す)、および重要警告アイコン206(例えば、深刻なエンジン問題を示す)をさらに含む。
表示要素の速度計202および重要警告アイコン206のみが、車両およびその使用者の安全に重要である。ISO26262標準のASIL Bなどの義務付けられた安全レベルを満足するように、これらの表示要素をレンダリングすることが必要である場合がある。油温ゲージ203、情報アイコン204、および非重要警告アイコン205は、その安全レベルにレンダリングする必要はない。表示要素202〜208の一つ以上および/または表示要素への背景は、三次元レンダリングを必要とし得る。例えば、表示要素は、車両の位置および/または一つ以上の車両カメラからのビデオフィードを示すマップをオーバーラップすることができる。
レンダリングされた機器クラスタを表すフレームをレンダリングするために使用されるレンダリング空間は、それぞれが複数のピクセルを含む複数のタイル201に分割される。ハイライトされたタイル209のみが、重要表示要素の少なくとも一部がハイライトされたタイルのそれぞれとオーバーラップするという点で、重要表示要素を含む。ハイライトされたタイル209は、以下でより詳細に検討される保護されたタイルの例である。
本明細書に記載の原理に従ってタイルベースのレンダリングを実施するグラフィック処理システムを、図3にグラフィック処理ユニット(GPU)300の形態で示す。GPU300は、図2に示す機器クラスタ200をレンダリングするのに適している。GPUの動作は、図4に示す例示的なフローチャートを参照して説明される。GPU300は、PU0〜PU(n)として図に標識された一つ以上の処理ユニット301を含む。任意の数の処理ユニットがあり得る。一般に、GPU300は、タイルベースのレンダリングを実施するための適切な任意のアーキテクチャを持ち得る。図3に示す実施例では、GPUは、例えば、プロセスタイルおよびその他のデータなどの、CPU305およびメモリ306などの外部装置と通信し、データを保存し、一つ以上の処理ユニット301で実行される処理を支持するさまざまな機能要素を備える。
図3では、GPU300は、処理ユニット301でタイルの三次元レンダリングを制御するための3Dデータマネージャ307と、タイルの二次元レンダリングを制御するための2Dデータマネージャ308とを含む。GPU300は、例えば、GPUの低レベル管理を実行してGPUに向けられた制御メッセージのためのインタフェースを提供し得るファームウェア309を実行するための処理ロジックを含む。ファームウェア309の実行により、本明細書に記載の原理に従って保護されたタイルおよび保護されたタイルの冗長化処理の検出をするように構成されたコントローラ316が実装される。図3の実施例では、コントローラ316は、ファームウェア309の実行の一部として実装されるとして示されているが、例えば、コントローラは、GPUでファームウェアの実行の一部を形成する一つ以上の手順であってもよい。一般的に、コントローラは、グラフィック処理装置において、任意の数の異なるソフトウェア、ファームウェア、およびハードウェア構成要素を含んでもよい。一部の実施例では、コントローラは、GPUで実行する一つ以上のプロセスを含む。
GPUユニットの動作および配置は、GPUの特定のアーキテクチャによって異なる。3Dおよび2Dデータマネージャは、ファームウェアの一部であってもよく、かつ/または2Dおよび3D処理の管理を実施するために、GPUで実行するソフトウェアプロセスであってもよい。データバス318は、GPUの要素およびその処理ユニットの通信を介して提供され得る。
キャッシュ311は、処理ユニット301で処理するためのデータの受け取り、および/または処理ユニットから処理されたデータを受け取るためのGPUに提供され得る。一部の実施例では、キャッシュは、メモリ306に保存されている、またはメモリ306に保存されるべきデータを保存するためのものであってもよい。
チェックユニット315は、それに提供されるデータに関してシグネチャを形成するために、GPU300に提供され得る。チェックユニットは、一つ以上の異なるモジュールを備えて、そのモジュールに提供されるデータに関してそれぞれがシグネチャを独立して形成することができてもよい。チェックユニットは、GPUで実行する一つ以上のソフトウェアプロセスを含み得る。一部の実施例では、チェックユニットは各処理ユニット301に提供されてもよい。チェックユニットは、ファームウェア309に提供され得る。グラフィック処理装置でシグネチャが効率的に生成されるように、ハードウェア(例えば、固定機能回路)にチェックユニットを提供することが一般的に有利である。
チェックユニットは、例えば、チェックサム、CRC、ハッシュ、またはチェックユニットに提供されたデータ上の指紋計算を実行することができ、それによりそのデータ上にシグネチャを形成する。シグネチャは、グラフィック処理装置で実施された異なる処理パスに提供される出力データの比較を容易にするために、処理ユニット自体からの出力データよりもコンパクトな形態でチェックユニットに提供されたデータの式を提供する。チェックユニットは、それに提供されるデータ上に、および随意に、データおよび/またはグラフィック処理装置での断片/幾何学的形状処理によって生成されるデータに関連付けられたその他の情報に関連付けられた一つ以上のメモリのアドレス上にもシグネチャを形成するように構成されてもよい。
データは、適切な任意の方法でチェックユニットに提供され得る。一部の実施例では、例えば、キャッシュに保持されているデータへの参照をチェックユニットに渡すことによって、キャッシュ311に保持されているデータは、チェックユニットに提供される。コントローラ316は、データに関してシグネチャを形成するために、そのデータをチェックユニットに提供することができる。処理ユニットからのデータの流れは、コントローラ316によってチェックユニットに向けられてもよい。コントローラは、シグネチャの記憶(例えば、コントローラに割り当てられたキャッシュの領域)およびシグネチャのその後の使用を管理して、処理パスによって生成されるデータがその処理パスの繰り返しバージョンによって生成されるデータと一致することを検証できる。
幾何学的形状エンジンは、GPUに提出された幾何学的形状データを処理するよう構成されている。幾何学的形状データは、レンダリングされるシーンの要素を表す。幾何学的形状データは、例えば、レンダリングされるプリミティブ(例えば、シーンにおけるプリミティブの頂点を説明する頂点データによって記述される)、テッセレーションされるパッチ、およびレンダリングされるその他の物体の一つ以上を含むシーンの幾何学的形状の複数の項目を表し得る。例えば、幾何学的形状データは、図2に示す機器クラスタのそれぞれの表示要素を表す一つ以上のプリミティブのセットを含み得る。各プリミティブのセットは、機器クラスタをレンダリングするように配置されたソフトウェアプロセスからの適切なドローコールによって作成され得る。プリミティブは、物体またはシーンの他の部分が構成され得る基本的幾何学的形状であり得る。プリミティブは、例えば、三角形、線、または点であり得る。
図3に示す実施例では、幾何学的形状処理は、GPU300の幾何学的形状処理ロジックによって実施され、タイルはGPU300の断片処理ロジックによってレンダリングされる。上述のように、幾何学的形状処理ロジックおよび断片処理ロジックは、GPU300のリソースを共有し得る。例えば、処理ユニット301は、例えば、異なるソフトウェア命令を処理ユニットの実行ユニット上で実行することによって、幾何学的形状処理ロジックおよび断片処理ロジックの両方の一部を実装するために使用されてもよい。処理ユニット301は、SIMD処理を実施するように構成され得る。
図3に示す実施例では、幾何学的形状処理ロジックは、処理ユニット301上で実行されるタイリングエンジン310および一つ以上の処理モジュールを含む。図3に示す実施例では、断片処理ロジックは、ラスタライザ320、陰面消去(HSR)ユニット321、テクスチャフィルタリングユニット322、および処理ユニット301上で実行された一つ以上のシェーダモジュールを含む。この実施例では、タイリングエンジン、ラスタライザ320、陰面消去(HSR)ユニット321およびテクスチャフィルタリングユニット322は、固定機能ハードウェアに実装されるが、処理モジュールおよびシェーダモジュールは処理ユニット301によって実行されるソフトウェアに実装される。より一般的には、機能的モジュールのいずれも、ハードウェア、ソフトウェア、またはそれらの任意の組み合わせに実装され得る。ハードウェア(例えば、固定機能回路)に機能的モジュールを実装することは、一般的には電力およびレイテンシの処理に関して比較的効率的であるが、比較的柔軟性がなく、ソフトウェアに機能モジュールを実装することは、電力およびレイテンシの処理に関して比較的あまり効率的ではないが、ハードウェア設計プロセスの後でモジュールの動作を変更できる点で比較的柔軟である。
幾何学的形状データ(例えば、ソフトウェアプロセスからのドローコール401に応答して生成されるような)は、メモリ306内に保持され、GPU300で処理するためメモリからキャッシュ311に読み取られ得る。幾何学的形状段階は、レンダリングされるフレームの視点からのシーンを表す処理された幾何学的形状データを形成するため、シーンの要素(例えば、プリミティブ)を説明する幾何学的形状データを変換する。幾何学的形状段階処理は、例えば、頂点処理(例えば、頂点シェーディング)、クリップ処理、プロジェクション、カリング、およびタイリングなどを含む、幾何学的形状データ上の任意の適切な処理を実施し得る。
幾何学的形状処理は通常、処理(例えば、頂点から形成されたプリミティブ)のため提出された幾何学的形状の品目を画面空間に変換し、変形したプリミティブが視点からのシーンの中の視錐台内にあるかどうかに基づく、頂点シェーディング、ならびにクリップ処理および/またはカリングなどの幾何学的形状上の任意の必要なシェーディングを実施するため、幾何学的形状データを処理すること(例えば、処理ユニット301で実行される命令によって実施されるような)を含む。テッセレーションは、例えば、頂点シェーディング、ハルシェーディング、テッセレーション因子の決定、ドメインシェーディング、および幾何学的形状シェーディングを実施することによって、入力パッチからのテッセレーションされたプリミティブを決定するために、この段階で実施され得る。
タイリングは、プリミティブがタイルのレンダリング、および各所与のタイルのレンダリングに関連するプリミティブを識別するようにプリミティブとメモリ内のタイルとの間の関連を保存することに関連する各タイルを決定するように、処理された幾何学的形状データで実施される。タイリングは、各タイルに対して、そのタイルに含まれる要素(例えば、プリミティブ)のリスト(タイルリスト)を生成することを含む。こうしたタイルリストは、どの要素がどのタイルに含まれているかを示す任意の適切な形態に整理された任意のデータを含み得る。例えば、各タイルは、タイル(すなわち、そのタイルと重複するプリミティブ)のレンダリングに関連するすべてのプリミティブを示すタイルリストを持ち得る。幾何学的形状処理段階(例えば、タイルリストならびに変形されたおよび/またはその他の方法で操作された幾何学的形状)の出力は、断片処理段階で使用するためメモリに保存される。幾何学的形状処理段階の出力は、図3に示す実施例では、パラメータバッファ312に保持され得るパラメータデータと呼ばれてもよい。
図3に示す実施例では、タイリングは一つ以上のタイリングエンジン310で実施される。各タイリングエンジンは、処理ユニット301で実行されるモジュールから受け取られた処理された幾何学的形状データ上で動作するように構成されてもよい。一部の実施例では、処理された幾何学的形状データのタイリングは、処理ユニット301またはグラフィック処理システムの任意の他の部分において実施され得る。タイリングは、適切な任意のアルゴリズム(例えば、完全なタイリング、境界ボックスアプローチまたは階層タイリングアプローチを使用して)に従って実施され得る。多くのこうしたアルゴリズムは既知であり、本明細書でさらに考察されない。タイルは、タイルのエリアのいかなる部分とオーバーラップするために(例えば、要素がタイルのピクセルの全てまたは一部とオーバーラップする時に)、タイリングアルゴリズムによってその要素の任意の部分が計算されるシーンの要素を含むと考えられ得る。
断片処理は、幾何学的形状処理段階(例えば、タイルリストおよび変形した幾何学的形状データ)の出力上で実施される。図3の例示的なGPU300では、処理ユニット(例えば、処理ユニットで実行するように配置されたソフトウェア命令)で実行される一つ以上のモジュールで、ならびにラスタライザ320、HSRユニット321およびテクスチャフィルタリングユニット322において断片処理が実施される。一部の実施例では、タイルリストは、レンダリングされる各タイル用にフェッチされ、そのタイルの断片処理に関連するタイルリストによって示される変形したプリミティブデータがフェッチされる。例えば、断片処理は、テクスチャ処理、シェーダ処理、ラスタライゼーション、隠面消去、およびアルファ処理のうち一つ以上を含み得る。断片処理は、断片処理の異なる態様を実施するため(例えば、パイプライン内に配置される)一つ以上のユニットで実施され得る。
各々のプリミティブが覆う試料の位置を特定し、それらの試料位置でプリミティブ断片を生成するために、ラスタライゼーション(例えば、スキャン変換)が(例えば、ラスタライザ320で)実施される。プリミティブ断片は、特定の試料位置におけるプリミティブの値(例えば、深さ、テクスチャ座標など)を表す。典型的には、ラスタライゼーションが実施されるまで、プリミティブはその頂点の観点から定義される。図3に示す実施例では、ラスタライザ320においてラスタライゼーションが行われる。
陰面消去(HSR)は、各試料位置で深さ比較を行う断片処理中に実施されて、各試料位置でどのプリミティブ断片が見えるかを判定できる。図3に示す実施例では、陰面消去は、HSRユニット321で実施される。
断片処理の間にシェーディングおよび/またはテクスチャリングを行うことができる。明度は、例えば、テクスチャ座標に基づいてテクスチャ試料をフェッチすることを含み得るプリミティブ断片のシェーダプログラムを実行することによって、試料位置で見えるものとして特定されたプリミティブ断片の試料位置に対して決定され得る。テクスチャフィルタリングが(例えば、テクスチャフィルタリングユニット322で)実施されてもよい。テクスチャサンプルをフェッチすることは、例えば、望ましいテクスチャ座標がテクスチャのテクセルの間にある場合などに、フィルタリング(例えば、保存されたテクスチャのテクセルの一群上での、バイリニアフィルタリング、トリリニアフィルタリング、またはアニソトロピックフィルタリング)を実施するテクスチャフィルタリングユニットに関与する場合がある。
一部の実施例では、一部の後処理は、画素値がフレームバッファに記述される前に実施されてもよい。例えば、ピクセル位置ごとに複数の試料位置がある場合、試料位置に対するレンダリングされた値を組み合わせて、レンダリングされた画素値を決定してもよい。これは、アンチエイリアシングに有用であり得る。
上記段落は、陰面消去がシェーディング/テクスチャリングの前に実施されるという意味で、「遅延」レンダリングアプローチを説明する。他の実施例では、遅延しないレンダリングを実施してもよい。
全体としてのシーンのための処理された幾何学的形状データ(例えば、変換された頂点データ)を保存し得る。さらに、レンダリングされるフレームの各タイルについて、そのタイルとオーバーラップする要素(例えば、プリミティブ)のリストもタイルリストとして保存され得る。タイルリストは、(例えば、複数のタイルをオーバーラップするシーンの要素により)このような要素のための処理された幾何学的形状データの記憶をコピーするのを回避して、シーンのための処理された幾何学的形状データの変換された要素を参照し得る。他の実施例では、各タイルの断片処理を実施するために必要な処理された幾何学的形状データの一部または全てが、各タイルに対して別個に保存され得る。
幾何学的形状段階からの処理されたデータは、断片処理段階でのその後の使用のため任意の適切な位置に保存され得る。例えば、幾何学的形状処理(変換された頂点データおよびタイルリストなど)の出力は、メモリ306(例えば、パラメータバッファ312)に保存されてもよく、キャッシュ311を通して断片処理を実施するように配置されたGPUのユニットによってアクセスされ得る。一部の実施例では、幾何学的形状段階からの処理されたデータは、処理ユニット301および/またはキャッシュ311に保持され得る。
幾何学的形状処理は、レンダリングされる完全なフレームに関して実施され、タイルごとに実施されない。これは、幾何学的形状が処理されるまで、例えば、シーンの要素が、レンダリングされるフレームのタイルに関連して位置する場合、要素の見かけのサイズ、およびそれらの要素が見えるかどうかが、知られていないことが理由である。
図3に図示したアーキテクチャは、単に例示的であり、一般に、任意のタイルベースのレンダリングアーキテクチャに従って動作する任意の数および配置のGPU300のユニットであってもよい。
断片処理中に実施される計算の出力は、一つ以上のバッファ、例えば、(例えば画素の)明度を保存するためのカラーバッファ、(例えば、画素の)深度値を保存するための深度バッファ、およびどのタイルの部分(例えば、画素)がレンダリングされるかについての指示を保存するためのステンシルバッファのうちの一つ以上に書き込まれ得る。こうしたバッファは、システムメモリ306およびGPUキャッシュ311のうちの一つ以上を含む、GPUアーキテクチャに適した任意の方法で維持され得る。こうしたバッファの使用は当技術分野で周知であり、ここで詳細には考察されない。
一部の実施例では、チェックユニット315は、GPU300からメモリ306へのデータの一つ以上の書き込み(例えば、パラメータデータおよび幾何学的形状処理段階から出力されたタイルリストの書き込み、または断片処理段階から出力された画素データの書き込みなど)のセット上のシグネチャを形成するように配置され得る。例えば、GPUのユニットがそのカラーバッファ、深度バッファ、またはステンシルバッファのうちの一つに書き込むたびに、その書き込みに含まれるデータが、チェックユニットのためにチェックユニット315に(例えば、コントローラ316によって)向けられて、その書き込みに関してシグネチャを生成し得る。一組の複数の書き込みにわたって生成されるデータを表すシグネチャは、その組の各書き込みに対して生成されるシグネチャの蓄積によって表されてもよい。断片処理中に書き込まれたバッファの内容は、個々の処理ユニットによって実施される断片処理を表すため、断片処理中に作製されたバッファへの書き込みにわたって形成されるシグネチャの全体セットは、GPUで実施された断片処理の完全な出力を表し得る。
チェックユニットがバッチの書き込みにわたってシグネチャを生成するように構成された状態で、一つ以上の書き込みが、チェックユニットへの提出のために一緒にバッチ処理され得る。断片処理中のバッファへの書き込みにわたって形成されたシグネチャは、例えば、キャッシュ311に、またはチェックユニットの任意の他のデータストアまたはチェックユニットにアクセス可能な任意の他のデータストアなど、任意の適切な位置に蓄積されてもよい。保存されたシグネチャは、シグネチャが関連する保護されたタイル(例えば、識別子またはタイルの座標)、およびシグネチャが関連するバッファ(例えば、カラーバッファ、ステンシルバッファ、および深度バッファのうち、書き込みが、シグネチャが形成されることに関して対象にするバッファ)を示す情報を有するデータストアで関連付けられてもよい。
図3に図示したタイルベースの遅延レンダリングアーキテクチャは、単に例である。一般的に、処理ユニットおよびGPUは、任意のタイルベースのレンダリングアーキテクチャを持ち得る。
本開示の原理に従って構成されたグラフィック処理システムは、図2の機器クラスタなどの安全重要表示要素を含むフレームをレンダリングするように動作可能である。これを、図3に示すGPUを参照しながら、例により説明する。
GPU300での処理のために受け取られた幾何学的形状データは、安全重要である要素(例えば、レンダリングされるシーンの物体、プリミティブまたはその他の部分)を含み得る。GPU300への幾何学的形状を提出するアプリケーションは、それぞれのバッチが安全重要要素を持つか、または含まない場合に、レンダリングされる幾何学的形状のバッチを提供することができる。幾何学的形状の各バッチは、GPUへの一つ以上のドローコールとして提出され得る。例えば、レンダの幾何学的形状は、非安全重要幾何学的形状のバッチとして提出され、その後、安全重要幾何学的形状のバッチとして提出されてもよい。例えば、図2を参照すると、一つ以上のドローコールのバッチは、安全重要要素206がレンダリングされるように、GPUに提出されてもよく、一つ以上のドローコールの個別のバッチは、非安全重要要素205がレンダリングされるようにGPUに提出されてもよい。コントローラ316は、それらが安全重要であるか否かに基づいて、本明細書に記載される原理に従って、ドローコールの各バッチをGPUに提出させてもよい。従って、GPUのファームウェアは、どの幾何学的形状が安全重要であるか、どれがそうでないかを知っていてもよいが、ハードウェアはどの幾何学的形状が安全重要であるかを認識する必要はない。
データ処理システム500におけるGPUの典型的な配置を図5に図示しており、GPU300がハードウェア502においてメモリ306およびCPU305とともに示されている。GPU、CPUおよびメモリは、データバス503上で通信するように配置され得る。データ処理システムは、CPUで実行する一つ以上のプロセッサ505と、GPUのためのドライバ504とを含むソフトウェア環境501を含む。ドライバは、プロセス505からドローコールを受信するように配置されたアプリケーションプログラミングインターフェース(API)506を提供し、GPUによってシーンを表示画面507にレンダリングする。例えば、APIは、OpenGL APIであってもよく、プロセスは、GPUに図2に示される機器クラスタを車両のダッシュボードの表示画面にレンダリングさせるように、OpenGLドローコールを発行するように配置されたアプリケーションであり得る。一部の配置では、GPUは、GPU(例えば、その処理ユニット301および/またはファームウェア309)のユニットで実行するため配置されたファンクション、ルーチンおよび他のコードの形態でソフトウェアを実行するように構成され得る。
レンダリングされるシーンを定義する幾何学的形状データのソースは、シーンのどの要素が安全重要であるかを識別できる。例えば、プロセスが、ドローコールまたは一つ以上のドローコールの群が安全重要要素に関連することを識別可能にするためにメカニズムを提供することができる。OpenGLフレームワークでは、例えば、APIは、glEnable()を呼び、glDisable()を使用して、ドローコールが安全重要要素に関連するかどうかを示すドローコールの状態ビットを設定することができる。適切なメカニズムは、ドライバで提供され得る(例えば、プロセスによってまたはドライバが提供するAPIで呼び出され得るドライバの機能として)か、またはより一般的にはソフトウェア、ファームウェアおよびハードウェアの任意の組み合わせで提供され得る。こうしたメカニズムは、アプリケーション開発者が、シーンのどの部分が安全重要であるか、および、現在記述されている方法で、レンダリングされるフレームのどのタイルが保護されるかを制御することを可能にすることができる。
保護されたタイルの識別
本明細書に記載の原理に従って構成されたグラフィック処理システムは、レンダリングされるフレームのどのタイルが安全重要要素を含むかを、幾何学的形状段階で識別するように構成されている。こうしたタイルは、保護されたタイルと呼ばれ得る。保護されたタイルは、所定の安全レベルを満たすため、例えば、レンダリング段階における保護されたタイルの処理(本明細書では「断片処理段階」とも呼ばれる)を複数回行い、同じ結果が毎回生成されることを確認することにより、グラフィック処理システムで処理され得る。安全重要要素を含まない保護されていないタイルは、レンダリング段階では冗長に処理される必要はなく、安全重要要素を含むタイルと安全重要要素を含まないタイルとの混合を有するフレームの安全レベルを満たす処理要求を低減する。タイリング中に保護されたタイルの識別を、ここで説明する。
グラフィック処理システムにおいてレンダリングされるタイルの一部のみが安全重要要素を含むことが多く、従ってレンダリング段階で保護されたタイルとして処理される。上述のように、タイリングは、シーンのどの要素が各タイルの中にあるかを識別するために、幾何学的形状処理段階で実施される。タイリングは、各タイルに対して、そのタイルに含まれる要素(例えば、プリミティブ)を識別するタイルリストを生成することを含む。タイルリストは、シーンのどの要素がどのタイルの中にあるかを識別する任意のデータ構造であってもよい。シーンの要素がタイリング中に処理されると、その要素に含まれるタイルのタイルリストが更新されて、その要素の表示を含む。
安全重要要素が処理された時、その安全重要要素を含むタイルのタイルリストが更新される。グラフィック処理装置のコントローラ316は、GPUによる幾何学的形状処理段階での一つ以上の安全重要要素のバッチを提出し、安全重要要素のバッチが処理された時にどのタイルリストが更新されたかを判定し、それに応じて、レンダリング段階で冗長に処理されるようになる保護されたタイルとして対応するタイルを識別するように構成される。保護されたタイルは、グラフィック処理システム内で任意の適切な方法でマークされ得る。
コントローラ316は、タイルリストが任意の適切な方法で更新される時を識別するように構成され得る。例えば、フレームのタイルリストは、一つ以上の安全重要要素をタイリングすることに応じて各タイルリストが更新される時を識別するためにモニターされ得る。一般に、タイリング中に、フレームのタイルのタイルリストは、GPUにアクセス可能なメモリ内で(例えば、図3のGPU内のキャッシュ311で)構築される。タイルリストを監視することは、どのタイルリストが変更されたかを識別するために一つ以上の安全重要要素がタイルされる前後の各タイルリストをチェックすることを含むことができる。しかし、これは、GPUでの処理およびデータの移動のオーバヘッドの点で比較的高価であり得る。コントローラは、安全重要要素のバッチが幾何学的形状処理段階を終了した後に、タイルリストに対して安全重要要素のバッチを幾何学的形状処理のため提出する前に、タイルリストを比較するよう構成されることが好ましい。これにより、安全重要要素の各バッチとその要素のバッチの幾何学的形状処理によって修正された識別された一つ以上のタイルリストとについて単一の比較を実施することができる。
保護されたタイルを識別するプロセスの一例は、図4のフローチャートの開始に図示されている。一つ以上のドローコール401(例えば、幾何学的形状処理のための要素のバッチに対応する)の受け取りに応答して、幾何学的形状処理(タイリングを含む)402がGPUで実施される。404幾何学的形状処理が安全重要要素に関連する場合(例えば、ドローコール401で識別されたように)、その後タイルリストが幾何学的形状処理中に更新されるタイルは、コントローラによって保護されたタイルとして405と識別される。例えば、レンダリングのための要素を提出するアプリケーションは、フラグ(例えば、OpenGLアーキテクチャにおけるglEnable()コールを使用して)を設定して、提出される次の幾何学的形状が安全重要であることを示すことができる。アプリケーションが安全重要幾何学的形状を提出したら、提出される次の幾何学的形状が安全重要でないことを示すフラグ(例えば、glDisable()コールを使用して)を無効にする。GPUのファームウェアのコントローラは、幾何学的形状処理の幾何学的形状のバッチを提出する。バッチが安全重要である場合、保護されたタイル405を判定するために、コントローラは、安全重要バッチが処理される前のタイルリストを、安全重要バッチが処理された後のタイルリストに対して比較する。
一つ以上の安全重要要素がタイルされる前後のパラメータ関連するタイルリストが変更されたかどうかを明らかにすることを確認するようにタイルリストが変更されたかどうかを示す各タイルリストのパラメータを維持することが有利であり得る。例えば、各タイルリストがシーンの要素のタイリング中に蓄積されるとき、タイルリストは、シーンの要素への新しい参照が、その要素がその中にあるタイルのタイルリストに追加されるに連れて増加する。一組のポインタ(テールポインタキャッシュ、すなわちTPC内に保持されているポインタなど)は、メモリ内の各タイルリストのエンドポイントに対するどのポイントか、例えば、タイルリストに割り当てられたメモリ領域に記述された最後の要素参照の位置、またはタイルリストに割り当てられたメモリ領域に記述される次の要素の位置を維持され得る。所与のタイルのポインタは、そのタイル内にあることが検出された要素がタイルされると変更するため、ポインタを使用して、そのタイルのタイルリストの状態が変更されたかどうかを判定することができる。ポインタは、GPUで任意の適切な手法で維持され得る。たとえば、GPUで実行されている簡単なプロセスは、書き込み先のタイルリストに応答してポインタを更新できる。
一つ以上の安全重要要素の各組がタイルされる前後の1組のタイルのポインタを捕捉することによって、グラフィック処理システムは、安全重要要素をタイリングすることによってどのタイルリストが変更されるか、そのためどの対応するタイルを保護されたタイルとして識別するべきであるかを判定できる。例えば、コントローラ316は、どのタイルが更新されるか、かつ保護されるタイルとしてどれをマークする必要があるかを識別するため、一つ以上の安全重要要素の各組がタイルされる前後にテールポインタキャッシュ(TPC)を捕捉するように構成されてもよい。
このプロセスは、図6で実施例として例示されており、これはより完全に以下で説明される。図6は、幾何学的形状処理の間、ファームウェアによって取られる一連のアクションを示す。ファームウェアは、ブロック601でGPU300によって処理される保護されていない幾何学的形状のバッチ(例えば、非安全重要要素に関連する一組のドローコールとしてアプリケーションから受け取られた幾何学的形状データを含む)を提出する。保護された幾何学的形状処理604(例えば、安全重要要素に関連する一組のドローコールに応答して生成された幾何学的形状データ)を実施することに先立って、幾何学的形状処理が、幾何学的形状の安全重要要素で実施される前にタイルリストの状態を捕捉するため、TPCのスナップショットをコントローラ316によって撮影する603。次に、幾何学的形状処理604は幾何学的形状の安全重要要素で実施され、その後、コントローラ316は、幾何学的形状の安全重要要素の幾何学的形状処理後にタイルリストの状態を捕捉するため、TPCのさらなるスナップショットを撮影する。どのタイルリストが更新されたか、かつしたがってどの対応するタイルが断片処理中に保護されたタイルとして取り扱われるようになるかを識別するため、幾何学的形状処理604がコントローラによって比較される615の前後にTPCはスナップショットを撮る。
冗長化幾何学的形状処理を実施する際のチェックユニット315によるシグネチャ602および606の使用について、以下に説明する。一般に、保護されたまたは保護されてない幾何学的形状処理は、任意の順序で実施されてもよく、例えば、保護された幾何学的形状処理を最初に実施して、その後で保護されていない幾何学的形状処理を行ってもよい。「保護された幾何学的形状処理」という用語は本明細書で使用される場合、幾何学的形状の安全重要要素の幾何学的形状処理を意味し、「保護されていない幾何学的形状処理」という用語は、本明細書で使用される場合、安全重要でない幾何学的形状の要素の幾何学的形状処理を意味する。
レンダリングされるシーンの要素のソースが、グラフィック処理装置でレンダリングするため安全重要要素を一緒に集めることを配置することが有利であり得る。例えば、ドローコールによってレンダリングするために一つ以上の要素が提出されるシステムでは、ドローコールのソース(例えば、図5における505などのアプリケーション)は、シーンの安全重要要素に関連するドローコールを一緒にグループ化するように構成され得る。これは、安全重要要素およびしたがって関連する処理オーバヘッドをタイリングすることに応じて、どのタイルリストが更新されるかに関して、チェック(例えば、TPCスナップショット603および605ならびにその後の比較615)の数を減少させることの利点を持ち得る。任意の数の安全重要要素をまとめてグループ化できる。
ドローコールのソースは、グラフィック処理装置での幾何学的形状処理における各作業負荷が安全重要要素または非安全重要要素のいずれかに関連するが、両方の混合には関連しないように、安全重要要素に関連するドローコールを非安全重要要素に関連するドローコールから分割するように構成され得る。
例えば、図2を参照すると、機器クラスタ200をレンダリングさせるように構成されたアプリケーションは、速度計202および重要な警告アイコン206を作る安全重要要素に関連するドローコールを一緒にグループ化できる。
安全重要ドローコールの一群は、装置のアーキテクチャに適切な任意の方法でグラフィック処理装置300に提出され得る。例えば、ドローコールは、ドライバ(例えば、図5の504)によって提供されるAPI(アプリケーションプログラミングインタフェース)で受け取られ、潜在的に初期処理後にグラフィック処理装置に渡され得る。一部のアーキテクチャでは、ドローコールは、API/ドライバでグラフィック処理装置の一組の命令に解釈され得る。
一部の実施例では、ドライバ/APIは、アプリケーションから受け取った安全重要要素を一緒にグループ化することができる。例えば、ドライバは、アプリケーションから受け取るドローコールの流れにおける安全重要要素に関連するドローコールを識別することができ、必要に応じて、幾何学的形状処理のために、安全重要要素に関連するものをGPUへのバッチでの提出のため一緒にグループ化する(潜在的にドライバ/APIによってさらなる処理が行われた後)ように、これらのドローコールを処理することができる。しかしながら、一部のアーキテクチャでは、レンダリングエラー(例えば、半透明またはパンチスルーを取り扱う時など)を回避するため、アプリケーションによって提出される要素の順序を維持することが必要である。
冗長化幾何学的形状処理
幾何学的形状計算におけるエラーは、シーンの非安全重要要素に関連するものでも、フレームの保護されたタイルに書き込まれる要素がレンダリングされるのを生じさせ得る。例えば、図2を参照すると、情報アイコン204に関連する幾何学的形状計算のエラーは、保護されたタイル209の一つ以上にわたってアイコンが誤ってレンダリングされ、機器クラスタの安全重要要素を不明瞭することになり得る。従って、任意の安全重要要素を含むフレームをレンダリングする幾何学的形状処理段階は、グラフィック処理システムで少なくとも二回実施されてもよく、各パスの出力は、幾何学的形状計算が一致することを確認するため比較される。これは、図4の例示的なフローチャートにおいて繰り返す幾何学的形状処理工程406および工程407で実施された確認によって表される。幾何学的形状処理パスの出力が一致しない場合、フォルト信号408がコントローラ316によって発生されて、フォルトが発生したことを示してもよい。冗長化処理を実施することによって、本明細書に記載の原理に従って構成されたグラフィック処理システムは、安全重要幾何学的形状の処理に関して必要な安全レベルを満たすように配置され得る。幾何学的形状処理はタイリングを含む。一部の実施例では、タイリングは、一つ以上のタイリングエンジン310で実施されてもよい。
チェックユニット315は、各幾何学的形状処理パスが、幾何学的形状処理(例えば、タイルリストおよび関連する変換された幾何学的形状データ)によって生成されるデータの特徴である一つ以上のシグネチャを形成するように構成され得る。コントローラ316は、幾何学的形状エンジンによるデータ出力に基づいて、チェックユニットにシグネチャを生成させるように構成されてもよい。幾何学的形状処理段階の出力は、フレームの視点からのシーンの要素を記述する変換された頂点データとともに、レンダリングされるフレームの各タイルに存在する要素のタイルリストを含んでもよい。
一部の実施例では、幾何学的形状処理段階からパラメータバッファ312への各書き込みに関して、シグネチャが形成される。各パスで実施された幾何学的形状処理が一致していることを検証するために、各幾何学的形状処理パスに関連してチェックユニットで形成されたシグネチャを比較する407。シグネチャの比較は、任意の適切なレベルの粒度(例えば、ビット、バイト、ワードレベル)で実行され得る。コントローラは、保護された幾何学的形状データの所与の組の各幾何学的パスに関して、チェックユニットで形成されたシグネチャの比較を実施するように配置され得る。一部の実施例では、シグネチャの比較は、ハードウェア(例えば、チェックユニット315自体で、またはGPU300の任意の他のユニットで)で実施されてもよい。
チェックユニットは、レンダ用(例えば、フレーム用)の幾何学的形状処理段階中にGPUによって生成された少なくとも処理されたデータで動作する。チェックユニットは、幾何学的形状処理段階からの出力に含まれるメモリアドレスおよび/または制御データ上で追加的に動作してもよく、これによって本明細書に記載の検証動作に役立ち、より幅広いフォルトを識別することができる。
幾何学的形状パス用に生成されたシグネチャは、その後の使用のため(例えば、同一のフレームに関する別のパスのシグネチャとの比較のため)にGPUに(例えば、キャッシュ311に)保存され得る。チェックユニットは、例えば、出力データのチェックサム、CRC、ハッシュ、または指紋計算を実行し得る。幾何学的形状パス用に生成された一つ以上のシグネチャは、異なる幾何学的形状処理パスに提供される出力データの比較を容易にするために、幾何学的形状処理段階自体からの出力データよりもコンパクトな形態で、幾何学的形状処理段階中に、レンダ用の幾何学的形状データに実施される処理の式を提供する。
一般に、GPUは、任意の種類のアーキテクチャを有してもよく、幾何学的形状データを物理的処理ユニットに分配するための任意のスキームを利用し得る。幾何学的形状データは、GPUの構成要素による幾何学的形状処理のため処理ユニットに割り当てられ得る。例えば、3D負荷については、3Dデータマネージャ307は、処理ユニットに幾何学的形状データを割り当てるように構成され得る。
シーンが任意の安全重要要素を含むかどうかに関するチェックを実施することができる。こうしたチェックは、グラフィック処理システムの任意の場所で実施され得る。例えば、ドライバは、フレームに関するドローコールのいずれかが、要素を、安全重要であると識別するかどうかを判定し得る。その場合、識別子は、グラフィック処理システムが、幾何学的形状処理が繰り返される保護されたモードでフレームを処理することを全体として示す、フレーム用に設定され得る。他の実施例では、フレームが安全重要要素を含み、そのため幾何学的形状処理が繰り返されることを識別することはアプリケーション開発者の責任であってもよい。フレームに安全性重要要素が含まれない場合、幾何学的形状処理は各フレームに対して一度実施され得る。
コントローラ316は、同一のフレームの異なるパスで実行される幾何学的形状処理が一致しないと判定すると、フォルト信号408を発生するように構成される。検出されないフォルトは、断片処理が本明細書に記載される冗長化アプローチに従って保護されているかどうかにかかわらず、GPUでの安全違反につながる可能性がある。例えば、図2に示す機器クラスタに関し、実施された幾何学的形状計算のフォルトは、速度計などの機器クラスタの安全重要要素の破損を引き起こす可能性がある。
幾何学的形状処理のエラーに関連して発生されたフォルト信号408は、任意の適切な方法で提供され得る。フォルト信号は、同一のフレームの異なる幾何学的形状パスからの処理された出力が同じではなく、したがって、幾何学的形状処理段階からの出力が無効であることを示す。こうしたフォルト信号は、GPU300の出力として(例えば、そのドライバまで送られる制御信号として)提供されてもよく、かつ/またはGPUで内部的に使用されてもよい。例えば、幾何学的形状処理のエラーに関連して発生されたフォルト信号は、例えば、幾何学的形状処理が実施された負荷をGPUに再提出させるコントローラおよび/またはドライバによって、保護された幾何学的形状処理を再開させることができる。発生されたフォルト信号に応答して、コントローラおよび/またはドライバは、幾何学的形状および/またはタイリングユニットならびにキャッシュメモリをフラッシュするように構成され得る。フォルト信号は、GPUまたはGPUが組み込まれるデータ処理システム500の任意のエンティティに提供されてもよく、例えば、エラーをログし、エラーが発生したことに関連してフレームの表示を止めて、グラフィック処理装置をリセットするように構成されたソフトウェアエンティティ(例えば、ドライバ504および/またはアプリケーション505)にフォルト信号が提供されてもよい。
フォルト信号408は、制御データ、メモリ306に記述されたデータ、GPUまたはGPUが接続されているシステムのレジスタまたはメモリに記述されたデータ、およびCPU(例えば、305)またはGPUが接続される他のシステムへの割り込みあるいは他の信号のうちの一つ以上とし得る。同じ幾何学的形状データを処理するように構成された幾何学的形状ユニットの出力は、電離放射線または電圧スパイクなどの一時的なイベントによって、またはハードウェア、ソフトウェアおよびファームウェアのいくつかの組み合わせにおけるバグによる永久エラーによって異なり得る。
異なる幾何学的形状処理パスからの出力が同一である場合、処理された幾何学的形状は有効とみなされ、これらの幾何学的形状パスの出力の一つ以上が本明細書に記載の原理に従って断片処理に利用できるようになり得る。同一のフレームの異なる幾何学的形状処理パスからの出力が一致しない場合、フォルト信号が発生されない場合があるか、一部の実施例では、出力が一致することを示す信号が発生され得る。
幾何学的形状段階に関連して発生されたフォルト信号は、断片処理段階に関連して発生されたフォルト信号と同一であっても異なっていてもよい。幾何学的形状段階に関連して発生されたフォルト信号は、例えば、制御メッセージ、割込み、制御データのフラグ、レジスタで設定された一つ以上のビット、およびデータパケットのうちの一つ以上を含む、フォルトが発生したことの任意の種類の表示であり得る。
グラフィック処理装置は、幾何学的形状処理段階からの検証された出力をデータストア(例えば、パラメータバッファ312)および/またはメモリ306に記述するように構成され得る。フレームに関連して生成された幾何学的形状処理された出力の一つのみが、キャッシュおよび/またはメモリに記述されることを手配することが有利であり得る。これにより、データストアにおけるデータの重複を回避できる。例えば、コントローラは、シグネチャが形成されると、第一の幾何学的形状処理パスの出力を破棄するように構成され得る。他の実施例では、各幾何学的形状処理パスの出力は、通常の方法でキャッシュおよび/またはメモリに記述され得る。後続の幾何学的形状処理パスは、(例えば、特定のメモリアドレスのセットが、フレームの幾何学的形状処理パスの出力を受け取るように割り当てられる場合)第一の処理パスの出力を保存するために使用されるキャッシュ/メモリ領域を上書きするように配置され得る。
ステップ604で初めて保護された幾何学的形状を処理すると、その保護された幾何学的形状処理の出力を表すシグネチャ606が形成される。複数の保護されていない幾何学的形状処理イベント601および/または複数の保護された幾何学的形状処理イベント604があってもよく、それぞれがそれぞれのシグネチャ602/606をもたらし得る。各幾何学的形状処理イベントは、上述の方法でソースアプリケーションおよび/またはドライバで一緒にバッチされた保護された/保護されていないドローコールの一群に対応し得る。
第一の幾何学的形状パスからの出力のシグネチャは、シグネチャを形成するため612で組み合わせられてもよい。第一の幾何学的形状パスからの出力のシグネチャは、保護されていない幾何学的形状処理イベントのための一つ以上のシグネチャおよび保護された幾何学的形状処理イベントのための一つ以上のシグネチャを含んでもよい。組み合わせ612は、例えば、保護された/保護されていない要素に関連する個々のシグネチャの単純な集合、複数の保護された/保護されていない要素上でチェックユニット315で形成されたシグネチャ、またはその他の任意の適切な組み合わせであってもよい。一般に、保護されたおよび保護されていない幾何学的形状処理は、各パスで任意の順序で実施することができ、例えば、保護された幾何学的形状処理を最初に実施することができ、その後で保護されていない幾何学的形状処理を行うことができる。一般的に、順序は処理のために幾何学的形状が提出される順序によって決定される。
第二の幾何学的形状パスが開始する前に、第一のパス(例えば、パラメータバッファ312における)に割り当てられたメモリが解放されてもよく、第一のパスによってパラメータバッファに保存された情報が廃棄されてもよい。これは、第一のパスで実施された処理が第二のパスで実行された処理に影響を与えないことを確実にするのに役立ち得る。例えば、ABORT コマンド607または同様のものを使用して、第一のパスに割り当てられたキャッシュメモリを解放し、現在の負荷で幾何学的形状処理される一つ以上のフレームに対するデータを、メモリ306からキャッシュ311に再度読み取らせることができる。両方の幾何学的形状パスがメモリ(例えば、パラメータバッファ312)に記述する場合、ABORTコマンドは、第二の幾何学的形状パスの出力を保存するために再使用され得るように、そのメモリを解放させることができる。
コントローラ316は、同一フレームのための幾何学的形状データを、第二のパスの幾何学的形状処理のため幾何学的形状エンジンに再提出させる。一部の実施例では、コントローラは、第一の幾何学的形状処理パスが実施される間に、キャッシュで幾何学的形状処理が実施されるソースデータを維持するように構成され得る。一部の実施例では、コントローラは、第二の幾何学的形状パスで二度目に処理するために、メモリからソースデータを読み込むように構成され得る。
同じ入力データが使用されるため、保護されていない幾何学的形状処理および保護された幾何学的形状処理は再び第二のパスで別々に実施される。一部の実施例では(図6に示す通り)、TPCは、第二のパスで保護された幾何学的形状処理を実施する前後に捕捉されない。一部の実施例では、TPCの捕捉および比較は、第一のパスではなく、第二のパスで実施される。一部の実施例では、TPCは、第一および第二の幾何学的形状パスの両方で保護された幾何学的形状処理の前後に捕捉される。コントローラは、二つの段階が保護されたタイルの同一セットを生じることを検証するために、第一の幾何学的形状段階で捕捉された一つ以上のTPCを、第二の幾何学的形状段階で捕捉された一つ以上のTPCと比較するように構成され得る。一般に、フレーム内の一組の保護されたタイルを識別することは、幾何学的形状段階のパスのうちの任意の一つ以上においてどのタイルリストが更新されるかを検出することを含み得る。
第一のパスにおいてと同様に、第二のパスで実施される保護されていない幾何学的形状処理608の出力のためにシグネチャ609が形成され、第二のパスで実施される保護されていない幾何学的形状処理610の出力のためにシグネチャ611が形成される。複数の保護されていない幾何学的形状処理イベント608および/または複数の保護された幾何学的形状処理イベント610があってもよく、それぞれがそれぞれのシグネチャ609/611をもたらし得る。第一の幾何学的形状パスからの出力のシグネチャは、シグネチャを形成するため613で組み合わせられてもよい。第一の幾何学的形状パスからの出力のシグネチャは、保護されていない幾何学的形状処理イベントのための一つ以上のシグネチャおよび保護された幾何学的形状処理イベントのための一つ以上のシグネチャを含んでもよい。組み合わせ613は、例えば、保護されたシグネチャおよび保護されていないシグネチャの単純な集合、保護されたシグネチャおよび保護されていないシグネチャ上のチェックユニット315で形成されたシグネチャ、またはその他の任意の適切な組み合わせであってもよい。
612で形成された第一のパスからの組み合わされたシグネチャおよび613で形成された第二のパスからの組み合わされたシグネチャは、第一のパスで実施された幾何学的形状処理が第二のパスで実施された幾何学的形状処理と一致することを検証するために、614で対象フレームのコントローラ316によって比較される。第一のパスおよび第二のパスからの組み合わされたシグネチャの比較は、任意の適切なレベルの粒度(例えば、ビット、バイト、ワードレベルで)で実行され得る。第一のパスおよび第二のパスからのシグネチャが一致しない場合、コントローラはフレームの幾何学的形状処理に関してフォルトを示すフォルト信号を生成する。
図6に図示したアーキテクチャにおいて、各幾何学的形状処理パスを開始するのに先立って、グラフィック処理システムは、処理された頂点データおよび幾何学的形状段階で生成されたタイルリストが保存されるようになるメモリアドレスを識別する領域ヘッダを初期化するように構成され得る。所定のタイルの領域ヘッダは、そのタイルに対するタイルリストの開始を指してもよく、かつ/または表示してもよい。これらの領域ヘッダは、図7に示される実施例に図示され、以下に説明されるように、断片処理段階で使用されて、断片処理が実施されるフレームのデータを識別することができる。
冗長化断片処理
幾何学的形状処理が完了すると、タイルは断片処理のために処理ユニットに提出され得る。本明細書に記載の原理に従って構成されたグラフィック処理システムは、各保護されたタイルで少なくとも二回の断片処理を実施し、それらのパスの出力を比較してそれらが一致することをチェックするように配置される。断片処理パスの出力が一致しない場合、フォルト信号がコントローラ316によって発生されて、フォルトが起きたことを示すことができる。こうした冗長化処理を実施することにより、グラフィック処理システムは、保護されたタイルの処理に関して必要な安全レベルを満たすように配置され得る。シーン全体を二重にレンダリングすることを避けるため、保護されていないタイルのために断片処理は繰り返さない。したがって、本明細書に記載されるグラフィック処理システムは、安全重要幾何学的形状を含むフレームをレンダリングすることに関与するすべての処理を複製するシステムと比較して、(例えば、電力消費量の減少と遅延の低減の点で)より効率的である。
一部の実施例では、断片処理は、第一の幾何学的形状処理が完了したら、開始されてもよいが、断片処理のためのタイルデータは、第二の幾何学的形状処理が完了する前に入手可能である。このアプローチは、幾何学的形状処理の繰り返しによって導入される任意の遅延を最小化することができる。フォルト信号が幾何学的形状処理に関して発生した場合、断片処理は中断され、フレームデータが幾何学的形状処理のためにグラフィック処理装置に再提出されて、再び開始され得る。
GPUの多くのアプリケーションでは、シーンの全ての要素が安全重要であるとは限らない。例えば、図2では、レンダリングされた機器クラスタを表すタイルの約40%のみが、安全重要要素を含む。本開示は、断片処理が、安全重要要素を含む幾何学的形状段階で識別された保護されたタイルのみに対して重複される、保護されたレンダリングに対する効率的なアプローチを提供する。断片処理は典型的には、GPUのレンダリング性能を支配するため、本アプローチは、動作がシーンの安全重要要素に関係しない場合でも、両方の処理コアが必ず同一のレンダリング動作を実行しなければならない、デュアルロックステッププロセッサなどの従来のシステム上で実質的な性能の恩恵を提供できる。
コントローラによって発生されたフォルト信号317は、任意の適切な方法で提供され得る。フォルト信号は、例えば、制御メッセージ、割込み、制御データのフラグ、レジスタで設定された一つ以上のビット、およびデータパケットのうちの一つ以上を含む、フォルトが発生したことの任意の種類の表示であってもよい。フォルト信号は、同一の保護されたタイルの異なるパスからの処理された出力が同一ではなく、したがって、処理された出力を生成した処理ユニットの一つ以上からの処理された出力が無効であることを示す。同一の保護されたタイルを処理するように構成された処理ユニットの出力は、電離放射線または電圧スパイクなどの一時的なイベントによって、またはハードウェア、ソフトウェアおよびファームウェアのいくつかの組み合わせにおけるバグによる永久エラーによって異なり得る。
検出されないフォルトは、潜在的にGPUでの安全違反につながる可能性がある。例えば、図2に示す機器クラスタの保護されたタイル209のいずれかをレンダリングするときのフォルトは、速度計などの機器クラスタの安全重要要素の破損を引き起こす可能性がある。
タイルが安全重要要素を含む幾何学的形状段階で識別し、かつ断片処理のために処理された幾何学的形状データを有する情報を提供することによって、グラフィック処理装置は、保護されたタイルを少なくとも二回処理し、保護されたタイルのレンダリングされた出力を検証するように配置され得る。保護されていないタイルは一回のみ処理され、レンダリングされた出力を検証するために、単純にレンダリング処理全体をフレーム全体に繰り返す単純な冗長化システム(例えば、デュアルロックステッププロセッサ)と比較して、処理オーバヘッドを減少させる。本明細書に記載される原理に従って、こうした冗長化処理は、従来的なグラフィック処理ハードウェアで達成でき、例えば、ハードウェアに公式な保護されていない処理経路を提供する必要はなく、保護されたタイルの断片処理を繰り返すためにハードウェアを修正する必要はない。
本明細書に記載される原理に従って構成されたグラフィック処理システムによって実施される保護されたレンダリングは、図3および図4に示すフローチャートを参照して、より詳細に説明される。
データ処理装置は、幾何学的形状段階で識別された保護されたタイルの断片処理を繰り返すように配置される。これは、保護されたタイル410の断片処理が繰り返される412である図4に図示されている。保護されたタイルの各断片処理パスの後、シグネチャが、チェックユニット315で形成される411。シグネチャは、単一の保護されたタイル、保護されたタイルの一群、またはフレームの保護されたタイルのすべての出力に関して形成され得る。
保護された断片パスのシグネチャは、413で比較され、シグネチャが一致しない場合は、フォルト信号が発生される414。一部の実施例では、コントローラ316は、フォルト信号が発生されることに関して保護されたタイルを保護された断片処理経路での断片処理のため再提出させることができ、例えば、断片処理が一度目および二度目に実施され、パスのシグネチャは、シグネチャが一致することを検証するために比較される。保護されたタイルの負荷が断片処理される一部の実施例では、各負荷は一組の保護されたタイルを含み、コントローラ316は、フォルト信号が発生されることに関して保護されたタイルの負荷をGPU上での断片処理のために再提出させることができる。一部の実施例では、コントローラおよび/またはドライバは、フレームの保護されたタイルの断片処理中にフォルトが発生するとき、フレーム全体の断片レンダリングを再開させ得る。発生されたフォルト信号に応答して、コントローラおよび/またはドライバは、フォルトが発生したことに関連して、処理ユニットおよび(例えば、キャッシュ311での)負荷と関連付けられたデータをフラッシュするように構成されてもよい。
一部の実施例では、コントローラおよび/またはドライバは、フレームに関してフォルト信号が発生したとき、フレームに対して幾何学的形状処理および断片処理の両方を再開させるように構成され得る。
保護されていないタイルは、一度処理された断片である409。保護されていないタイルの断片処理された出力に関してシグネチャが形成されない場合があり得る。
保護されたタイルの断片処理がフォルト信号が発生されることなく実施される場合、断片処理された一つ以上のレンダリングされたタイルが、メモリに書き込まれる415。この場合、グラフィック処理システムで生成された一つ以上のレンダリングされたタイルは、有効とみなされ、アプリケーションに適した方法で使用され得る(例えば、図2の実施例では、レンダリングされたタイルデータは機器コンソール200の一部であってよい)。同一のタイルの異なる断片処理パスからの出力がステップ413で一致しない場合、フォルト信号が発生されない場合があるか、一部の実施例では、出力が一致することを示す信号が発生する場合がある。
グラフィック処理装置300での断片処理を引き起こすため使用される一連の例示的なアクション700を図7に示す。コントローラ316は、断片処理が実施されるタイルが、保護されていないタイル(保護されたタイルとしてマークされていない全てのタイル)および保護されたタイルの二つのグループに分割されるように、領域ヘッダを生成させるように構成される。ブロック701で、グラフィック処理装置は、断片処理が実施される各保護されていないタイル内のプリミティブを識別するタイルリストの開始を表す領域ヘッダを生成するように構成され得る。
保護されていないタイルの断片処理は、命令702に応答して実施される。保護されていないタイルは、一度で処理される。ブロック709で、グラフィック処理装置は、断片処理が実施される各保護されたタイル内のプリミティブを識別するタイルリストの開始を表す領域ヘッダを生成するように構成され得る。保護されたタイルの断片処理は、命令703に応答して第一のパスで実施される。一つ以上のシグネチャ704は、第一のパスの断片処理されたデータのためにチェックユニット315で生成される。保護されたタイルの断片処理は、命令705に応答して第二のパスで二度目に実施される。これは、任意の適切な方法で配置され得る。例えば、コントローラ316は、保護されたタイルのタイルリストが、領域ヘッダで二回識別されるように、領域ヘッダを生成するように構成されてもよく、GPUの処理ユニットに保護されたタイルのタイルデータを二回読み取り、処理させてもよい。フレームの各タイルに関して断片処理命令が発行される他の実施例では、コントローラ316は、それらのタイルが二回処理されるように、保護されたタイルに関して断片処理命令を複製するように構成され得る。
一部の実施例では、タイルの保護されていない群および保護された群のために、領域ヘッダの別個のセットが生成されない場合がある。例えば、一組の領域ヘッダは、一度処理されて、(例えば、命令702に応答して)保護されていないと記されたタイルのみを処理するために選択してもよく、以降に(例えば、命令703および705に応答して)保護されていると記されたタイルのみを処理するために選択してもよい。その他の実施例では、断片処理は、保護されたタイルおよび保護されていないタイルの個別群に分割されず、保護されたタイルおよび保護されていないタイルは、任意の順序で処理され、保護されたタイルのみの断片処理された出力に関してシグネチャが形成される。
一つ以上のシグネチャ706は、第二のパスの断片処理されたデータのためにチェックユニット315で生成される。コントローラ316は、第一の断片処理パスに関連して形成されたシグネチャ704を、第二の断片処理パスに関して形成されたシグネチャ706と比較するように構成される707。シグネチャが一致しない場合、フォルト信号を生成する。
一般に、GPU(例えば、そのパラメータマネージャ)は、断片処理が実施されると、キャッシュ311および/またはパラメータバッファ312からタイルに関連するデータを解放するように構成される。コントローラ316は、第二のパス上で保護されたタイルの断片処理を実施するために、タイルデータが利用できることを確実にするため、第一の断片処理パスが実施されることに関する保護されていないタイルおよび保護されたタイルに関連するデータをGPUが解放するのを防止するように構成され得る。一部の実施例では、フレームのタイルのためのパラメータバッファメモリの割り当ておよび割り当て解除は、パラメータマネージャによって取り扱われる。図7に示す実施例では、パラメータマネージャによるメモリの割り当て解除は、タイルの断片処理が実施される前に無効化される708。これにより、パラメータマネージャが、幾何学的形状処理段階で以前割り当てられたメモリページを解放(割り当て解除)することを防止する。GPUは、その後の保護されていないおよび保護された断片処理段階によって参照され得るので、まだそれらのページに保持されているデータを必要とする。コントローラ316は、命令708を発行して、適切な時点でメモリの割り当て解除を無効にしてもよい。保護された断片処理(または保護された断片処理の少なくとも第一のパス)が完了したら、パラメータマネージャによってメモリの割り当て解除を再度有効にするために、その後の命令709を発行することができる。
一般に、保護されていないおよび保護されたタイル断片処理は、任意の順序で実施されてもよく、例えば、保護された断片処理がまず実施されて、その後に保護されていない断片処理が実施されてもよい。一部の実施例では、保護された断片処理および保護されていない断片処理は、異なる処理ユニットで実施されてもよく、同時に実施されてもよい。
タイルは、任意の適切な方法で断片処理のため一つ以上の処理ユニット301に割り当てられ得る。例えば、3D負荷については、3Dデータマネージャ307は、処理ユニットに各タイル(すなわち、幾何学的形状段階でタイルに対して生成されたデータ)を割り当てるように構成され得る。各処理ユニットは、幾何学的形状処理段階(例えば、変形した頂点データおよびタイルリスト)によって出力されるそのタイルのデータ上のタイルに対する断片処理を実施するように構成される。断片処理のためのタイルを割り当てることは、幾何学的形状処理段階で生成され、パラメータバッファ312に保持されるタイルデータへの参照を渡すことを含みうる。例えば、処理ユニットは、それぞれの断片処理パスの前で生成された一つ以上の領域ヘッダを渡され、その断片処理が実施されるタイルデータを示し得る。
複数の処理ユニットを備えるシステムでは、システムの各処理ユニットは、任意の他の処理ユニットから独立して任意のタスクを処理するように配置されてもよく、異なる処理ユニットが異なるタスクを処理することを可能にする。一部の実施例では、異なるタイルの断片処理は、システムの異なる処理ユニットで同時に処理され得る。保護されたタイルの各処理パスを実行するように構成された処理ユニットは、特定の実装に応じて、同一の処理ユニットであってもよく、または同一の処理ユニットであっても、なくてもよい。
任意の適切なアプローチは、断片処理のため処理ユニットにタイルを分配するために使用され得る。一般に、GPUは、任意の種類のアーキテクチャを持つことができ、またタイルを処理ユニットに分配するための任意のスキームを利用し得る。断片処理は、保護されたタイルとして識別されないタイル(すなわち、保護されていないタイル)に対し、一度実施され得る。
チェックユニット315は、各断片処理が一つ以上の保護されたタイルを通過し、断片処理された出力データの特徴である一つ以上のシグネチャを形成するように配置され得る。コントローラ316は、処理されたデータをチェックユニットに向けることによって、チェックユニットにこうしたシグネチャを形成させるように構成され得る。
一部の実施例では、フレームのタイルに関連して断片処理を実施する出力は、一つ以上のバッファに書き込まれる。例えば、GPU300は、カラーバッファ、ステンシルバッファ、および深度バッファのうちの一つ以上を維持し得る。こうしたバッファは、GPUの任意の適切なデータストア、例えば、キャッシュ311、および/または処理ユニット301、および/またはHSRユニット321に保持され得る。これらのバッファに書き込まれた断片処理されたデータは、書き込まれたデータ上でのシグネチャの形成のためにチェックユニット315に提供されてもよい。例えば、チェックユニットは、断片処理中、バッファへの一つ以上の書き込みのセット上にシグネチャを形成するように配置されてもよい。例えば、カラーバッファ、深度バッファ、またはステンシルバッファのうちの一つに書き込まれるたびに、コントローラ316は、その書き込みに関してシグネチャを生成ため、その書き込みがチェックユニットのためにチェックユニット315に渡されるようにすることができる。チェックユニットがバッチの書き込み上にシグネチャを生成するように構成されて、一つ以上の書き込みが、チェックユニットへの提出のために一緒にバッチ処理され得る。
フレームの一つ以上の保護されたタイルの断片処理に関連して形成されたシグネチャは、例えば、キャッシュ311で、グラフィック処理装置にアクセス可能なデータストアに蓄積され得る。例えば、同じ保護されたタイルのその後の断片処理パスに関して形成されたシグネチャと比較するために、その後の使用のためシグネチャを保存することができる。シグネチャは、シグネチャが関連する保護されたタイル(例えば、識別子またはタイルの座標)、およびシグネチャが関連するバッファ、(例えば、カラーバッファ、ステンシルバッファ、および深度バッファのうち、書き込みが、シグネチャが形成されることに関して、対象にするバッファ)を示す情報を有するデータストアで関連付けられてもよい。断片処理中に書き込まれたバッファの内容は、グラフィック処理装置で実施された断片処理を表すため、フレームの保護されたタイルの断片処理中に作製されたバッファへの書き込み上で形成されるシグネチャの全体のセットは、フレームの保護されたタイルに関するグラフィック処理ユニットからの完全な断片処理された出力を表す。シグネチャがフレームの保護されたタイルに対して利用可能になった場合、コントローラ316は、対応するシグネチャの対の間で比較を実施し、シグネチャのいずれかが一致しない場合、全体としてフレームに関してフォルトを発生するように構成され得る。コントローラは、対応するシグネチャ間の比較を実施する前に、第二の断片処理パスに関連して形成された一つ以上のシグネチャを待つように構成されてもよい。一部の実施例では、コントローラは、対応するシグネチャ間の比較を実施する前に、第二の断片処理パスに関連して形成されたすべてのシグネチャを待つように構成されてもよい。
コントローラ316は、保護されたタイル、保護されたタイルの一群、またはレンダリングされているフレームの保護されたタイルのすべてに関連して、断片処理されたデータに関連するシグネチャを組み合わせるように構成され得る。シグネチャを組み合わせることは、シグネチャの単純な集合、集合される二つ以上のシグネチャにわたってチェックユニットで形成されたシグネチャ、またはシグネチャのその他任意の適切な組み合わせを含み得る。
コントローラ316は、シグネチャ(またはシグネチャの蓄積)が、一つ以上の保護されたタイルの同一セットの異なる断片処理パスに関して形成されたものが、一致するかどうかを413でチェックするように構成される。保護されたタイルに関して実施された断片処理の出力をチェックすることで、断片処理中に発生するフォルトを捕捉することができ、GPUが高い安全レベルを達成するのに役立ち得る。
断片処理段階の出力は、フレームバッファへの書き込みに適切な一つ以上のレンダリングされたタイルを含んでもよく、潜在的に一つ以上のさらなる処理ステップ(例えば、シームレスな出力フレームを生成するために、タイルをスティッチおよび/またはブレンドする)の対象となる。レンダリングされたタイルは、メモリ306(例えば、フレームバッファに)に書き込まれてもよい。GPU300が機器クラスタ200をレンダリングするように構成された実施例では、レンダリングされたタイルは、機器クラスタが提供される物理的表示器に書き込まれ得る。
一部のシステムでは、断片処理段階から記述されるべき各タイルについて、そのタイルに関して記述されるデータを表すためにシグネチャが生成される。タイルのデータは、バッファ(例えば、フレームバッファ)に記述されてもよく、そのバッファに以前に保存されたデータを上書きしてもよい。記述されるデータのシグネチャは、現在のタイルのデータによって上書きされることによりバッファ内のデータのシグネチャと比較され得る。シグネチャが一致した場合、新しいデータを記述する必要はない。つまり、同一のデータを上書きする場合は、タイルのデータは記述される必要はない。例えば、フレームのタイルが以前のフレームの対応するタイルと同じ場合、例えば、ビデオシーケンスがフレームのシーケンスにわたって静的画像を含む場合、これは、メモリ帯域幅を減少させる点において有用である(すなわち、メモリに伝達されるデータ量を減少させる)。これらのシグネチャは、保護されたタイルのエラーをチェックするために使用されるシグネチャ704および706として(またはその一部として)使用することができる。
保護されていないタイルを含む断片処理によって生成される各々のレンダリングされたタイルに対するシグネチャを形成するために、グラフィック処理装置を構成することが有利であり得る。例えば、コントローラ316は、保護されていないタイルのレンダリングされた出力のために一つ以上のシグネチャを形成させるため、保護されていないタイルに関して断片処理された出力をチェックユニットに向けるように構成され得る。これにより、現在のフレームの保護されたタイルおよび保護されていないタイル(すなわち、全てのタイル)の両方のシグネチャが、以前のフレームの対応するタイルのシグネチャと比較できるようになる。結果として、メモリ帯域幅は、以前のフレームの対応するタイルと同一であるメモリへのタイルへの記述を避けることにもよってさらに低減され得る。さらに、同一のシグネチャ生成および比較プロセスを両方の目的に使用し得る(すなわち、(i)保護されたタイルがエラーのないことをチェックすること、および(ii)タイルを対応する以前のタイルと比較することの両方)。
本明細書に記載の原理に従って構成されたグラフィック処理システムは、それらのタイルに対して実施される処理に関して所定の安全レベルを満たすため、保護されたタイルを識別し、レンダリングするように配置される。例えば、グラフィック処理システムは、保護されたタイルのレンダリングに関して、ISO26262のASIL B標準を満たすように認証され得る。
本明細書に記載した実施例に従って構成されたグラフィック処理システムは、フレーム全体のレンダリングを単に繰り返すことによって保護されたレンダリングを実施する、従来的システム(例えば、デュアルロックステップ構成のGPUなど)に対し、一つ以上の利点を持ち得る。
第一に、安全重要要素を含むタイルのみの断片処理を繰り返すことにより、本システムは、レンダリングされるシーンの安全重要要素を保護するために、フレーム全体にわたって断片処理を繰り返す必要があるシステムに対し、実質的に改善された性能を提供できる。
第二に、本システムは、レンダリングのために提出されたシーンに応じて、システムがタイルの一部の、または全ての保護された断片処理を実施し得るかまたは全く実施できないため、既存のシステムよりも柔軟性を提供し得る。これにより、アプリケーション開発者は、レンダリングされるシーンの安全重要部分のみを保護し、安全重要でないシーンの部分を保護しないことによって、効率的な節約を行うことができる。
第三に、保護された断片処理はタイルごとに実施されるが、フレーム全体の幾何学的形状段階は保護され、保護されていないタイルに存在する要素に関連する幾何学的形状計算において生じるエラーが、保護されたタイルのレンダリングにエラーを確実に導入しないようにできる。また、断片処理によって消費される処理時間は一般的に、幾何学的形状処理によって消費される処理時間よりも実質的に大きいので、本明細書に記述した実施例の一部に従って連続的に幾何学的形状処理を繰り返すことは、フレームを処理するために取る時間を実質的に増加させない。
第四に、断片処理中のフォルトはフレームの完全なレンダリングの後ではなく、個別のタイルの完了時に検出できるため、システムのフォルト反応時間は実質的に減少し得る。一部の実施例では、タイルの断片処理を完了する前にフォルトをチェックすることによって(例えば、断片処理中に実行された一つ以上のバッファへの書き込みにわたって生成されるシグネチャをチェックすることによって)、システムのフォルト反応時間をさらに減少させることができる。
第五に、本システムは、保護されたレンダリングを少ない断片処理動作で実施することを可能にし得るため、本明細書に記載の原理に従って構成されたGPUの電力消費量は、従来の保護されたGPUのものよりも低くなり得る。
第六に、アプリケーション開発者は、(例えば、レンダリングのためGPUにシーンの幾何学的形状を提出するソフトウェアまたはファームウェアプロセスなど)アプリケーションに大幅な変更を加えることを要求されず、シーンの安全重要部分の保護されたレンダリングを可能にし得る。一部の実施例では、プロセスは、GPUへのドローコールに関連して、フラグまたはその他の識別子を(例えば、GPUのドライバと協働するAPIによって)単に設定して、ドローコールが関連する幾何学的形状が安全重要であり、保護された経路上にレンダリングされることを示すことができる。これにより、例えば、ドローコールを二度提出することによって、および/またはシーンの異なる部分が別個にレンダリングされ、その後、表示装置に書き込む前にフレームバッファで組み合わせることにより、アプリケーション自体において、保護されたレンダリングを扱う必要性を回避する。
チェックユニットを含むアーキテクチャでは、保護されたタイルの冗長化処理を実施する効率の利点を成し遂げるため、グラフィック処理装置のハードウェアの改造が必要でない場合があるが、保護されていないタイルはそうでない。例えば、本明細書に記述されるアプローチは、グラフィック処理装置用に更新されたドライバおよびコントローラ316を含むファームウェアを提供することによって、グラフィック処理システムに実装されてもよい。これにより、既存のグラフィック処理装置(以前は安全重要アプリケーションでレンダリングを実行する能力を持たなかった)を使用して、安全重要なアプリケーションでレンダリングを行うことができる。
図3のグラフィック処理システムおよび図5のデータ処理システムは、いくつかの機能ブロックを含むものとして示されている。これは概略的のみであり、そのようなエンティティの異なるロジック要素間の厳密な区分を定義することを意図していない。各機能ブロックは、任意の適切な様式で提供され得る。グラフィック処理システムによって形成されるものとして本明細書で説明される中間値は、任意の点でグラフィック処理システムによって物理的に生成される必要はなく、その入力と出力との間でグラフィックス処理システムによって実行される処理を好都合に説明する論理値を単に表し得ることが理解されよう。
本明細書に記載のグラフィック処理ユニットは、一つ以上の集積回路上のハードウェア内に具体化され得る。本明細書に記載のグラフィック処理システムは、本明細書に記載の方法のいずれかを実行するように構成され得る。
コンピュータプログラムコードおよびコンピュータ可読命令という用語は、本明細書で使用される場合、機械言語、解釈言語、またはスクリプト言語で表現されたコードを含む、プロセッサのあらゆる種類の実行可能コードを指す。実行可能コードには、バイナリコード、マシンコード、バイトコード、集積回路を定義するコード(ハードウェア記述言語またはネットリストなど)、およびC、Java、またはOpenCLなどのプログラミング言語コードで表現されたコードが含まれる。実行可能コードは、例えば、仮想マシンまたはその他のソフトウェア環境で適切に実行、処理、解釈、コンパイル、実行された時に、実行可能コードがサポートされているコンピュータシステムのプロセッサに、コードで指定されたタスクを実行させる、任意の種類のソフトウェア、ファームウェア、スクリプト、モジュール、またはライブラリであってもよい。コンピュータ可読記憶媒体の実施例には、ランダムアクセスメモリ(RAM)、読み取り専用メモリ(ROM)、光ディスク、フラッシュメモリ、ハードディスクメモリ、ならびに磁気、光学、およびその他の技術を使用して、命令またはその他のデータを保存し、マシンからアクセスすることができるその他のメモリデバイスが含まれる。
プロセッサ、コンピュータ、またはコンピュータシステムは、命令を実行することができるように、処理能力を有する任意の種類のデバイス、機械もしくは専用回路、またはその収集もしくは部分であってもよい。プロセッサは、例えば、CPU、GPU、ベクタプロセッサ、テンソルプロセッサ、システムオンチップ、ステートマシン、メディアプロセッサ、特定用途向け集積回路(ASIC)、プログラマブルロジックアレイ、フィールドプログラマブルゲートアレイ(FPGA)などの任意の種類の汎用プロセッサまたは専用プロセッサであり得る。コンピュータまたはコンピュータシステムは、一つ以上のプロセッサを含んでもよい。
また、所望の機能を実行するために、集積回路を設計する、またはプログラム可能なチップを構成するために使用されるように、HDL(ハードウェア記述言語)ソフトウェアなどの、本明細書で説明したようなハードウェアの構成を定義するソフトウェアを含むことが意図されている。すなわち、集積回路製造システムで処理されると、システムを構成して、本明細書に記載の方法のいずれかを実行するように構成されたグラフィックス処理ユニットを製造するか、または本明細書に記載のいくつかの装置を含むグラフィックス処理ユニットを製造する、集積回路定義データセットの形態でコンピュータ可読プログラムコードがその上にエンコードされたコンピュータ可読記憶媒体が提供されてもよい。集積回路定義データセットは、例えば、集積回路の記述であってもよい。
集積回路製造システムで、本明細書に記載のグラフィック処理ユニットを製造する方法が、提供されてもよい。集積回路製造システムで処理される時に、グラフィック処理ユニットを製造する方法を実行させる、集積回路定義データセットが提供されてもよい。
集積回路定義データセットは、例えば、ネットリスト、プログラム可能なチップを構成するためのコード、レジスタ転送レベル(RTL)コードを含む任意のレベルで集積回路を定義するハードウェア記述言語、VerilogやVHDLなどの高レベル回路表現、OASIS(RTM)やGDSIIなどの低レベル回路表現としてのコンピュータコードの形式であり得る。集積回路(RTLなど)を論理的に定義する高レベル表現は、表現によってそのように定義された集積回路の製造定義を生成するために、回路要素の定義およびそれらの要素を組み合わせるためのルールを含むソフトウェア環境のコンテクストで、集積回路の製造定義を生成するように構成されたコンピュータシステムで処理され得る。マシンを定義するために、コンピュータシステムで実施されるソフトウェアの場合は一般的であるが、集積回路の製造定義を生成するように構成されたコンピュータシステムが、その集積回路の製造定義を生成するために集積回路を定義するコードを実行するために、一つ以上の中間ユーザステップ(例えば、コマンド、変数などの提供)を必要とする場合がある。
ここで、グラフィック処理ユニットを製造するシステムを構成するために、集積回路製造システムで集積回路定義データセットを処理する実施例を、図8に関して説明する。
図8は、本明細書の実施例のいずれかに記載のグラフィック処理ユニットを製造するように構成された、集積回路(IC)製造システム1002の一実施例を示す。詳細には、IC製造システム1002は、レイアウト処理システム1004と、集積回路生成システム1006と、を含む。IC製造システム1002は、IC定義データセット(例えば、本明細書の実施例のいずれかで説明したようなグラフィック処理ユニットを定義する)を受信し、IC定義データセットを処理し、IC定義データセット(例えば、本明細書の実施例のいずれかで説明したようなグラフィック処理ユニットを具体化する)に従ってICを生成するように構成されている。IC定義データセットの処理は、本明細書の実施例のいずれかに記載のグラフィック処理ユニットを具体化する集積回路を製造するために、IC製造システム1002を構成する。
レイアウト処理システム1004は、IC定義データセットを受信および処理して、回路レイアウトを決定するように構成されている。IC定義データセットからの回路レイアウトを決定する方法は、当技術分野で知られており、RTLコードを合成して、例えば、論理的構成要素(例えば、NAND、NOR、AND、OR、MUXおよびFLIP−FLOP構成要素)の観点から生成される回路のゲートレベル表現を決定することを含み得る。論理的構成要素の位置情報を決定することにより、回路レイアウトが、回路のゲートレベル表現から決定され得る。これは、回路レイアウトを最適化するために、自動的に、またはユーザの関与によって行われ得る。レイアウト処理システム1004が回路レイアウトを決定したとき、レイアウト処理システム1004は、IC生成システム1006に、回路レイアウト定義を出力し得る。回路レイアウト定義は、例えば、回路レイアウト記述であってもよい。
IC生成システム1006は、当技術分野で知られているように、回路レイアウト定義に従ってICを生成する。例えば、IC生成システム1006は、ICを生成するために、半導体デバイス製造プロセスを実装することができ、これは、フォトリソグラフィーおよび化学処理ステップの複数ステップのシーケンスを含み、その間に、半導体材料で作製されたウェハ上に、電子回路が徐々に生成され得る。回路レイアウト定義は、回路定義によるICを生成するためのリソグラフィープロセスで使用され得る、マスクの形態であってもよい。あるいは、IC生成システム1006に提供される回路レイアウト定義は、IC生成システム1006が、ICの生成に使用するための適切なマスクを形成するために使用し得る、コンピュータ可読コードの形態であってもよい。
IC製造システム1002によって実行される異なるプロセスは、すべて一つの場所で、例えば、一人の当事者によって実装されてもよい。別の方法として、IC製造システム1002は、プロセスの一部が異なる場所で実行され得、異なる当事者によって実行され得るような、分散システムであってもよい。例えば、(i)IC定義データセットを表すRTLコードを合成して、生成される回路のゲートレベル表現を形成する段階、(ii)ゲートレベルの表現に基づいて、回路レイアウトを生成する段階、(iii)回路レイアウトに従って、マスクを形成する段階、および(iv)マスクを使用して集積回路を製造する段階のうちの一部は、様々な場所で、および/または様々な当事者によって実行され得る。
他の実施例では、集積回路製造システムでの集積回路定義データセットの処理は、回路レイアウトを決定するようにIC定義データセットが処理されることなく、グラフィック処理ユニットを製造するためのシステムを構成し得る。例えば、集積回路定義データセットは、FPGAなどの再構成可能プロセッサの構成を定義してもよく、そのデータセットの処理は、その定義された構成を有する再構成可能なプロセッサを生成する(例えば、構成データをFPGAにロードすることによって)ためのIC製造システムを構成してもよい。
いくつかの実施形態では、集積回路製造定義データセットは、集積回路製造システムで処理される時に、集積回路製造システムに、本明細書に記載のデバイスを生成することを行わせ得る。例えば、集積回路製造定義データセットによる、図8に関して上述した様式での集積回路製造システムの構成は、本明細書に記載されるようなデバイスが製造されることを引き起こし得る。
一部の実施例では、集積回路定義データセットは、データセットで定義されたハードウェア上で、またはデータセットで定義されたハードウェアと組み合わせて実行される、ソフトウェアを含むことができる。図8に示す実施例では、IC生成システムは、集積回路を製造する際に、集積回路定義データセットで定義されたプログラムコードに従ってその集積回路にファームウェアをロードするに、または別のやり方では、集積回路で使用するために、集積回路にプログラムコードを提供するために、集積回路定義データセットによってさらに構成されてもよい。
デバイス、装置、モジュール、および/またはシステム(ならびに本明細書で実装される方法)における本出願で述べられる概念の実装形態は、既知の実装形態と比較した時に性能の改善をもたらし得る。性能の改善には、計算性能の増加、待ち時間の短縮、スループットの向上、および/または消費電力の削減のうちの一つ以上が含まれ得る。こうしたデバイス、装置、モジュール、およびシステム(例えば、集積回路における)の製造中、性能改善は、物理的実装とトレードオフになり、それにより、製造方法が改善され得る。例えば、性能改善は、レイアウト面積に対して交換される場合があり、それによって、既知の実装形態の性能と一致するが、使用するシリコンは少なくなる。これは、例えば、機能ブロックをシリアル化して再利用すること、またはデバイス、装置、モジュール、および/もしくはシステムの要素間で機能ブロックを共有することによって行われ得る。逆に言えば、デバイス、装置、モジュール、およびシステムの物理的実装の改善(減少されたシリコン面積など)を生じさせる本出願で述べられた概念は、改善された性能と交換され得る。これは、例えば、既定の面積予算内でモジュールの複数のインスタンスを製造することによって行われ得る。
出願人は、これによって、そのような特徴または特徴の組み合わせが、本明細書で開示されるいくつかの問題を解決するかどうかに関係なく、そのような特徴または組み合わせを、当業者の共通の一般的な知識に照らして、全体として本明細書に基づいて実行することができる程度まで、本明細書に記載の各個々の特徴および二つ以上のそのような特徴の任意の組み合わせを単独で開示する。前述の説明の観点から、本発明の範囲内で様々な修正を行うことができることは、当業者には明らかであろう。