(57)【特許請求の範囲】
【請求項１】
テクスチャブロックの複数のテクセルの各々と前記テクスチャブロックの複数のエッジ及び複数の角部に配置された有理基底関数（ＲＢＦ）の複数の中心点の各々との間の距離を決定する段階と、
前記テクスチャブロックにわたってサンプリングされた複数のテクセル色値のセットを決定する段階と、
前記複数のテクセルの各々と前記複数の中心点の各々との間の前記距離、および前記テクスチャブロックにわたってサンプリングされた複数のテクセル色値の前記セットを用いて、前記テクスチャブロックを圧縮するべく複数の近似係数のセットを生成する段階とを備え、
前記複数の中心点は、４つの中心点のセットを２以上含む、方法。
【請求項２】
前記複数の中心点は、前記複数のエッジを等しい長さの線分に細分するように配置される、請求項１に記載の方法。
【請求項３】
複数のテクセルの各々と複数の中心点の各々との間の前記距離を用いて距離行列［ＤＭ］を決定する段階と、
指定されたタイプのＲＢＦおよび指定されたシェープパラメータｅｐ値を用いて、前記距離行列［ＤＭ］にわたる複数のメンバワイズＲＢＦ値のＲＢＦ行列［ＲＤＭ］を決定する段階とを更に備える、請求項２に記載の方法。
【請求項４】
前記指定されたタイプのＲＢＦは、ガウス有理基底関数および多重二次有理基底関数からなる群から選択される、請求項３に記載の方法。
【請求項５】
複数のテクセル色値のセットを決定する段階は、前記テクスチャブロックにわたってサンプリングされたＢ個のテクセル色値のベクトル［Ｔ］を形成する段階を有し、
Ｂは、前記テクスチャブロックにおけるテクセルの数である、請求項３に記載の方法。
【請求項６】
複数の近似係数の前記セットを生成する段階は、方程式［ＲＤＭ］＊［Ａ］＝［Ｔ］を用いて前記複数の近似係数を含むベクトル［Ａ］を決定する段階を有する、請求項５に記載の方法。
【請求項７】
前記ＲＢＦ行列［ＲＤＭ］の疑似逆行列［ｉＲＤＭ］を決定する段階と、
［ｉＲＤＭ］を［Ｔ］と掛けて［Ａ］を決定する段階とを更に備える、請求項６に記載の方法。
【請求項８】
前記テクスチャブロックは、４×４のテクスチャブロック、５×５のテクスチャブロック、６×６のテクスチャブロック、７×７のテクスチャブロック、または８×８のテクスチャブロックを含む、請求項７に記載の方法。
【請求項９】
前記テクスチャブロックは、矩形テクスチャブロックを含む、請求項７に記載の方法。
【請求項１０】
前記方程式［ＲＤＭ］＊［Ａ］＝［Ｔ］を用いて前記ベクトル［Ｔ］を決定することにより、前記テクスチャブロックを圧縮解除する段階を更に備える、請求項６に記載の方法。
【請求項１１】
テクスチャブロックの複数のテクセルの各々と前記テクスチャブロックの複数のエッジ及び複数の角部に配置された有理基底関数（ＲＢＦ）の複数の中心点の各々との間の距離を決定し、
前記テクスチャブロックにわたってサンプリングされた複数のテクセル色値のセットを決定し、
前記複数のテクセルの各々と前記複数の中心点の各々との間の前記距離、および前記テクスチャブロックにわたってサンプリングされた複数のテクセル色値の前記セットを用いて、前記テクスチャブロックを圧縮するべく複数の近似係数のセットを生成するテクスチャ圧縮ロジックを備え、
前記複数の中心点は、４つの中心点のセットを２以上含む、プロセッサ。
【請求項１２】
前記複数の中心点は、前記複数のエッジを等しい長さの線分に細分するように配置される、請求項１１に記載のプロセッサ。
【請求項１３】
前記テクスチャ圧縮ロジックは、複数のテクセルの各々と複数の中心点の各々との間の前記距離を用いて距離行列［ＤＭ］を決定し、指定されたタイプのＲＢＦおよび指定されたシェープパラメータｅｐ値を用いて、前記距離行列［ＤＭ］にわたる複数のメンバワイズＲＢＦ値のＲＢＦ行列［ＲＤＭ］を決定する、請求項１２に記載のプロセッサ。
【請求項１４】
前記指定されたタイプのＲＢＦは、ガウス有理基底関数および多重二次有理基底関数からなる群から選択される、請求項１３に記載のプロセッサ。
【請求項１５】
複数のテクセル色値のセットを決定する段階は、前記テクスチャブロックにわたってサンプリングされたＢ個のテクセル色値のベクトル［Ｔ］を形成する段階を有し、
Ｂは、前記テクスチャブロックにおけるテクセルの数である、請求項１３または１４に記載のプロセッサ。
【請求項１６】
前記テクスチャ圧縮ロジックは、方程式［ＲＤＭ］＊［Ａ］＝［Ｔ］を用いて前記複数の近似係数を含むベクトル［Ａ］を決定することにより、複数の近似係数の前記セットを生成する、請求項１５に記載のプロセッサ。
【請求項１７】
前記テクスチャ圧縮ロジックは、前記ＲＢＦ行列［ＲＤＭ］の疑似逆行列［ｉＲＤＭ］を決定し、［ｉＲＤＭ］を［Ｔ］と掛けて［Ａ］を決定する、請求項１６に記載のプロセッサ。
【請求項１８】
前記テクスチャブロックは、４×４のテクスチャブロック、５×５のテクスチャブロック、６×６のテクスチャブロック、７×７のテクスチャブロック、または８×８のテクスチャブロックを含む、請求項１７に記載のプロセッサ。
【請求項１９】
前記テクスチャブロックは、矩形テクスチャブロックを含む、請求項１７に記載のプロセッサ。
【請求項２０】
前記方程式［ＲＤＭ］＊［Ａ］＝［Ｔ］を用いて前記ベクトル［Ｔ］を決定することにより、前記テクスチャブロックを圧縮解除するテクスチャ圧縮解除ロジックを更に備える、請求項１６に記載のプロセッサ。
【請求項２１】
コンピュータに、
テクスチャブロックの複数のテクセルの各々と前記テクスチャブロックの複数のエッジ及び複数の角部に配置された有理基底関数（ＲＢＦ）の複数の中心点の各々との間の距離を決定する手順と、
前記テクスチャブロックにわたってサンプリングされた複数のテクセル色値のセットを決定する手順と、
前記複数のテクセルの各々と前記複数の中心点の各々との間の前記距離、および前記テクスチャブロックにわたってサンプリングされた複数のテクセル色値の前記セットを用いて、前記テクスチャブロックを圧縮するべく複数の近似係数のセットを生成する手順とを実行させるコンピュータプログラムであって、
前記複数の中心点は、４つの中心点のセットを２以上含む、コンピュータプログラム。
【請求項２２】
前記複数の中心点は、前記複数のエッジを等しい長さの線分に細分するように配置される、請求項２１に記載のコンピュータプログラム。
【請求項２３】
前記コンピュータに、
複数のテクセルの各々と複数の中心点の各々との間の前記距離を用いて距離行列［ＤＭ］を決定する手順と、
指定されたタイプのＲＢＦおよび指定されたシェープパラメータｅｐ値を用いて、前記距離行列［ＤＭ］にわたる複数のメンバワイズＲＢＦ値のＲＢＦ行列［ＲＤＭ］を決定する手順とを更に実行させる、請求項２２に記載のコンピュータプログラム。
【請求項２４】
請求項２１〜２３のいずれか１項に記載のコンピュータプログラムを格納する、コンピュータ可読記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概ねコンピュータプロセッサの分野に関する。より具体的には、本発明は、効果的なテクスチャ圧縮のための装置および方法に関する。
【背景技術】
【０００２】
テクスチャマッピングは、テクスチャをシェープまたは多角形の表面に適用するグラフィックスパイプラインにおいて実装される周知の技術である。通常、テクスチャデータは、Ｎ×Ｎの「テクセル」（場合により「テクスチャ要素」または「テクスチャピクセル」とも称される）の行列に格納される。従って、複数の画像がピクセルのアレイにより表される同一の態様で、複数のテクスチャは、テクセルの複数のアレイにより表される。テクスチャマッピングを実行する場合、グラフィックス処理ユニット（ＧＰＵ）内のロジックは、複数のテクセルを出力画像における適切な複数のピクセルにマッピングする。
【０００３】
複数のテクスチャ圧縮技術は、テクスチャデータにより消費されるメモリの量を低減するべく実装される。現在の複数のテクスチャ圧縮方法は、テクスチャ画像を、数値的に近似し得る座標の関数として扱わない。これに代えて、これらの技術は、支配的な複数の色を識別して、複数のブロックテクセル間のカラーグラジエントを符号化するべく複数のアルゴリズムの方法を用いる。通常、圧縮は、アルゴリズムインテンシブであり、帯域外でおよび／またはオフラインで適用される。圧縮解除は、複数の段階を用い、多くの場合、複数の隣接テクセル間の時間的および／または空間的依存性を含む。これらの要素は、メモリ／キャッシュのサイズおよび帯域幅要求の増大を促進し、大規模な並列実装に対する適合性を制限してしまった。
【図面の簡単な説明】
【０００４】
本発明のより良い理解は、以下の図面と併せて以下の詳細な説明から得られ得る。
【０００５】
【図１】プロセッサが１または複数のプロセッサコアおよびグラフィックスプロセッサを有するコンピュータシステムの実施形態のブロック図である。
【０００６】
【図２】プロセッサが１または複数のプロセッサコア、統合メモリコントローラ、および統合グラフィックスプロセッサを有する一実施形態のブロック図である。
【０００７】
【図３】ディスクリートグラフィックス処理ユニットであり得るか、または複数のプロセッシングコアと統合されたグラフィックスプロセッサであり得る、グラフィックスプロセッサの一実施形態のブロック図である。
【０００８】
【図４】グラフィックスプロセッサ用のグラフィックス処理エンジンの実施形態のブロック図である。
【０００９】
【図５】グラフィックスプロセッサの別の実施形態のブロック図である。
【００１０】
【図６】複数の処理要素のアレイを含むスレッド実行ロジックのブロック図である。
【００１１】
【図７】一実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを図示する。
【００１２】
【図８】グラフィックスパイプライン、メディアパイプライン、ディスプレイエンジン、スレッド実行ロジック、およびレンダリング出力パイプラインを含むグラフィックスプロセッサの別の実施形態のブロック図である。
【００１３】
【図９Ａ】一実施形態によるグラフィックスプロセッサコマンドフォーマットを図示するブロック図である。
【００１４】
【図９Ｂ】一実施形態によるグラフィックスプロセッサコマンドシーケンスを図示するブロック図である。
【００１５】
【図１０】一実施形態によるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを図示する。
【００１６】
【図１１】テクスチャ圧縮および圧縮解除のためのアーキテクチャの一実施形態を図示する。
【００１７】
【図１２Ａ】一実施形態において圧縮を実行するための例示的中心点配置を図示する。
【図１２Ｂ】一実施形態において圧縮を実行するための例示的中心点配置を図示する。
【００１８】
【図１２Ｃ】一実施形態におけるブロックサイズ、複数の中心点、および圧縮レートの間の関係を図示する。
【００１９】
【図１３】一実施形態において圧縮解除行列、係数ベクトル、およびテクセルブロックを用いて実行される複数の動作を図示する。
【００２０】
【図１４】本発明の一実施形態による方法を図示する。
【発明を実施するための形態】
【００２１】
以下の説明において、説明の目的のために、後述される本発明の複数の実施形態の完全な理解を提供するべく、様々な具体的詳細が記載される。しかし、当業者には、本発明の複数の実施形態がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。本発明の複数の実施形態の基礎となる原理を不明瞭にするのを避けるべく、複数の他の例において、周知の複数の構造およびデバイスがブロック図の形態で示される。
【００２２】
例示的なグラフィックスプロセッサアーキテクチャおよびデータタイプ
［概要−図１〜３］
図１は、実施形態による、データ処理システム１００のブロック図である。データ処理システム１００は、１または複数のプロセッサ１０２と、１または複数のグラフィックスプロセッサ１０８とを含み、多数のプロセッサ１０２またはプロセッサコア１０７を有するシングルプロセッサのデスクトップシステム、マルチプロセッサのワークステーションシステム、またはサーバシステムであってもよい。一実施形態において、データ処理システム１００は、モバイル、ハンドヘルド型、またはエンベデッドデバイスにおいて用いるためのシステムオンチップ集積回路（ＳＯＣ）である。
【００２３】
データ処理システム１００の実施形態は、ゲームおよびメディアコンソール、モバイルゲームコンソール、ハンドヘルド型ゲームコンソール、またはオンラインゲームコンソールを含む、サーバベースのゲームプラットフォームまたはゲームコンソールを含み、またはこれらの内部に組み込まれ得る。一実施形態において、データ処理システム１００は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、またはモバイルインターネットデバイスである。また、データ処理システム１００は、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、またはバーチャルリアリティデバイス等のウェアラブルデバイスも含み、これらと結合し、またはこれらの内部に統合され得る。一実施形態において、データ処理システム１００は、１または複数のプロセッサ１０２と、１または複数のグラフィックスプロセッサ１０８により生成されるグラフィカルインタフェースとを有するテレビまたはセットトップボックスデバイスである。
【００２４】
データ処理システム１００の実施形態は、ゲームおよびメディアコンソール、モバイルゲームコンソール、ハンドヘルド型ゲームコンソール、またはオンラインゲームコンソールを含む、サーバベースのゲームプラットフォーム、ゲームコンソールを含み、またはこれらの内部に組み込まれ得る。一実施形態において、データ処理システム１００は、携帯電話、スマートフォン、タブレットコンピューティングデバイス、またはモバイルインターネットデバイスである。また、データ処理システム１００は、スマートウォッチウェアラブルデバイス、スマートアイウェアデバイス、拡張現実感デバイス、またはバーチャルリアリティデバイス等のウェアラブルデバイスも含み、これらと結合し、またはこれらの内部に統合され得る。一実施形態において、データ処理システム１００は、１または複数のプロセッサ１０２と、１または複数のグラフィックスプロセッサ１０８により生成されるグラフィカルインタフェースとを有するテレビまたはセットトップボックスデバイスである。
【００２５】
１または複数のプロセッサ１０２は各々、実行されると、システムおよびユーザソフトウェアのための複数のオペレーションを実行する複数の命令を処理する、１または複数のプロセッサコア１０７を含む。一実施形態において、１または複数のプロセッサコア１０７の各々は、特定の命令セット１０９を処理するように構成される。命令セット１０９は、複合命令セット演算（ＣＩＳＣ）、縮小命令セット演算（ＲＩＳＣ）、または超長命令語（ＶＬＩＷ）による演算を容易にし得る。複数のプロセッサコア１０７は各々、複数の他の命令セットのエミュレーションを容易にする複数の命令を含み得る、異なる命令セット１０９を処理し得る。プロセッサコア１０７は、デジタル信号プロセッサ（ＤＳＰ）等の複数の他のプロセッシングデバイスも含み得る。
【００２６】
一実施形態において、プロセッサ１０２は、キャッシュメモリ１０４を含む。アーキテクチャに応じて、プロセッサ１０２は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有し得る。一実施形態において、キャッシュメモリは、プロセッサ１０２の様々なコンポーネント間で共有される。一実施形態において、プロセッサ１０２は、既知の複数のキャッシュコヒーレンシ技術を用いる複数のプロセッサコア１０７間で共有され得る外部キャッシュ（例えば、レベル３（Ｌ３）キャッシュまたはラストレベルキャッシュ（ＬＬＣ））（図示せず）も用いる。更に、レジスタファイル１０６は、複数の異なるタイプのデータを格納する複数の異なるタイプのレジスタ（例えば、整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタ）を含み得る、プロセッサ１０２内に含まれる。いくつかのレジスタは、汎用レジスタであり得るが、他のレジスタは、プロセッサ１０２の設計に固有であってもよい。
【００２７】
プロセッサ１０２は、システム１００におけるプロセッサ１０２と複数の他のコンポーネントとの間で複数のデータ信号を送信するべく、プロセッサバス１１０と結合される。システム１００は、メモリコントローラハブ１１６および入出力（Ｉ／Ｏ）コントローラハブ１３０を含む、例示的な「ハブ」システムアーキテクチャを用いる。メモリコントローラハブ１１６は、システム１００のメモリデバイスと複数の他のコンポーネントとの間の通信を容易にするが、Ｉ／Ｏコントローラハブ（ＩＣＨ）１３０は、ローカルＩ／Ｏバスを介してＩ／Ｏデバイスへの複数の接続を提供する。
【００２８】
メモリデバイス１２０は、処理メモリとして機能する好適な性能を有する、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）デバイス、スタティックランダムアクセスメモリ（ＳＲＡＭ）デバイス、フラッシュメモリデバイス、またはいくつかの他のメモリデバイスであり得る。メモリ１２０は、プロセッサ１０２が処理を実行するときに用いられるデータ１２２および複数の命令１２１を格納し得る。メモリコントローラハブ１１６は、任意選択の外部グラフィックスプロセッサ１１２にも結合し、任意選択の外部グラフィックスプロセッサ１１２は、グラフィックスおよびメディアオペレーションを実行するべく、プロセッサ１０２において１または複数のグラフィックスプロセッサ１０８と通信し得る。
【００２９】
ＩＣＨ１３０は、複数の周辺機器が高速Ｉ／Ｏバスを介してメモリ１２０およびプロセッサ１０２に接続することを可能にする。Ｉ／Ｏ周辺機器は、オーディオコントローラ１４６、ファームウェアインタフェース１２８、無線トランシーバ１２６（例えば、Ｗｉ−Ｆｉ、Ｂｌｕｅｔｏｏｔｈ（登録商標））、データストレージデバイス１２４（例えば、ハードディスクドライブ、フラッシュメモリ等）、および複数のレガシ（例えば、パーソナルシステム２（ＰＳ／２））デバイスをシステムと結合するためのレガシＩ／Ｏコントローラを含む。１または複数のユニバーサルシリアルバス（ＵＳＢ）コントローラ１４２は、キーボードおよびマウス１４４の組み合わせのような複数の入力デバイスを接続する。ネットワークコントローラ１３４も、ＩＣＨ１３０と結合し得る。一実施形態において、高性能ネットワークコントローラ（図示せず）は、プロセッサバス１１０と結合する。
【００３０】
図２は、１または複数のプロセッサコア２０２Ａ〜Ｎ、統合メモリコントローラ２１４、および統合グラフィックスプロセッサ２０８を有するプロセッサ２００の実施形態のブロック図である。プロセッサ２００は、破線ボックスにより表される追加のコア２０２Ｎまでの複数の追加のコアを含み得る。コア２０２Ａ〜Ｎの各々は、１または複数の内部キャッシュユニット２０４Ａ〜Ｎを含む。一実施形態において、各コアは、１または複数の共有キャッシュユニット２０６へのアクセスも有する。
【００３１】
内部キャッシュユニット２０４Ａ〜Ｎ、および共有キャッシュユニット２０６は、プロセッサ２００内におけるキャッシュメモリ階層を表す。キャッシュメモリ階層は、各コア内の少なくとも１つのレベルの複数の命令およびデータキャッシュ、ならびにレベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または複数の他のレベルのキャッシュのような１または複数のレベルの中間レベルの共有キャッシュを含み得、外部メモリの前の最高レベルのキャッシュは、ラストレベルキャッシュ（ＬＬＣ）として分類される。一実施形態において、キャッシュコヒーレンシロジックは、様々なキャッシュユニット２０６および２０４Ａ〜Ｎ間のコヒーレンシを維持する。
【００３２】
プロセッサ２００は、１または複数のバスコントローラユニット２１６およびシステムエージェント２１０のセットも含み得る。１または複数のバスコントローラユニットは、１または複数の周辺構成要素相互接続バス（例えば、ＰＣＩ、ＰＣＩエクスプレス）のような複数の周辺機器バスのセットを管理する。システムエージェント２１０は、様々なプロセッサコンポーネントのための管理機能を提供する。一実施形態において、システムエージェント２１０は、様々な外部メモリデバイス（図示せず）へのアクセスを管理するべく、１または複数の統合メモリコントローラ２１４を含む。
【００３３】
一実施形態において、コア２０２Ａ〜Ｎのうちの１または複数は、同時のマルチスレッディングのためのサポートを含む。そのような実施形態において、システムエージェント２１０は、マルチスレッド処理中にコア２０２Ａ〜Ｎを調整および動作させるための複数のコンポーネントを含む。更に、システムエージェント２１０は、電力制御ユニット（ＰＣＵ）を含み得、電力制御ユニットは、コア２０２Ａ〜Ｎおよびグラフィックスプロセッサ２０８の電力状態を調整するロジックおよび複数のコンポーネントを含む。
【００３４】
更に、プロセッサ２００は、複数のグラフィックス処理オペレーションを実行するグラフィックスプロセッサ２０８を含む。一実施形態において、グラフィックスプロセッサ２０８は、共有キャッシュユニット２０６、および１または複数の統合メモリコントローラ２１４を含むシステムエージェントユニット２１０のセットと結合する。一実施形態において、ディスプレイコントローラ２１１は、１または複数の結合されたディスプレイへのグラフィックスプロセッサの出力を駆動するべく、グラフィックスプロセッサ２０８と結合される。ディスプレイコントローラ２１１は、少なくとも１つの相互接続を介してグラフィックスプロセッサと結合された別個のモジュールであってもよく、またはグラフィックスプロセッサ２０８もしくはシステムエージェント２１０内に統合されてもよい。
【００３５】
一実施形態において、リングベースの相互接続ユニット２１２は、プロセッサ２００の複数の内部コンポーネントを結合するべく用いられる。しかし、当技術分野において周知の複数の技術を含む、ポイントツーポイント相互接続、スイッチ相互接続、または他の複数の技術等、代替的な相互接続ユニットが用いられてもよい。一実施形態において、グラフィックスプロセッサ２０８は、Ｉ／Ｏリンク２１３を介してリング相互接続２１２と結合する。
【００３６】
例示的なＩ／Ｏリンク２１３は、様々なプロセッサコンポーネントとｅＤＲＡＭモジュールのような高性能エンベデッドメモリモジュール２１８との間の通信を容易にするパッケージＩ／Ｏ相互接続を含む、複数の様々なＩ／Ｏ相互接続のうちの少なくとも１つを表す。一実施形態において、コア２０２〜Ｎおよびグラフィックスプロセッサ２０８の各々は、共有ラストレベルキャッシュとしてエンベデッドメモリモジュール２１８を用いる。
【００３７】
一実施形態において、コア２０２Ａ〜Ｎは、同一の命令セットアーキテクチャを実行する同種のコアである。別の実施形態において、コア２０２Ａ〜Ｎは、命令セットアーキテクチャ（ＩＳＡ）の観点からは異種であり、コア２０２Ａ〜Ｎのうちの１または複数は、第１の命令セットを実行するが、複数の他のコアのうちの少なくとも１つは、第１の命令セットまたは異なる命令セットのサブセットを実行する。
【００３８】
プロセッサ２００は、いくつかの処理技術、例えば、相補型金属酸化膜半導体（ＣＭＯＳ）、バイポーラ接合／相補型金属酸化膜半導体（ＢｉＣＭＯＳ）またはＮ型金属酸化膜半導体ロジック（ＮＭＯＳ）のいずれかを用いる、１または複数の基板の一部であるか、またはこれらの上に実装され得る。更に、プロセッサ２００は、複数の他のコンポーネントに加えて、１または複数のチップ上に実装され、または図示される複数のコンポーネントを有するシステムオンチップ（ＳＯＣ）集積回路として実装され得る。
【００３９】
図３は、ディスクリートグラフィックス処理ユニットであり得るか、または複数のプロセッシングコアと統合されたグラフィックスプロセッサであり得る、グラフィックスプロセッサ３００の一実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、グラフィックスプロセッサ上の複数のレジスタにメモリマッピングされたＩ／Ｏインタフェースと、プロセッサメモリ内に置かれる複数のコマンドにより通信される。グラフィックスプロセッサ３００は、メモリにアクセスするためのメモリインタフェース３１４を含む。メモリインタフェース３１４は、ローカルメモリ、１または複数の内部キャッシュ、１または複数の共有外部キャッシュ、および／またはシステムメモリへのインタフェースであり得る。
【００４０】
グラフィックスプロセッサ３００は、ディスプレイ出力データをディスプレイデバイス３２０に駆動するディスプレイコントローラ３０２も含む。ディスプレイコントローラ３０２は、ディスプレイ用の１または複数のオーバーレイ平面のためのハードウェアと、動画またはユーザインタフェース要素の複数の層の構成物とを含む。一実施形態において、グラフィックスプロセッサ３００は、ＭＰＥＧ２のようなムービングピクチャエクスパーツグループ（ＭＰＥＧ）フォーマット、Ｈ．２６４／ＭＰＥＧ４  ＡＶＣのようなアドバンスドビデオコーディング（ＡＶＣ）フォーマット、および米国映画テレビ技術者協会（ＳＭＰＴＥ）４２１Ｍ／ＶＣ−１、ならびにジョイントフォトグラフィックエクスパーツグループ（ＪＰＥＧ）、およびモーションＪＰＥＧ（ＭＪＰＥＧ）フォーマットのようなＪＰＥＧフォーマットを含むがこれらに限定されない、１または複数のメディアエンコードフォーマットへ、これらから、またはこれらの間でメディアをエンコード、デコード、またはトランスコードするビデオコーデックエンジン３０６を含む。
【００４１】
一実施形態において、グラフィックスプロセッサ３００は、例えば、ビット境界ブロック転送を含む、複数の２次元（２Ｄ）ラスタライザオペレーションを実行するブロック画像転送（ＢＬＩＴ）エンジン３０４を含む。しかし、一実施形態において、複数の２Ｄグラフィックスオペレーションは、グラフィックス処理エンジン（ＧＰＥ）３１０の１または複数のコンポーネントを用いて実行される。グラフィックス処理エンジン３１０は、複数の３次元（３Ｄ）グラフィックスオペレーションおよびメディアオペレーションを含む、グラフィックスオペレーションを実行するための演算エンジンである。
【００４２】
ＧＰＥ３１０は、３Ｄプリミティブ図形（例えば、矩形、トライアングル等）に対して機能する複数の処理機能を用いて、複数の３次元画像およびシーンをレンダリングするなど、複数の３Ｄオペレーションを実行するための３Ｄパイプライン３１２を含む。３Ｄパイプライン３１２は、要素内の様々なタスクを実行し、および／または３Ｄ／メディアサブシステム３１５に複数の実行スレッドをスポーン（ｓｐａｗｎ）するプログラミング可能な複数の固定関数要素を含む。３Ｄパイプライン３１２は、複数のメディアオペレーションを実行するべく用いられ得るが、ＧＰＥ３１０の実施形態は、具体的には、動画の後処理および画像強調等の複数のメディアオペレーションを実行するべく用いられるメディアパイプライン３１６も含む。
【００４３】
一実施形態において、メディアパイプライン３１６は、ビデオコーデックエンジン３０６の代替に、またはこれの代わりに動画デコードの加速、動画のインターレース解除、および動画エンコードの加速等、１または複数の専用メディアオペレーションを実行する、固定関数またはプログラミング可能なロジックユニットを含む。一実施形態において、メディアパイプライン３１６は更に、３Ｄ／メディアサブシステム３１５において実行するための複数のスレッドをスポーンする、スレッドスポーンユニットを含む。スポーンされた複数のスレッドは、３Ｄ／メディアサブシステムに含まれる１または複数のグラフィックス実行ユニット上で複数のメディアオペレーションのための演算を実行する。
【００４４】
３Ｄ／メディアサブシステム３１５は、３Ｄパイプライン３１２およびメディアパイプライン３１６によりスポーンされた複数のスレッドを実行するためのロジックを含む。一実施形態において、複数のパイプラインは、複数のスレッド実行要求を３Ｄ／メディアサブシステム３１５に送信する。３Ｄ／メディアサブシステム３１５は、利用可能な複数のスレッド実行リソースに対する様々な要求を調整およびディスパッチするためのスレッドディスパッチロジックを含む。複数の実行リソースは、３Ｄおよびメディアスレッドを処理する複数のグラフィックス実行ユニットのアレイを含む。一実施形態において、３Ｄ／メディアサブシステム３１５は、複数のスレッド命令およびデータのための１または複数の内部キャッシュを含む。一実施形態において、サブシステムは、複数のスレッド間のデータを共有し、出力データを格納する複数のレジスタおよびアドレス指定可能メモリを含む、共有メモリも含む。
【００４５】
［３Ｄ／メディア処理−図４］
図４は、グラフィックスプロセッサ用のグラフィックス処理エンジン４１０の実施形態のブロック図である。一実施形態において、グラフィックス処理エンジン（ＧＰＥ）４１０は、図３に示されるＧＰＥ３１０の１つのバージョンである。ＧＰＥ４１０は、３Ｄパイプライン４１２およびメディアパイプライン４１６を含み、その各々は、図３の３Ｄパイプライン３１２およびメディアパイプライン３１６の実装と異なるか、またはこれに類似するかのいずれかであり得る。
【００４６】
一実施形態において、ＧＰＥ４１０は、コマンドストリーマ４０３と結合し、コマンドストリーマ４０３は、コマンドストリームをＧＰＥ３Ｄパイプライン４１２およびメディアパイプライン４１６に提供する。コマンドストリーマ４０３は、システムメモリ、または内部キャッシュメモリおよび共有キャッシュメモリのうちの１または複数であり得るメモリと結合される。コマンドストリーマ４０３は、メモリから複数のコマンドを受信し、これらのコマンドを３Ｄパイプライン４１２および／またはメディアパイプライン４１６に送信する。３Ｄパイプラインおよびメディアパイプラインは、各パイプライン内のロジックによる複数のオペレーションを実行し、または１または複数の実行スレッドを実行ユニットアレイ４１４にディスパッチすることにより、複数のコマンドを処理する。一実施形態において、実行ユニットアレイ４１４はスケーラブルであり、その結果、アレイは、ＧＰＥ４１０のターゲット電力および性能レベルに基づいて変わり得る数の実行ユニットを含む。
【００４７】
サンプリングエンジン４３０は、メモリ（例えば、キャッシュメモリまたはシステムメモリ）および実行ユニットアレイ４１４と結合する。一実施形態において、サンプリングエンジン４３０は、実行ユニットアレイ４１４がグラフィックスおよびメディアデータをメモリから読み取ることを可能にするスケーラブルな実行ユニットアレイ４１４のためのメモリアクセスメカニズムを提供する。一実施形態において、サンプリングエンジン４３０は、メディアに対する複数の専用画像サンプリングオペレーションを実行するロジックを含む。
【００４８】
サンプリングエンジン４３０における専用メディアサンプリングロジックは、ノイズ除去／インターレース解除モジュール４３２、動き推定モジュール４３４、および画像スケーリング・フィルタリングモジュール４３６を含む。ノイズ除去／インターレース解除モジュール４３２は、デコードされる動画データに対してノイズ除去またはインターレース解除アルゴリズムのうちの１または複数を実行するロジックを含む。インターレース解除ロジックは、インターレース済みの動画コンテンツの複数の交互フィールドを組み合わせて単一のフレームの動画にする。ノイズ除去ロジックは、動画および画像データからデータノイズを低減または除去する。一実施形態において、ノイズ除去ロジックおよびインターレース解除ロジックは、動き適応型であり、動画データにおいて検出された動きの量に基づく空間的または時間的フィルタリングを用いる。一実施形態において、ノイズ除去／インターレース解除モジュール４３２は、（例えば、動き推定エンジン４３４内に）専用の動き検出ロジックを含む。
【００４９】
動き推定エンジン４３４は、動きベクトル推定および動画データに関する予測等の複数の動画加速機能を実行することにより、複数の動画オペレーションのためのハードウェアの加速を提供する。動き推定エンジンは、複数の連続的動画フレーム間の画像データ変換を記載する複数の動きベクトルを決定する。一実施形態において、グラフィックスプロセッサのメディアコーデックは、別の場合には汎用プロセッサの使用を実行するべく演算集約的であり得るマクロブロックレベルで動画に複数のオペレーションを実行する、動画動き推定エンジン４３４を用いる。一実施形態において、動き推定エンジン４３４は一般に、動画データ内の動きの方向または大きさに感応性または適応性である動画デコードおよび複数の処理機能を支援するべく、複数のグラフィックスプロセッサコンポーネントに利用可能である。
【００５０】
画像スケーリング・フィルタリングモジュール４３６は、生成される画像および動画の視覚的品質を高めるべく複数の画像処理オペレーションを実行する。一実施形態において、画像スケーリング・フィルタリングモジュール４３６は、データを実行ユニットアレイ４１４に提供する前に、サンプリングオペレーション中に画像および動画データを処理する。
【００５１】
一実施形態において、グラフィックス処理エンジン４１０は、データポート４４４を含み、データポート４４４は、メモリにアクセスするために複数のグラフィックスサブシステム用の追加のメカニズムを提供する。データポート４４４は、レンダリングターゲット書き込み、コンスタントバッファ読み取り、スクラッチメモリ空間の読み取り／書き込み、およびメディアサーフェスアクセスを含む複数のオペレーションのためのメモリアクセスを容易にする。一実施形態において、データポート４４４は、メモリへの複数のアクセスをキャッシュするキャッシュメモリ空間を含む。キャッシュメモリは、単一のデータキャッシュであり、またはデータポートを介してメモリにアクセスする複数のサブシステム用の複数のキャッシュ（例えば、レンダリングバッファキャッシュ、コンスタントバッファキャッシュ等）に分離され得る。一実施形態において、実行ユニットアレイ４１４における実行ユニット上で実行される複数のスレッドは、グラフィックス処理エンジン４１０の複数のサブシステムの各々を結合するデータ配信相互接続を介して複数のメッセージを交換することにより、データポートと通信する。
【００５２】
［実行ユニット−図５〜図７］
図５は、グラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、リング相互接続５０２、パイプラインフロントエンド５０４、メディアエンジン５３７、およびグラフィックスコア５８０Ａ〜Ｎを含む。リング相互接続５０２は、複数の他のグラフィックスプロセッサ、または１もしくは複数の汎用プロセッサコアを含む複数の他の処理ユニットに、グラフィックスプロセッサを結合する。一実施形態において、グラフィックスプロセッサは、マルチコア処理システム内に統合される多くのプロセッサのうちの１つである。
【００５３】
グラフィックスプロセッサは、リング相互接続５０２を介して複数のコマンドのバッチを受信する。複数の受信コマンドは、パイプラインフロントエンド５０４におけるコマンドストリーマ５０３により変換される。グラフィックスプロセッサは、グラフィックスコア５８０Ａ〜Ｎを介して３Ｄジオメトリ処理およびメディア処理を実行する、スケーラブルな実行ロジックを含む。３Ｄジオメトリ処理コマンドについては、コマンドストリーマ５０３は、複数のコマンドをジオメトリパイプライン５３６に提供する。少なくともいくつかのメディア処理コマンドについては、コマンドストリーマ５０３は、複数のコマンドを、メディアエンジン５３７と結合するビデオフロントエンド５３４に提供する。メディアエンジン５３７は、動画および画像の後処理のための動画質エンジン（ＶＱＥ）５３０と、ハードウェアにより加速されるメディアデータのエンコードおよびデコードを提供するマルチフォーマットエンコード／デコード（ＭＦＸ）エンジン５３３とを含む。ジオメトリパイプライン５３６およびメディアエンジン５３７は各々、少なくとも１つのグラフィックスコア５８０Ａにより提供されるスレッド実行リソース用の複数の実行スレッドを生成する。
【００５４】
グラフィックスプロセッサは、モジュラコア５８０Ａ〜Ｎ（コアスライスと称される場合がある）を特徴付けるスケーラブルなスレッド実行リソースを含み、各々は、複数のサブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎ（コアサブスライスと称される場合がある）を有する。グラフィックスプロセッサは、任意の数のグラフィックスコア５８０Ａ〜５８０Ｎを有し得る。一実施形態において、グラフィックスプロセッサは、少なくとも第１のサブコア５５０Ａおよび第２のサブコア５６０Ａを有するグラフィックスコア５８０Ａを含む。別の実施形態において、グラフィックスプロセッサは、１つのサブコア（例えば５５０Ａ）を有する低電力プロセッサである。一実施形態において、グラフィックスプロセッサは、複数のグラフィックスコア５８０Ａ〜Ｎを含み、それらの各々は、複数の第１のサブコア５５０Ａ〜Ｎのセットと、複数の第２のサブコア５６０Ａ〜Ｎのセットとを含む。複数の第１のサブコア５５０Ａ〜Ｎのセットにおける各サブコアは、少なくとも複数の実行ユニット５５２Ａ〜Ｎと、複数のメディア／テクスチャサンプラ５５４Ａ〜Ｎとの第１のセットを含む。複数の第２のサブコア５６０Ａ〜Ｎのセットにおける各サブコアは、少なくとも複数の実行ユニット５６２Ａ〜Ｎと、複数サンプラ５６４Ａ〜Ｎとの第２のセットを含む。一実施形態において、各サブコア５５０Ａ〜Ｎ、５６０Ａ〜Ｎは、複数の共有リソース５７０Ａ〜Ｎのセットを共有する。一実施形態において、複数の共有リソースは、共有キャッシュメモリおよびピクセルオペレーションロジックを含む。他の複数の共有リソースも、グラフィックスプロセッサの様々な実施形態に含まれてもよい。
【００５５】
図６は、グラフィックス処理エンジンの一実施形態において使用される複数の処理要素のアレイを含む、スレッド実行ロジック６００を図示する。一実施形態において、スレッド実行ロジック６００は、ピクセルシェーダ６０２、スレッドディスパッチャ６０４、命令キャッシュ６０６、複数の実行ユニット６０８Ａ〜Ｎを含むスケーラブルな実行ユニットアレイ、サンプラ６１０、データキャッシュ６１２、およびデータポート６１４を含む。一実施形態において、含まれる複数のコンポーネントは、複数のコンポーネントの各々とリンクする相互接続ファブリックを介して相互接続される。スレッド実行ロジック６００は、命令キャッシュ６０６、データポート６１４、サンプラ６１０、および実行ユニットアレイ６０８Ａ〜Ｎのうちの１または複数を介して、システムメモリまたはキャッシュメモリのようなメモリへの１または複数の接続を含む。一実施形態において、各実行ユニット（例えば６０８Ａ）は、複数の同時のスレッドを実行してスレッド毎に並行に複数のデータ要素を処理することができる個別のベクトルプロセッサである。実行ユニットアレイ６０８Ａ〜Ｎは、任意の数の個別の実行ユニットを含む。
【００５６】
一実施形態において、実行ユニットアレイ６０８Ａ〜Ｎは主に、「シェーダ」プログラムを実行するべく用いられる。一実施形態において、アレイ６０８Ａ〜Ｎにおける実行ユニットは、多くの標準的３Ｄグラフィックスシェーダ命令に対するネイティブサポートを含む命令セットを実行し、従って複数のグラフィックスライブラリからのシェーダプログラム（例えば、Ｄｉｒｅｃｔ  ３ＤおよびＯｐｅｎＧＬ）は、最小の変換で実行される。複数の実行ユニットは、頂点およびジオメトリ処理（例えば、頂点プログラム、ジオメトリプログラム、頂点シェーダ）、ピクセル処理（例えば、ピクセルシェーダ、フラグメントシェーダ）、および汎用処理（例えば、演算およびメディアシェーダ）をサポートする。
【００５７】
実行ユニットアレイ６０８Ａ〜Ｎにおける各実行ユニットは、複数のデータ要素のアレイ上で動作する。データ要素の数は、命令に対する「実行サイズ」またはチャネルの数である。実行チャネルは、データ要素のアクセス、マスキング、および複数の命令内のフロー制御のための実行の論理ユニットである。チャネルの数は、特定のグラフィックスプロセッサに対する物理ＡＬＵまたはＦＰＵの数から独立している場合がある。実行ユニット６０８Ａ〜Ｎは、整数および浮動小数点のデータタイプをサポートする。
【００５８】
実行ユニット命令セットは、複数の単一命令多重データ（ＳＩＭＤ）命令を含む。様々なデータ要素は、パックドデータのタイプとしてレジスタに格納され得、実行ユニットは、複数の要素のデータサイズに基づいて様々な要素を処理する。例えば、２５６ビット幅のベクトル上で動作する場合、ベクトルの２５６ビットは、レジスタに格納され、実行ユニットは、４個の別個の６４ビットパックドデータ要素（クワッドワード（ＱＷ）サイズのデータ要素）、８個の別個の３２ビットパックドデータ要素（ダブルワード（ＤＷ）サイズのデータ要素）、１６個の別個の１６ビットパックドデータ要素（ワード（Ｗ）サイズのデータ要素）、または３２個の別個の８ビットデータ要素（バイト（Ｂ）サイズのデータ要素）としてベクトル上で動作する。しかし、異なる複数のベクトル幅およびレジスタサイズが可能である。
【００５９】
１または複数の内部命令キャッシュ（例えば、６０６）は、スレッド実行ロジック６００に含まれ、実行ユニットのための複数のスレッド命令をキャッシュする。一実施形態において、スレッド実行中にスレッドデータをキャッシュする１または複数のデータキャッシュ（例えば６１２）が含まれる。複数の３Ｄオペレーションのためのテクスチャサンプリングおよび複数のメディアオペレーションのためのメディアサンプリングを提供するサンプラ６１０が含まれる。一実施形態において、サンプラ６１０は、サンプリングされたデータを実行ユニットに提供する前に、サンプリング処理中にテクスチャまたはメディアデータを処理する専用テクスチャまたはメディアサンプリング機能を含む。
【００６０】
実行中に、グラフィックスおよびメディアパイプラインは、スレッドスポーンおよびディスパッチロジックにより複数のスレッド開始要求をスレッド実行ロジック６００に送信する。スレッド実行ロジック６００は、グラフィックスおよびメディアパイプラインからの複数のスレッド開始要求を調整し、１または複数の実行ユニット６０８Ａ〜Ｎ上で要求された複数のスレッドをインスタンス化する、ローカルのスレッドディスパッチャ６０４を含む。例えば、ジオメトリパイプライン（例えば、図５の５３６）は、頂点処理、テセレーション、またはジオメトリ処理のスレッドをスレッド実行ロジック６００にディスパッチする。スレッドディスパッチャ６０４は、実行する複数のシェーダプログラムからのランタイムスレッドスポーン要求も処理し得る。
【００６１】
複数の幾何学的オブジェクトのグループが処理され、ピクセルデータにラスタライズすると、ピクセルシェーダ６０２が呼び出され、更に出力情報を演算することで、結果が出力面に書き込まれる（例えば、色バッファ、デプスバッファ、ステンシルバッファ等）。一実施形態において、ピクセルシェーダ６０２は、ラスタライズされたオブジェクトにわたって補間される様々な頂点アトリビュートの値を算出する。次に、ピクセルシェーダ６０２は、ＡＰＩにより提供されるピクセルシェーダプログラムを実行する。ピクセルシェーダプログラムを実行するべく、ピクセルシェーダ６０２は、スレッドディスパッチャ６０４により複数のスレッドを実行ユニット（例えば６０８Ａ）にディスパッチする。ピクセルシェーダ６０２は、メモリに格納された複数のテクスチャマップにおけるテクスチャデータにアクセスするべく、サンプラ６１０におけるテクスチャサンプリングロジックを用いる。テクスチャデータおよび入力ジオメトリデータに対する複数の算術オペレーションは、幾何学フラグメント毎にピクセルカラーデータを演算するか、または１または複数のピクセルを更なる処理から破棄する。
【００６２】
一実施形態において、データポート６１４は、スレッド実行ロジック６００の出力処理されたデータのためのメモリアクセスメカニズムを、グラフィックスプロセッサ出力パイプライン上で処理するためのメモリに提供する。一実施形態において、データポート６１４は、データポートを介するメモリアクセスのためにデータをキャッシュする１または複数のキャッシュメモリ（例えば、データキャッシュ６１２）を含み、またはこれと結合する。
【００６３】
図７は、一実施形態によるグラフィックスプロセッサ実行ユニット命令フォーマットを図示するブロック図である。一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、複数のフォーマットの命令を有する命令セットをサポートする。実線で囲まれた複数のボックスは、一般に実行ユニット命令に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数の命令のサブセットのみに含まれる複数のコンポーネントを含む。説明され、図示される命令フォーマットは、命令が処理されると、命令のデコードからもたらされる複数のマイクロオペレーションとは異なり、実行ユニットに提供される複数の命令であるという点で、マクロ命令である。
【００６４】
一実施形態において、複数のグラフィックスプロセッサ実行ユニットは、１２８ビットフォーマット７１０の複数の命令をネイティブにサポートする。６４ビット圧縮命令フォーマット７３０は、選択される命令、命令オプション、およびオペランドの数に基づいていくつかの命令に対して利用可能である。ネイティブな１２８ビットフォーマット７１０は、全ての命令オプションにアクセスを提供するが、いくつかのオプションおよびオペレーションは、６４ビットフォーマット７３０において制限されている。６４ビットフォーマット７３０において利用可能であるネイティブな命令は、実施形態により異なる。一実施形態において、命令は、インデックスフィールド７１３における複数のインデックス値のセットを用いて部分的に圧縮される。実行ユニットハードウェアは、複数のインデックス値に基づいて複数の圧縮テーブルのセットを参照し、１２８ビットフォーマット７１０においてネイティブな命令を再構成するべく、複数の圧縮テーブル出力を用いる。
【００６５】
フォーマット毎に、命令オペコード７１２は、実行ユニットが実行するべきオペレーションを規定する。複数の実行ユニットは、各オペランドの複数のデータ要素にわたって並行に各命令を実行する。例えば、加算命令に応答して、実行ユニットは、テクスチャ要素または画素を表す各色チャネルにわたって同時の加算オペレーションを実行する。デフォルトで、実行ユニットは、複数のオペランドの全てのデータチャネルにわたって各命令を実行する。命令制御フィールド７１２は、チャネル選択（例えば断定）およびデータチャネルの順序（例えばスウィズル）のような特定の実行オプションに対する制御を可能にする。１２８ビット命令７１０については、実行サイズフィールド７１６は、並行に実行されるデータチャネルの数を制限する。実行サイズフィールド７１６は、６４ビットの圧縮命令フォーマット７３０で用いるために利用可能でない。
【００６６】
いくつかの実行ユニット命令は、２つのソースオペランドｓｒｃ０  ７２０、ｓｒｃ１  ７２２、および１つのデスティネーション７１８を含む、最大３つのオペランドを有する。一実施形態において、複数の実行ユニットは、デュアルのデスティネーション命令をサポートし、デスティネーションのうちの１つが暗示される。複数のデータ操作命令は、第３のソースオペランド（例えば、ＳＲＣ２７２４）を有し得、命令オペコードＪＪ１２は、ソースオペランドの数を決定する。命令の最後のソースオペランドは、命令と共に渡されるイミディエイト（例えば、ハードコードされた）値であり得る。
【００６７】
一実施形態において、複数の命令は、オペコードデコード７４０を単純化するべく、オペコードビットフィールドに基づいてグループ化される。８ビットのオペコードについては、ビット４、５、および６は、実行ユニットがオペコードのタイプを決定することを可能にする。示される厳密なオペコードのグループ化は、例示的なものである。一実施形態において、移動およびロジックオペコードグループ７４２は、データ移動およびロジック命令（例えば、ｍｏｖ、ｃｍｐ）を含む。移動およびロジックグループ７４２は、５つの最も重要なビット（ＭＳＢ）を共有し、移動命令は、００００ｘｘｘｘｂ（例えば、０ｘ０ｘ）の形式であり、ロジック命令は、０００１ｘｘｘｘｂ（例えば、０ｘ０１）の形式である。フロー制御命令グループ７４４（例えば、ｃａｌｌ、ｊｍｐ）は、００１０ｘｘｘｘｂ（例えば、０ｘ２０）の形式の複数の命令を含む。その他の命令グループ７４６は、００１１ｘｘｘｘｂ（例えば、０ｘ３０）の形式の同期命令（例えば、ｗａｉｔ、ｓｅｎｄ）を含む、複数の命令のミックスを含む。並列マス命令グループ７４８は、０１００ｘｘｘｘｂ（例えば、０ｘ４０）の形式のコンポーネント様式の複数の算術命令（例えば、ａｄｄ、ｍｕｌ）を含む。並列マスグループ７４８は、複数のデータチャネルにわたって並行に複数の算術オペレーションを実行する。ベクトルマスグループ７５０は、０１０１ｘｘｘｘｂ（例えば、０ｘ５０）の形式の複数の算術命令（例えば、ｄｐ４）を含む。ベクトルマスグループは、点乗積計算のような算術を複数のベクトルオペランドに実行する。
【００６８】
［グラフィックスパイプライン−図８］
図８は、グラフィックスパイプライン８２０、メディアパイプライン８３０、ディスプレイエンジン８４０、スレッド実行ロジック８５０、およびレンダリング出力パイプライン８７０を含むグラフィックスプロセッサの別の実施形態のブロック図である。一実施形態において、グラフィックスプロセッサは、１または複数の汎用プロセッシングコアを含むマルチコア処理システム内のグラフィックスプロセッサである。グラフィックスプロセッサは、１または複数の制御レジスタ（図示せず）へのレジスタ書き込みにより、またはリング相互接続８０２を介してグラフィックスプロセッサに発行された複数のコマンドにより、制御される。リング相互接続８０２は、他のグラフィックスプロセッサまたは汎用プロセッサ等の複数の他の処理コンポーネントに、グラフィックスプロセッサを結合する。リング相互接続からの複数のコマンドは、グラフィックスパイプライン８２０またはメディアパイプライン８３０の個別のコンポーネントに複数の命令を提供するコマンドストリーマ８０３により、解釈される。
【００６９】
コマンドストリーマ８０３は、頂点データをメモリから読み取り、コマンドストリーマ８０３により提供された複数の頂点処理コマンドを実行する、頂点フェッチャ８０５のコンポーネントのオペレーションを管理する。頂点フェッチャ８０５は、頂点データを頂点シェーダ８０７に提供し、頂点シェーダ８０７は、座標空間変換および複数のライティング（ｌｉｇｈｔｉｎｇ）オペレーションを各頂点に実行する。頂点フェッチャ８０５および頂点シェーダ８０７は、スレッドディスパッチャ８３１を介して複数の実行スレッドを実行ユニット８５２Ａ、８５２Ｂにディスパッチすることにより、複数の頂点処理命令を実行する。
【００７０】
一実施形態において、実行ユニット８５２Ａ、８５２Ｂは、グラフィックスおよびメディアオペレーションを実行するための命令セットを有する複数のベクトルプロセッサのアレイである。実行ユニット８５２Ａ、８５２Ｂは、各アレイに固有であるか、または複数のアレイ間で共有される取り付け済みのＬ１キャッシュ８５１を有する。キャッシュは、データキャッシュ、命令キャッシュ、または異なるパーティションにデータおよび命令を含むようにパーティショニングされるシングルキャッシュとして構成され得る。
【００７１】
一実施形態において、グラフィックスパイプライン８２０は、複数の３Ｄオブジェクトのハードウェア加速テセレーションを実行する複数のテセレーションコンポーネントを含む。プログラミング可能なハルシェーダ８１１は、複数のテセレーションオペレーションを構成する。プログラミング可能なドメインシェーダ８１７は、テセレーション出力のバックエンド評価を提供する。テセレータ８１３は、ハルシェーダ８１１の指示で動作し、入力としてグラフィックスパイプライン８２０に提供される粗幾何学モデルに基づいて、詳細な複数の幾何学的オブジェクトのセットを生成する専用ロジックを含む。テセレーションが用いられない場合、テセレーションコンポーネント８１１、８１３、８１７は、バイパスされ得る。
【００７２】
完全な複数の幾何学的オブジェクトは、実行ユニット８５２Ａ、８５２Ｂにディスパッチされる１または複数のスレッドを通じてジオメトリシェーダ８１９により処理され得、またはクリッパ８２９に直接に進み得る。ジオメトリシェーダは、グラフィックスパイプラインの先行する複数の段階におけるような複数の頂点または頂点のパッチよりはむしろ、複数の幾何学的オブジェクト全体で動作する。テセレーションが無効にされると、ジオメトリシェーダ８１９は、入力を頂点シェーダ８０７から受信する。ジオメトリシェーダ８１９は、複数のテセレーションユニットが無効にされる場合、ジオメトリテセレーションを実行するように、ジオメトリシェーダプログラムによりプログラミング可能である。
【００７３】
ラスタライズする前に、頂点データは、クリッパ８２９により処理される。クリッパ８２９は、固定関数クリッパ、またはクリッピングおよびジオメトリシェーダ関数を有するプログラミング可能なクリッパのいずれかである。一実施形態において、レンダリング出力パイプライン８７０におけるラスタライザ８７３は、複数のピクセルシェーダをディスパッチして、複数の幾何学的オブジェクトをそれらの１ピクセル毎の表現に変換する。一実施形態において、ピクセルシェーダロジックは、スレッド実行ロジック８５０に含まれる。
【００７４】
グラフィックスエンジンは、データおよびメッセージがグラフィックスエンジンの複数の主要コンポーネント間を通ることを可能にする相互接続バス、相互接続ファブリック、またはいくつかの他の相互接続メカニズムを有する。一実施形態において、実行ユニット８５２Ａ、８５２Ｂおよび関連付けられるキャッシュ８５１、テクスチャおよびメディアサンプラ８５４、ならびにテクスチャ／サンプラキャッシュ８５８は、データポート８５６を介して相互接続し、メモリアクセスを実行し、グラフィックスエンジンの複数のレンダリング出力パイプラインコンポーネントと通信する。一実施形態において、サンプラ８５４、キャッシュ８５１、８５８、および実行ユニット８５２Ａ、８５２Ｂは各々、別個のメモリアクセスパスを有する。
【００７５】
一実施形態において、レンダリング出力パイプライン８７０は、頂点ベースの複数のオブジェクトをそれらの関連付けられるピクセルベースの表現に変換する、ラスタライザおよびデプステストコンポーネント８７３を含む。一実施形態において、ラスタライザロジックは、固定関数トライアングルおよびラインラスタライズを実行するウィンドウア（ｗｉｎｄｏｗｅｒ）／マスカ（ｍａｓｋｅｒ）ユニットを含む。一実施形態において、関連付けられたレンダリングバッファキャッシュ８７８およびデプスバッファキャッシュ８７９も利用可能である。ピクセルオペレーションコンポーネント８７７は、ピクセルベースの複数のオペレーションをデータに実行するが、いくつかの例において、２Ｄオペレーション（例えば、ブレンドを用いるビットブロック画像転送）に関連付けられるピクセルオペレーションは、２Ｄエンジン８４１により実行され、またはオーバーレイディスプレイ平面を用いるディスプレイコントローラ８４３により表示時間に代用される。一実施形態において、共有Ｌ３キャッシュ８７５は、全てのグラフィックスコンポーネントに利用可能であり、メインシステムメモリを用いることなくデータの共有を可能にする。
【００７６】
グラフィックスプロセッサのメディアパイプライン８３０は、メディアエンジン８３７およびビデオフロントエンド８３４を含む。一実施形態において、ビデオフロントエンド８３４は、複数のパイプラインコマンドをコマンドストリーマ８０３から受信する。しかし、一実施形態において、メディアパイプライン８３０は、別個のコマンドストリーマを含む。ビデオフロントエンド８３４は、コマンドをメディアエンジン８３７に送信する前に、複数のメディアコマンドを処理する。一実施形態において、メディアエンジンは、スレッドディスパッチャ８３１を通じてスレッド実行ロジック８５０にディスパッチするための複数のスレッドをスポーンする、スレッドスポーン機能を含む。
【００７７】
一実施形態において、グラフィックスエンジンは、ディスプレイエンジン８４０を含む。一実施形態において、ディスプレイエンジン８４０は、グラフィックスプロセッサの外部にあり、リング相互接続８０２またはいくつかの他の相互接続バスもしくはファブリックを介してグラフィックスプロセッサと結合する。ディスプレイエンジン８４０は、２Ｄエンジン８４１およびディスプレイコントローラ８４３を含む。ディスプレイエンジン８４０は、３Ｄパイプラインとは独立して動作することができる専用ロジックを含む。ディスプレイコントローラ８４３は、ディスプレイデバイス（図示せず）と結合する。ディスプレイデバイスは、ラップトップコンピュータにおけるようなシステム統合ディスプレイデバイスまたはディスプレイデバイスコネクタにより取り付けられる外部ディスプレイデバイスであってもよい。
【００７８】
グラフィックスパイプライン８２０およびメディアパイプライン８３０は、複数のグラフィックスおよびメディアプログラミングインタフェースに基づいて複数のオペレーションを実行するように構成可能であり、いずれか１つのアプリケーションプログラミングインタフェース（ＡＰＩ）に固有のものではない。一実施形態において、グラフィックスプロセッサ用のドライバソフトウェアは、特定のグラフィックスまたはメディアライブラリに固有のＡＰＩ呼び出しを、グラフィックスプロセッサにより処理され得る複数のコマンドに変換する。様々な実施形態において、サポートは、クロノスグループによりサポートされるオープングラフィックスライブラリ（ＯｐｅｎＧＬ）およびオープンコンピューティング言語（ＯｐｅｎＣＬ）、マイクロソフトコーポレーションのＤｉｒｅｃｔ３Ｄライブラリ、または一実施形態においてはＯｐｅｎＧＬおよびＤｉｒｅｃｔ３Ｄの両方に提供される。サポートは、オープンソースコンピュータビジョンライブラリ（ＯｐｅｎＣＶ）にも提供され得る。将来のＡＰＩのパイプラインからグラフィックスプロセッサのパイプラインにマッピングが行われ得る場合には、互換性のある３Ｄパイプラインを用いる将来のＡＰＩも、サポートされるであろう。
【００７９】
［グラフィックスパイプラインのプログラミング−図９Ａ〜図９Ｂ］
図９Ａは、一実施形態によるグラフィックスプロセッサコマンドフォーマットを図示するブロック図であり、図９Ｂは、一実施形態によるグラフィックスプロセッサコマンドシーケンスを図示するブロック図である。図９Ａにおける実線で囲まれた複数のボックスは、グラフィックスコマンドに一般に含まれる複数のコンポーネントを図示するが、破線は、任意選択であるか、または複数のグラフィックスコマンドのサブセットのみに含まれる複数のコンポーネントを含む。図９Ａの例示的なグラフィックスプロセッサコマンドフォーマット９００は、コマンドのターゲットクライアント９０２、コマンドオペレーションコード（オペコード）９０４、およびコマンドのための関連するデータ９０６を識別する複数のデータフィールドを含む。サブオペコード９０５およびコマンドサイズ９０８もいくつかのコマンドに含まれる。
【００８０】
クライアント９０２は、コマンドデータを処理するグラフィックスデバイスのクライアントユニットを指定する。一実施形態において、グラフィックスプロセッサコマンドパーサは、コマンドの更なる処理を条件付けて、コマンドデータを適切なクライアントユニットにルーティングするべく、各コマンドのクライアントフィールドを検査する。一実施形態において、グラフィックスプロセッサの複数のクライアントユニットは、メモリインタフェースユニット、レンダリングユニット、２Ｄユニット、３Ｄユニット、およびメディアユニットを含む。各クライアントユニットは、複数のコマンドを処理する、対応する処理パイプラインを有する。クライアントユニットによりコマンドが受信されると、クライアントユニットは、オペコード９０４を読み取り、存在する場合には、サブオペコード９０５は、実行するオペレーションを決定する。クライアントユニットは、コマンドのデータ９０６のフィールドにおける情報を用いてコマンドを実行する。いくつかのコマンドについては、明示的なコマンドサイズ９０８は、コマンドのサイズを指定することが予期される。一実施形態において、コマンドパーサは、コマンドオペコードに基づいて複数のコマンドの少なくともいくつかのサイズを自動的に決定する。一実施形態において、複数のコマンドは、ダブルワードの倍数によりアラインされる。
【００８１】
図９Ｂのフロー図は、例示のコマンドシーケンス９１０を示す。一実施形態において、グラフィックスプロセッサの実施形態を特徴付けるデータ処理システムのソフトウェアまたはファームウェアは、複数のグラフィックスオペレーションのセットを設定、実行、および終了するように示されたコマンドシーケンスのバージョンを用いる。例示的目的で例示のコマンドシーケンスが示され、説明されている。しかし、複数の実施形態は、これらのコマンドまたはこのコマンドシーケンスに限定されない。更に、これらのコマンドは、コマンドシーケンスにおける複数のコマンドのバッチとして発行されてもよく、従ってグラフィックスプロセッサは、少なくとも部分的に同時に複数のコマンドのシーケンスを処理する。
【００８２】
例示のコマンドシーケンス９１０は、パイプラインフラッシュコマンド９１２で開始し、任意のアクティブなグラフィックスパイプラインにパイプライン用の現在保留中の複数のコマンドを完了させ得る。一実施形態において、３Ｄパイプライン９２２およびメディアパイプライン９２４は、同時に動作しない。パイプラインフラッシュは、アクティブなグラフィックスパイプラインに任意の保留中のコマンドを完了させるべく実行される。パイプラインフラッシュに応答して、グラフィックスプロセッサ用のコマンドパーサは、アクティブな複数の描画エンジンが保留中の複数のオペレーションを完了し、関連する複数の読み取りキャッシュが無効にされるまで、コマンド処理を一時停止する。任意選択で、「ダーティ」とマークを付けられたレンダリングキャッシュ内の任意のデータは、メモリにフラッシュされ得る。パイプラインフラッシュコマンド９１２は、パイプライン同期のために、つまりグラフィックスプロセッサを低電力状態にする前に用いられ得る。
【００８３】
パイプライン選択コマンド９１３は、コマンドシーケンスがグラフィックスプロセッサに複数のパイプライン間で明確に切り替えるように要求するときに用いられる。パイプライン選択コマンド９１３は、コンテキストが両方のパイプラインのためのコマンドを発行しない限り、パイプラインコマンドを発行する前に実行コンテキスト内で１度だけ必要とされる。一実施形態において、パイプラインフラッシュコマンド９１２は、パイプラインがパイプライン選択コマンド９１３により切り替えられる直前に必要とされる。
【００８４】
パイプライン制御コマンド９１４は、オペレーションのためのグラフィックスパイプラインを構成し、３Ｄパイプライン９２２およびメディアパイプライン９２４をプログラミングするべく用いられる。パイプライン制御コマンド９１４は、アクティブなパイプラインのためのパイプライン状態を構成する。一実施形態において、パイプライン制御コマンド９１４は、複数のコマンドのバッチを処理する前に、アクティブなパイプライン内の１または複数のキャッシュメモリからのデータをクリアするべく、パイプライン同期に用いられる。
【００８５】
複数のリターンバッファ状態コマンド９１６は、データを書き込む各パイプライン用の複数のリターンバッファのセットを構成するべく用いられる。いくつかのパイプラインオペレーションは、オペレーションが処理中に中間データを書き込む、１または複数のリターンバッファの割り当て、選択、または構成を必要とする。また、グラフィックスプロセッサは、出力データを格納して相互のスレッド通信を実行するべく、１または複数のリターンバッファも用いる。リターンバッファ状態９１６は、複数のパイプラインオペレーションのセットに用いる複数のリターンバッファのサイズおよび数の選択を含む。
【００８６】
コマンドシーケンスにおける残りの複数のコマンドは、複数のオペレーション用のアクティブなパイプラインに基づいて異なる。パイプラインの決定９２０に基づいて、コマンドシーケンスは、３Ｄパイプライン状態９３０で開始する３Ｄパイプライン９２２、またはメディアパイプライン状態９４０で開始するメディアパイプライン９２４に対して調整される。
【００８７】
３Ｄパイプライン状態９３０のための複数のコマンドは、３Ｄプリミティブコマンドが処理される前に構成される頂点バッファ状態、頂点要素状態、一定な色状態、デプスバッファ状態、および他の状態変数に対する複数の３Ｄ状態設定コマンドを含む。これらのコマンドの値は、用いられる特定の３Ｄ  ＡＰＩに少なくとも部分的に基づいて決定される。それらの要素が用いられない場合、複数の３Ｄパイプライン状態９３０コマンドは、特定のパイプライン要素を選択的に無効またはバイパスすることもできる。
【００８８】
３Ｄプリミティブ９３２のコマンドは、３Ｄパイプラインにより処理される複数の３Ｄプリミティブを送るべく用いられる。３Ｄプリミティブ９３２のコマンドによりグラフィックスプロセッサに渡される複数のコマンドおよび関連付けられるパラメータは、グラフィックスパイプラインにおける頂点フェッチ機能に転送される。頂点フェッチ機能は、複数の頂点データ構造体を生成するべく３Ｄプリミティブ９３２のコマンドデータを用いる。複数の頂点データ構造体は、１または複数のリターンバッファに格納される。３Ｄプリミティブ９３２のコマンドは、複数の頂点シェーダにより複数の３Ｄプリミティブに頂点オペレーションを実行するべく用いられる。複数の頂点シェーダを処理するべく、３Ｄパイプライン９２２は、複数のシェーダ実行スレッドを複数のグラフィックスプロセッサ実行ユニットにディスパッチする。
【００８９】
３Ｄパイプライン９２２は、実行９３４のコマンドまたはイベントによりトリガされる。一実施形態において、レジスタ書き込みは、コマンド実行をトリガする。一実施形態において、実行は、コマンドシーケンスにおける「ｇｏ」または「ｋｉｃｋ」コマンドによりトリガされる。一実施形態において、パイプライン同期コマンドを用いて、グラフィックスパイプラインを介してコマンドシーケンスをフラッシュするコマンド実行がトリガされる。３Ｄパイプラインは、複数の３Ｄプリミティブのためのジオメトリ処理を実行する。複数のオペレーションが完了すると、もたらされる複数の幾何学的オブジェクトがラスタライズされ、ピクセルエンジンは、もたらされるピクセルをカラーリングする。ピクセルシェーディングおよびピクセルバックエンドオペレーションを制御する追加の複数のコマンドもそれらのオペレーションのために含まれ得る。
【００９０】
例示のコマンドシーケンス９１０は、複数のメディアオペレーションを実行する場合、メディアパイプライン９２４のパスをたどる。一般に、メディアパイプライン９２４のためのプログラミングの特定の用途および態様は、メディアまたは実行される演算動作に依存する。特定のメディアデコードオペレーションは、メディアデコード中にメディアパイプラインにオフロードされ得る。メディアパイプラインもバイパスされ得、メディアデコードは、１または複数の汎用プロセッシングコアにより提供される複数のリソースを全体的または部分的に用いて実行され得る。一実施形態において、メディアパイプラインは、汎用グラフィックスプロセッサユニット（ＧＰＧＰＵ）の動作のための複数の要素も含み、グラフィックスプロセッサは、グラフィックスプリミティブのレンダリングに明らかに関係しない演算シェーダプログラムを用いてＳＩＭＤベクトルオペレーションを実行するべく用いられる。
【００９１】
メディアパイプライン９２４は、３Ｄパイプライン９２２と同様に構成される。複数のメディアパイプライン状態コマンド９４０のセットは、複数のメディアオブジェクトコマンド９４２の前のコマンド行列にディスパッチされ、または配置される。複数のメディアパイプライン状態コマンド９４０は、複数のメディアオブジェクトを処理するべく用いられる、複数のメディアパイプライン要素を構成するデータを含む。これは、エンコードまたはデコードフォーマットのようなメディアパイプライン内の動画デコードおよび動画エンコードロジックを構成するデータを含む。複数のメディアパイプライン状態コマンド９４０は、複数の状態設定のバッチを含む「間接的」状態要素に対する１または複数のポインタの使用もサポートする。
【００９２】
複数のメディアオブジェクトコマンド９４２は、メディアパイプラインにより処理するための複数のメディアオブジェクトに複数のポインタを提供する。複数のメディアオブジェクトは、処理されるべき動画データを含む複数のメモリバッファを含む。一実施形態において、全てのメディアパイプライン状態は、メディアオブジェクトコマンド９４２を発行する前に有効でなければならない。パイプライン状態が構成され、複数のメディアオブジェクトコマンド９４２が待ち行列に入れられると、メディアパイプライン９２４は、実行９４４のコマンドまたは同等の実行イベント（例えばレジスタ書き込み）によりトリガされる。次に、メディアパイプライン９２４からの出力は、３Ｄパイプライン９２２またはメディアパイプライン９２４により提供される複数のオペレーションにより後処理され得る。一実施形態において、複数のＧＰＧＰＵオペレーションは、メディアオペレーションと同様に構成され、実行される。
【００９３】
［グラフィックスソフトウェアアーキテクチャ−図１０］
図１０は、一実施形態によるデータ処理システムのための例示的なグラフィックスソフトウェアアーキテクチャを図示する。ソフトウェアアーキテクチャは、３Ｄグラフィックスアプリケーション１０１０、オペレーティングシステム１０２０、および少なくとも１つのプロセッサ１０３０を含む。プロセッサ１０３０は、グラフィックスプロセッサ１０３２、および１または複数の汎用プロセッサコア１０３４を含む。グラフィックスアプリケーション１０１０およびオペレーティングシステム１０２０は各々、データ処理システムのシステムメモリ１０５０において実行される。
【００９４】
一実施形態において、３Ｄグラフィックスアプリケーション１０１０は、複数のシェーダ命令１０１２を含む、１または複数のシェーダプログラムを含む。複数のシェーダ言語命令は、高水準シェーダ言語（ＨＬＳＬ）またはＯｐｅｎＧＬシェーダ言語（ＧＬＳＬ）のような高水準シェーダ言語によるものであってもよい。アプリケーションは、汎用プロセッサコア１０３４により実行するのに好適な機械言語による複数の実行可能命令１０１４も含む。アプリケーションは、頂点データにより定義される複数のグラフィックスオブジェクト１０１６も含む。
【００９５】
オペレーティングシステム１０２０は、マイクロソフトコーポレーションのマイクロソフトウィンドウズ（登録商標）オペレーティングシステム、プロプライエタリＵＮＩＸ（登録商標）様式のオペレーティングシステム、またはＬｉｎｕｘ（登録商標）カーネルの変形を用いるオープンソースＵＮＩＸ（登録商標）様式のオペレーティングシステムであってもよい。Ｄｉｒｅｃｔ３Ｄ  ＡＰＩが用いられる場合、オペレーティングシステム１０２０は、フロントエンドのシェーダコンパイラ１０２４を用いて、ＨＬＳＬの任意のシェーダ命令１０１２をより低水準のシェーダ言語にコンパイルする。コンパイルは、ジャストインタイムコンパイルであってもよく、またはアプリケーションは、共有プリコンパイルを実行し得る。一実施形態において、複数の高水準シェーダは、３Ｄグラフィックスアプリケーション１０１０のコンパイル中により低水準のシェーダへとコンパイルされる。
【００９６】
ユーザモードグラフィックスドライバ１０２６は、複数のシェーダ命令１０１２をハードウェア固有の表現に変換する、バックエンドのシェーダコンパイラ１０２７を含んでもよい。ＯｐｅｎＧＬ  ＡＰＩが用いられる場合、ＧＬＳＬ高水準言語のシェーダ命令１０１２は、コンパイルのためにユーザモードグラフィックスドライバ１０２６に渡される。ユーザモードグラフィックスドライバは、カーネルモードグラフィックスドライバ１０２９と通信するべく、オペレーティングシステムカーネルモード機能１０２８を用いる。カーネルモードグラフィックスドライバ１０２９は、複数のコマンドおよび命令をディスパッチするべく、グラフィックスプロセッサ１０３２と通信する。
【００９７】
様々なオペレーションまたは機能が本明細書において説明される限度において、それらはハードウェア回路、ソフトウェアコード、命令、構成、および／またはデータとして説明または定義され得る。コンテンツは、ハードウェアロジックで、または直接に実行可能なソフトウェア（「オブジェクト、または「実行可能な」形式）、ソースコード、グラフィックスエンジン上での実行のために設計された高水準シェーダコード、または特定のプロセッサもしくはグラフィックスコア用の命令セットによる低水準アセンブリ言語コードとして実施され得る。本明細書に説明される複数の実施形態におけるソフトウェアコンテンツは、コンテンツが格納された製造物品、または通信インタフェースを介してデータを送信するように通信インタフェースを動作させる方法により提供され得る。
【００９８】
非一時的機械可読ストレージ媒体は、機械に、説明される複数の機能またはオペレーションを実行させ得、記録可能／非記録可能媒体（例えば、リードオンリメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、磁気ディスクストレージ媒体、光ストレージ媒体、フラッシュメモリデバイス等）のような機械（例えば、コンピューティングデバイス、電子システム等）によりアクセス可能な形態で情報を格納する任意のメカニズムを含む。通信インタフェースは、メモリバスインタフェース、プロセッサバスインタフェース、インターネット接続、ディスクコントローラ等のような別のデバイスに通信するハードワイヤード、無線、光等の媒体のいずれかにインタフェース接続する任意のメカニズムを含む。通信インタフェースは、複数の構成パラメータを提供し、または通信インタフェースを準備して、ソフトウェアコンテンツを記載するデータ信号を提供するべく複数の信号を送信することにより構成される。通信インタフェースは、通信インタフェースに送信される１または複数のコマンドまたは信号によりアクセスされ得る。
【００９９】
説明される様々なコンポーネントは、説明される動作または機能を実行するための手段であり得る。本明細書に説明される各コンポーネントは、ソフトウェア、ハードウェア、またはこれらの組み合わせを含む。複数のコンポーネントは、ソフトウェアモジュール、ハードウェアモジュール、専用ハードウェア（例えば、特定用途向けハードウェア、特定用途向け集積回路（ＡＳＩＣ）、デジタル信号プロセッサ（ＤＳＰ）等）、エンベデッドコントローラ、ハードワイヤード回路等として実装され得る。本明細書において説明されるもの以外に、その範囲を逸脱することなく、本発明において開示される実施形態および実装に対して様々な修正が行われ得る。従って、本明細書における図示および例は、限定的な意味ではなく例示的な意味に解釈されるべきである。本発明の範囲は、以下の特許請求の範囲を参照することのみにより判断されるべきである。
【０１００】
効果的なテクスチャ圧縮のための装置および方法
下記の本発明の複数の実施形態は、高性能でスケーラブルな非可逆グラフィックステクスチャ圧縮をサポートしつつ、画像品質、圧縮率、およびブロックサイズの柔軟な選択を可能にする。一実施形態において、圧縮および圧縮解除の両方は、同一の１テクセル当たりのコストを有し、複数の積和命令のみを用いる。更に、テクセル圧縮解除は、複数の隣接テクセル間の空間的または時間的な依存性を必要としない。その結果として、本明細書に説明される複数の技術は、大規模な並列実装およびハードウェアの加速に特に好適である。
【０１０１】
前述の成果を実現するべく、本発明の一実施形態は、テクスチャ画像データのブロックを２つの座標の多変量関数として扱う。圧縮段階において、多変量関数は、各テクセルにおいてサンプリングされ、複数の中心点のスパースグリッドにおいて数値的に近似され、テクスチャブロックの圧縮表現を構成する複数の近似係数のベクトルを得る。圧縮解除段階において、複数の近似係数は次に、元のテクセルの近似値を再生成するべく、各テクセル座標において多変量関数を評価するように用いられる。色チャネルおよびアルファチャネルは、別個に扱われ得る。
【０１０２】
具体的には、一実施形態において、テクスチャブロックにおいて色関数を数値的に近似させるべく、放射基底関数（ＲＢＦ）近似が用いられる。これにより、４×４〜１６×１６等の複数のブロックサイズの柔軟な選択を可能にする。複数の矩形（非正方形）ブロックもサポートされる。
【０１０３】
図１１に図示されるように、本発明の一実施形態において、圧縮および圧縮解除動作は、グラフィックス処理ユニットのテクスチャサンプラ１１００（例えば、図５におけるテクスチャサンプラ５５４Ａ〜Ｎ、図６における６１０、および図８における８５４）内で実行される。具体的には、対称テクスチャ圧縮ロジック１１０５は、未圧縮テクスチャデータ１１０１を圧縮するべく、下記の（例えば、ＲＢＦ近似を用いる）複数の技術を実装する。次に、もたらされる圧縮済みテクスチャデータ１１０７は、テクスチャマッピング動作中において次に用いるべく、テクスチャ格納位置１１１０（例えば、テクスチャキャッシュ、メインメモリ、大容量ストレージ等）に格納され得る。
【０１０４】
対称テクスチャ圧縮解除ロジック１１２０は、下記の複数の圧縮解除技術（例えば、テクスチャブロックに対する複数の色値のベクトル［Ｔ］を決定する）を用いて圧縮済みテクスチャデータ１１０７を圧縮解除し、圧縮解除済みテクスチャデータ１１３０を生成する。次に、もたらされた圧縮解除済みテクスチャデータ１１３０は、ピクセルシェーダ１１５０および／またはグラフィックスパイプラインにおける他の複数のステージにより用いられて、複数のテクスチャマッピング動作を実行し得る。
【０１０５】
上述のように、ＲＢＦ近似は、一実施形態においてテクスチャデータを圧縮するべく用いられる。近似の確度、従って画像品質および圧縮率は、ブロック内のテクセルの数（以下、Ｂと示される）に対する近似ＲＢＦ中心点カウント（以下、Ｎとして示される）の選択により制御される。
【０１０６】
ＲＢＦ近似を含む複数の近似法は、ドメイン境界（すなわち、この場合はブロックのエッジ）において高いエラー率を被る。影響を限定するべく、本発明の一実施形態は、図１２Ａ（４つの中心点１２５０による実装を示す）および図１２Ｂ（８つの中心点１２５１による実装を示す）において図示されるように、複数のＲＢＦ中心点をテクスチャブロックの複数のエッジに配置する。ＲＢＦ中心点配置の対称性を維持するべく、図１２Ａの示されるブロック角部に配置された４つの中心は、ベースライン実装（すなわち、最小の数の中心点）として用いられ得る。次に、その後の複数の構成は、図１２Ｂに示される等距離の設定で４つの新しい中心を複数のエッジに追加する（エッジ毎に１つ）ことにより生成され得る。４つの中心点の追加の複数のセットは、複数のエッジを等しい長さの線分に細分するべく追加され得る（例えば、１２個の中心点は、３つの線分をもたらし、１６個の中心点は、４つの線分をもたらす、等である）。
【０１０７】
図１２Ｃは、異なる数の中心点を用いる異なるブロックサイズ（例えば、４×４、５×５等）に対する例示的な複数の圧縮率を提供する。例として、４つの中心点を有する４×４つのテクスチャブロックは、０．２５の圧縮率をもたらすが、１２個の中心点を有する同一のテクスチャブロックは、０．７５の圧縮率をもたらす。
【０１０８】
一実施形態において、ＲＢＦ近似は、複数の近似中心点と複数の近似データサイト（例えば、テクセル）の間の距離ベクトルのノルムにわたって算出された放射基底関数に基づいて複数の近似係数を演算する。複数の放射基底関数の広範なクラスが用いられ得るが、本発明の複数の実施形態になおも準拠する。具体的な一実施形態において、ＧＡＵＳおよびＭＱと各々示されるガウス二次ＲＢＦおよび／または多重二次ＲＢＦが用いられる。
【数１】
0006379225.tif 000002
【０１０９】
ＲＢＦ近似は、シェープパラメータとして既知であり、以下にｅｐと示される放射基底関数曲線図形を制御するべく、追加のシェープパラメータを用いる。タプル＜Ｂ，Ｎ，グリッド，ＲＢＦ，ｅｐ＞は、圧縮／圧縮解除方法の制御セットを構成する（Ｂは、ブロック内のテクセルの数であり、Ｎは、ＲＢＦ中心点カウントである）。ＲＢＩ近似の詳細は、当業者に周知であり、本発明の基礎となる原理を不明瞭にするのを回避するべくここでは説明されない。１つのテクスチャブロックに対する近似（圧縮）段階および評価（圧縮解除）段階の動作が、後述される。
【０１１０】
一実施形態において、圧縮は、以下の方程式に従って実行される。
【数２】
0006379225.tif 000003
【０１１１】
一実施形態において、圧縮行列は、まず、複数のテクスチャデータサイト地点と複数の近似中心点との間の距離行列［ＤＭ］を算出することにより決定される。例として、１６テクセルを有し、４つの中心点を用いる４×４のテクスチャブロックにおいて、距離行列は、６４個の要素を備える（すなわち、各要素は、４つの中心点のうちの１つと１６のテクセルのうちの１つとの間の距離を表す）。次に、メンバワイズＲＢＦ値の圧縮行列［ＲＤＭ］は、構成されたＲＢＦタイプおよびシェープパラメータｅｐ値を用いて距離行列［ＤＭ］に対して算出される。
【０１１２】
一実施形態において、ブロックにわたってサンプリングされたＢテクセル色値を含むベクトル［Ｔ］が、形成される。例として、４×４のテクスチャブロックについては、１６個のテクセル色値がブロックにわたってサンプリングされる（すなわち、Ｂ＝１６）。
【０１１３】
次に、本発明の一実施形態は、線形方程式系［ＲＤＭ］＊［Ａ］＝［Ｔ］を解き、複数の近似係数のベクトル［Ａ］を見出す。これは、［ＲＤＭ］行列の一般逆行列である［ｉＲＤＭ］を数値的に演算し、［ｉＲＤＭ］［Ｔ］の積行列を演算して圧縮済みテクスチャデータを含むベクトル［Ａ］を決定することにより実現され得る。
【０１１４】
一実施形態において、<Ｂ，Ｎ，グリッド，ＲＢＦ，ｅｐ>の固定された組み合わせについては、距離行列［ＤＭ］を演算するオペレーションと、圧縮解除行列［ＲＤＭ］を演算するオペレーションは、事前に演算され、定数として提供され得る。更に、［ＲＤＭ］行列は、正方形でない場合があり、それが定義する線形方程式系は、優決定系であるので、古典的な意味における逆行列は、存在しない。これに代えて、本発明の一実施形態は、ムーア・ペンローズ疑似逆行列を用いて、以下の方程式に基づいて最適の方程式系の解を見出す。
【数３】
0006379225.tif 000004
【０１１５】
最後に、＜Ｂ，Ｎ，グリッド，ＲＢＦ，ｅｐ＞の固定された組み合わせについては、積行列［ｉＲＤＭ］［Ｔ］を演算するオペレーションは、事前に演算され、定数として提供され得る。その結果として、上記の検討から示唆されるように、圧縮段階は、テクスチャブロック毎の単一の行列ベクトル積オペレーションにされ得、行列は、定数として提供される。
【０１１６】
一実施形態において、圧縮解除は、以下の方程式に従って実行される。
【数４】
0006379225.tif 000005
複数のテクセル色値のベクトル［Ｔ］を見出すべく、圧縮解除行列［ＲＤＭ］と近似係数［Ａ］のベクトルとの積が決定される（例えば、［ＲＤＭ］＊［Ａ］＝［Ｔ］が演算される）。その結果として、圧縮解除段階は、テクスチャブロック毎の単一の行列ベクトル積オペレーションにされ得、行列は、定数としてアルゴリズムに提供される。一実施形態において、複数の近似係数［Ａ］は、圧縮フォーマットで格納された場合の入力カラーデータと同一の精度で表される。
【０１１７】
図１３は、４つの中心点を有する４×４のテクスチャブロックに対する前述の方程式の例示的な表現を提供する。図示される例において、［ＲＤＭ］行列１３０１は、再形成されて４×１６の圧縮解除行列１３０２を生成し、これは次に、複数の近似係数の行列［Ａ］と掛けられて１×１６のバージョンのテクセルブロック１３０４に到達する。次に、テクセルブロック１３０４は、再形成されて最終的な［Ｔ］行列１３０５に到達する。
【０１１８】
圧縮を実行するための方法は、図１４に図示されている。１４０１において、距離行列［ＤＭ］は、テクスチャブロックの各データサイト地点と各中心点との間の距離を用いて演算される。４つの中心点を有する４×４のテクスチャブロックについては、これは６４の値をもたらす。１４０２において、ＲＢＦ行列［ＲＤＭ］は、構成されたＲＢＦタイプおよびシェープパラメータｅｐ値を用いて距離行列［ＤＭ］にわたる複数のメンバワイズＲＢＦ値から演算される。１４０３において、ベクトル［Ｔ］は、ブロックにわたってサンプリングされた複数のＢテクセル色値から形成される。最後に、１４０４において、線形方程式系［ＲＤＭ］＊［Ａ］＝［Ｔ］を解いて、複数の近似係数のベクトル［Ａ］を見出す。
【０１１９】
上記に示された複数の技術は、圧縮および圧縮解除段階の両方における（例えば、説明された行列乗算を実行するための）積和オペレーションのみを用いて実装され得る。更に、圧縮および圧縮解除段階の両方は、ブロックサイズおよび選択される圧縮率に応じて等しい１テクセル当たりのコストを有する。これらの技術は色近似を用いるので、サブサンプリングおよびオーバサンプリングスキームに好適であるという付加的利益を提供する。更に、演算の低い複雑性およびコストは、これらの技術を、ハードウェアの加速および／またはリアルタイムの用途に好適なものとし、メモリ帯域幅および電力消費に対する限度をもたらす。
【０１２０】
本発明の複数の実施形態は、上記された様々な段階を含み得る。複数の段階は、汎用または専用プロセッサに複数の段階を実行させるべく用いられ得る複数の機械実行可能命令で実施され得る。あるいは、これらの段階は、複数の段階を実行するためのハードワイヤードロジックを含む特定の複数のハードウェアコンポーネントにより、またはプログラミングされたコンピュータコンポーネントおよびカスタムハードウェアコンポーネントの任意の組み合わせにより、実行され得る。
【０１２１】
本明細書において説明されるように、複数の命令は、特定の複数のオペレーションを実行するよう構成され、または予め定められた機能または非一時的コンピュータ可読媒体で実施されるメモリに格納された複数のソフトウェア命令を有する特定用途向け集積回路（ＡＳＩＣ）等のハードウェアの特定の構成を指し得る。従って、図に示される複数の技術は、１または複数の電子デバイス（例えば、終端局およびネットワーク要素等）上に格納され、実行されるコードおよびデータを用いて実装され得る。そのような電子デバイスは、非一時的コンピュータ機械可読記憶媒体（例えば、磁気ディスク、光ディスク、ランダムアクセスメモリ、リードオンリメモリ、フラッシュメモリデバイス、相変化メモリ）および一時的コンピュータ機械可読通信媒体（例えば、搬送波、赤外線信号、デジタル信号等の伝搬信号の電気、光、音響、又は他の形態）等、コンピュータ機械可読媒体を用いてコードおよびデータを格納し、（内部で、および／またはネットワークを介して他の電子デバイスと）通信する。更に、そのような電子デバイスは通常、１もしくは複数のストレージデバイス（非一時的機械可読記憶媒体）、ユーザ入出力デバイス（例えば、キーボード、タッチスクリーン、および／またはディスプレイ）、ならびにネットワーク接続等、１もしくは複数の他のコンポーネントに結合された１もしくは複数のプロセッサのセットを含む。複数のプロセッサおよび複数の他のコンポーネントのセットの結合は通常、１または複数のバスおよびブリッジ（バスコントローラとも呼ばれる）を介して行われる。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号は、各々、１または複数の機械可読記憶媒体および機械可読通信媒体を表す。従って、所与の電子デバイスのストレージデバイスは通常、当該電子デバイスの１または複数のプロセッサのセット上で実行するためのコードおよび／またはデータを格納する。勿論、本発明の実施形態の１または複数の部分は、ソフトウェア、ファームウェア、および／またはハードウェアの異なる組み合わせを用いて実装され得る。この詳細な説明を通じて、説明の目的のために、様々な具体的詳細が、本発明の完全な理解を提供するべく記載された。しかし、当業者には、本発明がこれらの具体的な詳細のいくつかを用いることなく実施され得ることが明らかであろう。特定の例において、周知の構造および機能は、本発明の主題を不明瞭にするのを避けるべく、精巧詳細に説明されていない。従って、本発明の範囲および趣旨は、以下の特許請求の範囲の観点から判断されるべきである。
【図１】
0006379225.tif 000006
【図２】
0006379225.tif 000007
【図３】
0006379225.tif 000008
【図４】
0006379225.tif 000009
【図５】
0006379225.tif 000010
【図６】
0006379225.tif 000011
【図７】
0006379225.tif 000012
【図８】
0006379225.tif 000013
【図９Ａ】
0006379225.tif 000014
【図９Ｂ】
0006379225.tif 000015
【図１０】
0006379225.tif 000016
【図１１】
0006379225.tif 000017
【図１２Ａ】
0006379225.tif 000018
【図１２Ｂ】
0006379225.tif 000019
【図１２Ｃ】
0006379225.tif 000020
【図１３】
0006379225.tif 000021
【図１４】
0006379225.tif 000022