以下の説明において、説明の目的のために、後述される本発明の複数の実施形態の完全な理解を提供するべく、様々な具体的詳細が記載される。しかし、当業者には、本発明の複数の実施形態がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。本発明の複数の実施形態の基礎となる原理を不明瞭にするのを避けるべく、複数の他の例において、周知の複数の構造およびデバイスがブロック図の形態で示される。
例示的なグラフィックスプロセッサアーキテクチャおよびデータタイプ
[概要−図1〜3]
図1は、実施形態による、データ処理システム100のブロック図である。データ処理システム100は、1または複数のプロセッサ102と、1または複数のグラフィックスプロセッサ108とを含み、多数のプロセッサ102またはプロセッサコア107を有するシングルプロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、またはサーバシステムであってもよい。一実施形態において、データ処理システム100は、モバイル、ハンドヘルド型、またはエンベデッドデバイスにおいて用いるためのシステムオンチップ集積回路(SOC)である。
データ処理システム100の実施形態は、ゲームおよびメディアコンソール、モバイルゲームコンソール、ハンドヘルド型ゲームコンソール、またはオンラインゲームコンソールを含む、サーバベースのゲームプラットフォームまたはゲームコンソールを含み、またはこれらの内部に組み込まれ得る。一実施形態において、データ処理システム100は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、またはモバイルインターネットデバイスである。また、データ処理システム100は、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、またはバーチャルリアリティデバイス等のウェアラブルデバイスも含み、これらと結合し、またはこれらの内部に統合され得る。一実施形態において、データ処理システム100は、1または複数のプロセッサ102と、1または複数のグラフィックスプロセッサ108により生成されるグラフィカルインタフェースとを有するテレビまたはセットトップボックスデバイスである。
データ処理システム100の実施形態は、ゲームおよびメディアコンソール、モバイルゲームコンソール、ハンドヘルド型ゲームコンソール、またはオンラインゲームコンソールを含む、サーバベースのゲームプラットフォーム、ゲームコンソールを含み、またはこれらの内部に組み込まれ得る。一実施形態において、データ処理システム100は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、またはモバイルインターネットデバイスである。また、データ処理システム100は、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、またはバーチャルリアリティデバイス等のウェアラブルデバイスも含み、これらと結合し、またはこれらの内部に統合され得る。一実施形態において、データ処理システム100は、1または複数のプロセッサ102と、1または複数のグラフィックスプロセッサ108により生成されるグラフィカルインタフェースとを有するテレビまたはセットトップボックスデバイスである。
1または複数のプロセッサ102は各々、実行されると、システムおよびユーザソフトウェアのための複数のオペレーションを実行する複数の命令を処理する、1または複数のプロセッサコア107を含む。一実施形態において、1または複数のプロセッサコア107の各々は、特定の命令セット109を処理するように構成される。命令セット109は、複合命令セット演算(CISC)、縮小命令セット演算(RISC)、または超長命令語(VLIW)による演算を容易にし得る。複数のプロセッサコア107は各々、複数の他の命令セットのエミュレーションを容易にする複数の命令を含み得る、異なる命令セット109を処理し得る。プロセッサコア107は、デジタル信号プロセッサ(DSP)等の複数の他のプロセッシングデバイスも含み得る。
一実施形態において、プロセッサ102は、キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。一実施形態において、キャッシュメモリは、プロセッサ102の様々なコンポーネント間で共有される。一実施形態において、プロセッサ102は、既知の複数のキャッシュコヒーレンシ技術を用いる複数のプロセッサコア107間で共有され得る外部キャッシュ(例えば、レベル3(L3)キャッシュまたはラストレベルキャッシュ(LLC))(図示せず)も用いる。更に、レジスタファイル106は、複数の異なるタイプのデータを格納する複数の異なるタイプのレジスタ(例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ)を含み得る、プロセッサ102内に含まれる。いくつかのレジスタは、汎用レジスタであり得るが、他のレジスタは、プロセッサ102の設計に固有であってもよい。
プロセッサ102は、システム100におけるプロセッサ102と複数の他のコンポーネントとの間で複数のデータ信号を送信するべく、プロセッサバス110と結合される。システム100は、メモリコントローラハブ116および入出力(I/O)コントローラハブ130を含む、例示的な「ハブ」システムアーキテクチャを用いる。メモリコントローラハブ116は、システム100のメモリデバイスと複数の他のコンポーネントとの間の通信を容易にするが、I/Oコントローラハブ(ICH)130は、ローカルI/Oバスを介してI/Oデバイスへの複数の接続を提供する。
メモリデバイス120は、処理メモリとして機能する好適な性能を有する、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、またはいくつかの他のメモリデバイスであり得る。メモリ120は、プロセッサ102が処理を実行するときに用いられるデータ122および複数の命令121を格納し得る。メモリコントローラハブ116は、任意選択の外部グラフィックスプロセッサ112にも結合し、任意選択の外部グラフィックスプロセッサ112は、グラフィックスおよびメディアオペレーションを実行するべく、プロセッサ102において1または複数のグラフィックスプロセッサ108と通信し得る。
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と結合する。
図2は、1または複数のプロセッサコア202A〜N、統合メモリコントローラ214、および統合グラフィックスプロセッサ208を有するプロセッサ200の実施形態のブロック図である。プロセッサ200は、破線ボックスにより表される追加のコア202Nまでの複数の追加のコアを含み得る。コア202A〜Nの各々は、1または複数の内部キャッシュユニット204A〜Nを含む。一実施形態において、各コアは、1または複数の共有キャッシュユニット206へのアクセスも有する。
内部キャッシュユニット204A〜N、および共有キャッシュユニット206は、プロセッサ200内におけるキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも1つのレベルの複数の命令およびデータキャッシュ、ならびにレベル2(L2)、レベル3(L3)、レベル4(L4)、または複数の他のレベルのキャッシュのような1または複数のレベルの中間レベルの共有キャッシュを含み得、外部メモリの前の最高レベルのキャッシュは、ラストレベルキャッシュ(LLC)として分類される。一実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット206および204A〜N間のコヒーレンシを維持する。
プロセッサ200は、1または複数のバスコントローラユニット216およびシステムエージェント210のセットも含み得る。1または複数のバスコントローラユニットは、1または複数の周辺構成要素相互接続バス(例えば、PCI、PCIエクスプレス)のような複数の周辺機器バスのセットを管理する。システムエージェント210は、様々なプロセッサコンポーネントのための管理機能を提供する。一実施形態において、システムエージェント210は、様々な外部メモリデバイス(図示せず)へのアクセスを管理するべく、1または複数の統合メモリコントローラ214を含む。
一実施形態において、コア202A〜Nのうちの1または複数は、同時のマルチスレッディングのためのサポートを含む。そのような実施形態において、システムエージェント210は、マルチスレッド処理中にコア202A〜Nを調整および動作させるための複数のコンポーネントを含む。更に、システムエージェント210は、電力制御ユニット(PCU)を含み得、電力制御ユニットは、コア202A〜Nおよびグラフィックスプロセッサ208の電力状態を調整するロジックおよび複数のコンポーネントを含む。
更に、プロセッサ200は、複数のグラフィックス処理オペレーションを実行するグラフィックスプロセッサ208を含む。一実施形態において、グラフィックスプロセッサ208は、共有キャッシュユニット206、および1または複数の統合メモリコントローラ214を含むシステムエージェントユニット210のセットと結合する。一実施形態において、ディスプレイコントローラ211は、1または複数の結合されたディスプレイへのグラフィックスプロセッサの出力を駆動するべく、グラフィックスプロセッサ208と結合される。ディスプレイコントローラ211は、少なくとも1つの相互接続を介してグラフィックスプロセッサと結合された別個のモジュールであってもよく、またはグラフィックスプロセッサ208もしくはシステムエージェント210内に統合されてもよい。
一実施形態において、リングベースの相互接続ユニット212は、プロセッサ200の複数の内部コンポーネントを結合するべく用いられる。しかし、当技術分野において周知の複数の技術を含む、ポイントツーポイント相互接続、スイッチ相互接続、または他の複数の技術等、代替的な相互接続ユニットが用いられてもよい。一実施形態において、グラフィックスプロセッサ208は、I/Oリンク213を介してリング相互接続212と結合する。
例示的なI/Oリンク213は、様々なプロセッサコンポーネントとeDRAMモジュールのような高性能エンベデッドメモリモジュール218との間の通信を容易にするパッケージI/O相互接続を含む、複数の様々なI/O相互接続のうちの少なくとも1つを表す。一実施形態において、コア202〜Nおよびグラフィックスプロセッサ208の各々は、共有ラストレベルキャッシュとしてエンベデッドメモリモジュール218を用いる。
一実施形態において、コア202A〜Nは、同一の命令セットアーキテクチャを実行する同種のコアである。別の実施形態において、コア202A〜Nは、命令セットアーキテクチャ(ISA)の観点からは異種であり、コア202A〜Nのうちの1または複数は、第1の命令セットを実行するが、複数の他のコアのうちの少なくとも1つは、第1の命令セットまたは異なる命令セットのサブセットを実行する。
プロセッサ200は、いくつかの処理技術、例えば、相補型金属酸化膜半導体(CMOS)、バイポーラ接合/相補型金属酸化膜半導体(BiCMOS)またはN型金属酸化膜半導体ロジック(NMOS)のいずれかを用いる、1または複数の基板の一部であるか、またはこれらの上に実装され得る。更に、プロセッサ200は、複数の他のコンポーネントに加えて、1または複数のチップ上に実装され、または図示される複数のコンポーネントを有するシステムオンチップ(SOC)集積回路として実装され得る。
図3は、ディスクリートグラフィックス処理ユニットであり得るか、または複数のプロセッシングコアと統合されたグラフィックスプロセッサであり得る、グラフィックスプロセッサ300の一実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上の複数のレジスタにメモリマッピングされたI/Oインタフェースと、プロセッサメモリ内に置かれる複数のコマンドにより通信される。グラフィックスプロセッサ300は、メモリにアクセスするためのメモリインタフェース314を含む。メモリインタフェース314は、ローカルメモリ、1または複数の内部キャッシュ、1または複数の共有外部キャッシュ、および/またはシステムメモリへのインタフェースであり得る。
グラフィックスプロセッサ300は、ディスプレイ出力データをディスプレイデバイス320に駆動するディスプレイコントローラ302も含む。ディスプレイコントローラ302は、ディスプレイ用の1または複数のオーバーレイ平面のためのハードウェアと、動画またはユーザインタフェース要素の複数の層の構成物とを含む。一実施形態において、グラフィックスプロセッサ300は、MPEG2のようなムービングピクチャエクスパーツグループ(MPEG)フォーマット、H.264/MPEG4 AVCのようなアドバンスドビデオコーディング(AVC)フォーマット、および米国映画テレビ技術者協会(SMPTE)421M/VC−1、ならびにジョイントフォトグラフィックエクスパーツグループ(JPEG)、およびモーションJPEG(MJPEG)フォーマットのようなJPEGフォーマットを含むがこれらに限定されない、1または複数のメディアエンコードフォーマットへ、これらから、またはこれらの間でメディアをエンコード、デコード、またはトランスコードするビデオコーデックエンジン306を含む。
一実施形態において、グラフィックスプロセッサ300は、例えば、ビット境界ブロック転送を含む、複数の2次元(2D)ラスタライザオペレーションを実行するブロック画像転送(BLIT)エンジン304を含む。しかし、一実施形態において、複数の2Dグラフィックスオペレーションは、グラフィックス処理エンジン(GPE)310の1または複数のコンポーネントを用いて実行される。グラフィックス処理エンジン310は、複数の3次元(3D)グラフィックスオペレーションおよびメディアオペレーションを含む、グラフィックスオペレーションを実行するための演算エンジンである。
GPE310は、3Dプリミティブ図形(例えば、矩形、トライアングル等)に対して機能する複数の処理機能を用いて、複数の3次元画像およびシーンをレンダリングするなど、複数の3Dオペレーションを実行するための3Dパイプライン312を含む。3Dパイプライン312は、要素内の様々なタスクを実行し、および/または3D/メディアサブシステム315に複数の実行スレッドをスポーン(spawn)するプログラミング可能な複数の固定関数要素を含む。3Dパイプライン312は、複数のメディアオペレーションを実行するべく用いられ得るが、GPE310の実施形態は、具体的には、動画の後処理および画像強調等の複数のメディアオペレーションを実行するべく用いられるメディアパイプライン316も含む。
一実施形態において、メディアパイプライン316は、ビデオコーデックエンジン306の代替に、またはこれの代わりに動画デコードの加速、動画のインターレース解除、および動画エンコードの加速等、1または複数の専用メディアオペレーションを実行する、固定関数またはプログラミング可能なロジックユニットを含む。一実施形態において、メディアパイプライン316は更に、3D/メディアサブシステム315において実行するための複数のスレッドをスポーンする、スレッドスポーンユニットを含む。スポーンされた複数のスレッドは、3D/メディアサブシステムに含まれる1または複数のグラフィックス実行ユニット上で複数のメディアオペレーションのための演算を実行する。
3D/メディアサブシステム315は、3Dパイプライン312およびメディアパイプライン316によりスポーンされた複数のスレッドを実行するためのロジックを含む。一実施形態において、複数のパイプラインは、複数のスレッド実行要求を3D/メディアサブシステム315に送信する。3D/メディアサブシステム315は、利用可能な複数のスレッド実行リソースに対する様々な要求を調整およびディスパッチするためのスレッドディスパッチロジックを含む。複数の実行リソースは、3Dおよびメディアスレッドを処理する複数のグラフィックス実行ユニットのアレイを含む。一実施形態において、3D/メディアサブシステム315は、複数のスレッド命令およびデータのための1または複数の内部キャッシュを含む。一実施形態において、サブシステムは、複数のスレッド間のデータを共有し、出力データを格納する複数のレジスタおよびアドレス指定可能メモリを含む、共有メモリも含む。
[3D/メディア処理−図4]
図4は、グラフィックスプロセッサ用のグラフィックス処理エンジン410の実施形態のブロック図である。一実施形態において、グラフィックス処理エンジン(GPE)410は、図3に示されるGPE310の1つのバージョンである。GPE410は、3Dパイプライン412およびメディアパイプライン416を含み、その各々は、図3の3Dパイプライン312およびメディアパイプライン316の実装と異なるか、またはこれに類似するかのいずれかであり得る。
一実施形態において、GPE410は、コマンドストリーマ403と結合し、コマンドストリーマ403は、コマンドストリームをGPE3Dパイプライン412およびメディアパイプライン416に提供する。コマンドストリーマ403は、システムメモリ、または内部キャッシュメモリおよび共有キャッシュメモリのうちの1または複数であり得るメモリと結合される。コマンドストリーマ403は、メモリから複数のコマンドを受信し、これらのコマンドを3Dパイプライン412および/またはメディアパイプライン416に送信する。3Dパイプラインおよびメディアパイプラインは、各パイプライン内のロジックによる複数のオペレーションを実行し、または1または複数の実行スレッドを実行ユニットアレイ414にディスパッチすることにより、複数のコマンドを処理する。一実施形態において、実行ユニットアレイ414はスケーラブルであり、その結果、アレイは、GPE410のターゲット電力および性能レベルに基づいて変わり得る数の実行ユニットを含む。
サンプリングエンジン430は、メモリ(例えば、キャッシュメモリまたはシステムメモリ)および実行ユニットアレイ414と結合する。一実施形態において、サンプリングエンジン430は、実行ユニットアレイ414がグラフィックスおよびメディアデータをメモリから読み取ることを可能にするスケーラブルな実行ユニットアレイ414のためのメモリアクセスメカニズムを提供する。一実施形態において、サンプリングエンジン430は、メディアに対する複数の専用画像サンプリングオペレーションを実行するロジックを含む。
サンプリングエンジン430における専用メディアサンプリングロジックは、ノイズ除去/インターレース解除モジュール432、動き推定モジュール434、および画像スケーリング・フィルタリングモジュール436を含む。ノイズ除去/インターレース解除モジュール432は、デコードされる動画データに対してノイズ除去またはインターレース解除アルゴリズムのうちの1または複数を実行するロジックを含む。インターレース解除ロジックは、インターレース済みの動画コンテンツの複数の交互フィールドを組み合わせて単一のフレームの動画にする。ノイズ除去ロジックは、動画および画像データからデータノイズを低減または除去する。一実施形態において、ノイズ除去ロジックおよびインターレース解除ロジックは、動き適応型であり、動画データにおいて検出された動きの量に基づく空間的または時間的フィルタリングを用いる。一実施形態において、ノイズ除去/インターレース解除モジュール432は、(例えば、動き推定エンジン434内に)専用の動き検出ロジックを含む。
動き推定エンジン434は、動きベクトル推定および動画データに関する予測等の複数の動画加速機能を実行することにより、複数の動画オペレーションのためのハードウェアの加速を提供する。動き推定エンジンは、複数の連続的動画フレーム間の画像データ変換を記載する複数の動きベクトルを決定する。一実施形態において、グラフィックスプロセッサのメディアコーデックは、別の場合には汎用プロセッサの使用を実行するべく演算集約的であり得るマクロブロックレベルで動画に複数のオペレーションを実行する、動画動き推定エンジン434を用いる。一実施形態において、動き推定エンジン434は一般に、動画データ内の動きの方向または大きさに感応性または適応性である動画デコードおよび複数の処理機能を支援するべく、複数のグラフィックスプロセッサコンポーネントに利用可能である。
画像スケーリング・フィルタリングモジュール436は、生成される画像および動画の視覚的品質を高めるべく複数の画像処理オペレーションを実行する。一実施形態において、画像スケーリング・フィルタリングモジュール436は、データを実行ユニットアレイ414に提供する前に、サンプリングオペレーション中に画像および動画データを処理する。
一実施形態において、グラフィックス処理エンジン410は、データポート444を含み、データポート444は、メモリにアクセスするために複数のグラフィックスサブシステム用の追加のメカニズムを提供する。データポート444は、レンダリングターゲット書き込み、コンスタントバッファ読み取り、スクラッチメモリ空間の読み取り/書き込み、およびメディアサーフェスアクセスを含む複数のオペレーションのためのメモリアクセスを容易にする。一実施形態において、データポート444は、メモリへの複数のアクセスをキャッシュするキャッシュメモリ空間を含む。キャッシュメモリは、単一のデータキャッシュであり、またはデータポートを介してメモリにアクセスする複数のサブシステム用の複数のキャッシュ(例えば、レンダリングバッファキャッシュ、コンスタントバッファキャッシュ等)に分離され得る。一実施形態において、実行ユニットアレイ414における実行ユニット上で実行される複数のスレッドは、グラフィックス処理エンジン410の複数のサブシステムの各々を結合するデータ配信相互接続を介して複数のメッセージを交換することにより、データポートと通信する。
[実行ユニット−図5〜図7]
図5は、グラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、リング相互接続502、パイプラインフロントエンド504、メディアエンジン537、およびグラフィックスコア580A〜Nを含む。リング相互接続502は、複数の他のグラフィックスプロセッサ、または1もしくは複数の汎用プロセッサコアを含む複数の他の処理ユニットに、グラフィックスプロセッサを結合する。一実施形態において、グラフィックスプロセッサは、マルチコア処理システム内に統合される多くのプロセッサのうちの1つである。
グラフィックスプロセッサは、リング相互接続502を介して複数のコマンドのバッチを受信する。複数の受信コマンドは、パイプラインフロントエンド504におけるコマンドストリーマ503により変換される。グラフィックスプロセッサは、グラフィックスコア580A〜Nを介して3Dジオメトリ処理およびメディア処理を実行する、スケーラブルな実行ロジックを含む。3Dジオメトリ処理コマンドについては、コマンドストリーマ503は、複数のコマンドをジオメトリパイプライン536に提供する。少なくともいくつかのメディア処理コマンドについては、コマンドストリーマ503は、複数のコマンドを、メディアエンジン537と結合するビデオフロントエンド534に提供する。メディアエンジン537は、動画および画像の後処理のための動画質エンジン(VQE)530と、ハードウェアにより加速されるメディアデータのエンコードおよびデコードを提供するマルチフォーマットエンコード/デコード(MFX)エンジン533とを含む。ジオメトリパイプライン536およびメディアエンジン537は各々、少なくとも1つのグラフィックスコア580Aにより提供されるスレッド実行リソース用の複数の実行スレッドを生成する。
グラフィックスプロセッサは、モジュラコア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のセットを共有する。一実施形態において、複数の共有リソースは、共有キャッシュメモリおよびピクセルオペレーションロジックを含む。他の複数の共有リソースも、グラフィックスプロセッサの様々な実施形態に含まれてもよい。
図6は、グラフィックス処理エンジンの一実施形態において使用される複数の処理要素のアレイを含む、スレッド実行ロジック600を図示する。一実施形態において、スレッド実行ロジック600は、ピクセルシェーダ602、スレッドディスパッチャ604、命令キャッシュ606、複数の実行ユニット608A〜Nを含むスケーラブルな実行ユニットアレイ、サンプラ610、データキャッシュ612、およびデータポート614を含む。一実施形態において、含まれる複数のコンポーネントは、複数のコンポーネントの各々とリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック600は、命令キャッシュ606、データポート614、サンプラ610、および実行ユニットアレイ608A〜Nのうちの1または複数を介して、システムメモリまたはキャッシュメモリのようなメモリへの1または複数の接続を含む。一実施形態において、各実行ユニット(例えば608A)は、複数の同時のスレッドを実行してスレッド毎に並行に複数のデータ要素を処理することができる個別のベクトルプロセッサである。実行ユニットアレイ608A〜Nは、任意の数の個別の実行ユニットを含む。
一実施形態において、実行ユニットアレイ608A〜Nは主に、「シェーダ」プログラムを実行するべく用いられる。一実施形態において、アレイ608A〜Nにおける実行ユニットは、多くの標準的3Dグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットを実行し、従って複数のグラフィックスライブラリからのシェーダプログラム(例えば、Direct 3DおよびOpenGL)は、最小の変換で実行される。複数の実行ユニットは、頂点およびジオメトリ処理(例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ)、ピクセル処理(例えば、ピクセルシェーダ、フラグメントシェーダ)、および汎用処理(例えば、演算およびメディアシェーダ)をサポートする。
実行ユニットアレイ608A〜Nにおける各実行ユニットは、複数のデータ要素のアレイ上で動作する。データ要素の数は、命令に対する「実行サイズ」またはチャネルの数である。実行チャネルは、データ要素のアクセス、マスキング、および複数の命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサに対する物理ALUまたはFPUの数から独立している場合がある。実行ユニット608A〜Nは、整数および浮動小数点のデータタイプをサポートする。
実行ユニット命令セットは、複数の単一命令多重データ(SIMD)命令を含む。様々なデータ要素は、パックドデータのタイプとしてレジスタに格納され得、実行ユニットは、複数の要素のデータサイズに基づいて様々な要素を処理する。例えば、256ビット幅のベクトル上で動作する場合、ベクトルの256ビットは、レジスタに格納され、実行ユニットは、4個の別個の64ビットパックドデータ要素(クワッドワード(QW)サイズのデータ要素)、8個の別個の32ビットパックドデータ要素(ダブルワード(DW)サイズのデータ要素)、16個の別個の16ビットパックドデータ要素(ワード(W)サイズのデータ要素)、または32個の別個の8ビットデータ要素(バイト(B)サイズのデータ要素)としてベクトル上で動作する。しかし、異なる複数のベクトル幅およびレジスタサイズが可能である。
1または複数の内部命令キャッシュ(例えば、606)は、スレッド実行ロジック600に含まれ、実行ユニットのための複数のスレッド命令をキャッシュする。一実施形態において、スレッド実行中にスレッドデータをキャッシュする1または複数のデータキャッシュ(例えば612)が含まれる。複数の3Dオペレーションのためのテクスチャサンプリングおよび複数のメディアオペレーションのためのメディアサンプリングを提供するサンプラ610が含まれる。一実施形態において、サンプラ610は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャまたはメディアデータを処理する専用テクスチャまたはメディアサンプリング機能を含む。
実行中に、グラフィックスおよびメディアパイプラインは、スレッドスポーンおよびディスパッチロジックにより複数のスレッド開始要求をスレッド実行ロジック600に送信する。スレッド実行ロジック600は、グラフィックスおよびメディアパイプラインからの複数のスレッド開始要求を調整し、1または複数の実行ユニット608A〜N上で要求された複数のスレッドをインスタンス化する、ローカルのスレッドディスパッチャ604を含む。例えば、ジオメトリパイプライン(例えば、図5の536)は、頂点処理、テセレーション、またはジオメトリ処理のスレッドをスレッド実行ロジック600にディスパッチする。スレッドディスパッチャ604は、実行する複数のシェーダプログラムからのランタイムスレッドスポーン要求も処理し得る。
複数の幾何学的オブジェクトのグループが処理され、ピクセルデータにラスタライズすると、ピクセルシェーダ602が呼び出され、更に出力情報を演算することで、結果が出力面に書き込まれる(例えば、色バッファ、デプスバッファ、ステンシルバッファ等)。一実施形態において、ピクセルシェーダ602は、ラスタライズされたオブジェクトにわたって補間される様々な頂点アトリビュートの値を算出する。次に、ピクセルシェーダ602は、APIにより提供されるピクセルシェーダプログラムを実行する。ピクセルシェーダプログラムを実行するべく、ピクセルシェーダ602は、スレッドディスパッチャ604により複数のスレッドを実行ユニット(例えば608A)にディスパッチする。ピクセルシェーダ602は、メモリに格納された複数のテクスチャマップにおけるテクスチャデータにアクセスするべく、サンプラ610におけるテクスチャサンプリングロジックを用いる。テクスチャデータおよび入力ジオメトリデータに対する複数の算術オペレーションは、幾何学フラグメント毎にピクセルカラーデータを演算するか、または1または複数のピクセルを更なる処理から破棄する。
一実施形態において、データポート614は、スレッド実行ロジック600の出力処理されたデータのためのメモリアクセスメカニズムを、グラフィックスプロセッサ出力パイプライン上で処理するためのメモリに提供する。一実施形態において、データポート614は、データポートを介するメモリアクセスのためにデータをキャッシュする1または複数のキャッシュメモリ(例えば、データキャッシュ612)を含み、またはこれと結合する。
図7は、一実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを図示するブロック図である。一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線で囲まれた複数のボックスは、一般に実行ユニット命令に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数の命令のサブセットのみに含まれる複数のコンポーネントを含む。説明され、図示される命令フォーマットは、命令が処理されると、命令のデコードからもたらされる複数のマイクロオペレーションとは異なり、実行ユニットに提供される複数の命令であるという点で、マクロ命令である。
一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、128ビットフォーマット710の複数の命令をネイティブにサポートする。64ビット圧縮命令フォーマット730は、選択される命令、命令オプション、およびオペランドの数に基づいていくつかの命令に対して利用可能である。ネイティブな128ビットフォーマット710は、全ての命令オプションにアクセスを提供するが、いくつかのオプションおよびオペレーションは、64ビットフォーマット730において制限されている。64ビットフォーマット730において利用可能であるネイティブな命令は、実施形態により異なる。一実施形態において、命令は、インデックスフィールド713における複数のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、複数のインデックス値に基づいて複数の圧縮テーブルのセットを参照し、128ビットフォーマット710においてネイティブな命令を再構成するべく、複数の圧縮テーブル出力を用いる。
フォーマット毎に、命令オペコード712は、実行ユニットが実行するべきオペレーションを規定する。複数の実行ユニットは、各オペランドの複数のデータ要素にわたって並行に各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素または画素を表す各色チャネルにわたって同時の加算オペレーションを実行する。デフォルトで、実行ユニットは、複数のオペランドの全てのデータチャネルにわたって各命令を実行する。命令制御フィールド712は、チャネル選択(例えば断定)およびデータチャネルの順序(例えばスウィズル)のような特定の実行オプションに対する制御を可能にする。128ビット命令710については、実行サイズフィールド716は、並行に実行されるデータチャネルの数を制限する。実行サイズフィールド716は、64ビットの圧縮命令フォーマット730で用いるために利用可能でない。
いくつかの実行ユニット命令は、2つのソースオペランドsrc0 720、src1 722、および1つのデスティネーション718を含む、最大3つのオペランドを有する。一実施形態において、複数の実行ユニットは、デュアルのデスティネーション命令をサポートし、デスティネーションのうちの1つが暗示される。複数のデータ操作命令は、第3のソースオペランド(例えば、SRC2724)を有し得、命令オペコードJJ12は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡されるイミディエイト(例えば、ハードコードされた)値であり得る。
一実施形態において、複数の命令は、オペコードデコード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)を含む。ベクトルマスグループは、点乗積計算のような算術を複数のベクトルオペランドに実行する。
[グラフィックスパイプライン−図8]
図8は、グラフィックスパイプライン820、メディアパイプライン830、ディスプレイエンジン840、スレッド実行ロジック850、およびレンダリング出力パイプライン870を含むグラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、1または複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、1または複数の制御レジスタ(図示せず)へのレジスタ書き込みにより、またはリング相互接続802を介してグラフィックスプロセッサに発行された複数のコマンドにより、制御される。リング相互接続802は、他のグラフィックスプロセッサまたは汎用プロセッサ等の複数の他の処理コンポーネントに、グラフィックスプロセッサを結合する。リング相互接続からの複数のコマンドは、グラフィックスパイプライン820またはメディアパイプライン830の個別のコンポーネントに複数の命令を提供するコマンドストリーマ803により、解釈される。
コマンドストリーマ803は、頂点データをメモリから読み取り、コマンドストリーマ803により提供された複数の頂点処理コマンドを実行する、頂点フェッチャ805のコンポーネントのオペレーションを管理する。頂点フェッチャ805は、頂点データを頂点シェーダ807に提供し、頂点シェーダ807は、座標空間変換および複数のライティング(lighting)オペレーションを各頂点に実行する。頂点フェッチャ805および頂点シェーダ807は、スレッドディスパッチャ831を介して複数の実行スレッドを実行ユニット852A、852Bにディスパッチすることにより、複数の頂点処理命令を実行する。
一実施形態において、実行ユニット852A、852Bは、グラフィックスおよびメディアオペレーションを実行するための命令セットを有する複数のベクトルプロセッサのアレイである。実行ユニット852A、852Bは、各アレイに固有であるか、または複数のアレイ間で共有される取り付け済みのL1キャッシュ851を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティションにデータおよび命令を含むようにパーティショニングされるシングルキャッシュとして構成され得る。
一実施形態において、グラフィックスパイプライン820は、複数の3Dオブジェクトのハードウェア加速テセレーションを実行する複数のテセレーションコンポーネントを含む。プログラミング可能なハルシェーダ811は、複数のテセレーションオペレーションを構成する。プログラミング可能なドメインシェーダ817は、テセレーション出力のバックエンド評価を提供する。テセレータ813は、ハルシェーダ811の指示で動作し、入力としてグラフィックスパイプライン820に提供される粗幾何学モデルに基づいて、詳細な複数の幾何学的オブジェクトのセットを生成する専用ロジックを含む。テセレーションが用いられない場合、テセレーションコンポーネント811、813、817は、バイパスされ得る。
完全な複数の幾何学的オブジェクトは、実行ユニット852A、852Bにディスパッチされる1または複数のスレッドを通じてジオメトリシェーダ819により処理され得、またはクリッパ829に直接に進み得る。ジオメトリシェーダは、グラフィックスパイプラインの先行する複数の段階におけるような複数の頂点または頂点のパッチよりはむしろ、複数の幾何学的オブジェクト全体で動作する。テセレーションが無効にされると、ジオメトリシェーダ819は、入力を頂点シェーダ807から受信する。ジオメトリシェーダ819は、複数のテセレーションユニットが無効にされる場合、ジオメトリテセレーションを実行するように、ジオメトリシェーダプログラムによりプログラミング可能である。
ラスタライズする前に、頂点データは、クリッパ829により処理される。クリッパ829は、固定関数クリッパ、またはクリッピングおよびジオメトリシェーダ関数を有するプログラミング可能なクリッパのいずれかである。一実施形態において、レンダリング出力パイプライン870におけるラスタライザ873は、複数のピクセルシェーダをディスパッチして、複数の幾何学的オブジェクトをそれらの1ピクセル毎の表現に変換する。一実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック850に含まれる。
グラフィックスエンジンは、データおよびメッセージがグラフィックスエンジンの複数の主要コンポーネント間を通ることを可能にする相互接続バス、相互接続ファブリック、またはいくつかの他の相互接続メカニズムを有する。一実施形態において、実行ユニット852A、852Bおよび関連付けられるキャッシュ851、テクスチャおよびメディアサンプラ854、ならびにテクスチャ/サンプラキャッシュ858は、データポート856を介して相互接続し、メモリアクセスを実行し、グラフィックスエンジンの複数のレンダリング出力パイプラインコンポーネントと通信する。一実施形態において、サンプラ854、キャッシュ851、858、および実行ユニット852A、852Bは各々、別個のメモリアクセスパスを有する。
一実施形態において、レンダリング出力パイプライン870は、頂点ベースの複数のオブジェクトをそれらの関連付けられるピクセルベースの表現に変換する、ラスタライザおよびデプステストコンポーネント873を含む。一実施形態において、ラスタライザロジックは、固定関数トライアングルおよびラインラスタライズを実行するウィンドウア(windower)/マスカ(masker)ユニットを含む。一実施形態において、関連付けられたレンダリングバッファキャッシュ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呼び出しを、グラフィックスプロセッサにより処理され得る複数のコマンドに変換する。様々な実施形態において、サポートは、クロノスグループによりサポートされるオープングラフィックスライブラリ(OpenGL)およびオープンコンピューティング言語(OpenCL)、マイクロソフトコーポレーションのDirect3Dライブラリ、または一実施形態においてはOpenGLおよびDirect3Dの両方に提供される。サポートは、オープンソースコンピュータビジョンライブラリ(OpenCV)にも提供され得る。将来のAPIのパイプラインからグラフィックスプロセッサのパイプラインにマッピングが行われ得る場合には、互換性のある3Dパイプラインを用いる将来のAPIも、サポートされるであろう。
[グラフィックスパイプラインのプログラミング−図9A〜図9B]
図9Aは、一実施形態によるグラフィックスプロセッサコマンドフォーマットを図示するブロック図であり、図9Bは、一実施形態によるグラフィックスプロセッサコマンドシーケンスを図示するブロック図である。図9Aにおける実線で囲まれた複数のボックスは、グラフィックスコマンドに一般に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数のグラフィックスコマンドのサブセットのみに含まれる複数のコンポーネントを含む。図9Aの例示的なグラフィックスプロセッサコマンドフォーマット900は、コマンドのターゲットクライアント902、コマンドオペレーションコード(オペコード)904、およびコマンドのための関連するデータ906を識別する複数のデータフィールドを含む。サブオペコード905およびコマンドサイズ908もいくつかのコマンドに含まれる。
クライアント902は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。一実施形態において、グラフィックスプロセッサコマンドパーサは、コマンドの更なる処理を条件付けて、コマンドデータを適切なクライアントユニットにルーティングするべく、各コマンドのクライアントフィールドを検査する。一実施形態において、グラフィックスプロセッサの複数のクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、2Dユニット、3Dユニット、およびメディアユニットを含む。各クライアントユニットは、複数のコマンドを処理する、対応する処理パイプラインを有する。クライアントユニットによりコマンドが受信されると、クライアントユニットは、オペコード904を読み取り、存在する場合には、サブオペコード905は、実行するオペレーションを決定する。クライアントユニットは、コマンドのデータ906のフィールドにおける情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ908は、コマンドのサイズを指定することが予期される。一実施形態において、コマンドパーサは、コマンドオペコードに基づいて複数のコマンドの少なくともいくつかのサイズを自動的に決定する。一実施形態において、複数のコマンドは、ダブルワードの倍数によりアラインされる。
図9Bのフロー図は、例示のコマンドシーケンス910を示す。一実施形態において、グラフィックスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェアまたはファームウェアは、複数のグラフィックスオペレーションのセットを設定、実行、および終了するように示されたコマンドシーケンスのバージョンを用いる。例示的目的で例示のコマンドシーケンスが示され、説明されている。しかし、複数の実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。更に、これらのコマンドは、コマンドシーケンスにおける複数のコマンドのバッチとして発行されてもよく、従ってグラフィックスプロセッサは、少なくとも部分的に同時に複数のコマンドのシーケンスを処理する。
例示のコマンドシーケンス910は、パイプラインフラッシュコマンド912で開始し、任意のアクティブなグラフィックスパイプラインにパイプライン用の現在保留中の複数のコマンドを完了させ得る。一実施形態において、3Dパイプライン922およびメディアパイプライン924は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに任意の保留中のコマンドを完了させるべく実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサ用のコマンドパーサは、アクティブな複数の描画エンジンが保留中の複数のオペレーションを完了し、関連する複数の読み取りキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択で、「ダーティ」とマークを付けられたレンダリングキャッシュ内の任意のデータは、メモリにフラッシュされ得る。パイプラインフラッシュコマンド912は、パイプライン同期のために、つまりグラフィックスプロセッサを低電力状態にする前に用いられ得る。
パイプライン選択コマンド913は、コマンドシーケンスがグラフィックスプロセッサに複数のパイプライン間で明確に切り替えるように要求するときに用いられる。パイプライン選択コマンド913は、コンテキストが両方のパイプラインのためのコマンドを発行しない限り、パイプラインコマンドを発行する前に実行コンテキスト内で1度だけ必要とされる。一実施形態において、パイプラインフラッシュコマンド912は、パイプラインがパイプライン選択コマンド913により切り替えられる直前に必要とされる。
パイプライン制御コマンド914は、オペレーションのためのグラフィックスパイプラインを構成し、3Dパイプライン922およびメディアパイプライン924をプログラミングするべく用いられる。パイプライン制御コマンド914は、アクティブなパイプラインのためのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド914は、複数のコマンドのバッチを処理する前に、アクティブなパイプライン内の1または複数のキャッシュメモリからのデータをクリアするべく、パイプライン同期に用いられる。
複数のリターンバッファ状態コマンド916は、データを書き込む各パイプライン用の複数のリターンバッファのセットを構成するべく用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む、1または複数のリターンバッファの割り当て、選択、または構成を必要とする。また、グラフィックスプロセッサは、出力データを格納して相互のスレッド通信を実行するべく、1または複数のリターンバッファも用いる。リターンバッファ状態916は、複数のパイプラインオペレーションのセットに用いる複数のリターンバッファのサイズおよび数の選択を含む。
コマンドシーケンスにおける残りの複数のコマンドは、複数のオペレーション用のアクティブなパイプラインに基づいて異なる。パイプラインの決定920に基づいて、コマンドシーケンスは、3Dパイプライン状態930で開始する3Dパイプライン922、またはメディアパイプライン状態940で開始するメディアパイプライン924に対して調整される。
3Dパイプライン状態930のための複数のコマンドは、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)の動作のための複数の要素も含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明らかに関係しない演算シェーダプログラムを用いてSIMDベクトルオペレーションを実行するべく用いられる。
メディアパイプライン924は、3Dパイプライン922と同様に構成される。複数のメディアパイプライン状態コマンド940のセットは、複数のメディアオブジェクトコマンド942の前のコマンド行列にディスパッチされ、または配置される。複数のメディアパイプライン状態コマンド940は、複数のメディアオブジェクトを処理するべく用いられる、複数のメディアパイプライン要素を構成するデータを含む。これは、エンコードまたはデコードフォーマットのようなメディアパイプライン内の動画デコードおよび動画エンコードロジックを構成するデータを含む。複数のメディアパイプライン状態コマンド940は、複数の状態設定のバッチを含む「間接的」状態要素に対する1または複数のポインタの使用もサポートする。
複数のメディアオブジェクトコマンド942は、メディアパイプラインにより処理するための複数のメディアオブジェクトに複数のポインタを提供する。複数のメディアオブジェクトは、処理されるべき動画データを含む複数のメモリバッファを含む。一実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド942を発行する前に有効でなければならない。パイプライン状態が構成され、複数のメディアオブジェクトコマンド942が待ち行列に入れられると、メディアパイプライン924は、実行944のコマンドまたは同等の実行イベント(例えばレジスタ書き込み)によりトリガされる。次に、メディアパイプライン924からの出力は、3Dパイプライン922またはメディアパイプライン924により提供される複数のオペレーションにより後処理され得る。一実施形態において、複数のGPGPUオペレーションは、メディアオペレーションと同様に構成され、実行される。
[グラフィックスソフトウェアアーキテクチャ−図10]
図10は、一実施形態によるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを図示する。ソフトウェアアーキテクチャは、3Dグラフィックスアプリケーション1010、オペレーティングシステム1020、および少なくとも1つのプロセッサ1030を含む。プロセッサ1030は、グラフィックスプロセッサ1032、および1または複数の汎用プロセッサコア1034を含む。グラフィックスアプリケーション1010およびオペレーティングシステム1020は各々、データ処理システムのシステムメモリ1050において実行される。
一実施形態において、3Dグラフィックスアプリケーション1010は、複数のシェーダ命令1012を含む、1または複数のシェーダプログラムを含む。複数のシェーダ言語命令は、高水準シェーダ言語(HLSL)またはOpenGLシェーダ言語(GLSL)のような高水準シェーダ言語によるものであってもよい。アプリケーションは、汎用プロセッサコア1034により実行するのに好適な機械言語による複数の実行可能命令1014も含む。アプリケーションは、頂点データにより定義される複数のグラフィックスオブジェクト1016も含む。
オペレーティングシステム1020は、マイクロソフトコーポレーションのマイクロソフトウィンドウズ(登録商標)オペレーティングシステム、プロプライエタリUNIX(登録商標)様式のオペレーティングシステム、またはLinux(登録商標)カーネルの変形を用いるオープンソースUNIX(登録商標)様式のオペレーティングシステムであってもよい。Direct3D APIが用いられる場合、オペレーティングシステム1020は、フロントエンドのシェーダコンパイラ1024を用いて、HLSLの任意のシェーダ命令1012をより低水準のシェーダ言語にコンパイルする。コンパイルは、ジャストインタイムコンパイルであってもよく、またはアプリケーションは、共有プリコンパイルを実行し得る。一実施形態において、複数の高水準シェーダは、3Dグラフィックスアプリケーション1010のコンパイル中により低水準のシェーダへとコンパイルされる。
ユーザモードグラフィックスドライバ1026は、複数のシェーダ命令1012をハードウェア固有の表現に変換する、バックエンドのシェーダコンパイラ1027を含んでもよい。OpenGL APIが用いられる場合、GLSL高水準言語のシェーダ命令1012は、コンパイルのためにユーザモードグラフィックスドライバ1026に渡される。ユーザモードグラフィックスドライバは、カーネルモードグラフィックスドライバ1029と通信するべく、オペレーティングシステムカーネルモード機能1028を用いる。カーネルモードグラフィックスドライバ1029は、複数のコマンドおよび命令をディスパッチするべく、グラフィックスプロセッサ1032と通信する。
様々なオペレーションまたは機能が本明細書において説明される限度において、それらはハードウェア回路、ソフトウェアコード、命令、構成、および/またはデータとして説明または定義され得る。コンテンツは、ハードウェアロジックで、または直接に実行可能なソフトウェア(「オブジェクト、または「実行可能な」形式)、ソースコード、グラフィックスエンジン上での実行のために設計された高水準シェーダコード、または特定のプロセッサもしくはグラフィックスコア用の命令セットによる低水準アセンブリ言語コードとして実施され得る。本明細書に説明される複数の実施形態におけるソフトウェアコンテンツは、コンテンツが格納された製造物品、または通信インタフェースを介してデータを送信するように通信インタフェースを動作させる方法により提供され得る。
非一時的機械可読ストレージ媒体は、機械に、説明される複数の機能またはオペレーションを実行させ得、記録可能/非記録可能媒体(例えば、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス等)のような機械(例えば、コンピューティングデバイス、電子システム等)によりアクセス可能な形態で情報を格納する任意のメカニズムを含む。通信インタフェースは、メモリバスインタフェース、プロセッサバスインタフェース、インターネット接続、ディスクコントローラ等のような別のデバイスに通信するハードワイヤード、無線、光等の媒体のいずれかにインタフェース接続する任意のメカニズムを含む。通信インタフェースは、複数の構成パラメータを提供し、または通信インタフェースを準備して、ソフトウェアコンテンツを記載するデータ信号を提供するべく複数の信号を送信することにより構成される。通信インタフェースは、通信インタフェースに送信される1または複数のコマンドまたは信号によりアクセスされ得る。
説明される様々なコンポーネントは、説明される動作または機能を実行するための手段であり得る。本明細書に説明される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。複数のコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア(例えば、特定用途向けハードウェア、特定用途向け集積回路(ASIC)、デジタル信号プロセッサ(DSP)等)、エンベデッドコントローラ、ハードワイヤード回路等として実装され得る。本明細書において説明されるもの以外に、その範囲を逸脱することなく、本発明において開示される実施形態および実装に対して様々な修正が行われ得る。従って、本明細書における図示および例は、限定的な意味ではなく例示的な意味に解釈されるべきである。本発明の範囲は、以下の特許請求の範囲を参照することのみにより判断されるべきである。
効果的なテクスチャ圧縮のための装置および方法
下記の本発明の複数の実施形態は、高性能でスケーラブルな非可逆グラフィックステクスチャ圧縮をサポートしつつ、画像品質、圧縮率、およびブロックサイズの柔軟な選択を可能にする。一実施形態において、圧縮および圧縮解除の両方は、同一の1テクセル当たりのコストを有し、複数の積和命令のみを用いる。更に、テクセル圧縮解除は、複数の隣接テクセル間の空間的または時間的な依存性を必要としない。その結果として、本明細書に説明される複数の技術は、大規模な並列実装およびハードウェアの加速に特に好適である。
前述の成果を実現するべく、本発明の一実施形態は、テクスチャ画像データのブロックを2つの座標の多変量関数として扱う。圧縮段階において、多変量関数は、各テクセルにおいてサンプリングされ、複数の中心点のスパースグリッドにおいて数値的に近似され、テクスチャブロックの圧縮表現を構成する複数の近似係数のベクトルを得る。圧縮解除段階において、複数の近似係数は次に、元のテクセルの近似値を再生成するべく、各テクセル座標において多変量関数を評価するように用いられる。色チャネルおよびアルファチャネルは、別個に扱われ得る。
具体的には、一実施形態において、テクスチャブロックにおいて色関数を数値的に近似させるべく、放射基底関数(RBF)近似が用いられる。これにより、4×4〜16×16等の複数のブロックサイズの柔軟な選択を可能にする。複数の矩形(非正方形)ブロックもサポートされる。
図11に図示されるように、本発明の一実施形態において、圧縮および圧縮解除動作は、グラフィックス処理ユニットのテクスチャサンプラ1100(例えば、図5におけるテクスチャサンプラ554A〜N、図6における610、および図8における854)内で実行される。具体的には、対称テクスチャ圧縮ロジック1105は、未圧縮テクスチャデータ1101を圧縮するべく、下記の(例えば、RBF近似を用いる)複数の技術を実装する。次に、もたらされる圧縮済みテクスチャデータ1107は、テクスチャマッピング動作中において次に用いるべく、テクスチャ格納位置1110(例えば、テクスチャキャッシュ、メインメモリ、大容量ストレージ等)に格納され得る。
対称テクスチャ圧縮解除ロジック1120は、下記の複数の圧縮解除技術(例えば、テクスチャブロックに対する複数の色値のベクトル[T]を決定する)を用いて圧縮済みテクスチャデータ1107を圧縮解除し、圧縮解除済みテクスチャデータ1130を生成する。次に、もたらされた圧縮解除済みテクスチャデータ1130は、ピクセルシェーダ1150および/またはグラフィックスパイプラインにおける他の複数のステージにより用いられて、複数のテクスチャマッピング動作を実行し得る。
上述のように、RBF近似は、一実施形態においてテクスチャデータを圧縮するべく用いられる。近似の確度、従って画像品質および圧縮率は、ブロック内のテクセルの数(以下、Bと示される)に対する近似RBF中心点カウント(以下、Nとして示される)の選択により制御される。
RBF近似を含む複数の近似法は、ドメイン境界(すなわち、この場合はブロックのエッジ)において高いエラー率を被る。影響を限定するべく、本発明の一実施形態は、図12A(4つの中心点1250による実装を示す)および図12B(8つの中心点1251による実装を示す)において図示されるように、複数のRBF中心点をテクスチャブロックの複数のエッジに配置する。RBF中心点配置の対称性を維持するべく、図12Aの示されるブロック角部に配置された4つの中心は、ベースライン実装(すなわち、最小の数の中心点)として用いられ得る。次に、その後の複数の構成は、図12Bに示される等距離の設定で4つの新しい中心を複数のエッジに追加する(エッジ毎に1つ)ことにより生成され得る。4つの中心点の追加の複数のセットは、複数のエッジを等しい長さの線分に細分するべく追加され得る(例えば、12個の中心点は、3つの線分をもたらし、16個の中心点は、4つの線分をもたらす、等である)。
図12Cは、異なる数の中心点を用いる異なるブロックサイズ(例えば、4×4、5×5等)に対する例示的な複数の圧縮率を提供する。例として、4つの中心点を有する4×4つのテクスチャブロックは、0.25の圧縮率をもたらすが、12個の中心点を有する同一のテクスチャブロックは、0.75の圧縮率をもたらす。
一実施形態において、RBF近似は、複数の近似中心点と複数の近似データサイト(例えば、テクセル)の間の距離ベクトルのノルムにわたって算出された放射基底関数に基づいて複数の近似係数を演算する。複数の放射基底関数の広範なクラスが用いられ得るが、本発明の複数の実施形態になおも準拠する。具体的な一実施形態において、GAUSおよびMQと各々示されるガウス二次RBFおよび/または多重二次RBFが用いられる。
RBF近似は、シェープパラメータとして既知であり、以下にepと示される放射基底関数曲線図形を制御するべく、追加のシェープパラメータを用いる。タプル<B,N,グリッド,RBF,ep>は、圧縮/圧縮解除方法の制御セットを構成する(Bは、ブロック内のテクセルの数であり、Nは、RBF中心点カウントである)。RBI近似の詳細は、当業者に周知であり、本発明の基礎となる原理を不明瞭にするのを回避するべくここでは説明されない。1つのテクスチャブロックに対する近似(圧縮)段階および評価(圧縮解除)段階の動作が、後述される。
一実施形態において、圧縮は、以下の方程式に従って実行される。
一実施形態において、圧縮行列は、まず、複数のテクスチャデータサイト地点と複数の近似中心点との間の距離行列[DM]を算出することにより決定される。例として、16テクセルを有し、4つの中心点を用いる4×4のテクスチャブロックにおいて、距離行列は、64個の要素を備える(すなわち、各要素は、4つの中心点のうちの1つと16のテクセルのうちの1つとの間の距離を表す)。次に、メンバワイズRBF値の圧縮行列[RDM]は、構成されたRBFタイプおよびシェープパラメータep値を用いて距離行列[DM]に対して算出される。
一実施形態において、ブロックにわたってサンプリングされたBテクセル色値を含むベクトル[T]が、形成される。例として、4×4のテクスチャブロックについては、16個のテクセル色値がブロックにわたってサンプリングされる(すなわち、B=16)。
次に、本発明の一実施形態は、線形方程式系[RDM]*[A]=[T]を解き、複数の近似係数のベクトル[A]を見出す。これは、[RDM]行列の一般逆行列である[iRDM]を数値的に演算し、[iRDM][T]の積行列を演算して圧縮済みテクスチャデータを含むベクトル[A]を決定することにより実現され得る。
一実施形態において、<B,N,グリッド,RBF,e
p>の固定された組み合わせについては、距離行列[DM]を演算するオペレーションと、圧縮解除行列[RDM]を演算するオペレーションは、事前に演算され、定数として提供され得る。更に、[RDM]行列は、正方形でない場合があり、それが定義する線形方程式系は、優決定系であるので、古典的な意味における逆行列は、存在しない。これに代えて、本発明の一実施形態は、ムーア・ペンローズ疑似逆行列を用いて、以下の方程式に基づいて最適の方程式系の解を見出す。
最後に、<B,N,グリッド,RBF,ep>の固定された組み合わせについては、積行列[iRDM][T]を演算するオペレーションは、事前に演算され、定数として提供され得る。その結果として、上記の検討から示唆されるように、圧縮段階は、テクスチャブロック毎の単一の行列ベクトル積オペレーションにされ得、行列は、定数として提供される。
一実施形態において、圧縮解除は、以下の方程式に従って実行される。
複数のテクセル色値のベクトル[T]を見出すべく、圧縮解除行列[RDM]と近似係数[A]のベクトルとの積が決定される(例えば、[RDM]*[A]=[T]が演算される)。その結果として、圧縮解除段階は、テクスチャブロック毎の単一の行列ベクトル積オペレーションにされ得、行列は、定数としてアルゴリズムに提供される。一実施形態において、複数の近似係数[A]は、圧縮フォーマットで格納された場合の入力カラーデータと同一の精度で表される。
図13は、4つの中心点を有する4×4のテクスチャブロックに対する前述の方程式の例示的な表現を提供する。図示される例において、[RDM]行列1301は、再形成されて4×16の圧縮解除行列1302を生成し、これは次に、複数の近似係数の行列[A]と掛けられて1×16のバージョンのテクセルブロック1304に到達する。次に、テクセルブロック1304は、再形成されて最終的な[T]行列1305に到達する。
圧縮を実行するための方法は、図14に図示されている。1401において、距離行列[DM]は、テクスチャブロックの各データサイト地点と各中心点との間の距離を用いて演算される。4つの中心点を有する4×4のテクスチャブロックについては、これは64の値をもたらす。1402において、RBF行列[RDM]は、構成されたRBFタイプおよびシェープパラメータep値を用いて距離行列[DM]にわたる複数のメンバワイズRBF値から演算される。1403において、ベクトル[T]は、ブロックにわたってサンプリングされた複数のBテクセル色値から形成される。最後に、1404において、線形方程式系[RDM]*[A]=[T]を解いて、複数の近似係数のベクトル[A]を見出す。
上記に示された複数の技術は、圧縮および圧縮解除段階の両方における(例えば、説明された行列乗算を実行するための)積和オペレーションのみを用いて実装され得る。更に、圧縮および圧縮解除段階の両方は、ブロックサイズおよび選択される圧縮率に応じて等しい1テクセル当たりのコストを有する。これらの技術は色近似を用いるので、サブサンプリングおよびオーバサンプリングスキームに好適であるという付加的利益を提供する。更に、演算の低い複雑性およびコストは、これらの技術を、ハードウェアの加速および/またはリアルタイムの用途に好適なものとし、メモリ帯域幅および電力消費に対する限度をもたらす。
本発明の複数の実施形態は、上記された様々な段階を含み得る。複数の段階は、汎用または専用プロセッサに複数の段階を実行させるべく用いられ得る複数の機械実行可能命令で実施され得る。あるいは、これらの段階は、複数の段階を実行するためのハードワイヤードロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行され得る。
本明細書において説明されるように、複数の命令は、特定の複数のオペレーションを実行するよう構成され、または予め定められた機能または非一時的コンピュータ可読媒体で実施されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路(ASIC)等のハードウェアの特定の構成を指し得る。従って、図に示される複数の技術は、1または複数の電子デバイス(例えば、終端局およびネットワーク要素等)上に格納され、実行されるコードおよびデータを用いて実装され得る。そのような電子デバイスは、非一時的コンピュータ機械可読記憶媒体(例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ)および一時的コンピュータ機械可読通信媒体(例えば、搬送波、赤外線信号、デジタル信号等の伝搬信号の電気、光、音響、又は他の形態)等、コンピュータ機械可読媒体を用いてコードおよびデータを格納し、(内部で、および/またはネットワークを介して他の電子デバイスと)通信する。更に、そのような電子デバイスは通常、1もしくは複数のストレージデバイス(非一時的機械可読記憶媒体)、ユーザ入出力デバイス(例えば、キーボード、タッチスクリーン、および/またはディスプレイ)、ならびにネットワーク接続等、1もしくは複数の他のコンポーネントに結合された1もしくは複数のプロセッサのセットを含む。複数のプロセッサおよび複数の他のコンポーネントのセットの結合は通常、1または複数のバスおよびブリッジ(バスコントローラとも呼ばれる)を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、各々、1または複数の機械可読記憶媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの1または複数のプロセッサのセット上で実行するためのコードおよび/またはデータを格納する。勿論、本発明の実施形態の1または複数の部分は、ソフトウェア、ファームウェア、および/またはハードウェアの異なる組み合わせを用いて実装され得る。この詳細な説明を通じて、説明の目的のために、様々な具体的詳細が、本発明の完全な理解を提供するべく記載された。しかし、当業者には、本発明がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。