(57)【特許請求の範囲】
【請求項１】
位置属性を計算するステップと、
位置属性以外のシェーディング属性を計算する前に、テッセレーションを有しないカルパイプの中で三角形をカリングするステップと、
テッセレーションを有しないカルパイプによりテッセレーションを必要とする描画呼び出しを処理できるようにするために、計算するステップ又はカリングするステップ中に描画呼び出しコマンドが処理されるべきか否かを示すよう該コマンドの中のビットを設定するステップと、
を備える、方法。
【請求項２】
カリングが、単純なカリングテストおよび視錐台カリングを含む、請求項１に記載の方法。
【請求項３】
可視情報を時間順に記録するステップと、この情報を使用して廃棄された三角形をスキップするステップとを含む、請求項１に記載の方法。
【請求項４】
前記可視情報をビット順序で記録するステップを含む、請求項３に記載の方法。
【請求項５】
並列パイプで計算し、カリングするステップを含む、請求項１に記載の方法。
【請求項６】
計算およびカリングするステップが１つのパイプで行われ、可視情報を記録するビットシーケンスが他のパイプで消費される、請求項５に記載の方法。
【請求項７】
描画呼び出しに対する可視情報を記録するステップを選択的に無効にする、請求項１に記載の方法。
【請求項８】
他のシェーディング属性の前に位置属性を計算するのではなく、少なくとも１つの描画呼び出しに対して１つのパスですべての属性を計算することを選択的に可能にするステップを含む、請求項１に記載の方法。
【請求項９】
位置属性を計算するステップが、位置属性のみを読み込むステップと、位置属性を計算するために他の任意のシェーディング属性を読み込まないステップとを含む、請求項１に記載の方法。
【請求項１０】
三角形カリングの間にプリミティブをクリッピングするステップと、位置属性を計算する場合にすべての三角形を目に見えるようにマーキングするステップとを含む、請求項１に記載の方法。
【請求項１１】
非位置属性を計算するための命令を含まない命令セットを使用して位置属性を計算するステップを含む、請求項１に記載の方法。
【請求項１２】
プロセッサにシーケンスを実行させるコンピュータプログラムであって、前記シーケンスが、
位置属性を計算するステップと、
位置属性以外のシェーディング属性を計算する前に、テッセレーションを有しないカルパイプの中で三角形をカリングするステップと、
テッセレーションを有しないカルパイプによりテッセレーションを必要とする描画呼び出しを処理できるようにするために、計算するステップ又はカリングするステップ中に描画呼び出しコマンドが処理されるべきか否かを示すよう該コマンドの中のビットを設定するステップと、
を備える、
コンピュータプログラム。
【請求項１３】
カリングが、単純なカリングテストおよび視錐台カリングを含む、請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記シーケンスが、並列パイプ内で計算し、カリングすることを含む、請求項１２に記載のコンピュータプログラム。
【請求項１５】
計算およびカリングが一方のパイプで行われ、可視情報を記録するビットシーケンスが他方のパイプで消費される、請求項１２に記載のコンピュータプログラム。
【請求項１６】
前記シーケンスが、描画呼び出しに対する可視情報を記録することを選択的に無効にすることを含む、請求項１２に記載のコンピュータプログラム。
【請求項１７】
前記シーケンスは、他のシェーディング属性の前に位置属性を計算するのではなく、少なくとも１つの描画呼び出しに対して一度にすべての属性を計算することを選択的に可能にすることを含む、請求項１２に記載のコンピュータプログラム。
【請求項１８】
位置属性を計算することが、位置属性のみを読み込むことと、位置属性を計算するために他の任意のシェーディング属性を読み込まないこととを含む、請求項１２に記載のコンピュータプログラム。
【請求項１９】
前記シーケンスが、三角形カリングの間にプリミティブをクリッピングし、位置属性を計算する場合にすべての三角形を目に見えるようにマーキングすることを含む、請求項１２に記載のコンピュータプログラム。
【請求項２０】
前記シーケンスは、非位置属性を計算するための命令を含まない命令セットを使用して位置属性を計算することを含む、請求項１２に記載のコンピュータプログラム。
【請求項２１】
位置属性を計算し、位置属性以外のシェーディング属性を計算する前に、テッセレーションを有しないカルパイプの中で三角形をカリングし、テッセレーションを有しないカルパイプによりテッセレーションを必要とする描画呼び出しを処理できるようにするために、計算又はカリング中に描画呼び出しコマンドが処理されるべきか否かを示すよう該コマンドの中のビットを設定するプロセッサと、
前記プロセッサに結合されるストレージと、
を備える、装置。
【請求項２２】
前記プロセッサが、単純なカリングテストと視錐台カリングとを使用してカリングする、請求項２１に記載の装置。
【請求項２３】
前記プロセッサが、可視情報を時間順に記録し、この情報を使用し、破棄された三角形をスキップする、請求項２１に記載の装置。
【請求項２４】
前記プロセッサが、ビット単位のシーケンスで前記可視情報を記録する、請求項２３に記載の装置。
【請求項２５】
前記プロセッサが、位置属性を計算する一部として第１の深度テストを実行し、次いで、位置属性を決定した後にカリング中に第２の深度テストを実行する、請求項２１に記載の装置。
【請求項２６】
請求項１２乃至２０のいずれか一項に記載のコンピュータプログラムを記憶したコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフィック処理に関する。
【背景技術】
【０００２】
現在のグラフィック処理アーキテクチャは、三角形が順番に処理される仮想パイプラインに従う。頂点は、シェーダを介して変換され、次いで、三角形が、セットアップおよびラスタライズの段階を経て、ピクセルを生成し、ピクセルは、次いで、シェーディングされ、フレームバッファに書き込まれる。しかしながら、任意のフレームバッファに正しい画像をレンダリングするのに必要なのは、三角形のほんの一部である。例えば、いくつかの三角形シーケンスは、目に見える影響を有さず、ラスタライズ段階の前であっても破棄される。これらのシーケンスは、視錐台破棄（ｖｉｅｗｐｏｒｔ  ｆｒｕｓｔｕｍ  ｄｉｓｃａｒｄ）を介して削除されるか、またはグラフィクパイプラインを介して背面カリングされる。さらに、破棄された三角形シーケンスは、バーストのサイズが１００００個以上の三角形になる可能性があるバースト特性に従い、ピクセルパイプと計算クラスタとの両方を枯渇させる。
【０００３】
いくつかの実施形態は、以下の図に関して説明される。
【図面の簡単な説明】
【０００４】
【図１】いくつかの実施形態のため簡易化したベースラインアーキテクチャを示す図である。
【図２】いくつかの実施形態のためのより詳細なアーキテクチャを示す図である。
【図３】アーキテクチャの一実施形態のブロック図である。
【図４】一実施形態によるオクルージョンカリングを伴うカルパイプおよびリプレイパイプに対するフローチャートである。
【図５】一実施形態による深度表現を記録するカルパイプを伴うリプレイパイプに対するフローチャートである。
【図６】一実施形態によるデータ処理システムのブロック図である。
【図７】一実施形態による図６に示したプロセッサのブロック図である。
【図８】一実施形態による図６のグラフィックプロセッサのブロック図である。
【図９】一実施形態によるグラフィック処理エンジンのブロック図である。
【図１０】別の実施形態によるグラフィックプロセッサのブロック図である。
【図１１】一実施形態に対するスレッド実行ロジックを示す図である。
【図１２】一実施形態によるグラフィックプロセッサ実行ユニット命令フォーマットのブロック図である。
【図１３】グラフィックプロセッサの別の実施形態のブロック図である。
【図１４Ａ】一実施形態によるグラフィック・プロセッサ・コマンド・フォーマットのブロック図である。
【図１４Ｂ】一実施形態によるグラフィック・プロセッサ・コマンド・シーケンスのブロック図である。
【図１５】一実施形態に対するグラフィック・ソフトウェア・アーキテクチャを示す図である。
【発明を実施するための形態】
【０００５】
長く実行される破棄シーケンスを完全に隠すメカニズムにより、性能が向上する。残念ながら、頂点の位置属性を取り出してシェーディングする（実行する）ことなく任意の特定の三角形シーケンスを有効にスキップできるかは確実には分からない。三角形を破棄できるかどうかを決定するには位置のシェーディングが重要であるため、グラフィック処理装置（ＧＰＵ）は、位置のシェーディングを優先すべきである。例えば、現在のＧＰＵアーキテクチャでは、頂点計算は、メモリから頂点属性（例えば、位置、色、テクスチャ座標など）を取り出し、次いで、頂点シェーダの助けによりそれらをシェーディングすることを含む。重要な命令の計算は、位置属性を計算する頂点シェーダ、すなわち、位置シェーダから分けることができる。重要な結果の計算がはるかに速く行われた場合、その結果は、カルシーケンスを隠すために使用することができる。要するに、位置シェーダを「事前実行」して、メインアプリケーションに代わって効果的に待ち時間を消費することが望ましい。
【０００６】
位置限定シェーディングでは、２つのジオメトリパイプ、すなわち、カルパイプと呼ばれるトリムダウンバージョンと、リプレイパイプと呼ばれるフルバージョンとが存在する。パイプはどちらも、同じアプリケーションの異なるインスタンスを実行し、各インスタンスは、専用のコンテキストを有する。したがって、カルパイプは、メインアプリケーションと並行して位置シェーダを実行するが、通常、頂点の位置属性のみを取り出してシェーディングし、ラスタライズならびにフレームバッファに対するピクセルのレンダリングを避ける場合により速く重要な結果を生成する。さらに、カルパイプは、これらの重要な結果を使用して、それらがカリングされたかどうかに関わらず、すべての三角形に対する可視情報を計算する。他方で、リプレイパイプは、可視情報を消費し、カリングされた三角形をスキップし、最終的にラスタライズ段階に渡される可視三角形のみをシェーディングする。２つのパイプはどちらも、破棄された三角形の長いカリング実行を隠すことができ、いくつかの実施形態において、作業をより速く完了することができる。
【０００７】
性能向上の可能性に加えて、位置限定シェーディングはまた、省電力、およびアーキテクチャのスケーラビリティの向上の機会をもたらす。以下は、いくつかの実施形態のいくつかの寄与である。
位置限定シェーディングは、いくつかの実施形態におけるアプリケーションに埋め込まれた三角形の長いカルシーケンスを完全に隠すことができる。これらのカル実行は、ピクセルパイプを枯渇させることによってＧＰＵリソースの利用を非効率にする傾向があり、システム内に存在するものを計算する。位置限定シェーディングの助けにより、長いカル実行は、完全に抑制することができ、ボトルネックが、ジオメトリパイプからピクセルパイプにシフトして、いくつかの実施形態において、性能向上をもたらす。
ＧＰＵ内のリソースは、カルパイプを介して利用することができ、重要な作業の計算をより高速に完了することができる。
さらに、位置限定シェーディングアーキテクチャは、いくつかの実施形態において、エネルギーを節約することができ、すなわち、エネルギー節約は、取り出すエネルギーを少なくして、カリングされた三角形に対する動的命令の実行を少なくすることによってもたらされる。
位置限定シェーディングは、より大量の製品に対してさらなるスケーラビリティをもたらすことができ、すなわち、ジオメトリパイプからピクセルパイプにボトルネックをシフトすることによって、スケーラビリティ問題は、ピクセルを増やすことにより変換され、アーキテクチャ要件に合うようスループットを計算することができる。
【０００８】
図１は、アプリケーション・プログラム・インターフェース（ＡＰＩ）およびプログラミングモデルと一致するベースラインアーキテクチャの概略図であり、一方、図２は、一実施形態によるベースラインＧＰＵのより詳細なマイクロアーキテクチャを示す。ＧＰＵは、３つの部分、すなわち、アンスライス、スライス、およびアンコアを含む統一シェーダモデルである。
【０００９】
通常、３Ｄシーンは、三角形の頂点がオブジェクトの形状を画定する三角形に分割された表面の集合として開始する。頂点のこれらの入力リストは、頂点取り出し（ＶＦ）ユニット１２にもたらされ、頂点取り出し（ＶＦ）ユニット１２はメモリ１４から頂点と関連した属性を取り出す。頂点シェーダ（ＶＳ）ユニット１６では、頂点の取り出された属性が、プログラマブルシェーダを使用して変換される。これらのプログラマブルシェーダは、頂点を画面上にマッピングして、これらの属性について数学的演算を実行することによって３Ｄ環境でオブジェクトに特殊効果を加える、サブルーチンと考えることができる。これらのシェーダは、実行ユニット（ＥＵ）と呼ばれる、スレッドプロセッサに送出され、頂点の属性（例えば、位置、色、テクスチャ座標など）が変換され、計算値が後のパイプ段階による参照のためにローカルメモリに格納される。
【００１０】
ＶＳユニットの出力は、適用可能な場合に、ハルシェーダ１７、テッセレーション１８、ドメインシェーダ１９、およびジオメトリシェーダ２０である次のパイプライン段階に送られるか、または三角形が生成されるプリミティブ・アセンブリ・ユニット２２に送られる。三角形の生成がクリッピング段階２４に来ると、視錐台破棄２３で判断されるように、視錐台の外側にある三角形が破棄される。他方で、視錐台の面内にある三角形は、受け入れられて、後のパイプ段階に送られる。さらに、クリッピング段階はまた、視錐台の面と交差する三角形をクリップすることができる。
【００１１】
ビューポイント錐台破棄２３で残った三角形は、三角形が最終画像の一部となるかどうかを確認するための単純カル段階２６によってまたさらに検査され、これらのテストに落ちたオブジェクトは破棄される。例えば、バックフェーシング、ディジェネレート、ゼロエリアなどで、三角形はこの段階で破棄される。いくつかのアプリケーションでは、三角形の約８０％以上が、ビューポイント錐台または単純なカル段階で破棄される。最後に、通過した三角形は、セットアップおよびラスタライズユニット２８および３０に送られる。
【００１２】
ベースラインアーキテクチャの第２の部分は、ラスタライズ３０、深度３２、シェーディングおよびテクスチャ３３、および色クラスタ３４を含むピクセルパイプである。ピクセルパイプは、ジオメトリパイプによって送られた三角形のエッジの内側、またはエッジ上にあるすべてのピクセルの位置を判定するラスタライズユニット３０で始まる。さらに、ピクセルパイプは、三角形を、深度テストのために深度（Ｚ）パイプ３２に送られるピクセルの対称的なブロックに分割する。３Ｄシーン内の複数のオブジェクトを同じ位置にマッピングすることができるので、深度パイプは、ブロック内に埋め込まれたピクセルが、観測者に最も近いか、または異なるオブジェクトに属する以前に観測されたピクセルによって隠されているかを判定する。深度テストに合格したピクセルは、それらの色およびそれらに属する他の属性を判定するためにシェーディングされる（シェーディングおよびテクスチャ３３）。最後に、ピクセルの計算値は、任意選択的に、計算値を既知の状態とブレンドするか、または計算値を送って、フレームバッファをアップデートすることができる、カラーパイプ３４に送られる。
【００１３】
図２に示すように、ＶＦ段階から、単純なカル段階へのジオメトリパイプライン３６が、アーキテクチャ４０のアンスライス位置３８に存在する。ジオメトリパイプから出るプログラム可能なシェーダは、グローバル・スレッド・ディスパッチ４２を介してスレッドプロセッサにディスパッチされ、計算値が、ローカルメモリ４４に記録される。合格した三角形は、ジオメトリパイプから、スライス４６に送られ、ラスタライズウォークを介してピクセルの対称的なブロックに分割される。ピクセルブロックは、ピクセル・ハッシング・メカニズム４８を介してハッシュされ、ブロックがスライス内でレンダリングされるかどうかを決定する。ハッシングメカニズムは、負荷分散だけでなく、ピクセルコヒーレンシを維持する役割も担う。
【００１４】
上記のように、３Ｄシーン内の複数の三角形は重なり合う可能性があり、所与のスクリーン座標にあるピクセルブロックを、同じスライスおよび同じ計算クラスタ５０にローカル・スレッド・ディスパッチ５３を介して送信することは、ハッシングメカニズムの役割を果たす。このことは、ピクセルの深度およびカラーコヒーレンシを維持するために行われる。さらに、アーキテクチャのスライス部分は、２つの機能ブロック、すなわち、ピクセルパイプ５２および計算クラスタ５０に分割することができる。上記のように、ピクセルパイプは、ラスタライズ、深度、およびカラークラスタを含み、一方、計算クラスタは、プログラマブルシェーダを実行するために使用される実行ユニット（ＥＵ）５４のアレイを包含する。各ＥＵは、一実施形態では、異なる単一命令複数データ（ＳＩＭＤ）幅、すなわち、８、１６、または３２を有する複数のスレッドコンテキストをサポートすることができる。内部的に、クアッドパンプされた２つのパイプを有する。各パイプは、４ストリームＳＩＭＤプロセッサを有し、浮動小数点およびスカラ命令の両方を実行することができる。各計算クラスタはまた、共有テクスチャ・サンプリング・ユニット５６と、収集読み込みおよび分散書き込みを行うことができるロード／ストアユニット５８とを有する。さらに、共有機能は、図２に示すように、統一Ｌ２キャッシュ６０によってバックアップされた独自のプライベートキャッシュを有する。最後に、同様のアーキテクチャ世代は、さまざまな市場セグメント、すなわち、電話／タブレットソリューションから、ハイエンド・ゲーミング・コンピュータまでを満たそうとする。したがって、同じアーキテクチャ世代には、異なる数の計算クラスタおよびスライスを有する製品が存在する可能性がある。
【００１５】
アンコア６２は、キャッシュ／メモリインターフェース６１、最終レベルキャッシュ（ＬＬＣ）６４、およびメモリ６６を包含する。スライスと同様に、アンコア構成もまた、市場セグメントに依存する。例えば、ハイエンド構成は、埋込ＤＲＡＭ（ｅＤＲＡＭ）６８と共に最終レベルキャッシュを有することができ、一方、電話／タブレットのための構成は、メモリコントローラおよびシステムメモリを有することができる。
【００１６】
上記のように、現代のＧＰＵアーキテクチャは、頂点のすべての属性を取り出し、シェーディングする。しかしながら、頂点のほとんどは、ビューポイント錐台、または単純なカル破棄を介して拒否される。ここでの目的は、破棄の場合の作業を少なくすることであり、すなわち、三角形を破棄するかどうかを決定するために必要な属性を取り出してシェーディングするだけにすることである。ＧＰＵは、三角形がカリングされたかどうかを判定するために位置のみが必要とされるため、残りの属性よりも、位置のシェーディングを優先するべきである。
【００１７】
典型的に、シェーディング属性は、例として、位置、法線、色、テクスチャ座標を含む。いくつかの実施形態において、位置限定シェーディングを実装する場合、すべての属性を読み出してから位置属性を選別する代わりに、メモリから位置属性を読み取るだけでよい。いくつかの実施形態では、このことは、時間、計算サイクル、およびメモリ帯域幅を節約する。したがって、いくつかの実施形態において、頂点を取り出す間、位置属性のみが、カルパイプによって取り出される。
【００１８】
現在のＧＰＵアーキテクチャは、破棄された三角形に対して追加命令を実行している。動的命令と同様に、現在のＧＰＵアーキテクチャは、カリングされた頂点に対して多数の不要な、および／または使用された属性を取り出している。ＧＰＵは、残りの頂点属性よりも位置のシェーディングを優先する必要がある。
【００１９】
第１のステップは、頂点シェーダに埋め込まれた重要命令を優先して、位置属性を計算し、できる限り早くＧＰＵパイプラインでそれらを実行することである。第１に、ＧＰＵのジッタ／ドライバコンボが、重要命令を識別し、第２に、ジオメトリ段階のハードウェアパイプラインが、パイプ内のこれらの命令を早期に実行するよう調整される。これらの重要命令は、位置シェーダと呼ばれる。位置シェーダは、より少ない属性を取り出し、破棄される頂点に対してより少ない命令を実行するために使用される。
【００２０】
別の問題は、破棄される三角形シーケンスが、バースト特性を有し、バーストのサイズが、１０，０００個の三角形よりも大きくなる可能性があることである。この動作が暗示することは、長期間、ピクセルパイプがアイドル状態の間にジオメトリパイプが三角形を拒否してビジー状態になることである。さらに、動的命令の点から頂点シェーダの複雑さは、ピクセルシェーダよりも相当に少なく、したがって、計算クラスタもまた、長期実行カルシーケンスのために枯渇する。いくつかの実施形態において、本システムの有効性は、これらの長期実行破棄シーケンスを完全に隠すことによって、改善することができる。
【００２１】
位置シェーダの計算は、カルシーケンスを効果的に隠すことができるように、適時、さらに切り離される。メカニズムは、位置シェーダを「事前実行」し、長期実行カルシーケンスをスキップすることができるように、メインアプリケーションに代わって、待ち時間を効率的に消費する。要するに、位置限定シェーダは、性能利得を実現するだけでなく、いくつかの実施形態において、破棄される頂点に対する動作を少なくすることによって、電力を節約することができる。
【００２２】
破棄されるオブジェクトに対して位置属性のみを取り出してシェーディングすることは、本システムのエネルギーフットプリントを減らす。無駄な作業を省略することで、ピクセルパイプと計算クラスタをビジー状態にすることによって、システムの効率が向上する。
【００２３】
図３は、２つのジオメトリパイプ、すなわち、カルパイプ７０およびリプレイパイプ７２を有するアーキテクチャの簡易化したブロック図を示す。どちらのパイプも、同じアプリケーションの異なるインスタンスを実行し、各インスタンスは、完全に異なる描画呼び出しで動作することができる。カルパイプの役割は、三角形が拒否されたかどうかに関わらず、三角形の可視情報を計算することである。この情報は、破棄される三角形をスキップするためにリプレイパイプによって消費される、可視記録先入れ先出し（ＦＩＦＯ）７４に格納される。さらに、カルパイプは、位置属性のみを取り出して、シェーディングすることによって、この重要情報をより迅速に生成する。このようにして、どちらのパイプも共に動作して、カリングされた三角形シーケンスに対して要求される作業量を減らし、さらに、それらを効率的にスキップする。
【００２４】
図３に示すように、カルパイプは、リプレイパイプと比較して、浅く、薄い。位置属性をシェーディングするための位置限定ＶＦ−ＶＳ段階７６を有し、その後に、プリミティブアセンブリ７７、視錐台破棄段階７８、および単純カル段階８０が続く。言い換えると、カルパイプ内の命令セットは、位置属性を計算するのに必要な命令のみを含み、他のシェーダ属性を計算するための命令は有さない。この浅いパイプラインは、描写呼び出しの各三角形に対する可視命令を計算し、可視記録ＦＩＦＯ内に時間順でこの情報を記録する。記録された情報は、例えば、不合格三角形に対して０、合格三角形に対して１を使用して、ビット列として保持され、したがって、いくつかの実施形態において、使用する保管領域が少なくなる。カルパイプは、リプレイパイプが可視情報を枯渇させる前に、少なくとも１つの描写呼び出しを実行することができる。通常、３Ｄフレームは、所与のレンダーターゲットで動作する可変数のレンダーパスで構成される。フレームは、合成段階で終了し、レンダーターゲットに記録された中間情報がブレンドされて、最終フレームバッファが生成される。各レンダーパスは、任意の数の描画呼び出しを有し、実際には、オブジェクトの形状を定義する三角分割された表面の集合である。カルパイプは、描画呼び出しのためにピクセルのラスタライズならびにレンダリングを避けるため、先に実行して、適時に可視情報を計算することができる。しかしながら、描写呼び出しに対する情報が利用できない場合、リプレイパイプが停止する可能性がある。同様に、可視記録ＦＩＦＯに余裕がない場合、カルパイプが停止する可能性がある。
【００２５】
テッセレーションおよびジオメトリシェーダのような重要なパイプ段階のいくつかは、いくつかの実施形態において、カルパイプから欠落している。テッセレーション、ジオメトリシェーダ、またはその両方を必要とする描画呼び出しに生じることを尋ねることは当然である。カルパイプは、これらの状態を有効とする描画呼び出しをスキップして、リプレイパイプが、それらを通常の方法で処理し、すなわち、リプレイパイプは、これらの描画呼び出しに対する可視記録を期待していない。これを実現するためのドライバは、描画呼び出しコマンドにビットを設定し、すなわち、そのコマンドが、カルパイプの領域に入るかどうかを設定する。同様に、頂点限定描画呼び出しが、以前の描画呼び出しのピクセルシェーダを介して計算された情報を必要となる可能性がある。これは、アプリケーションではほとんど発生しないが、ドライバは、これらの種類の描画呼び出しがカルパイプを介して処理されないことを示すビットを依然として設定する。これらは、リプレイパイプが、そのパイプラインに破棄ロジック２３を依然として有する理由のいくつかであり、他の場合に対して、リプレイパイプが、可視三角形でのみ動作しており、それらに対して、破棄ロジックが要求されないためである。
【００２６】
最後に、一実施形態において、カルパイプに通常のクリッピング段階がないので、視錐台面と交差する三角形は合格として扱われ（すなわち、カルパイプで見えるようにマーキングすることができる）、次いで、リプレイパイプが、プリミティブクリッピングのすべてを処理する。
【００２７】
上記で説明したように、可視ＦＩＦＯは、描画呼び出しのすべての三角形に対してビット毎のシーケンスとして情報を、すなわち、不合格三角形に対して０、合格三角形に対して１を記録することができる。ＦＩＦＯに存在するこの情報は、カルパイプを介して生成され、破棄三角形をスキップするためにリプレイパイプによって消費される。したがって、ＦＩＦＯのサイズは、カルパイプが事前にどれだけ進むことができるかを左右し、したがって、アーキテクチャの性能に影響を与える可能性がある。
【００２８】
可視ＦＩＦＯは、２５６Ｋバイト分の頂点情報を記録することができ、いくつかの実施形態において、最適な性能をもたらすことができる。この情報は、以下に詳述する２つの状況によって制限される可能性がある。
ストリップケース：各頂点が、三角形である場合、２５６Ｋ／（８×１０２４）＝＞３２ＫＢを必要とする。
リストケース：３つの頂点が三角形を作る場合、２５６Ｋ／（３×８×１０２４）＝＞約１１ＫＢである。
【００２９】
場合によっては、描画呼び出しドライバは、可視記録を有効または無効にすることを選択することができる。例えば、描画呼び出しにほんのわずかな頂点しかない場合、可視記録と関連するオーバヘッドは、時間、メモリ帯域幅、および計算サイクルの点から可視記録のコストを正当化しない可能性がある。可視記録が特定の描画呼び出しに対して無効になる可能性のある他の例には、線、および描画呼び出しにおけるすべての頂点が可視となることが分かっている場合がある。
【００３０】
ローカルメモリは、ジオメトリパイプ内の破棄ロジックおよびピクセルをレンダリングするためのピクセルパイプの両方によって参照される頂点のシェーディング属性を記録するために使用される。前述のように、頂点は、位置、法線、色、テクスチャ座標などの任意の数の属性を有することができる。これらの属性は、頂点シェーダの助けによりシェーディングされ、その結果は、後に参照するために、ローカルメモリに記録される。記録された情報は、不要になったときにはいつでも、例えば、三角形がカリングロジックによって破棄されるか、または所与の三角形に対するすべてのピクセルがレンダリングされた場合に、逆参照される。このローカルメモリは、頂点に割り当てられたレジスタのフリーリストとすることができ、次いで、最終的に、必要ではない場合はプールに戻すことができる。
【００３１】
カルパイプの場合、ローカルメモリは、頂点の位置を計算するのに必要な属性を記録する。さらに、これらのローカルメモリレジスタの寿命は、すべての三角形がカルパイプの終端で破棄されるため、ベースモデルと比較して短い。しかしながら、ローカルメモリの容量は、アーキテクチャの性能に依然として影響を与える可能性がある。理想的な容量は、位置シェーダの実行待ち時間の関数であり、これは、位置シェーダに存在する動的命令の数に左右されるだけでなく、ピクセルシェーダや、リプレイパイプから出るシェーダなどの他のリソースによる計算クラスタの需要にも左右される。したがって、カルパイプが不適切なサイズである場合、これは、カルパイプの前方進行を、したがって、全体の性能を妨げる可能性がある。
【００３２】
カルパイプは、いくつかの実施形態において、６４ＫＢ相当のローカルメモリを使用して、適切にストリーミングすることができる。
【００３３】
このアーキテクチャは、破棄されたオブジェクトに対する位置属性のみを取り出してシェーディングし、次いで、それらをスキップすることによって、長期実行カルシーケンスを許容することができる。第１の態様は、作業量を減らすが、一方、第２の態様は、フレームをレンダリングする時間を減らしたので、システムのエネルギーフットプリントを減らすのに役立つ。
【００３４】
さらに、いくつかの実施形態において、位置限定シェーディングを無効にすることができる。例えば、描画呼び出しは、位置限定シェーディングを使用しないことを指示することができる。これにより、メモリ帯域幅、計算サイクル、および／または時間を節約することができる。したがって、本システムは、例えば、描画呼び出しベースによる描画呼び出しで、位置限定シェーディングを選択的に無効にし、次いで、有効にすることができる。
【００３５】
位置限定シェーディングを無効にする場合、リプレイパイプラインは、その描画呼び出しに対する任意のビット毎情報を検索せず、描画呼び出し全体に対する可視情報も存在しない。
【００３６】
カリング技術は、グラフィックプロセッサの性能を向上させることができる。標準技術は、バックフェースカリング、視錐台カリング、Ｚ−ｍａｘオクルージョンカリング、およびオクルージョンクエリを含む。通常は、カリング技術は、例えば、（グラフィックにおける視錐台とも呼ばれる）視野の充分外にある三角形を破棄することによって、画像をレンダリングするために行われる不要な作業の量を減らす。カリングテストのグラフィクパイプラインの実行を早くすることができれば、データを早期にパイプライン内で破棄することができるので、コストをさらに減らすことができる。Ｚｍａｘオクルージョンカリングは、位置限定シェーディング（ＰＯＳ）パイプラインを使用して早期に実行することができる。
【００３７】
保存的深度表現は、カルパイプにおいて（一実施形態においてピクセルの矩形領域を表すことができる）タイル毎に記録される。その場合、カルパイプを通るすべての三角形に対して、三角形が保存的深度表現に対して完全に塞がれているかどうかをテストすることができる。三角形が塞がれる場合、カリングされ、リプレイパイプまで残らないであろう。これにより、一部の作業における省電力および／または性能向上がもたらされる。
【００３８】
オクルージョンカリングを行うことができるようにするために、グラフィックプロセッサは、何らかの種類のオクルージョン表現を有する必要がある。この情報は、ピクセル毎の深度とすることができるが、保管コストを減らすために、粗くて控えめな表現を有するのが理にかなっているだろう。表現の種類の一つは、タイル毎に、最大深度（Ｚｍａｘ）および最小深度（Ｚｍｉｎ）スカラ値を格納することである。Ｚｍａｘは、タイル内の最大深度以上であり、Ｚｍｉｎは、タイル内の最小深度以下である。したがって、三角形が単一タイルの内側に完全に存在し、例えば、三角形の深度がタイルのＺｍａｘより大きい場合、その三角形は、すでにレンダリングされたジオメトリによって塞がれ、したがって、その三角形は、安全にカリングすることができる。Ｚｍｉｎは、深度テストが逆転された場合に有効である（例えば、ＯｐｅｎＧＬ深度関数：ＧＲＥＡＴＥＲまたはＧＥＱＵＡＬ）。各タイルは、深度表現を有することができ、この深度表現を実現する方法の１つは、上記のように、ＺｍｉｎおよびＺｍａｘを使用することである。
【００３９】
図４は、オクルージョンカリング８４をも含むように修正されたＰＯＳパイプライン８２である。単純なカリング（バックフェース、ディジェネレート、およびゼロカバレッジ）テストおよび視錐台カリング８６技術は、一般に、オクルージョンカリングより多くの三角形をカリングするため、オクルージョンカリング８４は、視錐台および単純カリングテスト８６の後に配置される。そのため、（視錐台カリングおよび単純カリングの後に）残った三角形に対し、タイルの深度表現に対する三角形オクルージョンテストが行われる。三角形が塞がれると、リプレイパイプでは処理されない。三角形が完全には塞がれていない場合、三角形は、タイルの深度表現を潜在的にアップデートすることができるオクルージョン情報を生成することができる。（位置限定シェーダ８２の上部に三角形で示される）入力三角形のいくつかは、ブロック９０の下の三角形上に×で示されるようにカリングすることができる。
【００４０】
オクルージョンアルゴリズムは、一度に１つのタイルで動作することができる。カルパイプは、三角形が重なるすべてのタイルを識別する粗いラスタライザを含むことができる。さらに、ラスタライザは、各タイル内の三角形の最小深度値および最大深度値の保存的境界を計算することができる。これらの境界は、Ｚtrimin、Ｚtrimaxと呼ばれる。タイルが三角形と重なると識別された場合、オクルージョンカリングアルゴリズムの１つに渡される。
【００４１】
この実装態様では、単一のＺtilemin、Ｚtilemaxペアが、タイル毎に格納される。いくつかの実施形態において、８×８ピクセルタイルは、カリング効率と帯域幅との間に良好なトレードオフをもたらすが、タイルは、任意の形状およびサイズとすることができる。画面上のすべてのタイルに対してＺtilemin、Ｚtilemax値を含むバッファは、早期ＨｉＺバッファ、またはｅＨｉＺバッファ８８と称され、現代のグラフィックプロセッサにおいて標準的なＨｉＺバッファと区別される。残りの三角形は、ブロック９０で示されるように、ビット毎に格納される。その場合、リプレイパイプでは、完全頂点シェーダが、残りの三角形に対して実行され（ブロック９２）、その後に、パイプの残りの部分９４が続く、すなわち、リプレイパイプラインは、本稿で上記したように動作する。
【００４２】
ＬＥＳＳ深度テストに関するアルゴリズムに関連して記述することができるが、任意の形式のテストに一般化する。アルゴリズムは、ｅＨｉＺバッファ内の三角形とタイルとの間で標準保存的カリングテストを実行することによって開始され、Ｚtrimin＞Ｚtilemaxである場合に、三角形をカリングすることができる。したがって、三角形が重なるすべてのタイルが上記のテストに合格した（すなわち、三角形が、三角形と重なるすべてのタイルに対する深度表現の背後にある）場合にのみ、三角形全体をカリングすることができる。
【００４３】
タイルがカリングされない場合、ｅＨｉＺバッファは、保存的にアップデートされる。この場合、Ｚｍｉｎは、Ｚtilemin＝min(Ｚtilemin，Ｚtrimin)としてアップデートされる。Ｚｍａｘ値は、タイルが完全にカバーされる場合にのみアップデートすることができる。これは、ラスタライザにおける保存的タイル−三角形オーバラップを使用して、またはタイル内のすべてのサンプルに対する内部テストを実行することによって、判定することができる。タイルが三角形によって完全にカバーされる場合、Ｚｍａｘは、Ｚtilemax＝min(Ｚtilemax，Ｚtrimax)としてアップデートされる。
【００４４】
拡張として、Ｚｍｉｎ／Ｚｍａｘ表現は、Ｚｃｕｌｌと呼ばれる単一基準値に減らすことができる。この場合、カリングテストを実行するのに必要な基準値（上記のＬＥＳＳテスト例では、Ｚｍａｘ）のみが維持される。深度テスト機能が、例えば、ＬＥＳＳからＧＲＥＡＴＥＲテストに極性を変える場合、Ｚｃｕｌｌ値は、遅れてクリアされて、テストが常に保存的であることを確実にする。したがって、現在のＺｃｕｌｌ値がＺｍｉｎまたはＺｍａｘ値を表すかどうかを示す、タイル毎に１ビットが格納される。
【００４５】
オクルージョンカリングアルゴリズムの別の可能な実装態様は、Ｚｍａｘマスク表現を使用することである。この表現は、１つだけではなく、各タイルに対するＺtilemax値のセットを格納することができる。インデックスビットのマスクは、Ｚtilemax値のいずれがタイル内の各ピクセルまたはサンプルに適用されるかを選択する。保存的深度テストが実行され、タイル内に入ってくる三角形をカリングすることができない場合、ＺtrimaxおよびＺtrimin値を使用して、マスクされた深度表現をアップデートする。しかしながら、マスクされた表現は、典型的に、最小値に対して有益ではなく、したがって、インデックスビットマスクによってアドレス指定されるのではなく、固定されたスクリーン空間領域に結びつけられる。
【００４６】
実際には、タイル毎に２つのＺtilemax値が、保管コストおよびカリング効率との間で最良のトレードオフをもたらす。タイル毎にＺtilemin値を保持することは、いくつかの作業負荷に対して有益である可能性があるが、片側テストは、典型的に、カリング可能性のほとんどを取得するのに充分である。
【００４７】
インデックスビットのマスクは、典型的に、コヒーレントであり、したがって、ほとんどの場合、タイルに対するメモリフットプリントを減らすよう圧縮することができる。任意のビットマスク圧縮アルゴリズムを使用することができるが、１つのアルゴリズムは、領域が一定であるかどうかを示すためにビットを使用して各４×２または２×４領域を格納し、次いで、一定領域に対しては単一ビット、または領域が一定でない場合には８ビットを使用することができる。タイルが所望のビット配分に圧縮できない場合、非可逆圧縮を使用することができる。一実装態様において、Ｚtilemax値が常に格納され、Ｚtilemax0＞Ｚtilemax1であることを保証する。したがって、１からゼロにインデックスマスク内のビットが変化することは常に安全である（ピクセルまたはサンプルを効率的にプッシュするが、依然として、保存的である）。所望のビット配分が満たされる場合、最小数のセットビットを有する４×２／２×４領域を選択することができ、領域全体がゼロにクリアされる。次いで、ビット配分が満たされるまで、第２の最小セットビットを有する領域でフローが継続する。
【００４８】
ピクセルシェーディングは、グラフィックパイプラインの全体の最も高価な部品の一つであり続け、実行ユニット（ＥＵ）（シェーダコアと呼ばれることもある）の圧力を減らすことが、性能を向上させ、より重要なことに、電力使用も減らすので、極めて重要である。
【００４９】
カルパイプでは、シーンの深度表現が記録され、この深度表現は、次いで、リプレイパイプラインのＨｉＺバッファをプライムするために使用される。このようにして、いくつかの三角形のピクセルシェーダ動作は、「将来の」（他の）三角形の深度を使用してカリングすることができる。
【００５０】
早期ＨｉＺバッファまたはｅＨｉＺ８８と呼ばれる深度表現は、図５に示すようなカルパイプに記録される。この表現には、多くの異なる選択がある。カルパイプは、まず、位置限定シェーダを行い、それに続いて、標準カリングテストを行う。残った三角形に対して、深度表現が生成され、場合によっては、ｅＨｉＺバッファにアップデートを送信する。ほとんどのグラフィックプロセッサでは、深度に基づいてラスタライズされたタイルを迅速にカリングするＨｉＺユニットが存在する。このパイプラインでは、ＨｉＺユニット９６は、リプレイパイプの内側にある。リプレイパイプがレンダーコマンドの処理を開始する前に、ＨｉＺバッファは、ｅＨｉＺバッファ８８内の深度表現を用いてプライムされる。この情報は、ｅＨｉＺフォーマットから、ＨｉＺのフォーマットに変換することができるが、理想的には、ユニットは、互換性のあるフォーマットを使用して、変換ステップを排除する。プライミングが生じた後、すべての非カリング三角形は、リプレイパイプラインで修正されずに処理され、カリングは、ＨｉＺ内のすでに開始された情報に基づいて実行される。
【００５１】
図４および図５のシーケンスは、ソフトウェア、ファームウェア、および／またはハードウェアで実装することができる。ソフトウェアおよびファームウェア実施形態において、磁気、光学、または半導体ストレージなどの、１つまたは複数の非一時的コンピュータ可読可能媒体に格納されるコンピュータ実行命令によって実装することができる。
【００５２】
ＨｉＺバッファは、（そのレンダーターゲットに対して次のレンダーコマンドストリームの全体、または少なくとも一部を使用してすでに生成された）ｅＨｉＺバッファで初期化されるので、閉塞領域は、閉塞ジオメトリが、閉塞するジオメトリの後にサブミットされた場合でもカリングされる。したがって、より多くのピクセルシェーダ動作を回避することができ、いくつかの実施形態において、全体的な性能が向上する。
【００５３】
ピクセルシェーダ命令は減らすことができ、いくつかの実施形態において、ピクセルシェーダカリングは、テクスチャ、深度バッファ、および色バッファ帯域幅をカリングに起因してさらに減らすことができる。
【００５４】
このピクセルシェーダオクルージョンカリングアルゴリズムがオクルージョンカリングへの拡張であるので、同じｅＨｉＺデータレイアウトおよびカリングアルゴリズムを、いくつかの実施形態において、使用することができる。
【００５５】
完全なサンプル毎の深度バッファ表現を、ｅＨｉＺバッファとして維持することができる。Ｚｍａｘマスクは、カリング効率と帯域幅との間の最良トレードオフをもたらすことができるが、サンプル毎の深度アルゴリズムを、いくつかの実施形態において、使用することができる。
【００５６】
サンプル毎の深度は、カルパイプラインに完全深度バッファロジックを追加することによって実装され、深度バッファ値は、サンプル毎にアップデートされる。しかしながら、重要な違いは、ピクセルシェーダがパイプラインで実行されず、したがって、深度値が、奨励されていない深度が使用された場合に、ｅＨｉＺバッファでアップデートされないことである。奨励されていない深度は、ピクセルシェーダが実行される前に深度テストを行うことができない場合のものである。これは、例えば、ピクセルシェーダがサンプル毎に深度値を計算する場合のものである。このことは、ｅＨｉＺバッファ内の値が、実際に、そのサンプルに対して、ＺｍｉｎまたはＺｍａｘのいずれかの境界であり、不可視ジオメトリの誤ったカリングを回避することができる、ということを意味する。これは、ＥＱＵＡＬ深度テストが、奨励されていない深度と組み合わされて使用される場合に見られる。
【００５７】
一例として、第１のパスで枝葉がレンダリングされ、ピクセルシェーダが破棄されると仮定する。ピクセルシェーダは断片を破棄するので、奨励されていない深度、およびｅＨｉＺバッファをアップデートすることができないことを予測することができる。しかしながら、後続のパスがＥＱＵＡＬテストを使用してライティングをレンダリングする場合、ｅＨｉＺバッファが前のパスでアップデートされなかったため、正確に等しいテストを実行することはできない。ｅＨｉＺサンプルの深度値がＺｍｉｎまたはＺｍａｘを追跡し、どの値がｅＨｉＺバッファに格納されているかに応じて、ｚ≦Ｚｍａｘまたはｚ≧Ｚｍｉｎとして保存的ＥＱＵＡＬテストを定義した場合、正確に等しいテストを実行することの不可能性が緩和される可能性がある。サンプルの深度値が、ＺｍｉｎまたはＺｍａｘを追跡するかどうかは、アップデートするために使用される深度関数の方向に依存する。例えば、ＬＥＳＳ関数は、サンプルの深度がＺｍａｘ値を表すことを意味する。
【００５８】
ＨｉＺバッファのプライミングは、すべてのサブミットされたレンダーコマンドの出力（または、結果）が影響を受けていない場合のみ可能である。いくつかの実施形態において、行われる最も注目すべき仮定は、Ｚバッファ内の値が、単調に増加または減少しなければならないことである。そうではない場合、Ｚバッファの最終段階は、カリングを表すものではない。さらに、ピクセルシェーダを実行するのに何らの副次的効果もないと仮定する。これは、アンオーダード・アクセス・ビュー（ｕｎｏｒｄｅｒｅｄ  ａｃｃｅｓｓ  ｖｉｅｗ、ＵＡＶ）アクセス、ピクセルシェーダからの出力深度、ピクセルシェーダの破棄、およびステンシル演算（ｓｔｅｎｃｉｌ  ｏｐｅｒａｔｉｏｎ）を含む。以下は、条件のリスト、および一実装態様において、それらの条件がどのように処理されるかを示す。
１．深度テストフリップ：深度関数が反転された場合（ＬＥＳＳ→ＧＲＥＡＴＥＲまたはＧＲＥＡＴＥＲ→ＬＥＳＳ）、ＨｉＺバッファは、一実施形態において、プライムされない。これは、フリップされた深度テストが、実際に、深度書き込みを有効にした場合にのみ真となる。
２．ピクセルシェーダ破棄／αテスト：これらの場合、ｅＨｉＺバッファはアップデートされない。というのも、カルパイプライン内の有効範囲／深度の完全な評価が実行可能ではないためである。しかしながら、既存のジオメトリに対してカリングを行うことができ、両面ｅＨｉＺフォーマットを使用した場合、境界を保存的にアップデートすることができる。例えば、ＬＥＳＳ関数テストを使用した場合、ＺｍｉｎではなくＺｍａｘがアップデートされる可能性がある。
３．アルファブレンディング：アルファブレンディングが有効である場合、アルファブレンディング演算に含まれるジオメトリをプライミングが誤ってカリングする可能性があるため、ｅＨｉＺバッファはアップデートされない。しかしながら、アルファブレンディングされたジオメトリは、ｅＨｉＺバッファのコンテンツに対してカリングされる可能性がある。
４．ピクセルシェーダ書き込み深度：保存的深度出力が使用される場合、ｅＨｉＺバッファがアップデートされるか、または（保存的深度が深度関数と同じ「方向」を有しているかどうかにより）カリングをプリミティブに対して実行することができる。しかしながら、一般的な場合、カリング、またはｅＨｉＺバッファのアップデートのどちらも実行されない可能性がある。
５．複数クリア：複数クリアまたはＺバッファ再利用が、プライミングを無効にすることによって、またはバッファがクリアされる前にリプレイパイプラインに各クリアの間で発行されたコマンドを実行させることによって、処理することができる。この解決策に関連するパイプラインストーリングは、Ｚバッファの仮想コピーを作成することによって対処することができる。
６．バッファ切り替え：色バッファ、または他の任意の出力バッファが、深度バッファをクリアすることなく切り替えられた場合、続行前に、リプレイパイプライン内のすべてのコマンドが実行される可能性があり、または代替的にプライミングが無効となる可能性がある。
７．ピクセルシェーダＵＡＶ：任意のピクセルシェーダがＵＡＶに書き込む場合、プライミングは使用されない。これは、ＵＡＶ書き込みを誤ってカリングする可能性があるためである。
【００５９】
図６は、一実施形態によるデータ処理システム１００のブロック図である。データ処理システム１００は、１つまたは複数のプロセッサ１０２と、１つまたは複数のグラフィックプロセッサ１０８とを含み、単一プロセッサ・デスクトップ・システム、マルチプロセッサ・ワークステーション・システム、または多数のプロセッサ１０２もしくはプロセッサコア１０７を有するサーバシステムとすることができる。一実施形態において、データ処理システム１００は、モバイル、ハンドヘルド、または埋込デバイスで使用するための、システムオンチップ集積回路（ＳＯＣ）である。
【００６０】
データ処理システム１００の一実施形態は、サーバベースのゲーミングプラットフォーム、ゲームおよびメディアコンソールを含むゲームコンソール、モバイル・ゲーミング・コンソール、ハンドヘルド・ゲーム・コンソール、またはオンライン・ゲーム・コンソールを含むか、あるいはそれらに組み込むことができる。一実施形態において、データ処理システム１００は、携帯電話、スマートフォン、タブレット・コンピューティング・デバイス、またはモバイル・インターネット・デバイスである。データ処理システム１００はまた、スマート・ウォッチ・ウェアラブル・デバイス、スマート・アイウェア・デバイス、拡張現実デバイス、または仮想現実デバイスなどの、ウェアラブルデバイスを含むか、それらと結合するか、またはそれらに組み込むことができる。一実施形態において、データ処理システム１００は、１つまたは複数のプロセッサ１０２と、１つまたは複数のグラフィックプロセッサ１０８によって生成されるグラフィカルインターフェースとを有する、テレビまたはセットトップボックスである。
【００６１】
１つまたは複数のプロセッサ１０２は、それぞれ、１つまたは複数のプロセッサコア１０７を含み、実行された場合に、システムおよびユーザソフトウェアに対する動作を実行する命令を処理する。一実施形態において、１つまたは複数のプロセッサコア１０７のそれぞれが、特定命令セット１０９を処理するよう構成される。命令セット１０９は、複合命令セットコンピューティング（ＣＩＳＣ）、縮小命令セットコンピューティング（ＲＩＳＣ）、または超長命令語（ＶＬＩＷ）を介したコンピューティングを容易にすることができる。複数のプロセッサコア１０７は、それぞれ、他の命令セットのエミュレーションを容易にするための命令を含むことができる異なる命令セット１０９を処理することができる。プロセッサコア１０７はまた、デジタル信号プロセッサ（ＤＳＰ）などの他の処理デバイスを含んでもよい。
【００６２】
一実施形態において、プロセッサ１０２は、キャッシュメモリ１０４を含む。アーキテクチャにより、プロセッサ１０２は、単一の内部キャッシュまたはマルチレベルの内部キャッシュを有することができる。一実施形態において、キャッシュメモリは、プロセッサ１０２のさまざまな構成要素の間で共有される。一実施形態において、プロセッサ１０２はまた、既知のキャッシュコヒーレンシ技術を使用してプロセッサコア１０７の間で共有することができる、外部キャッシュ（例えば、レベル３（Ｌ３）キャッシュまたは最終レベルキャッシュ（ＬＬＣ））（図示せず）を使用する。レジスタファイル１０６は、プロセッサ１０２に追加的に含まれ、さまざまな種類のデータを格納するためにさまざまな種類のレジスタ（例えば、整数レジスタ、浮動小数点レジスタ、状態レジスタ、および命令ポインタレジスタ）を含むことができる。いくつかのレジスタは、汎用レジスタとすることができ、他のレジスタは、プロセッサ１０２の設計に固有のものにすることができる。
【００６３】
プロセッサ１０２は、プロセッサバス１１０に結合され、プロセッサ１０２と、システム１００内の他の構成要素との間で、データ信号を送信する。システム１００は、メモリ・コントローラ・ハブ１１６および入出力（Ｉ／Ｏ）コントローラハブ１３０を含む、例示的「ハブ」システムアーキテクチャを使用する。メモリ・コントローラ・ハブ１１６は、メモリデバイスと、システム１００の他の構成要素との間の通信を容易にし、一方、Ｉ／Ｏコントローラハブ（ＩＣＨ）１３０は、ローカルＩ／Ｏバスを介してＩ／Ｏデバイスへの接続をもたらす。
【００６４】
メモリデバイス１２０は、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）デバイス、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）デバイス、フラッシュ・メモリ・デバイス、または処理メモリとして動作するための適切な性能を有する何らかの他のメモリデバイスとすることができる。メモリ１２０は、プロセッサ１０２が処理を実行する場合に使用するための、データ１２２および命令１２１を格納することができる。メモリ・コントローラ・ハブ１１６はまた、オプションの外部グラフィックプロセッサ１１２と結合し、プロセッサ１０２内の１つまたは複数のグラフィックプロセッサ１０８と通信して、グラフィックおよびメディア動作を実行することができる。
【００６５】
ＩＣＨ１３０は、周辺機器がメモリ１２０およびプロセッサ１０２に、高速Ｉ／Ｏバスを介して接続することを可能にする。Ｉ／Ｏ周辺機器は、オーディオコントローラ１４６、ファームウェアインターフェース１２８、無線トランシーバ１２６（例えば、Ｗｉ−Ｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標））、データ・ストレージ・デバイス１２４（例えば、ハードディスクドライブ、フラッシュメモリなど）、およびレガシー（例えば、パーソナルシステム２（ＰＳ／２））デバイスをシステムに接続するためのレガシーＩ／Ｏコントローラを含む。１つまたは複数のユニバーサル・シリアル・バス（ＵＳＢ）コントローラ１４２が、キーボードおよびマウス１４４の組み合わせなどの入力デバイスを接続する。ネットワークコントローラ１３４もまた、ＩＣＨ１３０に接続することができる。一実施形態において、高性能ネットワークコントローラ（図示せず）が、プロセッサバス１１０に接続する。
【００６６】
図７は、１つまたは複数のコア２０２Ａ〜Ｎ、統合メモリコントローラ２１４、および統合グラフィックプロセッサ２０８を有するプロセッサ２００の一実施形態のブロック図である。プロセッサ２００は、点線のボックスで示される追加コア２０２Ｎまでの、追加コア２０２Ｎを含む、追加コアを含むことができる。コア２０２Ａ〜Ｎのそれぞれは、１つまたは複数の内部キャッシュユニット２０４Ａ〜Ｎを含む。一実施形態において、各コアは、１つまたは複数の共有キャッシュユニット２０６へのアクセス権を有する。
【００６７】
内部キャッシュユニット２０４Ａ〜Ｎおよび共有キャッシュユニット２０６は、プロセッサ２００内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも１つのレベルの命令およびデータキャッシュか、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）などの１つまたは複数のレベルの共有中間レベルキャッシュか、または他のレベルのキャッシュを含むことができ、外部メモリの前の最高レベルのキャッシュは、最終レベルキャッシュ（ＬＬＣ）と分類される。一実施形態において、キャッシュ・コヒーレンシ・ロジックは、さまざまなキャッシュユニット２０６および２０４Ａ〜Ｎの間のコヒーレンシを維持する。
【００６８】
プロセッサ２００はまた、１つまたは複数のバス・コントローラ・ユニット２１６のセットとシステムエージェント２１０とを含むことができる。１つまたは複数のバス・コントローラ・ユニットは、１つまたは複数の周辺構成機器相互接続バス（例えば、ＰＣＩ、ＰＣＩ  Ｅｘｐｒｅｓｓ）などの、周辺機器用バスのセットを管理する。システムエージェント２１０は、さまざまなプロセッサ構成要素に対する管理機能をもたらす。一実施形態において、システムエージェント２１０は、さまざまな外部メモリデバイス（図示せず）へのアクセスを管理するための１つまたは複数の統合メモリコントローラ２１４を含む。
【００６９】
一実施形態において、コア２０２Ａ〜Ｎの１つまたは複数は、同時マルチスレッディングに対するサポートを含む。そのような実施形態において、システムエージェント２１０は、マルチスレッド処理の間、コア２０２Ａ〜Ｎを調整し、動作させるための構成要素を含む。システムエージェント２１０は、電力コントロールユニット（ＰＣＵ）をさらに含むことができ、ＰＣＵは、コア２０２Ａ〜Ｎの間およびグラフィックプロセッサ２０８の電力状態を管理するためのロジックおよび構成要素を含む。
【００７０】
プロセッサ２００は、グラフィック処理演算を実行するためのグラフィックプロセッサ２０８をさらに含む。一実施形態において、グラフィックプロセッサ２０８は、共有キャッシュユニット２０６のセットと、１つまたは複数の統合メモリコントローラ２１４を含むシステムエージェント２１０と結合する。一実施形態において、ディスプレイコントローラ２１１は、グラフィックプロセッサ２０８に接続され、グラフィックプロセッサの出力が１つまたは複数の接続されたディスプレイに送られる。ディスプレイコントローラ２１１は、少なくとも１つの相互接続を介してグラフィックプロセッサと結合する別々のモジュールとすることができ、またはグラフィックプロセッサ２０８もしくはシステムエージェント２１０内に統合することができる。
【００７１】
一実施形態において、リングベース相互接続ユニット２１２を使用して、プロセッサ２００の内部構成要素を接続するが、ポイント・ツー・ポイント相互接続、スイッチ相互接続、または当分野で既知の技術を含む他の技術などの、代替相互接続ユニットを使用してもよい。一実施形態において、グラフィックプロセッサ２０８は、Ｉ／Ｏリンク２１３を介して、リング相互接続２１２と接続する。
【００７２】
例示的Ｉ／Ｏリンク２１３は、さまざまなプロセッサ構成要素と、ｅＤＲＡＭなどの高性能埋込メモリモジュール２１８との間の通信を容易にするオンパッケージＩ／Ｏ相互接続を含む、さまざまな種類のＩ／Ｏ相互接続の少なくとも１つを表す。一実施形態において、コア２０２−Ｎのそれぞれおよびグラフィックプロセッサ２０８は、共有最終レベルキャッシュとして埋込メモリモジュール２１８を使用する。
【００７３】
一実施形態において、コア２０２Ａ〜Ｎは、同じ命令セットアーキテクチャを実行する同質コアである。別の実施形態において、コア２０２Ａ〜Ｎは、命令セットアーキテクチャ（ＩＳＡ）の点から異質であり、コア２０２Ａ〜Ｎの間の１つまたは複数は、第１の命令セットを実行し、一方、他のコアの少なくとも１つは、第１の命令セットのサブセットまたは異なる命令セットを実行する。
【００７４】
プロセッサ２００は、例えば、相補型金属酸化物半導体（ＣＭＯＳ）、バイポーラ接合／相補型金属酸化膜半導体（ＢｉＣＭＯＳ）、またはＮ型金属酸化膜半導体論理（ＮＭＯＳ）などの、いくつかの処理技術を使用して、１つもしくは複数の基板の一部、または１つもしくは複数の基板上に実装することができる。さらに、プロセッサ２００は、１つもしくは複数のチップ上に実現することができ、または他の構成要素に加えて、図示した構成要素を有するシステムオンチップ（ＳＯＣ）集積回路として実現することができる。
【００７５】
図８は、離散型グラフィック処理装置とすることができるか、または複数の処理コアと統合されたグラフィックプロセッサとすることができる、グラフィックプロセッサ３００の一実施形態のブロック図である。一実施形態において、グラフィックプロセッサは、メモリマップＩ／Ｏインターフェースを介して、グラフィックプロセッサ上のレジスタと、プロセッサメモリに配置されたコマンドを介して通信する。グラフィックプロセッサ３００は、メモリにアクセスするためのメモリインターフェース３１４を含む。メモリインターフェース３１４は、ローカルメモリ、１つまたは複数の内部キャッシュ、１つまたは複数の共有外部キャッシュ、および／またはシステムメモリへのインターフェースとすることができる。
【００７６】
グラフィックプロセッサ３００はまた、ディスプレイ出力データをディスプレイデバイス３２０に送るためのディスプレイコントローラ３０２を含む。ディスプレイコントローラ３０２は、ディスプレイに対する１つまたは複数のオーバーレイプレーンと、ビデオまたはユーザインターフェース要素の複数の層の合成のためのハードウェアを含む。一実施形態において、グラフィックプロセッサ３００は、ビデオ・コーデック・エンジン３０６を含み、メディアを、１つまたは複数のメディア・エンコーディング・フォーマットに、そのようなフォーマットから、またはそのようなフォーマットの間で、エンコード、デコード、またはトランスコードし、そのようなフォーマットは、これらに限定されないが、ＭＰＥＧ−２などの動画専門家組織（ＭＰＥＧ）フォーマット、Ｈ．２６４／ＭＰＥＧ−４  ＡＶＣなどの高度動画像圧縮符号化（ＡＶＣ）フォーマット、ならびに米国テレビ技術者協会（ＳＭＰＴＥ）４２１Ｍ／ＶＣ−１、およびＪＰＥＧなどのジョイント・フォトグラフィック・エキスパート・グループ（ＪＰＥＧ）フォーマット、およびモーションＪＰＥＧ（ＭＪＰＥＧ）フォーマットなどを含む。
【００７７】
一実施形態において、グラフィックプロセッサ３００は、例えば、ビット境界ブロック転送を含む２次元（２Ｄ）ラスタライザ動作を実行するブロック画像転送（ＢＬＩＴ）エンジン３０４を含む。しかしながら、一実施形態において、２Ｄグラフィック処理動作は、グラフィック処理エンジン（ＧＰＥ）３１０の１つまたは複数の構成要素を使用して実行される。グラフィック処理エンジン３１０は、３次元（３Ｄ）グラフィック動作およびメディア動作を含むグラフィック動作を実行するための計算エンジンである。
【００７８】
ＧＰＥ３１０は、３Ｄプリミティブ形状（例えば、長方形、三角形など）に作用する処理機能を使用して三次元画像およびシーンをレンダリングするなどの３Ｄ動作を実行するための３Ｄパイプライン３１２を含む。３Ｄパイプライン３１２は、要素内でさまざまなタスクを実行する、および／または実行スレッドを３Ｄ／メディアサブシステム３１５に生成する、プログラマブル、固定機能要素を含む。３Ｄパイプライン３１２は、メディア演算を実行するために使用することができるが、ＧＰＥ３１０の実施形態はまた、ビデオ後処理および画像強調などのメディア演算を実行するために特に使用されるメディアパイプライン３１６も含む。
【００７９】
一実施形態において、メディアパイプライン３１６は、固定機能またはプログラマブル・ロジック・ユニットを含み、ビデオ・デコード・アクセラレーション、ビデオデインターレーシング、およびビデオ・エンコード・アクセラレーションなどの、ビデオ・コーデック・エンジン３０６の代わりに、またはビデオ・コーデック・エンジン３０６の代理として、１つまたは複数の専門メディア演算を実行する。一実施形態において、メディアパイプライン３１６は、３Ｄ／メディアサブシステム３１５で実行するためのスレッドを生成するためのスレッド生成ユニットをさらに含む。生成されたスレッドは、３Ｄ／メディアサブシステムに含まれる１つまたは複数のグラフィック実行ユニットでのメディア演算のための計算を実行する。
【００８０】
３Ｄ／メディアサブシステム３１５は、３Ｄパイプライン３１２およびメディアパイプライン３１６によって生成されるスレッドを実行するためのロジックを含む。一実施形態において、パイプラインは、スレッド実行要求を、３Ｄ／メディアサブシステム３１５に送信する。ここで、３Ｄ／メディアサブシステム３１５は、さまざまな要求を調停して、利用可能なスレッド実行リソースにディスパッチするためのスレッド・ディスパッチ・ロジックを含む。実行リソースは、グラフィック実行ユニットのアレイを含み、３Ｄおよびメディアスレッドを処理する。一実施形態において、３Ｄ／メディアサブシステム３１５は、スレッド命令およびデータ用の１つまたは複数の内部キャッシュを含む。一実施形態において、本サブシステムはまた、レジスタおよびアドレス可能メモリを含む共有メモリを含み、スレッド間のデータを共有し、出力データを格納する。
【００８１】
図９は、グラフィックプロセッサ用のグラフィック処理エンジン４１０の一実施形態のブロック図である。一実施形態において、グラフィック処理エンジン（ＧＰＥ）４１０は、図８に示したＧＰＥ３１０の一バージョンである。ＧＰＥ４１０は、３Ｄパイプライン４１２とメディアパイプライン４１６とを含み、そのそれぞれが、図８の３Ｄパイプライン３１２とメディアパイプライン３１６との実装態様と違うものとすることができ、または同じものとすることができる。
【００８２】
一実施形態において、ＧＰＥ４１０は、コマンドストリーマ４０３と結合する。ここで、コマンドストリーマ４０３は、コマンドストリームを、ＧＰＥ  ３Ｄおよびメディアパイプライン４１２、４１６にもたらす。コマンドストリーマ４０３は、システムメモリとすることができるメモリ、または内部キャッシュメモリおよび共有キャッシュメモリの１つまたは複数に結合される。コマンドストリーマ４０３は、コマンドをメモリから受信し、そのコマンドを、３Ｄパイプライン４１２および／またはメディアパイプライン４１６に送信する。３Ｄおよびメディアパイプラインは、各パイプライン内のロジックを介して演算を実行することによって、または１つもしくは複数の実行スレッドを実行ユニットアレイ４１４にディスパッチすることによって、コマンドを処理する。一実施形態において、実行ユニットアレイ４１４は、スケーラブルであり、アレイは、ＧＰＥ４１０の目標電力および性能レベルに基づく可変数の実行ユニットを含む。
【００８３】
サンプリングエンジン４３０は、メモリ（例えば、キャッシュメモリまたはシステムメモリ）および実行ユニットアレイ４１４と結合する。一実施形態において、サンプリングエンジン４３０は、実行アレイ４１４が、グラフィックおよびメディアデータをメモリから読み込むことを可能にするスケーラブル実行ユニットアレイ４１４に対するメモリ・アクセス・メカニズムをもたらす。一実施形態において、サンプリングエンジン４３０は、メディアに対して特殊な画像サンプリング演算を実行するためのロジックを含む。
【００８４】
サンプリングエンジン４３０内の特殊なメディアサンプリングロジックは、デノイズ／デインターレースモジュール４３２、動き推定モジュール４３４、ならびに画像スケーリングおよびフィルタリングモジュール４３６を含む。デノイズ／デインターレースモジュール４３２は、デコードされたビデオデータ上で、デノイズまたはデインターレースアルゴリズムの１つまたは複数を実行するためのロジックを含む。デインターレースロジックは、インターレース・ビデオ・コンテンツの交番フィールドを、ビデオの単一フレームに結合する。デノイズロジックは、データノイズをビデオおよび画像データから減らすか、または除去する。一実施形態において、デノイズロジックおよびデインターレースロジックは、モーションアダプティブであり、ビデオデータで検出された動きの量に基づいて空間的または時間的フィルタリングを使用する。一実施形態において、デノイズ／デインターレースモジュール４３２は、（例えば、動き推定エンジン４３４内に）専用の動き検出ロジックを含む。
【００８５】
動き推定エンジン４３４は、ビデオデータ上で動きベクトル推定および予測などのビデオアクセラレーション機能を実行することによりビデオ演算のためのハードウェアアクセラレーションをもたらす。動き推定エンジンは、連続ビデオフレームの間の画像データの変換を描写する動きベクトルを判定する。一実施形態において、グラフィック・プロセッサ・メディア・コーデックは、ビデオ動き推定エンジン４３４を使用して、普通なら、汎用プロセッサを用いて実行するための計算集約的である可能性がある、マイクロ・ブロック・レベルでビデオでの演算を実行する。一実施形態において、動き推定エンジン４３４は、ビデオデコード、およびビデオデータ内の動きの方向または大きさに敏感または適応する処理機能を補助するために、グラフィックプロセッサ構成要素のために一般に利用可能である。
【００８６】
画像スケーリングおよびフィルタリングモジュール４３６は、画像処理演算を実行し、生成された画像およびビデオの視覚的品質を向上させる。一実施形態において、スケーリングおよびフィルタリングモジュール４３６は、データを実行ユニットアレイ４１４にもたらす前に、サンプリング演算の間に、画像およびビデオを処理する。
【００８７】
一実施形態において、グラフィック処理エンジン４１０は、グラフィックサブシステムがメモリにアクセスするための追加メカニズムを提供する、データポート４４４を含む。データポート４４４は、レンダーターゲット書き込み、一定バッファ読み込み、スクラッチ・メモリ・スペース読み込み／書き込み、およびメディア・サーフェス・アクセスを含む動作に対するメモリアクセスを容易にする。一実施形態において、データポート４４４は、メモリへのアクセスをキャッシュするためのキャッシュ・メモリ・スペースを含む。キャッシュメモリは、単一データキャッシュとすることができ、またはデータポートを介してメモリにアクセスする複数のサブシステムのために複数のキャッシュ（例えば、レンダー・バッファ・キャッシュ、定数バッファキャッシュなど）に分けることができる。一実施形態において、実行ユニットアレイ４１４内の実行ユニットで実行されるスレッドは、グラフィック処理エンジン４１０のサブシステムのそれぞれと結合するデータ配信相互接続を介してメッセージを交換することによって、データポートと通信する。
【００８８】
図１０は、グラフィックプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックプロセッサは、リング相互接続５０２、パイプラインフロントエンド５０４、メディアエンジン５３７、およびグラフィックコア５８０Ａ〜Ｎを含む。リング相互接続５０２は、グラフィックプロセッサを、他のグラフィックプロセッサまたは１つもしくは複数の汎用プロセッサコアを含む、他の処理ユニットに結合する。一実施形態において、グラフィックプロセッサは、マルチコア処理システム内で統合された多くのプロセッサの１つである。
【００８９】
グラフィックプロセッサは、リング相互接続５０２を介してコマンドのバッチを受信する。入力コマンドは、パイプラインフロントエンド５０４内のコマンドストリーマ５０３によって解釈される。グラフィックプロセッサは、スケーラブル実行ロジックを含み、３Ｄジオメトリ処理およびメディア処理を、グラフィックコア５８０Ａ〜Ｎを介して実行する。３Ｄジオメトリ処理コマンドのために、コマンドストリーマ５０３は、コマンドをジオメトリパイプライン５３６に供給する。少なくともいくつかのメディア処理コマンドに対し、コマンドストリーマ５０３は、メディアエンジン５３７と結合しているビデオフロントエンド５３４にコマンドを供給する。メディアエンジン５３７は、ビデオおよび画像を後処理するためのビデオ品質エンジン（ＶＱＥ）５３０と、ハードウェア加速メディア・データ・エンコードおよびデコードをもたらすためのマルチ・フォーマット・エンコード／デコード（ＭＦＸ）５３３エンジンとを含む。ジオメトリパイプライン５３６およびメディアエンジン５３７は、それぞれ、少なくとも１つのグラフィックコア５８０Ａによってもたらされるスレッド実行リソースに対する実行スレッドを生成する。
【００９０】
グラフィックプロセッサは、モジュラコア５８０Ａ〜Ｎ（コアスライスと称することもある）を特徴とする、スケーラブルスレッド実行リソースを含み、モジュラコア５８０Ａ〜Ｎは、それぞれ、複数のサブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎ（コアサブスライスと称することもある）を有する。グラフィックプロセッサは、任意の数のグラフィックコア５８０Ａ〜５８０Ｎを有することができる。一実施形態において、グラフィックプロセッサは、少なくとも第１のサブコア５５０Ａと第２のコアサブコア５６０Ａとを有するグラフィックコア５８０Ａを含む。他の実施形態において、グラフィックプロセッサは、単一のサブコア（例えば、５５０Ａ）を有する低電力プロセッサである。一実施形態において、グラフィックプロセッサは、複数のグラフィックコア５８０Ａ〜Ｎを含み、複数のグラフィックコア５８０Ａ〜Ｎはそれぞれ、第１のサブコア５５０Ａ〜Ｎのセットと、第２のサブコア５６０Ａ〜Ｎのセットとを含む。第１のサブコア５５０Ａ〜Ｎのセット内の各サブコアは、実行ユニット５５２Ａ〜Ｎおよびメディア／テクスチャサンプラ５５４Ａ〜Ｎの少なくとも第１のセットを含む。第２のサブコア５６０Ａ〜Ｎのセット内の各サブコアは、実行ユニット５６２Ａ〜Ｎおよびサンプラ５６４Ａ〜Ｎの少なくとも第２のセットを含む。一実施形態において、各サブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎは、共有リソース５７０Ａ〜Ｎのセットを共有する。一実施形態において、共有リソースは、共有キャッシュメモリおよびピクセル演算ロジックを含む。グラフィックプロセッサのさまざまな実施形態には、他の共有リソースも含むことができる。
【００９１】
図１１は、グラフィック処理エンジンの一実施形態で使用される処理要素のアレイを含むスレッド実行ロジック６００を示す。一実施形態において、スレッド実行ロジック６００は、ピクセルシェーダ６０２、スレッドディスパッチャ６０４、命令キャッシュ６０６、複数の実行ユニット６０８Ａ〜Ｎを含むスケーラブル実行ユニット、サンプラ６１０、データキャッシュ６１２、およびデータポート６１４を含む。一実施形態において、含まれる構成要素は、各構成要素にリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック６００は、命令キャッシュ６０６、データポート６１４、サンプラ６１０、および実行ユニットアレイ６０８Ａ〜Ｎの１つまたは複数を通る、システムメモリまたはキャッシュメモリなどのメモリへの１つまたは複数の接続を含む。一実施形態において、各実行ユニット（例えば、６０８Ａ）は、複数の同時スレッドを実行して、各スレッドに対して並列に複数のデータ要素を実行することができる個別のベクトルプロセッサである。実行ユニットアレイ６０８Ａ〜Ｎは、任意の数の個別の実行ユニットを含む。
【００９２】
一実施形態において、実行ユニットアレイ６０８Ａ〜Ｎは、「シェーダ」プログラムを実行するために主に使用される。一実施形態において、アレイ６０８Ａ〜Ｎ内の実行ユニットは、多くの標準３Ｄグラフィックシェーダ命令に対するネイティブサポートを含む命令セットを実行し、グラフィックライブラリからのシェーダプログラム（例えば、Ｄｉｒｅｃｔ３ＤおよびＯｐｅｎＧＬ）が、最小トランザクションで実行される。実行ユニットは、頂点およびジオメトリ処理（例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ）、ピクセル処理（例えば、ピクセルシェーダ、フラグメントシェーダ）、および汎用処理（例えば、計算およびメディアシェーダ）をサポートする。
【００９３】
実行ユニットアレイ６０８Ａ〜Ｎ内の各実行ユニットは、データ要素のアレイ上で動作する。データ要素の数は、「実行サイズ」、または命令に対するチャネルの数である。実行チャネルは、データ要素アクセス、マスキング、および命令内のフローコントロールのための論理的な実行単位である。チャネルの数は、特定のグラフィックプロセッサに対する物理的ＡＬＵまたはＦＰＵの数とは無関係であってもよい。実行ユニット６０８Ａ〜Ｎは、整数および浮動小数点データタイプをサポートする。
【００９４】
実行ユニット命令セットは、単一命令複数データ（ＳＩＭＤ）命令を含む。さまざまなデータ要素をパック・データ・タイプとしてレジスタに格納することができ、実行ユニットは、要素のデータサイズに基づいてさまざまな要素を実行する。例えば、２５６ビット幅ベクトルで動作する場合、ベクトルの２５６ビットはレジスタに格納され、実行ユニットは、４つの別々の６４ビットパックデータ要素（クワッドワード（ＱＷ）サイズデータ要素）、８つの別々の３２ビットパックデータ要素（ダブルワード（ＤＷ）サイズデータ要素）、１６の別々の１６ビットパックデータ要素（ワード（Ｗ）サイズデータ要素）、または３２の別々の８ビットデータ要素（バイト（Ｂ）サイズデータ要素）としてベクトルで動作する。しかしながら、さまざまなベクトル幅およびレジスタサイズが可能である。
【００９５】
１つまたは複数の命令キャッシュ（例えば、６０６）が、実行ユニットに対するスレッド命令をキャッシュするため、スレッド実行ロジック６００に含まれる。一実施形態において、１つまたは複数のデータキャッシュ（例えば、６１２）が、スレッド実行中にスレッドデータをキャッシュするために含まれる。サンプラ６１０は、３Ｄ演算のためのテクスチャサンプリング、およびメディア演算のためのメディアサンプリングを提供するために含まれる。一実施形態において、サンプラ６１０は、専門的なテクスチャまたはメディアサンプリング機能を含み、サンプリングされたデータを実行ユニットにもたらす前に、サンプリング処理中に、テクスチャまたはメディアデータを処理する。
【００９６】
実行中、グラフィックおよびメディアパイプラインは、スレッド開始要求を、スレッド実行ロジック６００に、スレッド生成およびディスパッチロジックを介して送信する。スレッド実行ロジック６００は、グラフィックおよびメディアパイプラインからのスレッド開始要求を調停し、要求されたスレッドを１つまたは複数の実行ユニット６０８Ａ〜Ｎ上でインスタンス化する、ローカルスレッドディスパッチャ６０４を含む。例えば、ジオメトリパイプライン（例えば、図６の５３６）は、頂点処理、テッセレーション、またはジオメトリ処理スレッドをスレッド実行ロジック６００にディスパッチする。スレッドディスパッチャ６０４はまた、実行中のシェーダプログラムからの実行時スレッド生成要求を処理することもできる。
【００９７】
ジオメトリオブジェクトのグループが処理されてピクセルデータにラスタライズされると、ピクセルシェーダ６０２が呼び出されて、出力情報をさらに計算し、結果が出力面に書き込まれる（例えば、色バッファ、深度バッファ、ステンシルバッファなど）。一実施形態において、ピクセルシェーダ６０２は、ラスタライズされたオブジェクトにわたって補完されるさまざまな頂点属性の値を計算する。次いで、ピクセルシェーダ６０２は、ＡＰＩ提供のピクセル・シェーダ・プログラムを実行する。ピクセル・シェーダ・プログラムを実行するために、ピクセルシェーダ６０２は、スレッドディスパッチャ６０４を介して実行ユニット（例えば、６０８Ａ）にスレッドをディスパッチする。ピクセルシェーダ６０２は、サンプラ６１０内のテクスチャ・サンプリング・ロジックを使用して、メモリに格納されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータおよび入力ジオメトリデータでの算術計算は、各ジオメトリフラグメントに対するピクセル色データを計算するか、またはさらなる処理から１つまたは複数のピクセルを破棄する。
【００９８】
一実施形態において、データポート６１４は、スレッド実行ロジック６００がグラフック処理出力パイプラインで処理するためにメモリに処理されたデータを出力するためのメモリアクセス機能を提供する。一実施形態において、データポート６１４は、１つまたは複数のキャッシュメモリ（例えば、データキャッシュ６１２）を含むか、またはそのようなキャッシュメモリに結合し、データポートを介してメモリアクセスするためのデータをキャッシュする。
【００９９】
図１２は、一実施形態によるグラフィックプロセッサ実行ユニット命令フォーマットを示すブロック図である。一実施形態において、グラフィックプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線ボックスは、一般に実行ユニット命令に含まれる構成要素を示し、一方、破線は、オプションであるか、または命令のサブセットにのみ含まれる構成要素を含む。図示した命令フォーマットは、命令が処理されると命令デコードから生じるマイクロオペレーションとは対照的に、それらが実行ユニットに供給される命令であるという点で、マクロ命令である。
【０１００】
一実施形態において、グラフィックプロセッサ実行ユニットは、１２８ビットフォーマット７１０で命令をネイティブにサポートする。選択された命令、命令オプション、およびオペランドの数に基づいて、いくつかの命令に対して、６４ビットの圧縮された命令フォーマット７３０が利用可能である。ネイティブの１２８ビットフォーマット７１０は、すべての命令オプションへのアクセスを提供し、一方、いくつかのオプションおよび動作は、６４ビットフォーマット７３０に制限される。６４ビットフォーマット７３０で利用可能なネイティブ命令は、実施形態によって異なる。一実施形態において、命令は、インデックスフィールド７１３内のインデックス値のセットを使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブル出力を使用して、１２８ビットフォーマット７１０のネイティブ命令を再構成する。
【０１０１】
各フォーマットに対して、命令オペコード７１２は、実行ユニットが実行すべき動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって並列に各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素またはピクチャ要素を表す各色チャネルにわたって同時加算演算を実行する。デフォルトでは、実行ユニットは、各命令をオペランドのすべてのデータチャネルにわたって実行する。命令コントロールフィールド７１２は、チャネル選択（例えば、条件付き実行制御）およびデータチャネル・オーダー（例えば、スウィズル）などの特定の実行オプションに対する制御を可能にする。１２８ビット命令７１０の場合、実行サイズフィールド７１６は、並列に実行されるデータチャネルの数を制限する。実行サイズフィールド７１６は、６４ビット圧縮命令フォーマット７３０で使用するために利用可能ではない。
【０１０２】
いくつかの実行ユニット命令は、２つのソースオペランド、ｓｒｃ０  ７２０、ｓｒｃ１  ７２２、および１つの宛先７１８を含む最大３つのオペランドを有する。一実施形態において、実行ユニットは、宛先のうちの１つが暗示されるデュアル宛先命令をサポートする。データ操作命令は、第３のソースオペランド（例えば、ＳＲＣ２  ７２４）を有することができ、命令オペコードＪＪ１２は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される即（例えば、ハードコードされた）値とすることができる。
【０１０３】
一実施形態において、オペコード・ビット・フィールドに基づいて命令をグループ化し、オペコードデコード７４０を単純化する。８ビットのオペコードの場合、ビット４、５、および６は、実行ユニットがオペコードのタイプを判定することを可能にする。示した正確なオペコードグループは例示的なものである。一実施形態において、移動およびロジック・オペコード・グループ７４２は、データ移動およびロジック命令（例えば、ｍｏｖ、ｃｍｐ）を含む。移動およびロジックグループ７４２は、移動命令が００００ｘｘｘｘｂ（例えば０ｘ０ｘ）の形式であり、ロジック命令が０００１ｘｘｘｘｂ（例えば、０ｘ０１）の形式である、５つの最上位ビット（ＭＳＢ）を共有する。フロー制御命令グループ７４４（例えば、ｃａｌｌ、ｊｍｐ）は、００１０ｘｘｘｘｂ（例えば、０ｘ２０）の形式の命令を含む。その他の命令群７４６は、００１１ｘｘｘｘｂ（例えば、０ｘ３０）の形式の同期命令（例えば、ｗａｉｔ、ｓｅｎｄ）を含む命令の混合を含む。並列数学命令グループ７４８は、０１００ｘｘｘｘｂ（例えば、０ｘ４０）の形式のコンポーネント単位の算術命令（例えば、ａｄｄ、ｍｕｌ）を含む。並列数学グループ７４８は、データチャネルにわたって並列に算術演算を実行する。ベクトル数学グループ７５０は、０１０１ｘｘｘｘｂ（例えば、０ｘ５０）の形式の算術命令（例えば、ｄｐ４）を含む。ベクトル数学グループは、ベクトルオペランドでのドット積演算などの演算を実行する。
【０１０４】
図１３は、グラフィックパイプライン８２０、メディアパイプライン８３０、ディスプレイエンジン８４０、スレッド実行ロジック８５０、およびレンダー出力パイプライン８７０を含むグラフィックプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックプロセッサは、１つまたは複数の汎用処理コアを含むマルチコア処理システム内のグラフィックプロセッサである。グラフィックプロセッサは、１つまたは複数のコントロールレジスタ（図示せず）へのレジスタ書き込みによって、またはリング相互接続８０２を介してグラフィックスプロセッサに発行されるコマンドを介して、制御される。リング相互接続８０２は、グラフィックプロセッサを、他のグラフィックプロセッサまたは汎用プロセッサなどの、他の処理コンポーネントに結合する。リング相互接続からのコマンドは、グラフィックパイプライン８２０またはメディアパイプライン８３０の個々のコンポーネントに命令を供給するコマンドストリーマ８０３によって解釈される。
【０１０５】
コマンドストリーマ８０３は、頂点データをメモリから読み込み、コマンドストリーマ８０３によって提供される頂点処理コマンドを実行する、頂点フェッチャ８０５コンポーネントの動作を指示する。頂点フェッチャ８０５は、頂点シェーダ８０７に頂点データを提供し、頂点シェーダ８０７は、各頂点に座標空間変換およびライティング演算を実行する。頂点フェッチャ８０５および頂点シェーダ８０７は、スレッドディスパッチャ８３１を介して実行スレッドを実行ユニット８５２Ａ、８５２Ｂにディスパッチすることによって、頂点処理命令を実行する。
【０１０６】
一実施形態において、実行ユニット８５２Ａ、８５２Ｂは、グラフィックおよびメディア演算を実行するための命令セットを有するベクトルプロセッサのアレイである。実行ユニット８５２Ａ、８５２Ｂは、各アレイに特有の、またはアレイの間で共有される、取り付けられたＬ１キャッシュ８５１を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティション内のデータおよび命令を含むよう区分された単一キャッシュとして構成することができる。
【０１０７】
一実施形態において、グラフィックパイプライン８２０は、３Ｄオブジェクトのハードウェア加速テッセレーションを実行するためのテッセレーションコンポーネントを含む。プログラマブル・ハル・シェーダ８１１は、テッセレーション演算を構成する。プログラマブル・ドメイン・シェーダ８１７は、テッセレーション出力のバックエンド評価を提供する。テッセレータ８１３は、ハルシェーダ８１１の方向に動作し、グラフィックパイプライン８２０への入力として提供される粗いジオメトリックモデルに基づいて詳細なジオメトリックオブジェクトのセットを生成する専用のロジックを含む。テッセレーションを使用しない場合、テッセレーションコンポーネント８１１、８１３、８１７はバイパスすることができる。
【０１０８】
完全なジオメトリオブジェクトは、実行ユニット８５２Ａ、８５２Ｂにディスパッチされる１つまたは複数のスレッドを介してジオメトリシェーダ８１９によって処理することができるか、またはクリッパ８２９に直接進むことができる。ジオメトリシェーダは、グラフィクパイプラインの前の段階のように、頂点または頂点のパッチではなく、ジオメトリオブジェクト全体で動作する。テッセレーションが無効にされている場合、ジオメトリシェーダ８１９は、頂点シェーダ８０７から入力を受け取る。ジオメトリシェーダ８１９は、ジオメトリ・シェーダ・プログラムによって、プログラム可能であり、テッセレーションユニットが無効である場合、ジオメトリテッセレーションを実行する。
【０１０９】
ラスタライズの前に、頂点データはクリッパ８２９によって処理され、ここで、クリッパ８２９は、クリッピングおよびジオメトリシェーダ機能を有する固定機能クリッパまたはプログラマブルクリッパのいずれかである。一実施形態において、レンダー出力パイプライン８７０内のラスタライザ８７３は、ピクセルシェーダをディスパッチして、グラフィックオブジェクトをピクセル毎の表現に変換する。一実施形態において、ピクセル・シェーダ・ロジックは、スレッド実行ロジック８５０に含まれる。
【０１１０】
グラフィックエンジンは、相互接続バス、相互接続ファブリック、またはグラフィックエンジンの主要コンポーネントの間でデータとメッセージの受け渡しを可能にする他の何らかの相互接続メカニズムを有する。一実施形態において、実行ユニット８５２Ａ、８５２Ｂおよび関連するキャッシュ８５１、テクスチャおよびメディアサンプラ８５４、ならびにテクスチャ／サンプラキャッシュ８５８は、データポート８５６を介して相互接続して、メモリアクセスを実行し、グラフィックエンジンのレンダー出力パイプラインコンポーネントと通信する。一実施形態において、サンプラ８５４、キャッシュ８５１、８５８、および実行ユニット８５２Ａ、８５２Ｂは、それぞれ別々のメモリアクセスパスを有する。
【０１１１】
一実施形態では、レンダー出力パイプライン８７０は、頂点ベースのオブジェクトを、関連するピクセルベースの表現に変換するラスタライザおよび深度テストコンポーネント８７３を含む。一実施形態において、ラスタライザロジックは、固定機能三角形および線ラスタライズを実行するためのウインドウ／マスカユニットを含む。関連するレンダーおよび深度バッファキャッシュ８７８、８７９はまた、一実施形態において利用可能である。ピクセル演算コンポーネント８７７は、データ上でピクセルベースの演算を実行するが、場合によっては、２Ｄ演算と関連するピクセル演算（例えば、ブレンディングを伴うビットブロック画像転送）が、２Ｄエンジン８４１によって実行されるか、またはオーバーレイ・ディスプレイ・プレーンを使用してディスプレイコントローラ８４３によって表示時に置換される。一実施形態において、共有Ｌ３キャッシュ８７５が、すべてのグラフィックコンポーネントで使用可能であり、メインシステムメモリを使用せずにデータの共有を可能にする。
【０１１２】
グラフィック・プロセッサ・メディア・パイプライン８３０は、メディアエンジン８３７およびビデオフロントエンド８３４を含む。一実施形態において、ビデオフロントエンド８３４は、コマンドストリーマ８０３からパイプラインコマンドを受信する。しかしながら、一実施形態において、メディアパイプライン８３０は、別個のコマンドストリーマを含む。ビデオフロントエンド８３４は、コマンドをメディアエンジン８３７に送る前に、メディアコマンドを処理する。一実施形態において、メディアエンジンは、スレッドディスパッチャ８３１を介してスレッド実行ロジック８５０にディスパッチするスレッドを生成するためのスレッド生成機能を含む。
【０１１３】
一実施形態において、グラフィックエンジンは、ディスプレイエンジン８４０を含む。一実施形態において、ディスプレイエンジン８４０は、グラフィックプロセッサの外部にあり、リング相互接続８０２または他の何らかの相互接続バスもしくはファブリックを介してグラフィックプロセッサと結合する。ディスプレイエンジン８４０は、２Ｄエンジン８４１およびディスプレイコントローラ８４３を含む。ディスプレイエンジン８４０は、３Ｄパイプラインとは独立して動作することができる専用ロジックを含む。ディスプレイコントローラ８４３は、ラップトップコンピュータのようにシステム統合ディスプレイデバイスとすることができるディスプレイデバイス（図示せず）、またはディスプレイ・デバイス・コネクタを介して取り付けられる外部ディスプレイデバイスと結合する。
【０１１４】
グラフィックパイプライン８２０およびメディアパイプライン８３０は、複数のグラフィックおよびメディア・プログラミング・インターフェースに基づいて演算を実行するよう構成可能であり、任意の１つのアプリケーション・プログラミング・インターフェース（ＡＰＩ）に固有ではない。一実施形態において、グラフィックプロセッサ用のドライバソフトウェアは、特定のグラフィックまたはメディアライブラリに特有のＡＰＩコールを、グラフィックプロセッサによって処理できるコマンドに変換する。さまざまな実施形態において、クロノスグループによってサポートされるＯｐｅｎ  Ｇｒａｐｈｉｃｓ  Ｌｉｂｒａｒｙ（ＯｐｅｎＧＬ）およびＯｐｅｎ  Ｃｏｍｐｕｔｉｎｇ  Ｌａｎｇｕａｇｅ（ＯｐｅｎＣＬ）、マイクロソフト社のＤｉｒｅｃｔ３Ｄライブラリ、または一実施形態ではＯｐｅｎＧＬおよびＤ３Ｄの両方に対するサポートが提供される。Ｏｐｅｎ  Ｓｏｕｒｃｅ  Ｃｏｍｐｕｔｅｒ  Ｖｉｓｉｏｎ  Ｌｉｂｒａｒｙ（ＯｐｅｎＣＶ）に対するサポートも提供され得る。将来製造されるＡＰＩのパイプラインからグラフィックプロセッサのパイプラインへのマッピングが可能な場合、互換性のある３Ｄパイプラインを備えた将来製造されるＡＰＩもサポートされる。
【０１１５】
図１４Ａは、一実施形態によるグラフィック・プロセッサ・コマンド・フォーマットを示すブロック図であり、図１４Ｂは、一実施形態によるグラフィック・プロセッサ・コマンド・シーケンスを示すブロック図である。図１４Ａの実線ボックスは、一般にグラフィックコマンドに含まれる構成要素を示し、一方、破線は、オプションであるか、またはグラフィックコマンドのサブセットにのみ含まれる構成要素を含む。図１４Ａの例示的なグラフィック・プロセッサ・コマンド・フォーマット９００は、コマンドのターゲットクライアント９０２、コマンド・オペレーション・コード（オペコード）９０４、およびコマンドの関連データ９０６を識別するデータフィールドを含む。サブオペコード９０５およびコマンドサイズ９０８もいくつかのコマンドに含まれる。
【０１１６】
クライアント９０２は、コマンドデータを処理するグラフィックデバイスのクライアントユニットを指定する。一実施形態において、グラフィック・プロセッサ・コマンド・パーサは、各コマンドのクライアントフィールドを調べて、コマンドのさらなる処理を条件付けし、コマンドデータを適切なクライアントユニットにルーティングする。一実施形態において、グラフィック・プロセッサ・クライアント・ユニットは、メモリ・インターフェース・ユニット、レンダーユニット、２Ｄユニット、３Ｄユニット、およびメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。コマンドがクライアントユニットによって受信されると、クライアントユニットは、オペコード９０４および、存在する場合、サブオペコード９０５を読み込み、実行する動作を決定する。クライアントユニットは、コマンドのデータ９０６フィールド内の情報を使用してコマンドを実行する。いくつかのコマンドに対して、明示的なコマンドサイズ９０８によりコマンドのサイズが指定されることが予期される。一実施形態において、コマンドパーサは、コマンドオペコードに基づいて、少なくともいくつかのコマンドのサイズを自動的に決定する。一実施形態において、コマンドはダブルワードの倍数を介して整列される。
【０１１７】
図１４Ｂのフローチャートは、サンプル・コマンド・シーケンス９１０を示す。一実施形態において、グラフィックプロセッサの一実施形態を特徴とするデータ処理システムのソフトウェアまたはファームウェアは、グラフィック演算のセットをセットアップし、実行し、終了するために示されるあるバージョンのコマンドシーケンスを使用する。例示的な目的のために、サンプル・コマンド・シーケンスが示され、説明されるが、実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。さらに、コマンドは、グラフィックプロセッサが少なくとも部分的に並行してコマンドのシーケンスを処理するように、コマンドシーケンス内のコマンドのバッチとして発行されてもよい。
【０１１８】
サンプル・コマンド・シーケンス９１０は、パイプライン・フラッシュ・コマンド９１２で始まり、任意のアクティブ・グラフィック・パイプラインが、パイプラインの現在保留中のコマンドを完了させることができる。一実施形態において、３Ｄパイプライン９２２とメディアパイプライン９２４は同時に動作しない。パイプラインフラッシュは、アクティブ・グラフィック・パイプラインが、任意の保留中のコマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックプロセッサのコマンドパーサは、アクティブな描画エンジンが保留中の動作を完了し、関連する読み込みキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択的に、「ダーティ」とマークされたレンダーキャッシュ内のデータはすべて、メモリにフラッシュすることができる。パイプライン・フラッシュ・コマンド９１２は、パイプライン同期のために、またはグラフィックプロセッサを低電力状態にする前に、使用することができる。
【０１１９】
パイプライン選択コマンド９１３は、コマンドシーケンスがグラフィックプロセッサにパイプライン間を明示的に切り替えることを要求する場合に使用される。パイプライン選択コマンド９１３は、コンテキストが両方のパイプラインに対してコマンドを発行するものでない限り、パイプラインコマンドを発行する前に実行コンテキスト内で１回だけ必要とされる。一実施形態において、パイプライン選択コマンド９１３を介してパイプライン切り替えの直前にパイプライン・フラッシュ・コマンド９１２が必要とされる。
【０１２０】
パイプライン制御コマンド９１４は、演算のためにグラフィックパイプラインを構成し、３Ｄパイプライン９２２およびメディアパイプライン９２４をプログラムするために使用される。パイプライン制御コマンド９１４は、アクティブなパイプラインのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド９１４は、パイプライン同期に使用され、コマンドのバッチを処理する前にアクティブパイプライン内の１つまたは複数のキャッシュメモリからデータをクリアするために使用される。
【０１２１】
リターンバッファ状態コマンド９１６は、各パイプラインがデータを書き込むためのリターンバッファのセットを構成するために使用される。パイプライン演算の中には、演算により処理中に中間データを書き込む１つまたは複数のリターンバッファの割り当て、選択、または構成が必要なものがある。グラフィックプロセッサはまた、出力データを格納し、クロススレッド通信を実行するために、１つまたは複数のリターンバッファを使用する。リターンバッファ状態９１６は、パイプライン演算のセットに使用するリターンバッファのサイズおよび数を選択することを含む。
【０１２２】
コマンドシーケンスの残りのコマンドは、演算のためのアクティブなパイプラインに基づき、異なる。パイプライン決定９２０に基づいて、コマンドシーケンスは、３Ｄパイプライン状態９３０で始まる３Ｄパイプライン９２２、またはメディアパイプライン状態９４０で始まるメディアパイプライン９２４に適合される。
【０１２３】
３Ｄパイプライン状態９３０のコマンドは、頂点バッファ状態、頂点要素状態、一定色状態、深度バッファ状態、および３Ｄプリミティブコマンドが処理される前に構成されるべき他の状態変数に対する３Ｄ状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の３Ｄ  ＡＰＩに少なくとも部分的に基づいて決定される。３Ｄパイプライン状態９３０コマンドは、これらの要素が使用されない場合、特定のパイプライン要素を選択的に無効にするか、またはバイパスすることも可能である。
【０１２４】
３Ｄプリミティブ９３２コマンドは、３Ｄパイプラインによって処理される３Ｄプリミティブをサブミットするために使用される。３Ｄプリミティブ９３２コマンドを介してグラフィックプロセッサに渡されるコマンドおよび関連パラメータは、グラフィックパイプラインにおける頂点フェッチ機能に転送される。頂点フェッチ機能は、３Ｄプリミティブ９３２コマンドデータを使用して頂点データ構造を生成する。頂点データ構造は、１つまたは複数のリターンバッファに格納される。３Ｄプリミティブ９３２コマンドは、頂点シェーダを介して３Ｄプリミティブ上で頂点演算を実行するために使用される。頂点シェーダを処理するために、３Ｄパイプライン９２２は、シェーダ実行スレッドをグラフィックプロセッサ実行ユニットにディスパッチする。
【０１２５】
３Ｄパイプライン９２２は、実行９３４コマンドまたはイベントを介してトリガされる。一実施形態において、レジスタ書き込みが、コマンド実行をトリガする。一実施形態において、コマンドシーケンス内の”ｇｏ”または”ｋｉｃｋ”コマンドを介して実行がトリガされる。一実施形態において、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックパイプラインを介してコマンドシーケンスをフラッシュする。３Ｄパイプラインは、３Ｄプリミティブに対するジオメトリ処理を実行する。演算が完了すると、結果として得られるグラフィックオブジェクトはラスタライズされ、ピクセルエンジンは結果として生じるピクセルを色づける。ピクセルシェーディングおよびピクセルバックエンド演算を制御するための追加のコマンドもまた、これらの演算に含めることができる。
【０１２６】
サンプル・コマンド・シーケンス９１０は、メディア演算を実行する場合にメディアパイプライン９２４の経路に続く。一般に、メディアパイプライン９２４のプログラミングの特定の使用および方法は、実行されるメディアまたは計算演算に依存する。特定のメディアデコード演算は、メディアデコード中にメディアパイプラインにオフロードすることができる。メディアパイプラインもバイパスすることができ、メディアデコードは、１つまたは複数の汎用処理コアによって提供されるリソースを使用して、全体または一部を実行することができる。一実施形態において、メディアパイプラインはまた、汎用グラフィック・プロセッサ・ユニット（ＧＰＧＰＵ）演算用の要素も含み、ここで、グラフィックプロセッサは、グラフィックプリミティブのレンダリングに明示的に関連しない計算シェーダプログラムを使用してＳＩＭＤベクトル演算を実行するために使用される。
【０１２７】
メディアパイプライン９２４は、３Ｄパイプライン９２２と同様に構成される。一組みのメディアパイプライン状態コマンド９４０が、メディア・オブジェクト・コマンド９４２の前にコマンドキューにディスパッチされるか、またはコマンドキューに配置される。メディアパイプライン状態コマンド９４０は、メディアオブジェクトを処理するために使用されるメディアパイプライン要素を構成するためのデータを含む。これには、エンコードフォーマットまたはデコードフォーマットなどの、メディアパイプライン内のビデオデコードおよびビデオエンコードロジックを構成するためのデータが含まれる。メディアパイプライン状態コマンド９４０はまた、状態設定のバッチを含む「間接」状態要素への１つまたは複数のポインタの使用をサポートする。
【０１２８】
メディア・オブジェクト・コマンド９４２は、メディアパイプラインによる処理のためにメディアオブジェクトにポインタを供給する。メディアオブジェクトは、処理対象のビデオデータを含むメモリバッファを含む。一実施形態において、メディア・オブジェクト・コマンド９４２を発行する前に、すべてのメディアパイプライン状態が有効でなければならない。パイプライン状態が構成され、メディア・オブジェクト・コマンド９４２がキューに入れられると、メディアパイプライン９２４は、実行９３４コマンドまたは同等の実行イベント（例えば、レジスタ書き込み）を介してトリガされる。その場合、メディアパイプライン９２４からの出力は、３Ｄパイプライン９２２またはメディアパイプライン９２４によって提供される演算によって後処理してもよい。一実施形態において、ＧＰＧＰＵ演算は、メディア演算と同様の方法で構成され実行される。
【０１２９】
図１５は、一実施形態によるデータ処理システムのための例示的なグラフィック・ソフトウェア・アーキテクチャを示す。ソフトウェアアーキテクチャは、３Ｄグラフィックアプリケーション１０１０、オペレーティングシステム１０２０、および少なくとも１つのプロセッサ１０３０を含む。プロセッサ１０３０は、グラフィックプロセッサ１０３２および１つまたは複数の汎用プロセッサコア（単数または複数）１０３４を含む。グラフィックアプリケーション１０１０およびオペレーティングシステム１０２０はそれぞれ、データ処理システムのシステムメモリ１０５０内で実行される。
【０１３０】
３Ｄグラフィックアプリケーション１０１０は、シェーダ命令１０１２を含む１つまたは複数のシェーダプログラムを含む。シェーダ言語命令は、高レベルシェーダ言語（ＨＬＳＬ）またはＯｐｅｎＧＬシェーダ言語（ＧＬＳＬ）などの高レベルシェーダ言語とすることができる。アプリケーションはまた、汎用プロセッサコア１０３４による実行に適した機械語の実行可能命令１０１４も含む。アプリケーションはまた、頂点データによって定義されるグラフィックオブジェクト１０１６を含む。
【０１３１】
オペレーティングシステム１０２０は、マイクロソフト社のＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム、独自のＵＮＩＸ（登録商標）ライクなオペレーティングシステム、またはＬｉｎｕｘ（登録商標）カーネルの変形を使用するオープンソースのＵＮＩＸ（登録商標）ライクなオペレーティングシステムであってもよい。Ｄｉｒｅｃｔ３Ｄ  ＡＰＩが使用されている場合、オペレーティングシステム１０２０は、フロントエンド・シェーダ・コンパイラ１０２４を使用して、ＨＬＳＬの任意のシェーダ命令１０１２を低レベルシェーダ言語にコンパイルする。コンパイルは、ジャストインタイムコンパイルとすることができ、アプリケーションが共有プリコンパイルを実行することができる。一実施形態において、高レベルシェーダは、３Ｄグラフィックアプリケーション１０１０のコンパイル中に低レベルシェーダにコンパイルされる。
【０１３２】
ユーザ・モード・グラフィック・ドライバ１０２６は、シェーダ命令１０１２をハードウェア固有表現に変換するバックエンド・シェーダ・コンパイラ１０２７を含むことができる。ＯｐｅｎＧＬ  ＡＰＩが使用されている場合、ＧＬＳＬ高レベル言語のシェーダ命令１０１２は、コンパイルのためにユーザ・モード・グラフィック・ドライバ１０２６に渡される。ユーザ・モード・グラフィック・ドライバは、オペレーティング・システム・カーネル・モード機能１０２８を使用して、カーネルモード・グラフィック・ドライバ１０２９と通信する。カーネル・モード・グラフィク・ドライバ１０２９は、グラフィックプロセッサ１０３２と通信して、コマンドおよび命令をディスパッチする。
【０１３３】
さまざまな動作または機能が本明細書に記載されている範囲で、それらは、ハードウェア回路、ソフトウェアコード、命令、構成、および／またはデータとして記述または定義することができる。コンテンツは、ハードウェアロジックに埋め込むことができ、または直接実行可能なソフトウェア（「オブジェクト」または「実行可能」形式）、ソースコード、グラフィックエンジンで実行するために設計された高レベルシェーダコード、または特定のプロセッサもしくはグラフィックコアのための命令セットにおける低レベルアセンブリ言語コードとして埋め込むことができる。本明細書に記載の実施形態のソフトウェアコンテンツは、コンテンツが格納された製品を介して、または通信インターフェースを操作してデータを通信インターフェースを介して送信するための方法を介して提供することができる。
【０１３４】
非一時的機械読取可能ストレージ媒体は、機械に、説明した機能または動作を実行させることができ、記録可能／記録不可媒体（例えば、リード・オンリ・メモリ（ＲＯＭ）、ランダム・アクセス・メモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光学ストレージ媒体、フラッシュ・メモリ・デバイスなど）などの、機械（例えば、コンピューティングデバイス、電子システムなど）によってアクセス可能な形式で情報を格納する任意の機構を含む。通信インターフェースは、メモリバスインターフェース、プロセッサバスインターフェース、インターネット接続、ディスクコントローラなどの、別のデバイスと通信するための有線、無線、光学などの媒体のいずれかにインターフェースする任意の機構を含む。通信インターフェースは、ソフトウェアコンテンツを記述するデータ信号を提供するために通信インターフェースを準備するための構成パラメータまたは送信信号を提供することによって構成される。通信インターフェースは、通信インターフェースに送信される１つまたは複数のコマンドまたは信号を介してアクセスすることができる。
【０１３５】
説明したさまざまな構成要素は、説明した動作または機能を実行するための手段とすることができる。本明細書に記載される各構成要素は、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。構成要素は、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）など）、組み込みコントローラ、ハードワイヤード回路などとして実装することができる。本明細書に記載されたものに加えて、本発明の範囲から逸脱することなく、本発明の開示された実施形態および実装形態に対してさまざまな変更を行うことができる。したがって、本明細書における例示および例は、例示的なものであり、限定的な意味で解釈されるべきではない。本発明の範囲は、添付の特許明細の範囲を参照することによってのみ測られるべきである。
【０１３６】
以下の項目および／または例は、さらなる実施形態に関する。
１つの例示的な実施形態は、位置属性を計算し、位置属性以外のシェーディング属性を計算する前に、三角形をカリングすることを備える方法とすることができる。本方法はまた、カリングが単純なカリングテストおよび視錐台カリングを含む場合を含むこともできる。本方法はまた、可視情報を時間順に記録し、この情報を使用して廃棄された三角形をスキップすることを含むことができる。本方法はまた、前記可視情報をビット順序で記録することを含むことができる。本方法はまた、前記位置属性を計算する前にオクルージョンカリングを実行するためにタイル毎の深度表現を記録することを含むことができる。本方法はまた、完全には塞がれていない三角形の位置属性を計算する場合にオクルージョン情報を生成することを含むこともできる。本方法はまた、描画呼び出しコマンド内にビットを設定して、そのコマンドが計算中か、またはカリング中に処理されるべきかどうかを指示することを含むことができる。本方法はまた、タイル毎のスカラ値として最大および最小の深度を格納することによって前記オクルージョン情報を使用することによるオクルージョンカリングを含むことができる。本方法はまた、ビットマスクおよびタイル毎のＺｍａｘ値のセットを使用して、マスクされた深度表現を格納することによる、オクルージョンカリングを含むことができる。本方法はまた、基準値が最小または最大深度を表すかどうかを示すためにタイル毎に１ビットを格納することによってカリングすることを含むことができる。本方法はまた、位置属性を計算する一部として第１の深度テストを実行し、次いで、位置属性を決定した後にカリング中に第２の深度テストを実行することを含むことができる。本方法はまた、第２の深度テストに使用するために第１の深度テストから深度表現を供給することを含むことができる。本方法はまた、第２の深度テストパイプ内の第１の深度テストからの深度表現を使用して、ピクセルシェーダの実行を節約するためにｚバッファをプライミングすることを含むことができる。本方法はまた、並列パイプで計算し、カリングすることも含むことができる。本方法はまた、計算およびカリングが１つのパイプで行われ、可視情報を記録するビットシーケンスが他のパイプで消費されることを含むことができる。本方法はまた、描画呼び出しに対する可視情報を記録することを選択的に無効にすることを含むことができる。本方法はまた、他のシェーディング属性の前に位置属性を計算するのではなく、少なくとも１つの描画呼び出しに対して１つのパスですべての属性を計算することを選択的に可能にすることを含むことができる。本方法はまた、位置属性を計算することが、位置属性のみを読み込むことと、位置属性を計算するために他の任意のシェーディング属性を読み込まないこととを含むこともできる。本方法はまた、三角形カリングの間にプリミティブをクリッピングし、位置属性を計算する場合にすべての三角形を目に見えるようにマーキングすることを含むことができる。本方法はまた、非位置属性を計算するための命令を含まない命令セットを使用して位置属性を計算することを含むことができる。
【０１３７】
別の例示的な実施形態は、位置属性以外のシェーディング属性を計算する前に、位置属性を計算し、三角形をカリングすることを備えるシーケンスを実行するためにプロセッサによって実行される命令を格納する１つまたは複数の非一時的コンピュータ可読可能媒体とすることができる。本媒体はまた、カリングが単純なカリングテストおよび視錐台カリングを含む命令をさらに格納することができる。本媒体はまた、可視情報を時間順に記録し、この情報を使用して廃棄された三角形をスキップすることを含む前記シーケンスを格納することできる。本媒体は、さらに、ビット順に前記可視情報を記録することを含む、前記シーケンスを格納することができる。本媒体はまた、前記位置属性を計算する前にオクルージョンカリングを実行するためにタイル毎の深度表現を記録することを含む、前記シーケンスを含むことができる。本媒体は、完全には塞がれていない三角形の位置属性を計算する場合にオクルージョン情報を生成することを含む、前記シーケンスを含むことができる。本媒体は、描画呼び出しコマンド内にビットを設定して、そのコマンドが計算中か、またはカリング中に処理されるべきかどうかを指示することを含む、前記シーケンスを含むことができる。本媒体は、タイル毎のスカラ値として最大および最小の深度を格納することによって前記オクルージョン情報を使用することによるオクルージョンカリングを含む、前記シーケンスを含むことができる。本媒体はまた、ビットマスクおよびタイル毎のＺｍａｘ値のセットを使用して、マスクされた深度表現を格納することによる、オクルージョンカリングを含む、前記シーケンスを含むことができる。本媒体は、基準値が最小または最大深度を表すかどうかを示すためにタイル毎に１ビットを格納することによってカリングすることを含む、前記シーケンスを含むことができる。本媒体は、位置属性を計算する一部として第１の深度テストを実行し、次いで、位置属性を決定した後にカリング中に第２の深度テストを実行することを含む、前記シーケンスを含むことができる。本媒体は、第２の深度テストに使用するために第１の深度テストから深度表現を供給することを含む、前記シーケンスを含むことができる。本媒体は、第２の深度テストパイプ内の第１の深度テストからの深度表現を使用して、ピクセルシェーダの実行を節約するためにｚバッファをプライミングすることを含む、前記シーケンスを含むことができる。本媒体は、並列パイプ内で計算し、カリングすることを含む、前記シーケンスを含むことができる。本媒体は、計算およびカリングが１つのパイプで行われ、可視情報を記録するビットシーケンスが他のパイプで消費される、前記シーケンスを含むことができる。本媒体は、描画呼び出しに対する可視情報を記録することを選択的に無効にすることを含む、前記シーケンスを含むことができる。本媒体は、他のシェーディング属性の前に位置属性を計算するのではなく、少なくとも１つの描画呼び出しに対して一度にすべての属性を計算することを選択的に可能にすることを含む、前記シーケンスを含むことができる。本媒体は、位置属性を計算することが、位置属性のみを読み込むことと、位置属性を計算するために他の任意のシェーディング属性を読み込まないこととを含む、前記シーケンスを含むことができる。本媒体はまた、三角形カリングの間にプリミティブをクリッピングし、位置属性を計算する場合にすべての三角形を目に見えるようにマーキングすることを含む、前記シーケンスを含むことができる。本媒体は、非位置属性を計算するための命令を含まない命令セットを使用して位置属性を計算することを含む、前記シーケンスを含むことができる。
【０１３８】
別の例において、実施形態は、位置属性を計算し、位置属性以外のシェーディング属性を計算する前に三角形をカリングするプロセッサと、前記プロセッサに結合されたストレージとを備える装置とすることができる。本装置は、単純なカリングテストと視錐台カリングとを使用してカリングするための前記プロセッサを含むことができる。本装置は、可視情報を時間順に記録し、この情報を使用し、破棄された三角形をスキップするための前記プロセッサを含むことができる。本装置は、ビット単位のシーケンスで前記可視情報を記録するための前記プロセッサを含むことができる。本装置は、前記位置属性を計算する前にオクルージョンカリングを実行するためにタイル毎の深度表現を記録するための前記プロセッサを含むことができる。本装置は、完全には塞がれていない三角形の位置属性を計算する場合にオクルージョン情報を生成するための前記プロセッサを含むことができる。本装置は、描画呼び出しコマンド内にビットを設定して、そのコマンドが計算中か、またはカリング中に処理されるべきかどうかを指示するための前記プロセッサを含むことができる。本装置は、タイル毎のスカラ値として最大および最小の深度を格納することによって前記オクルージョン情報を使用することによるオクルージョンカリングをするための前記プロセッサを含むことができる。本装置はまた、ビットマスクおよびタイル毎のＺｍａｘ値のセットを使用して、マスクされた深度表現を格納することによりオクルージョンカリングをするための前記プロセッサを含むことができる。本装置は、基準値が最小または最大深度を表すかどうかを示すためにタイル毎に１ビットを格納することによってカリングするための前記プロセッサを含むことができる。本装置は、位置属性を計算する一部として第１の深度テストを実行し、次いで、位置属性を決定した後にカリング中に第２の深度テストを実行するための前記プロセッサを含むことができる。本装置は、第２の深度テストに使用するために第１の深度テストから深度表現を供給するための前記プロセッサを含むことができる。本装置は、第２の深度テストパイプ内の第１の深度テストからの深度表現を使用して、ピクセルシェーダの実行を節約するためにｚバッファをプライミングするための前記プロセッサを含むことができる。本装置は、並列パイプ内で計算およびカリングをするための前記プロセッサを含むことができる。本装置は、一方のパイプ内で計算およびカリングをし、他方のパイプ内で可視情報を記録するビットシーケンスを消費するための前記プロセッサを含むことができる。本装置は、オペレーティングシステム、バッテリおよびファームウェア、ならびに前記ファームウェアをアップデートするためのモジュールを含むことができる。
【０１３９】
本明細書で説明するグラフィック処理技術は、さまざまなハードウェアアーキテクチャで実装することができる。例えば、グラフィック機能は、チップセット内に統合することができる。あるいは、別個のグラフィックプロセッサを使用してもよい。さらに別の実施形態として、グラフィック機能は、マルチコアプロセッサを含む、汎用プロセッサによって実装してもよい。
【０１４０】
本明細書を通して、「一実施形態」または「１つの実施形態」という言及は、実施形態に関連して説明される特定の特徴、構造、または特性が、本開示に包含される少なくとも１つの実装態様に含まれることを意味する。したがって、「一実施形態」または「１つの実施形態」という表現は、必ずしも同じ実施形態を指しているとは限らない。さらに、特定の特徴、構造、または特性は、図示の特定の実施形態以外の他の適切な形態で実施されてもよく、そのような形態はすべて本出願の特許請求の範囲に包含することができる。
【０１４１】
限られた数の実施形態について説明してきたが、当業者であれば、多くの変更形態および変形形態が可能であろう。添付の特許請求の範囲は、この開示の真の精神および範囲内にあるそのような修正形態および変形形態のすべてをカバーすることが意図されている。
【図１】
0006377842.tif 000002
【図２】
0006377842.tif 000003
【図３】
0006377842.tif 000004
【図４】
0006377842.tif 000005
【図５】
0006377842.tif 000006
【図６】
0006377842.tif 000007
【図７】
0006377842.tif 000008
【図８】
0006377842.tif 000009
【図９】
0006377842.tif 000010
【図１０】
0006377842.tif 000011
【図１１】
0006377842.tif 000012
【図１２】
0006377842.tif 000013
【図１３】
0006377842.tif 000014
【図１４Ａ】
0006377842.tif 000015
【図１４Ｂ】
0006377842.tif 000016
【図１５】
0006377842.tif 000017