【文献】
K, Vaidyanathan,外11名,“Coarse Pixel Shading”,Proceedings of High Performance Graphics,The Eurographics Association,2014年 6月23日,p.9-18
【文献】
中谷文香,外3名,“レーザプラズマ式3次元ディスプレイデバイスのための物体の表面特徴量を利用したリソースアウェア・レンダリング”,日本バーチャルリアリティ学会論文誌,特定非営利活動法人日本バーチャルリアリティ学会,2012年,Vol.17,No.4,p.419-428
(58)【調査した分野】(Int.Cl.,DB名)
ラスタライズを実行する段階は、複数の頂点接平面に基づいて、修正された複数のテクスチャデリバティブを前記ピクセルシェーダにより決定する段階を更に有する、請求項4に記載の方法。
【発明を実施するための形態】
【0024】
以下の説明において、説明の目的のために、後述される本発明の複数の実施形態の完全な理解を提供するべく、多くの具体的な詳細が記載される。しかし、当業者には、本発明の複数の実施形態がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。本発明の複数の実施形態の基礎となる原理を不明瞭にするのを避けるべく、複数の他の例において、周知の複数の構造およびデバイスがブロック図の形態で示される。
【0025】
例示的なグラフィックスプロセッサのアーキテクチャおよびデータタイプ
[概要−
図1〜
図3]
図1は、一実施形態によるデータ処理システム100のブロック図である。データ処理システム100は、1または複数のプロセッサ102と、1または複数のグラフィックスプロセッサ108とを含み、多数のプロセッサ102またはプロセッサコア107を有するシングルプロセッサデスクトップシステム、マルチプロセッサワークステーションシステム、またはサーバシステムであり得る。一実施形態において、データ処理システム100は、モバイル、ハンドヘルド型、またはエンベデッドデバイスにおいて用いるためのシステムオンチップ集積回路(SOC)である。
【0026】
データ処理システム100の実施形態は、ゲームおよびメディアコンソール、モバイルゲームコンソール、ハンドヘルド型ゲームコンソール、またはオンラインゲームコンソールを含む、サーバベースのゲームプラットフォーム、ゲームコンソールを含み、またはこれらの内部に組み込まれ得る。一実施形態において、データ処理システム100は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、またはモバイルインターネットデバイスである。また、データ処理システム100は、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、またはバーチャルリアリティデバイス等のウェアラブルデバイスも含み、これらと結合し、またはこれらの内部に統合され得る。一実施形態において、データ処理システム100は、1または複数のプロセッサ102と、1または複数のグラフィックスプロセッサ108により生成されるグラフィカルインタフェースとを有するテレビまたはセットトップボックスデバイスである。
【0027】
1または複数のプロセッサ102は各々、実行されると、システムおよびユーザソフトウェアのための複数のオペレーションを実行する複数の命令を処理する、1または複数のプロセッサコア107を含む。一実施形態において、1または複数のプロセッサコア107の各々は、特定の命令セット109を処理するように構成される。命令セット109は、複合命令セット演算(CISC)、縮小命令セット演算(RISC)、または超長命令語(VLIW)による演算を容易にし得る。複数のプロセッサコア107は各々、複数の他の命令セットのエミュレーションを容易にする複数の命令を含み得る、異なる命令セット109を処理し得る。プロセッサコア107は、デジタル信号プロセッサ(DSP)等の複数の他のプロセッシングデバイスも含み得る。
【0028】
一実施形態において、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。一実施形態において、キャッシュメモリは、プロセッサ102の様々なコンポーネント間で共有される。一実施形態において、プロセッサ102は、既知の複数のキャッシュコヒーレンシ技術を用いる複数のプロセッサコア107間で共有され得る外部キャッシュ(例えば、レベル3(L3)キャッシュまたはラストレベルキャッシュ(LLC))(図示せず)も用いる。更に、レジスタファイル106は、複数の異なるタイプのデータを格納する複数の異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ)を含み得る、プロセッサ102内に含まれる。いくつかのレジスタは、汎用レジスタであり得るが、他のレジスタは、プロセッサ102の設計に固有であってもよい。
【0029】
プロセッサ102は、システム100におけるプロセッサ102と複数の他のコンポーネントとの間で複数のデータ信号を送信するべく、プロセッサバス110と結合される。システム100は、メモリコントローラハブ116および入出力(I/O)コントローラハブ130を含む、例示的な「ハブ」システムアーキテクチャを用いる。メモリコントローラハブ116は、システム100のメモリデバイスと複数の他のコンポーネントとの間の通信を容易にするが、I/Oコントローラハブ(ICH)130は、ローカルI/Oバスを介してI/Oデバイスへの複数の接続を提供する。
【0030】
メモリデバイス120は、処理メモリとして機能する好適な性能を有する、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、またはいくつかの他のメモリデバイスであり得る。メモリ120は、プロセッサ102が処理を実行するときに用いられるデータ122および複数の命令121を格納し得る。メモリコントローラハブ116は、任意選択の外部グラフィックスプロセッサ112にも結合し、任意選択の外部グラフィックスプロセッサ112は、グラフィックスおよびメディアオペレーションを実行するべく、プロセッサ102において1または複数のグラフィックスプロセッサ108と通信し得る。
【0031】
ICH130は、複数の周辺機器が高速I/Oバスを介してメモリ120およびプロセッサ102に接続することを可能にする。I/O周辺機器は、オーディオコントローラ146、ファームウェアインタフェース128、無線トランシーバ126(例えば、Wi−Fi、Bluetooth(登録商標))、データストレージデバイス124(例えば、ハードディスクドライブ、フラッシュメモリ等)、および複数のレガシ(例えば、パーソナルシステム2(PS/2))デバイスをシステムと結合するためのレガシI/Oコントローラを含む。1または複数のユニバーサルシリアルバス(USB)コントローラ142は、キーボードおよびマウス144の組み合わせのような複数の入力デバイスを接続する。ネットワークコントローラ134も、ICH130と結合し得る。一実施形態において、高性能ネットワークコントローラ(図示せず)は、プロセッサバス110と結合する。
【0032】
図2は、1または複数のプロセッサコア202A〜N、統合メモリコントローラ214、および統合グラフィックスプロセッサ208を有するプロセッサ200の実施形態のブロック図である。プロセッサ200は、破線ボックスにより表される追加のコア202Nまでの複数の追加のコアを含み得る。コア202A〜Nの各々は、1または複数の内部キャッシュユニット204A〜Nを含む。一実施形態において、各コアは、1または複数の共有キャッシュユニット206へのアクセスも有する。
【0033】
内部キャッシュユニット204A〜N、および共有キャッシュユニット206は、プロセッサ200内におけるキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも1つのレベルの複数の命令およびデータキャッシュ、ならびにレベル2(L2)、レベル3(L3)、レベル4(L4)、または複数の他のレベルのキャッシュのような1または複数のレベルの中間レベルの共有キャッシュを含み得、外部メモリの前の最高レベルのキャッシュは、ラストレベルキャッシュ(LLC)として分類される。一実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット206および204A〜N間のコヒーレンシを維持する。
【0034】
プロセッサ200は、1または複数のバスコントローラユニット216およびシステムエージェント210のセットも含み得る。1または複数のバスコントローラユニットは、1または複数の周辺構成要素相互接続バス(例えば、PCI、PCIエクスプレス)のような複数の周辺機器バスのセットを管理する。システムエージェント210は、様々なプロセッサコンポーネントのための管理機能を提供する。一実施形態において、システムエージェント210は、様々な外部メモリデバイス(図示せず)へのアクセスを管理するべく、1または複数の統合メモリコントローラ214を含む。
【0035】
一実施形態において、コア202A〜Nのうちの1または複数は、同時のマルチスレッディングのためのサポートを含む。そのような実施形態において、システムエージェント210は、マルチスレッド処理中にコア202A〜Nを調整および動作させるための複数のコンポーネントを含む。更に、システムエージェント210は、電力制御ユニット(PCU)を含み得、電力制御ユニットは、コア202A〜Nおよびグラフィックスプロセッサ208の電力状態を調整するロジックおよび複数のコンポーネントを含む。
【0036】
更に、プロセッサ200は、複数のグラフィックス処理オペレーションを実行するグラフィックスプロセッサ208を含む。一実施形態において、グラフィックスプロセッサ208は、共有キャッシュユニット206、および1または複数の統合メモリコントローラ214を含むシステムエージェントユニット210のセットと結合する。一実施形態において、ディスプレイコントローラ211は、1または複数の結合されたディスプレイへのグラフィックスプロセッサの出力を駆動するべく、グラフィックスプロセッサ208と結合される。ディスプレイコントローラ211は、少なくとも1つの相互接続を介してグラフィックスプロセッサと結合された別個のモジュールであってもよく、またはグラフィックスプロセッサ208もしくはシステムエージェント210内に統合されてもよい。
【0037】
一実施形態において、リングベースの相互接続ユニット212は、プロセッサ200の複数の内部コンポーネントを結合するべく用いられる。しかし、当技術分野において周知の複数の技術を含む、ポイントツーポイント相互接続、スイッチ相互接続、または他の複数の技術等、代替的な相互接続ユニットが用いられてもよい。一実施形態において、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
【0038】
例示的なI/Oリンク213は、様々なプロセッサコンポーネントとeDRAMモジュールのような高性能エンベデッドメモリモジュール218との間の通信を容易にするパッケージI/O相互接続を含む、複数の様々なI/O相互接続のうちの少なくとも1つを表す。一実施形態において、コア202〜Nおよびグラフィックスプロセッサ208の各々は、共有ラストレベルキャッシュとしてエンベデッドメモリモジュール218を用いる。
【0039】
一実施形態において、コア202A〜Nは、同一の命令セットアーキテクチャを実行する同種のコアである。別の実施形態において、コア202A〜Nは、命令セットアーキテクチャ(ISA)の観点からは異種であり、コア202A〜Nのうちの1または複数は、第1の命令セットを実行するが、複数の他のコアのうちの少なくとも1つは、第1の命令セットまたは異なる命令セットのサブセットを実行する。
【0040】
プロセッサ200は、いくつかの処理技術、例えば、相補型金属酸化膜半導体(CMOS)、バイポーラ接合/相補型金属酸化膜半導体(BiCMOS)またはN型金属酸化膜半導体ロジック(NMOS)のいずれかを用いる、1または複数の基板の一部であるか、またはこれらの上に実装され得る。更に、プロセッサ200は、複数の他のコンポーネントに加えて、1または複数のチップ上に実装され、または図示される複数のコンポーネントを有するシステムオンチップ(SOC)集積回路として実装され得る。
【0041】
図3は、ディスクリートグラフィックス処理ユニットであり得るか、または複数のプロセッシングコアと統合されたグラフィックスプロセッサであり得る、グラフィックスプロセッサ300の一実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上の複数のレジスタにメモリマッピングされたI/Oインタフェースと、プロセッサメモリ内に置かれる複数のコマンドにより通信される。グラフィックスプロセッサ300は、メモリにアクセスするためのメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1または複数の内部キャッシュ、1または複数の共有外部キャッシュ、および/またはシステムメモリへのインタフェースであり得る。
【0042】
グラフィックスプロセッサ300は、ディスプレイ出力データをディスプレイデバイス320に駆動するディスプレイコントローラ302も含む。ディスプレイコントローラ302は、ディスプレイ用の1または複数のオーバーレイ平面のためのハードウェアと、動画またはユーザインタフェース要素の複数の層の構成物とを含む。一実施形態において、グラフィックスプロセッサ300は、MPEG2のようなムービングピクチャエクスパーツグループ(MPEG)フォーマット、H.264/MPEG4 AVCのようなアドバンスドビデオコーディング(AVC)フォーマット、および米国映画テレビ技術者協会(SMPTE)421M/VC−1、ならびにジョイントフォトグラフィックエクスパーツグループ(JPEG)、およびモーションJPEG(MJPEG)フォーマットのようなJPEGフォーマットを含むがこれらに限定されない、1または複数のメディアエンコードフォーマットへ、これらから、またはこれらの間でメディアをエンコード、デコード、またはトランスコードするビデオコーデックエンジン306を含む。
【0043】
一実施形態において、グラフィックスプロセッサ300は、例えば、ビット境界ブロック転送を含む、複数の2次元(2D)ラスタライザオペレーションを実行するブロック画像転送(BLIT)エンジン304を含む。しかし、一実施形態において、複数の2Dグラフィックスオペレーションは、グラフィックス処理エンジン(GPE)310の1または複数のコンポーネントを用いて実行される。グラフィックス処理エンジン310は、複数の3次元(3D)グラフィックスオペレーションおよびメディアオペレーションを含む、グラフィックスオペレーションを実行するための演算エンジンである。
【0044】
GPE310は、3Dプリミティブ図形(例えば、矩形、トライアングル等)に対して機能する複数の処理機能を用いて、複数の3次元画像およびシーンをレンダリングするなど、複数の3Dオペレーションを実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内の様々なタスクを実行し、および/または3D/メディアサブシステム315に複数の実行スレッドをスポーン(spawn)するプログラミング可能な複数の固定関数要素を含む。3Dパイプライン312は、複数のメディアオペレーションを実行するべく用いられ得るが、GPE310の実施形態は、具体的には、動画の後処理および画像強調等の複数のメディアオペレーションを実行するべく用いられるメディアパイプライン316も含む。
【0045】
一実施形態において、メディアパイプライン316は、ビデオコーデックエンジン306の代替に、またはこれの代わりに動画デコードの加速、動画のインターレース解除、および動画エンコードの加速等、1または複数の専用メディアオペレーションを実行する、固定関数またはプログラミング可能なロジックユニットを含む。一実施形態において、メディアパイプライン316は更に、3D/メディアサブシステム315において実行するための複数のスレッドをスポーンする、スレッドスポーンユニットを含む。スポーンされた複数のスレッドは、3D/メディアサブシステムに含まれる1または複数のグラフィックス実行ユニット上で複数のメディアオペレーションのための演算を実行する。
【0046】
3D/メディアサブシステム315は、3Dパイプライン312およびメディアパイプライン316によりスポーンされた複数のスレッドを実行するためのロジックを含む。一実施形態において、複数のパイプラインは、複数のスレッド実行要求を3D/メディアサブシステム315に送信する。3D/メディアサブシステム315は、利用可能な複数のスレッド実行リソースに対する様々な要求を調整およびディスパッチするためのスレッドディスパッチロジックを含む。複数の実行リソースは、3Dおよびメディアスレッドを処理する複数のグラフィックス実行ユニットのアレイを含む。一実施形態において、3D/メディアサブシステム315は、複数のスレッド命令およびデータのための1または複数の内部キャッシュを含む。一実施形態において、サブシステムは、複数のスレッド間のデータを共有し、出力データを格納する複数のレジスタおよびアドレス指定可能メモリを含む、共有メモリも含む。
【0047】
[3D/メディア処理−
図4]
図4は、グラフィックスプロセッサ用のグラフィックス処理エンジン410の実施形態のブロック図である。一実施形態において、グラフィックス処理エンジン(GPE)410は、
図3に示されるGPE310の1つのバージョンである。GPE410は、3Dパイプライン412およびメディアパイプライン416を含み、その各々は、
図3の3Dパイプライン312およびメディアパイプライン316の実装と異なるか、またはこれに類似するかのいずれかであり得る。
【0048】
一実施形態において、GPE410は、コマンドストリーマ403と結合し、コマンドストリーマ403は、コマンドストリームをGPE3Dパイプライン412およびメディアパイプライン416に提供する。コマンドストリーマ403は、システムメモリ、または内部キャッシュメモリおよび共有キャッシュメモリのうちの1または複数であり得るメモリと結合される。コマンドストリーマ403は、メモリから複数のコマンドを受信し、これらのコマンドを3Dパイプライン412および/またはメディアパイプライン416に送信する。3Dパイプラインおよびメディアパイプラインは、各パイプライン内のロジックによる複数のオペレーションを実行し、または1または複数の実行スレッドを実行ユニットアレイ414にディスパッチすることにより、複数のコマンドを処理する。一実施形態において、実行ユニットアレイ414はスケーラブルであり、その結果、アレイは、GPE410のターゲット電力および性能レベルに基づいて変わり得る数の実行ユニットを含む。
【0049】
サンプリングエンジン430は、メモリ(例えば、キャッシュメモリまたはシステムメモリ)および実行ユニットアレイ414と結合する。一実施形態において、サンプリングエンジン430は、実行ユニットアレイ414がグラフィックスおよびメディアデータをメモリから読み取ることを可能にするスケーラブルな実行ユニットアレイ414のためのメモリアクセスメカニズムを提供する。一実施形態において、サンプリングエンジン430は、メディアに対する複数の専用画像サンプリングオペレーションを実行するロジックを含む。
【0050】
サンプリングエンジン430における専用メディアサンプリングロジックは、ノイズ除去/インターレース解除モジュール432、動き推定モジュール434、および画像スケーリング・フィルタリングモジュール436を含む。ノイズ除去/インターレース解除モジュール432は、デコードされる動画データに対してノイズ除去またはインターレース解除アルゴリズムのうちの1または複数を実行するロジックを含む。インターレース解除ロジックは、インターレース済みの動画コンテンツの複数の交互フィールドを組み合わせて単一のフレームの動画にする。ノイズ除去ロジックは、動画および画像データからデータノイズを低減または除去する。一実施形態において、ノイズ除去ロジックおよびインターレース解除ロジックは、動き適応型であり、動画データにおいて検出された動きの量に基づく空間的または時間的フィルタリングを用いる。一実施形態において、ノイズ除去/インターレース解除モジュール432は、(例えば、動き推定エンジン434内に)専用の動き検出ロジックを含む。
【0051】
動き推定エンジン434は、動きベクトル推定および動画データに関する予測等の複数の動画加速機能を実行することにより、複数の動画オペレーションのためのハードウェアの加速を提供する。動き推定エンジンは、複数の連続的動画フレーム間の画像データ変換を記載する複数の動きベクトルを決定する。一実施形態において、グラフィックスプロセッサのメディアコーデックは、別の場合には汎用プロセッサの使用を実行するべく演算集約的であり得るマクロブロックレベルで動画に複数のオペレーションを実行する、動画動き推定エンジン434を用いる。一実施形態において、動き推定エンジン434は一般に、動画データ内の動きの方向または大きさに感応性または適応性である動画デコードおよび複数の処理機能を支援するべく、複数のグラフィックスプロセッサコンポーネントに利用可能である。
【0052】
画像スケーリング・フィルタリングモジュール436は、生成される画像および動画の視覚的質を高めるべく複数の画像処理オペレーションを実行する。一実施形態において、画像スケーリング・フィルタリングモジュール436は、データを実行ユニットアレイ414に提供する前に、サンプリングオペレーション中に画像および動画データを処理する。
【0053】
一実施形態において、グラフィックス処理エンジン410は、データポート444を含み、データポート444は、メモリにアクセスするために複数のグラフィックスサブシステム用の追加のメカニズムを提供する。データポート444は、レンダリングターゲット書き込み、コンスタントバッファ読み取り、スクラッチメモリ空間の読み取り/書き込み、およびメディアサーフェスアクセスを含む複数のオペレーションのためのメモリアクセスを容易にする。一実施形態において、データポート444は、メモリへの複数のアクセスをキャッシュするキャッシュメモリ空間を含む。キャッシュメモリは、1つのデータキャッシュであり、またはデータポートを介してメモリにアクセスする複数のサブシステム用の複数のキャッシュ(例えば、レンダリングバッファキャッシュ、コンスタントバッファキャッシュ等)に分離され得る。一実施形態において、実行ユニットアレイ414における実行ユニット上で実行される複数のスレッドは、グラフィックス処理エンジン410の複数のサブシステムの各々を結合するデータ配信相互接続を介して複数のメッセージを交換することにより、データポートと通信する。
【0054】
[実行ユニット−
図5〜
図7]
図5は、グラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、リング相互接続502、パイプラインフロントエンド504、メディアエンジン537、およびグラフィックコア580A〜Nを含む。リング相互接続502は、複数の他のグラフィックスプロセッサ、または1もしくは複数の汎用プロセッサコアを含む複数の他の処理ユニットに、グラフィックスプロセッサを結合する。一実施形態において、グラフィックスプロセッサは、マルチコア処理システム内に統合される多くのプロセッサのうちの1つである。
【0055】
グラフィックスプロセッサは、リング相互接続502を介して複数のコマンドのバッチを受信する。複数の受信コマンドは、パイプラインフロントエンド504におけるコマンドストリーマ503により変換される。グラフィックスプロセッサは、グラフィックコア580A〜Nを介して3Dジオメトリ処理およびメディア処理を実行する、スケーラブルな実行ロジックを含む。3Dジオメトリ処理コマンドについては、コマンドストリーマ503は、複数のコマンドをジオメトリパイプライン536に提供する。少なくともいくつかのメディア処理コマンドについては、コマンドストリーマ503は、複数のコマンドを、メディアエンジン537と結合するビデオフロントエンド534に提供する。メディアエンジン537は、動画および画像の後処理のための動画質エンジン(VQE)530と、ハードウェアにより加速されるメディアデータのエンコードおよびデコードを提供するマルチフォーマットエンコード/デコード(MFX)エンジン533とを含む。ジオメトリパイプライン536およびメディアエンジン537は各々、少なくとも1つのグラフィックコア580Aにより提供されるスレッド実行リソース用の複数の実行スレッドを生成する。
【0056】
グラフィックスプロセッサは、モジュラコア580A〜N(コアスライスと称される場合がある)を特徴付けるスケーラブルなスレッド実行リソースを含み、各々は、複数のサブコア550A〜N、560A〜N(コアサブスライスと称される場合がある)を有する。グラフィックスプロセッサは、任意の数のグラフィックコア580A〜580Nを有し得る。一実施形態において、グラフィックスプロセッサは、少なくとも第1のサブコア550Aおよび第2のサブコア560Aを有するグラフィックコア580Aを含む。別の実施形態において、グラフィックスプロセッサは、1つのサブコア(例えば550A)を有する低電力プロセッサである。一実施形態において、グラフィックスプロセッサは、複数のグラフィックコア580A〜Nを含み、それらの各々は、複数の第1のサブコア550A〜Nのセットと、複数の第2のサブコア560A〜Nのセットとを含む。複数の第1のサブコア550A〜Nのセットにおける各サブコアは、少なくとも複数の実行ユニット552A〜Nと、複数のメディア/テクスチャサンプラ554A〜Nとの第1のセットを含む。複数の第2のサブコア560A〜Nのセットにおける各サブコアは、少なくとも複数の実行ユニット562A〜Nと、複数サンプラ564A〜Nとの第2のセットを含む。一実施形態において、各サブコア550A〜N、560A〜Nは、複数の共有リソース570A〜Nのセットを共有する。一実施形態において、複数の共有リソースは、共有キャッシュメモリおよびピクセルオペレーションロジックを含む。他の複数の共有リソースも、グラフィックスプロセッサの様々な実施形態に含まれてもよい。
【0057】
図6は、グラフィックス処理エンジンの一実施形態において使用される複数の処理要素のアレイを含む、スレッド実行ロジック600を図示する。一実施形態において、スレッド実行ロジック600は、ピクセルシェーダ602、スレッドディスパッチャ604、命令キャッシュ606、複数の実行ユニット608A〜Nを含むスケーラブルな実行ユニットアレイ、サンプラ610、データキャッシュ612、およびデータポート614を含む。一実施形態において、含まれる複数のコンポーネントは、複数のコンポーネントの各々とリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック600は、命令キャッシュ606、データポート614、サンプラ610、および実行ユニットアレイ608A〜Nのうちの1または複数を介して、システムメモリまたはキャッシュメモリのようなメモリへの1または複数の接続を含む。一実施形態において、各実行ユニット(例えば608A)は、複数の同時のスレッドを実行してスレッド毎に並行に複数のデータ要素を処理することができる個別のベクトルプロセッサである。実行ユニットアレイ608A〜Nは、任意の数の個別の実行ユニットを含む。
【0058】
一実施形態において、実行ユニットアレイ608A〜Nは主に、「シェーダ」プログラムを実行するべく用いられる。一実施形態において、アレイ608A〜Nにおける実行ユニットは、多くの標準的3Dグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットを実行し、従って複数のグラフィックスライブラリからのシェーダプログラム(例えば、Direct 3DおよびOpenGL)は、最小の変換で実行される。複数の実行ユニットは、頂点およびジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、および汎用処理(例えば、演算およびメディアシェーダ)をサポートする。
【0059】
実行ユニットアレイ608A〜Nにおける各実行ユニットは、複数のデータ要素のアレイ上で動作する。データ要素の数は、命令に対する「実行サイズ」またはチャネルの数である。実行チャネルは、データ要素のアクセス、マスキング、および複数の命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサに対する物理ALUまたはFPUの数から独立している場合がある。実行ユニット608A〜Nは、整数および浮動小数点のデータタイプをサポートする。
【0060】
実行ユニット命令セットは、複数の単一命令多重データ(SIMD)命令を含む。様々なデータ要素は、パックドデータのタイプとしてレジスタに格納され得、実行ユニットは、複数の要素のデータサイズに基づいて様々な要素を処理する。例えば、256ビット幅のベクトル上で動作する場合、ベクトルの256ビットは、レジスタに格納され、実行ユニットは、4個の別個の64ビットパックドデータ要素(クワッドワード(QW)サイズのデータ要素)、8個の別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、または32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトル上で動作する。しかし、異なる複数のベクトル幅およびレジスタサイズが可能である。
【0061】
1または複数の内部命令キャッシュ(例えば、606)は、スレッド実行ロジック600に含まれ、実行ユニットのための複数のスレッド命令をキャッシュする。一実施形態において、スレッド実行中にスレッドデータをキャッシュする1または複数のデータキャッシュ(例えば612)が含まれる。複数の3Dオペレーションのためのテクスチャサンプリングおよび複数のメディアオペレーションのためのメディアサンプリングを提供するサンプラ610が含まれる。一実施形態において、サンプラ610は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャまたはメディアデータを処理する専用テクスチャまたはメディアサンプリング機能を含む。
【0062】
実行中に、グラフィックスおよびメディアパイプラインは、スレッドスポーンおよびディスパッチロジックにより複数のスレッド開始要求をスレッド実行ロジック600に送信する。スレッド実行ロジック600は、グラフィックスおよびメディアパイプラインからの複数のスレッド開始要求を調整し、1または複数の実行ユニット608A〜N上で要求された複数のスレッドをインスタンス化する、ローカルのスレッドディスパッチャ604を含む。例えば、ジオメトリパイプライン(例えば、
図5の536)は、頂点処理、テセレーション、またはジオメトリ処理のスレッドをスレッド実行ロジック600にディスパッチする。スレッドディスパッチャ604は、実行する複数のシェーダプログラムからのランタイムスレッドスポーン要求も処理し得る。
【0063】
複数の幾何学的オブジェクトのグループが処理され、ピクセルデータにラスタライズすると、ピクセルシェーダ602が呼び出され、更に出力情報を演算することで、結果が出力面に書き込まれる(例えば、色バッファ、デプスバッファ、ステンシルバッファ等)。一実施形態において、ピクセルシェーダ602は、ラスタライズされたオブジェクトにわたって補間される様々な頂点アトリビュートの値を算出する。次に、ピクセルシェーダ602は、APIにより提供されるピクセルシェーダプログラムを実行する。ピクセルシェーダプログラムを実行するべく、ピクセルシェーダ602は、スレッドディスパッチャ604により複数のスレッドを実行ユニット(例えば608A)にディスパッチする。ピクセルシェーダ602は、メモリに格納された複数のテクスチャマップにおけるテクスチャデータにアクセスするべく、サンプラ610におけるテクスチャサンプリングロジックを用いる。テクスチャデータおよび入力ジオメトリデータに対する複数の算術オペレーションは、幾何学フラグメント毎にピクセルカラーデータを演算するか、または1または複数のピクセルを更なる処理から破棄する。
【0064】
一実施形態において、データポート614は、スレッド実行ロジック600の出力処理されたデータのためのメモリアクセスメカニズムを、グラフィックスプロセッサ出力パイプライン上で処理するためのメモリに提供する。一実施形態において、データポート614は、データポートを介するメモリアクセスのためにデータをキャッシュする1または複数のキャッシュメモリ(例えば、データキャッシュ612)を含み、またはこれと結合する。
【0065】
図7は、一実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを図示するブロック図である。一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線で囲まれた複数のボックスは、一般に実行ユニット命令に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数の命令のサブセットのみに含まれる複数のコンポーネントを含む。説明され、図示される命令フォーマットは、命令が処理されると、命令のデコードからもたらされる複数のマイクロオペレーションとは異なり、実行ユニットに提供される複数の命令であるという点で、マクロ命令である。
【0066】
一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、128ビットフォーマット710の複数の命令をネイティブにサポートする。64ビット圧縮命令フォーマット730は、選択される命令、命令オプション、およびオペランドの数に基づいていくつかの命令に対して利用可能である。ネイティブな128ビットフォーマット710は、全ての命令オプションにアクセスを提供するが、いくつかのオプションおよびオペレーションは、64ビットフォーマット730において制限されている。64ビットフォーマット730において利用可能であるネイティブな命令は、実施形態により異なる。一実施形態において、命令は、インデックスフィールド713における複数のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、複数のインデックス値に基づいて複数の圧縮テーブルのセットを参照し、128ビットフォーマット710においてネイティブな命令を再構成するべく、複数の圧縮テーブル出力を用いる。
【0067】
フォーマット毎に、命令オペコード712は、実行ユニットが実行するべきオペレーションを規定する。複数の実行ユニットは、各オペランドの複数のデータ要素にわたって並行に各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素または画素を表す各色チャネルにわたって同時の加算オペレーションを実行する。デフォルトで、実行ユニットは、複数のオペランドの全てのデータチャネルにわたって各命令を実行する。命令制御フィールド712は、チャネル選択(例えば断定)およびデータチャネルの順序(例えばスウィズル)のような特定の実行オプションに対する制御を可能にする。128ビット命令710については、実行サイズフィールド716は、並行に実行されるデータチャネルの数を制限する。実行サイズフィールド716は、64ビットの圧縮命令フォーマット730で用いるために利用可能でない。
【0068】
いくつかの実行ユニット命令は、2つのソースオペランドsrc0 720、src1 722、および1つのデスティネーション718を含む、最大3つのオペランドを有する。一実施形態において、複数の実行ユニットは、デュアルのデスティネーション命令をサポートし、デスティネーションのうちの1つが暗示される。複数のデータ操作命令は、第3のソースオペランド(例えば、SRC2724)を有し得、命令オペコードJJ12は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡されるイミディエイト(例えば、ハードコードされた)値であり得る。
【0069】
一実施形態において、複数の命令は、オペコードデコード740を単純化するべく、オペコードビットフィールドに基づいてグループ化される。8ビットのオペコードについては、ビット4、5、および6は、実行ユニットがオペコードのタイプを決定することを可能にする。示される厳密なオペコードのグループ化は、例示的なものである。一実施形態において、移動およびロジックオペコードグループ742は、データ移動およびロジック命令(例えば、mov、cmp)を含む。移動およびロジックグループ742は、5つの最も重要なビット(MSB)を共有し、移動命令は、0000xxxxb(例えば、0x0x)の形式であり、ロジック命令は、0001xxxxb(例えば、0x01)の形式である。フロー制御命令グループ744(例えば、call、jmp)は、0010xxxxb(例えば、0x20)の形式の複数の命令を含む。その他の命令グループ746は、0011xxxxb(例えば、0x30)の形式の同期命令(例えば、wait、send)を含む、複数の命令のミックスを含む。並列マス命令グループ748は、0100xxxxb(例えば、0x40)の形式のコンポーネント様式の複数の算術命令(例えば、add、mul)を含む。並列マスグループ748は、複数のデータチャネルにわたって並行に複数の算術オペレーションを実行する。ベクトルマスグループ750は、0101xxxxb(例えば、0x50)の形式の複数の算術命令(例えば、dp4)を含む。ベクトルマスグループは、点乗積計算のような算術を複数のベクトルオペランドに実行する。
【0070】
[グラフィックスパイプライン−
図8]
図8は、グラフィックスパイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850、およびレンダリング出力パイプライン870を含むグラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、1または複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1または複数の制御レジスタ(図示せず)へのレジスタ書き込みにより、またはリング相互接続802を介してグラフィックスプロセッサに発行された複数のコマンドにより、制御される。リング相互接続802は、他のグラフィックスプロセッサまたは汎用プロセッサ等の複数の他の処理コンポーネントに、グラフィックスプロセッサを結合する。リング相互接続からの複数のコマンドは、グラフィックスパイプライン820またはメディアパイプライン830の個別のコンポーネントに複数の命令を提供するコマンドストリーマ803により、解釈される。
【0071】
コマンドストリーマ803は、頂点データをメモリから読み取り、コマンドストリーマ803により提供された複数の頂点処理コマンドを実行する、頂点フェッチャ805のコンポーネントのオペレーションを管理する。頂点フェッチャ805は、頂点データを頂点シェーダ807に提供し、頂点シェーダ807は、座標空間変換および複数のライティング(lighting)オペレーションを各頂点に実行する。頂点フェッチャ805および頂点シェーダ807は、スレッドディスパッチャ831を介して複数の実行スレッドを実行ユニット852A、852Bにディスパッチすることにより、複数の頂点処理命令を実行する。
【0072】
一実施形態において、実行ユニット852A、852Bは、グラフィックスおよびメディアオペレーションを実行するための命令セットを有する複数のベクトルプロセッサのアレイである。実行ユニット852A、852Bは、各アレイに固有であるか、または複数のアレイ間で共有される取り付け済みのL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティションにデータおよび命令を含むようにパーティショニングされるシングルキャッシュとして構成され得る。
【0073】
一実施形態において、グラフィックスパイプライン820は、複数の3Dオブジェクトのハードウェア加速テセレーションを実行する複数のテセレーションコンポーネントを含む。プログラミング可能なハルシェーダ811は、複数のテセレーションオペレーションを構成する。プログラミング可能なドメインシェーダ817は、テセレーション出力のバックエンド評価を提供する。テセレータ813は、ハルシェーダ811の指示で動作し、入力としてグラフィックスパイプライン820に提供される粗幾何学モデルに基づいて、詳細な複数の幾何学的オブジェクトのセットを生成する専用ロジックを含む。テセレーションが用いられない場合、テセレーションコンポーネント811、813、817は、バイパスされ得る。
【0074】
完全な複数の幾何学的オブジェクトは、実行ユニット852A、852Bにディスパッチされる1または複数のスレッドを通じてジオメトリシェーダ819により処理され得、またはクリッパ829に直接に進み得る。ジオメトリシェーダは、グラフィックスパイプラインの先行する複数の段階におけるような複数の頂点または頂点のパッチよりはむしろ、複数の幾何学的オブジェクト全体で動作する。テセレーションが無効にされると、ジオメトリシェーダ819は、入力を頂点シェーダ807から受信する。ジオメトリシェーダ819は、複数のテセレーションユニットが無効にされる場合、ジオメトリテセレーションを実行するように、ジオメトリシェーダプログラムによりプログラミング可能である。
【0075】
ラスタライズする前に、頂点データは、クリッパ829により処理される。クリッパ829は、固定関数クリッパ、またはクリッピングおよびジオメトリシェーダ関数を有するプログラミング可能なクリッパのいずれかである。一実施形態において、レンダリング出力パイプライン870におけるラスタライザ873は、複数のピクセルシェーダをディスパッチして、複数の幾何学的オブジェクトをそれらの1ピクセル毎の表現に変換する。一実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック850に含まれる。
【0076】
グラフィックスエンジンは、データおよびメッセージがグラフィックスエンジンの複数の主要コンポーネント間を通ることを可能にする相互接続バス、相互接続ファブリック、またはいくつかの他の相互接続メカニズムを有する。一実施形態において、実行ユニット852A、852Bおよび関連付けられるキャッシュ851、テクスチャおよびメディアサンプラ854、ならびにテクスチャ/サンプラキャッシュ858は、データポート856を介して相互接続し、メモリアクセスを実行し、グラフィックスエンジンの複数のレンダリング出力パイプラインコンポーネントと通信する。一実施形態において、サンプラ854、キャッシュ851、858、および実行ユニット852A、852Bは各々、別個のメモリアクセスパスを有する。
【0077】
一実施形態において、レンダリング出力パイプライン870は、頂点ベースの複数のオブジェクトをそれらの関連付けられるピクセルベースの表現に変換する、ラスタライザおよびデプステストコンポーネント873を含む。一実施形態において、ラスタライザロジックは、固定関数トライアングルおよびラインラスタライズを実行するウィンドウア(windower)/マスカ(masker)ユニットを含む。一実施形態において、関連付けられたレンダリングバッファキャッシュ878およびデプスバッファキャッシュ879も利用可能である。ピクセルオペレーションコンポーネント877は、ピクセルベースの複数のオペレーションをデータに実行するが、いくつかの例において、2Dオペレーション(例えば、ブレンドを用いるビットブロック画像転送)に関連付けられるピクセルオペレーションは、2Dエンジン841により実行され、またはオーバーレイディスプレイ平面を用いるディスプレイコントローラ843により表示時間に代用される。一実施形態において、共有L3キャッシュ875は、全てのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを用いることなくデータの共有を可能にする。
【0078】
グラフィックスプロセッサのメディアパイプライン830は、メディアエンジン837およびビデオフロントエンド834を含む。一実施形態において、ビデオフロントエンド834は、複数のパイプラインコマンドをコマンドストリーマ803から受信する。しかし、一実施形態において、メディアパイプライン830は、別個のコマンドストリーマを含む。ビデオフロントエンド834は、コマンドをメディアエンジン837に送信する前に、複数のメディアコマンドを処理する。一実施形態において、メディアエンジンは、スレッドディスパッチャ831を通じてスレッド実行ロジック850にディスパッチするための複数のスレッドをスポーンする、スレッドスポーン機能を含む。
【0079】
一実施形態において、グラフィックスエンジンは、ディスプレイエンジン840を含む。一実施形態において、ディスプレイエンジン840は、グラフィックスプロセッサの外部にあり、リング相互接続802またはいくつかの他の相互接続バスもしくはファブリックを介してグラフィックスプロセッサと結合する。ディスプレイエンジン840は、2Dエンジン841およびディスプレイコントローラ843を含む。ディスプレイエンジン840は、3Dパイプラインとは独立して動作することができる専用ロジックを含む。ディスプレイコントローラ843は、ディスプレイデバイス(図示せず)と結合する。ディスプレイデバイスは、ラップトップコンピュータにおけるようなシステム統合ディスプレイデバイスまたはディスプレイデバイスコネクタにより取り付けられる外部ディスプレイデバイスであってもよい。
【0080】
グラフィックスパイプライン820およびメディアパイプライン830は、複数のグラフィックスおよびメディアプログラミングインタフェースに基づいて複数のオペレーションを実行するように構成可能であり、いずれか1つのアプリケーションプログラミングインタフェース(API)に固有のものではない。一実施形態において、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックスまたはメディアライブラリに固有のAPI呼び出しを、グラフィックスプロセッサにより処理され得る複数のコマンドに変換する。様々な実施形態において、サポートは、クロノスグループによりサポートされるオープングラフィックスライブラリ(OpenGL)およびオープンコンピューティング言語(OpenCL)、マイクロソフトコーポレーションのDirect3Dライブラリ、または一実施形態においてはOpenGLおよびDirect3Dの両方に提供される。サポートは、オープンソースコンピュータビジョンライブラリ(OpenCV)にも提供され得る。将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインにマッピングが行われ得る場合には、互換性のある3Dパイプラインを用いる将来のAPIも、サポートされるであろう。
【0081】
[グラフィックスパイプラインのプログラミング−
図9A〜
図9B]
図9Aは、一実施形態によるグラフィックスプロセッサコマンドフォーマットを図示するブロック図であり、
図9Bは、一実施形態によるグラフィックスプロセッサコマンドシーケンスを図示するブロック図である。
図9Aにおける実線で囲まれた複数のボックスは、グラフィックスコマンドに一般に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数のグラフィックスコマンドのサブセットのみに含まれる複数のコンポーネントを含む。
図9Aの例示的なグラフィックスプロセッサコマンドフォーマット900は、コマンドのターゲットクライアント902、コマンドオペレーションコード(オペコード)904、およびコマンドのための関連するデータ906を識別する複数のデータフィールドを含む。サブオペコード905およびコマンドサイズ908もいくつかのコマンドに含まれる。
【0082】
クライアント902は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。一実施形態において、グラフィックスプロセッサコマンドパーサは、コマンドの更なる処理を条件付けて、コマンドデータを適切なクライアントユニットにルーティングするべく、各コマンドのクライアントフィールドを検査する。一実施形態において、グラフィックスプロセッサの複数のクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、2Dユニット、3Dユニット、およびメディアユニットを含む。各クライアントユニットは、複数のコマンドを処理する、対応する処理パイプラインを有する。クライアントユニットによりコマンドが受信されると、クライアントユニットは、オペコード904を読み取り、存在する場合には、サブオペコード905は、実行するオペレーションを決定する。クライアントユニットは、コマンドのデータ906のフィールドにおける情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ908は、コマンドのサイズを指定することが予期される。一実施形態において、コマンドパーサは、コマンドオペコードに基づいて複数のコマンドの少なくともいくつかのサイズを自動的に決定する。一実施形態において、複数のコマンドは、ダブルワードの倍数によりアラインされる。
【0083】
図9Bのフロー図は、例示のコマンドシーケンス910を示す。一実施形態において、グラフィックスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェアまたはファームウェアは、複数のグラフィックスオペレーションのセットを設定、実行、および終了するように示されたコマンドシーケンスのバージョンを用いる。例示的目的で例示のコマンドシーケンスが示され、説明されている。しかし、複数の実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。更に、これらのコマンドは、コマンドシーケンスにおける複数のコマンドのバッチとして発行されてもよく、従ってグラフィックスプロセッサは、少なくとも部分的に同時に複数のコマンドのシーケンスを処理する。
【0084】
例示のコマンドシーケンス910は、パイプラインフラッシュコマンド912で開始し、任意のアクティブなグラフィックスパイプラインにパイプライン用の現在保留中の複数のコマンドを完了させ得る。一実施形態において、3Dパイプライン922およびメディアパイプライン924は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに任意の保留中のコマンドを完了させるべく実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサ用のコマンドパーサは、アクティブな複数の描画エンジンが保留中の複数のオペレーションを完了し、関連する複数の読み取りキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択で、「ダーティ」とマークを付けられたレンダリングキャッシュ内の任意のデータは、メモリにフラッシュされ得る。パイプラインフラッシュコマンド912は、パイプライン同期のために、つまりグラフィックスプロセッサを低電力状態にする前に用いられ得る。
【0085】
パイプライン選択コマンド913は、コマンドシーケンスがグラフィックスプロセッサに複数のパイプライン間で明確に切り替えるように要求するときに用いられる。パイプライン選択コマンド913は、コンテキストが両方のパイプラインのためのコマンドを発行しない限り、パイプラインコマンドを発行する前に実行コンテキスト内で1度だけ必要とされる。一実施形態において、パイプラインフラッシュコマンド912は、パイプラインがパイプライン選択コマンド913により切り替えられる直前に必要とされる。
【0086】
パイプライン制御コマンド914は、オペレーションのためのグラフィックスパイプラインを構成し、3Dパイプライン922およびメディアパイプライン924をプログラミングするべく用いられる。パイプライン制御コマンド914は、アクティブなパイプラインのためのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド914は、複数のコマンドのバッチを処理する前に、アクティブなパイプライン内の1または複数のキャッシュメモリからのデータをクリアするべく、パイプライン同期に用いられる。
【0087】
複数のリターンバッファ状態コマンド916は、データを書き込む各パイプライン用の複数のリターンバッファのセットを構成するべく用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む、1または複数のリターンバッファの割り当て、選択、または構成を必要とする。また、グラフィックスプロセッサは、出力データを格納して相互のスレッド通信を実行するべく、1または複数のリターンバッファも用いる。リターンバッファ状態916は、複数のパイプラインオペレーションのセットに用いる複数のリターンバッファのサイズおよび数の選択を含む。
【0088】
コマンドシーケンスにおける残りの複数のコマンドは、複数のオペレーション用のアクティブなパイプラインに基づいて異なる。パイプラインの決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で開始する3Dパイプライン922、またはメディアパイプライン状態940で開始するメディアパイプライン924に対して調整される。
【0089】
3Dパイプライン状態930のための複数のコマンドは、3Dプリミティブコマンドが処理される前に構成される頂点バッファ状態、頂点要素状態、一定な色状態、デプスバッファ状態、および他の状態変数に対する複数の3D状態設定コマンドを含む。これらのコマンドの値は、用いられる特定の3D APIに少なくとも部分的に基づいて決定される。それらの要素が用いられない場合、複数の3Dパイプライン状態930コマンドは、特定のパイプライン要素を選択的に無効またはバイパスすることもできる。
【0090】
3Dプリミティブ932のコマンドは、3Dパイプラインにより処理される複数の3Dプリミティブを送るべく用いられる。3Dプリミティブ932のコマンドによりグラフィックスプロセッサに渡される複数のコマンドおよび関連付けられるパラメータは、グラフィックスパイプラインにおける頂点フェッチ機能に転送される。頂点フェッチ機能は、複数の頂点データ構造体を生成するべく3Dプリミティブ932のコマンドデータを用いる。複数の頂点データ構造体は、1または複数のリターンバッファに格納される。3Dプリミティブ932のコマンドは、複数の頂点シェーダにより複数の3Dプリミティブに頂点オペレーションを実行するべく用いられる。複数の頂点シェーダを処理するべく、3Dパイプライン922は、複数のシェーダ実行スレッドを複数のグラフィックスプロセッサ実行ユニットにディスパッチする。
【0091】
3Dパイプライン922は、実行934のコマンドまたはイベントによりトリガされる。一実施形態において、レジスタ書き込みは、コマンド実行をトリガする。一実施形態において、実行は、コマンドシーケンスにおける「go」または「kick」コマンドによりトリガされる。一実施形態において、パイプライン同期コマンドを用いて、グラフィックスパイプラインを介してコマンドシーケンスをフラッシュするコマンド実行がトリガされる。3Dパイプラインは、複数の3Dプリミティブのためのジオメトリ処理を実行する。複数のオペレーションが完了すると、もたらされる複数の幾何学的オブジェクトがラスタライズされ、ピクセルエンジンは、もたらされるピクセルをカラーリングする。ピクセルシェーディングおよびピクセルバックエンドオペレーションを制御する追加の複数のコマンドもそれらのオペレーションのために含まれ得る。
【0092】
例示のコマンドシーケンス910は、複数のメディアオペレーションを実行する場合、メディアパイプライン924のパスをたどる。一般に、メディアパイプライン924のためのプログラミングの特定の用途および態様は、メディアまたは実行される演算動作に依存する。特定のメディアデコードオペレーションは、メディアデコード中にメディアパイプラインにオフロードされ得る。メディアパイプラインもバイパスされ得、メディアデコードは、1または複数の汎用プロセッシングコアにより提供される複数のリソースを全体的または部分的に用いて実行され得る。一実施形態において、メディアパイプラインは、汎用グラフィックスプロセッサユニット(GPGPU)の動作のための複数の要素も含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明らかに関係しない演算シェーダプログラムを用いてSIMDベクトルオペレーションを実行するべく用いられる。
【0093】
メディアパイプライン924は、3Dパイプライン922と同様に構成される。複数のメディアパイプライン状態コマンド940のセットは、複数のメディアオブジェクトコマンド942の前のコマンド行列にディスパッチされ、または配置される。複数のメディアパイプライン状態コマンド940は、複数のメディアオブジェクトを処理するべく用いられる、複数のメディアパイプライン要素を構成するデータを含む。これは、エンコードまたはデコードフォーマットのようなメディアパイプライン内の動画デコードおよび動画エンコードロジックを構成するデータを含む。複数のメディアパイプライン状態コマンド940は、複数の状態設定のバッチを含む「間接的」状態要素に対する1または複数のポインタの使用もサポートする。
【0094】
複数のメディアオブジェクトコマンド942は、メディアパイプラインにより処理するための複数のメディアオブジェクトに複数のポインタを提供する。複数のメディアオブジェクトは、処理されるべき動画データを含む複数のメモリバッファを含む。一実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発行する前に有効でなければならない。パイプライン状態が構成され、複数のメディアオブジェクトコマンド942が待ち行列に入れられると、メディアパイプライン924は、実行944のコマンドまたは同等の実行イベント(例えばレジスタ書き込み)によりトリガされる。次に、メディアパイプライン924からの出力は、3Dパイプライン922またはメディアパイプライン924により提供される複数のオペレーションにより後処理され得る。一実施形態において、複数のGPGPUオペレーションは、メディアオペレーションと同様に構成され、実行される。
【0095】
[グラフィックスソフトウェアアーキテクチャ−
図10]
図10は、一実施形態によるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを図示する。ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション1010、オペレーティングシステム1020、および少なくとも1つのプロセッサ1030を含む。プロセッサ1030は、グラフィックスプロセッサ1032、および1または複数の汎用プロセッサコア1034を含む。グラフィックスアプリケーション1010およびオペレーティングシステム1020は各々、データ処理システムのシステムメモリ1050において実行される。
【0096】
一実施形態において、3Dグラフィックスアプリケーション1010は、複数のシェーダ命令1012を含む、1または複数のシェーダプログラムを含む。複数のシェーダ言語命令は、高水準シェーダ言語(HLSL)またはOpenGLシェーダ言語(GLSL)のような高水準シェーダ言語によるものであってもよい。アプリケーションは、汎用プロセッサコア1034により実行するのに好適な機械言語による複数の実行可能命令1014も含む。アプリケーションは、頂点データにより定義される複数のグラフィックスオブジェクト1016も含む。
【0097】
オペレーティングシステム1020は、マイクロソフトコーポレーションのマイクロソフトウィンドウズ(登録商標)オペレーティングシステム、プロプライエタリUNIX(登録商標)様式のオペレーティングシステム、またはLinux(登録商標)カーネルの変形を用いるオープンソースUNIX(登録商標)様式のオペレーティングシステムであってもよい。Direct3D APIが用いられる場合、オペレーティングシステム1020は、フロントエンドのシェーダコンパイラ1024を用いて、HLSLの任意のシェーダ命令1012をより低水準のシェーダ言語にコンパイルする。コンパイルは、ジャストインタイムコンパイルであってもよく、またはアプリケーションは、共有プリコンパイルを実行し得る。一実施形態において、複数の高水準シェーダは、3Dグラフィックスアプリケーション1010のコンパイル中により低水準のシェーダへとコンパイルされる。
【0098】
ユーザモードグラフィックスドライバ1026は、複数のシェーダ命令1012をハードウェア固有の表現に変換する、バックエンドのシェーダコンパイラ1027を含んでもよい。OpenGL APIが用いられる場合、GLSL高水準言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックスドライバ1026に渡される。ユーザモードグラフィックスドライバは、カーネルモードグラフィックスドライバ1029と通信するべく、オペレーティングシステムカーネルモード機能1028を用いる。カーネルモードグラフィックスドライバ1029は、複数のコマンドおよび命令をディスパッチするべく、グラフィックスプロセッサ1032と通信する。
【0099】
様々なオペレーションまたは機能が本明細書において説明される限度において、それらはハードウェア回路、ソフトウェアコード、命令、構成、および/またはデータとして説明または定義され得る。コンテンツは、ハードウェアロジックで、または直接に実行可能なソフトウェア(「オブジェクト、または「実行可能な」形式)、ソースコード、グラフィックスエンジン上での実行のために設計された高水準シェーダコード、または特定のプロセッサもしくはグラフィックコア用の命令セットによる低水準アセンブリ言語コードとして実施され得る。本明細書に説明される複数の実施形態におけるソフトウェアコンテンツは、コンテンツが格納された製造物品、または通信インタフェースを介してデータを送信するように通信インタフェースを動作させる方法により提供され得る。
【0100】
非一時的機械可読ストレージ媒体は、機械に、説明される複数の機能またはオペレーションを実行させ得、記録可能/非記録可能媒体(例えば、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス等)のような機械(例えば、コンピューティングデバイス、電子システム等)によりアクセス可能な形態で情報を格納する任意のメカニズムを含む。通信インタフェースは、メモリバスインタフェース、プロセッサバスインタフェース、インターネット接続、ディスクコントローラ等のような別のデバイスに通信するハードワイヤード、無線、光等の媒体のいずれかにインタフェース接続する任意のメカニズムを含む。通信インタフェースは、複数の構成パラメータを提供し、または通信インタフェースを準備して、ソフトウェアコンテンツを記載するデータ信号を提供するべく複数の信号を送信することにより構成される。通信インタフェースは、通信インタフェースに送信される1または複数のコマンドまたは信号によりアクセスされ得る。
【0101】
説明される様々なコンポーネントは、説明される動作または機能を実行するための手段であり得る。本明細書に説明される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。複数のコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア(例えば、特定用途向けハードウェア、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)等)、エンベデッドコントローラ、ハードワイヤード回路等として実装され得る。本明細書において説明されるもの以外に、その範囲を逸脱することなく、本発明において開示される実施形態および実装に対して様々な修正が行われ得る。従って、本明細書における図示および例は、限定的な意味ではなく例示的な意味に解釈されるべきである。本発明の範囲は、以下の特許請求の範囲を参照することのみにより判断されるべきである。
【0102】
フィルタリングされた粗ピクセルシェーディングのための方法および装置
1.概要
後述の本発明の複数の実施形態は、複数のラスタライズベースのグラフィックスパイプラインにおける粗ピクセルシェーディング(CPS)に関係するシェーディングの連続性の問題に対処する。例えば、一致しない複数のテクスチャデリバティブは、詳細のテクスチャレベルにおける突然の変化を引き起こす場合がある。このアーチファクトが、1トライアングル毎の複数のシェーダアトリビュートデリバティブを用いるラスタライズベースの複数のパイプラインに本来的に存在していると判断されたが、それは、画質に著しく影響を及ぼしてはいない。しかし、粗いシェーディングレートにより、この影響は、著しいアーチファクトを生成し得る。
【0103】
この問題に対処するべく、本発明の一実施形態は、ラスタライズの前にメッシュを前処理し、頂点毎に所望の滑らかな頂点アトリビュートのユニークな接平面パラメータ化を生成する。これらの実施形態は、同一のメッシュの同一の頂点を共有する全てのトライアングルが同一のデリバティブを用いることを保証する接平面パラメータ化に基づいて複数の分析シェーダデリバティブを置換する。
【0104】
隣接プリミティブが同一の位置でシェーディングを評価する(および外挿を避ける)ことを保証する複数の技術と組み合わせて用いられる場合に、本発明の複数の実施形態は、極めて粗いシェーディングレート(例えば、4×4または8×8のピクセルブロック)においてさえも、テクスチャリングされた表面が完全に連続して現れることを保証する。これは、滑らかな表面が限定された多角形の数で近似される場合に有用である。
【0105】
簡潔には、本発明の複数の実施形態は、粗ピクセルシェーディング(CPS)の質および/または効率性を改善する以下の複数の技術を含む。
(a)複数の外挿アーチファクトを避け、一致する位置で複数の共有トライアングルエッジを補間する、シェーディング空間の代替的なサンプリングパターンが実装される。
(b)高次フィルタリングロジックは、複数の粗いシェーディングサンプルのための線形(またはより高次の)フィルタリングを実装する。
(c)画像処理における六角グリッドの成功に動機づけられて、直交グリッドに類似するクリッピングおよびフィルタリングソリューションをサポートする六角形の実装が後述される。以下に検討されるように、粗いシェーディングレートにおいては、六角形の実装は、ほとんどの場合によりシャープに見える複数の画像を生成する。
(d)シェーディングは、複数のプリミティブにわたって再利用され、小さいトライアングルサイズで顕著な性能向上をもたらし得る。複数のプリミティブクラスタは、オンチップでカバレッジテストおよび複数のプリミティブのシェーディングアトリビュート補間を効率的にするべく、ラスタライズの前に構築され得る。
【0106】
図11は、本発明の複数の実施形態が使用され得るグラフィックスパイプラインの概要を提供する。本実施形態において、プロセッサコア1100内の実行ロジックは、複数のグラフィックスコマンドおよびジオメトリデータをグラフィックスパイプラインに送信する。(図示される例において)グラフィックスパイプラインは、前処理ステージ1101、頂点シェーダステージ1102、ジオメトリシェーダステージ1103、およびピクセルシェーダステージ1104を含む。
【0107】
以下に詳細に検討されるように、前処理ステージ1101は、頂点毎に複数の近隣トライアングルを収集し、これらのトライアングルにわたって反復し、各頂点に対する複数の線形アトリビュート方程式を実行する等のような複数のオペレーションを実行し得る。
【0108】
簡潔に言えば、頂点シェーダ1102は、座標空間変換およびライティングオペレーションを各頂点に対して実行し得る。例えば、頂点シェーダ1102は、仮想空間における各頂点の3D位置を、2D座標に変換し得、この2D座標で各頂点がスクリーンに現れる。複数の頂点シェーダは、位置、色、およびテクスチャ座標等の複数の特性を操作し得る。一実施形態において、頂点シェーダ1102は、1頂点毎の接平面方程式を設定する等、本発明の複数の実施形態に関係する複数の動作を実行するためのロジック1105aも含む(例えば、以下のスムーズテクスチャデリバティブの節を参照されたい)。
【0109】
ジオメトリシェーダ1103は、頂点シェーダ1102の複数の結果(例えば、場合によって隣接情報を有するプリミティブ)を受信し、点、線、およびトライアングルのような新しい複数のグラフィックスプリミティブを生成する。例えば、複数のトライアングルについて作用する場合、ジオメトリシェーダは、3つの頂点を入力として受信する。次に、ジオメトリシェーダは、ラスタライザ/ピクセルシェーダステージ1104に渡されるゼロまたはそれより多いプリミティブ(例えば、トライアングル)を生成し、次に放射し得る。ジオメトリシェーダの通常の使用は、ポイントスプライトの生成、ジオメトリテセレーションシャドウ、およびシャドウボリュームの浮き出しを含む。ジオメトリシェーダ1103は、補間を用いることなく複数の1頂点毎の接平面方程式をピクセルシェーダに提供する等、本発明の複数の実施形態に関係する複数の動作を実行するためのロジック1105bも含む。
【0110】
ピクセルシェーダステージ1104は、複数のトライアングル(またはジオメトリシェーダにより提供される他のもの)を複数のピクセルブロックを含むフラグメントに分割する。例えば、実装に応じて、複数のフラグメントは、2×2のピクセルブロック、4×4のピクセルブロック、8×8のピクセルブロック等を含み得る。ピクセルシェーダステージ1104は、デプステストも実行し得る。デプステストを合格した複数のフラグメントは、スクリーンに書き込まれ、または(例えば、フレームバッファにおいて)既存の複数のピクセルとブレンドされてもよい。更に、ピクセルシェーダ1104は、複数の動作の中でも特に、複数の頂点接平面に応じて複数の結果を生成することと、重心座標を用いて複数の結果を補間することとを含む、以下に検討される様々な動作を実行するためのロジック1105cを含む。
【0111】
様々な追加の/他のグラフィックスパイプラインステージも用いられてもよい。これらは、本発明の基礎となる原理を不明瞭にすることを避けるために、ここには図示されない。
【0112】
一時的に
図11に戻ると、頂点シェーダ1102、ジオメトリシェーダ1103、およびピクセルシェーダ1104(ならびにパイプラインのその他のコンポーネント)は、複数の実行ユニット1111〜1118を使用して、それらの各機能を実行し得る。具体的には、これらのコンポーネントの各々からの複数のスレッドは、スケジューラ/ディスパッチユニット1106による実行のためにスケジューリングされ、ディスパッチされ得る。複数のグラフィックス命令は、図示されるように、1または複数の実行ポートを介して実行ユニット1111〜1118にディスパッチされ得る。実行が完了すると、リタイアメントユニット1119は、命令をリタイアし、いくつかの場合にライトバックバスを介してスケジューリング/ディスパッチユニットに複数の結果を再度提供する。
【0113】
1または複数のポストピクセルシェーダステージ1120は、ディスプレイデバイスにおけるレンダリングの前に複数のピクセルを更に処理するようにも実装されてもよい。限定ではなく例として、これは、ラスタライザ/ピクセルシェーダにより実行されない最終色選択および他のピクセル処理オペレーションを含み得る。
【0114】
以下の節は、本発明の複数の実施形態による、粗ピクセルシェーディング(CPS)を改善するべく実行される複数の動作の更なる詳細を提供する。しかし、以下に提供される具体的な詳細のうちのいくつかは、本発明の基礎となる原理に準拠するのに必要とされないことに留意されたい。
【0115】
2.外挿を用いない粗いシェーディング
一実施形態において、本節で説明される複数の動作は、ピクセルシェーダステージ1104内のロジック1105cにより実装される。本発明の一実施形態は、1トライアングル毎の複数の平面方程式を用いて、シェーディングのために複数のトライアングルアトリビュートを補間する。マルチサンプルアンチエイリアシング(MSAA)の出現により、シェーディング位置がトライアングルにより実際にはカバーされないことが可能性があり、これは、シェーディング位置が外挿されることを意味する。この外挿は、同一のシェーディング位置を実際にカバーする隣接トライアングルが類似の平面方程式を有するときに、許容できる場合がある。しかし、この場合でないとき、外挿は、表面にわって複数の切れ目を生成するであろう。また、複数のシェーダは、トライアングルによりカバーされない複数のテクスチャ座標を読み取る可能性があり、これによりシルエットにおけるテクスチャリークの問題を生じさせ得る。これらのアーチファクトは一般に、MSAAについては許容できるが、粗いシェーディングピクセルについてはより顕著になる。
【0116】
本検討の第1部においては、シェーディングの再利用は、現行のCPSの解像度に応じて単一のトライアングル内に限定されるものと仮定される。粗いシェーディングサンプルのための線形の(またはより高次の)フィルタリングは、複数のトライアングルのエッジがシェーディング空間においてサンプリングされ、複数の隣接トライアングルが共通エッジにおいて同一のシェーディング位置を用いる場合には、エッジにおいて複数の切れ目なしで機能し得る。これを前提として、この特性を用いるシェーディングパラメータ化が選択される。以下のオプションが考慮されている。
(a)複数の標準グリッドサンプルを複数のトライアングルエッジにスナップする。
(b)複数のトライアングルエッジと一致する複数の標準グリッドセルをクリッピングする。
(c)重心パラメータ化を用いる。
【0117】
図12Aに図示されるように、元のCPSは、スクリーン空間を標準グリッド上にサンプリングする。各セルの中央部は、重心座標から補間される(外挿される場合もある)。次に、シェーディングピクセルの複数のクワッドにおいて、シェーディングが評価される。最終的に、各可視性サンプルは、4つの最近傍シェーディングピクセルを見つけ、バイリニア補間を用いてその色を補間する。
図12Aに示されるように、バイリニア補間は、トライアングルにより直接にカバーされない複数の粗ピクセルのシェーディングを必要とし、外挿の問題(白ピクセルにおける赤いシェーディングサンプル)を増幅する。
【0118】
図12Bに図示されるように、スクリーン空間のシェーディンググリッドにおける複数の外挿アーチファクトを避ける1つの態様は、複数の外部シェーディングサンプルをトライアングルの境界にスナップすることである。このアプローチは、複数のシェーディングサンプルの重心座標を非ネガティブの領域にクランプすることにより実現され得る。しかし、そのようなアプローチは、複数の品質問題を被る。第1に、複数の隣接トライアングルは、同一の位置で自らの共有エッジをサンプリングせず、これにより複数の切れ目をもたらす。第2に、シェーディングサンプルの位置は変更し得るので、複数の可視性サンプルにおいてシェーディングされた色のフィルタリングは、取るに足らないものではない。
【0119】
複数の重心パラメータ化は、ここでは詳細に検討されない。その主な考えは、トライアングル領域におけるシェーディンググリッドを画定することであり、これによりトライアングルエッジ上のサンプル配置を保証する。複数のサンプルは、投影後のスクリーン空間またはオブジェクト空間のいずれかに均一に配置され得る。1つの動機は、メッシュカラーのような設定のないメッシュテクスチャリング法である。この考えに関する1つの主要な問題は、トライアングル領域内部、特に「やせた」トライアングルの場合に実際のシェーディング密度を制御することは取るに足らないものではないことである。
【0120】
図12Cを参照すると、本発明の一実施形態において、複数のシェーディングサンプルは、シェーディンググリッドの複数の頂点にシフトされる。これにより、サンプルの数を変化しない状態にし、もたらされるシェーディングは、完全にカバーされる複数のシェーディングピクセルにおいてCPSと同等である。しかし、一実施形態において、複数のトライアングルの頂点から複数のアトリビュートを直接に補間することに代えて、高速で小さい2Dのクリッピングが、トライアングルに対してシェーディングピクセル毎に実行される。その結果は、部分的にカバーされた複数のシェーディングピクセルであり、カバーされた(有効な)シェーディング範囲は、凸多角形である。この多角形の複数の頂点は、シェーディングセルの複数の側面、または複数のエッジ付近のシェーディング密度を高めるトライアングルの複数の頂点のいずれかにある。しかし、以前にポイントサンプリングが用いられなかった場合、標準的CPSは、トライアングル境界外で追加の複数のシェーディングサンプルも用いたことに留意することが重要である。結果的に、シェーディングサンプルの合計の数は、外挿の場合におけるよりも少なくなる場合さえもあろう。
【0121】
複数のシェーディングサンプルを評価した後、それらは、クリッピングされた各セルに対する凸多角形を形成する(0、または3〜7の頂点)。次に、各可視性サンプルの最終色は、シェーディング多角形の複数の頂点の加重和として演算される。一実施形態において、これらの重みは、一般化された重心座標を用いて決定され、重心座標は、任意の凸多角形にわたって容易に画定され得る(例えば、「Meyerら、2002」において説明されるWachspress座標を参照)。これらの座標は、正常に動作する。シェーディングピクセルが完全にカバーされる場合、座標は、バイリニア加重値に等しく、シェーディング多角形がトライアングルである場合、結果は、通常の重心座標である。
【0122】
2.1 より高次のフィルタリング
一実施形態において、本節で説明される複数の動作は、ピクセルシェーダステージ1104内のロジック1105cにより実行される。粗ピクセルシェーディング(CPS)は、倍率の問題とみなされ得る。トライアングルの表面シェーディングは、ほぼどこでも連続する信号である(可視性が、シルエットおよびハードシャドウのような突然の複数の切れ目を生成する場合を除く)。粗いシェーディンググリッドにおいてこの信号をサンプリングする場合、テクスチャエイリアシングを避けるべく、適切なプリフィルタが適用され得る。最終段階において、粗いシェーディンググリッドは、複数の可視性サンプルの位置でアップサンプリングされ、これは、画像の倍率に類似する。
【0123】
結果的に、倍率のレベルが顕著である場合には、質の複数の結果は、最近傍またはバイリニアフィルタリングのような単純な複数の再構成フィルタから予期することができない。比較として、現在シェーディングされる複数のクワッドの周囲でシェーディングサンプルの1つの追加のリングを用い、バイキュービックスプライン補間を用いる各ピクセルにおいてフィルタリングされた色を評価する、より高次の再構成フィルタが実装される。
【0124】
2.2 六角グリッドにおけるシェーディング
本節で説明される複数の動作は、ピクセルシェーダステージ1104内のロジック1105cにより実行され得る。一実施形態において、粗いシェーディング空間は、通常の直交グリッドに代えて六角グリッドにおいてサンプリングされる。現行の複数のディスプレイがこのパターンでピクセルを配置することを考慮すると、複数の直交グリッドは、フレームバッファを表すのに最も好適であるが、複数の直交グリッドは、良くない効率性で2D平面をサンプリングする。本質的に、CPSは、シェーディングを可視性からデカップリングするので、シェーディンググリッドの異なる表現が用いられ、潜在的には既に紹介されたパイプラインの他の複数の態様を全て変化しない状態にし得る。
【0125】
一実施形態において、粗いシェーディングパイプラインは、六角グリッドにおいてシェーディングするように修正される。六角グリッドは、完全な複数のトライアングルの頂点にシェーディングの頂点を配置することにより構成され得る。
図13に図示されるように、一実施形態において、これは、適切な三角測量を用いて鉛直スケーリングおよび水平シャーリングオペレーションを三角測量された直交グリッド1301に適用して、六角グリッド1302に到達することにより、実現される。もたらされるグリッドの複数のボロノイセルは、四角形に代えて六角形である。この変換は、無理数を用いる拡大縮小を必要とし、これのみが、実際に近似し得ることに留意されたい。他の複数の近似値も用いられ得、これらはランク1のグリッド等、数値的にはより安定している(Dammertzら、2009)。
【0126】
一実施形態において、粗いシェーディング中に、最近傍の3つのシェーディング頂点は、この変換の逆関数を可視性サンプルに適用することにより位置決めされ、直交する粗ピクセルは、以前の実装におけるように位置決めされる。シャーリングされたグリッドにおけるこの粗ピクセルの画像は、平行四辺形である。この平行四辺形のより短い対角線に対する可視性サンプルをテストすることにより、六角グリッドにおける最近傍トライアングルを画定する。
【0127】
本発明の一実施形態は、六角シェーディングの外挿がない変形を実装する。このために、ラスタライズされたトライアングルは、現行の可視性サンプルを含む最近傍シェーディングトライアングルに対してクリッピングされる。もたらされる凸多角形は、一般化された重心補間を用いて直交する粗グリッドと同様に扱われ得る。
【0128】
2.3 六角グリッドにおけるフィルタリング
本節で説明される複数の動作は、ピクセルシェーダステージ1104内のロジック1105cにより実行され得る。本発明の一実施形態において実装されるグリッドの六角形の性質は、最近傍フィルタリング中に現れる。これは、通常のエイリアシングを低減し(ほぼ鉛直の複数の線は、標準グリッドにより、特別の場合としてより良く再構成される)、2D平面のより良いサンプリングを提供する。また、線形フィルタリングは、六角グリッド上に画定され得る。バイリニア補間は、複数の直交する粗ピクセル内で用いられている。重心補間は、ここでは複数のトライアングルの頂点にわたって用いられ得る。残念ながら、線形フィルタリングは、グリッドの複数のトライアングルエッジを露出させる。多くの場合、より密なサンプリングにも関わらず、複数の直線を再現することができないので、直交グリッドの場合におけるよりも最終結果が悪いものとなる。一実施形態において、より高次の再構成フィルタが用いられ得る。
【0129】
上述のバイキュービック再構成フィルタは、この場合に直接に用いるには好適ではないであろう。なぜなら、そのテンソル積(分離可能)表現は、六角グリッドの等方性および12倍の対称性を活用することができない。他方、過去に六角サンプリングデータの再構成のために設計され、成功裏に適用されている1次元Bスプラインによる他の一般化が存在する。複数の六角スプラインは、六角ボロノイセルのインジケータ機能の複数の畳み込みにより得られ、任意の程度の複数の高質フィルタを提供する(Van De Villeら、2004)。3つの指向性ボックススプラインは、六角サンプリングに特に好適な複数のボックススプラインの特別なクラスである(Condat and Van De Ville.2006)。六角スプラインおよびボックススプラインの両方は、六角サンプリングの等方性および対称性の特性を維持する。本発明の一実施形態において、「Condat and Van De Ville [2006]」において説明されるような複数の二次ボックススプラインの効率的な実装が用いられる。
【0130】
バイキュービックフィルタリングを用いる直交サンプリング、および複数の二次ボックススプラインを用いる六角サンプリングとの質の比較は、線形の場合よりも改善された複数の結果を提供する。六角サンプリングにより得られる複数の画像は、一般によりシャープである。これは部分的には、二次ボックススプラインが4次多項式をもたらすが、バイキュービックフィルタは、6次多項式をもたらすからである。再構成フィルタに関係するシェーディングポイントの数は、バイキュービックの場合が16であるのと比較して14である。
【0131】
3.粗いシェーディングのテクスチャフィルタリング
実際のシェーダは、ほぼ常にテクスチャ情報に依存する。テクスチャデータは通常、(サンプリングされた別個の形態で格納され得る)連続した信号であるものと仮定され、信号は、標準グリッド上でシェーディングされるときに、エイリアシングを避けるようにプリフィルタリングされることが必要である。プリフィルタリングは、サンプリング処理後に再構成され得ない複数の周波数を信号から除去するはずである。通常のシェーディング中に、各サンプリング位置は、ピクセル(またはスーパーサンプリングされたアンチエイリアシングを用いるより細かなサブサンプル)を表す。CPSを用いる場合、粗いシェーディンググリッドは、1ピクセル毎の周波数で再度サンプリングされ得、これは、更なる信号処理段階を意味する。複数の実験は、粗いシェーディング解像度を用いる場合に、テクスチャフィルタリングが特別な考慮を必要とすることを示す。興味深いことに、標準的ラスタライズパイプラインのテクスチャフィルタリング実装は、許容できる複数の不完全さから悪影響を受け、一般に通常のラスタライズ中には顕著ではない。しかし、これらの不完全さのうちのいくつかは、粗いシェーディングを用いて容易に明らかになる。
【0132】
3.1 テクスチャフィルタ幅
テクスチャフィルタの寸法は、楕円で密に近似し得るテクスチャ空間におけるシェーディングされたピクセルの推定フットプリントに基づいて選択される(Heckbert 1989)。この楕円の寸法および向きは、x,yスクリーン空間位置に対するu,vテクスチャ座標の部分デリバティブに依存する。Heckbertにより提案された楕円形の加重平均(EWA)アルゴリズムのような高質テクスチャフィルタは、この楕円とアラインされる滑らかな異方性再構成フィルタを用いてテクスチャ信号の畳み込みを演算する。複数のリアルタイムアプリケーションは、テクスチャの複数のLoDレベルを予め演算し、MIPピラミッドに格納することにより、フィルタ領域内のテクセルの数を低減する(Williams 1983)。
【0133】
一実施形態において、テクスチャフィルタリングのハードウェア実装は、テクスチャ空間においてシェーディングされたピクセルの直径に対応するフィルタ幅を選択する。これは、現行のOpenGLおよびDirect3D仕様に存在する設計の決定であり、これにより、よりシャープなテクスチャの外観をもたらすが、実際にはエイリアシングアーチファクトから悪影響を受ける。なぜかを理解するべく、チェッカーボードテクスチャを用いてスクリーン整列されたクワッドをレンダリングすることを考慮する。この場合、黒または白の四角形のサイズは、ピクセルサイズに厳密に一致する。このクワッドの複数のテクセルは、複数のシェーディングピクセルと完全に整列され、サンプリングされる画像は、テクスチャと厳密に一致する。しかし、スクリーンに沿ってシェーディングピクセルの半分だけ変換される場合、ピクセルフットプリント内のフィルタリングは、均一な灰色をもたらす。
【0134】
信号処理の観点からは、標準的ラスタライズパイプラインは、Nyquist周波数の制限に違反するテクスチャフィルタ幅を選択する。理想的には、ピクセルは、(信号をその周波数の少なくとも2倍でサンプリングするべく)その半径1の少なくとも2倍にわたって積分されるべきである。これは、テクスチャのシャープさのための設計の決定であると我々は考える。なぜなら、実際の複数のテクスチャは、以前のチェッカーボードの例における極端な周波数を示さないからである。しかし、粗いシェーディングを用いた実験において、異方性フィルタリングのDirect3Dの解像度を用いる場合には、深刻なテクスチャエイリアシングは、もたらされ得る。これを軽減するべく、本発明の一実施形態は、テクスチャグラジエントを2倍にバイアスすることを実行し、これにより、大抵のエイリアシングを除去するが、より不鮮明なテクスチャ外観をもたらす。
【0135】
3.2 フィルタの重複
たとえ全てのシェーディングサンプルがトライアングル内側に配置されても、テクスチャフィルタは、トライアングルの外側のテクスチャ空間の一部をなおもカバーする。これは、テクスチャフィルタが表面にわたってシェーディングの滑らかさを維持するように補助し得るときに、複数の内部エッジにわたる予期される挙動である。他方、テクスチャフィルタは、テクスチャ空間内のシルエットエッジにおいてテクスチャリークの問題を引き起こし得る。CPSのシェーディングレートの低減は、より大きな複数のテクスチャフィルタ(従ってより高いMIPレベル)を必要とし、これは、全てのテクスチャリークアーチファクトがより著しくなることを意味する。
【0136】
特に、複数のテクスチャアトラスは、これらのアーチファクトから悪影響を受け、その場合、テクスチャの継ぎ目にわたって色のリークを避けることは困難である。これは、粗いシェーディングに依存する将来の複数のパイプラインが、可能な場合にテクスチャアトラスの使用を避けるべきであることを示唆する。Ptexのような設定のない複数のテクスチャフォーマットにおける近年の進展(Burley and Lacewell 2008)およびバインドレステクスチャの導入は、より良い代替形態を提供する。それまで、リークが複数の実際のシェーディングレートで目に見える問題を引き起こさないように、テクスチャアトラスの準備に注意が払われるべきである。
【0137】
3.3 テクスチャデリバティブについての問題
本明細書に説明される外挿を避ける努力の背後にある1つの動機は、複数のプリミティブにわたってシェーディングの連続性を維持することである。通常のラスタライズにおいて、レンダリングパイプラインは、複数のシェーディングクワッドを完成するべく、外挿された複数のアトリビュートのみを用いる。外挿された複数の「ヘルパーピクセル」は、フレームバッファに実際に書き込まれることは決してなく、その主な目的は、テクスチャサンプリングの有限差分を演算することである(唯一の例外は、サンプルレベルシェーダ実行を用いるMSAAである)。しかし、CPSは、そのような複数のピクセルをアクティブに用いて、複数の可視性サンプルの色を再構成する。これは、複数の隣接トライアングルが同一の複数の平面方程式を共有しない場合に、複数のエッジにわたってシェーディングの複数の切れ目を引き起こす。一実施形態において使用されるクリッピングは、シェーディングがエッジにおける同一の位置で評価されることを保証する。複数のシェーディングアトリビュートは、エッジの2つの頂点のみに依存するので、これらは両方のプリミティブに対して一致する。
【0138】
外挿を用いるCPSに対してこのソリューションを評価する場合、シェーディングは、なおも不連続に見え、トライアングルの境界を露出させる場合がある。問題は、補間された複数の頂点アトリビュートのみならず、それらのスクリーン空間デリバティブにも依存するシェーディングの複数のコンポーネントが存在することである。テクスチャサンプリングは、それに対する最善の例であり、ほぼ全ての実際のシェーディングシナリオに存在するので、問題は、より入念に調査された。
【0139】
複数の隣接トライアングルにわたってテクスチャ差分に一致するように、以前に措置が講じられたことはなく、各トライアングルは、別々に設定された。結果として、複数のトライアングルにわたって複数のテクスチャデリバティブにおける小さい差異が存在し、一致しないテクスチャルックアップを生じさせる。ほとんどの場合に、これは1ピクセル毎のシェーディングについては顕著ではないが、シェーディングの解像度の低下により、これは重大な問題となる。その理由は、テクスチャLoD選択が補償を必要とすることである。例えば、シェーディンググリッドの解像度を2分の1に低下させることにより、複数のテクスチャデリバティブは、それに応じて増加する必要がある。複数のテクスチャデリバティブ間の以前の不一致は、同一の因数で乗算される。実際には、もたらされる複数のアーチファクトは、深刻なものになる可能性があり、結果として外挿がないCPSの利点をあまり目立たないものにする可能性がある。
【0140】
以下の分析において、目標は、複数の頂点アトリビュートのみならず、これらの第1のデリバティブが粗いシェーディング位置において一致することを保証する複数の技術を特定することである。分析は、複数のテクスチャデリバティブに限定され、これらのデリバティブが分析的に評価され得ることが想定される。より一般的なソリューションは、複数のテクスチャアトリビュートを、これらの有限差分が一致するように補間することである。しかし、これははるかに困難であり、更には表面の外観を変化させるであろう(テクスチャ座標がシフトするであろう)。第1に、テクスチャデリバティブ問題の正式な定義が提供される。次に、滑らかな表面で機能するソリューションの一実施形態が導入される。
【0141】
図14に図示される2つの隣接トライアングルのAおよびBを考慮する。テクスチャ座標の1つの成分uは、4つの異なる頂点u
0、u
1、u
2、およびu
3において画定されるスカラアトリビュートである。ラスタライズ中に、これらの頂点は、スクリーン空間に投影され、uはスクリーンにわたってパースペクティブ補正により補間される。値1/wおよびu/wは、線形補間される。wは、同次座標である。両方のトライアングルに対して、これらの補間は、2次元平面方程式を解くことにより実行され得る。
【数1】
次に、uは、以下の有理式を解くことによりパースペクティブ補正により補間され得る。
【数2】
【0142】
2つの平面方程式のペアは、共有エッジにおいて互いに「交差」し、エッジに沿って同一の頂点アトリビュートをもたらす。しかし、複数のアトリビュートデリバティブは、他の2つの頂点にも依存する。例えば、部分デリバティブdu/dxは、次式として記述され得る。
【数3】
【0143】
分析的なデリバティブの詳細な導出は、「Munkberg and Clarberg 2010」に見られ得る。2つのトライアングルについて評価される複数のデリバティブは、一般的な場合に一致しないことは、容易に分かる。
【数4】
【0144】
3.4 スムーズテクスチャデリバティブ
滑らかな表面に関するこの問題を解決するべく用いられる本発明の一実施形態は、これらのトライアングルがレンダリング表面における専ら粗くて区分的な線形の近似であるという事実により動機付けられている。従って、「フラットな」複数のテクスチャデリバティブは、滑らかな表面の複数のデリバティブで置換され得る。そのような複数のデリバティブは、頂点またはエッジに突然の複数の切れ目を有しない。通常、シェーディングは、トライアングル法線を1頂点毎のシェーディング法線で置換し、1頂点毎のシェーディング法線は次に、トライアングルにわたって補間され、テセレートされた表面の滑らかなライティングをもたらす。同様のことが複数のテクスチャデリバティブについて行われてもよい。
【0145】
上記の複数の方程式を再び参照すると、頂点毎に、複数の平面方程式が当該頂点を含む各トライアングルに対して設定され、所与のスクリーン空間位置について解かれてもよい。次に、頂点における複数のテクスチャデリバティブは、解の平均であり得、トライアングル内で1頂点毎の複数のデリバティブは、重心座標を用いて補間され得る。この技術は、トライアングルにわたって連続したシェーディングを保証する。他方、平面方程式の数は、頂点価数と共に線形的に増加し、そのようなソリューションは、ラスタライズパイプラインにおいて明らかに実際的ではない(複数の平面方程式は平均できないことを想起することが重要である。なぜなら、有理多項式の分子および分母を平均することを意味するからである)。これに代えて、複数の1頂点毎の接平面に基づく本発明の一実施形態において、異なるアプローチが使用される。
【0146】
第1に、単一のトライアングルが滑らかな表面を表すと仮定する。このトライアングルの各頂点は、トライアングルと必ずしも同一平面でない自身の接平面を画定する。このトライアングルのラスタライズ中に、複数のテクスチャデリバティブは、滑らかな表面により良く近似するように置換され得る。頂点vの近傍において、複数のデリバティブは、トライアングルが
【数5】
付近の接平面スパンにあるのと同様に演算される(
図15の左側を参照)。具体的には、
図15の左側の部分で、所与の頂点の接平面に存在するトライアングル1501を用いて、複数のテクスチャデリバティブが頂点1500において演算される。この接平面における各地点は、2つのスカラ
【数6】
を用いてパラメータ化され得る。
【数7】
【0147】
トライアングルの他の2つの頂点は、同一の接平面に投影され得、それらのtとbのパラメータを用いて、線形方程式は、頂点アトリビュート毎に設定され得る。
【数8】
【0148】
この考えは、重心座標の補間に類似する1/w、t/w、およびb/wスクリーン空間に対する線形平面方程式を有するものである。例えば、以下の式は、各頂点の接平面について解かれ得る。
【数9】
【0149】
これから、頂点接平面における複数の修正されたテクスチャデリバティブが決定され得る。
【数10】
【0150】
トライアングル内側の任意の地点において、複数のテクスチャデリバティブは、3つの頂点の平面方程式を別々に用いて決定され得る。次に、これらは、重心座標を用いて補間される。この技術は、複数の接平面の1頂点毎の更に3つの平面方程式(t/w、b/w、1/w)と、各アトリビュートに対する1つの平面方程式とを必要とする。
【0151】
本実施形態において、ユニークなパラメータ化は、同一の頂点を含む全てのトライアングルにより共有され得る頂点毎に導入されていることに留意されたい。この技術は、単純な前処理段階を用いて、複数のトライアングルのネットワークを介して滑らかな複数のデリバティブに拡張され得る。ラスタライズの前に、イテレーションが全頂点にわたって実行され得、各近隣トライアングルは、その接平面の基底に投影される。各頂点アトリビュートに対して、これは、1トライアングル毎の線形平面方程式をもたらす。
図15の右部分において、例えば、「平均的な」頂点アトリビュート方程式が全ての近隣トライアングルを同一の接平面に投影し、接平面および従法線を新しい基底として用いることにより派生し得る。これらの方程式は線形であるので、頂点
【数11】
の近隣におけるアトリビュートの挙動に近似する平均的な平面方程式が決定され得る。
【数12】
【0152】
本発明の一実施形態による方法が
図16に図示される。本方法は、上記の具体的な詳細およびアーキテクチャに従って実装され得るが、これらの具体的な詳細のうちのいくつかに限定されない。
【0153】
図示されるように、本方法は、前処理オペレーション1601〜1603のセットおよびラスタライズオペレーション1604〜1606のセットを含む。まず、前処理オペレーションを参照すると、1601において、頂点毎に複数の近隣トライアングルが収集される。1602において、本方法は、(例えば、上述の実施形態において)近隣の複数のトライアングルにわたって反復し、これらを複数の接平面に投影する。1603において、上記の例の各頂点(例えば、
【数13】
)について複数の線形アトリビュート方程式が設定され、平均される。一実施形態において、前処理オペレーションは、
図11に図示されるグラフィックスパイプラインの前処理ステージ1101において実行される。
【0154】
本方法のラスタライズ部分を参照すると、1604において、頂点シェーダ1102におけるロジック1105aは、複数の平面方程式(例えば、t
i/w、b
i/w、1/wに対する平面方程式)を設定する。1605において、ジオメトリシェーダ1103内のロジック1105bは、補間を用いることなく複数の1頂点毎の平面方程式をピクセルシェーダ1104に対して可視化する。1606において、ピクセルシェーダ1104内のロジック1105cは、3つの頂点接平面に基づいて修正されたテクスチャデリバティブを決定し、重心座標を用いて複数の結果を補間する。例えば、一実施形態において、ピクセルシェーダは、次式を解く。
【数14】
【0155】
3.4.1 シルエット
上記の近似は、1頂点毎の接平面が後ろ向きになる場合には機能しない場合があり、これは、複数のシルエットエッジ付近で発生する。前処理段階は、そのような複数の接平面を除去するように修正されてもよく、元の1トライアングル毎のデリバティブ演算が用いられてもよい。
【0156】
前処理段階のビューに依存した変形が実装されている。このアプローチの1つの短所は、各フレームをレンダリングする前に前処理が行われる必要があることである。この考えは、向きに基づいて複数の近隣トライアングルの影響を重み付けするものである。トライアングルが(例えば、1頂点毎のビュー方向に対する法線をテストすることにより)シルエットに近づくにつれて、より小さい係数で接平面および線形アトリビュート方程式の両方の演算に影響を与えるはずである。この方法は、複数の接平面が決して後ろ向きにならないことを保証する。
【0157】
上記の前処理のコストが非常に高くなる場合、類似の1頂点毎のブレンドがスムーズテクスチャデリバティブと元のトライアングルのデリバティブとの間で用いられ得る。接平面がシルエットに近づくにつれて、複数のデリバティブは、元のものに復帰する。これは、シルエット上で、テクスチャの滑らかさが保証され得ないことを意味する。
【0158】
3.4.2 エイリアシング
上記の複数の技術は、連続したテクスチャデリバティブを保証するが、改善は、エイリアシングに対して行われ得る。これらの技術は、複数のデリバティブが元の不連続なバージョンより小さくなることが決してないことを保証するように修正され得る。
【0159】
4.クラスタ化されたCPS
複合シーンをレンダリングする場合、ラスタライズパイプラインは通常、結果的にフレームバッファの解像度よりも著しく多いピクセルシェーダを実行する。理想的には、複数の演算リソースは、可視の複数のフラグメントのみのために費やされるべきである。上記の任意のピクセルシェーダは、冗長とみなされる。シェーディングの冗長性の主な理由は、以下の通りである。
‐デプスの複雑さ
‐複数のプリミティブによりシェーディングされる部分的にカバーされる複数のピクセル、および
‐シェーディングのクワッドベースのスケジューリング
【0160】
CPSのいくつかの実施形態は、シェーディングコストを著しく低減することを意図するが、上記の複数の要因は、密にテセレートされた複合ジオメトリに関して効率性を限界する。ハードウェアがシェーダ実行をスケジューリングする態様が、特に重要である。テクスチャLoD選択に対する複数の有限差分を演算するべく、複数のピクセルシェーダは、2×2のクワッドとして実行され得る。従って、多くの場合、現行のプリミティブにより実際にはカバーされない複数のピクセルが同様にシェーディングされる必要があることが生じる。この冗長性のオーバヘッドは、複数のラスタライズされたプリミティブのサイズが小さくなるにつれて大きくなる。Fatahalianらは、マイクロ多角形レンダラに関するこの影響の完全な研究を実施した(Fatahalianら、2009)(Fatahalianら、2010)。CPSの問題は、複数のシェーディングピクセルのサイズを大きくすることにより、いくつかのテセレートされたワークロードがマイクロ多角形シェーディングに類似するオーバヘッドを生成するというものである。部分的にカバーされるシェーディングクワッドおよびカバーされないシェーディングクワッドの数は、フィルタリングが用いられると、更に増加する。この問題は、クラスタ化されたプリミティブシェーディングを用いる一実施形態において対処されている。
【0161】
レンダリング中に複数のプリミティブにわたってシェーディングを再利用することが、主要な動機である。ラスタライズにより用いられるスクリーン空間座標は、共有パラメータ化を既に提供している。連続した表面に属する複数のプリミティブのみが、識別される必要がある。(1)複数の同一の頂点アトリビュートとエッジを共有し、(2)同一の向きを有する複数のプリミティブにわたって同一のCPSグリッドを再利用するラスタライズステージの前に、クラスタ化オペレーションが実行される。基本的原理は、Fatahalianら(2010)により説明されるクワッドフラグメント結合に非常に類似する。彼らのパイプラインは、特にマイクロ多角形グリッド用に設計され、ダイシングステージは、頂点インデックス化により隣接情報を暗に提供し得るが、複数のクラスタは、任意のワークロードから推測で構築され得る。この目的のために、Nの最後のアセンブル済みプリミティブを保持し、複数の共有エッジを検索し得る小さいプリミティブバッファが規定される。ピクセルシェーダの観点から、それらのエッジが区別されることができない場合、2つのプリミティブは、同一のクラスタに属する(例えば、ピクセルシェーダ入力宣言内に存在する頂点アトリビュートは、同一である)。小さい複数のタイル(少なくとも2×2の粗ピクセル)において複数のCPSクワッドを評価するシェーディングアーキテクチャが想定されている。次の段階として、階層的ラスタライズアルゴリズムは、シェーディングの前にCPSクワッド毎に同一のクラスタ内の全てのトライアングルを処理するように修正される。このようにして、CPSクワッド内の全てのトライアングルのカバレッジは、完全に評価され、複数のシェーディングアトリビュートは、任意の位置で補間され得る。これは、CPSへのクワッドフラグメント結合の概念を拡張することを試みつつ、複数のポッピングアーチファクトを低減する我々の新規なアトリビュート補間方法を導く。カバーされるサンプル毎に、フラグメント結合方法のトリビアル拡張は、粗ピクセルの中央部をカバーするクラスタにおけるトライアングルを見つけるであろう。粗ピクセルの中央部がいずれのトライアングルによってもカバーされない場合(部分的にカバーされるクワッドにおいて容易に発生し得る)、標準的な方法は、代表的なトライアングルを他の複数の粗ピクセルから選択し得る(Fatahalianら、2010)。これは、顕著な複数のポッピングアーチファクトをもたらし得る。異なるトライアングルが次のフレームにおいて粗いサンプルの位置をカバーすると、突然、複数の粗ピクセル内の全てのサンプルは、異なるトライアングルを外挿する。
【0162】
本発明の一実施形態は、複数のCPSサンプルを実際にカバーする複数のトライアングルのみならず、粗ピクセル内にカバレッジを有するクラスタ内の全てのトライアングルを考慮する。クラスタ化することなく、各トライアングルは、同一のシェーディング位置で外挿され、次に、カバーされる複数の可視性サンプルにおいてシェーディングされた色を分配する。ここで、シェーディングは、粗い各ピクセルにおいて丁度1回演算され、従って、単一のトライアングルを用いて全ての可視性サンプルをシェーディングすることに代えて、CPS位置において外挿される複数の頂点アトリビュートの加重平均が演算され得る。複数の重みは、所与のトライアングルが粗ピクセル内でカバーする複数の可視性サンプルに比例する。クラスタが同一の複数のトライアングルを保持し、それらのカバレッジが連続して変化する限り、この補間方法は、連続して変化する複数の頂点アトリビュートをもたらす。
【0163】
本方法は、複数の粗ピクセル内の頂点アトリビュートについて実行された「MSAA resolve」とみなされ得る。シェーダが複数のシェーダアトリビュートのほぼ線形の関数である場合、これらの技術は、複数のシェーダ出力(シェーディング後の複数の粗ピクセルに対するMSAA resolve)の平均化に密に合致することに留意されたい。
【0164】
クラスタ化されたCPSは、ラスティ機能パイプラインシミュレータ内に実装されている。この実装は、クラスタ化の基本的な考えのみに焦点を当てており、本方法によりもたらされる一時的な複数のアーチファクトに対処しない。
【0165】
本発明の複数の実施形態は、上記された様々な段階を含み得る。複数の段階は、汎用または専用プロセッサに複数の段階を実行させるべく用いられ得る複数の機械実行可能命令で実施され得る。あるいは、これらの段階は、複数の段階を実行するためのハードワイヤードロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行され得る。
【0166】
本明細書において説明されるように、複数の命令は、特定の複数のオペレーションを実行するよう構成され、または予め定められた機能または非一時的コンピュータ可読媒体で実施されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路(ASIC)等のハードウェアの特定の構成を指し得る。従って、図に示される複数の技術は、1または複数の電子デバイス(例えば、終端局およびネットワーク要素等)上に格納され、実行されるコードおよびデータを用いて実装され得る。そのような電子デバイスは、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)および一時的コンピュータ機械可読通信媒体(例えば、搬送波、赤外線信号、デジタル信号等の伝搬信号の電気、光、音響、又は他の形態)等、コンピュータ機械可読媒体を用いてコードおよびデータを格納し、(内部で、および/またはネットワークを介して他の電子デバイスと)通信する。更に、そのような電子デバイスは通常、1もしくは複数のストレージデバイス(非一時的機械可読記憶媒体)、ユーザ入出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、ならびにネットワーク接続等、1もしくは複数の他のコンポーネントに結合された1もしくは複数のプロセッサのセットを含む。複数のプロセッサおよび複数の他のコンポーネントのセットの結合は通常、1または複数のバスおよびブリッジ(バスコントローラとも呼ばれる)を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、各々、1または複数の機械可読記憶媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの1または複数のプロセッサのセット上で実行するためのコードおよび/またはデータを格納する。勿論、本発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる組み合わせを用いて実装され得る。この詳細な説明を通じて、説明の目的のために、多くの具体的な詳細が、本発明の完全な理解を提供するべく記載された。しかし、当業者には、本発明がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。