【文献】
橋本 昌嗣,リアルタイム・ビジュアル・デザインレビュー・システムの設計と実装,情報処理学会研究報告 Vol.2003 No.117,日本,社団法人情報処理学会,2003年11月25日,2003-CG-113,P.75-80,ISSN 0919-6072
(58)【調査した分野】(Int.Cl.,DB名)
他のシェーディング属性の前に位置属性を計算するのではなく、少なくとも1つの描画呼び出しに対して1つのパスですべての属性を計算することを選択的に可能にするステップを含む、請求項1に記載の方法。
位置属性を計算するステップが、位置属性のみを読み込むステップと、位置属性を計算するために他の任意のシェーディング属性を読み込まないステップとを含む、請求項1に記載の方法。
三角形カリングの間にプリミティブをクリッピングするステップと、位置属性を計算する場合にすべての三角形を目に見えるようにマーキングするステップとを含む、請求項1に記載の方法。
前記シーケンスは、他のシェーディング属性の前に位置属性を計算するのではなく、少なくとも1つの描画呼び出しに対して一度にすべての属性を計算することを選択的に可能にすることを含む、請求項12に記載のコンピュータプログラム。
位置属性を計算することが、位置属性のみを読み込むことと、位置属性を計算するために他の任意のシェーディング属性を読み込まないこととを含む、請求項12に記載のコンピュータプログラム。
前記シーケンスが、三角形カリングの間にプリミティブをクリッピングし、位置属性を計算する場合にすべての三角形を目に見えるようにマーキングすることを含む、請求項12に記載のコンピュータプログラム。
前記プロセッサが、位置属性を計算する一部として第1の深度テストを実行し、次いで、位置属性を決定した後にカリング中に第2の深度テストを実行する、請求項21に記載の装置。
【発明を実施するための形態】
【0005】
長く実行される破棄シーケンスを完全に隠すメカニズムにより、性能が向上する。残念ながら、頂点の位置属性を取り出してシェーディングする(実行する)ことなく任意の特定の三角形シーケンスを有効にスキップできるかは確実には分からない。三角形を破棄できるかどうかを決定するには位置のシェーディングが重要であるため、グラフィック処理装置(GPU)は、位置のシェーディングを優先すべきである。例えば、現在のGPUアーキテクチャでは、頂点計算は、メモリから頂点属性(例えば、位置、色、テクスチャ座標など)を取り出し、次いで、頂点シェーダの助けによりそれらをシェーディングすることを含む。重要な命令の計算は、位置属性を計算する頂点シェーダ、すなわち、位置シェーダから分けることができる。重要な結果の計算がはるかに速く行われた場合、その結果は、カルシーケンスを隠すために使用することができる。要するに、位置シェーダを「事前実行」して、メインアプリケーションに代わって効果的に待ち時間を消費することが望ましい。
【0006】
位置限定シェーディングでは、2つのジオメトリパイプ、すなわち、カルパイプと呼ばれるトリムダウンバージョンと、リプレイパイプと呼ばれるフルバージョンとが存在する。パイプはどちらも、同じアプリケーションの異なるインスタンスを実行し、各インスタンスは、専用のコンテキストを有する。したがって、カルパイプは、メインアプリケーションと並行して位置シェーダを実行するが、通常、頂点の位置属性のみを取り出してシェーディングし、ラスタライズならびにフレームバッファに対するピクセルのレンダリングを避ける場合により速く重要な結果を生成する。さらに、カルパイプは、これらの重要な結果を使用して、それらがカリングされたかどうかに関わらず、すべての三角形に対する可視情報を計算する。他方で、リプレイパイプは、可視情報を消費し、カリングされた三角形をスキップし、最終的にラスタライズ段階に渡される可視三角形のみをシェーディングする。2つのパイプはどちらも、破棄された三角形の長いカリング実行を隠すことができ、いくつかの実施形態において、作業をより速く完了することができる。
【0007】
性能向上の可能性に加えて、位置限定シェーディングはまた、省電力、およびアーキテクチャのスケーラビリティの向上の機会をもたらす。以下は、いくつかの実施形態のいくつかの寄与である。
位置限定シェーディングは、いくつかの実施形態におけるアプリケーションに埋め込まれた三角形の長いカルシーケンスを完全に隠すことができる。これらのカル実行は、ピクセルパイプを枯渇させることによってGPUリソースの利用を非効率にする傾向があり、システム内に存在するものを計算する。位置限定シェーディングの助けにより、長いカル実行は、完全に抑制することができ、ボトルネックが、ジオメトリパイプからピクセルパイプにシフトして、いくつかの実施形態において、性能向上をもたらす。
GPU内のリソースは、カルパイプを介して利用することができ、重要な作業の計算をより高速に完了することができる。
さらに、位置限定シェーディングアーキテクチャは、いくつかの実施形態において、エネルギーを節約することができ、すなわち、エネルギー節約は、取り出すエネルギーを少なくして、カリングされた三角形に対する動的命令の実行を少なくすることによってもたらされる。
位置限定シェーディングは、より大量の製品に対してさらなるスケーラビリティをもたらすことができ、すなわち、ジオメトリパイプからピクセルパイプにボトルネックをシフトすることによって、スケーラビリティ問題は、ピクセルを増やすことにより変換され、アーキテクチャ要件に合うようスループットを計算することができる。
【0008】
図1は、アプリケーション・プログラム・インターフェース(API)およびプログラミングモデルと一致するベースラインアーキテクチャの概略図であり、一方、
図2は、一実施形態によるベースラインGPUのより詳細なマイクロアーキテクチャを示す。GPUは、3つの部分、すなわち、アンスライス、スライス、およびアンコアを含む統一シェーダモデルである。
【0009】
通常、3Dシーンは、三角形の頂点がオブジェクトの形状を画定する三角形に分割された表面の集合として開始する。頂点のこれらの入力リストは、頂点取り出し(VF)ユニット12にもたらされ、頂点取り出し(VF)ユニット12はメモリ14から頂点と関連した属性を取り出す。頂点シェーダ(VS)ユニット16では、頂点の取り出された属性が、プログラマブルシェーダを使用して変換される。これらのプログラマブルシェーダは、頂点を画面上にマッピングして、これらの属性について数学的演算を実行することによって3D環境でオブジェクトに特殊効果を加える、サブルーチンと考えることができる。これらのシェーダは、実行ユニット(EU)と呼ばれる、スレッドプロセッサに送出され、頂点の属性(例えば、位置、色、テクスチャ座標など)が変換され、計算値が後のパイプ段階による参照のためにローカルメモリに格納される。
【0010】
VSユニットの出力は、適用可能な場合に、ハルシェーダ17、テッセレーション18、ドメインシェーダ19、およびジオメトリシェーダ20である次のパイプライン段階に送られるか、または三角形が生成されるプリミティブ・アセンブリ・ユニット22に送られる。三角形の生成がクリッピング段階24に来ると、視錐台破棄23で判断されるように、視錐台の外側にある三角形が破棄される。他方で、視錐台の面内にある三角形は、受け入れられて、後のパイプ段階に送られる。さらに、クリッピング段階はまた、視錐台の面と交差する三角形をクリップすることができる。
【0011】
ビューポイント錐台破棄23で残った三角形は、三角形が最終画像の一部となるかどうかを確認するための単純カル段階26によってまたさらに検査され、これらのテストに落ちたオブジェクトは破棄される。例えば、バックフェーシング、ディジェネレート、ゼロエリアなどで、三角形はこの段階で破棄される。いくつかのアプリケーションでは、三角形の約80%以上が、ビューポイント錐台または単純なカル段階で破棄される。最後に、通過した三角形は、セットアップおよびラスタライズユニット28および30に送られる。
【0012】
ベースラインアーキテクチャの第2の部分は、ラスタライズ30、深度32、シェーディングおよびテクスチャ33、および色クラスタ34を含むピクセルパイプである。ピクセルパイプは、ジオメトリパイプによって送られた三角形のエッジの内側、またはエッジ上にあるすべてのピクセルの位置を判定するラスタライズユニット30で始まる。さらに、ピクセルパイプは、三角形を、深度テストのために深度(Z)パイプ32に送られるピクセルの対称的なブロックに分割する。3Dシーン内の複数のオブジェクトを同じ位置にマッピングすることができるので、深度パイプは、ブロック内に埋め込まれたピクセルが、観測者に最も近いか、または異なるオブジェクトに属する以前に観測されたピクセルによって隠されているかを判定する。深度テストに合格したピクセルは、それらの色およびそれらに属する他の属性を判定するためにシェーディングされる(シェーディングおよびテクスチャ33)。最後に、ピクセルの計算値は、任意選択的に、計算値を既知の状態とブレンドするか、または計算値を送って、フレームバッファをアップデートすることができる、カラーパイプ34に送られる。
【0013】
図2に示すように、VF段階から、単純なカル段階へのジオメトリパイプライン36が、アーキテクチャ40のアンスライス位置38に存在する。ジオメトリパイプから出るプログラム可能なシェーダは、グローバル・スレッド・ディスパッチ42を介してスレッドプロセッサにディスパッチされ、計算値が、ローカルメモリ44に記録される。合格した三角形は、ジオメトリパイプから、スライス46に送られ、ラスタライズウォークを介してピクセルの対称的なブロックに分割される。ピクセルブロックは、ピクセル・ハッシング・メカニズム48を介してハッシュされ、ブロックがスライス内でレンダリングされるかどうかを決定する。ハッシングメカニズムは、負荷分散だけでなく、ピクセルコヒーレンシを維持する役割も担う。
【0014】
上記のように、3Dシーン内の複数の三角形は重なり合う可能性があり、所与のスクリーン座標にあるピクセルブロックを、同じスライスおよび同じ計算クラスタ50にローカル・スレッド・ディスパッチ53を介して送信することは、ハッシングメカニズムの役割を果たす。このことは、ピクセルの深度およびカラーコヒーレンシを維持するために行われる。さらに、アーキテクチャのスライス部分は、2つの機能ブロック、すなわち、ピクセルパイプ52および計算クラスタ50に分割することができる。上記のように、ピクセルパイプは、ラスタライズ、深度、およびカラークラスタを含み、一方、計算クラスタは、プログラマブルシェーダを実行するために使用される実行ユニット(EU)54のアレイを包含する。各EUは、一実施形態では、異なる単一命令複数データ(SIMD)幅、すなわち、8、16、または32を有する複数のスレッドコンテキストをサポートすることができる。内部的に、クアッドパンプされた2つのパイプを有する。各パイプは、4ストリームSIMDプロセッサを有し、浮動小数点およびスカラ命令の両方を実行することができる。各計算クラスタはまた、共有テクスチャ・サンプリング・ユニット56と、収集読み込みおよび分散書き込みを行うことができるロード/ストアユニット58とを有する。さらに、共有機能は、
図2に示すように、統一L2キャッシュ60によってバックアップされた独自のプライベートキャッシュを有する。最後に、同様のアーキテクチャ世代は、さまざまな市場セグメント、すなわち、電話/タブレットソリューションから、ハイエンド・ゲーミング・コンピュータまでを満たそうとする。したがって、同じアーキテクチャ世代には、異なる数の計算クラスタおよびスライスを有する製品が存在する可能性がある。
【0015】
アンコア62は、キャッシュ/メモリインターフェース61、最終レベルキャッシュ(LLC)64、およびメモリ66を包含する。スライスと同様に、アンコア構成もまた、市場セグメントに依存する。例えば、ハイエンド構成は、埋込DRAM(eDRAM)68と共に最終レベルキャッシュを有することができ、一方、電話/タブレットのための構成は、メモリコントローラおよびシステムメモリを有することができる。
【0016】
上記のように、現代のGPUアーキテクチャは、頂点のすべての属性を取り出し、シェーディングする。しかしながら、頂点のほとんどは、ビューポイント錐台、または単純なカル破棄を介して拒否される。ここでの目的は、破棄の場合の作業を少なくすることであり、すなわち、三角形を破棄するかどうかを決定するために必要な属性を取り出してシェーディングするだけにすることである。GPUは、三角形がカリングされたかどうかを判定するために位置のみが必要とされるため、残りの属性よりも、位置のシェーディングを優先するべきである。
【0017】
典型的に、シェーディング属性は、例として、位置、法線、色、テクスチャ座標を含む。いくつかの実施形態において、位置限定シェーディングを実装する場合、すべての属性を読み出してから位置属性を選別する代わりに、メモリから位置属性を読み取るだけでよい。いくつかの実施形態では、このことは、時間、計算サイクル、およびメモリ帯域幅を節約する。したがって、いくつかの実施形態において、頂点を取り出す間、位置属性のみが、カルパイプによって取り出される。
【0018】
現在のGPUアーキテクチャは、破棄された三角形に対して追加命令を実行している。動的命令と同様に、現在のGPUアーキテクチャは、カリングされた頂点に対して多数の不要な、および/または使用された属性を取り出している。GPUは、残りの頂点属性よりも位置のシェーディングを優先する必要がある。
【0019】
第1のステップは、頂点シェーダに埋め込まれた重要命令を優先して、位置属性を計算し、できる限り早くGPUパイプラインでそれらを実行することである。第1に、GPUのジッタ/ドライバコンボが、重要命令を識別し、第2に、ジオメトリ段階のハードウェアパイプラインが、パイプ内のこれらの命令を早期に実行するよう調整される。これらの重要命令は、位置シェーダと呼ばれる。位置シェーダは、より少ない属性を取り出し、破棄される頂点に対してより少ない命令を実行するために使用される。
【0020】
別の問題は、破棄される三角形シーケンスが、バースト特性を有し、バーストのサイズが、10,000個の三角形よりも大きくなる可能性があることである。この動作が暗示することは、長期間、ピクセルパイプがアイドル状態の間にジオメトリパイプが三角形を拒否してビジー状態になることである。さらに、動的命令の点から頂点シェーダの複雑さは、ピクセルシェーダよりも相当に少なく、したがって、計算クラスタもまた、長期実行カルシーケンスのために枯渇する。いくつかの実施形態において、本システムの有効性は、これらの長期実行破棄シーケンスを完全に隠すことによって、改善することができる。
【0021】
位置シェーダの計算は、カルシーケンスを効果的に隠すことができるように、適時、さらに切り離される。メカニズムは、位置シェーダを「事前実行」し、長期実行カルシーケンスをスキップすることができるように、メインアプリケーションに代わって、待ち時間を効率的に消費する。要するに、位置限定シェーダは、性能利得を実現するだけでなく、いくつかの実施形態において、破棄される頂点に対する動作を少なくすることによって、電力を節約することができる。
【0022】
破棄されるオブジェクトに対して位置属性のみを取り出してシェーディングすることは、本システムのエネルギーフットプリントを減らす。無駄な作業を省略することで、ピクセルパイプと計算クラスタをビジー状態にすることによって、システムの効率が向上する。
【0023】
図3は、2つのジオメトリパイプ、すなわち、カルパイプ70およびリプレイパイプ72を有するアーキテクチャの簡易化したブロック図を示す。どちらのパイプも、同じアプリケーションの異なるインスタンスを実行し、各インスタンスは、完全に異なる描画呼び出しで動作することができる。カルパイプの役割は、三角形が拒否されたかどうかに関わらず、三角形の可視情報を計算することである。この情報は、破棄される三角形をスキップするためにリプレイパイプによって消費される、可視記録先入れ先出し(FIFO)74に格納される。さらに、カルパイプは、位置属性のみを取り出して、シェーディングすることによって、この重要情報をより迅速に生成する。このようにして、どちらのパイプも共に動作して、カリングされた三角形シーケンスに対して要求される作業量を減らし、さらに、それらを効率的にスキップする。
【0024】
図3に示すように、カルパイプは、リプレイパイプと比較して、浅く、薄い。位置属性をシェーディングするための位置限定VF−VS段階76を有し、その後に、プリミティブアセンブリ77、視錐台破棄段階78、および単純カル段階80が続く。言い換えると、カルパイプ内の命令セットは、位置属性を計算するのに必要な命令のみを含み、他のシェーダ属性を計算するための命令は有さない。この浅いパイプラインは、描写呼び出しの各三角形に対する可視命令を計算し、可視記録FIFO内に時間順でこの情報を記録する。記録された情報は、例えば、不合格三角形に対して0、合格三角形に対して1を使用して、ビット列として保持され、したがって、いくつかの実施形態において、使用する保管領域が少なくなる。カルパイプは、リプレイパイプが可視情報を枯渇させる前に、少なくとも1つの描写呼び出しを実行することができる。通常、3Dフレームは、所与のレンダーターゲットで動作する可変数のレンダーパスで構成される。フレームは、合成段階で終了し、レンダーターゲットに記録された中間情報がブレンドされて、最終フレームバッファが生成される。各レンダーパスは、任意の数の描画呼び出しを有し、実際には、オブジェクトの形状を定義する三角分割された表面の集合である。カルパイプは、描画呼び出しのためにピクセルのラスタライズならびにレンダリングを避けるため、先に実行して、適時に可視情報を計算することができる。しかしながら、描写呼び出しに対する情報が利用できない場合、リプレイパイプが停止する可能性がある。同様に、可視記録FIFOに余裕がない場合、カルパイプが停止する可能性がある。
【0025】
テッセレーションおよびジオメトリシェーダのような重要なパイプ段階のいくつかは、いくつかの実施形態において、カルパイプから欠落している。テッセレーション、ジオメトリシェーダ、またはその両方を必要とする描画呼び出しに生じることを尋ねることは当然である。カルパイプは、これらの状態を有効とする描画呼び出しをスキップして、リプレイパイプが、それらを通常の方法で処理し、すなわち、リプレイパイプは、これらの描画呼び出しに対する可視記録を期待していない。これを実現するためのドライバは、描画呼び出しコマンドにビットを設定し、すなわち、そのコマンドが、カルパイプの領域に入るかどうかを設定する。同様に、頂点限定描画呼び出しが、以前の描画呼び出しのピクセルシェーダを介して計算された情報を必要となる可能性がある。これは、アプリケーションではほとんど発生しないが、ドライバは、これらの種類の描画呼び出しがカルパイプを介して処理されないことを示すビットを依然として設定する。これらは、リプレイパイプが、そのパイプラインに破棄ロジック23を依然として有する理由のいくつかであり、他の場合に対して、リプレイパイプが、可視三角形でのみ動作しており、それらに対して、破棄ロジックが要求されないためである。
【0026】
最後に、一実施形態において、カルパイプに通常のクリッピング段階がないので、視錐台面と交差する三角形は合格として扱われ(すなわち、カルパイプで見えるようにマーキングすることができる)、次いで、リプレイパイプが、プリミティブクリッピングのすべてを処理する。
【0027】
上記で説明したように、可視FIFOは、描画呼び出しのすべての三角形に対してビット毎のシーケンスとして情報を、すなわち、不合格三角形に対して0、合格三角形に対して1を記録することができる。FIFOに存在するこの情報は、カルパイプを介して生成され、破棄三角形をスキップするためにリプレイパイプによって消費される。したがって、FIFOのサイズは、カルパイプが事前にどれだけ進むことができるかを左右し、したがって、アーキテクチャの性能に影響を与える可能性がある。
【0028】
可視FIFOは、256Kバイト分の頂点情報を記録することができ、いくつかの実施形態において、最適な性能をもたらすことができる。この情報は、以下に詳述する2つの状況によって制限される可能性がある。
ストリップケース:各頂点が、三角形である場合、256K/(8×1024)=>32KBを必要とする。
リストケース:3つの頂点が三角形を作る場合、256K/(3×8×1024)=>約11KBである。
【0029】
場合によっては、描画呼び出しドライバは、可視記録を有効または無効にすることを選択することができる。例えば、描画呼び出しにほんのわずかな頂点しかない場合、可視記録と関連するオーバヘッドは、時間、メモリ帯域幅、および計算サイクルの点から可視記録のコストを正当化しない可能性がある。可視記録が特定の描画呼び出しに対して無効になる可能性のある他の例には、線、および描画呼び出しにおけるすべての頂点が可視となることが分かっている場合がある。
【0030】
ローカルメモリは、ジオメトリパイプ内の破棄ロジックおよびピクセルをレンダリングするためのピクセルパイプの両方によって参照される頂点のシェーディング属性を記録するために使用される。前述のように、頂点は、位置、法線、色、テクスチャ座標などの任意の数の属性を有することができる。これらの属性は、頂点シェーダの助けによりシェーディングされ、その結果は、後に参照するために、ローカルメモリに記録される。記録された情報は、不要になったときにはいつでも、例えば、三角形がカリングロジックによって破棄されるか、または所与の三角形に対するすべてのピクセルがレンダリングされた場合に、逆参照される。このローカルメモリは、頂点に割り当てられたレジスタのフリーリストとすることができ、次いで、最終的に、必要ではない場合はプールに戻すことができる。
【0031】
カルパイプの場合、ローカルメモリは、頂点の位置を計算するのに必要な属性を記録する。さらに、これらのローカルメモリレジスタの寿命は、すべての三角形がカルパイプの終端で破棄されるため、ベースモデルと比較して短い。しかしながら、ローカルメモリの容量は、アーキテクチャの性能に依然として影響を与える可能性がある。理想的な容量は、位置シェーダの実行待ち時間の関数であり、これは、位置シェーダに存在する動的命令の数に左右されるだけでなく、ピクセルシェーダや、リプレイパイプから出るシェーダなどの他のリソースによる計算クラスタの需要にも左右される。したがって、カルパイプが不適切なサイズである場合、これは、カルパイプの前方進行を、したがって、全体の性能を妨げる可能性がある。
【0032】
カルパイプは、いくつかの実施形態において、64KB相当のローカルメモリを使用して、適切にストリーミングすることができる。
【0033】
このアーキテクチャは、破棄されたオブジェクトに対する位置属性のみを取り出してシェーディングし、次いで、それらをスキップすることによって、長期実行カルシーケンスを許容することができる。第1の態様は、作業量を減らすが、一方、第2の態様は、フレームをレンダリングする時間を減らしたので、システムのエネルギーフットプリントを減らすのに役立つ。
【0034】
さらに、いくつかの実施形態において、位置限定シェーディングを無効にすることができる。例えば、描画呼び出しは、位置限定シェーディングを使用しないことを指示することができる。これにより、メモリ帯域幅、計算サイクル、および/または時間を節約することができる。したがって、本システムは、例えば、描画呼び出しベースによる描画呼び出しで、位置限定シェーディングを選択的に無効にし、次いで、有効にすることができる。
【0035】
位置限定シェーディングを無効にする場合、リプレイパイプラインは、その描画呼び出しに対する任意のビット毎情報を検索せず、描画呼び出し全体に対する可視情報も存在しない。
【0036】
カリング技術は、グラフィックプロセッサの性能を向上させることができる。標準技術は、バックフェースカリング、視錐台カリング、Z−maxオクルージョンカリング、およびオクルージョンクエリを含む。通常は、カリング技術は、例えば、(グラフィックにおける視錐台とも呼ばれる)視野の充分外にある三角形を破棄することによって、画像をレンダリングするために行われる不要な作業の量を減らす。カリングテストのグラフィクパイプラインの実行を早くすることができれば、データを早期にパイプライン内で破棄することができるので、コストをさらに減らすことができる。Zmaxオクルージョンカリングは、位置限定シェーディング(POS)パイプラインを使用して早期に実行することができる。
【0037】
保存的深度表現は、カルパイプにおいて(一実施形態においてピクセルの矩形領域を表すことができる)タイル毎に記録される。その場合、カルパイプを通るすべての三角形に対して、三角形が保存的深度表現に対して完全に塞がれているかどうかをテストすることができる。三角形が塞がれる場合、カリングされ、リプレイパイプまで残らないであろう。これにより、一部の作業における省電力および/または性能向上がもたらされる。
【0038】
オクルージョンカリングを行うことができるようにするために、グラフィックプロセッサは、何らかの種類のオクルージョン表現を有する必要がある。この情報は、ピクセル毎の深度とすることができるが、保管コストを減らすために、粗くて控えめな表現を有するのが理にかなっているだろう。表現の種類の一つは、タイル毎に、最大深度(Zmax)および最小深度(Zmin)スカラ値を格納することである。Zmaxは、タイル内の最大深度以上であり、Zminは、タイル内の最小深度以下である。したがって、三角形が単一タイルの内側に完全に存在し、例えば、三角形の深度がタイルのZmaxより大きい場合、その三角形は、すでにレンダリングされたジオメトリによって塞がれ、したがって、その三角形は、安全にカリングすることができる。Zminは、深度テストが逆転された場合に有効である(例えば、OpenGL深度関数:GREATERまたはGEQUAL)。各タイルは、深度表現を有することができ、この深度表現を実現する方法の1つは、上記のように、ZminおよびZmaxを使用することである。
【0039】
図4は、オクルージョンカリング84をも含むように修正されたPOSパイプライン82である。単純なカリング(バックフェース、ディジェネレート、およびゼロカバレッジ)テストおよび視錐台カリング86技術は、一般に、オクルージョンカリングより多くの三角形をカリングするため、オクルージョンカリング84は、視錐台および単純カリングテスト86の後に配置される。そのため、(視錐台カリングおよび単純カリングの後に)残った三角形に対し、タイルの深度表現に対する三角形オクルージョンテストが行われる。三角形が塞がれると、リプレイパイプでは処理されない。三角形が完全には塞がれていない場合、三角形は、タイルの深度表現を潜在的にアップデートすることができるオクルージョン情報を生成することができる。(位置限定シェーダ82の上部に三角形で示される)入力三角形のいくつかは、ブロック90の下の三角形上に×で示されるようにカリングすることができる。
【0040】
オクルージョンアルゴリズムは、一度に1つのタイルで動作することができる。カルパイプは、三角形が重なるすべてのタイルを識別する粗いラスタライザを含むことができる。さらに、ラスタライザは、各タイル内の三角形の最小深度値および最大深度値の保存的境界を計算することができる。これらの境界は、Z
trimin、Z
trimaxと呼ばれる。タイルが三角形と重なると識別された場合、オクルージョンカリングアルゴリズムの1つに渡される。
【0041】
この実装態様では、単一のZ
tilemin、Z
tilemaxペアが、タイル毎に格納される。いくつかの実施形態において、8×8ピクセルタイルは、カリング効率と帯域幅との間に良好なトレードオフをもたらすが、タイルは、任意の形状およびサイズとすることができる。画面上のすべてのタイルに対してZ
tilemin、Z
tilemax値を含むバッファは、早期HiZバッファ、またはeHiZバッファ88と称され、現代のグラフィックプロセッサにおいて標準的なHiZバッファと区別される。残りの三角形は、ブロック90で示されるように、ビット毎に格納される。その場合、リプレイパイプでは、完全頂点シェーダが、残りの三角形に対して実行され(ブロック92)、その後に、パイプの残りの部分94が続く、すなわち、リプレイパイプラインは、本稿で上記したように動作する。
【0042】
LESS深度テストに関するアルゴリズムに関連して記述することができるが、任意の形式のテストに一般化する。アルゴリズムは、eHiZバッファ内の三角形とタイルとの間で標準保存的カリングテストを実行することによって開始され、Z
trimin>Z
tilemaxである場合に、三角形をカリングすることができる。したがって、三角形が重なるすべてのタイルが上記のテストに合格した(すなわち、三角形が、三角形と重なるすべてのタイルに対する深度表現の背後にある)場合にのみ、三角形全体をカリングすることができる。
【0043】
タイルがカリングされない場合、eHiZバッファは、保存的にアップデートされる。この場合、Zminは、Z
tilemin=min(Z
tilemin,Z
trimin)としてアップデートされる。Zmax値は、タイルが完全にカバーされる場合にのみアップデートすることができる。これは、ラスタライザにおける保存的タイル−三角形オーバラップを使用して、またはタイル内のすべてのサンプルに対する内部テストを実行することによって、判定することができる。タイルが三角形によって完全にカバーされる場合、Zmaxは、Z
tilemax=min(Z
tilemax,Z
trimax)としてアップデートされる。
【0044】
拡張として、Zmin/Zmax表現は、Zcullと呼ばれる単一基準値に減らすことができる。この場合、カリングテストを実行するのに必要な基準値(上記のLESSテスト例では、Zmax)のみが維持される。深度テスト機能が、例えば、LESSからGREATERテストに極性を変える場合、Zcull値は、遅れてクリアされて、テストが常に保存的であることを確実にする。したがって、現在のZcull値がZminまたはZmax値を表すかどうかを示す、タイル毎に1ビットが格納される。
【0045】
オクルージョンカリングアルゴリズムの別の可能な実装態様は、Zmaxマスク表現を使用することである。この表現は、1つだけではなく、各タイルに対するZ
tilemax値のセットを格納することができる。インデックスビットのマスクは、Z
tilemax値のいずれがタイル内の各ピクセルまたはサンプルに適用されるかを選択する。保存的深度テストが実行され、タイル内に入ってくる三角形をカリングすることができない場合、Z
trimaxおよびZ
trimin値を使用して、マスクされた深度表現をアップデートする。しかしながら、マスクされた表現は、典型的に、最小値に対して有益ではなく、したがって、インデックスビットマスクによってアドレス指定されるのではなく、固定されたスクリーン空間領域に結びつけられる。
【0046】
実際には、タイル毎に2つのZ
tilemax値が、保管コストおよびカリング効率との間で最良のトレードオフをもたらす。タイル毎にZ
tilemin値を保持することは、いくつかの作業負荷に対して有益である可能性があるが、片側テストは、典型的に、カリング可能性のほとんどを取得するのに充分である。
【0047】
インデックスビットのマスクは、典型的に、コヒーレントであり、したがって、ほとんどの場合、タイルに対するメモリフットプリントを減らすよう圧縮することができる。任意のビットマスク圧縮アルゴリズムを使用することができるが、1つのアルゴリズムは、領域が一定であるかどうかを示すためにビットを使用して各4×2または2×4領域を格納し、次いで、一定領域に対しては単一ビット、または領域が一定でない場合には8ビットを使用することができる。タイルが所望のビット配分に圧縮できない場合、非可逆圧縮を使用することができる。一実装態様において、Z
tilemax値が常に格納され、Z
tilemax0>Z
tilemax1であることを保証する。したがって、1からゼロにインデックスマスク内のビットが変化することは常に安全である(ピクセルまたはサンプルを効率的にプッシュするが、依然として、保存的である)。所望のビット配分が満たされる場合、最小数のセットビットを有する4×2/2×4領域を選択することができ、領域全体がゼロにクリアされる。次いで、ビット配分が満たされるまで、第2の最小セットビットを有する領域でフローが継続する。
【0048】
ピクセルシェーディングは、グラフィックパイプラインの全体の最も高価な部品の一つであり続け、実行ユニット(EU)(シェーダコアと呼ばれることもある)の圧力を減らすことが、性能を向上させ、より重要なことに、電力使用も減らすので、極めて重要である。
【0049】
カルパイプでは、シーンの深度表現が記録され、この深度表現は、次いで、リプレイパイプラインのHiZバッファをプライムするために使用される。このようにして、いくつかの三角形のピクセルシェーダ動作は、「将来の」(他の)三角形の深度を使用してカリングすることができる。
【0050】
早期HiZバッファまたはeHiZ88と呼ばれる深度表現は、
図5に示すようなカルパイプに記録される。この表現には、多くの異なる選択がある。カルパイプは、まず、位置限定シェーダを行い、それに続いて、標準カリングテストを行う。残った三角形に対して、深度表現が生成され、場合によっては、eHiZバッファにアップデートを送信する。ほとんどのグラフィックプロセッサでは、深度に基づいてラスタライズされたタイルを迅速にカリングするHiZユニットが存在する。このパイプラインでは、HiZユニット96は、リプレイパイプの内側にある。リプレイパイプがレンダーコマンドの処理を開始する前に、HiZバッファは、eHiZバッファ88内の深度表現を用いてプライムされる。この情報は、eHiZフォーマットから、HiZのフォーマットに変換することができるが、理想的には、ユニットは、互換性のあるフォーマットを使用して、変換ステップを排除する。プライミングが生じた後、すべての非カリング三角形は、リプレイパイプラインで修正されずに処理され、カリングは、HiZ内のすでに開始された情報に基づいて実行される。
【0051】
図4および
図5のシーケンスは、ソフトウェア、ファームウェア、および/またはハードウェアで実装することができる。ソフトウェアおよびファームウェア実施形態において、磁気、光学、または半導体ストレージなどの、1つまたは複数の非一時的コンピュータ可読可能媒体に格納されるコンピュータ実行命令によって実装することができる。
【0052】
HiZバッファは、(そのレンダーターゲットに対して次のレンダーコマンドストリームの全体、または少なくとも一部を使用してすでに生成された)eHiZバッファで初期化されるので、閉塞領域は、閉塞ジオメトリが、閉塞するジオメトリの後にサブミットされた場合でもカリングされる。したがって、より多くのピクセルシェーダ動作を回避することができ、いくつかの実施形態において、全体的な性能が向上する。
【0053】
ピクセルシェーダ命令は減らすことができ、いくつかの実施形態において、ピクセルシェーダカリングは、テクスチャ、深度バッファ、および色バッファ帯域幅をカリングに起因してさらに減らすことができる。
【0054】
このピクセルシェーダオクルージョンカリングアルゴリズムがオクルージョンカリングへの拡張であるので、同じeHiZデータレイアウトおよびカリングアルゴリズムを、いくつかの実施形態において、使用することができる。
【0055】
完全なサンプル毎の深度バッファ表現を、eHiZバッファとして維持することができる。Zmaxマスクは、カリング効率と帯域幅との間の最良トレードオフをもたらすことができるが、サンプル毎の深度アルゴリズムを、いくつかの実施形態において、使用することができる。
【0056】
サンプル毎の深度は、カルパイプラインに完全深度バッファロジックを追加することによって実装され、深度バッファ値は、サンプル毎にアップデートされる。しかしながら、重要な違いは、ピクセルシェーダがパイプラインで実行されず、したがって、深度値が、奨励されていない深度が使用された場合に、eHiZバッファでアップデートされないことである。奨励されていない深度は、ピクセルシェーダが実行される前に深度テストを行うことができない場合のものである。これは、例えば、ピクセルシェーダがサンプル毎に深度値を計算する場合のものである。このことは、eHiZバッファ内の値が、実際に、そのサンプルに対して、Z
minまたはZ
maxのいずれかの境界であり、不可視ジオメトリの誤ったカリングを回避することができる、ということを意味する。これは、EQUAL深度テストが、奨励されていない深度と組み合わされて使用される場合に見られる。
【0057】
一例として、第1のパスで枝葉がレンダリングされ、ピクセルシェーダが破棄されると仮定する。ピクセルシェーダは断片を破棄するので、奨励されていない深度、およびeHiZバッファをアップデートすることができないことを予測することができる。しかしながら、後続のパスがEQUALテストを使用してライティングをレンダリングする場合、eHiZバッファが前のパスでアップデートされなかったため、正確に等しいテストを実行することはできない。eHiZサンプルの深度値がZminまたはZmaxを追跡し、どの値がeHiZバッファに格納されているかに応じて、z≦Z
maxまたはz≧Z
minとして保存的EQUALテストを定義した場合、正確に等しいテストを実行することの不可能性が緩和される可能性がある。サンプルの深度値が、Z
minまたはZ
maxを追跡するかどうかは、アップデートするために使用される深度関数の方向に依存する。例えば、LESS関数は、サンプルの深度がZ
max値を表すことを意味する。
【0058】
HiZバッファのプライミングは、すべてのサブミットされたレンダーコマンドの出力(または、結果)が影響を受けていない場合のみ可能である。いくつかの実施形態において、行われる最も注目すべき仮定は、Zバッファ内の値が、単調に増加または減少しなければならないことである。そうではない場合、Zバッファの最終段階は、カリングを表すものではない。さらに、ピクセルシェーダを実行するのに何らの副次的効果もないと仮定する。これは、アンオーダード・アクセス・ビュー(unordered access view、UAV)アクセス、ピクセルシェーダからの出力深度、ピクセルシェーダの破棄、およびステンシル演算(stencil operation)を含む。以下は、条件のリスト、および一実装態様において、それらの条件がどのように処理されるかを示す。
1.深度テストフリップ:深度関数が反転された場合(LESS→GREATERまたはGREATER→LESS)、HiZバッファは、一実施形態において、プライムされない。これは、フリップされた深度テストが、実際に、深度書き込みを有効にした場合にのみ真となる。
2.ピクセルシェーダ破棄/αテスト:これらの場合、eHiZバッファはアップデートされない。というのも、カルパイプライン内の有効範囲/深度の完全な評価が実行可能ではないためである。しかしながら、既存のジオメトリに対してカリングを行うことができ、両面eHiZフォーマットを使用した場合、境界を保存的にアップデートすることができる。例えば、LESS関数テストを使用した場合、Z
minではなくZ
maxがアップデートされる可能性がある。
3.アルファブレンディング:アルファブレンディングが有効である場合、アルファブレンディング演算に含まれるジオメトリをプライミングが誤ってカリングする可能性があるため、eHiZバッファはアップデートされない。しかしながら、アルファブレンディングされたジオメトリは、eHiZバッファのコンテンツに対してカリングされる可能性がある。
4.ピクセルシェーダ書き込み深度:保存的深度出力が使用される場合、eHiZバッファがアップデートされるか、または(保存的深度が深度関数と同じ「方向」を有しているかどうかにより)カリングをプリミティブに対して実行することができる。しかしながら、一般的な場合、カリング、またはeHiZバッファのアップデートのどちらも実行されない可能性がある。
5.複数クリア:複数クリアまたはZバッファ再利用が、プライミングを無効にすることによって、またはバッファがクリアされる前にリプレイパイプラインに各クリアの間で発行されたコマンドを実行させることによって、処理することができる。この解決策に関連するパイプラインストーリングは、Zバッファの仮想コピーを作成することによって対処することができる。
6.バッファ切り替え:色バッファ、または他の任意の出力バッファが、深度バッファをクリアすることなく切り替えられた場合、続行前に、リプレイパイプライン内のすべてのコマンドが実行される可能性があり、または代替的にプライミングが無効となる可能性がある。
7.ピクセルシェーダUAV:任意のピクセルシェーダがUAVに書き込む場合、プライミングは使用されない。これは、UAV書き込みを誤ってカリングする可能性があるためである。
【0059】
図6は、一実施形態によるデータ処理システム100のブロック図である。データ処理システム100は、1つまたは複数のプロセッサ102と、1つまたは複数のグラフィックプロセッサ108とを含み、単一プロセッサ・デスクトップ・システム、マルチプロセッサ・ワークステーション・システム、または多数のプロセッサ102もしくはプロセッサコア107を有するサーバシステムとすることができる。一実施形態において、データ処理システム100は、モバイル、ハンドヘルド、または埋込デバイスで使用するための、システムオンチップ集積回路(SOC)である。
【0060】
データ処理システム100の一実施形態は、サーバベースのゲーミングプラットフォーム、ゲームおよびメディアコンソールを含むゲームコンソール、モバイル・ゲーミング・コンソール、ハンドヘルド・ゲーム・コンソール、またはオンライン・ゲーム・コンソールを含むか、あるいはそれらに組み込むことができる。一実施形態において、データ処理システム100は、携帯電話、スマートフォン、タブレット・コンピューティング・デバイス、またはモバイル・インターネット・デバイスである。データ処理システム100はまた、スマート・ウォッチ・ウェアラブル・デバイス、スマート・アイウェア・デバイス、拡張現実デバイス、または仮想現実デバイスなどの、ウェアラブルデバイスを含むか、それらと結合するか、またはそれらに組み込むことができる。一実施形態において、データ処理システム100は、1つまたは複数のプロセッサ102と、1つまたは複数のグラフィックプロセッサ108によって生成されるグラフィカルインターフェースとを有する、テレビまたはセットトップボックスである。
【0061】
1つまたは複数のプロセッサ102は、それぞれ、1つまたは複数のプロセッサコア107を含み、実行された場合に、システムおよびユーザソフトウェアに対する動作を実行する命令を処理する。一実施形態において、1つまたは複数のプロセッサコア107のそれぞれが、特定命令セット109を処理するよう構成される。命令セット109は、複合命令セットコンピューティング(CISC)、縮小命令セットコンピューティング(RISC)、または超長命令語(VLIW)を介したコンピューティングを容易にすることができる。複数のプロセッサコア107は、それぞれ、他の命令セットのエミュレーションを容易にするための命令を含むことができる異なる命令セット109を処理することができる。プロセッサコア107はまた、デジタル信号プロセッサ(DSP)などの他の処理デバイスを含んでもよい。
【0062】
一実施形態において、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャにより、プロセッサ102は、単一の内部キャッシュまたはマルチレベルの内部キャッシュを有することができる。一実施形態において、キャッシュメモリは、プロセッサ102のさまざまな構成要素の間で共有される。一実施形態において、プロセッサ102はまた、既知のキャッシュコヒーレンシ技術を使用してプロセッサコア107の間で共有することができる、外部キャッシュ(例えば、レベル3(L3)キャッシュまたは最終レベルキャッシュ(LLC))(図示せず)を使用する。レジスタファイル106は、プロセッサ102に追加的に含まれ、さまざまな種類のデータを格納するためにさまざまな種類のレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、および命令ポインタレジスタ)を含むことができる。いくつかのレジスタは、汎用レジスタとすることができ、他のレジスタは、プロセッサ102の設計に固有のものにすることができる。
【0063】
プロセッサ102は、プロセッサバス110に結合され、プロセッサ102と、システム100内の他の構成要素との間で、データ信号を送信する。システム100は、メモリ・コントローラ・ハブ116および入出力(I/O)コントローラハブ130を含む、例示的「ハブ」システムアーキテクチャを使用する。メモリ・コントローラ・ハブ116は、メモリデバイスと、システム100の他の構成要素との間の通信を容易にし、一方、I/Oコントローラハブ(ICH)130は、ローカルI/Oバスを介してI/Oデバイスへの接続をもたらす。
【0064】
メモリデバイス120は、ダイナミック・ランダム・アクセス・メモリ(DRAM)デバイス、スタティック・ランダム・アクセス・メモリ(SRAM)デバイス、フラッシュ・メモリ・デバイス、または処理メモリとして動作するための適切な性能を有する何らかの他のメモリデバイスとすることができる。メモリ120は、プロセッサ102が処理を実行する場合に使用するための、データ122および命令121を格納することができる。メモリ・コントローラ・ハブ116はまた、オプションの外部グラフィックプロセッサ112と結合し、プロセッサ102内の1つまたは複数のグラフィックプロセッサ108と通信して、グラフィックおよびメディア動作を実行することができる。
【0065】
ICH130は、周辺機器がメモリ120およびプロセッサ102に、高速I/Oバスを介して接続することを可能にする。I/O周辺機器は、オーディオコントローラ146、ファームウェアインターフェース128、無線トランシーバ126(例えば、Wi−Fi、Bluetooth(登録商標))、データ・ストレージ・デバイス124(例えば、ハードディスクドライブ、フラッシュメモリなど)、およびレガシー(例えば、パーソナルシステム2(PS/2))デバイスをシステムに接続するためのレガシーI/Oコントローラを含む。1つまたは複数のユニバーサル・シリアル・バス(USB)コントローラ142が、キーボードおよびマウス144の組み合わせなどの入力デバイスを接続する。ネットワークコントローラ134もまた、ICH130に接続することができる。一実施形態において、高性能ネットワークコントローラ(図示せず)が、プロセッサバス110に接続する。
【0066】
図7は、1つまたは複数のコア202A〜N、統合メモリコントローラ214、および統合グラフィックプロセッサ208を有するプロセッサ200の一実施形態のブロック図である。プロセッサ200は、点線のボックスで示される追加コア202Nまでの、追加コア202Nを含む、追加コアを含むことができる。コア202A〜Nのそれぞれは、1つまたは複数の内部キャッシュユニット204A〜Nを含む。一実施形態において、各コアは、1つまたは複数の共有キャッシュユニット206へのアクセス権を有する。
【0067】
内部キャッシュユニット204A〜Nおよび共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも1つのレベルの命令およびデータキャッシュか、レベル2(L2)、レベル3(L3)、レベル4(L4)などの1つまたは複数のレベルの共有中間レベルキャッシュか、または他のレベルのキャッシュを含むことができ、外部メモリの前の最高レベルのキャッシュは、最終レベルキャッシュ(LLC)と分類される。一実施形態において、キャッシュ・コヒーレンシ・ロジックは、さまざまなキャッシュユニット206および204A〜Nの間のコヒーレンシを維持する。
【0068】
プロセッサ200はまた、1つまたは複数のバス・コントローラ・ユニット216のセットとシステムエージェント210とを含むことができる。1つまたは複数のバス・コントローラ・ユニットは、1つまたは複数の周辺構成機器相互接続バス(例えば、PCI、PCI Express)などの、周辺機器用バスのセットを管理する。システムエージェント210は、さまざまなプロセッサ構成要素に対する管理機能をもたらす。一実施形態において、システムエージェント210は、さまざまな外部メモリデバイス(図示せず)へのアクセスを管理するための1つまたは複数の統合メモリコントローラ214を含む。
【0069】
一実施形態において、コア202A〜Nの1つまたは複数は、同時マルチスレッディングに対するサポートを含む。そのような実施形態において、システムエージェント210は、マルチスレッド処理の間、コア202A〜Nを調整し、動作させるための構成要素を含む。システムエージェント210は、電力コントロールユニット(PCU)をさらに含むことができ、PCUは、コア202A〜Nの間およびグラフィックプロセッサ208の電力状態を管理するためのロジックおよび構成要素を含む。
【0070】
プロセッサ200は、グラフィック処理演算を実行するためのグラフィックプロセッサ208をさらに含む。一実施形態において、グラフィックプロセッサ208は、共有キャッシュユニット206のセットと、1つまたは複数の統合メモリコントローラ214を含むシステムエージェント210と結合する。一実施形態において、ディスプレイコントローラ211は、グラフィックプロセッサ208に接続され、グラフィックプロセッサの出力が1つまたは複数の接続されたディスプレイに送られる。ディスプレイコントローラ211は、少なくとも1つの相互接続を介してグラフィックプロセッサと結合する別々のモジュールとすることができ、またはグラフィックプロセッサ208もしくはシステムエージェント210内に統合することができる。
【0071】
一実施形態において、リングベース相互接続ユニット212を使用して、プロセッサ200の内部構成要素を接続するが、ポイント・ツー・ポイント相互接続、スイッチ相互接続、または当分野で既知の技術を含む他の技術などの、代替相互接続ユニットを使用してもよい。一実施形態において、グラフィックプロセッサ208は、I/Oリンク213を介して、リング相互接続212と接続する。
【0072】
例示的I/Oリンク213は、さまざまなプロセッサ構成要素と、eDRAMなどの高性能埋込メモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続を含む、さまざまな種類のI/O相互接続の少なくとも1つを表す。一実施形態において、コア202−Nのそれぞれおよびグラフィックプロセッサ208は、共有最終レベルキャッシュとして埋込メモリモジュール218を使用する。
【0073】
一実施形態において、コア202A〜Nは、同じ命令セットアーキテクチャを実行する同質コアである。別の実施形態において、コア202A〜Nは、命令セットアーキテクチャ(ISA)の点から異質であり、コア202A〜Nの間の1つまたは複数は、第1の命令セットを実行し、一方、他のコアの少なくとも1つは、第1の命令セットのサブセットまたは異なる命令セットを実行する。
【0074】
プロセッサ200は、例えば、相補型金属酸化物半導体(CMOS)、バイポーラ接合/相補型金属酸化膜半導体(BiCMOS)、またはN型金属酸化膜半導体論理(NMOS)などの、いくつかの処理技術を使用して、1つもしくは複数の基板の一部、または1つもしくは複数の基板上に実装することができる。さらに、プロセッサ200は、1つもしくは複数のチップ上に実現することができ、または他の構成要素に加えて、図示した構成要素を有するシステムオンチップ(SOC)集積回路として実現することができる。
【0075】
図8は、離散型グラフィック処理装置とすることができるか、または複数の処理コアと統合されたグラフィックプロセッサとすることができる、グラフィックプロセッサ300の一実施形態のブロック図である。一実施形態において、グラフィックプロセッサは、メモリマップI/Oインターフェースを介して、グラフィックプロセッサ上のレジスタと、プロセッサメモリに配置されたコマンドを介して通信する。グラフィックプロセッサ300は、メモリにアクセスするためのメモリインターフェース314を含む。メモリインターフェース314は、ローカルメモリ、1つまたは複数の内部キャッシュ、1つまたは複数の共有外部キャッシュ、および/またはシステムメモリへのインターフェースとすることができる。
【0076】
グラフィックプロセッサ300はまた、ディスプレイ出力データをディスプレイデバイス320に送るためのディスプレイコントローラ302を含む。ディスプレイコントローラ302は、ディスプレイに対する1つまたは複数のオーバーレイプレーンと、ビデオまたはユーザインターフェース要素の複数の層の合成のためのハードウェアを含む。一実施形態において、グラフィックプロセッサ300は、ビデオ・コーデック・エンジン306を含み、メディアを、1つまたは複数のメディア・エンコーディング・フォーマットに、そのようなフォーマットから、またはそのようなフォーマットの間で、エンコード、デコード、またはトランスコードし、そのようなフォーマットは、これらに限定されないが、MPEG−2などの動画専門家組織(MPEG)フォーマット、H.264/MPEG−4 AVCなどの高度動画像圧縮符号化(AVC)フォーマット、ならびに米国テレビ技術者協会(SMPTE)421M/VC−1、およびJPEGなどのジョイント・フォトグラフィック・エキスパート・グループ(JPEG)フォーマット、およびモーションJPEG(MJPEG)フォーマットなどを含む。
【0077】
一実施形態において、グラフィックプロセッサ300は、例えば、ビット境界ブロック転送を含む2次元(2D)ラスタライザ動作を実行するブロック画像転送(BLIT)エンジン304を含む。しかしながら、一実施形態において、2Dグラフィック処理動作は、グラフィック処理エンジン(GPE)310の1つまたは複数の構成要素を使用して実行される。グラフィック処理エンジン310は、3次元(3D)グラフィック動作およびメディア動作を含むグラフィック動作を実行するための計算エンジンである。
【0078】
GPE310は、3Dプリミティブ形状(例えば、長方形、三角形など)に作用する処理機能を使用して三次元画像およびシーンをレンダリングするなどの3D動作を実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内でさまざまなタスクを実行する、および/または実行スレッドを3D/メディアサブシステム315に生成する、プログラマブル、固定機能要素を含む。3Dパイプライン312は、メディア演算を実行するために使用することができるが、GPE310の実施形態はまた、ビデオ後処理および画像強調などのメディア演算を実行するために特に使用されるメディアパイプライン316も含む。
【0079】
一実施形態において、メディアパイプライン316は、固定機能またはプログラマブル・ロジック・ユニットを含み、ビデオ・デコード・アクセラレーション、ビデオデインターレーシング、およびビデオ・エンコード・アクセラレーションなどの、ビデオ・コーデック・エンジン306の代わりに、またはビデオ・コーデック・エンジン306の代理として、1つまたは複数の専門メディア演算を実行する。一実施形態において、メディアパイプライン316は、3D/メディアサブシステム315で実行するためのスレッドを生成するためのスレッド生成ユニットをさらに含む。生成されたスレッドは、3D/メディアサブシステムに含まれる1つまたは複数のグラフィック実行ユニットでのメディア演算のための計算を実行する。
【0080】
3D/メディアサブシステム315は、3Dパイプライン312およびメディアパイプライン316によって生成されるスレッドを実行するためのロジックを含む。一実施形態において、パイプラインは、スレッド実行要求を、3D/メディアサブシステム315に送信する。ここで、3D/メディアサブシステム315は、さまざまな要求を調停して、利用可能なスレッド実行リソースにディスパッチするためのスレッド・ディスパッチ・ロジックを含む。実行リソースは、グラフィック実行ユニットのアレイを含み、3Dおよびメディアスレッドを処理する。一実施形態において、3D/メディアサブシステム315は、スレッド命令およびデータ用の1つまたは複数の内部キャッシュを含む。一実施形態において、本サブシステムはまた、レジスタおよびアドレス可能メモリを含む共有メモリを含み、スレッド間のデータを共有し、出力データを格納する。
【0081】
図9は、グラフィックプロセッサ用のグラフィック処理エンジン410の一実施形態のブロック図である。一実施形態において、グラフィック処理エンジン(GPE)410は、
図8に示したGPE310の一バージョンである。GPE410は、3Dパイプライン412とメディアパイプライン416とを含み、そのそれぞれが、
図8の3Dパイプライン312とメディアパイプライン316との実装態様と違うものとすることができ、または同じものとすることができる。
【0082】
一実施形態において、GPE410は、コマンドストリーマ403と結合する。ここで、コマンドストリーマ403は、コマンドストリームを、GPE 3Dおよびメディアパイプライン412、416にもたらす。コマンドストリーマ403は、システムメモリとすることができるメモリ、または内部キャッシュメモリおよび共有キャッシュメモリの1つまたは複数に結合される。コマンドストリーマ403は、コマンドをメモリから受信し、そのコマンドを、3Dパイプライン412および/またはメディアパイプライン416に送信する。3Dおよびメディアパイプラインは、各パイプライン内のロジックを介して演算を実行することによって、または1つもしくは複数の実行スレッドを実行ユニットアレイ414にディスパッチすることによって、コマンドを処理する。一実施形態において、実行ユニットアレイ414は、スケーラブルであり、アレイは、GPE410の目標電力および性能レベルに基づく可変数の実行ユニットを含む。
【0083】
サンプリングエンジン430は、メモリ(例えば、キャッシュメモリまたはシステムメモリ)および実行ユニットアレイ414と結合する。一実施形態において、サンプリングエンジン430は、実行アレイ414が、グラフィックおよびメディアデータをメモリから読み込むことを可能にするスケーラブル実行ユニットアレイ414に対するメモリ・アクセス・メカニズムをもたらす。一実施形態において、サンプリングエンジン430は、メディアに対して特殊な画像サンプリング演算を実行するためのロジックを含む。
【0084】
サンプリングエンジン430内の特殊なメディアサンプリングロジックは、デノイズ/デインターレースモジュール432、動き推定モジュール434、ならびに画像スケーリングおよびフィルタリングモジュール436を含む。デノイズ/デインターレースモジュール432は、デコードされたビデオデータ上で、デノイズまたはデインターレースアルゴリズムの1つまたは複数を実行するためのロジックを含む。デインターレースロジックは、インターレース・ビデオ・コンテンツの交番フィールドを、ビデオの単一フレームに結合する。デノイズロジックは、データノイズをビデオおよび画像データから減らすか、または除去する。一実施形態において、デノイズロジックおよびデインターレースロジックは、モーションアダプティブであり、ビデオデータで検出された動きの量に基づいて空間的または時間的フィルタリングを使用する。一実施形態において、デノイズ/デインターレースモジュール432は、(例えば、動き推定エンジン434内に)専用の動き検出ロジックを含む。
【0085】
動き推定エンジン434は、ビデオデータ上で動きベクトル推定および予測などのビデオアクセラレーション機能を実行することによりビデオ演算のためのハードウェアアクセラレーションをもたらす。動き推定エンジンは、連続ビデオフレームの間の画像データの変換を描写する動きベクトルを判定する。一実施形態において、グラフィック・プロセッサ・メディア・コーデックは、ビデオ動き推定エンジン434を使用して、普通なら、汎用プロセッサを用いて実行するための計算集約的である可能性がある、マイクロ・ブロック・レベルでビデオでの演算を実行する。一実施形態において、動き推定エンジン434は、ビデオデコード、およびビデオデータ内の動きの方向または大きさに敏感または適応する処理機能を補助するために、グラフィックプロセッサ構成要素のために一般に利用可能である。
【0086】
画像スケーリングおよびフィルタリングモジュール436は、画像処理演算を実行し、生成された画像およびビデオの視覚的品質を向上させる。一実施形態において、スケーリングおよびフィルタリングモジュール436は、データを実行ユニットアレイ414にもたらす前に、サンプリング演算の間に、画像およびビデオを処理する。
【0087】
一実施形態において、グラフィック処理エンジン410は、グラフィックサブシステムがメモリにアクセスするための追加メカニズムを提供する、データポート444を含む。データポート444は、レンダーターゲット書き込み、一定バッファ読み込み、スクラッチ・メモリ・スペース読み込み/書き込み、およびメディア・サーフェス・アクセスを含む動作に対するメモリアクセスを容易にする。一実施形態において、データポート444は、メモリへのアクセスをキャッシュするためのキャッシュ・メモリ・スペースを含む。キャッシュメモリは、単一データキャッシュとすることができ、またはデータポートを介してメモリにアクセスする複数のサブシステムのために複数のキャッシュ(例えば、レンダー・バッファ・キャッシュ、定数バッファキャッシュなど)に分けることができる。一実施形態において、実行ユニットアレイ414内の実行ユニットで実行されるスレッドは、グラフィック処理エンジン410のサブシステムのそれぞれと結合するデータ配信相互接続を介してメッセージを交換することによって、データポートと通信する。
【0088】
図10は、グラフィックプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックプロセッサは、リング相互接続502、パイプラインフロントエンド504、メディアエンジン537、およびグラフィックコア580A〜Nを含む。リング相互接続502は、グラフィックプロセッサを、他のグラフィックプロセッサまたは1つもしくは複数の汎用プロセッサコアを含む、他の処理ユニットに結合する。一実施形態において、グラフィックプロセッサは、マルチコア処理システム内で統合された多くのプロセッサの1つである。
【0089】
グラフィックプロセッサは、リング相互接続502を介してコマンドのバッチを受信する。入力コマンドは、パイプラインフロントエンド504内のコマンドストリーマ503によって解釈される。グラフィックプロセッサは、スケーラブル実行ロジックを含み、3Dジオメトリ処理およびメディア処理を、グラフィックコア580A〜Nを介して実行する。3Dジオメトリ処理コマンドのために、コマンドストリーマ503は、コマンドをジオメトリパイプライン536に供給する。少なくともいくつかのメディア処理コマンドに対し、コマンドストリーマ503は、メディアエンジン537と結合しているビデオフロントエンド534にコマンドを供給する。メディアエンジン537は、ビデオおよび画像を後処理するためのビデオ品質エンジン(VQE)530と、ハードウェア加速メディア・データ・エンコードおよびデコードをもたらすためのマルチ・フォーマット・エンコード/デコード(MFX)533エンジンとを含む。ジオメトリパイプライン536およびメディアエンジン537は、それぞれ、少なくとも1つのグラフィックコア580Aによってもたらされるスレッド実行リソースに対する実行スレッドを生成する。
【0090】
グラフィックプロセッサは、モジュラコア580A〜N(コアスライスと称することもある)を特徴とする、スケーラブルスレッド実行リソースを含み、モジュラコア580A〜Nは、それぞれ、複数のサブコア550A〜N、560A〜N(コアサブスライスと称することもある)を有する。グラフィックプロセッサは、任意の数のグラフィックコア580A〜580Nを有することができる。一実施形態において、グラフィックプロセッサは、少なくとも第1のサブコア550Aと第2のコアサブコア560Aとを有するグラフィックコア580Aを含む。他の実施形態において、グラフィックプロセッサは、単一のサブコア(例えば、550A)を有する低電力プロセッサである。一実施形態において、グラフィックプロセッサは、複数のグラフィックコア580A〜Nを含み、複数のグラフィックコア580A〜Nはそれぞれ、第1のサブコア550A〜Nのセットと、第2のサブコア560A〜Nのセットとを含む。第1のサブコア550A〜Nのセット内の各サブコアは、実行ユニット552A〜Nおよびメディア/テクスチャサンプラ554A〜Nの少なくとも第1のセットを含む。第2のサブコア560A〜Nのセット内の各サブコアは、実行ユニット562A〜Nおよびサンプラ564A〜Nの少なくとも第2のセットを含む。一実施形態において、各サブコア550A〜N、560A〜Nは、共有リソース570A〜Nのセットを共有する。一実施形態において、共有リソースは、共有キャッシュメモリおよびピクセル演算ロジックを含む。グラフィックプロセッサのさまざまな実施形態には、他の共有リソースも含むことができる。
【0091】
図11は、グラフィック処理エンジンの一実施形態で使用される処理要素のアレイを含むスレッド実行ロジック600を示す。一実施形態において、スレッド実行ロジック600は、ピクセルシェーダ602、スレッドディスパッチャ604、命令キャッシュ606、複数の実行ユニット608A〜Nを含むスケーラブル実行ユニット、サンプラ610、データキャッシュ612、およびデータポート614を含む。一実施形態において、含まれる構成要素は、各構成要素にリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック600は、命令キャッシュ606、データポート614、サンプラ610、および実行ユニットアレイ608A〜Nの1つまたは複数を通る、システムメモリまたはキャッシュメモリなどのメモリへの1つまたは複数の接続を含む。一実施形態において、各実行ユニット(例えば、608A)は、複数の同時スレッドを実行して、各スレッドに対して並列に複数のデータ要素を実行することができる個別のベクトルプロセッサである。実行ユニットアレイ608A〜Nは、任意の数の個別の実行ユニットを含む。
【0092】
一実施形態において、実行ユニットアレイ608A〜Nは、「シェーダ」プログラムを実行するために主に使用される。一実施形態において、アレイ608A〜N内の実行ユニットは、多くの標準3Dグラフィックシェーダ命令に対するネイティブサポートを含む命令セットを実行し、グラフィックライブラリからのシェーダプログラム(例えば、Direct3DおよびOpenGL)が、最小トランザクションで実行される。実行ユニットは、頂点およびジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、および汎用処理(例えば、計算およびメディアシェーダ)をサポートする。
【0093】
実行ユニットアレイ608A〜N内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」、または命令に対するチャネルの数である。実行チャネルは、データ要素アクセス、マスキング、および命令内のフローコントロールのための論理的な実行単位である。チャネルの数は、特定のグラフィックプロセッサに対する物理的ALUまたはFPUの数とは無関係であってもよい。実行ユニット608A〜Nは、整数および浮動小数点データタイプをサポートする。
【0094】
実行ユニット命令セットは、単一命令複数データ(SIMD)命令を含む。さまざまなデータ要素をパック・データ・タイプとしてレジスタに格納することができ、実行ユニットは、要素のデータサイズに基づいてさまざまな要素を実行する。例えば、256ビット幅ベクトルで動作する場合、ベクトルの256ビットはレジスタに格納され、実行ユニットは、4つの別々の64ビットパックデータ要素(クワッドワード(QW)サイズデータ要素)、8つの別々の32ビットパックデータ要素(ダブルワード(DW)サイズデータ要素)、16の別々の16ビットパックデータ要素(ワード(W)サイズデータ要素)、または32の別々の8ビットデータ要素(バイト(B)サイズデータ要素)としてベクトルで動作する。しかしながら、さまざまなベクトル幅およびレジスタサイズが可能である。
【0095】
1つまたは複数の命令キャッシュ(例えば、606)が、実行ユニットに対するスレッド命令をキャッシュするため、スレッド実行ロジック600に含まれる。一実施形態において、1つまたは複数のデータキャッシュ(例えば、612)が、スレッド実行中にスレッドデータをキャッシュするために含まれる。サンプラ610は、3D演算のためのテクスチャサンプリング、およびメディア演算のためのメディアサンプリングを提供するために含まれる。一実施形態において、サンプラ610は、専門的なテクスチャまたはメディアサンプリング機能を含み、サンプリングされたデータを実行ユニットにもたらす前に、サンプリング処理中に、テクスチャまたはメディアデータを処理する。
【0096】
実行中、グラフィックおよびメディアパイプラインは、スレッド開始要求を、スレッド実行ロジック600に、スレッド生成およびディスパッチロジックを介して送信する。スレッド実行ロジック600は、グラフィックおよびメディアパイプラインからのスレッド開始要求を調停し、要求されたスレッドを1つまたは複数の実行ユニット608A〜N上でインスタンス化する、ローカルスレッドディスパッチャ604を含む。例えば、ジオメトリパイプライン(例えば、
図6の536)は、頂点処理、テッセレーション、またはジオメトリ処理スレッドをスレッド実行ロジック600にディスパッチする。スレッドディスパッチャ604はまた、実行中のシェーダプログラムからの実行時スレッド生成要求を処理することもできる。
【0097】
ジオメトリオブジェクトのグループが処理されてピクセルデータにラスタライズされると、ピクセルシェーダ602が呼び出されて、出力情報をさらに計算し、結果が出力面に書き込まれる(例えば、色バッファ、深度バッファ、ステンシルバッファなど)。一実施形態において、ピクセルシェーダ602は、ラスタライズされたオブジェクトにわたって補完されるさまざまな頂点属性の値を計算する。次いで、ピクセルシェーダ602は、API提供のピクセル・シェーダ・プログラムを実行する。ピクセル・シェーダ・プログラムを実行するために、ピクセルシェーダ602は、スレッドディスパッチャ604を介して実行ユニット(例えば、608A)にスレッドをディスパッチする。ピクセルシェーダ602は、サンプラ610内のテクスチャ・サンプリング・ロジックを使用して、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータおよび入力ジオメトリデータでの算術計算は、各ジオメトリフラグメントに対するピクセル色データを計算するか、またはさらなる処理から1つまたは複数のピクセルを破棄する。
【0098】
一実施形態において、データポート614は、スレッド実行ロジック600がグラフック処理出力パイプラインで処理するためにメモリに処理されたデータを出力するためのメモリアクセス機能を提供する。一実施形態において、データポート614は、1つまたは複数のキャッシュメモリ(例えば、データキャッシュ612)を含むか、またはそのようなキャッシュメモリに結合し、データポートを介してメモリアクセスするためのデータをキャッシュする。
【0099】
図12は、一実施形態によるグラフィックプロセッサ実行ユニット命令フォーマットを示すブロック図である。一実施形態において、グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線ボックスは、一般に実行ユニット命令に含まれる構成要素を示し、一方、破線は、オプションであるか、または命令のサブセットにのみ含まれる構成要素を含む。図示した命令フォーマットは、命令が処理されると命令デコードから生じるマイクロオペレーションとは対照的に、それらが実行ユニットに供給される命令であるという点で、マクロ命令である。
【0100】
一実施形態において、グラフィックプロセッサ実行ユニットは、128ビットフォーマット710で命令をネイティブにサポートする。選択された命令、命令オプション、およびオペランドの数に基づいて、いくつかの命令に対して、64ビットの圧縮された命令フォーマット730が利用可能である。ネイティブの128ビットフォーマット710は、すべての命令オプションへのアクセスを提供し、一方、いくつかのオプションおよび動作は、64ビットフォーマット730に制限される。64ビットフォーマット730で利用可能なネイティブ命令は、実施形態によって異なる。一実施形態において、命令は、インデックスフィールド713内のインデックス値のセットを使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブル出力を使用して、128ビットフォーマット710のネイティブ命令を再構成する。
【0101】
各フォーマットに対して、命令オペコード712は、実行ユニットが実行すべき動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって並列に各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素またはピクチャ要素を表す各色チャネルにわたって同時加算演算を実行する。デフォルトでは、実行ユニットは、各命令をオペランドのすべてのデータチャネルにわたって実行する。命令コントロールフィールド712は、チャネル選択(例えば、条件付き実行制御)およびデータチャネル・オーダー(例えば、スウィズル)などの特定の実行オプションに対する制御を可能にする。128ビット命令710の場合、実行サイズフィールド716は、並列に実行されるデータチャネルの数を制限する。実行サイズフィールド716は、64ビット圧縮命令フォーマット730で使用するために利用可能ではない。
【0102】
いくつかの実行ユニット命令は、2つのソースオペランド、src0 720、src1 722、および1つの宛先718を含む最大3つのオペランドを有する。一実施形態において、実行ユニットは、宛先のうちの1つが暗示されるデュアル宛先命令をサポートする。データ操作命令は、第3のソースオペランド(例えば、SRC2 724)を有することができ、命令オペコードJJ12は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される即(例えば、ハードコードされた)値とすることができる。
【0103】
一実施形態において、オペコード・ビット・フィールドに基づいて命令をグループ化し、オペコードデコード740を単純化する。8ビットのオペコードの場合、ビット4、5、および6は、実行ユニットがオペコードのタイプを判定することを可能にする。示した正確なオペコードグループは例示的なものである。一実施形態において、移動およびロジック・オペコード・グループ742は、データ移動およびロジック命令(例えば、mov、cmp)を含む。移動およびロジックグループ742は、移動命令が0000xxxxb(例えば0x0x)の形式であり、ロジック命令が0001xxxxb(例えば、0x01)の形式である、5つの最上位ビット(MSB)を共有する。フロー制御命令グループ744(例えば、call、jmp)は、0010xxxxb(例えば、0x20)の形式の命令を含む。その他の命令群746は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、wait、send)を含む命令の混合を含む。並列数学命令グループ748は、0100xxxxb(例えば、0x40)の形式のコンポーネント単位の算術命令(例えば、add、mul)を含む。並列数学グループ748は、データチャネルにわたって並列に算術演算を実行する。ベクトル数学グループ750は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル数学グループは、ベクトルオペランドでのドット積演算などの演算を実行する。
【0104】
図13は、グラフィックパイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850、およびレンダー出力パイプライン870を含むグラフィックプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックプロセッサは、1つまたは複数の汎用処理コアを含むマルチコア処理システム内のグラフィックプロセッサである。グラフィックプロセッサは、1つまたは複数のコントロールレジスタ(図示せず)へのレジスタ書き込みによって、またはリング相互接続802を介してグラフィックスプロセッサに発行されるコマンドを介して、制御される。リング相互接続802は、グラフィックプロセッサを、他のグラフィックプロセッサまたは汎用プロセッサなどの、他の処理コンポーネントに結合する。リング相互接続からのコマンドは、グラフィックパイプライン820またはメディアパイプライン830の個々のコンポーネントに命令を供給するコマンドストリーマ803によって解釈される。
【0105】
コマンドストリーマ803は、頂点データをメモリから読み込み、コマンドストリーマ803によって提供される頂点処理コマンドを実行する、頂点フェッチャ805コンポーネントの動作を指示する。頂点フェッチャ805は、頂点シェーダ807に頂点データを提供し、頂点シェーダ807は、各頂点に座標空間変換およびライティング演算を実行する。頂点フェッチャ805および頂点シェーダ807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A、852Bにディスパッチすることによって、頂点処理命令を実行する。
【0106】
一実施形態において、実行ユニット852A、852Bは、グラフィックおよびメディア演算を実行するための命令セットを有するベクトルプロセッサのアレイである。実行ユニット852A、852Bは、各アレイに特有の、またはアレイの間で共有される、取り付けられたL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティション内のデータおよび命令を含むよう区分された単一キャッシュとして構成することができる。
【0107】
一実施形態において、グラフィックパイプライン820は、3Dオブジェクトのハードウェア加速テッセレーションを実行するためのテッセレーションコンポーネントを含む。プログラマブル・ハル・シェーダ811は、テッセレーション演算を構成する。プログラマブル・ドメイン・シェーダ817は、テッセレーション出力のバックエンド評価を提供する。テッセレータ813は、ハルシェーダ811の方向に動作し、グラフィックパイプライン820への入力として提供される粗いジオメトリックモデルに基づいて詳細なジオメトリックオブジェクトのセットを生成する専用のロジックを含む。テッセレーションを使用しない場合、テッセレーションコンポーネント811、813、817はバイパスすることができる。
【0108】
完全なジオメトリオブジェクトは、実行ユニット852A、852Bにディスパッチされる1つまたは複数のスレッドを介してジオメトリシェーダ819によって処理することができるか、またはクリッパ829に直接進むことができる。ジオメトリシェーダは、グラフィクパイプラインの前の段階のように、頂点または頂点のパッチではなく、ジオメトリオブジェクト全体で動作する。テッセレーションが無効にされている場合、ジオメトリシェーダ819は、頂点シェーダ807から入力を受け取る。ジオメトリシェーダ819は、ジオメトリ・シェーダ・プログラムによって、プログラム可能であり、テッセレーションユニットが無効である場合、ジオメトリテッセレーションを実行する。
【0109】
ラスタライズの前に、頂点データはクリッパ829によって処理され、ここで、クリッパ829は、クリッピングおよびジオメトリシェーダ機能を有する固定機能クリッパまたはプログラマブルクリッパのいずれかである。一実施形態において、レンダー出力パイプライン870内のラスタライザ873は、ピクセルシェーダをディスパッチして、グラフィックオブジェクトをピクセル毎の表現に変換する。一実施形態において、ピクセル・シェーダ・ロジックは、スレッド実行ロジック850に含まれる。
【0110】
グラフィックエンジンは、相互接続バス、相互接続ファブリック、またはグラフィックエンジンの主要コンポーネントの間でデータとメッセージの受け渡しを可能にする他の何らかの相互接続メカニズムを有する。一実施形態において、実行ユニット852A、852Bおよび関連するキャッシュ851、テクスチャおよびメディアサンプラ854、ならびにテクスチャ/サンプラキャッシュ858は、データポート856を介して相互接続して、メモリアクセスを実行し、グラフィックエンジンのレンダー出力パイプラインコンポーネントと通信する。一実施形態において、サンプラ854、キャッシュ851、858、および実行ユニット852A、852Bは、それぞれ別々のメモリアクセスパスを有する。
【0111】
一実施形態では、レンダー出力パイプライン870は、頂点ベースのオブジェクトを、関連するピクセルベースの表現に変換するラスタライザおよび深度テストコンポーネント873を含む。一実施形態において、ラスタライザロジックは、固定機能三角形および線ラスタライズを実行するためのウインドウ/マスカユニットを含む。関連するレンダーおよび深度バッファキャッシュ878、879はまた、一実施形態において利用可能である。ピクセル演算コンポーネント877は、データ上でピクセルベースの演算を実行するが、場合によっては、2D演算と関連するピクセル演算(例えば、ブレンディングを伴うビットブロック画像転送)が、2Dエンジン841によって実行されるか、またはオーバーレイ・ディスプレイ・プレーンを使用してディスプレイコントローラ843によって表示時に置換される。一実施形態において、共有L3キャッシュ875が、すべてのグラフィックコンポーネントで使用可能であり、メインシステムメモリを使用せずにデータの共有を可能にする。
【0112】
グラフィック・プロセッサ・メディア・パイプライン830は、メディアエンジン837およびビデオフロントエンド834を含む。一実施形態において、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。しかしながら、一実施形態において、メディアパイプライン830は、別個のコマンドストリーマを含む。ビデオフロントエンド834は、コマンドをメディアエンジン837に送る前に、メディアコマンドを処理する。一実施形態において、メディアエンジンは、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするスレッドを生成するためのスレッド生成機能を含む。
【0113】
一実施形態において、グラフィックエンジンは、ディスプレイエンジン840を含む。一実施形態において、ディスプレイエンジン840は、グラフィックプロセッサの外部にあり、リング相互接続802または他の何らかの相互接続バスもしくはファブリックを介してグラフィックプロセッサと結合する。ディスプレイエンジン840は、2Dエンジン841およびディスプレイコントローラ843を含む。ディスプレイエンジン840は、3Dパイプラインとは独立して動作することができる専用ロジックを含む。ディスプレイコントローラ843は、ラップトップコンピュータのようにシステム統合ディスプレイデバイスとすることができるディスプレイデバイス(図示せず)、またはディスプレイ・デバイス・コネクタを介して取り付けられる外部ディスプレイデバイスと結合する。
【0114】
グラフィックパイプライン820およびメディアパイプライン830は、複数のグラフィックおよびメディア・プログラミング・インターフェースに基づいて演算を実行するよう構成可能であり、任意の1つのアプリケーション・プログラミング・インターフェース(API)に固有ではない。一実施形態において、グラフィックプロセッサ用のドライバソフトウェアは、特定のグラフィックまたはメディアライブラリに特有のAPIコールを、グラフィックプロセッサによって処理できるコマンドに変換する。さまざまな実施形態において、クロノスグループによってサポートされるOpen Graphics Library(OpenGL)およびOpen Computing Language(OpenCL)、マイクロソフト社のDirect3Dライブラリ、または一実施形態ではOpenGLおよびD3Dの両方に対するサポートが提供される。Open Source Computer Vision Library(OpenCV)に対するサポートも提供され得る。将来製造されるAPIのパイプラインからグラフィックプロセッサのパイプラインへのマッピングが可能な場合、互換性のある3Dパイプラインを備えた将来製造されるAPIもサポートされる。
【0115】
図14Aは、一実施形態によるグラフィック・プロセッサ・コマンド・フォーマットを示すブロック図であり、
図14Bは、一実施形態によるグラフィック・プロセッサ・コマンド・シーケンスを示すブロック図である。
図14Aの実線ボックスは、一般にグラフィックコマンドに含まれる構成要素を示し、一方、破線は、オプションであるか、またはグラフィックコマンドのサブセットにのみ含まれる構成要素を含む。
図14Aの例示的なグラフィック・プロセッサ・コマンド・フォーマット900は、コマンドのターゲットクライアント902、コマンド・オペレーション・コード(オペコード)904、およびコマンドの関連データ906を識別するデータフィールドを含む。サブオペコード905およびコマンドサイズ908もいくつかのコマンドに含まれる。
【0116】
クライアント902は、コマンドデータを処理するグラフィックデバイスのクライアントユニットを指定する。一実施形態において、グラフィック・プロセッサ・コマンド・パーサは、各コマンドのクライアントフィールドを調べて、コマンドのさらなる処理を条件付けし、コマンドデータを適切なクライアントユニットにルーティングする。一実施形態において、グラフィック・プロセッサ・クライアント・ユニットは、メモリ・インターフェース・ユニット、レンダーユニット、2Dユニット、3Dユニット、およびメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットによって受信されると、クライアントユニットは、オペコード904および、存在する場合、サブオペコード905を読み込み、実行する動作を決定する。クライアントユニットは、コマンドのデータ906フィールド内の情報を使用してコマンドを実行する。いくつかのコマンドに対して、明示的なコマンドサイズ908によりコマンドのサイズが指定されることが予期される。一実施形態において、コマンドパーサは、コマンドオペコードに基づいて、少なくともいくつかのコマンドのサイズを自動的に決定する。一実施形態において、コマンドはダブルワードの倍数を介して整列される。
【0117】
図14Bのフローチャートは、サンプル・コマンド・シーケンス910を示す。一実施形態において、グラフィックプロセッサの一実施形態を特徴とするデータ処理システムのソフトウェアまたはファームウェアは、グラフィック演算のセットをセットアップし、実行し、終了するために示されるあるバージョンのコマンドシーケンスを使用する。例示的な目的のために、サンプル・コマンド・シーケンスが示され、説明されるが、実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。さらに、コマンドは、グラフィックプロセッサが少なくとも部分的に並行してコマンドのシーケンスを処理するように、コマンドシーケンス内のコマンドのバッチとして発行されてもよい。
【0118】
サンプル・コマンド・シーケンス910は、パイプライン・フラッシュ・コマンド912で始まり、任意のアクティブ・グラフィック・パイプラインが、パイプラインの現在保留中のコマンドを完了させることができる。一実施形態において、3Dパイプライン922とメディアパイプライン924は同時に動作しない。パイプラインフラッシュは、アクティブ・グラフィック・パイプラインが、任意の保留中のコマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックプロセッサのコマンドパーサは、アクティブな描画エンジンが保留中の動作を完了し、関連する読み込みキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択的に、「ダーティ」とマークされたレンダーキャッシュ内のデータはすべて、メモリにフラッシュすることができる。パイプライン・フラッシュ・コマンド912は、パイプライン同期のために、またはグラフィックプロセッサを低電力状態にする前に、使用することができる。
【0119】
パイプライン選択コマンド913は、コマンドシーケンスがグラフィックプロセッサにパイプライン間を明示的に切り替えることを要求する場合に使用される。パイプライン選択コマンド913は、コンテキストが両方のパイプラインに対してコマンドを発行するものでない限り、パイプラインコマンドを発行する前に実行コンテキスト内で1回だけ必要とされる。一実施形態において、パイプライン選択コマンド913を介してパイプライン切り替えの直前にパイプライン・フラッシュ・コマンド912が必要とされる。
【0120】
パイプライン制御コマンド914は、演算のためにグラフィックパイプラインを構成し、3Dパイプライン922およびメディアパイプライン924をプログラムするために使用される。パイプライン制御コマンド914は、アクティブなパイプラインのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド914は、パイプライン同期に使用され、コマンドのバッチを処理する前にアクティブパイプライン内の1つまたは複数のキャッシュメモリからデータをクリアするために使用される。
【0121】
リターンバッファ状態コマンド916は、各パイプラインがデータを書き込むためのリターンバッファのセットを構成するために使用される。パイプライン演算の中には、演算により処理中に中間データを書き込む1つまたは複数のリターンバッファの割り当て、選択、または構成が必要なものがある。グラフィックプロセッサはまた、出力データを格納し、クロススレッド通信を実行するために、1つまたは複数のリターンバッファを使用する。リターンバッファ状態916は、パイプライン演算のセットに使用するリターンバッファのサイズおよび数を選択することを含む。
【0122】
コマンドシーケンスの残りのコマンドは、演算のためのアクティブなパイプラインに基づき、異なる。パイプライン決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922、またはメディアパイプライン状態940で始まるメディアパイプライン924に適合される。
【0123】
3Dパイプライン状態930のコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、深度バッファ状態、および3Dプリミティブコマンドが処理される前に構成されるべき他の状態変数に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。3Dパイプライン状態930コマンドは、これらの要素が使用されない場合、特定のパイプライン要素を選択的に無効にするか、またはバイパスすることも可能である。
【0124】
3Dプリミティブ932コマンドは、3Dパイプラインによって処理される3Dプリミティブをサブミットするために使用される。3Dプリミティブ932コマンドを介してグラフィックプロセッサに渡されるコマンドおよび関連パラメータは、グラフィックパイプラインにおける頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ932コマンドデータを使用して頂点データ構造を生成する。頂点データ構造は、1つまたは複数のリターンバッファに格納される。3Dプリミティブ932コマンドは、頂点シェーダを介して3Dプリミティブ上で頂点演算を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックプロセッサ実行ユニットにディスパッチする。
【0125】
3Dパイプライン922は、実行934コマンドまたはイベントを介してトリガされる。一実施形態において、レジスタ書き込みが、コマンド実行をトリガする。一実施形態において、コマンドシーケンス内の”go”または”kick”コマンドを介して実行がトリガされる。一実施形態において、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックパイプラインを介してコマンドシーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブに対するジオメトリ処理を実行する。演算が完了すると、結果として得られるグラフィックオブジェクトはラスタライズされ、ピクセルエンジンは結果として生じるピクセルを色づける。ピクセルシェーディングおよびピクセルバックエンド演算を制御するための追加のコマンドもまた、これらの演算に含めることができる。
【0126】
サンプル・コマンド・シーケンス910は、メディア演算を実行する場合にメディアパイプライン924の経路に続く。一般に、メディアパイプライン924のプログラミングの特定の使用および方法は、実行されるメディアまたは計算演算に依存する。特定のメディアデコード演算は、メディアデコード中にメディアパイプラインにオフロードすることができる。メディアパイプラインもバイパスすることができ、メディアデコードは、1つまたは複数の汎用処理コアによって提供されるリソースを使用して、全体または一部を実行することができる。一実施形態において、メディアパイプラインはまた、汎用グラフィック・プロセッサ・ユニット(GPGPU)演算用の要素も含み、ここで、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用してSIMDベクトル演算を実行するために使用される。
【0127】
メディアパイプライン924は、3Dパイプライン922と同様に構成される。一組みのメディアパイプライン状態コマンド940が、メディア・オブジェクト・コマンド942の前にコマンドキューにディスパッチされるか、またはコマンドキューに配置される。メディアパイプライン状態コマンド940は、メディアオブジェクトを処理するために使用されるメディアパイプライン要素を構成するためのデータを含む。これには、エンコードフォーマットまたはデコードフォーマットなどの、メディアパイプライン内のビデオデコードおよびビデオエンコードロジックを構成するためのデータが含まれる。メディアパイプライン状態コマンド940はまた、状態設定のバッチを含む「間接」状態要素への1つまたは複数のポインタの使用をサポートする。
【0128】
メディア・オブジェクト・コマンド942は、メディアパイプラインによる処理のためにメディアオブジェクトにポインタを供給する。メディアオブジェクトは、処理対象のビデオデータを含むメモリバッファを含む。一実施形態において、メディア・オブジェクト・コマンド942を発行する前に、すべてのメディアパイプライン状態が有効でなければならない。パイプライン状態が構成され、メディア・オブジェクト・コマンド942がキューに入れられると、メディアパイプライン924は、実行934コマンドまたは同等の実行イベント(例えば、レジスタ書き込み)を介してトリガされる。その場合、メディアパイプライン924からの出力は、3Dパイプライン922またはメディアパイプライン924によって提供される演算によって後処理してもよい。一実施形態において、GPGPU演算は、メディア演算と同様の方法で構成され実行される。
【0129】
図15は、一実施形態によるデータ処理システムのための例示的なグラフィック・ソフトウェア・アーキテクチャを示す。ソフトウェアアーキテクチャは、3Dグラフィックアプリケーション1010、オペレーティングシステム1020、および少なくとも1つのプロセッサ1030を含む。プロセッサ1030は、グラフィックプロセッサ1032および1つまたは複数の汎用プロセッサコア(単数または複数)1034を含む。グラフィックアプリケーション1010およびオペレーティングシステム1020はそれぞれ、データ処理システムのシステムメモリ1050内で実行される。
【0130】
3Dグラフィックアプリケーション1010は、シェーダ命令1012を含む1つまたは複数のシェーダプログラムを含む。シェーダ言語命令は、高レベルシェーダ言語(HLSL)またはOpenGLシェーダ言語(GLSL)などの高レベルシェーダ言語とすることができる。アプリケーションはまた、汎用プロセッサコア1034による実行に適した機械語の実行可能命令1014も含む。アプリケーションはまた、頂点データによって定義されるグラフィックオブジェクト1016を含む。
【0131】
オペレーティングシステム1020は、マイクロソフト社のMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、独自のUNIX(登録商標)ライクなオペレーティングシステム、またはLinux(登録商標)カーネルの変形を使用するオープンソースのUNIX(登録商標)ライクなオペレーティングシステムであってもよい。Direct3D APIが使用されている場合、オペレーティングシステム1020は、フロントエンド・シェーダ・コンパイラ1024を使用して、HLSLの任意のシェーダ命令1012を低レベルシェーダ言語にコンパイルする。コンパイルは、ジャストインタイムコンパイルとすることができ、アプリケーションが共有プリコンパイルを実行することができる。一実施形態において、高レベルシェーダは、3Dグラフィックアプリケーション1010のコンパイル中に低レベルシェーダにコンパイルされる。
【0132】
ユーザ・モード・グラフィック・ドライバ1026は、シェーダ命令1012をハードウェア固有表現に変換するバックエンド・シェーダ・コンパイラ1027を含むことができる。OpenGL APIが使用されている場合、GLSL高レベル言語のシェーダ命令1012は、コンパイルのためにユーザ・モード・グラフィック・ドライバ1026に渡される。ユーザ・モード・グラフィック・ドライバは、オペレーティング・システム・カーネル・モード機能1028を使用して、カーネルモード・グラフィック・ドライバ1029と通信する。カーネル・モード・グラフィク・ドライバ1029は、グラフィックプロセッサ1032と通信して、コマンドおよび命令をディスパッチする。
【0133】
さまざまな動作または機能が本明細書に記載されている範囲で、それらは、ハードウェア回路、ソフトウェアコード、命令、構成、および/またはデータとして記述または定義することができる。コンテンツは、ハードウェアロジックに埋め込むことができ、または直接実行可能なソフトウェア(「オブジェクト」または「実行可能」形式)、ソースコード、グラフィックエンジンで実行するために設計された高レベルシェーダコード、または特定のプロセッサもしくはグラフィックコアのための命令セットにおける低レベルアセンブリ言語コードとして埋め込むことができる。本明細書に記載の実施形態のソフトウェアコンテンツは、コンテンツが格納された製品を介して、または通信インターフェースを操作してデータを通信インターフェースを介して送信するための方法を介して提供することができる。
【0134】
非一時的機械読取可能ストレージ媒体は、機械に、説明した機能または動作を実行させることができ、記録可能/記録不可媒体(例えば、リード・オンリ・メモリ(ROM)、ランダム・アクセス・メモリ(RAM)、磁気ディスクストレージ媒体、光学ストレージ媒体、フラッシュ・メモリ・デバイスなど)などの、機械(例えば、コンピューティングデバイス、電子システムなど)によってアクセス可能な形式で情報を格納する任意の機構を含む。通信インターフェースは、メモリバスインターフェース、プロセッサバスインターフェース、インターネット接続、ディスクコントローラなどの、別のデバイスと通信するための有線、無線、光学などの媒体のいずれかにインターフェースする任意の機構を含む。通信インターフェースは、ソフトウェアコンテンツを記述するデータ信号を提供するために通信インターフェースを準備するための構成パラメータまたは送信信号を提供することによって構成される。通信インターフェースは、通信インターフェースに送信される1つまたは複数のコマンドまたは信号を介してアクセスすることができる。
【0135】
説明したさまざまな構成要素は、説明した動作または機能を実行するための手段とすることができる。本明細書に記載される各構成要素は、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。構成要素は、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア(例えば、特定用途向けハードウェア、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)など)、組み込みコントローラ、ハードワイヤード回路などとして実装することができる。本明細書に記載されたものに加えて、本発明の範囲から逸脱することなく、本発明の開示された実施形態および実装形態に対してさまざまな変更を行うことができる。したがって、本明細書における例示および例は、例示的なものであり、限定的な意味で解釈されるべきではない。本発明の範囲は、添付の特許明細の範囲を参照することによってのみ測られるべきである。
【0136】
以下の項目および/または例は、さらなる実施形態に関する。
1つの例示的な実施形態は、位置属性を計算し、位置属性以外のシェーディング属性を計算する前に、三角形をカリングすることを備える方法とすることができる。本方法はまた、カリングが単純なカリングテストおよび視錐台カリングを含む場合を含むこともできる。本方法はまた、可視情報を時間順に記録し、この情報を使用して廃棄された三角形をスキップすることを含むことができる。本方法はまた、前記可視情報をビット順序で記録することを含むことができる。本方法はまた、前記位置属性を計算する前にオクルージョンカリングを実行するためにタイル毎の深度表現を記録することを含むことができる。本方法はまた、完全には塞がれていない三角形の位置属性を計算する場合にオクルージョン情報を生成することを含むこともできる。本方法はまた、描画呼び出しコマンド内にビットを設定して、そのコマンドが計算中か、またはカリング中に処理されるべきかどうかを指示することを含むことができる。本方法はまた、タイル毎のスカラ値として最大および最小の深度を格納することによって前記オクルージョン情報を使用することによるオクルージョンカリングを含むことができる。本方法はまた、ビットマスクおよびタイル毎のZmax値のセットを使用して、マスクされた深度表現を格納することによる、オクルージョンカリングを含むことができる。本方法はまた、基準値が最小または最大深度を表すかどうかを示すためにタイル毎に1ビットを格納することによってカリングすることを含むことができる。本方法はまた、位置属性を計算する一部として第1の深度テストを実行し、次いで、位置属性を決定した後にカリング中に第2の深度テストを実行することを含むことができる。本方法はまた、第2の深度テストに使用するために第1の深度テストから深度表現を供給することを含むことができる。本方法はまた、第2の深度テストパイプ内の第1の深度テストからの深度表現を使用して、ピクセルシェーダの実行を節約するためにzバッファをプライミングすることを含むことができる。本方法はまた、並列パイプで計算し、カリングすることも含むことができる。本方法はまた、計算およびカリングが1つのパイプで行われ、可視情報を記録するビットシーケンスが他のパイプで消費されることを含むことができる。本方法はまた、描画呼び出しに対する可視情報を記録することを選択的に無効にすることを含むことができる。本方法はまた、他のシェーディング属性の前に位置属性を計算するのではなく、少なくとも1つの描画呼び出しに対して1つのパスですべての属性を計算することを選択的に可能にすることを含むことができる。本方法はまた、位置属性を計算することが、位置属性のみを読み込むことと、位置属性を計算するために他の任意のシェーディング属性を読み込まないこととを含むこともできる。本方法はまた、三角形カリングの間にプリミティブをクリッピングし、位置属性を計算する場合にすべての三角形を目に見えるようにマーキングすることを含むことができる。本方法はまた、非位置属性を計算するための命令を含まない命令セットを使用して位置属性を計算することを含むことができる。
【0137】
別の例示的な実施形態は、位置属性以外のシェーディング属性を計算する前に、位置属性を計算し、三角形をカリングすることを備えるシーケンスを実行するためにプロセッサによって実行される命令を格納する1つまたは複数の非一時的コンピュータ可読可能媒体とすることができる。本媒体はまた、カリングが単純なカリングテストおよび視錐台カリングを含む命令をさらに格納することができる。本媒体はまた、可視情報を時間順に記録し、この情報を使用して廃棄された三角形をスキップすることを含む前記シーケンスを格納することできる。本媒体は、さらに、ビット順に前記可視情報を記録することを含む、前記シーケンスを格納することができる。本媒体はまた、前記位置属性を計算する前にオクルージョンカリングを実行するためにタイル毎の深度表現を記録することを含む、前記シーケンスを含むことができる。本媒体は、完全には塞がれていない三角形の位置属性を計算する場合にオクルージョン情報を生成することを含む、前記シーケンスを含むことができる。本媒体は、描画呼び出しコマンド内にビットを設定して、そのコマンドが計算中か、またはカリング中に処理されるべきかどうかを指示することを含む、前記シーケンスを含むことができる。本媒体は、タイル毎のスカラ値として最大および最小の深度を格納することによって前記オクルージョン情報を使用することによるオクルージョンカリングを含む、前記シーケンスを含むことができる。本媒体はまた、ビットマスクおよびタイル毎のZmax値のセットを使用して、マスクされた深度表現を格納することによる、オクルージョンカリングを含む、前記シーケンスを含むことができる。本媒体は、基準値が最小または最大深度を表すかどうかを示すためにタイル毎に1ビットを格納することによってカリングすることを含む、前記シーケンスを含むことができる。本媒体は、位置属性を計算する一部として第1の深度テストを実行し、次いで、位置属性を決定した後にカリング中に第2の深度テストを実行することを含む、前記シーケンスを含むことができる。本媒体は、第2の深度テストに使用するために第1の深度テストから深度表現を供給することを含む、前記シーケンスを含むことができる。本媒体は、第2の深度テストパイプ内の第1の深度テストからの深度表現を使用して、ピクセルシェーダの実行を節約するためにzバッファをプライミングすることを含む、前記シーケンスを含むことができる。本媒体は、並列パイプ内で計算し、カリングすることを含む、前記シーケンスを含むことができる。本媒体は、計算およびカリングが1つのパイプで行われ、可視情報を記録するビットシーケンスが他のパイプで消費される、前記シーケンスを含むことができる。本媒体は、描画呼び出しに対する可視情報を記録することを選択的に無効にすることを含む、前記シーケンスを含むことができる。本媒体は、他のシェーディング属性の前に位置属性を計算するのではなく、少なくとも1つの描画呼び出しに対して一度にすべての属性を計算することを選択的に可能にすることを含む、前記シーケンスを含むことができる。本媒体は、位置属性を計算することが、位置属性のみを読み込むことと、位置属性を計算するために他の任意のシェーディング属性を読み込まないこととを含む、前記シーケンスを含むことができる。本媒体はまた、三角形カリングの間にプリミティブをクリッピングし、位置属性を計算する場合にすべての三角形を目に見えるようにマーキングすることを含む、前記シーケンスを含むことができる。本媒体は、非位置属性を計算するための命令を含まない命令セットを使用して位置属性を計算することを含む、前記シーケンスを含むことができる。
【0138】
別の例において、実施形態は、位置属性を計算し、位置属性以外のシェーディング属性を計算する前に三角形をカリングするプロセッサと、前記プロセッサに結合されたストレージとを備える装置とすることができる。本装置は、単純なカリングテストと視錐台カリングとを使用してカリングするための前記プロセッサを含むことができる。本装置は、可視情報を時間順に記録し、この情報を使用し、破棄された三角形をスキップするための前記プロセッサを含むことができる。本装置は、ビット単位のシーケンスで前記可視情報を記録するための前記プロセッサを含むことができる。本装置は、前記位置属性を計算する前にオクルージョンカリングを実行するためにタイル毎の深度表現を記録するための前記プロセッサを含むことができる。本装置は、完全には塞がれていない三角形の位置属性を計算する場合にオクルージョン情報を生成するための前記プロセッサを含むことができる。本装置は、描画呼び出しコマンド内にビットを設定して、そのコマンドが計算中か、またはカリング中に処理されるべきかどうかを指示するための前記プロセッサを含むことができる。本装置は、タイル毎のスカラ値として最大および最小の深度を格納することによって前記オクルージョン情報を使用することによるオクルージョンカリングをするための前記プロセッサを含むことができる。本装置はまた、ビットマスクおよびタイル毎のZmax値のセットを使用して、マスクされた深度表現を格納することによりオクルージョンカリングをするための前記プロセッサを含むことができる。本装置は、基準値が最小または最大深度を表すかどうかを示すためにタイル毎に1ビットを格納することによってカリングするための前記プロセッサを含むことができる。本装置は、位置属性を計算する一部として第1の深度テストを実行し、次いで、位置属性を決定した後にカリング中に第2の深度テストを実行するための前記プロセッサを含むことができる。本装置は、第2の深度テストに使用するために第1の深度テストから深度表現を供給するための前記プロセッサを含むことができる。本装置は、第2の深度テストパイプ内の第1の深度テストからの深度表現を使用して、ピクセルシェーダの実行を節約するためにzバッファをプライミングするための前記プロセッサを含むことができる。本装置は、並列パイプ内で計算およびカリングをするための前記プロセッサを含むことができる。本装置は、一方のパイプ内で計算およびカリングをし、他方のパイプ内で可視情報を記録するビットシーケンスを消費するための前記プロセッサを含むことができる。本装置は、オペレーティングシステム、バッテリおよびファームウェア、ならびに前記ファームウェアをアップデートするためのモジュールを含むことができる。
【0139】
本明細書で説明するグラフィック処理技術は、さまざまなハードウェアアーキテクチャで実装することができる。例えば、グラフィック機能は、チップセット内に統合することができる。あるいは、別個のグラフィックプロセッサを使用してもよい。さらに別の実施形態として、グラフィック機能は、マルチコアプロセッサを含む、汎用プロセッサによって実装してもよい。
【0140】
本明細書を通して、「一実施形態」または「1つの実施形態」という言及は、実施形態に関連して説明される特定の特徴、構造、または特性が、本開示に包含される少なくとも1つの実装態様に含まれることを意味する。したがって、「一実施形態」または「1つの実施形態」という表現は、必ずしも同じ実施形態を指しているとは限らない。さらに、特定の特徴、構造、または特性は、図示の特定の実施形態以外の他の適切な形態で実施されてもよく、そのような形態はすべて本出願の特許請求の範囲に包含することができる。
【0141】
限られた数の実施形態について説明してきたが、当業者であれば、多くの変更形態および変形形態が可能であろう。添付の特許請求の範囲は、この開示の真の精神および範囲内にあるそのような修正形態および変形形態のすべてをカバーすることが意図されている。