(57)【要約】  カルパイプでは、三角形の頂点の位置は既に計算されており、これらの座標は、これらの座標に基づいて三角形のグループを取得してソーティングすることにより利用されることができる。一例として、タイル内の全ての三角形がグループを形成することができる。三角形のグループは、ビンにソートされる。各ビン内で、三角形は、その奥行きに基づいてソートされる。
2018502381.tif 000002
【特許請求の範囲】
【請求項１】
位置限定シェーディングを実行するステップと、
シェードされたプリミティブを代表座標に基づいてビンにソートするステップと、
ビン内のプリミティブをソートするステップとを含む、方法。
【請求項２】
前記シェードされたプリミティブをソートするステップが、シェードされたプリミティブのグループをソートするステップを含む、請求項１に記載の方法。
【請求項３】
タイル内の全ての三角形からなるグループを形成するステップを含む、請求項２に記載の方法。
【請求項４】
前記シェードされたプリミティブをソートするステップが、前記プリミティブをビンにビニングするステップを含む、請求項１に記載の方法。
【請求項５】
前記のソートされたプリミティブを一度に１ビンずつラスタライズするステップを含む、請求項４に記載の方法。
【請求項６】
奥行きの順にソートされたプリミティブをラスタライズするステップを含む、請求項５に記載の方法。
【請求項７】
座標に基づいてソートするステップが、座標、奥行き、プリミティブのサイズ及び状態に基づいてソートするステップを含む、請求項１に記載の方法。
【請求項８】
前記座標が、グループ内の三角形の平均頂点位置として計算される、請求項１に記載の方法。
【請求項９】
前記座標を計算するステップが、三角形の頂点の上にバウンディングボックスを形成するステップと、前記ボックスの中心の座標を使用するステップとを含む、請求項１に記載の方法。
【請求項１０】
座標を量子化し、それらを空間充填曲線に沿った整数位置に変換することにより前記座標をビンにマッピングするステップを含む、請求項４に記載の方法。
【請求項１１】
命令を有する１つ又は複数のコンピュータプログラムであって、前記命令が実行されると、
位置限定シェーディングを実行するステップと、
シェードされたプリミティブを代表座標に基づいてビンにソートするステップと、
ビン内のプリミティブをその奥行きに基づいてソートするステップと
を含むシーケンスを実行する、コンピュータプログラム。
【請求項１２】
前記シェードされたプリミティブをソートするステップが、シェードされたプリミティブのグループをソートするステップを含む、請求項１１に記載のコンピュータプログラム。
【請求項１３】
前記シーケンスが、タイル内の全ての三角形からなるグループを形成するステップを含む、請求項１２に記載のコンピュータプログラム。
【請求項１４】
前記シェードされたプリミティブをソートするステップが、前記プリミティブをビンにビニングするステップを含む、請求項１１に記載のコンピュータプログラム。
【請求項１５】
前記シーケンスが、前記のソートされたプリミティブを一度に１ビンずつラスタライズするステップを含む、請求項１４に記載のコンピュータプログラム。
【請求項１６】
前記シーケンスが、奥行きの順にソートされたプリミティブをラスタライズするステップを含む、請求項１５に記載のコンピュータプログラム。
【請求項１７】
座標に基づいてソートするステップが、座標、奥行き、プリミティブのサイズ及び状態に基づいてソートするステップを含む、請求項１１に記載のコンピュータプログラム。
【請求項１８】
前記座標が、グループ内の三角形の平均頂点位置として計算される、請求項１１に記載のコンピュータプログラム。
【請求項１９】
前記座標を計算するステップが、三角形の頂点の上にバウンディングボックスを形成するステップと、前記ボックスの中心の座標を使用するステップとを含む、請求項１１に記載のコンピュータプログラム。
【請求項２０】
前記シーケンスが、座標を量子化し、それらを空間充填曲線に沿った整数位置に変換することにより前記座標をビンにマッピングするステップを含む、請求項１４に記載のコンピュータプログラム。
【請求項２１】
位置限定シェーディングを実行し、シェードされたプリミティブを代表座標に基づいてビンにソートし、ビン内のプリミティブをその奥行きに基づいてソートするプロセッサと、
前記プロセッサに接続された記憶装置とを備える、装置。
【請求項２２】
前記プロセッサが、シェードされたプリミティブのグループをソートする、請求項２１に記載の装置。
【請求項２３】
前記プロセッサが、タイル内の全ての三角形からなるグループを形成する、請求項２２に記載の装置。
【請求項２４】
前記プロセッサが、前記プリミティブをビンにビニングする、請求項２１に記載の装置。
【請求項２５】
前記プロセッサが、前記のソートされたプリミティブを一度に１ビンずつラスタライズする、請求項２４に記載の装置。
【請求項２６】
請求項１１から請求項２０のいずれか一項に記載のコンピュータプログラムを記憶したコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
グラフィックス処理におけるメモリトラフィックを削減して、電力使用量を低減し、及び／又は性能を向上させることは、極めて重要である。
【発明の概要】
【０００２】
位置限定シェーディング（position-only  shading：位置のみのシェーディング）はメモリトラフィックを減少させる。位置限定シェーディングパイプラインは、２つのパイプ、すなわちカルパイプ（cull  pipe：選択パイプライン）と再生パイプ（replay  pipe）とを含む。三角形（triangle：トライアングル）がカルパイプに入り、頂点に対して、位置（position）についてのシェーディング（shading：陰影付け）が実行される。その後、バックフェース（backface：ＢＦ）カリング及び視錐台（view  frustum：ＶＦ）カリングのような様々なタイプのカリングテスト（culling  test）に加えて、ゼロカバレッジ（zero  coverage）カリング（いずれのサンプルもカバーしない三角形を破棄する）も行う。最後に、カルパイプは、例えばビットストリームにおいて（三角形あたり１ビット）、どの三角形が全てのカリングテストを切り抜けるかを記録する。その後、再生パイプが実行され、ここでは、完全な頂点シェーディングが生き残った三角形（surviving  triangles）の頂点に対してのみ実行され、その後にグラフィックスパイプの残りが実行される。
【０００３】
いくつかの実施例が、下記の図に関して説明される。
【図面の簡単な説明】
【０００４】
【図１】一実施例の概略図である。
【図２】一実施例のフローチャートである。
【図３】一実施例によるデータ処理システムのブロック図である。
【図４】一実施例による図３に示されるプロセッサのブロック図である。
【図５】一実施例による図３のグラフィックスプロセッサのブロック図である。
【図６】一実施例によるグラフィックス処理エンジンのブロック図である。
【図７】別の実施例によるグラフィックスプロセッサのブロック図である。
【図８】一実施例におけるスレッド実行ロジックを例示する。
【図９】一実施例によるグラフィックスプロセッサ実行ユニットの命令フォーマットのブロック図である。
【図１０】グラフィックスプロセッサの別の実施例のブロック図である。
【図１１Ａ】一実施例によるグラフィックスプロセッサのコマンドフォーマットのブロック図である。
【図１１Ｂ】一実施例によるグラフィックスプロセッサのコマンドシーケンスのブロック図である。
【図１２】一実施例におけるグラフィックスソフトウェアアーキテクチャである。
【発明を実施するための形態】
【０００５】
位置限定シェーディングパイプラインのカルパイプでは、三角形の頂点の位置は既に計算されており、これらの座標は、これらの座標に基づいて三角形グループをソートすることによって利用されることができる。一例として、ドローコール（draw  call）における一連の三角形はグループを構成し得る。三角形グループは、いくらかの粒度のビンに（例えば、１６×１６ピクセルのタイルビンに）ソートされる。各ビン内で、次いで三角形をその奥行き（depth）に基づいて大雑把にソートすることが可能である。
【０００６】
再生パイプ内でラスタライズ処理が開始されると、パイプは一度に１ビンずつ三角形を消費し、任意に、同様に、ソートされた奥行きの順に（例えば、奥行きの検査（depth  test）が小さいか、又はより小さい場合は、前から後ろへ）消費する。実質的に全ての三角形は、次の小さなスクリーン空間領域に移動する前に、小さなスクリーン空間領域（タイルなど）においてアクセスされる（visited）。
【０００７】
この領域単位の（region-at-a-time）処理は、いくつかの実施例では、奥行きバッファキャッシュ（depth  buffer  cache）及び色バッファキャッシュ（color  buffer  cache）の効率を大幅に向上させる。いくつかの実施例では、色バッファ及び奥行きバッファへのメモリトラフィックが低減され、これらのバッファは、多くの場合、現在のグラフィックスプロセッサの主要な帯域幅の消費者である。
【０００８】
パイプライン１０の実施例が図１において示される。三角形（ブロック１２上に示される）は位置限定シェーダ（position-only  shader）１２により処理される。これには、バックフェース（ＢＦ）カリング、視錐台（ＶＦ）カリング、及びゼロカバレッジカリング（ブロック１４）が続く。カリングが行われた後、座標の代表的なセット、例えば（ｘ、ｙ）、及び奥行きｚが計算され、次いで、三角形（又は三角形のグループ）がビンバッファ２０内の適切なリストにビニング（またはソート）されることができる（ブロック１６）。ブロック１８において、ビットストリームにおける生き残った三角形が記録される。コマンドバッファを１回通過すると、位置限定シェーディングのフロントエンド（カルパイプ）が実行され、ビンに三角形識別子（ＩＤ）を記憶し（カリングされていない三角形の場合）、そのインデックスが、三角形の量子化された中心から計算され、モートン符号（又はヒルベルト符号）に変換される。
【０００９】
再生パイプでは、生き残った三角形（ブロック２２上に示される）は、ビニングに基づいて、ソートされた順序で処理される（ブロック２２）。例えば、全ての三角形が１６×１６タイルにビニングされている場合、その場合に、そのようなタイルの内部の三角形のリストは、最初にこれらの三角形を奥行き順にソートし、その後それらを（例えば）前から後ろへラスタライズすることによって処理されることができる。奥行き順におけるソーティングは任意選択である。無効にされた場合、完全な頂点シェーディング（vertex  shading：ＶＳ）２４が、生き残った三角形の頂点に対してのみ実行され、その後にパイプ２６の残りが実行される。
【００１０】
同じ選択されたビンからの三角形は、次の選択されたビンにおける三角形の投入（submission）を開始する前に、ラスタライザ（rasterizer）に投入するために優先順位が付けられる。これは、全てのビンが処理され、したがって全ての三角形がグラフィックスパイプラインに送られるまで続く。
【００１１】
代表座標（representative  coordinate）は、いくつかの方法で計算されることができる。例えば、グループ内の三角形の平均頂点位置（average  vertex  positions）が使用されることができる。別の選択肢は、三角形の頂点の上にバウンディングボックス（bounding  box）を形成し、バウンディングボックスの中心の座標を代表座標として使用することである。
【００１２】
一度三角形又は三角形のグループにおける代表座標が計算されると、適切なビンが発見され、各代表座標が特定のビンにマッピングされる。このマッピングは、まず、代表座標を量子化し、次いでそれらを例えばモートン順序（Morton  order）、ヒルベルト順序（Hilbert  order）、スキャンライン順序（scanline  order）のような空間充填曲線に沿った整数位置に変換することにより実行され得る。整数位置はビンに対応する。量子化分解能は、所定数のビンが使用されるように選択される。ビニングは、ｘ及びｙに加えて奥行き（ｚ）を考慮してもしなくてもよく、これは、各スクリーン空間位置が複数のビンに重なり得ることを意味する。
【００１３】
再生パイプでは、一度に１つのビンが線形の順序（すなわち、モートン曲線に沿ったビン）でアクセスされ、三角形は、コマンドバッファを再実行することなく、三角形のＩＤを使用して読み込まれる。シェーダ（shader）は、ビン内の三角形がレンダリングされたときに取得される。各ビンに対して、ビンの三角形が読み取られ、正しいシェーダによってレンダリングされる。一実施例では、三角形ＩＤだけでなく、三角形ごとのドローコール識別子（ＩＤ）（drawcall  identifier）又はシェーダ識別子（ＩＤ）（shader  identifier）が記憶され得る。又は、ある範囲の三角形ＩＤが別のシェーダなどを“指し示す”ためのルックアップテーブルが使用されることができる。
【００１４】
コマンドストリームを再生するシンプルなバージョンの場合、三角形あたりのビット数は三角形あたり２ビットに倍増する。第２のビットは、重心位置又は平均位置に基づいて一緒にタイルにソートされる１６個又は３２個の三角形のグループにおいて共同で使用される。これらの１６〜３２ビットは、タイル識別子（ＩＤ）（tile  identifier）である。さらに、より高い粒度で、例えば、各ドローコールに対して、及び／又は数千の三角形のグループまで階層的に、三角形のグループが触れる全てのタイルに対応する（又はより大きい粒度で）ビットマスクが同様に記録されている。このビットマスクは、現在再生されているタイルと比較されることができ、コマンドストリームの大部分がスキップされることができる。これらのビットマスクは、スクリーン空間とコマンドストリームの両方で粒度を調整することにより、三角形当たり１ビット以下に保つことができる。そして、三角形あたりの総ビット数は最大３ビットに増える。
【００１５】
パイプラインは、一実施例において、ソート／最終パイプラインであり、その結果、正しい結果を得ることはスクリーン空間のソーティングに依存しない。したがって、次のタイルをレンダリングする前に、単一のタイルに関して全てのジオメトリをレンダリングすることに制約されない。ジオメトリの一部をソートし、そのジオメトリのソートされた三角形をレンダリングし、さらにジオメトリをソートしてレンダリングすることができる。
【００１６】
ソートは２つの場所で近似されるので減らされ得る（relaxed）。まず、Ｎ個の三角形のグループ内の代表点に基づいて近似され、グループは単一のタイルに配置される。したがって、グループ内の三角形は、他のタイルに属するピクセルをカバーすることができる。これは、ソートミドル（sort-middle）アーキテクチャに比べて大きな違いである。第２に、三角形は最初に指定されたサイズのビンにソートされ、しかしながら、それらは、奥行き又は他の基準、例えばどのテクスチャ若しくはシェーダ（すなわち状態（state））を各三角形が使用するか、又はテクスチャ空間におけるその位置に従って、各タイル内で、更にソートされることができる。
【００１７】
図２を参照すると、シーケンス３０は、ソフトウェア、ファームウェア、及び／又はハードウェアで実施されてもよい。ソフトウェア及びファームウェアの実施例では、それは、磁気記憶装置、光学記憶装置、又は半導体記憶装置などの１つ又は複数の非一時的なコンピュータ読み取り可能な媒体に記憶されたコンピュータ実行命令によって実装されてもよい。典型的には、これらの命令は、グラフィックス機能を担うハードウェアユニットであるグラフィックス処理ユニットの一部であろう。
【００１８】
シーケンス３０は、ブロック３２に示すように、位置限定シェーディングを実行することによって開始される。これに続いて、ブロック３４においてカリング（culling）が行われる。
【００１９】
ブロック３６において、プリミティブはグループ、例えばドローコールにおける複数の三角形に形成されてもよい。次に、プリミティブは、その代表座標に基づいてソートされる（ブロック３８）。一実施例において、座標は、ｘ、ｙ、及び奥行き座標であってもよい。
【００２０】
次に、ブロック４０において示されるように、代表座標が特定のビンにマッピングされる。次にソーティングが、各ビン内のプリミティブの奥行きに基づいて実行される（ブロック４２）。最後に、ブロック４４において示されるように、ラスタライズが一度に１ビンずつ実行され、（任意に）奥行きの順に実行される。
【００２１】
大きなスクリーン空間領域に投影する三角形（ここでは“大きな”三角形と呼ばれる）は、多くのビンに重なり、性能に悪影響を与える可能性がある。大きな三角形は、下記のように扱われることができる。
・最も簡単な解決策は、大きな三角形に対するソーティングとビニングを単に無効にすることである。
・大きな三角形がビン境界線に逆らって分割され、多くのビンに重複して表示されることがある。これは、大きな三角形の異なる部分が異なる時間に処理されることを意味する。
・代表的なポイントが、いくつかの面積メトリック（area  metric）を含む場合がある。その場合に、マッピング関数は、大きい方の三角形を小さい方の三角形とは異なるビンにマッピングする。大きな三角形は、その場合に、例えばより小さいビンに移動する前に、最初に処理されることができる。このビニングは、マルチ解像度の方法（multi-resolution  fashion）で行われることができ、面積メトリックが増加するにつれてスクリーン空間のビン解像度を低下させる。
したがって、ビニングは、三角形のサイズだけでなく、状態などの他の情報も考慮に入れることができる。したがって、ビニングで使用される座標は、空間内の位置のみを含むと解釈されるべきではなく、例えば、三角形のサイズ及び状態も含むことができる。
【００２２】
現在、Ｄｉｒｅｃｔ３Ｄ（登録商標）及びＯｐｅｎＧＬ（登録商標）の仕様では、ドライバ又はハードウェアは提示（submit）された三角形のレンダリング順序を変更できない。しかしながら、Ｄｉｒｅｃｔ３Ｄは、順序バリア（order  barrier）を導入することを検討しており、ここで、グラフィックス処理ユニットは、これらのバリア間の三角形の順序を自由に変更できる。この手法は、同様に、ＯｐｅｎＧＬ及びＯｐｅｎＧＬ  ＥＳでも拡張機能を使用することができ、モバイル装置でのレンダリングに役立つ。
【００２３】
図３は、一実施例による、データ処理システム１００のブロック図である。データ処理システム１００は、１つ又は複数のプロセッサ１０２、及び１つ又は複数のグラフィックスプロセッサ１０８を含むとともに、単一プロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、又は多数のプロセッサ１０２又はプロセッサコア１０７を有するサーバシステムであってもよい。一実施例において、データ処理システム１００は、モバイル装置、ハンドヘルド装置、又は埋め込み型装置で使用するためのチップ集積回路（ＳＯＣ）上のシステムである。
【００２４】
データ処理システム１００の一実施例は、ゲーム及びメディアコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含んでいる、サーバベースのゲームプラットフォーム、ゲームコンソールを含むことができるか、又はそれらの中に組み込むことができる。一実施例において、データ処理システム１００は、携帯電話、スマートフォン、タブレットコンピューティング装置、又はモバイルインターネット装置である。データ処理システム１００は、同様に、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、又はバーチャルリアリティデバイスなどのウェアラブル装置を含むか、ウェアラブル装置と接続するか、又はウェアラブル装置の中に統合されることができる。一実施例において、データ処理システム１００は、１つ又は複数のプロセッサ１０２と、１つ又は複数のグラフィックスプロセッサ１０８により生成されたグラフィカルインタフェースとを有するテレビ又はセットトップボックス装置である。
【００２５】
１つ又は複数のプロセッサ１０２は、それぞれ、実行されるとシステム及びユーザソフトウェアに関する動作を実行する命令を処理するための１つ又は複数のプロセッサコア１０７を含む。一実施例において、１つ又は複数のプロセッサコア１０７のそれぞれは、特定の命令セット１０９を処理するように構成される。命令セット１０９は、複合命令セット演算（complex  instruction  set  computing：ＣＩＳＣ）、縮小命令セット演算（reduced  instruction  set  computing：ＲＩＳＣ）、又は超長命令語（very  long  instruction  word：ＶＬＩＷ）による演算を容易にすることができる。複数のプロセッサコア１０７は、それぞれ、異なる命令セット１０９を処理することができ、異なる命令セット１０９は、他の命令セットのエミュレーションを容易にする命令を含むことができる。プロセッサコア１０７は、同様に、デジタル信号プロセッサ（ＤＳＰ）のような他の処理デバイスを含むことができる。
【００２６】
一実施例において、プロセッサ１０２は、キャッシュメモリ１０４を含む。アーキテクチャに依存して、プロセッサ１０２は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。一実施例において、キャッシュメモリは、プロセッサ１０２の様々な構成要素間で共有される。一実施例において、プロセッサ１０２は、同様に、既知のキャッシュコヒーレンシ技法（cache  coherency  techniques）を使用してプロセッサコア１０７間で共有され得る外部キャッシュ（例えば、レベル３（Ｌ３）キャッシュ又は最終レベルキャッシュ（last  level  cache：ＬＬＣ））（図示せず）を使用する。異なるタイプのデータを記憶するための異なるタイプのレジスタ（例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタ）を含む、レジスタファイル１０６が、プロセッサ１０２に追加的に含まれる。いくつかのレジスタは汎用レジスタであってもよく、一方、他のレジスタはプロセッサ１０２の設計に固有であってもよい。
【００２７】
プロセッサ１０２は、プロセッサバス１１０に接続され、プロセッサ１０２とシステム１００内の他の構成要素との間でデータ信号を伝送する。システム１００は、メモリコントローラハブ１１６及び入出力（Ｉ／Ｏ）コントローラハブ１３０を含む例示的な“ハブ”システムアーキテクチャを使用する。メモリコントローラハブ１１６は、メモリ装置とシステム１００の他の構成要素との間の通信を容易にし、一方、Ｉ／Ｏコントローラハブ（ＩＣＨ）１３０は、ローカルＩ／Ｏバスを介してＩ／Ｏ装置への接続を提供する。
【００２８】
メモリ装置１２０は、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）装置、スタティックランダムアクセスメモリ（ＳＲＡＭ）装置、フラッシュメモリ装置、又はプロセスメモリとして機能するのに適した性能を有する他の何らかのメモリ装置であってもよい。メモリ１２０は、プロセッサ１０２がプロセスを実行するときに使用するためのデータ１２２及び命令１２１を記憶することができる。メモリコントローラハブ１１６は、同様に、プロセッサ１０２内の１つ又は複数のグラフィックスプロセッサ１０８と通信してグラフィックス及びメディア操作を実行する、任意選択の外部グラフィックスプロセッサ１１２と接続する。
【００２９】
ＩＣＨ１３０は、高速Ｉ／Ｏバスを介して周辺装置をメモリ１２０及びプロセッサ１０２に接続することを可能にする。Ｉ／Ｏ周辺装置は、オーディオコントローラ１４６、ファームウェアインタフェース１２８、無線トランシーバ１２６（例えば、Ｗｉ−Ｆｉ、ブルートゥース（登録商標））、データ記憶装置１２４（例えば、ハードディスクドライブ、フラッシュメモリなど）、及びレガシー（例えば、パーソナルシステム２（ＰＳ／２））デバイスをシステムに接続するためのレガシーＩ／Ｏコントローラを含む。１つ又は複数のユニバーサルシリアルバス（ＵＳＢ）コントローラ１４２は、キーボード及びマウス１４４の組み合わせのような入力デバイスを接続する。ネットワークコントローラ１３４は、同様に、ＩＣＨ１３０に接続することができる。一実施例では、高性能ネットワークコントローラ（図示せず）がプロセッサバス１１０に接続する。
【００３０】
図４は、１つ又は複数のプロセッサコア２０２Ａ−Ｎ、統合メモリコントローラ２１４、及び統合グラフィックスプロセッサ２０８を有するプロセッサ２００の実施例のブロック図である。プロセッサ２００は、点線のボックスによって表される追加のコア２０２Ｎまでの、そして追加のコア２０２Ｎを含む、追加のコアを含むことができる。コア２０２Ａ−Ｎのそれぞれは、１つ又は複数の内部キャッシュユニット２０４Ａ−Ｎを含む。一実施例において、各コアは、同様に、１つ又は複数の共有キャッシュユニット２０６へのアクセスを有する。
【００３１】
内部キャッシュユニット２０４Ａ−Ｎ及び共有キャッシュユニット２０６は、プロセッサ２００内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも１つのレベルの命令及びデータキャッシュ、並びにレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他のレベルのキャッシュのような、１つ又は複数のレベルの共有の中間レベルキャッシュを含むことができ、外部メモリより前の最高レベルのキャッシュが最終レベルキャッシュ（ＬＬＣ）として分類される。一実施例において、キャッシュコヒーレンシロジック（cache  coherency  logic）は、様々なキャッシュユニット２０６と２０４Ａ−Ｎとの間のコヒーレンスを維持する。
【００３２】
プロセッサ２００は、同様に、１つ又は複数のバスコントローラユニット２１６及びシステムエージェント２１０のセットを含むことができる。１つ又は複数のバスコントローラユニットは、１つ又は複数のペリフェラルコンポーネントインターコネクトバス（Peripheral  Component  Interconnect  bus、周辺構成要素相互接続バス）（例えば、ＰＣＩ、ＰＣＩエクスプレス）のような周辺バスのセットを管理する。システムエージェント２１０は、様々なプロセッサの構成要素に対する管理機能を提供する。一実施例において、システムエージェント２１０は、様々な外部メモリ装置（図示せず）へのアクセスを管理するための１つ又は複数の統合メモリコントローラ２１４を含む。
【００３３】
一実施例では、コア２０２Ａ〜Ｎのうちの１つ又は複数が、同時マルチスレッディングのためのサポートを含む。そのような実施例では、システムエージェント２１０は、マルチスレッド処理中にコア２０２Ａ〜Ｎを調整して動作させるための構成要素を含む。システムエージェント２１０は、コア２０２Ａ〜Ｎ及びグラフィックスプロセッサ２０８の電力状態を調整するロジック及び構成要素を含む電力制御ユニット（ＰＣＵ）を更に含むことができる。
【００３４】
プロセッサ２００は、グラフィックス処理操作を実行するグラフィックスプロセッサ２０８を更に含む。一実施例において、グラフィックスプロセッサ２０８は、共有キャッシュユニット２０６のセットと、そして１つ又は複数の統合メモリコントローラ２１４を含むシステムエージェントユニット２１０と、接続する。一実施例において、ディスプレイコントローラ２１１は、グラフィックスプロセッサ２０８に接続され、グラフィックスプロセッサ出力を駆動して１つ又は複数の接続されたディスプレイにもたらす。ディスプレイコントローラ２１１は、少なくとも１つの相互接続（interconnect）を介してグラフィックスプロセッサと接続された別個のモジュールであってもよいか、又はグラフィックスプロセッサ２０８若しくはシステムエージェント２１０内に統合されてもよい。
【００３５】
一実施例では、リングベースの相互接続ユニット２１２が、プロセッサ２００の内部構成要素を接続するために使用されるが、しかしながら、ポイントツーポイント相互接続（point  to  point  interconnect）、交換相互接続（switched  interconnect）、又は当該技術分野で周知の技術を含む他の技術のような、代替相互接続ユニットが使用されることができる。一実施例において、グラフィックスプロセッサ２０８は、Ｉ／Ｏリンク２１３を介してリング相互接続部（ring  interconnect）２１２と接続する。
【００３６】
例示的なＩ／Ｏリンク２１３は、様々なプロセッサ構成要素とｅＤＲＡＭモジュールのような高性能組み込みメモリモジュール２１８との間の通信を容易にするオンパッケージＩ／Ｏ相互接続（on  package  I/O  interconnect）を含む、複数の種類のＩ／Ｏ相互接続のうちの少なくとも１つを表す。一実施例において、コア２０２−Ｎのそれぞれ及びグラフィックスプロセッサ２０８は、共有された最終レベルキャッシュとして組み込みメモリモジュール２１８を使用する。
【００３７】
一実施例において、コア２０２Ａ〜２０２Ｎは、同じ命令セットアーキテクチャを実行する均質コア（homogenous  core）である。別の実施例では、コア２０２Ａ〜Ｎは命令セットアーキテクチャ（ＩＳＡ）の点から異質（heterogeneous）であり、ここで、コア２０２Ａ〜Ｎのうちの１つ又は複数が第１の命令セットを実行し、一方、他のコアのうちの少なくとも１つが第１の命令セットのサブセット又は異なる命令セットを実行する。
【００３８】
プロセッサ２００は、例えば相補型金属酸化膜半導体（ＣＭＯＳ）、バイポーラ接合／相補型金属酸化物半導体（ＢｉＣＭＯＳ）、又はＮ型金属酸化膜半導体ロジック（ＮＭＯＳ）のようないくつかのプロセス技術のうちのいずれかを使用して、１つ若しくは複数の基板の一部とすることができるか、又は、１つ若しくは複数の基板上に実装することができる。さらに、プロセッサ２００は、他の構成要素に加えて例示された構成要素を有する１つ若しくは複数のチップ上に、又はシステムオンチップ（ＳＯＣ）集積回路として、実装されることができる。
【００３９】
図５は、別個のグラフィックス処理ユニットであってもよいし、複数の処理コアと統合されたグラフィックスプロセッサであってもよいグラフィックスプロセッサ３００の一実施例のブロック図である。一実施例において、グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマップドＩ／Ｏインタフェース（memory  mapped  I/O  interface）を介して、及びプロセッサメモリに配置されたコマンドを介して通信される。グラフィックスプロセッサ３００は、メモリにアクセスするためのメモリインタフェース３１４を含む。メモリインタフェース３１４は、ローカルメモリ、１つ若しくは複数の内部キャッシュ、１つ若しくは複数の共有外部キャッシュ、及び／又はシステムメモリに対するインタフェースとすることができる。
【００４０】
グラフィックスプロセッサ３００は、同様に、ディスプレイ出力データを駆動してディスプレイ装置３２０にもたらすためのディスプレイコントローラ３０２を含む。ディスプレイコントローラ３０２は、ビデオの複数の層の表示及び合成のための１つ又は複数のオーバーレイプレーン（overlay  plane）又はユーザインタフェース要素に対するハードウェアを含む。一実施例において、グラフィックスプロセッサ３００は、ＭＰＥＧ−２などのムービングピクチャエクスパーツグループ（Moving  Picture  Experts  Group：ＭＰＥＧ）フォーマット、Ｈ．２６４／ＭＰＥＧ−４ＡＶＣなどのアドバンスドビデオコーディング（Advanced  Video  Coding：ＡＶＣ）フォーマット、映画テレビ技術者協会（the  Society  of  Motion  Picture  &  Television  Engineers：ＳＭＰＴＥ）４２１Ｍ／ＶＣ−１、そしてＪＰＥＧ（ジェイペグ）などのジョイントフォトグラフィックエキスパートグループ（Joint  Photographic  Experts  Group：ＪＰＥＧ）フォーマット及びＭｏｔｉｏｎ  ＪＰＥＧ（モーションジェイペグ：ＭＪＰＥＧ）フォーマットを含むがこれに限定されない１つ又は複数のメディア符号化フォーマットにメディアを、メディア符号化フォーマットからメディアを、又はメディア符号化フォーマットの間でメディアを、エンコード、デコード、又はトランスコードするためのビデオコーデックエンジン３０６を含む。
【００４１】
一実施例において、グラフィックスプロセッサ３００は、例えば、ビット境界ブロック転送（bit-boundary  block  transfers）を含む２次元（２Ｄ）ラスタライザ動作（rasterizer  operations）を実行するためのブロック画像転送（block  image  transfer：ＢＬＩＴ）エンジン３０４を含む。しかしながら、一実施例において、２Ｄグラフィックス操作は、グラフィックス処理エンジン（graphics-processing  engine：ＧＰＥ）３１０のうちの１つ又は複数の構成要素を使用して実行される。グラフィックス処理エンジン３１０は、３次元（３Ｄ）グラフィックス操作及びメディア操作を含むグラフィックス操作を実行するための計算エンジンである。
【００４２】
ＧＰＥ３１０は、３Ｄプリミティブ形状（例えば、矩形、三角形など）に作用する処理機能を使用して３次元画像及びシーンをレンダリングするような３Ｄ動作を実行するための３Ｄパイプライン３１２を含む。３Ｄパイプライン３１２は、要素内で様々なタスクを実行するか、及び／又は実行スレッドを３Ｄ／メディアサブシステム３１５に発生させる、プログラマブル及び固定の機能要素を含む。３Ｄパイプライン３１２は、メディア操作を実行するために使用されることができるが、ＧＰＥ３１０の実施例は、同様に、ビデオ後処理及び画像強調などのメディア操作を実行するために特に使用されるメディアパイプライン３１６を含む。
【００４３】
一実施例において、メディアパイプライン３１６は、ビデオコーデックエンジン３０６の代わりに、又はビデオコーデックエンジン３０６の代理で、ビデオデコード加速（video  decode  acceleration）、ビデオデインターレーシング（video  de-interlacing）、及びビデオエンコード加速（video  encode  acceleration）などの１つ又は複数の特殊メディア操作を実行する固定機能又はプログラマブルロジックユニットを含む。一実施例において、メディアパイプライン３１６は、３Ｄ／メディアサブシステム３１５上での実行のためにスレッドを発生させるスレッド生成ユニットを更に含む。生成されたスレッドは、３Ｄ／メディアサブシステムに含まれる１つ又は複数のグラフィックス実行ユニット上のメディア操作に関する計算を実行する。
【００４４】
３Ｄ／メディアサブシステム３１５は、３Ｄパイプライン３１２及びメディアパイプライン３１６により生成されたスレッドを実行するためのロジックを含む。一実施例において、パイプラインはスレッド実行要求を３Ｄ／メディアサブシステム３１５に送信し、３Ｄ／メディアサブシステム３１５は、様々な要求を調停するとともに使用可能なスレッド実行リソースに対してディスパッチするためのスレッドディスパッチロジック（thread  dispatch  logic）を含む。実行リソースは、３Ｄ及びメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。一実施例において、３Ｄ／メディアサブシステム３１５は、スレッド命令及びデータのための１つ又は複数の内部キャッシュを含む。一実施例において、サブシステムは、同様に、スレッド間でデータを共有し、出力データを記憶するために、レジスタ及びアドレス可能なメモリを含んでいる共用メモリを含む。
【００４５】
図６は、グラフィックスプロセッサ用のグラフィックス処理エンジン４１０の一実施例のブロック図である。一実施例において、グラフィックス処理エンジン（ＧＰＥ）４１０は、図５において示されるＧＰＥ３１０のバージョンである。ＧＰＥ４１０は、３Ｄパイプライン４１２及びメディアパイプライン４１６を含み、その各々は、図５の３Ｄパイプライン３１２及びメディアパイプライン３１６の実装例とは異なるか、又はそれらの実装例と同様であることができる。
【００４６】
一実施例において、ＧＰＥ４１０は、コマンドストリームをＧＰＥ３Ｄ及びメディアパイプライン４１２、４１６に提供するコマンドストリーマ４０３と接続する。コマンドストリーマ４０３は、システムメモリ、又は１つ若しくは複数の内部キャッシュメモリ及び共有キャッシュメモリとすることができるメモリに接続される。コマンドストリーマ４０３は、メモリからコマンドを受信し、コマンドを３Ｄパイプライン４１２及び／又はメディアパイプライン４１６に送る。３Ｄ及びメディアパイプラインは、それぞれのパイプライン内のロジックを介して動作を実行することによって、又は実行ユニットアレイ４１４に１つ又は複数の実行スレッドをディスパッチすることによってコマンドを処理する。一実施例において、実行ユニットアレイ４１４は、アレイがＧＰＥ４１０の目標電力及び性能レベルに基づいて可変数の実行ユニットを含むように、スケーラブルである。
【００４７】
サンプリングエンジン４３０は、メモリ（例えば、キャッシュメモリ又はシステムメモリ）及び実行ユニットアレイ４１４と接続する。一実施例において、サンプリングエンジン４３０は、実行アレイ４１４がメモリからグラフィックス及びメディアデータを読み取ることを可能にするスケーラブル実行ユニットアレイ４１４のためのメモリアクセス機構を提供する。一実施例において、サンプリングエンジン４３０は、メディアに対して特殊な画像サンプリング動作を実行するロジックを含む。
【００４８】
サンプリングエンジン４３０内の特殊メディアサンプリングロジックは、デノイズ／デインタレース（de-noise/de-interlace）モジュール４３２、動き推定（motion  estimation）モジュール４３４、および画像スケーリング及びフィルタリングモジュール４３６を含む。デノイズ／デインタレースモジュール４３２は、デコードされたビデオデータに対して、デノイズ（de-noise）又はデインタレース（de-interlace）アルゴリズムのうちの１つ又は複数を実行するロジックを含む。デインタレースロジックは、インタレースされたビデオコンテンツの交互のフィールド（alternating  field）をビデオの単一フレームに結合する。デノイズロジックは、ビデオ及び画像データからデータノイズを削減するか又は除去する。一実施例において、デノイズロジック及びデインタレースロジックは動き適応可能（motion  adaptive）であり、ビデオデータ内で検出された動きの量に基づいて空間的又は時間的フィルタリングを使用する。一実施例において、デノイズ／デインタレースモジュール４３２は、（例えば、動き推定エンジン４３４内の）専用の動き検出ロジックを含む。
【００４９】
動き推定エンジン４３４は、ビデオデータに対する動きベクトル推定及び予測のようなビデオ加速機能（video  acceleration  function）を実行することによって、ビデオ操作のためのハードウェアアクセラレーション（hardware  acceleration）を提供する。動き推定エンジンは、連続するビデオフレーム間の画像データの変化を記述する動きベクトルを判定する。一実施例において、グラフィックスプロセッサメディアコーデックは、ビデオモーション推定エンジン４３４を使用して、マクロブロックレベルでビデオに対する操作を実行し、そうでなければ、汎用プロセッサを使用して実行するために計算的に集中的である可能性がある。一実施例において、動き推定エンジン４３４は、ビデオデータ内の動きの方向又は大きさに敏感であるか又は適応するビデオデコード及び処理機能を支援するために、グラフィックスプロセッサの構成要素が一般に利用可能である。
【００５０】
画像スケーリング及びフィルタリングモジュール４３６は、生成された画像及びビデオの視覚的品質を向上させるための画像処理操作を実行する。一実施例において、スケーリング及びフィルタリングモジュール４３６は、データを実行ユニットアレイ４１４に提供する前に、サンプリング動作中に画像及びビデオデータを処理する。
【００５１】
一実施例において、グラフィックス処理エンジン４１０は、メモリにアクセスするためのグラフィックスサブシステムに対する追加機構を提供するデータポート４４４を含む。データポート４４４は、レンダターゲット書き込み（render  target  writes）、定数バッファ読み出し（constant  buffer  reads）、スクラッチメモリ空間読み出し／書き込み（scratch  memory  space  reads/writes）、及びメディア表面アクセス（media  surface  accesses）を含む動作のためのメモリアクセスを容易にする。一実施例において、データポート４４４は、メモリへのアクセスをキャッシュするためのキャッシュメモリ空間を含む。キャッシュメモリは、データポートを介してメモリにアクセスする複数のサブシステムに対して、単一のデータキャッシュであってもよいし、又は複数のキャッシュに分割されていてもよい（例えば、レンダバッファキャッシュ（render  buffer  cache）、定数バッファキャッシュなど）。一実施例において、実行ユニットアレイ４１４内の実行ユニット上で実行されるスレッドは、グラフィックス処理エンジン４１０のサブシステムのそれぞれを接続するデータ分配相互接続（data  distribution  interconnect）を介してメッセージを交換することによって、データポートと通信する。
【００５２】
図７は、グラフィックスプロセッサの別の実施例のブロック図である。一実施例において、グラフィックスプロセッサは、リング相互接続部５０２、パイプラインフロントエンド５０４、メディアエンジン５３７、及びグラフィックスコア５８０Ａ〜Ｎを含む。リング相互接続部５０２は、グラフィックスプロセッサを、他のグラフィックスプロセッサ又は１つ若しくは複数の汎用プロセッサコアを含んでいる他の処理ユニットに接続する。一実施例において、グラフィックスプロセッサは、マルチコア処理システム内に統合された多くのプロセッサのうちの１つである。
【００５３】
グラフィックプロセッサは、リング相互接続部５０２を介してコマンドのバッチを受信する。入ってくるコマンドは、パイプラインフロントエンド５０４内のコマンドストリーマ５０３によって解釈される。グラフィックスプロセッサは、（複数の）グラフィックスコア５８０Ａ〜５８０Ｎを介して３Ｄジオメトリ処理及びメディア処理を実行するスケーラブルな実行ロジックを含む。３Ｄジオメトリ処理コマンドの場合、コマンドストリーマ５０３はコマンドをジオメトリパイプライン５３６に供給する。少なくともいくつかのメディア処理コマンドの場合、コマンドストリーマ５０３は、ビデオフロントエンド５３４にコマンドを供給し、ビデオフロントエンド５３４は、メディアエンジン５３７と接続する。メディアエンジン５３７は、ビデオ及び画像後処理のためのビデオ品質エンジン（video  quality  engine：ＶＱＥ）５３０と、ハードウェアで加速された（hardware-accelerated）メディアデータエンコード及びデコードを提供するマルチフォーマットエンコード／デコード（ＭＦＸ）５３３エンジンとを含む。ジオメトリパイプライン５３６及びメディアエンジン５３７は、それぞれ、少なくとも１つのグラフィックスコア５８０Ａにより提供されるスレッド実行リソースに対する実行スレッドを生成する。
【００５４】
グラフィックスプロセッサは、それぞれが複数のサブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎ（コアサブスライス（core  sub-slice）と呼ばれることもある）を有するモジュラーコア５８０Ａ〜Ｎ（コアスライス（core  slice）と呼ばれることもある）を特徴とする、スケーラブルなスレッド実行リソースを含む。グラフィックスプロセッサは、任意の数のグラフィックスコア５８０Ａから５８０Ｎを有することができる。一実施例において、グラフィックスプロセッサは、第１のサブコア５５０Ａ及び第２のサブコア５６０Ａを少なくとも有するグラフィックスコア５８０Ａを含む。別の実施例では、グラフィックスプロセッサは、単一のサブコア（例えば、５５０Ａ）を有する低電力プロセッサである。一実施例において、グラフィックスプロセッサは、それぞれが第１のサブコア５５０Ａ〜Ｎのセットと第２のサブコア５６０Ａ〜Ｎのセットを含んでいる、複数のグラフィックスコア５８０Ａ〜Ｎを含む。第１のサブコア５５０Ａ〜Ｎのセット内の各サブコアは、少なくとも第１の組の実行ユニット５５２Ａ〜Ｎ及びメディア／テクスチャサンプラ５５４Ａ〜Ｎを含む。第２のサブコア５６０Ａ〜Ｎのセット内の各サブコアは、少なくとも第２の組の実行ユニット５６２Ａ〜Ｎ及びサンプラ５６４Ａ〜Ｎを含む。一実施例において、各サブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎは、１組の共有リソース５７０Ａ〜Ｎを共有する。一実施例において、共有リソースは、共有キャッシュメモリ及びピクセル操作ロジックを含む。グラフィックスプロセッサの様々な実施例には、他の共有リソースが同様に含まれ得る。
【００５５】
図８は、グラフィックス処理エンジンの一実施例において使用される処理要素のアレイを含んでいるスレッド実行ロジック６００を例示する。一実施例において、スレッド実行ロジック６００は、ピクセルシェーダ（pixel  shader）６０２、スレッドディスパッチャ６０４、命令キャッシュ６０６、複数の実行ユニット６０８Ａ〜Ｎを含むスケーラブル実行ユニットアレイ、サンプラ６１０、データキャッシュ６１２、及びデータポート６１４を含む。一実施例において、含まれる構成要素は、構成要素のそれぞれにリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック６００は、命令キャッシュ６０６、データポート６１４、サンプラ６１０、及び実行ユニットアレイ６０８Ａ〜Ｎのうちの１つ又は複数を通した、システムメモリ又はキャッシュメモリなどのメモリに対する１つ又は複数の接続を含む。一実施例において、各実行ユニット（例えば、６０８Ａ）は、複数の同時スレッドを実行し、各スレッドに対して複数のデータ要素を並列に処理することができる個別のベクトルプロセッサである。実行ユニットアレイ６０８Ａ〜Ｎは、任意の数の個々の実行ユニットを含む。
【００５６】
一実施例において、実行ユニットアレイ６０８Ａ〜Ｎは、主に、“シェーダ（shader）”プログラムを実行するために使用される。一実施例において、アレイ６０８Ａ〜Ｎ内の実行ユニットは、グラフィックスライブラリ（例えば、Ｄｉｒｅｃｔ３Ｄ及びＯｐｅｎＧＬ）からのシェーダプログラムが最小限の変形で実行されるように、多くの標準３Ｄグラフィックスシェーダ命令に対するネイティブサポート（native  support）を含む命令セットを実行する。実行ユニットは、頂点及びジオメトリ処理（例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ）、ピクセル処理（例えば、ピクセルシェーダ、フラグメントシェーダ）、及び汎用処理（例えば、計算及びメディアシェーダ）をサポートする。
【００５７】
実行ユニットアレイ６０８Ａ〜Ｎ内の各実行ユニットは、データ要素のアレイに対して操作する。データ要素の数は、“実行サイズ”又は命令に対するチャネル数である。実行チャネルは、データ要素のアクセス、マスキング、及び命令内でのフロー制御のための論理的な実行単位である。チャネルの数は、特定のグラフィックスプロセッサの物理的なＡＬＵ又はＦＰＵの数とは無関係であってもよい。実行ユニット６０８Ａ〜６０８Ｎは、整数及び浮動小数点データタイプをサポートする。
【００５８】
実行ユニット命令セットは、単一命令複数データ（single  instruction  multiple  data：ＳＩＭＤ）命令を含む。様々なデータ要素は、パック化されたデータ型としてレジスタに記憶されることができ、実行ユニットは、様々な要素を、要素のデータサイズに基づいて処理することになる。例えば、２５６ビット幅のベクトルに関して操作する場合、２５６ビットのベクトルはレジスタに記憶され、実行ユニットは、ベクトルに関して、４個の別個の６４ビットパックデータ要素（クワッドワード（ＱＷ）サイズのデータ要素）として、８個の別個の３２ビットパックデータ要素（ダブルワード（ＤＷ）サイズのデータ要素）として、１６個の別個の１６ビットパックデータ要素（ワード（Ｗ）サイズのデータ要素）として、又は３２個の別個の８ビットパックデータ要素（バイト（Ｂ）サイズのデータ要素）として操作する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
【００５９】
実行ユニットに対するスレッド命令をキャッシュするために、１つ又は複数の内部命令キャッシュ（例えば、６０６）がスレッド実行ロジック６００に含まれる。一実施例において、スレッド実行中にスレッドデータをキャッシュするために、１つ又は複数のデータキャッシュ（例えば、６１２）が含まれる。サンプラ６１０は、３Ｄ動作のためのテクスチャサンプリングとメディア操作のためのメディアサンプリングを提供するために含まれる。一実施例において、サンプラ６１０は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャ又はメディアデータを処理する、特殊なテクスチャ又はメディアサンプリング機能を含む。
【００６０】
実行中、グラフィックス及びメディアパイプラインは、スレッド開始要求をスレッド生成及びディスパッチロジックを介してスレッド実行ロジック６００に送信する。スレッド実行ロジック６００は、グラフィックス及びメディアパイプラインからのスレッド開始要求を調停し、要求されたスレッドを１つ又は複数の実行ユニット６０８Ａ〜Ｎ上でインスタンス化する、ローカルスレッドディスパッチャ６０４を含む。例えば、ジオメトリパイプライン（例えば、図３の５３６）は、頂点処理スレッド（vertex  processing  thread）、テッセレーションスレッド（tessellation  thread）、又はジオメトリ処理スレッド（geometry  processing  thread）を、スレッド実行ロジック６００にディスパッチする。スレッドディスパッチャ６０４は、同様に、実行中のシェーダプログラムからの実行時スレッド（runtime  thread）生成要求を処理することができる。
【００６１】
一度ジオメトリックオブジェクトのグループが処理され、ピクセルデータにラスタライズされると、ピクセルシェーダ６０２が、出力情報を更に計算し、出力面（output  surface）（例えば、カラーバッファ、奥行きバッファ、ステンシルバッファ（stencil  buffer）など）に結果を書き込ませるために、呼び出される。一実施例において、ピクセルシェーダ６０２は、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点属性の値を計算する。次に、ピクセルシェーダ６０２は、ＡＰＩ提供のピクセルシェーダプログラムを実行する。ピクセルシェーダプログラムを実行するために、ピクセルシェーダ６０２は、スレッドディスパッチャ６０４を介して、実行ユニット（例えば、６０８Ａ）にスレッドをディスパッチする。ピクセルシェーダ６０２は、サンプラ６１０内のテクスチャサンプリングロジックを使用して、メモリに記憶されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータ及び入力ジオメトリデータに対する算術演算は、各ジオメトリックフラグメントのピクセルカラーデータを計算するか、又はさらなる処理から１つ又は複数のピクセルを破棄する。
【００６２】
一実施例において、データポート６１４は、スレッド実行ロジック６００が処理されたデータをグラフィックスプロセッサ出力パイプライン上で処理するためにメモリに出力するための、メモリアクセス機構を提供する。一実施例において、データポート６１４は、データポートを介したメモリアクセスに関するデータをキャッシュするために、１つ又は複数のキャッシュメモリ（たとえば、データキャッシュ６１２）を含むか、又は１つ又は複数のキャッシュメモリに接続する。
【００６３】
図９は、本実施例による、グラフィックスプロセッサ実行ユニットの命令フォーマットを例示するブロック図である。一実施例において、グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、一般的に実行ユニット命令に含まれる構成要素を例示し、一方、破線は、任意選択であるか、又は命令のサブセットにのみ含まれる構成要素を含む。説明及び例示された命令フォーマットは、一度命令が処理されると命令デコードから生じるマイクロ動作（micro-operations）とは対照的な、実行ユニットに供給される命令である、マクロ命令である。
【００６４】
一実施例において、グラフィックスプロセッサ実行ユニットは、１２８ビットフォーマットの命令７１０を元々サポートする。選択された命令、命令オプション、及びオペランドの数に基づいて、いくつかの命令に対して、６４ビットの圧縮された命令フォーマット７３０が利用可能である。元々の１２８ビットフォーマット７１０は、全ての命令オプションへのアクセスを提供し、一方、６４ビットフォーマット７３０では、いくつかのオプション及び動作が制限される。６４ビットフォーマット７３０において利用可能な固有の命令は、実施例によって異なる。一実施例において、命令は、インデックスフィールド７１３におけるインデックス値のセットを使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブル出力を使用して、１２８ビットフォーマット７１０における固有の命令を再構成する。
【００６５】
各フォーマットについて、命令オペコード７１２は、実行ユニットが実行するべき動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各カラーチャネルにわたって同時加算動作を実行する。デフォルトで、実行ユニットは、各命令をオペランドの全てのデータチャネルにわたって実行する。命令制御フィールド７１２は、チャネル選択（例えば、予測）及びデータチャネル順序（data  channel  order）（例えば、スウィズル（swizzle））などの特定の実行オプションに対する制御を可能にする。１２８ビット命令７１０の場合、実行サイズフィールド７１６は、並列に実行されることになるデータチャネルの数を制限する。実行サイズフィールド７１６は、６４ビットコンパクト命令フォーマット７３０において使用するためには利用可能ではない。
【００６６】
いくつかの実行ユニット命令は、２つのソースオペランドｓｒｃ０  ７２０、ｓｒｃ１  ７２２、及び１つの宛先（destination：デスティネーション）７１８を含む３つまでのオペランドを有する。一実施例において、実行ユニットは、宛先のうちの１つが暗示される２つの宛先命令をサポートする。データ操作命令は、第３のソースオペランド（例えば、ＳＲＣ２  ７２４）を有することができ、ここで、命令オペコードＪＪ１２は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される（例えば、ハードコードされた）即値（immediate  value：イミディエート値）であってもよい。
【００６７】
一実施例において、命令は、オペコードビットフィールドに基づいてグループ化され、オペコードデコード７４０を単純化する。８ビットのオペコードの場合、ビット４、５、及び６は、実行ユニットがオペコードのタイプを判定することを可能にする。示された正確なオペコードのグループは、例示的なものである。一実施例において、移動及び論理オペコードグループ７４２は、データ移動及び論理命令（例えば、ｍｏｖ、ｃｍｐ）を含む。移動及び論理グループ７４２は、５つの最上位ビット（ＭＳＢ）を共有し、ここで、移動命令は、００００ｘｘｘｘｂ（例えば０ｘ００）の形式であり、論理命令は、０００１ｘｘｘｘｂ（例えば０ｘ１０）の形式である。フロー制御命令グループ７４４（例えば、ｃａｌｌ、ｊｍｐ）は、００１０ｘｘｘｘｂ（例えば、０ｘ２０）の形式の命令を含む。多方面の（miscellaneous）命令グループ７４６は、００１１ｘｘｘｘｂ（例えば、０ｘ３０）の形式の同期命令（例えば、ｗａｉｔ、ｓｅｎｄ）を含む命令の混合を含む。並列演算命令グループ７４８は、０１００ｘｘｘｘｂ（例えば、０ｘ４０）の形式のコンポーネント単位の算術命令（例えば、ａｄｄ、ｍｕｌ）を含む。並列演算グループ７４８は、データチャネルにわたって並列に算術演算を実行する。ベクトル演算グループ７５０は、０１０１ｘｘｘｘｂ（例えば、０ｘ５０）の形式の算術命令（例えば、ｄｐ４）を含む。ベクトル演算グループは、ベクトル演算子に対するドット積演算などの演算を実行する。
【００６８】
図１０は、グラフィックスパイプライン８２０、メディアパイプライン８３０、ディスプレイエンジン８４０、スレッド実行ロジック８５０、及びレンダ出力パイプライン（render  output  pipeline）８７０を含むグラフィックスプロセッサの別の実施例のブロック図である。一実施例において、グラフィックスプロセッサは、１つ又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、１つ又は複数の制御レジスタ（図示せず）へのレジスタ書き込みによって、又はリング相互接続部８０２を介してグラフィックスプロセッサに発行されるコマンドによって制御される。リング相互接続部８０２は、グラフィックスプロセッサを、他のグラフィックスプロセッサ又は汎用プロセッサなどの他の処理コンポーネントに接続する。リング相互接続部からのコマンドは、グラフィックスパイプライン８２０又はメディアパイプライン８３０の個々のコンポーネントに命令を供給するコマンドストリーマ８０３によって解釈される。
【００６９】
コマンドストリーマ８０３は、メモリから頂点データを読み出し、コマンドストリーマ８０３によって提供される頂点処理コマンドを実行する頂点フェッチャ８０５コンポーネントの動作を指示する。頂点フェッチャ８０５は、頂点シェーダ８０７に頂点データを提供し、頂点シェーダ８０７は、各頂点に対する座標空間変換（coordinate  space  transformation）及びライティング（lighting）操作を実行する。頂点フェッチャ８０５及び頂点シェーダ８０７は、スレッドディスパッチャ８３１を介して実行スレッドを実行ユニット８５２Ａ、８５２Ｂにディスパッチすることによって、頂点処理命令を実行する。
【００７０】
一実施例において、実行ユニット８５２Ａ、８５２Ｂは、グラフィックス及びメディア操作を実行するための命令セットを有するベクトルプロセッサのアレイである。実行ユニット８５２Ａ、８５２Ｂは、各アレイに特有であるか、又はアレイ間で共有される、取り付けられたＬ１キャッシュ８５１を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は異なるパーティションにデータ及び命令を含むように区分された単一キャッシュとして設定されることができる。
【００７１】
一実施例において、グラフィックスパイプライン８２０は、３Ｄオブジェクトのハードウェアで加速されたテッセレーション（tessellation）を実行するために、テッセレーションコンポーネントを含む。プログラム可能なハル（hull）シェーダ８１１は、テッセレーション操作を設定する。プログラム可能なドメインシェーダ８１７は、テッセレーション出力のバックエンド評価を提供する。テッセレータ（tessellator）８１３は、ハルシェーダ８１１の指示で動作するとともに、グラフィックスパイプライン８２０への入力として提供される粗いジオメトリックモデルに基づいて詳細なジオメトリックオブジェクトのセットを生成する専用のロジックを含む。テッセレーションが使用されない場合、テッセレーションコンポーネント８１１、８１３、８１７はバイパスされ得る。
【００７２】
完全なジオメトリックオブジェクトは、実行ユニット８５２Ａ、８５２Ｂにディスパッチされた１つ若しくは複数のスレッドを介してジオメトリシェーダ８１９により処理されるか、又はクリッパ８２９に直接的に進むことができる。ジオメトリシェーダは、グラフィックスパイプラインの前のステージのように、頂点又は頂点のパッチではなく、ジオメトリックオブジェクト全体に対して動作する。テッセレーションが無効にされている場合、ジオメトリシェーダ８１９は、頂点シェーダ８０７から入力を受け取る。ジオメトリシェーダ８１９は、ジオメトリシェーダプログラムによりプログラム可能であり、テッセレーションユニットが無効にされている場合、ジオメトリテッセレーション（geometry  tessellation）を実行する。
【００７３】
ラスタライズに先立って、頂点データはクリッパ８２９によって処理され、クリッパ８２９は、クリッピング及びジオメトリシェーダ機能を有する固定機能クリッパ又はプログラマブルクリッパのいずれかである。一実施例において、レンダ出力パイプライン８７０内のラスタライザ８７３は、ピクセルシェーダにディスパッチして、ジオメトリックオブジェクトをそれらのピクセルごとの表現に変換する。一実施例において、ピクセルシェーダロジックは、スレッド実行ロジック８５０に含まれる。
【００７４】
グラフィックスエンジンは、相互接続バス、相互接続ファブリック、又はグラフィックスエンジンの主要コンポーネント間でデータとメッセージの受け渡しを可能にする他の相互接続機構を備えている。一実施例において、実行ユニット８５２Ａ、８５２Ｂ、及び関連する（複数の）キャッシュ８５１、テクスチャ及びメディアサンプラ８５４、並びにテクスチャ／サンプラキャッシュ８５８は、メモリアクセスを実行し、グラフィックスエンジンのレンダ出力パイプラインコンポーネント（render  output  pipeline  component）と通信するために、データポート８５６を介して相互接続する。一実施例において、サンプラ８５４、キャッシュ８５１、８５８、及び実行ユニット８５２Ａ、８５２Ｂは、それぞれ別々のメモリアクセス経路を有する。
【００７５】
一実施例において、レンダ出力パイプライン８７０は、頂点ベースのオブジェクトをそれらの関連するピクセルベースの表現に変換するラスタライザ及び奥行きテストコンポーネント８７３を含む。一実施例において、ラスタライザロジックは、固定機能の（fixed  function）三角形及びラインラスタライゼーション（triangle  and  line  rasterization）を実行するためのｗｉｎｄｏｗｅｒ／ｍａｓｋｅｒユニットを含む。１つの実施例では、関連するレンダ及び奥行きバッファキャッシュ（render  and  depth  buffer  cache）８７８、８７９が、同様に、利用可能である。ピクセル演算コンポーネント８７７は、データに対してピクセルベースの演算を実行するが、場合によっては、２Ｄ動作に関連するピクセル操作（例えば、ブレンディングを伴うビットブロック画像転送）は、２Ｄエンジン８４１によって実行されるか、又はオーバーレイ表示面を使用してディスプレイコントローラ８４３によって表示時に置換される。一実施例において、共有Ｌ３キャッシュ８７５は、全てのグラフィックスコンポーネントが使用可能であり、メインシステムメモリを使用せずにデータを共有することを可能にする。
【００７６】
グラフィックスプロセッサメディアパイプライン８３０は、メディアエンジン８３７及びビデオフロントエンド８３４を含む。一実施例において、ビデオフロントエンド８３４は、コマンドストリーマ８０３からパイプラインコマンドを受信する。しかしながら、一実施例では、メディアパイプライン８３０は、別個のコマンドストリーマを含む。ビデオフロントエンド８３４は、コマンドをメディアエンジン８３７に送る前に、メディアコマンドを処理する。一実施例において、メディアエンジンは、スレッドディスパッチャ８３１を介してスレッド実行ロジック８５０にディスパッチするためにスレッドを生成するスレッド生成機能を含む。
【００７７】
一実施例において、グラフィックスエンジンはディスプレイエンジン８４０を含む。一実施例において、ディスプレイエンジン８４０は、グラフィックスプロセッサの外部にあり、リング相互接続部８０２又は他の何らかの相互接続バス若しくはファブリックを介して、グラフィックスプロセッサと接続する。ディスプレイエンジン８４０は、２Ｄエンジン８４１及びディスプレイコントローラ８４３を含む。ディスプレイエンジン８４０は、３Ｄパイプラインとは独立して動作することができる特別目的のロジックを含む。ディスプレイコントローラ８４３は、ラップトップコンピュータのように、システム統合型ディスプレイ装置であってもよいディスプレイ装置（図示せず）か、又はディスプレイ装置コネクタを介して取り付けられた外部ディスプレイ装置と接続する。
【００７８】
グラフィックスパイプライン８２０及びメディアパイプライン８３０は、複数のグラフィックス及びメディアプログラミングインターフェイスに基づいて動作を実行するように構成可能であり、いずれか１つのアプリケーションプログラミングインターフェイス（ＡＰＩ）に固有ではない。一実施例において、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックス又はメディアライブラリに固有であるＡＰＩコール（API  calls）を、グラフィックスプロセッサによって処理されることができるコマンドに変換する。様々な実施例では、クロノスグループ（Khronos  Group）によりサポートされるオープングラッフィクスライブラリ（Open  Graphics  Library：ＯｐｅｎＧＬ）及びオープンコンピューティング言語（Open  Computing  Language：ＯｐｅｎＣＬ）、マイクロソフト（登録商標）社（Microsoft（登録商標）  Corporation）が提供するＤｉｒｅｃｔ３Ｄライブラリに対するサポートが提供され、又は、一実施例では、ＯｐｅｎＧＬ及びＤ３Ｄの両方、に対するサポートが提供される。オープンソースコンピュータビジョンライブラリ（Open  Source  Computer  Vision  Library：ＯｐｅｎＣＶ）のサポートが、同様に提供され得る。将来のＡＰＩのパイプラインからグラフィックスプロセッサのパイプラインへのマッピングが可能な場合、互換性のある３Ｄパイプラインを備えた将来のＡＰＩが、同様にサポートされるであろう。
【００７９】
図１１Ａは、一実施例によるグラフィックスプロセッサコマンドフォーマットを示すブロック図であるとともに、図１１Ｂは、一実施例によるグラフィックスプロセッサコマンドシーケンスを示すブロック図である。図１１Ａの実線のボックスは、一般にグラフィックスコマンドに含まれる構成要素を例示し、一方、点線は、任意選択であるか、又はグラフィックスコマンドのサブセットにのみ含まれる構成要素を含む。図１１Ａの例示的なグラフィックスプロセッサコマンドフォーマット９００は、コマンドのターゲットクライアント９０２、コマンド動作コード（オペコード）９０４、及びコマンドに関する関連データ９０６を識別するデータフィールドを含む。サブオペコード９０５及びコマンドサイズ９０８が、同様に、いくつかのコマンドに含まれる。
【００８０】
クライアント９０２は、コマンドデータを処理するグラフィックス装置のクライアントユニットを指定する。一実施例において、グラフィックスプロセッサコマンドパーサは、各コマンドのクライアントフィールドを調べて、コマンドのさらなる処理を条件付けし、コマンドデータを適切なクライアントユニットに経路指定（route）する。一実施例において、グラフィックスプロセッサクライアントユニットは、メモリインタフェースユニット、レンダユニット、２Ｄユニット、３Ｄユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。一度コマンドがクライアントユニットによって受信されると、クライアントユニットは、オペコード９０４、そして存在する場合にはサブオペコード９０５を読み取り、実行する動作を判定する。クライアントユニットは、コマンドのデータフィールド９０６内の情報を用いてコマンドを実行する。いくつかのコマンドでは、明示的なコマンドサイズ９０８がコマンドのサイズを指定することが期待される。一実施例において、コマンドパーサは、コマンドオペコードに基づいて、コマンドのうちの少なくともいくつかのサイズを自動的に判定する。一実施例において、コマンドは、ダブルワードの倍数によって整列される。
【００８１】
図１１Ｂにおけるフローチャートは、サンプルコマンドシーケンス９１０を示す。一実施例において、グラフィックスプロセッサの一実施例を特徴とするデータ処理システムのソフトウェア又はファームウェアは、一連のグラフィックス操作をセットアップし、実行し、終了するために示されたコマンドシーケンスのバージョンを使用する。例示的な目的のために、例示的なコマンドシーケンスが示されるとともに説明されるが、しかしながら、実施例は、これらのコマンド又はこのコマンドシーケンスに限定されない。さらに、コマンドは、グラフィックスプロセッサが少なくとも部分的に並行してコマンドのシーケンスを処理するように、コマンドシーケンス内のコマンドのバッチとして発行されてもよい。
【００８２】
サンプルコマンドシーケンス９１０は、任意のアクティブグラフィックスパイプラインがパイプラインにおける現在保留中のコマンドを完了させることができるパイプラインフラッシュコマンド９１２によって始まる。一実施例では、３Ｄパイプライン９２２とメディアパイプライン９２４は同時に動作しない。パイプラインフラッシュは、アクティブグラフィックスパイプラインが任意の保留中のコマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサ用のコマンドパーサは、アクティブな描画エンジンが保留中の動作を完了し、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止する。任意に、レンダキャッシュ内の“ダーティ”とマークされたデータは全てメモリにフラッシュされることができる。パイプラインフラッシュコマンド９１２は、パイプライン同期のために、又はグラフィックスプロセッサを低電力状態に設定する前に使用されることができる。
【００８３】
パイプライン選択コマンド９１３は、コマンドシーケンスがグラフィックスプロセッサにパイプライン間を明示的に切り替えることを要求する場合に使用される。パイプライン選択コマンド９１３は、コンテキストが両方のパイプラインに対してコマンドを発行することになる場合を除いて、パイプラインコマンドを発行する前に実行コンテキスト内で１回だけ必要とされる。一実施例では、パイプライン選択コマンド９１３によるパイプラインスイッチの直前に、パイプラインフラッシュコマンド９１２が必要とされる。
【００８４】
パイプライン制御コマンド９１４は、動作のためにグラフィックスパイプラインを設定するとともに、３Ｄパイプライン９２２及びメディアパイプライン９２４をプログラムするために使用される。パイプライン制御コマンド９１４は、アクティブなパイプラインに対して、パイプライン状態を設定する。一実施例において、パイプライン制御コマンド９１４は、パイプライン同期、及びコマンドのバッチを処理する前にアクティブパイプライン内の１つ又は複数のキャッシュメモリからデータを消去するために使用される。
【００８５】
リターンバッファ状態コマンド９１６は、それぞれのパイプラインがデータを書き込むためのリターンバッファのセットを設定するために使用される。いくつかのパイプライン演算は、処理中に動作が中間データを書き込む１つ又は複数のリターンバッファの割り当て、選択、又は設定を必要とする。グラフィックスプロセッサは、同様に、出力データを記憶し、クロススレッド通信（cross  thread  communication）を実行するために、１つ又は複数のリターンバッファを使用する。リターンバッファ状態コマンド９１６は、一連のパイプライン演算に使用するリターンバッファのサイズ及び数を選択することを含む。
【００８６】
コマンドシーケンス内の残りのコマンドは、動作のためのアクティブなパイプラインに基づいて異なる。パイプライン判定９２０に基づくと、コマンドシーケンスは、３Ｄパイプライン状態９３０で始まる３Ｄパイプライン９２２、又はメディアパイプライン状態９４０で始まるメディアパイプライン９２４に合わせて調整される。
【００８７】
３Ｄパイプライン状態９３０に関するコマンドは、頂点バッファ状態（vertex  buffer  state）、頂点要素状態（vertex  element  state）、一定色状態（constant  color  state）、奥行きバッファ状態（depth  buffer  state）、及び３Ｄプリミティブコマンドが処理される前に設定されるべき他の状態変数に対する３Ｄ状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の３Ｄ  ＡＰＩに少なくとも部分的に基づいて決定される。３Ｄパイプライン状態９３０コマンドは、特定のパイプライン要素を、これらの要素が使用されない場合、同様に、選択的に無効にするか、又はバイパスすることが可能である。
【００８８】
３Ｄプリミティブ９３２コマンドは、３Ｄパイプラインにより処理されるべき３Ｄプリミティブを投入するために使用される。３Ｄプリミティブ９３２コマンドを介してグラフィックスプロセッサに渡されるコマンド及び関連するパラメータは、グラフィックスパイプラインにおける頂点フェッチ機能に転送される。頂点フェッチ機能は、３Ｄプリミティブ９３２コマンドデータを使用して頂点データ構造を生成する。頂点データ構造は、１つ又は複数のリターンバッファに記憶される。３Ｄプリミティブ９３２コマンドは、頂点シェーダによって３Ｄプリミティブに対して頂点操作を実行するために使用される。頂点シェーダを処理するために、３Ｄパイプライン９２２は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
【００８９】
３Ｄパイプライン９２２は、実行９３４コマンド又はイベントを介してトリガされる。一実施例では、レジスタ書き込みがコマンド実行をトリガする。一実施例では、コマンドシーケンス中の“ｇｏ（進行）”又は“ｋｉｃｋ（キック）”コマンドを介して実行がトリガされる。一実施例において、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックスパイプラインを通してコマンドシーケンスをフラッシュする。３Ｄパイプラインは、３Ｄプリミティブのジオメトリ処理を実行することになる。一度操作が完了すると、結果として得られるジオメトリックオブジェクトはラスタライズされ、ピクセルエンジンは結果として生じるピクセルに色付けする。ピクセルシェーディング及びピクセルバックエンド操作を制御するための追加のコマンドが、同様に、これらの操作に含められ得る。
【００９０】
サンプルコマンドシーケンス９１０は、メディア操作を実行するときにメディアパイプライン９２４の経路に従う。一般に、メディアパイプライン９２４のためのプログラミングの特定の使用及び方法は、メディア又は実行されるべき計算操作に依存する。特定のメディアデコード操作は、メディアデコード中にメディアパイプラインにオフロードされ得る。メディアパイプラインは、同様に、バイパスされることができ、メディアデコードは、１つ又は複数の汎用処理コアにより提供されるリソースを使用して、全体又は一部において実行されることができる。一実施例において、メディアパイプラインは、同様に、汎用グラフィックスプロセッサユニット（ＧＰＧＰＵ）操作のための要素を含み、ここで、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的に関係しない計算シェーダプログラム（computational  shader  programs）を使用してＳＩＭＤベクトル演算を実行するために使用される。
【００９１】
メディアパイプライン９２４は、３Ｄパイプライン９２２と同様に構成されている。１組のメディアパイプライン状態コマンド９４０は、メディアオブジェクトコマンド９４２の前にコマンドキューにディスパッチされるか、又はコマンドキューにセットされる。メディアパイプライン状態コマンド９４０は、メディアオブジェクトを処理するために使用されることになるメディアパイプライン要素を設定するためのデータを含む。これには、エンコード又はデコードフォーマットなど、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを設定するためのデータが含まれる。メディアパイプライン状態コマンド９４０は、同様に、状態設定のバッチを含む“間接”状態要素への１つ又は複数のポインタの使用をサポートする。
【００９２】
メディアオブジェクトコマンド９４２は、メディアパイプラインによる処理のために、メディアオブジェクトへのポインタを供給する。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。一実施例では、メディアオブジェクトコマンド９４２を発行する前に、全てのメディアパイプライン状態が有効でなければならない。一度パイプライン状態が設定され、メディアオブジェクトコマンド９４２が待ち行列に入れられると、メディアパイプライン９２４は、実行９４４コマンド又は同等の実行イベント（例えば、レジスタ書き込み）を介してトリガされる。その場合に、メディアパイプライン９２４からの出力は、３Ｄパイプライン９２２又はメディアパイプライン９２４により提供される操作によって後処理されてもよい。一実施例において、ＧＰＧＰＵ操作は、メディア操作と同様の方法で設定され実行される。
【００９３】
図１２は、一実施例によるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを例示する。ソフトウェアアーキテクチャは、３Ｄグラフィックスアプリケーション１０１０、オペレーティングシステム１０２０、及び少なくとも１つのプロセッサ１０３０を含む。プロセッサ１０３０は、グラフィックスプロセッサ１０３２、及び１つ又は複数の汎用プロセッサコア１０３４を含む。グラフィックスアプリケーション１０１０及びオペレーティングシステム１０２０は、それぞれ、データ処理システムのシステムメモリ１０５０内で実行される。
【００９４】
一実施例において、３Ｄグラフィックスアプリケーション１０１０は、シェーダ命令１０１２を含む１つ又は複数のシェーダプログラムを含む。シェーダ言語命令は、高レベルシェーダ言語（ＨＬＳＬ）又はＯｐｅｎＧＬシェーダ言語（ＧＬＳＬ）のような高レベルシェーダ言語であってもよい。アプリケーションは、同様に、汎用プロセッサコア１０３４による実行に適した機械語における実行可能命令１０１４を含む。アプリケーションは、同様に、頂点データにより定義されるグラフィックスオブジェクト１０１６を含む。
【００９５】
オペレーティングシステム１０２０は、マイクロソフト（登録商標）社のＭｉｃｒｏｓｏｆｔ（登録商標）Ｗｉｎｄｏｗｓ（登録商標）オペレーティングシステム、独自のＵＮＩＸ（登録商標）のようなオペレーティングシステム、又はＬｉｎｕｘ（登録商標）カーネルの変形を使用するオープンソースのＵＮＩＸ（登録商標）のようなオペレーティングシステムであってもよい。Ｄｉｒｅｃｔ３Ｄ  ＡＰＩが使用されているとき、オペレーティングシステム１０２０は、フロントエンドシェーダコンパイラ１０２４を使用して、ＨＬＳＬのシェーダ命令１０１２を下位レベルのシェーダ言語にコンパイルする。このコンパイルは、実行時コンパイル（just-in-time  compilation）であってもよいか、又はアプリケーションは、共有プレコンパイル（share  pre-compilation）を実行できる。一実施例において、高レベルシェーダは、３Ｄグラフィックスアプリケーション１０１０のコンパイル中に低レベルシェーダにコンパイルされる。
【００９６】
ユーザモードグラフィックスドライバ１０２６は、シェーダ命令１０１２をハードウェア特有の表現に変換するバックエンドシェーダコンパイラ１０２７を含むことができる。ＯｐｅｎＧＬ  ＡＰＩが使用されているとき、ＧＬＳＬ高水準言語のシェーダ命令１０１２は、コンパイルのためにユーザモードグラフィックスドライバ１０２６に渡される。ユーザモードグラフィックスドライバは、オペレーティングシステムカーネルモード機能１０２８を使用してカーネルモードグラフィックスドライバ１０２９と通信する。カーネルモードグラフィックスドライバ１０２９はグラフィックスプロセッサ１０３２と通信し、コマンド及び命令をディスパッチする。
【００９７】
様々な動作又は機能が本明細書で説明されている限り、それらは、ハードウェア回路、ソフトウェアコード、命令、構成、及び／又はデータとして記述又は定義されることができる。コンテンツは、ハードウェアロジックにおいて、あるいは、直接実行可能なソフトウェア（“オブジェクト”又は“実行可能”形式）、ソースコード、グラフィックスエンジンでの実行のために設計された高水準のシェーダコード、又は特定のプロセッサ若しくはグラフィックスコア用の命令セット内の低レベルのアセンブリ言語コードとして具体化されることができる。本明細書で説明される実施例のソフトウェアコンテンツは、コンテンツが記憶された製品によって、又は通信インタフェースを介してデータを送信するように通信インタフェースを操作する方法によって提供されることができる。
【００９８】
非一時的な機械読み取り可能な記憶媒体は、機械に、説明された機能又は動作を実行させることができ、記録可能／記録不可能媒体（例えば、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリ装置など）のような、機械（例えば、コンピューティング装置、電子システムなど）によってアクセス可能な形式で情報を記憶する任意の機構を含む。通信インタフェースは、メモリバスインタフェース、プロセッサバスインタフェース、インターネット接続、ディスクコントローラのような他のデバイスと通信するために、ハードワイヤード、無線、光などの媒体のいずれかにインタフェースする任意の機構を含む。通信インタフェースは、ソフトウェアコンテンツを記述するデータ信号を提供するために、設定パラメータを提供するか、又は通信インタフェースを準備するための信号を送信することによって設定される。通信インタフェースは、通信インタフェースに送信される１つ又は複数のコマンド又は信号を介してアクセスされることができる。
【００９９】
説明された様々な構成要素は、説明された動作又は機能を実行するための手段とすることができる。本明細書で説明される各構成要素は、ソフトウェア、ハードウェア、又はこれらの組み合わせを含む。構成要素は、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）など）、組み込みコントローラ、ハードワイヤード回路などとして実施されることができる。本明細書で説明されたものに加えて、本発明の範囲から逸脱することなく、本発明の開示された実施例及び実装例に様々な変更を行うことができる。したがって、本明細書の例示及び実施は、例示的なものであり、限定的な意味で解釈されるべきではない。本発明の範囲は、添付の請求項を参照することによってのみ判定されるべきである。
【０１００】
下記の節及び／又は実例は、さらなる実施例に関する。１つの実例の実施例は、位置限定シェーディングを実行するステップと、シェードされたプリミティブを代表座標に基づいてビンにソートするステップと、ビン内のプリミティブをその奥行きに基づいてソートするステップとを含む、方法であり得る。方法は、同様に、上記シェードされたプリミティブをソートするステップが、シェードされたプリミティブのグループをソートするステップを含む、ことを含み得る。方法は、同様に、タイル内の全ての三角形からなるグループを形成するステップを含む、ことを含み得る。方法は、同様に、上記シェードされたプリミティブをソートするステップが、上記プリミティブをビンにビニングするステップを含む、ことを含み得る。方法は、同様に、上記のソートされたプリミティブを一度に１ビンずつラスタライズするステップを含む、ことを含み得る。方法は、同様に、奥行きの順にソートされたプリミティブをラスタライズするステップを含む、ことを含み得る。方法は、同様に、座標に基づいてソートするステップが、座標、奥行き、プリミティブのサイズ及び状態に基づいてソートするステップを含む、ことを含み得る。方法は、同様に、上記座標が、グループ内の三角形の平均頂点位置として計算される、ことを含み得る。方法は、同様に、上記座標を計算するステップが、三角形の頂点の上にバウンディングボックスを形成するステップと、上記ボックスの中心の座標を使用するステップとを含む、ことを含み得る。方法は、同様に、座標を量子化し、それらを空間充填曲線に沿った整数位置に変換することにより上記座標をビンにマッピングするステップを含む、ことを含み得る。
【０１０１】
別の実例の実施例は、少なくとも、命令を記憶する１つ又は複数の非一時的なコンピュータ読み取り可能な媒体であって、上記命令が実行されると、位置限定シェーディングを実行するステップと、シェードされたプリミティブを代表座標に基づいてビンにソートするステップと、ビン内のプリミティブをその奥行きに基づいてソートするステップとを含むシーケンスを実行する、コンピュータ読み取り可能な媒体であり得る。媒体は、上記シェードされたプリミティブをソートするステップが、シェードされたプリミティブのグループをソートするステップを含む、ことを含み得る。媒体は、上記シーケンスが、タイル内の全ての三角形からなるグループを形成するステップを含む、ことを含み得る。媒体は、上記シェードされたプリミティブをソートするステップが、上記プリミティブをビンにビニングするステップを含む、ことを含み得る。媒体は、上記シーケンスが、上記のソートされたプリミティブを一度に１ビンずつラスタライズするステップを含む、ことを含み得る。媒体は、上記シーケンスが、奥行きの順にソートされたプリミティブをラスタライズするステップを含む、ことを含み得る。媒体は、座標に基づいてソートするステップが、座標、奥行き、プリミティブのサイズ及び状態に基づいてソートするステップを含む、ことを含み得る。媒体は、上記座標が、グループ内の三角形の平均頂点位置として計算される、ことを含み得る。媒体は、上記座標を計算するステップが、三角形の頂点の上にバウンディングボックスを形成するステップと、上記ボックスの中心の座標を使用するステップとを含む、ことを含み得る。媒体は、上記シーケンスが、座標を量子化し、それらを空間充填曲線に沿った整数位置に変換することにより上記座標をビンにマッピングするステップを含む、ことを含み得る。
【０１０２】
別の実例において、実施例は、位置限定シェーディングを実行し、シェードされたプリミティブを代表座標に基づいてビンにソートし、ビン内のプリミティブをその奥行きに基づいてソートするプロセッサと、上記プロセッサに接続された記憶装置とを備える、装置であり得る。装置は、上記プロセッサが、シェードされたプリミティブのグループをソートする、ことを含み得る。装置は、上記プロセッサが、タイル内の全ての三角形からなるグループを形成する、ことを含み得る。装置は、上記プロセッサが、上記プリミティブをビンにビニングする、ことを含み得る。装置は、上記プロセッサが、上記のソートされたプリミティブを一度に１ビンずつラスタライズする、ことを含み得る。装置は、上記プロセッサが、奥行きの順にソートされたプリミティブをラスタライズする、ことを含み得る。装置は、上記プロセッサが、座標、奥行き、プリミティブのサイズ及び状態に基づいてソートする、ことを含み得る。装置は、上記プロセッサが、上記座標をグループ内の三角形の平均頂点位置として計算する、ことを含み得る。装置は、上記プロセッサが、三角形の頂点の上にバウンディングボックスを形成するとともに、上記ボックスの中心の座標を使用する、ことを含み得る。装置は、上記プロセッサが、座標を量子化し、それらを空間充填曲線に沿った整数位置に変換することにより上記座標をビンにマッピングする、ことを含み得る。
【０１０３】
本明細書で説明されるグラフィックス処理技術は、様々なハードウェアアーキテクチャで実施されることができる。例えば、グラフィックス機能はチップセット内に統合されることができる。あるいは、別個のグラフィックスプロセッサが使用され得る。更に別の実施形態として、グラフィックス機能は、マルチコアプロセッサを含む汎用プロセッサによって実施されてもよい。
【０１０４】
“一実施例”又は“実施例”に対する本明細書を通した言及は、上記実施例に関連して説明された特定の特徴、構造、または特性が本発明に包含される少なくとも１つの具体化に含まれているということを意味している。従って、“一実施例”又は“実施例において”の語句の記載は、必ずしも同じ実施例を参照している訳でない。更に、特定の構成、構造、又は特性は、例示された特定の実施例以外の他の適切な形態で導入され得るとともに、そのような形態の全ては、本出願の特許請求の範囲内に包含され得る。
【０１０５】
限られた数の実施例が説明されたが、当業者は、それらから多数の変更及び変形を認識することになる。本開示の真の趣旨及び範囲内に収まるように、特許請求の範囲に記載の請求項がそのような変更及び変形の全てを包含することが意図される。
【図１】
2018502381.tif 000003
【図２】
2018502381.tif 000004
【図３】
2018502381.tif 000005
【図４】
2018502381.tif 000006
【図５】
2018502381.tif 000007
【図６】
2018502381.tif 000008
【図７】
2018502381.tif 000009
【図８】
2018502381.tif 000010
【図９】
2018502381.tif 000011
【図１０】
2018502381.tif 000012
【図１１Ａ】
2018502381.tif 000013
【図１１Ｂ】
2018502381.tif 000014
【図１２】
2018502381.tif 000015
【国際調査報告】
2018502381.tif 000016
2018502381.tif 000017