位置限定シェーディングパイプラインのカルパイプでは、三角形の頂点の位置は既に計算されており、これらの座標は、これらの座標に基づいて三角形グループをソートすることによって利用されることができる。一例として、ドローコール(draw call)における一連の三角形はグループを構成し得る。三角形グループは、いくらかの粒度のビンに(例えば、16×16ピクセルのタイルビンに)ソートされる。各ビン内で、次いで三角形をその奥行き(depth)に基づいて大雑把にソートすることが可能である。
再生パイプ内でラスタライズ処理が開始されると、パイプは一度に1ビンずつ三角形を消費し、任意に、同様に、ソートされた奥行きの順に(例えば、奥行きの検査(depth test)が小さいか、又はより小さい場合は、前から後ろへ)消費する。実質的に全ての三角形は、次の小さなスクリーン空間領域に移動する前に、小さなスクリーン空間領域(タイルなど)においてアクセスされる(visited)。
この領域単位の(region-at-a-time)処理は、いくつかの実施例では、奥行きバッファキャッシュ(depth buffer cache)及び色バッファキャッシュ(color buffer cache)の効率を大幅に向上させる。いくつかの実施例では、色バッファ及び奥行きバッファへのメモリトラフィックが低減され、これらのバッファは、多くの場合、現在のグラフィックスプロセッサの主要な帯域幅の消費者である。
パイプライン10の実施例が図1において示される。三角形(ブロック12上に示される)は位置限定シェーダ(position-only shader)12により処理される。これには、バックフェース(BF)カリング、視錐台(VF)カリング、及びゼロカバレッジカリング(ブロック14)が続く。カリングが行われた後、座標の代表的なセット、例えば(x、y)、及び奥行きzが計算され、次いで、三角形(又は三角形のグループ)がビンバッファ20内の適切なリストにビニング(またはソート)されることができる(ブロック16)。ブロック18において、ビットストリームにおける生き残った三角形が記録される。コマンドバッファを1回通過すると、位置限定シェーディングのフロントエンド(カルパイプ)が実行され、ビンに三角形識別子(ID)を記憶し(カリングされていない三角形の場合)、そのインデックスが、三角形の量子化された中心から計算され、モートン符号(又はヒルベルト符号)に変換される。
再生パイプでは、生き残った三角形(ブロック22上に示される)は、ビニングに基づいて、ソートされた順序で処理される(ブロック22)。例えば、全ての三角形が16×16タイルにビニングされている場合、その場合に、そのようなタイルの内部の三角形のリストは、最初にこれらの三角形を奥行き順にソートし、その後それらを(例えば)前から後ろへラスタライズすることによって処理されることができる。奥行き順におけるソーティングは任意選択である。無効にされた場合、完全な頂点シェーディング(vertex shading:VS)24が、生き残った三角形の頂点に対してのみ実行され、その後にパイプ26の残りが実行される。
同じ選択されたビンからの三角形は、次の選択されたビンにおける三角形の投入(submission)を開始する前に、ラスタライザ(rasterizer)に投入するために優先順位が付けられる。これは、全てのビンが処理され、したがって全ての三角形がグラフィックスパイプラインに送られるまで続く。
代表座標(representative coordinate)は、いくつかの方法で計算されることができる。例えば、グループ内の三角形の平均頂点位置(average vertex positions)が使用されることができる。別の選択肢は、三角形の頂点の上にバウンディングボックス(bounding box)を形成し、バウンディングボックスの中心の座標を代表座標として使用することである。
一度三角形又は三角形のグループにおける代表座標が計算されると、適切なビンが発見され、各代表座標が特定のビンにマッピングされる。このマッピングは、まず、代表座標を量子化し、次いでそれらを例えばモートン順序(Morton order)、ヒルベルト順序(Hilbert order)、スキャンライン順序(scanline order)のような空間充填曲線に沿った整数位置に変換することにより実行され得る。整数位置はビンに対応する。量子化分解能は、所定数のビンが使用されるように選択される。ビニングは、x及びyに加えて奥行き(z)を考慮してもしなくてもよく、これは、各スクリーン空間位置が複数のビンに重なり得ることを意味する。
再生パイプでは、一度に1つのビンが線形の順序(すなわち、モートン曲線に沿ったビン)でアクセスされ、三角形は、コマンドバッファを再実行することなく、三角形のIDを使用して読み込まれる。シェーダ(shader)は、ビン内の三角形がレンダリングされたときに取得される。各ビンに対して、ビンの三角形が読み取られ、正しいシェーダによってレンダリングされる。一実施例では、三角形IDだけでなく、三角形ごとのドローコール識別子(ID)(drawcall identifier)又はシェーダ識別子(ID)(shader identifier)が記憶され得る。又は、ある範囲の三角形IDが別のシェーダなどを“指し示す”ためのルックアップテーブルが使用されることができる。
コマンドストリームを再生するシンプルなバージョンの場合、三角形あたりのビット数は三角形あたり2ビットに倍増する。第2のビットは、重心位置又は平均位置に基づいて一緒にタイルにソートされる16個又は32個の三角形のグループにおいて共同で使用される。これらの16〜32ビットは、タイル識別子(ID)(tile identifier)である。さらに、より高い粒度で、例えば、各ドローコールに対して、及び/又は数千の三角形のグループまで階層的に、三角形のグループが触れる全てのタイルに対応する(又はより大きい粒度で)ビットマスクが同様に記録されている。このビットマスクは、現在再生されているタイルと比較されることができ、コマンドストリームの大部分がスキップされることができる。これらのビットマスクは、スクリーン空間とコマンドストリームの両方で粒度を調整することにより、三角形当たり1ビット以下に保つことができる。そして、三角形あたりの総ビット数は最大3ビットに増える。
パイプラインは、一実施例において、ソート/最終パイプラインであり、その結果、正しい結果を得ることはスクリーン空間のソーティングに依存しない。したがって、次のタイルをレンダリングする前に、単一のタイルに関して全てのジオメトリをレンダリングすることに制約されない。ジオメトリの一部をソートし、そのジオメトリのソートされた三角形をレンダリングし、さらにジオメトリをソートしてレンダリングすることができる。
ソートは2つの場所で近似されるので減らされ得る(relaxed)。まず、N個の三角形のグループ内の代表点に基づいて近似され、グループは単一のタイルに配置される。したがって、グループ内の三角形は、他のタイルに属するピクセルをカバーすることができる。これは、ソートミドル(sort-middle)アーキテクチャに比べて大きな違いである。第2に、三角形は最初に指定されたサイズのビンにソートされ、しかしながら、それらは、奥行き又は他の基準、例えばどのテクスチャ若しくはシェーダ(すなわち状態(state))を各三角形が使用するか、又はテクスチャ空間におけるその位置に従って、各タイル内で、更にソートされることができる。
図2を参照すると、シーケンス30は、ソフトウェア、ファームウェア、及び/又はハードウェアで実施されてもよい。ソフトウェア及びファームウェアの実施例では、それは、磁気記憶装置、光学記憶装置、又は半導体記憶装置などの1つ又は複数の非一時的なコンピュータ読み取り可能な媒体に記憶されたコンピュータ実行命令によって実装されてもよい。典型的には、これらの命令は、グラフィックス機能を担うハードウェアユニットであるグラフィックス処理ユニットの一部であろう。
シーケンス30は、ブロック32に示すように、位置限定シェーディングを実行することによって開始される。これに続いて、ブロック34においてカリング(culling)が行われる。
ブロック36において、プリミティブはグループ、例えばドローコールにおける複数の三角形に形成されてもよい。次に、プリミティブは、その代表座標に基づいてソートされる(ブロック38)。一実施例において、座標は、x、y、及び奥行き座標であってもよい。
次に、ブロック40において示されるように、代表座標が特定のビンにマッピングされる。次にソーティングが、各ビン内のプリミティブの奥行きに基づいて実行される(ブロック42)。最後に、ブロック44において示されるように、ラスタライズが一度に1ビンずつ実行され、(任意に)奥行きの順に実行される。
大きなスクリーン空間領域に投影する三角形(ここでは“大きな”三角形と呼ばれる)は、多くのビンに重なり、性能に悪影響を与える可能性がある。大きな三角形は、下記のように扱われることができる。
・最も簡単な解決策は、大きな三角形に対するソーティングとビニングを単に無効にすることである。
・大きな三角形がビン境界線に逆らって分割され、多くのビンに重複して表示されることがある。これは、大きな三角形の異なる部分が異なる時間に処理されることを意味する。
・代表的なポイントが、いくつかの面積メトリック(area metric)を含む場合がある。その場合に、マッピング関数は、大きい方の三角形を小さい方の三角形とは異なるビンにマッピングする。大きな三角形は、その場合に、例えばより小さいビンに移動する前に、最初に処理されることができる。このビニングは、マルチ解像度の方法(multi-resolution fashion)で行われることができ、面積メトリックが増加するにつれてスクリーン空間のビン解像度を低下させる。
したがって、ビニングは、三角形のサイズだけでなく、状態などの他の情報も考慮に入れることができる。したがって、ビニングで使用される座標は、空間内の位置のみを含むと解釈されるべきではなく、例えば、三角形のサイズ及び状態も含むことができる。
現在、Direct3D(登録商標)及びOpenGL(登録商標)の仕様では、ドライバ又はハードウェアは提示(submit)された三角形のレンダリング順序を変更できない。しかしながら、Direct3Dは、順序バリア(order barrier)を導入することを検討しており、ここで、グラフィックス処理ユニットは、これらのバリア間の三角形の順序を自由に変更できる。この手法は、同様に、OpenGL及びOpenGL ESでも拡張機能を使用することができ、モバイル装置でのレンダリングに役立つ。
図3は、一実施例による、データ処理システム100のブロック図である。データ処理システム100は、1つ又は複数のプロセッサ102、及び1つ又は複数のグラフィックスプロセッサ108を含むとともに、単一プロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、又は多数のプロセッサ102又はプロセッサコア107を有するサーバシステムであってもよい。一実施例において、データ処理システム100は、モバイル装置、ハンドヘルド装置、又は埋め込み型装置で使用するためのチップ集積回路(SOC)上のシステムである。
データ処理システム100の一実施例は、ゲーム及びメディアコンソール、モバイルゲームコンソール、ハンドヘルドゲームコンソール、又はオンラインゲームコンソールを含んでいる、サーバベースのゲームプラットフォーム、ゲームコンソールを含むことができるか、又はそれらの中に組み込むことができる。一実施例において、データ処理システム100は、携帯電話、スマートフォン、タブレットコンピューティング装置、又はモバイルインターネット装置である。データ処理システム100は、同様に、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、又はバーチャルリアリティデバイスなどのウェアラブル装置を含むか、ウェアラブル装置と接続するか、又はウェアラブル装置の中に統合されることができる。一実施例において、データ処理システム100は、1つ又は複数のプロセッサ102と、1つ又は複数のグラフィックスプロセッサ108により生成されたグラフィカルインタフェースとを有するテレビ又はセットトップボックス装置である。
1つ又は複数のプロセッサ102は、それぞれ、実行されるとシステム及びユーザソフトウェアに関する動作を実行する命令を処理するための1つ又は複数のプロセッサコア107を含む。一実施例において、1つ又は複数のプロセッサコア107のそれぞれは、特定の命令セット109を処理するように構成される。命令セット109は、複合命令セット演算(complex instruction set computing:CISC)、縮小命令セット演算(reduced instruction set computing:RISC)、又は超長命令語(very long instruction word:VLIW)による演算を容易にすることができる。複数のプロセッサコア107は、それぞれ、異なる命令セット109を処理することができ、異なる命令セット109は、他の命令セットのエミュレーションを容易にする命令を含むことができる。プロセッサコア107は、同様に、デジタル信号プロセッサ(DSP)のような他の処理デバイスを含むことができる。
一実施例において、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに依存して、プロセッサ102は、単一の内部キャッシュ又は複数レベルの内部キャッシュを有することができる。一実施例において、キャッシュメモリは、プロセッサ102の様々な構成要素間で共有される。一実施例において、プロセッサ102は、同様に、既知のキャッシュコヒーレンシ技法(cache coherency techniques)を使用してプロセッサコア107間で共有され得る外部キャッシュ(例えば、レベル3(L3)キャッシュ又は最終レベルキャッシュ(last level cache:LLC))(図示せず)を使用する。異なるタイプのデータを記憶するための異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、及び命令ポインタレジスタ)を含む、レジスタファイル106が、プロセッサ102に追加的に含まれる。いくつかのレジスタは汎用レジスタであってもよく、一方、他のレジスタはプロセッサ102の設計に固有であってもよい。
プロセッサ102は、プロセッサバス110に接続され、プロセッサ102とシステム100内の他の構成要素との間でデータ信号を伝送する。システム100は、メモリコントローラハブ116及び入出力(I/O)コントローラハブ130を含む例示的な“ハブ”システムアーキテクチャを使用する。メモリコントローラハブ116は、メモリ装置とシステム100の他の構成要素との間の通信を容易にし、一方、I/Oコントローラハブ(ICH)130は、ローカルI/Oバスを介してI/O装置への接続を提供する。
メモリ装置120は、ダイナミックランダムアクセスメモリ(DRAM)装置、スタティックランダムアクセスメモリ(SRAM)装置、フラッシュメモリ装置、又はプロセスメモリとして機能するのに適した性能を有する他の何らかのメモリ装置であってもよい。メモリ120は、プロセッサ102がプロセスを実行するときに使用するためのデータ122及び命令121を記憶することができる。メモリコントローラハブ116は、同様に、プロセッサ102内の1つ又は複数のグラフィックスプロセッサ108と通信してグラフィックス及びメディア操作を実行する、任意選択の外部グラフィックスプロセッサ112と接続する。
ICH130は、高速I/Oバスを介して周辺装置をメモリ120及びプロセッサ102に接続することを可能にする。I/O周辺装置は、オーディオコントローラ146、ファームウェアインタフェース128、無線トランシーバ126(例えば、Wi−Fi、ブルートゥース(登録商標))、データ記憶装置124(例えば、ハードディスクドライブ、フラッシュメモリなど)、及びレガシー(例えば、パーソナルシステム2(PS/2))デバイスをシステムに接続するためのレガシーI/Oコントローラを含む。1つ又は複数のユニバーサルシリアルバス(USB)コントローラ142は、キーボード及びマウス144の組み合わせのような入力デバイスを接続する。ネットワークコントローラ134は、同様に、ICH130に接続することができる。一実施例では、高性能ネットワークコントローラ(図示せず)がプロセッサバス110に接続する。
図4は、1つ又は複数のプロセッサコア202A−N、統合メモリコントローラ214、及び統合グラフィックスプロセッサ208を有するプロセッサ200の実施例のブロック図である。プロセッサ200は、点線のボックスによって表される追加のコア202Nまでの、そして追加のコア202Nを含む、追加のコアを含むことができる。コア202A−Nのそれぞれは、1つ又は複数の内部キャッシュユニット204A−Nを含む。一実施例において、各コアは、同様に、1つ又は複数の共有キャッシュユニット206へのアクセスを有する。
内部キャッシュユニット204A−N及び共有キャッシュユニット206は、プロセッサ200内のキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも1つのレベルの命令及びデータキャッシュ、並びにレベル2(L2)、レベル3(L3)、レベル4(L4)、又は他のレベルのキャッシュのような、1つ又は複数のレベルの共有の中間レベルキャッシュを含むことができ、外部メモリより前の最高レベルのキャッシュが最終レベルキャッシュ(LLC)として分類される。一実施例において、キャッシュコヒーレンシロジック(cache coherency logic)は、様々なキャッシュユニット206と204A−Nとの間のコヒーレンスを維持する。
プロセッサ200は、同様に、1つ又は複数のバスコントローラユニット216及びシステムエージェント210のセットを含むことができる。1つ又は複数のバスコントローラユニットは、1つ又は複数のペリフェラルコンポーネントインターコネクトバス(Peripheral Component Interconnect bus、周辺構成要素相互接続バス)(例えば、PCI、PCIエクスプレス)のような周辺バスのセットを管理する。システムエージェント210は、様々なプロセッサの構成要素に対する管理機能を提供する。一実施例において、システムエージェント210は、様々な外部メモリ装置(図示せず)へのアクセスを管理するための1つ又は複数の統合メモリコントローラ214を含む。
一実施例では、コア202A〜Nのうちの1つ又は複数が、同時マルチスレッディングのためのサポートを含む。そのような実施例では、システムエージェント210は、マルチスレッド処理中にコア202A〜Nを調整して動作させるための構成要素を含む。システムエージェント210は、コア202A〜N及びグラフィックスプロセッサ208の電力状態を調整するロジック及び構成要素を含む電力制御ユニット(PCU)を更に含むことができる。
プロセッサ200は、グラフィックス処理操作を実行するグラフィックスプロセッサ208を更に含む。一実施例において、グラフィックスプロセッサ208は、共有キャッシュユニット206のセットと、そして1つ又は複数の統合メモリコントローラ214を含むシステムエージェントユニット210と、接続する。一実施例において、ディスプレイコントローラ211は、グラフィックスプロセッサ208に接続され、グラフィックスプロセッサ出力を駆動して1つ又は複数の接続されたディスプレイにもたらす。ディスプレイコントローラ211は、少なくとも1つの相互接続(interconnect)を介してグラフィックスプロセッサと接続された別個のモジュールであってもよいか、又はグラフィックスプロセッサ208若しくはシステムエージェント210内に統合されてもよい。
一実施例では、リングベースの相互接続ユニット212が、プロセッサ200の内部構成要素を接続するために使用されるが、しかしながら、ポイントツーポイント相互接続(point to point interconnect)、交換相互接続(switched interconnect)、又は当該技術分野で周知の技術を含む他の技術のような、代替相互接続ユニットが使用されることができる。一実施例において、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続部(ring interconnect)212と接続する。
例示的なI/Oリンク213は、様々なプロセッサ構成要素とeDRAMモジュールのような高性能組み込みメモリモジュール218との間の通信を容易にするオンパッケージI/O相互接続(on package I/O interconnect)を含む、複数の種類のI/O相互接続のうちの少なくとも1つを表す。一実施例において、コア202−Nのそれぞれ及びグラフィックスプロセッサ208は、共有された最終レベルキャッシュとして組み込みメモリモジュール218を使用する。
一実施例において、コア202A〜202Nは、同じ命令セットアーキテクチャを実行する均質コア(homogenous core)である。別の実施例では、コア202A〜Nは命令セットアーキテクチャ(ISA)の点から異質(heterogeneous)であり、ここで、コア202A〜Nのうちの1つ又は複数が第1の命令セットを実行し、一方、他のコアのうちの少なくとも1つが第1の命令セットのサブセット又は異なる命令セットを実行する。
プロセッサ200は、例えば相補型金属酸化膜半導体(CMOS)、バイポーラ接合/相補型金属酸化物半導体(BiCMOS)、又はN型金属酸化膜半導体ロジック(NMOS)のようないくつかのプロセス技術のうちのいずれかを使用して、1つ若しくは複数の基板の一部とすることができるか、又は、1つ若しくは複数の基板上に実装することができる。さらに、プロセッサ200は、他の構成要素に加えて例示された構成要素を有する1つ若しくは複数のチップ上に、又はシステムオンチップ(SOC)集積回路として、実装されることができる。
図5は、別個のグラフィックス処理ユニットであってもよいし、複数の処理コアと統合されたグラフィックスプロセッサであってもよいグラフィックスプロセッサ300の一実施例のブロック図である。一実施例において、グラフィックスプロセッサは、グラフィックスプロセッサ上のレジスタへのメモリマップドI/Oインタフェース(memory mapped I/O interface)を介して、及びプロセッサメモリに配置されたコマンドを介して通信される。グラフィックスプロセッサ300は、メモリにアクセスするためのメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1つ若しくは複数の内部キャッシュ、1つ若しくは複数の共有外部キャッシュ、及び/又はシステムメモリに対するインタフェースとすることができる。
グラフィックスプロセッサ300は、同様に、ディスプレイ出力データを駆動してディスプレイ装置320にもたらすためのディスプレイコントローラ302を含む。ディスプレイコントローラ302は、ビデオの複数の層の表示及び合成のための1つ又は複数のオーバーレイプレーン(overlay plane)又はユーザインタフェース要素に対するハードウェアを含む。一実施例において、グラフィックスプロセッサ300は、MPEG−2などのムービングピクチャエクスパーツグループ(Moving Picture Experts Group:MPEG)フォーマット、H.264/MPEG−4AVCなどのアドバンスドビデオコーディング(Advanced Video Coding:AVC)フォーマット、映画テレビ技術者協会(the Society of Motion Picture & Television Engineers:SMPTE)421M/VC−1、そしてJPEG(ジェイペグ)などのジョイントフォトグラフィックエキスパートグループ(Joint Photographic Experts Group:JPEG)フォーマット及びMotion JPEG(モーションジェイペグ:MJPEG)フォーマットを含むがこれに限定されない1つ又は複数のメディア符号化フォーマットにメディアを、メディア符号化フォーマットからメディアを、又はメディア符号化フォーマットの間でメディアを、エンコード、デコード、又はトランスコードするためのビデオコーデックエンジン306を含む。
一実施例において、グラフィックスプロセッサ300は、例えば、ビット境界ブロック転送(bit-boundary block transfers)を含む2次元(2D)ラスタライザ動作(rasterizer operations)を実行するためのブロック画像転送(block image transfer:BLIT)エンジン304を含む。しかしながら、一実施例において、2Dグラフィックス操作は、グラフィックス処理エンジン(graphics-processing engine:GPE)310のうちの1つ又は複数の構成要素を使用して実行される。グラフィックス処理エンジン310は、3次元(3D)グラフィックス操作及びメディア操作を含むグラフィックス操作を実行するための計算エンジンである。
GPE310は、3Dプリミティブ形状(例えば、矩形、三角形など)に作用する処理機能を使用して3次元画像及びシーンをレンダリングするような3D動作を実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内で様々なタスクを実行するか、及び/又は実行スレッドを3D/メディアサブシステム315に発生させる、プログラマブル及び固定の機能要素を含む。3Dパイプライン312は、メディア操作を実行するために使用されることができるが、GPE310の実施例は、同様に、ビデオ後処理及び画像強調などのメディア操作を実行するために特に使用されるメディアパイプライン316を含む。
一実施例において、メディアパイプライン316は、ビデオコーデックエンジン306の代わりに、又はビデオコーデックエンジン306の代理で、ビデオデコード加速(video decode acceleration)、ビデオデインターレーシング(video de-interlacing)、及びビデオエンコード加速(video encode acceleration)などの1つ又は複数の特殊メディア操作を実行する固定機能又はプログラマブルロジックユニットを含む。一実施例において、メディアパイプライン316は、3D/メディアサブシステム315上での実行のためにスレッドを発生させるスレッド生成ユニットを更に含む。生成されたスレッドは、3D/メディアサブシステムに含まれる1つ又は複数のグラフィックス実行ユニット上のメディア操作に関する計算を実行する。
3D/メディアサブシステム315は、3Dパイプライン312及びメディアパイプライン316により生成されたスレッドを実行するためのロジックを含む。一実施例において、パイプラインはスレッド実行要求を3D/メディアサブシステム315に送信し、3D/メディアサブシステム315は、様々な要求を調停するとともに使用可能なスレッド実行リソースに対してディスパッチするためのスレッドディスパッチロジック(thread dispatch logic)を含む。実行リソースは、3D及びメディアスレッドを処理するためのグラフィックス実行ユニットのアレイを含む。一実施例において、3D/メディアサブシステム315は、スレッド命令及びデータのための1つ又は複数の内部キャッシュを含む。一実施例において、サブシステムは、同様に、スレッド間でデータを共有し、出力データを記憶するために、レジスタ及びアドレス可能なメモリを含んでいる共用メモリを含む。
図6は、グラフィックスプロセッサ用のグラフィックス処理エンジン410の一実施例のブロック図である。一実施例において、グラフィックス処理エンジン(GPE)410は、図5において示されるGPE310のバージョンである。GPE410は、3Dパイプライン412及びメディアパイプライン416を含み、その各々は、図5の3Dパイプライン312及びメディアパイプライン316の実装例とは異なるか、又はそれらの実装例と同様であることができる。
一実施例において、GPE410は、コマンドストリームをGPE3D及びメディアパイプライン412、416に提供するコマンドストリーマ403と接続する。コマンドストリーマ403は、システムメモリ、又は1つ若しくは複数の内部キャッシュメモリ及び共有キャッシュメモリとすることができるメモリに接続される。コマンドストリーマ403は、メモリからコマンドを受信し、コマンドを3Dパイプライン412及び/又はメディアパイプライン416に送る。3D及びメディアパイプラインは、それぞれのパイプライン内のロジックを介して動作を実行することによって、又は実行ユニットアレイ414に1つ又は複数の実行スレッドをディスパッチすることによってコマンドを処理する。一実施例において、実行ユニットアレイ414は、アレイがGPE410の目標電力及び性能レベルに基づいて可変数の実行ユニットを含むように、スケーラブルである。
サンプリングエンジン430は、メモリ(例えば、キャッシュメモリ又はシステムメモリ)及び実行ユニットアレイ414と接続する。一実施例において、サンプリングエンジン430は、実行アレイ414がメモリからグラフィックス及びメディアデータを読み取ることを可能にするスケーラブル実行ユニットアレイ414のためのメモリアクセス機構を提供する。一実施例において、サンプリングエンジン430は、メディアに対して特殊な画像サンプリング動作を実行するロジックを含む。
サンプリングエンジン430内の特殊メディアサンプリングロジックは、デノイズ/デインタレース(de-noise/de-interlace)モジュール432、動き推定(motion estimation)モジュール434、および画像スケーリング及びフィルタリングモジュール436を含む。デノイズ/デインタレースモジュール432は、デコードされたビデオデータに対して、デノイズ(de-noise)又はデインタレース(de-interlace)アルゴリズムのうちの1つ又は複数を実行するロジックを含む。デインタレースロジックは、インタレースされたビデオコンテンツの交互のフィールド(alternating field)をビデオの単一フレームに結合する。デノイズロジックは、ビデオ及び画像データからデータノイズを削減するか又は除去する。一実施例において、デノイズロジック及びデインタレースロジックは動き適応可能(motion adaptive)であり、ビデオデータ内で検出された動きの量に基づいて空間的又は時間的フィルタリングを使用する。一実施例において、デノイズ/デインタレースモジュール432は、(例えば、動き推定エンジン434内の)専用の動き検出ロジックを含む。
動き推定エンジン434は、ビデオデータに対する動きベクトル推定及び予測のようなビデオ加速機能(video acceleration function)を実行することによって、ビデオ操作のためのハードウェアアクセラレーション(hardware acceleration)を提供する。動き推定エンジンは、連続するビデオフレーム間の画像データの変化を記述する動きベクトルを判定する。一実施例において、グラフィックスプロセッサメディアコーデックは、ビデオモーション推定エンジン434を使用して、マクロブロックレベルでビデオに対する操作を実行し、そうでなければ、汎用プロセッサを使用して実行するために計算的に集中的である可能性がある。一実施例において、動き推定エンジン434は、ビデオデータ内の動きの方向又は大きさに敏感であるか又は適応するビデオデコード及び処理機能を支援するために、グラフィックスプロセッサの構成要素が一般に利用可能である。
画像スケーリング及びフィルタリングモジュール436は、生成された画像及びビデオの視覚的品質を向上させるための画像処理操作を実行する。一実施例において、スケーリング及びフィルタリングモジュール436は、データを実行ユニットアレイ414に提供する前に、サンプリング動作中に画像及びビデオデータを処理する。
一実施例において、グラフィックス処理エンジン410は、メモリにアクセスするためのグラフィックスサブシステムに対する追加機構を提供するデータポート444を含む。データポート444は、レンダターゲット書き込み(render target writes)、定数バッファ読み出し(constant buffer reads)、スクラッチメモリ空間読み出し/書き込み(scratch memory space reads/writes)、及びメディア表面アクセス(media surface accesses)を含む動作のためのメモリアクセスを容易にする。一実施例において、データポート444は、メモリへのアクセスをキャッシュするためのキャッシュメモリ空間を含む。キャッシュメモリは、データポートを介してメモリにアクセスする複数のサブシステムに対して、単一のデータキャッシュであってもよいし、又は複数のキャッシュに分割されていてもよい(例えば、レンダバッファキャッシュ(render buffer cache)、定数バッファキャッシュなど)。一実施例において、実行ユニットアレイ414内の実行ユニット上で実行されるスレッドは、グラフィックス処理エンジン410のサブシステムのそれぞれを接続するデータ分配相互接続(data distribution interconnect)を介してメッセージを交換することによって、データポートと通信する。
図7は、グラフィックスプロセッサの別の実施例のブロック図である。一実施例において、グラフィックスプロセッサは、リング相互接続部502、パイプラインフロントエンド504、メディアエンジン537、及びグラフィックスコア580A〜Nを含む。リング相互接続部502は、グラフィックスプロセッサを、他のグラフィックスプロセッサ又は1つ若しくは複数の汎用プロセッサコアを含んでいる他の処理ユニットに接続する。一実施例において、グラフィックスプロセッサは、マルチコア処理システム内に統合された多くのプロセッサのうちの1つである。
グラフィックプロセッサは、リング相互接続部502を介してコマンドのバッチを受信する。入ってくるコマンドは、パイプラインフロントエンド504内のコマンドストリーマ503によって解釈される。グラフィックスプロセッサは、(複数の)グラフィックスコア580A〜580Nを介して3Dジオメトリ処理及びメディア処理を実行するスケーラブルな実行ロジックを含む。3Dジオメトリ処理コマンドの場合、コマンドストリーマ503はコマンドをジオメトリパイプライン536に供給する。少なくともいくつかのメディア処理コマンドの場合、コマンドストリーマ503は、ビデオフロントエンド534にコマンドを供給し、ビデオフロントエンド534は、メディアエンジン537と接続する。メディアエンジン537は、ビデオ及び画像後処理のためのビデオ品質エンジン(video quality engine:VQE)530と、ハードウェアで加速された(hardware-accelerated)メディアデータエンコード及びデコードを提供するマルチフォーマットエンコード/デコード(MFX)533エンジンとを含む。ジオメトリパイプライン536及びメディアエンジン537は、それぞれ、少なくとも1つのグラフィックスコア580Aにより提供されるスレッド実行リソースに対する実行スレッドを生成する。
グラフィックスプロセッサは、それぞれが複数のサブコア550A〜N、560A〜N(コアサブスライス(core sub-slice)と呼ばれることもある)を有するモジュラーコア580A〜N(コアスライス(core slice)と呼ばれることもある)を特徴とする、スケーラブルなスレッド実行リソースを含む。グラフィックスプロセッサは、任意の数のグラフィックスコア580Aから580Nを有することができる。一実施例において、グラフィックスプロセッサは、第1のサブコア550A及び第2のサブコア560Aを少なくとも有するグラフィックスコア580Aを含む。別の実施例では、グラフィックスプロセッサは、単一のサブコア(例えば、550A)を有する低電力プロセッサである。一実施例において、グラフィックスプロセッサは、それぞれが第1のサブコア550A〜Nのセットと第2のサブコア560A〜Nのセットを含んでいる、複数のグラフィックスコア580A〜Nを含む。第1のサブコア550A〜Nのセット内の各サブコアは、少なくとも第1の組の実行ユニット552A〜N及びメディア/テクスチャサンプラ554A〜Nを含む。第2のサブコア560A〜Nのセット内の各サブコアは、少なくとも第2の組の実行ユニット562A〜N及びサンプラ564A〜Nを含む。一実施例において、各サブコア550A〜N、560A〜Nは、1組の共有リソース570A〜Nを共有する。一実施例において、共有リソースは、共有キャッシュメモリ及びピクセル操作ロジックを含む。グラフィックスプロセッサの様々な実施例には、他の共有リソースが同様に含まれ得る。
図8は、グラフィックス処理エンジンの一実施例において使用される処理要素のアレイを含んでいるスレッド実行ロジック600を例示する。一実施例において、スレッド実行ロジック600は、ピクセルシェーダ(pixel shader)602、スレッドディスパッチャ604、命令キャッシュ606、複数の実行ユニット608A〜Nを含むスケーラブル実行ユニットアレイ、サンプラ610、データキャッシュ612、及びデータポート614を含む。一実施例において、含まれる構成要素は、構成要素のそれぞれにリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック600は、命令キャッシュ606、データポート614、サンプラ610、及び実行ユニットアレイ608A〜Nのうちの1つ又は複数を通した、システムメモリ又はキャッシュメモリなどのメモリに対する1つ又は複数の接続を含む。一実施例において、各実行ユニット(例えば、608A)は、複数の同時スレッドを実行し、各スレッドに対して複数のデータ要素を並列に処理することができる個別のベクトルプロセッサである。実行ユニットアレイ608A〜Nは、任意の数の個々の実行ユニットを含む。
一実施例において、実行ユニットアレイ608A〜Nは、主に、“シェーダ(shader)”プログラムを実行するために使用される。一実施例において、アレイ608A〜N内の実行ユニットは、グラフィックスライブラリ(例えば、Direct3D及びOpenGL)からのシェーダプログラムが最小限の変形で実行されるように、多くの標準3Dグラフィックスシェーダ命令に対するネイティブサポート(native support)を含む命令セットを実行する。実行ユニットは、頂点及びジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、及び汎用処理(例えば、計算及びメディアシェーダ)をサポートする。
実行ユニットアレイ608A〜N内の各実行ユニットは、データ要素のアレイに対して操作する。データ要素の数は、“実行サイズ”又は命令に対するチャネル数である。実行チャネルは、データ要素のアクセス、マスキング、及び命令内でのフロー制御のための論理的な実行単位である。チャネルの数は、特定のグラフィックスプロセッサの物理的なALU又はFPUの数とは無関係であってもよい。実行ユニット608A〜608Nは、整数及び浮動小数点データタイプをサポートする。
実行ユニット命令セットは、単一命令複数データ(single instruction multiple data:SIMD)命令を含む。様々なデータ要素は、パック化されたデータ型としてレジスタに記憶されることができ、実行ユニットは、様々な要素を、要素のデータサイズに基づいて処理することになる。例えば、256ビット幅のベクトルに関して操作する場合、256ビットのベクトルはレジスタに記憶され、実行ユニットは、ベクトルに関して、4個の別個の64ビットパックデータ要素(クワッドワード(QW)サイズのデータ要素)として、8個の別個の32ビットパックデータ要素(ダブルワード(DW)サイズのデータ要素)として、16個の別個の16ビットパックデータ要素(ワード(W)サイズのデータ要素)として、又は32個の別個の8ビットパックデータ要素(バイト(B)サイズのデータ要素)として操作する。しかしながら、異なるベクトル幅及びレジスタサイズが可能である。
実行ユニットに対するスレッド命令をキャッシュするために、1つ又は複数の内部命令キャッシュ(例えば、606)がスレッド実行ロジック600に含まれる。一実施例において、スレッド実行中にスレッドデータをキャッシュするために、1つ又は複数のデータキャッシュ(例えば、612)が含まれる。サンプラ610は、3D動作のためのテクスチャサンプリングとメディア操作のためのメディアサンプリングを提供するために含まれる。一実施例において、サンプラ610は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャ又はメディアデータを処理する、特殊なテクスチャ又はメディアサンプリング機能を含む。
実行中、グラフィックス及びメディアパイプラインは、スレッド開始要求をスレッド生成及びディスパッチロジックを介してスレッド実行ロジック600に送信する。スレッド実行ロジック600は、グラフィックス及びメディアパイプラインからのスレッド開始要求を調停し、要求されたスレッドを1つ又は複数の実行ユニット608A〜N上でインスタンス化する、ローカルスレッドディスパッチャ604を含む。例えば、ジオメトリパイプライン(例えば、図3の536)は、頂点処理スレッド(vertex processing thread)、テッセレーションスレッド(tessellation thread)、又はジオメトリ処理スレッド(geometry processing thread)を、スレッド実行ロジック600にディスパッチする。スレッドディスパッチャ604は、同様に、実行中のシェーダプログラムからの実行時スレッド(runtime thread)生成要求を処理することができる。
一度ジオメトリックオブジェクトのグループが処理され、ピクセルデータにラスタライズされると、ピクセルシェーダ602が、出力情報を更に計算し、出力面(output surface)(例えば、カラーバッファ、奥行きバッファ、ステンシルバッファ(stencil buffer)など)に結果を書き込ませるために、呼び出される。一実施例において、ピクセルシェーダ602は、ラスタライズされたオブジェクトにわたって補間されるべき様々な頂点属性の値を計算する。次に、ピクセルシェーダ602は、API提供のピクセルシェーダプログラムを実行する。ピクセルシェーダプログラムを実行するために、ピクセルシェーダ602は、スレッドディスパッチャ604を介して、実行ユニット(例えば、608A)にスレッドをディスパッチする。ピクセルシェーダ602は、サンプラ610内のテクスチャサンプリングロジックを使用して、メモリに記憶されたテクスチャマップ内のテクスチャデータにアクセスする。テクスチャデータ及び入力ジオメトリデータに対する算術演算は、各ジオメトリックフラグメントのピクセルカラーデータを計算するか、又はさらなる処理から1つ又は複数のピクセルを破棄する。
一実施例において、データポート614は、スレッド実行ロジック600が処理されたデータをグラフィックスプロセッサ出力パイプライン上で処理するためにメモリに出力するための、メモリアクセス機構を提供する。一実施例において、データポート614は、データポートを介したメモリアクセスに関するデータをキャッシュするために、1つ又は複数のキャッシュメモリ(たとえば、データキャッシュ612)を含むか、又は1つ又は複数のキャッシュメモリに接続する。
図9は、本実施例による、グラフィックスプロセッサ実行ユニットの命令フォーマットを例示するブロック図である。一実施例において、グラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線のボックスは、一般的に実行ユニット命令に含まれる構成要素を例示し、一方、破線は、任意選択であるか、又は命令のサブセットにのみ含まれる構成要素を含む。説明及び例示された命令フォーマットは、一度命令が処理されると命令デコードから生じるマイクロ動作(micro-operations)とは対照的な、実行ユニットに供給される命令である、マクロ命令である。
一実施例において、グラフィックスプロセッサ実行ユニットは、128ビットフォーマットの命令710を元々サポートする。選択された命令、命令オプション、及びオペランドの数に基づいて、いくつかの命令に対して、64ビットの圧縮された命令フォーマット730が利用可能である。元々の128ビットフォーマット710は、全ての命令オプションへのアクセスを提供し、一方、64ビットフォーマット730では、いくつかのオプション及び動作が制限される。64ビットフォーマット730において利用可能な固有の命令は、実施例によって異なる。一実施例において、命令は、インデックスフィールド713におけるインデックス値のセットを使用して部分的に圧縮される。実行ユニットハードウェアは、インデックス値に基づいて圧縮テーブルのセットを参照し、圧縮テーブル出力を使用して、128ビットフォーマット710における固有の命令を再構成する。
各フォーマットについて、命令オペコード712は、実行ユニットが実行するべき動作を定義する。実行ユニットは、各オペランドの複数のデータ要素にわたって各命令を並列に実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素又はピクチャ要素を表す各カラーチャネルにわたって同時加算動作を実行する。デフォルトで、実行ユニットは、各命令をオペランドの全てのデータチャネルにわたって実行する。命令制御フィールド712は、チャネル選択(例えば、予測)及びデータチャネル順序(data channel order)(例えば、スウィズル(swizzle))などの特定の実行オプションに対する制御を可能にする。128ビット命令710の場合、実行サイズフィールド716は、並列に実行されることになるデータチャネルの数を制限する。実行サイズフィールド716は、64ビットコンパクト命令フォーマット730において使用するためには利用可能ではない。
いくつかの実行ユニット命令は、2つのソースオペランドsrc0 720、src1 722、及び1つの宛先(destination:デスティネーション)718を含む3つまでのオペランドを有する。一実施例において、実行ユニットは、宛先のうちの1つが暗示される2つの宛先命令をサポートする。データ操作命令は、第3のソースオペランド(例えば、SRC2 724)を有することができ、ここで、命令オペコードJJ12は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡される(例えば、ハードコードされた)即値(immediate value:イミディエート値)であってもよい。
一実施例において、命令は、オペコードビットフィールドに基づいてグループ化され、オペコードデコード740を単純化する。8ビットのオペコードの場合、ビット4、5、及び6は、実行ユニットがオペコードのタイプを判定することを可能にする。示された正確なオペコードのグループは、例示的なものである。一実施例において、移動及び論理オペコードグループ742は、データ移動及び論理命令(例えば、mov、cmp)を含む。移動及び論理グループ742は、5つの最上位ビット(MSB)を共有し、ここで、移動命令は、0000xxxxb(例えば0x00)の形式であり、論理命令は、0001xxxxb(例えば0x10)の形式である。フロー制御命令グループ744(例えば、call、jmp)は、0010xxxxb(例えば、0x20)の形式の命令を含む。多方面の(miscellaneous)命令グループ746は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、wait、send)を含む命令の混合を含む。並列演算命令グループ748は、0100xxxxb(例えば、0x40)の形式のコンポーネント単位の算術命令(例えば、add、mul)を含む。並列演算グループ748は、データチャネルにわたって並列に算術演算を実行する。ベクトル演算グループ750は、0101xxxxb(例えば、0x50)の形式の算術命令(例えば、dp4)を含む。ベクトル演算グループは、ベクトル演算子に対するドット積演算などの演算を実行する。
図10は、グラフィックスパイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850、及びレンダ出力パイプライン(render output pipeline)870を含むグラフィックスプロセッサの別の実施例のブロック図である。一実施例において、グラフィックスプロセッサは、1つ又は複数の汎用処理コアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1つ又は複数の制御レジスタ(図示せず)へのレジスタ書き込みによって、又はリング相互接続部802を介してグラフィックスプロセッサに発行されるコマンドによって制御される。リング相互接続部802は、グラフィックスプロセッサを、他のグラフィックスプロセッサ又は汎用プロセッサなどの他の処理コンポーネントに接続する。リング相互接続部からのコマンドは、グラフィックスパイプライン820又はメディアパイプライン830の個々のコンポーネントに命令を供給するコマンドストリーマ803によって解釈される。
コマンドストリーマ803は、メモリから頂点データを読み出し、コマンドストリーマ803によって提供される頂点処理コマンドを実行する頂点フェッチャ805コンポーネントの動作を指示する。頂点フェッチャ805は、頂点シェーダ807に頂点データを提供し、頂点シェーダ807は、各頂点に対する座標空間変換(coordinate space transformation)及びライティング(lighting)操作を実行する。頂点フェッチャ805及び頂点シェーダ807は、スレッドディスパッチャ831を介して実行スレッドを実行ユニット852A、852Bにディスパッチすることによって、頂点処理命令を実行する。
一実施例において、実行ユニット852A、852Bは、グラフィックス及びメディア操作を実行するための命令セットを有するベクトルプロセッサのアレイである。実行ユニット852A、852Bは、各アレイに特有であるか、又はアレイ間で共有される、取り付けられたL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、又は異なるパーティションにデータ及び命令を含むように区分された単一キャッシュとして設定されることができる。
一実施例において、グラフィックスパイプライン820は、3Dオブジェクトのハードウェアで加速されたテッセレーション(tessellation)を実行するために、テッセレーションコンポーネントを含む。プログラム可能なハル(hull)シェーダ811は、テッセレーション操作を設定する。プログラム可能なドメインシェーダ817は、テッセレーション出力のバックエンド評価を提供する。テッセレータ(tessellator)813は、ハルシェーダ811の指示で動作するとともに、グラフィックスパイプライン820への入力として提供される粗いジオメトリックモデルに基づいて詳細なジオメトリックオブジェクトのセットを生成する専用のロジックを含む。テッセレーションが使用されない場合、テッセレーションコンポーネント811、813、817はバイパスされ得る。
完全なジオメトリックオブジェクトは、実行ユニット852A、852Bにディスパッチされた1つ若しくは複数のスレッドを介してジオメトリシェーダ819により処理されるか、又はクリッパ829に直接的に進むことができる。ジオメトリシェーダは、グラフィックスパイプラインの前のステージのように、頂点又は頂点のパッチではなく、ジオメトリックオブジェクト全体に対して動作する。テッセレーションが無効にされている場合、ジオメトリシェーダ819は、頂点シェーダ807から入力を受け取る。ジオメトリシェーダ819は、ジオメトリシェーダプログラムによりプログラム可能であり、テッセレーションユニットが無効にされている場合、ジオメトリテッセレーション(geometry tessellation)を実行する。
ラスタライズに先立って、頂点データはクリッパ829によって処理され、クリッパ829は、クリッピング及びジオメトリシェーダ機能を有する固定機能クリッパ又はプログラマブルクリッパのいずれかである。一実施例において、レンダ出力パイプライン870内のラスタライザ873は、ピクセルシェーダにディスパッチして、ジオメトリックオブジェクトをそれらのピクセルごとの表現に変換する。一実施例において、ピクセルシェーダロジックは、スレッド実行ロジック850に含まれる。
グラフィックスエンジンは、相互接続バス、相互接続ファブリック、又はグラフィックスエンジンの主要コンポーネント間でデータとメッセージの受け渡しを可能にする他の相互接続機構を備えている。一実施例において、実行ユニット852A、852B、及び関連する(複数の)キャッシュ851、テクスチャ及びメディアサンプラ854、並びにテクスチャ/サンプラキャッシュ858は、メモリアクセスを実行し、グラフィックスエンジンのレンダ出力パイプラインコンポーネント(render output pipeline component)と通信するために、データポート856を介して相互接続する。一実施例において、サンプラ854、キャッシュ851、858、及び実行ユニット852A、852Bは、それぞれ別々のメモリアクセス経路を有する。
一実施例において、レンダ出力パイプライン870は、頂点ベースのオブジェクトをそれらの関連するピクセルベースの表現に変換するラスタライザ及び奥行きテストコンポーネント873を含む。一実施例において、ラスタライザロジックは、固定機能の(fixed function)三角形及びラインラスタライゼーション(triangle and line rasterization)を実行するためのwindower/maskerユニットを含む。1つの実施例では、関連するレンダ及び奥行きバッファキャッシュ(render and depth buffer cache)878、879が、同様に、利用可能である。ピクセル演算コンポーネント877は、データに対してピクセルベースの演算を実行するが、場合によっては、2D動作に関連するピクセル操作(例えば、ブレンディングを伴うビットブロック画像転送)は、2Dエンジン841によって実行されるか、又はオーバーレイ表示面を使用してディスプレイコントローラ843によって表示時に置換される。一実施例において、共有L3キャッシュ875は、全てのグラフィックスコンポーネントが使用可能であり、メインシステムメモリを使用せずにデータを共有することを可能にする。
グラフィックスプロセッサメディアパイプライン830は、メディアエンジン837及びビデオフロントエンド834を含む。一実施例において、ビデオフロントエンド834は、コマンドストリーマ803からパイプラインコマンドを受信する。しかしながら、一実施例では、メディアパイプライン830は、別個のコマンドストリーマを含む。ビデオフロントエンド834は、コマンドをメディアエンジン837に送る前に、メディアコマンドを処理する。一実施例において、メディアエンジンは、スレッドディスパッチャ831を介してスレッド実行ロジック850にディスパッチするためにスレッドを生成するスレッド生成機能を含む。
一実施例において、グラフィックスエンジンはディスプレイエンジン840を含む。一実施例において、ディスプレイエンジン840は、グラフィックスプロセッサの外部にあり、リング相互接続部802又は他の何らかの相互接続バス若しくはファブリックを介して、グラフィックスプロセッサと接続する。ディスプレイエンジン840は、2Dエンジン841及びディスプレイコントローラ843を含む。ディスプレイエンジン840は、3Dパイプラインとは独立して動作することができる特別目的のロジックを含む。ディスプレイコントローラ843は、ラップトップコンピュータのように、システム統合型ディスプレイ装置であってもよいディスプレイ装置(図示せず)か、又はディスプレイ装置コネクタを介して取り付けられた外部ディスプレイ装置と接続する。
グラフィックスパイプライン820及びメディアパイプライン830は、複数のグラフィックス及びメディアプログラミングインターフェイスに基づいて動作を実行するように構成可能であり、いずれか1つのアプリケーションプログラミングインターフェイス(API)に固有ではない。一実施例において、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックス又はメディアライブラリに固有であるAPIコール(API calls)を、グラフィックスプロセッサによって処理されることができるコマンドに変換する。様々な実施例では、クロノスグループ(Khronos Group)によりサポートされるオープングラッフィクスライブラリ(Open Graphics Library:OpenGL)及びオープンコンピューティング言語(Open Computing Language:OpenCL)、マイクロソフト(登録商標)社(Microsoft(登録商標) Corporation)が提供するDirect3Dライブラリに対するサポートが提供され、又は、一実施例では、OpenGL及びD3Dの両方、に対するサポートが提供される。オープンソースコンピュータビジョンライブラリ(Open Source Computer Vision Library:OpenCV)のサポートが、同様に提供され得る。将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインへのマッピングが可能な場合、互換性のある3Dパイプラインを備えた将来のAPIが、同様にサポートされるであろう。
図11Aは、一実施例によるグラフィックスプロセッサコマンドフォーマットを示すブロック図であるとともに、図11Bは、一実施例によるグラフィックスプロセッサコマンドシーケンスを示すブロック図である。図11Aの実線のボックスは、一般にグラフィックスコマンドに含まれる構成要素を例示し、一方、点線は、任意選択であるか、又はグラフィックスコマンドのサブセットにのみ含まれる構成要素を含む。図11Aの例示的なグラフィックスプロセッサコマンドフォーマット900は、コマンドのターゲットクライアント902、コマンド動作コード(オペコード)904、及びコマンドに関する関連データ906を識別するデータフィールドを含む。サブオペコード905及びコマンドサイズ908が、同様に、いくつかのコマンドに含まれる。
クライアント902は、コマンドデータを処理するグラフィックス装置のクライアントユニットを指定する。一実施例において、グラフィックスプロセッサコマンドパーサは、各コマンドのクライアントフィールドを調べて、コマンドのさらなる処理を条件付けし、コマンドデータを適切なクライアントユニットに経路指定(route)する。一実施例において、グラフィックスプロセッサクライアントユニットは、メモリインタフェースユニット、レンダユニット、2Dユニット、3Dユニット、及びメディアユニットを含む。各クライアントユニットは、コマンドを処理する対応する処理パイプラインを有する。一度コマンドがクライアントユニットによって受信されると、クライアントユニットは、オペコード904、そして存在する場合にはサブオペコード905を読み取り、実行する動作を判定する。クライアントユニットは、コマンドのデータフィールド906内の情報を用いてコマンドを実行する。いくつかのコマンドでは、明示的なコマンドサイズ908がコマンドのサイズを指定することが期待される。一実施例において、コマンドパーサは、コマンドオペコードに基づいて、コマンドのうちの少なくともいくつかのサイズを自動的に判定する。一実施例において、コマンドは、ダブルワードの倍数によって整列される。
図11Bにおけるフローチャートは、サンプルコマンドシーケンス910を示す。一実施例において、グラフィックスプロセッサの一実施例を特徴とするデータ処理システムのソフトウェア又はファームウェアは、一連のグラフィックス操作をセットアップし、実行し、終了するために示されたコマンドシーケンスのバージョンを使用する。例示的な目的のために、例示的なコマンドシーケンスが示されるとともに説明されるが、しかしながら、実施例は、これらのコマンド又はこのコマンドシーケンスに限定されない。さらに、コマンドは、グラフィックスプロセッサが少なくとも部分的に並行してコマンドのシーケンスを処理するように、コマンドシーケンス内のコマンドのバッチとして発行されてもよい。
サンプルコマンドシーケンス910は、任意のアクティブグラフィックスパイプラインがパイプラインにおける現在保留中のコマンドを完了させることができるパイプラインフラッシュコマンド912によって始まる。一実施例では、3Dパイプライン922とメディアパイプライン924は同時に動作しない。パイプラインフラッシュは、アクティブグラフィックスパイプラインが任意の保留中のコマンドを完了させるように実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサ用のコマンドパーサは、アクティブな描画エンジンが保留中の動作を完了し、関連する読み出しキャッシュが無効にされるまで、コマンド処理を一時停止する。任意に、レンダキャッシュ内の“ダーティ”とマークされたデータは全てメモリにフラッシュされることができる。パイプラインフラッシュコマンド912は、パイプライン同期のために、又はグラフィックスプロセッサを低電力状態に設定する前に使用されることができる。
パイプライン選択コマンド913は、コマンドシーケンスがグラフィックスプロセッサにパイプライン間を明示的に切り替えることを要求する場合に使用される。パイプライン選択コマンド913は、コンテキストが両方のパイプラインに対してコマンドを発行することになる場合を除いて、パイプラインコマンドを発行する前に実行コンテキスト内で1回だけ必要とされる。一実施例では、パイプライン選択コマンド913によるパイプラインスイッチの直前に、パイプラインフラッシュコマンド912が必要とされる。
パイプライン制御コマンド914は、動作のためにグラフィックスパイプラインを設定するとともに、3Dパイプライン922及びメディアパイプライン924をプログラムするために使用される。パイプライン制御コマンド914は、アクティブなパイプラインに対して、パイプライン状態を設定する。一実施例において、パイプライン制御コマンド914は、パイプライン同期、及びコマンドのバッチを処理する前にアクティブパイプライン内の1つ又は複数のキャッシュメモリからデータを消去するために使用される。
リターンバッファ状態コマンド916は、それぞれのパイプラインがデータを書き込むためのリターンバッファのセットを設定するために使用される。いくつかのパイプライン演算は、処理中に動作が中間データを書き込む1つ又は複数のリターンバッファの割り当て、選択、又は設定を必要とする。グラフィックスプロセッサは、同様に、出力データを記憶し、クロススレッド通信(cross thread communication)を実行するために、1つ又は複数のリターンバッファを使用する。リターンバッファ状態コマンド916は、一連のパイプライン演算に使用するリターンバッファのサイズ及び数を選択することを含む。
コマンドシーケンス内の残りのコマンドは、動作のためのアクティブなパイプラインに基づいて異なる。パイプライン判定920に基づくと、コマンドシーケンスは、3Dパイプライン状態930で始まる3Dパイプライン922、又はメディアパイプライン状態940で始まるメディアパイプライン924に合わせて調整される。
3Dパイプライン状態930に関するコマンドは、頂点バッファ状態(vertex buffer state)、頂点要素状態(vertex element state)、一定色状態(constant color state)、奥行きバッファ状態(depth buffer state)、及び3Dプリミティブコマンドが処理される前に設定されるべき他の状態変数に対する3D状態設定コマンドを含む。これらのコマンドの値は、使用中の特定の3D APIに少なくとも部分的に基づいて決定される。3Dパイプライン状態930コマンドは、特定のパイプライン要素を、これらの要素が使用されない場合、同様に、選択的に無効にするか、又はバイパスすることが可能である。
3Dプリミティブ932コマンドは、3Dパイプラインにより処理されるべき3Dプリミティブを投入するために使用される。3Dプリミティブ932コマンドを介してグラフィックスプロセッサに渡されるコマンド及び関連するパラメータは、グラフィックスパイプラインにおける頂点フェッチ機能に転送される。頂点フェッチ機能は、3Dプリミティブ932コマンドデータを使用して頂点データ構造を生成する。頂点データ構造は、1つ又は複数のリターンバッファに記憶される。3Dプリミティブ932コマンドは、頂点シェーダによって3Dプリミティブに対して頂点操作を実行するために使用される。頂点シェーダを処理するために、3Dパイプライン922は、シェーダ実行スレッドをグラフィックスプロセッサ実行ユニットにディスパッチする。
3Dパイプライン922は、実行934コマンド又はイベントを介してトリガされる。一実施例では、レジスタ書き込みがコマンド実行をトリガする。一実施例では、コマンドシーケンス中の“go(進行)”又は“kick(キック)”コマンドを介して実行がトリガされる。一実施例において、コマンド実行は、パイプライン同期コマンドを使用してトリガされ、グラフィックスパイプラインを通してコマンドシーケンスをフラッシュする。3Dパイプラインは、3Dプリミティブのジオメトリ処理を実行することになる。一度操作が完了すると、結果として得られるジオメトリックオブジェクトはラスタライズされ、ピクセルエンジンは結果として生じるピクセルに色付けする。ピクセルシェーディング及びピクセルバックエンド操作を制御するための追加のコマンドが、同様に、これらの操作に含められ得る。
サンプルコマンドシーケンス910は、メディア操作を実行するときにメディアパイプライン924の経路に従う。一般に、メディアパイプライン924のためのプログラミングの特定の使用及び方法は、メディア又は実行されるべき計算操作に依存する。特定のメディアデコード操作は、メディアデコード中にメディアパイプラインにオフロードされ得る。メディアパイプラインは、同様に、バイパスされることができ、メディアデコードは、1つ又は複数の汎用処理コアにより提供されるリソースを使用して、全体又は一部において実行されることができる。一実施例において、メディアパイプラインは、同様に、汎用グラフィックスプロセッサユニット(GPGPU)操作のための要素を含み、ここで、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明示的に関係しない計算シェーダプログラム(computational shader programs)を使用してSIMDベクトル演算を実行するために使用される。
メディアパイプライン924は、3Dパイプライン922と同様に構成されている。1組のメディアパイプライン状態コマンド940は、メディアオブジェクトコマンド942の前にコマンドキューにディスパッチされるか、又はコマンドキューにセットされる。メディアパイプライン状態コマンド940は、メディアオブジェクトを処理するために使用されることになるメディアパイプライン要素を設定するためのデータを含む。これには、エンコード又はデコードフォーマットなど、メディアパイプライン内のビデオデコード及びビデオエンコードロジックを設定するためのデータが含まれる。メディアパイプライン状態コマンド940は、同様に、状態設定のバッチを含む“間接”状態要素への1つ又は複数のポインタの使用をサポートする。
メディアオブジェクトコマンド942は、メディアパイプラインによる処理のために、メディアオブジェクトへのポインタを供給する。メディアオブジェクトは、処理されるべきビデオデータを含むメモリバッファを含む。一実施例では、メディアオブジェクトコマンド942を発行する前に、全てのメディアパイプライン状態が有効でなければならない。一度パイプライン状態が設定され、メディアオブジェクトコマンド942が待ち行列に入れられると、メディアパイプライン924は、実行944コマンド又は同等の実行イベント(例えば、レジスタ書き込み)を介してトリガされる。その場合に、メディアパイプライン924からの出力は、3Dパイプライン922又はメディアパイプライン924により提供される操作によって後処理されてもよい。一実施例において、GPGPU操作は、メディア操作と同様の方法で設定され実行される。
図12は、一実施例によるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを例示する。ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション1010、オペレーティングシステム1020、及び少なくとも1つのプロセッサ1030を含む。プロセッサ1030は、グラフィックスプロセッサ1032、及び1つ又は複数の汎用プロセッサコア1034を含む。グラフィックスアプリケーション1010及びオペレーティングシステム1020は、それぞれ、データ処理システムのシステムメモリ1050内で実行される。
一実施例において、3Dグラフィックスアプリケーション1010は、シェーダ命令1012を含む1つ又は複数のシェーダプログラムを含む。シェーダ言語命令は、高レベルシェーダ言語(HLSL)又はOpenGLシェーダ言語(GLSL)のような高レベルシェーダ言語であってもよい。アプリケーションは、同様に、汎用プロセッサコア1034による実行に適した機械語における実行可能命令1014を含む。アプリケーションは、同様に、頂点データにより定義されるグラフィックスオブジェクト1016を含む。
オペレーティングシステム1020は、マイクロソフト(登録商標)社のMicrosoft(登録商標)Windows(登録商標)オペレーティングシステム、独自のUNIX(登録商標)のようなオペレーティングシステム、又はLinux(登録商標)カーネルの変形を使用するオープンソースのUNIX(登録商標)のようなオペレーティングシステムであってもよい。Direct3D APIが使用されているとき、オペレーティングシステム1020は、フロントエンドシェーダコンパイラ1024を使用して、HLSLのシェーダ命令1012を下位レベルのシェーダ言語にコンパイルする。このコンパイルは、実行時コンパイル(just-in-time compilation)であってもよいか、又はアプリケーションは、共有プレコンパイル(share pre-compilation)を実行できる。一実施例において、高レベルシェーダは、3Dグラフィックスアプリケーション1010のコンパイル中に低レベルシェーダにコンパイルされる。
ユーザモードグラフィックスドライバ1026は、シェーダ命令1012をハードウェア特有の表現に変換するバックエンドシェーダコンパイラ1027を含むことができる。OpenGL APIが使用されているとき、GLSL高水準言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックスドライバ1026に渡される。ユーザモードグラフィックスドライバは、オペレーティングシステムカーネルモード機能1028を使用してカーネルモードグラフィックスドライバ1029と通信する。カーネルモードグラフィックスドライバ1029はグラフィックスプロセッサ1032と通信し、コマンド及び命令をディスパッチする。
様々な動作又は機能が本明細書で説明されている限り、それらは、ハードウェア回路、ソフトウェアコード、命令、構成、及び/又はデータとして記述又は定義されることができる。コンテンツは、ハードウェアロジックにおいて、あるいは、直接実行可能なソフトウェア(“オブジェクト”又は“実行可能”形式)、ソースコード、グラフィックスエンジンでの実行のために設計された高水準のシェーダコード、又は特定のプロセッサ若しくはグラフィックスコア用の命令セット内の低レベルのアセンブリ言語コードとして具体化されることができる。本明細書で説明される実施例のソフトウェアコンテンツは、コンテンツが記憶された製品によって、又は通信インタフェースを介してデータを送信するように通信インタフェースを操作する方法によって提供されることができる。
非一時的な機械読み取り可能な記憶媒体は、機械に、説明された機能又は動作を実行させることができ、記録可能/記録不可能媒体(例えば、読み出し専用メモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスク記憶媒体、光学記憶媒体、フラッシュメモリ装置など)のような、機械(例えば、コンピューティング装置、電子システムなど)によってアクセス可能な形式で情報を記憶する任意の機構を含む。通信インタフェースは、メモリバスインタフェース、プロセッサバスインタフェース、インターネット接続、ディスクコントローラのような他のデバイスと通信するために、ハードワイヤード、無線、光などの媒体のいずれかにインタフェースする任意の機構を含む。通信インタフェースは、ソフトウェアコンテンツを記述するデータ信号を提供するために、設定パラメータを提供するか、又は通信インタフェースを準備するための信号を送信することによって設定される。通信インタフェースは、通信インタフェースに送信される1つ又は複数のコマンド又は信号を介してアクセスされることができる。
説明された様々な構成要素は、説明された動作又は機能を実行するための手段とすることができる。本明細書で説明される各構成要素は、ソフトウェア、ハードウェア、又はこれらの組み合わせを含む。構成要素は、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア(例えば、特定用途向けハードウェア、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)など)、組み込みコントローラ、ハードワイヤード回路などとして実施されることができる。本明細書で説明されたものに加えて、本発明の範囲から逸脱することなく、本発明の開示された実施例及び実装例に様々な変更を行うことができる。したがって、本明細書の例示及び実施は、例示的なものであり、限定的な意味で解釈されるべきではない。本発明の範囲は、添付の請求項を参照することによってのみ判定されるべきである。
下記の節及び/又は実例は、さらなる実施例に関する。1つの実例の実施例は、位置限定シェーディングを実行するステップと、シェードされたプリミティブを代表座標に基づいてビンにソートするステップと、ビン内のプリミティブをその奥行きに基づいてソートするステップとを含む、方法であり得る。方法は、同様に、上記シェードされたプリミティブをソートするステップが、シェードされたプリミティブのグループをソートするステップを含む、ことを含み得る。方法は、同様に、タイル内の全ての三角形からなるグループを形成するステップを含む、ことを含み得る。方法は、同様に、上記シェードされたプリミティブをソートするステップが、上記プリミティブをビンにビニングするステップを含む、ことを含み得る。方法は、同様に、上記のソートされたプリミティブを一度に1ビンずつラスタライズするステップを含む、ことを含み得る。方法は、同様に、奥行きの順にソートされたプリミティブをラスタライズするステップを含む、ことを含み得る。方法は、同様に、座標に基づいてソートするステップが、座標、奥行き、プリミティブのサイズ及び状態に基づいてソートするステップを含む、ことを含み得る。方法は、同様に、上記座標が、グループ内の三角形の平均頂点位置として計算される、ことを含み得る。方法は、同様に、上記座標を計算するステップが、三角形の頂点の上にバウンディングボックスを形成するステップと、上記ボックスの中心の座標を使用するステップとを含む、ことを含み得る。方法は、同様に、座標を量子化し、それらを空間充填曲線に沿った整数位置に変換することにより上記座標をビンにマッピングするステップを含む、ことを含み得る。
別の実例の実施例は、少なくとも、命令を記憶する1つ又は複数の非一時的なコンピュータ読み取り可能な媒体であって、上記命令が実行されると、位置限定シェーディングを実行するステップと、シェードされたプリミティブを代表座標に基づいてビンにソートするステップと、ビン内のプリミティブをその奥行きに基づいてソートするステップとを含むシーケンスを実行する、コンピュータ読み取り可能な媒体であり得る。媒体は、上記シェードされたプリミティブをソートするステップが、シェードされたプリミティブのグループをソートするステップを含む、ことを含み得る。媒体は、上記シーケンスが、タイル内の全ての三角形からなるグループを形成するステップを含む、ことを含み得る。媒体は、上記シェードされたプリミティブをソートするステップが、上記プリミティブをビンにビニングするステップを含む、ことを含み得る。媒体は、上記シーケンスが、上記のソートされたプリミティブを一度に1ビンずつラスタライズするステップを含む、ことを含み得る。媒体は、上記シーケンスが、奥行きの順にソートされたプリミティブをラスタライズするステップを含む、ことを含み得る。媒体は、座標に基づいてソートするステップが、座標、奥行き、プリミティブのサイズ及び状態に基づいてソートするステップを含む、ことを含み得る。媒体は、上記座標が、グループ内の三角形の平均頂点位置として計算される、ことを含み得る。媒体は、上記座標を計算するステップが、三角形の頂点の上にバウンディングボックスを形成するステップと、上記ボックスの中心の座標を使用するステップとを含む、ことを含み得る。媒体は、上記シーケンスが、座標を量子化し、それらを空間充填曲線に沿った整数位置に変換することにより上記座標をビンにマッピングするステップを含む、ことを含み得る。
別の実例において、実施例は、位置限定シェーディングを実行し、シェードされたプリミティブを代表座標に基づいてビンにソートし、ビン内のプリミティブをその奥行きに基づいてソートするプロセッサと、上記プロセッサに接続された記憶装置とを備える、装置であり得る。装置は、上記プロセッサが、シェードされたプリミティブのグループをソートする、ことを含み得る。装置は、上記プロセッサが、タイル内の全ての三角形からなるグループを形成する、ことを含み得る。装置は、上記プロセッサが、上記プリミティブをビンにビニングする、ことを含み得る。装置は、上記プロセッサが、上記のソートされたプリミティブを一度に1ビンずつラスタライズする、ことを含み得る。装置は、上記プロセッサが、奥行きの順にソートされたプリミティブをラスタライズする、ことを含み得る。装置は、上記プロセッサが、座標、奥行き、プリミティブのサイズ及び状態に基づいてソートする、ことを含み得る。装置は、上記プロセッサが、上記座標をグループ内の三角形の平均頂点位置として計算する、ことを含み得る。装置は、上記プロセッサが、三角形の頂点の上にバウンディングボックスを形成するとともに、上記ボックスの中心の座標を使用する、ことを含み得る。装置は、上記プロセッサが、座標を量子化し、それらを空間充填曲線に沿った整数位置に変換することにより上記座標をビンにマッピングする、ことを含み得る。
本明細書で説明されるグラフィックス処理技術は、様々なハードウェアアーキテクチャで実施されることができる。例えば、グラフィックス機能はチップセット内に統合されることができる。あるいは、別個のグラフィックスプロセッサが使用され得る。更に別の実施形態として、グラフィックス機能は、マルチコアプロセッサを含む汎用プロセッサによって実施されてもよい。
“一実施例”又は“実施例”に対する本明細書を通した言及は、上記実施例に関連して説明された特定の特徴、構造、または特性が本発明に包含される少なくとも1つの具体化に含まれているということを意味している。従って、“一実施例”又は“実施例において”の語句の記載は、必ずしも同じ実施例を参照している訳でない。更に、特定の構成、構造、又は特性は、例示された特定の実施例以外の他の適切な形態で導入され得るとともに、そのような形態の全ては、本出願の特許請求の範囲内に包含され得る。
限られた数の実施例が説明されたが、当業者は、それらから多数の変更及び変形を認識することになる。本開示の真の趣旨及び範囲内に収まるように、特許請求の範囲に記載の請求項がそのような変更及び変形の全てを包含することが意図される。