(57)【特許請求の範囲】
【請求項１】
グラフィックスプロセッサユニットにおける論理演算ステージであって、
一組の入力オペランドを用いて演算を実行するとともに、該入力オペランドに基づいて、複数の画素のうちの第１の画素に関連する結果を生成することのできる複数の論理演算ユニット（ＡＬＵ）と、
前記複数のＡＬＵに結合されるとともに、複数のグローバル値を記憶することのできる複数のレジスタであって、前記一組の入力オペランドに含まれる前記グローバル値が、前記複数のレジスタのうちのいずれかのレジスタから読み出し可能であり、前記結果が、前記複数のレジスタの指示された部分集合を含む宛先に書き込み可能であり、前記指示された部分集合が、前記第１の画素のみに関連づけられており、前記指示された部分集合において前記結果が書き込まれるべきレジスタが、前記第１の画素に関連づけられた画素番号に基づいて選択される、複数のレジスタと、を備える、論理演算ステージ。
【請求項２】
前記複数のＡＬＵに結合されたバッファをさらに備え、
前記バッファが、前記グローバル値に加えて、画素データを記憶する、請求項１に記載の論理演算ステージ。
【請求項３】
前記ＡＬＵが、前記入力オペランドのソースを特定する命令によってプログラムすることができ、
前記ソースが、前記複数のレジスタと、前記バッファと、前記複数のレジスタおよび前記バッファの組み合わせとを含むグループから選択される、請求項２に記載の論理演算ステージ。
【請求項４】
前記ＡＬＵが、前記結果の宛先を特定する命令によってプログラムすることができ、
前記宛先が、前記指示された部分集合と前記バッファとを含むグループから選択される、請求項２に記載の論理演算ステージ。
【請求項５】
前記複数の画素が、４つの画素を含み、
前記指示された部分集合が、前記複数のレジスタの複数の互いに素な部分集合の１つであり、
前記互いに素な部分集合のそれぞれが、前記複数のレジスタの１／４を含む、請求項１に記載の論理演算ステージ。
【請求項６】
前記ＡＬＵが、前記結果の宛先を特定する命令によってプログラムすることができ、
前記命令が、前記複数の画素のうちの前記画素のそれぞれに対して同じ宛先を特定し、
前記結果が、前記指示された部分集合内のレジスタに自動的にルーティングされる、請求項１に記載の論理演算ステージ。
【請求項７】
グラフィックスプロセッサユニットにおけるグラフィックスパイプラインであって、
前記グラフィックスパイプラインが、
複数の画素に対応する画素データをフェッチするデータフェッチステージと、
前記データフェッチステージに結合された論理演算ステージと、
を備え、
前記論理演算ステージが、
シェーダプログラムを実行するための複数の論理演算ユニット（ＡＬＵ）と、
前記複数のＡＬＵに結合されかつ前記シェーダプログラムによって使用されるグローバル値を記憶することのできる複数のレジスタと、
を有し、
グローバル値が、１つよりも多い画素の処理中に前記シェーダプログラムによって使用される画素データを含み、
前記複数のレジスタのうちのいずれかのレジスタが、第１の画素に対応する画素データを処理するときに前記シェーダプログラムによって読み出し可能であり、
前記第１の画素に対して前記シェーダプログラムによって生成されたグローバル値が、指示された部分集合内に存在するレジスタに書き込み可能であり、
前記指示された部分集合が、前記第１の画素のみに関連づけられており、前記指示された部分集合において前記グローバル値が書き込まれるべき前記レジスタが、前記第１の画素に関連づけられた画素番号に基づいて選択される、グラフィックスパイプライン。
【請求項８】
前記ＡＬＵが、前記シェーダプログラムによって生成された前記グローバル値に対するレジスタ番号を特定する命令によってプログラムすることができ、
前記グローバル値を受け取る前記レジスタが、（前記命令において特定される前記レジスタ番号ｍｏｄＮ）＋（Ｎ×前記画素番号）を計算することによって選択され、
前記Ｎは、前記部分集合内のレジスタの数である、請求項７に記載のグラフィックスパイプライン。
【請求項９】
グラフィックスプロセッサユニットパイプラインにおいて画素データを処理するためにコンピュータによって実施される方法であって、
第１の複数の画素に対応する複数のグローバル値を、複数の論理演算ユニット（ＡＬＵ）によってアクセスすることのできる複数のレジスタ内にロードするステップと、
前記複数のレジスタのうちの１つのレジスタからグローバル値を読み出すステップであって、前記複数のレジスタのいずれかが読み出される候補である、ステップと、
選択された前記グローバル値を用いて、前記第１の複数の画素の中の第１の画素を処理するステップと、
処理の結果を前記複数のレジスタの中の１つのレジスタに書き込むステップであって、前記結果が、前記複数のレジスタの指示された部分集合を含む宛先に書き込み可能であり、前記指示された部分集合が、前記第１の画素のみに関連づけられており、前記指示された部分集合において前記結果が書き込まれるべきレジスタが、前記第１の画素に関連づけられた画素番号に基づいて選択される、ステップと、を備える方法。
【請求項１０】
前記結果の前記宛先を特定する命令にアクセスするステップであり、前記アクセスするステップと、
前記第１の画素に関連づけられた前記複数のレジスタの前記指示された部分集合内のレジスタに前記結果を自動的にルーティングするステップと、
をさらに備え、
前記命令が、前記第1の複数の画素のうちの前記画素のそれぞれに対して同じ宛先を特定する、請求項９に記載の方法。
【発明の詳細な説明】
【発明の詳細な説明】
【０００１】
[0001]本出願は、発明の名称が「Ｂｕｆｆｅｒｉｎｇ  Ｄｅｓｅｒｉａｌｉｚｅｄ  Ｐｉｘｅｌ  Ｄａｔａ  ｉｎ  ａ  Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ  Ｐｉｐｅｌｉｎｅ」であるＴ．Ｂｅｒｇｌａｎｄ等による米国特許出願に関連するものであり、その米国特許出願は、代理人整理番号が第ＮＶＩＤ−Ｐ００３２１９号であり、本発明の譲受人に譲渡されたものであり、その明細書全体が参照によって本明細書に組み込まれる。
【０００２】
[0002]本出願は、発明の名称が「Ａ  Ｃｏｎｄｉｔｉｏｎａｌ  Ｅｘｅｃｕｔｅ  Ｂｉｔ  ｉｎ  ａ  Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｏｒ  Ｕｎｉｔ  Ｐｉｐｅｌｉｎｅ」であるＴ．Ｂｅｒｇｌａｎｄ等による米国特許出願に関連するものであり、その米国特許出願は、代理人整理番号が第ＮＶＩＤ−Ｐ００３４７８号であり、本発明の譲受人に譲渡されたものであり、その明細書全体が参照によって本明細書に組み込まれる。
【技術分野】
【０００３】
[0003]本発明の実施形態は、一般的には、コンピュータグラフィックスに関する。
【背景技術】
【０００４】
[0004]最近のコンピュータ性能の向上により、パーソナルコンピュータ、家庭用ゲーム機、携帯端末などを用いて、グラフィックスシステムはよりリアルなグラフィックス画像を提供できるようになった。そのようなグラフィックスシステムにおいては、グラフィックスプリミティブをシステムの画面にレンダリングまたは描写するために、いくつかのプロシージャが、実行される。グラフィックスプリミティブは、点、線、多角形などのようなグラフィックスの基本要素である。レンダリングされた画像は、これらのグラフィックスプリミティブの組み合わせによって形成される。多くのプロシージャが、３次元（３Ｄ）グラフィックスレンダリングを実行するのに使用できる。
【０００５】
[0005]グラフィックスレンダリングプロシージャが実行される速度を増大させるために、専用グラフィックス処理ユニット（ＧＰＵ）が、開発されてきた。ＧＰＵは、典型的には、１つかまたはそれ以上のレンダリングパイプラインを内蔵する。それぞれのパイプラインは、グラフィックス命令／データを高速に実行するように設計されたいくつかのハードウェアベース機能ユニットを含む。一般的に、それらの命令／データは、パイプラインのフロントエンドに供給され、計算された結果は、パイプラインのバックエンドに現れる。ＧＰＵのハードウェアベース機能ユニット、キャッシュメモリ、ファームウェアなどは、基本グラフィックスプリミティブを処理し、リアルタイムにレンダリングされる３Ｄ画像を生成するように設計される。
【０００６】
[0006]携帯電話、携帯情報端末（ＰＤＡ）およびその他の装置などの携帯機器または携帯端末において、３Ｄグラフィックス画像をレンダリングすることへの関心が増大している。しかしながら、携帯機器または携帯端末は、一般的には、デスクトップコンピュータのようなより大きな寸法を有する装置と比較すれば、制限がある。例えば、携帯機器は、典型的には、電池式であるので、電力消費が、問題となる。また、それらのより小さい寸法のために、携帯機器内部において利用できる空間は、制限される。そのような装置の制限下において、リアルな３Ｄグラフィックス画像レンダリングを携帯機器で迅速に実行することが望まれている。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
[0007]本発明の実施形態は、グラフィックスプロセッサユニットパイプラインにおいてデータを迅速にかつ効率的に処理するための方法およびシステムを提供する。
【課題を解決するための手段】
【０００８】
[0008]一実施形態においては、グラフィックスプロセッサユニットにおける論理演算ステージは、論理演算ユニット（ＡＬＵ）およびグローバルレジスタを含む。レジスタは、画素のグループに対するグローバル値を含む。グローバル値は、どの画素がＡＬＵによって演算されるかに関係なく、レジスタのうちのいずれかから読み出されてもよい。グローバルレジスタのそれぞれが、読み込み可能であるので、様々な行、画素または画素のグループに対応する画素データによる算術演算を実行することに関して言えば、より大きな柔軟性を有する。
【０００９】
[0009]しかしながら、ＡＬＵ演算の結果を書き込むときには、グローバルレジスタのうちのいくつかだけが、書き込まれるべき候補となる。すなわち、ＡＬＵから出力される画素に独特に関連づけられたグローバルレジスタだけが、書き込まれるべき候補となる。
【００１０】
[0010]画素のグループに対応する画素データは、一団となって、グラフィックスパイプラインを下流へ進む。一実施形態においては、グループ内のそれぞれの画素に対応する画素データは、データのいくつかの部分集合または行に分割される。ＡＬＵにおいては、同じ命令が、グループ内のすべての画素に適用される。それぞれの画素ごとの結果が、連続するクロックサイクルにおいて、ＡＬＵから現れる。同じ命令が、連続するクロックサイクルにおいて実行されるので、宛先がエイリアスされない限り、同じ宛先が、これらの結果に対して指定される。
【００１１】
[0011]本発明の実施形態は、結果の宛先を自動的にエイリアスする。すなわち、結果は、その結果に関連づけられた画素に依存して、異なる宛先へ宛てられる。新しいグローバル値が、パイプラインの形でそれぞれのクロックサイクルごとに生成されてもよいので、書き込まれるべき候補であるレジスタは、グローバルレジスタのある部分集合だけを含む。一実施形態においては、ＡＬＵから出力される画素の画素番号が、結果が書き込まれてもよい１つかまたは複数のレジスタを選択するのに使用される。与えられた画素を処理するときにどのグローバルレジスタが書き込まれるかを制御することによって、その後の演算に必要とされるかもしれないグローバル値は、上書きされることから保護される。
【００１２】
[0012]グローバルレジスタをこのように使用することは、レジスタの数を比例して増大させることなく、プログラミングの柔軟性を向上させる。したがって、本発明の実施形態は、携帯端末またはその他の電池式携帯機器（本発明は、これらの種類の装置上で使用されることに限定されないが）に関連する寸法および電力の制約範囲内において、迅速で効率的なグラフィックス処理を助長する。
【００１３】
[0013]本発明の実施形態の以下の詳細な説明を読めば、当業者は、いくつかの図面に示される実施形態のこれらのおよびその他の目的および利点を理解できるはずである。
【００１４】
[0014]本発明が、限定するものではない例として、添付の図面に示され、それらの図面においては、類似する符号は、類似する構成要素を指示する。
【発明を実施するための最良の形態】
【００１５】
[0023]ここで、添付の図面に示される例としての本発明の実施形態を詳細に説明する。これらの実施形態に関連して本発明を説明するが、それらの実施形態は、本発明をそれらの実施形態に限定しようとするものではないことがわかるはずである。しかしながら、本発明は、それらの代替物、変形および同等物を網羅しようとするものである。添付の特許請求の範囲に規定されるように、それらは、本発明の趣旨および範囲内に含められてもよい。さらにまた、本発明の実施形態の以下の詳細な説明においては、本発明をより完全に理解するために、多くの具体的な細部が説明される。しかしながら、当業者には、本発明はこれらの具体的な細部を備えることなく実施されてもよいことがわかるはずである。場合によっては、よく知られている方法、プロシージャ、コンポーネントおよび回路は、本発明の実施形態の態様を不必要に曖昧なものにしないように、詳細には説明されない。
【００１６】
[0024]以下の詳細な説明のいくつかの部分は、コンピュータメモリ内のデータビットに施される演算からなるプロシージャ、ステップ、論理ブロック、処理およびメモリその他の記号表現によって記述される。これらの記述および表現は、データ処理技術分野における当業者の研究内容をその他の当業者に最も効率よく伝達するためにそれらの当業者によって使用される手段である。プロシージャ、コンピュータ実行ステップ、論理ブロック、プロセスなどは、ここでは、一般的に、所望の結果を得るためのステップまたは命令の自己矛盾のないシーケンスであると考えられる。ステップとは、物理量を物理的に操作することを必要とするもののことである。必ずしもそうではないが、通常、これらの量は、コンピュータシステムにおいて記憶され、転送され、組み合わせられ、比較され、或いは、操作されることの可能な電気信号または磁気信号の形を有する。一般的に使用されるという主たる理由から、これらの信号を、ビット、値、エレメント、シンボル、文字、項、数値などと呼ぶことが場合によっては都合がよいことが知られている。
【００１７】
[0025]しかしながら、これらのおよび類似する用語のすべては、適切な物理量に関連づけられかつそれらの量に付された単なる都合のよいラベルであることに留意すべきである。特に明記しない限り、あるいは、以下の説明から明らかなように、本発明の全体を通して、「実行する」または「生成する」または「記憶する」または「読み出す」または「書き込む」または「特定する」または「選択する」または「処理する」または「ロードする」または「アクセスする」または「ルーティングする」などの用語を用いた説明は、コンピュータシステムのレジスタおよびメモリ内において物理的な（電子的な）量として表現されたデータを操作してコンピュータシステムのメモリまたはレジスタまたはその他のそのような情報記憶装置、情報伝送装置または情報表示装置内において物理量として同様に表現されるその他のデータに変換するコンピュータシステム（例えば、図１のコンピュータシステム１００）またはそれに類似する電子的コンピューティング装置のアクションおよび処理を意味することがわかる。
【００１８】
[0026]図１は、本発明の一実施形態によるコンピュータシステム１００を示す。コンピュータシステムは、ある特定のハードウェアベース機能およびソフトウェアベース機能のための実行プラットフォームを提供する本発明の実施形態による基本的コンピュータシステムのコンポーネントを含む。一般的に、コンピュータシステムは、１つ以上の中央処理装置（ＣＰＵ）１０１、システムメモリ１１５および１つ以上のグラフィックスプロセッサユニット１１０を備える。ＣＰＵは、ブリッジコンポーネント／メモリコントローラ（図示しない）を介してシステムメモリに結合されてもよく、あるいは、ＣＰＵ内部に存在するメモリコントローラ（図示しない）を介してシステムメモリに直接に結合されてもよい。ＧＰＵは、ディスプレイ１１２に結合される。システム１００の計算能力をさらに増大させるために、１つかまたはそれ以上のさらなるＧＰＵが、システム１００に随意的に結合されてもよい。１つかまたは複数のＧＰＵは、ＣＰＵおよびシステムメモリに結合される。コンピュータシステムは、例えば、専用グラフィックスレンダリングＧＰＵに結合された高性能汎用ＣＰＵを有するデスクトップコンピュータシステムまたはサーバーコンピュータシステムとして実施されてもよい。そのような実施形態においては、周辺バス、専用グラフィックスメモリ、入力／出力（Ｉ／Ｏ）装置などを増設するコンポーネントが、含まれてもよい。同様に、コンピュータシステムは、携帯端末（例えば、携帯電話など）またはセットトップテレビゲーム機器として実施されてもよい。
【００１９】
[0027]ＧＰＵは、個別部品、コネクタ（例えば、Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ  ｓｌｏｔ、Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｐｒｅｓｓ  ｓｌｏｔなど）を介してコンピュータシステムに結合するように設計された個別グラフィックスカード、個別集積回路ダイ（例えば、マザーボード上に直接に取り付けられた）またはコンピュータシステムチップセットコンポーネント（図示しない）の集積回路ダイかまたはＰＳＯＣ〔プログラマブルシステムオンアチップ（ｐｒｏｇｒａｍｍａｂｌｅ  ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ）〕の集積回路ダイ内に含まれる集積ＧＰＵとして実施されてもよい。さらに、ローカルグラフィックスメモリ１１４が、高帯域幅グラフィックスデータ記憶装置としてＧＰＵに含まれてもよい。
【００２０】
[0028]図２は、本発明の一実施形態によるＧＰＵ１１０の内部コンポーネントおよびグラフィックスメモリ１１４を示すブロック図である。図２に示されるように、ＧＰＵは、グラフィックスパイプライン２１０と、図示されるように、グラフィックスメモリに結合するフラグメントデータキャッシュ２５０とを含む。
【００２１】
[0029]図２の例において、グラフィックスパイプライン２１０は、いくつかの機能モジュールを含む。グラフィックスパイプラインの３つのそのような機能モジュール、例えば、プログラムシーケンサ２２０、論理演算ステージ（ＡＬＵ）２３０およびデータ書き込みコンポーネント２４０は、グラフィックスアプリケーション（例えば、グラフィックスドライバなど）から受信されたグラフィックスプリミティブをレンダリングすることによって動作する。機能モジュール２２０〜２４０は、フラグメントデータキャッシュ２５０を介して、グラフィックスプリミティブに関する画素をレンダリングするための情報にアクセスする。フラグメントデータキャッシュは、グラフィックスメモリ（例えば、フレームバッファメモリ）に記憶された情報のための高速キャッシュとして動作する。
【００２２】
[0030]プログラムシーケンサは、グラフィックスパイプラインの機能モジュールの処理を制御することによって動作する。グラフィックスパイプラインの機能モジュールが、どのように情報を受信するか、処理のためにそれらの機能モジュール自身をどのように環境設定するか、そして、グラフィックスプリミティブをどのように処理するかを制御するために、プログラムシーケンサは、グラフィックスドライバ（例えば、図１のＣＰＵ１０１上で動作しているグラフィックスドライバ）と対話してもよい。例えば、図２の実施形態においては、グラフィックスレンダリングデータ〔例えば、プリミティブ、三角形ストリップ（ｔｒｉａｎｌｅ  ｓｔｒｉｐ）など-
〕、パイプライン環境設定情報（例えば、モード設定、レンダリングプロフィールなど）およびレンダリングプログラム（例えば、画素シェーダプログラム、頂点シェーダプログラムなど）が、共通入力２６０を介して、上流側の機能モジュール（例えば、上流側ラスタモジュール、セットアップモジュールまたはグラフィックスドライバ）からグラフィックスパイプラインによって受信される。入力２６０は、グラフィックスパイプラインの機能モジュール間におけるフラグメントデータ主経路またはパイプラインとして動作する。プリミティブは、一般的には、パイプラインのフロントエンドにおいて受信され、そして、それらのプリミティブが１つのモジュールからパイプラインに沿って次のモジュールへ進むにつれて、結果として得られるレンダリングされた画素データに段階的にレンダリングされていく。
【００２３】
[0031]一実施形態においては、データは、機能モジュール２２０〜２４０間をパケットベースフォーマットで進む。例えば、グラフィックスドライバは、データパケットまたは画素パケットの形式でデータをＧＰＵに送信する。これらの形式は、パイプラインのフラグメントパイプ通信経路とインタフェースをとるようにかつフラグメントパイプ通信経路に沿って送信されるように独特に構成される。画素パケットは、一般的には、画素のグループまたはタイル（例えば、４画素、８画素、１６画素など）に関する情報と、画素に関係する１つかまたはそれ以上のプリミティブに関するカバレージ情報とを含む。また、画素パケットは、側波帯情報を含んでもよく、この側波帯情報は、パイプラインの機能モジュールがレンダリング処理のためにそれら自身を環境設定するのを可能にする。例えば、画素パケットは、環境設定ビット、命令、機能モジュールアドレスなどを含んでもよく、それらは、現在のレンダリングモードなどのためにパイプラインの機能モジュール自身を環境設定するために、機能モジュールの中の１つかまたは複数によって使用されてもよい。画素レンダリング情報および機能モジュール環境設定情報に加えて、画素パケットは、シェーダ処理を画素に対して実行するためにパイプラインの機能モジュールをプログラムするシェーダプログラム命令を含んでもよい。例えば、シェーダプログラムを構成する命令が、グラフィックスパイプラインの下流へ送信され、そして、１つかまたはそれ以上の指示された機能モジュールによってロードされてもよい。ロードされてしまえば、レンダリング処理中に、機能モジュールは、所望のレンダリング効果を得るために、シェーダプログラムを画素データに対して実行してもよい。
【００２４】
[0032]このようにして、グラフィックスパイプラインの機能モジュールによって実行される高度に最適化された効率的なフラグメントパイプ通信経路は、画素データを機能モジュール（例えば、モジュール２２０〜２４０）間で送信するためにだけでなく、環境設定情報およびシェーダプログラム命令を機能モジュール間で送信するためにも使用されてよい。
【００２５】
[0033]図３は、本発明の一実施形態によるグラフィックスパイプライン２１０における選択されたステージを示すブロック図である。グラフィックスパイプラインは、さらなるステージを含んでもよく、あるいは、図３の例と異なるように構成されてもよい。言い換えれば、本発明が、図３のパイプラインに関連して説明されるが、本発明は、そのようなものに限定されることはない。
【００２６】
[0034]図３の例において、ラスタライザ３１０は、補間を用いて三角形を画素に変換する。ラスタライザ３１０は、様々な機能を有するが、とりわけ、ラスタライザは、頂点データを受信し、どの画素がどの三角形に対応するかを決定するとともにシェーダ処理演算を決定する。このシェーダ処理演算は、カラー演算、テクスチャ演算およびフォグ演算のような、レンダリングの一部として画素に対して実行されなければならない。
【００２７】
[0035]ラスタライザは、処理されるべき三角形のそれぞれの画素ごとに画素パケットを生成する。画素パケットは、一般的には、グラフィックスディスプレイのフレームにおける画素ごとに画素値のインスタンスを計算するのに使用される一組の記述（ｄｅｓｃｒｉｐｔｉｏｎ）である。画素パケットは、それぞれのフレームにおけるそれぞれの画素に対応する。それぞれの画素は、画面座標における特定の位置（ｘ，ｙ）に対応する。一実施形態においては、グラフィックスシステムは、クワッドと呼ばれるディスプレイ画面の２画素×２画素の領域をレンダリングする。
【００２８】
[0036]それぞれの画素パケットは、処理（例えば、カラー、テクスチャ、深度、フォグ、ｘ位置およびｙ位置など）に必要な画素属性のペイロードと、側波帯情報とを含む（画素属性データはデータフェッチステージ３３０によって提供される）。画素パケットは、１つの行のデータを含んでもよく、あるいは、複数の行のデータを含んでもよい。行は、一般的には、パイプラインバスのデータ部分の幅である。
【００２９】
[0037]データフェッチステージは、画素パケットに必要なデータをフェッチする。そのようなデータは、それぞれの画素パケットごとにカラー情報、深度情報およびテクスチャ情報を含んでもよい。フェッチされたデータは、画素パケットを次のステージに送信する前に、画素データの行の適切なフィールドに格納される。そのフィールドは、ここではレジスタと呼ばれてもよい。
【００３０】
[0038]データフェッチステージから、画素データのいくつかの行が、論理演算ステージ２３０に入力される。本実施形態においては、クロックサイクルごとに、画素データの１つの行が、論理演算ステージに入力される。一実施形態においては、論理演算ステージは、限定はしないが、例えば、テクスチャコンバイン（ｔｅｘｔｕｒｅ  ｃｏｍｂｉｎｅ）（テクスチャ環境）、ステンシル（ｓｔｅｎｃｉｌ）、フォグ、アルファブレンド（ａｌｐｈａ  ｂｌｅｎｄ）、アルファテスト（ａｌｐｈａ  ｔｅｓｔ）および深度テストのような３次元グラフィックス処理に関係するシェーダプログラムを実行するように構成された４つのＡＬＵ０、１、２および３（図５）を含む。それぞれのＡＬＵは、１クロックサイクルごとに１つの命令を実行し、それぞれの命令は、画素パケットの内容に対応するオペランドに対して算術演算を実行する。一実施形態においては、１つのＡＬＵにおいてデータの１つの行を処理するためには、４つのクロックサイクルを必要とし、それぞれのＡＬＵは、４つのサイクルの深度を有する。
【００３１】
[0039]論理演算ステージの出力は、データ書き込みステージに入力される。データ書き込みステージは、パイプラインの結果をメモリ（例えば、図１および図２のグラフィックスメモリ１１４またはメモリ１１５）内の書き込みバッファまたはフレームバッファに記憶する。随意的に、画素パケット／データは、データのさらなる処理が必要であれば、データ書き込みステージから論理演算ステージへ再循環させられてもよい。
【００３２】
[0040]図４は、本発明の実施形態による画素のグループに対応する連続する画素データすなわち画素データの一連の行を示す。図４の例においては、画素のグループは、４つの画素すなわちＰ０、Ｐ１、Ｐ２およびＰ３からなるクワッドを備える。上述したように、画素に対応する画素データは、データのいくつかの部分集合または行に分割されてもよい。例えば、行０は、画素データＰ０ｒ０、Ｐ０ｒ１、Ｐ０ｒ２およびＰ０ｒ３からなる４つのフィールドまたはレジスタを含む（「ｒ」は、行内のフィールドまたはレジスタを指示し、そして、「Ｒ」は、行を指示する）。行のそれぞれは、画素データの１つかまたはそれ以上の属性を表現してもよい。これらの属性は、限定はされないが、ｚ−深度値、テクスチャ座標、詳細度（ｌｅｖｅｌ  ｏｆ  ｄｅｔａｉｌ）、カラーおよびアルファを含む。レジスタ値は、論理演算ステージにおいてＡＬＵによって実行される演算において、オペランドとして使用されてもよい。
【００３３】
[0041]側波帯情報４２０は、画素データのそれぞれの行に関連づけられる。側波帯情報４２０は、とりわけ、命令によって特定される画素データを用いてＡＬＵによって実行されるべき命令を特定または指示する情報を含む。言い換えれば、行０に関連する側波帯情報は、とりわけ、命令Ｉ０を特定する。命令は、例えば、実行されるべき算術演算の種類およびその演算においてオペランドとして使用されるべきデータをどのレジスタが含むかを指定してもよい。
【００３４】
[0042]また、側波帯情報は、画素データの行内に含まれるデータの種類を特定してもよい。例えば、行は、ローカル画素データまたはグローバル画素データを含んでもよい。ローカル画素データは、その行に関連する画素に固有のものである。グローバル画素データは、１つの画素だけに限定されるのではなく１つよりも多い画素のためにシェーダプログラムによって使用される画素データのインスタンスである。その値は、画素の複数の行間で、複数の画素間で、場合によっては、画素の複数のグループ間で共有されてもよい。ある意味では、グローバル値は、定数であるが、グローバル値の値は、ＡＬＵによって実行される演算の結果として、変更されてもよい。
【００３５】
[0043]新しいクロックサイクルのたびに、画素データのそれぞれの行は、次々に、データフェッチステージから論理演算ステージへ進む。例えば、行０が、第１のクロックによって、パイプラインの下流へ進み、その後に、次のクロックによって、行１が、下流へ進み、以下、同様である。画素の特定のグループ（例えば、クワッド）に関連する行のすべてが、パイプライン内にロードされてしまえば、次のクワッドに関連する行が、パイプライン内にロードされ始めてもよい。
【００３６】
[0044]一実施形態においては、画素のグループ（例えば、クワッド）内に存在するそれぞれの画素に対応する画素データの行は、グループ内のその他の画素に対応する画素データの行によってインタリーブされる。例えば、１画素につき４つの行を備えた４画素からなるグループの場合、画素データは、以下の順序で、すなわち、第１の画素に対応する第１の行（Ｐ０ｒ０〜Ｐ０ｒ３）、第２の画素に対応する第１の行（Ｐ１ｒ０〜Ｐ１ｒ３）、第３の画素に対応する第１の行（Ｐ２ｒ０〜Ｐ２ｒ３）、第４の画素に対応する第１の行（Ｐ３ｒ０〜Ｐ３ｒ３）、第１の画素に対応する第２の行（Ｐ０ｒ４〜Ｐ０ｒ７）、第２の画素に対応する第２の行（Ｐ１ｒ４〜Ｐ１ｒ７）、第３の画素に対応する第２の行（Ｐ２ｒ４〜Ｐ２ｒ７）、第４の画素に対応する第２の行（Ｐ３ｒ４〜Ｐ３ｒ７）、．．．、Ｐ３ｒ１２〜Ｐ３ｒ１５を含む第１５の行の順序で、パイプラインの下流へ進む。上述したように、１画素につき４つ未満の行が存在してもよい。画素パケットの行をこのようにインタリーブすることによって、パイプラインのストールを回避し、データスループットを増大させることができる。
【００３７】
[0045]図５は、本発明の一実施形態による論理演算ステージ２３０のブロック図である。ある特定の構成要素だけが図５に示されるが、論理演算ステージは、図５に示されかつ以下で説明されるものに加えて、その他の構成要素を含んでもよい。
【００３８】
[0046]側波帯情報４２０を含む画素データの行（例えば、行０）は、クロックサイクルごとにデシリアライザ５１０に供給される。図５の例においては、デシリアライザは、画素データの行をデシリアライズする。上述したように、画素のグループ（例えば、クワッド）に対応する画素データは、行単位でインタリーブされてもよい。また、画素データは、行単位で論理演算ステージに到着する。したがって、デシリアライゼーションは、ここで言及されるように、ビット単位で実行されるのではなく、行単位で実行される。グラフィックスパイプラインが４つのレジスタ幅であれば、また、１画素につき４つの行が存在すれば、デシリアライザは、画素データを１画素につき１６個のレジスタにデシリアライズする。
【００３９】
[0047]上述したように、ある画素データは、ローカル画素データとして識別され、また、他の画素データは、グローバル画素データとして識別されるかもしれない。図５の例においては、デシリアライザは、画素のグループに対応するローカル画素データをバッファ０、１または２の中の１つに送信する。
【００４０】
[0048]一般的には、ローカル画素データは、バッファの中の１つに送信され、その他のバッファの中の１つに存在する画素データは、ＡＬＵによって処理される。ＡＬＵによってすでに処理されている残りのバッファに存在する画素データは、シリアライザ５５０によってシリアライズされ、そして、グラフィックスパイプラインの次のステージに行単位で供給される。バッファから画素データが取り出されると、画素の次のグループに対応する画素データを入れる（上書きする）準備ができた状態となる。バッファが、画素データを入れられると、そのバッファが含む画素データは、処理される準備ができた状態となる。バッファ内の画素データが、処理されると、そのバッファは、取り出される（上書きされる）準備ができた状態となる。
【００４１】
[0049]図５の例においては、デシリアライザは、グローバル値をグローバルレジスタ５２０に送信する。一実施形態においては、３２個のグローバルレジスタが存在し、それらのそれぞれが、グローバル値を保持してもよい。したがって、いかなる時点においても、ＡＬＵ演算に利用することのできる最大で３２個のグローバル値が、存在することが可能である。当然ながら、３２個のグローバル値のいずれかが、読み出され、ＡＬＵ演算中に、利用されてもよい。
【００４２】
[0050]特定の画素に関連する画素データの行のすべてがデシリアライズされてしまえば、その画素に対応する画素データは、ＡＬＵによって処理されてもよい。これらのＡＬＵは、画素グループ全体をＳＩＭＤ（１回の命令、複数のデータ）の形で処理する効率的にパイプライン化されたプロセッサである。
【００４３】
[0051]この実施形態においては、画素データの１つの行を処理するためには、より具体的には、画素データの１つの行に関連する１つの命令を実行するためには、４つのクロックサイクルを必要とする。第１のクロックサイクル中、第１の画素に対応する画素データを備えたオペランドが、ＡＬＵ内に読み込まれる。オペランドは、ローカル値またはグローバル値であってもよい。第２のクロックサイクルおよび第３のクロックサイクル中、計算が、その画素データに対して実行される。例えば、第２のクロックサイクルにおいて、オペランドが、乗算器において乗算されてもよく、そして、第３のクロックサイクルにおいて、乗算器の結果が、加算器において加算されてもよい。第４のクロックサイクル中、画素データは、再び、バッファまたはグローバルレジスタに書き込まれる。また、第２のクロックサイクル中、第２の画素に対応する画素データが、ＡＬＵ内に読み込まれる。その画素データは、ＡＬＵの残りのステージに沿って、第１の画素に対応する画素データに後続するものである。また、第３のクロックサイクル中、第３の画素に対応する画素データが、ＡＬＵ内に読み込まれ、その画素データは、ＡＬＵの残りのステージに沿って、第２の画素に対応する画素データに後続するものである。このように、ＡＬＵが、「準備（ｐｒｉｍｅ）」されてしまえば、一方の画素に関連する画素データが、これらのＡＬＵに沿って、他方の画素に関連する画素データに後続する。
【００４４】
[0052]図６は、本発明の一実施形態による論理演算ステージにおいてグローバルレジスタから読み出されるグローバル値およびグローバルレジスタに書き込まれるグローバル値を示す。図６の例においては、３２個のグローバルレジスタが存在するが、本発明は、そのように限定されるものではない。
【００４５】
[0053]上述したように、画素データは、クロックサイクルごとにＡＬＵに入力され、ＡＬＵが、準備されてしまえば、画素データは、クロックサイクルごとにＡＬＵから出力される。ＡＬＵ内の画素データを処理するとき、１つかまたはそれ以上のグローバル値が、その処理中にオペランドとして使用されてもよい。本発明の実施形態によれば、いずれかのグローバルレジスタ内に存在するグローバル値は、いずれかの画素に対応する画素データを処理するときに、読み出され、使用されてもよい。
【００４６】
[0054]より具体的には、クロックサイクルごとに、ＡＬＵは、命令を実行する。命令は、とりわけ、ＡＬＵによって必要とされるオペランドごとのソースを指定するか、或いは、ＡＬＵ演算の結果の宛先を指定する。入力オペランドは、バッファ０〜２（図５）、グローバルレジスタＧ０〜Ｇ３１またはバッファおよびグローバルレジスタの組み合わせから読み出されてもよい。本実施形態においては、ローカル画素データは、バッファから読み出され、グローバル画素データは、グローバルレジスタから読み出される。重要なことには、読み出しの場合、命令は、グローバル値がどの行、画素または画素のグループに関連するかに関係なく、そのグローバル値のソースとしていずれかのグローバルレジスタを特定してもよい。
【００４７】
[0055]クロックサイクルごとに、ＡＬＵが、準備されてしまえば、それらの出力（１つかまたは複数）は、バッファまたはグローバルレジスタのいずれかに書き込まれてもよい。それぞれの結果は、特定の画素、すなわち、ＡＬＵから出力される画素データに関連する画素に関連づけられる。ローカル画素データの結果は、再び、バッファに書き込まれ、そして、グローバル値は、再び、グローバルレジスタに書き込まれる。
【００４８】
[0056]一実施形態においては、同じ命令、したがって、ＡＬＵ演算の結果に対する同じ宛先が、画素のグループ内に存在するそれぞれの画素に適用される。例えば、命令は、結果がグローバルレジスタＧ２に書き込まれることを指定してもよく、この命令は、クワッド内の画素Ｐ０〜Ｐ３のそれぞれに適用される。その結果として、ＡＬＵに沿ってその他の画素に先行する画素Ｐ０の処理に関連する結果は、レジスタＧ２に書き込まれる。ＡＬＵに沿って画素Ｐ０に後続する画素Ｐ１の処理に関連する結果は、適切な制御が存在しなければ、レジスタＧ２内に存在する現在の値（画素Ｐ０に対してレジスタＧ２に書き込まれたばかりの値）に上書きされる。
【００４９】
[0057]より具体的には、一実施形態においては、ＡＬＵは、１画素につき１つの命令（画素の１グループにつき４つの命令）を実行し、１つの命令を実行するのに４つのクロックサイクルを必要とするかもしれない。図７は、任意に選択されたクロックサイクル０〜１５においてＡＬＵから出力される画素の結果を示す。クロックサイクル０〜３において、画素Ｐ０〜Ｐ３に対応する画素データを用いた第１の命令Ｉ０の実行に関連する画素の結果が、ＡＬＵから出力される。これらの結果は、異なる画素にもかかわらず、同じ宛先（命令Ｉ０によって指定された宛先）を有する。同様に、画素Ｐ０〜Ｐ３に対応する画素データを用いた第２の命令Ｉ１の実行に関連する画素の結果が、ＡＬＵから出力される。これらの結果は、異なる画素にもかかわらず、同じ宛先（命令Ｉ１によって指定された宛先）を有し、以下、同様である。適切な制御がなければ、クロックサイクル１において、例えば、画素Ｐ１に関連する結果は、画素Ｐ０に関連する結果に上書きされ、そして、クロックサイクル２において、画素Ｐ２に関連する結果は、画素Ｐ１に関連する結果に上書きされ、以下、同様である。本発明の実施形態は、グローバル値が上書きされるのを防止する制御を提供する。
【００５０】
[0058]一実施形態においては、書き込みの場合、一組のグローバルレジスタが、互いに素な部分集合に論理的に分割され、それぞれの部分集合は、画素グループ内に存在する画素の中の１つに関連づけられ、１つの部分集合の要素であるグローバルレジスタは、その他のいずれかの部分集合の要素ではない。そのような一実施形態においては、１部分集合あたりのレジスタの数は、画素グループ内の画素の数Ｍによって除算された論理演算ステージにおけるグローバルレジスタの数Ｎである。例えば、３２個のグローバルレジスタが存在し、かつ、４つの画素が１つのグループ内に存在する場合、１部分集合あたり８個のグローバルレジスタが、存在する。したがって、書き込みの場合、一実施形態においては、グローバルレジスタＧ０〜Ｇ７が、画素Ｐ０だけに関連づけられ、グローバルレジスタＧ８〜Ｇ１５が、画素Ｐ１だけに関連づけられ、グローバルレジスタＧ１６〜Ｇ２３が、画素Ｐ２だけに関連づけられ、そして、グローバルレジスタＧ２４〜Ｇ３１が、画素Ｐ３だけに関連づけられる。その結果として、一実施形態においては、画素Ｐ０に対応するデータに施されたＡＬＵ演算から得られたグローバル値は、レジスタＧ０〜Ｇ７を含む部分集合内のグローバルレジスタだけに書き込まれてもよい。画素Ｐ１に対応するデータに施されたＡＬＵ演算から得られたグローバル値は、レジスタＧ８〜Ｇ１５を含む部分集合内のグローバルレジスタだけに書き込まれてもよく、以下、同様である。
【００５１】
[0059]一実施形態においては、書き込みの場合、ＡＬＵ演算の結果は、どの画素がその結果に関連づけられているかに基づいて選択されたグローバルレジスタへ自動的にルーティングされる。そのような一実施形態においては、結果が書き込まれるべきレジスタは、以下のようにして計算される。すなわち、（ｒ＃ｍｏｄ（Ｎ／Ｍ））＋Ｎ／Ｍ×Ｐ＃、ここで、ｒ＃は、命令において特定された宛先レジスタ番号であり、Ｎは、グローバルレジスタの数であり、Ｍは、グループ内の画素の数であり、そして、Ｐ＃は、結果に関連づけられた画素番号である（例えば、クワッドの画素の場合、Ｐ＃は、０、１、２または３であってもよい）。したがって、異なる宛先が、グループ内のそれぞれの画素ごとに計算される。
【００５２】
[0060]例えば、命令は、演算の結果をグローバルレジスタＧ１に書き込まなければならないことを指定してもよい。命令は、画素のグループ内に存在するそれぞれの画素に対して同じものである。しかしながら、本発明の実施形態によれば、画素Ｐ０に関連づけられた結果だけが、レジスタＧ１に書き込まれる。画素Ｐ１に対する結果の宛先は、レジスタＧ９としてリネームまたはエイリアスされ、画素Ｐ２に対する結果の宛先は、レジスタＧ１７としてリネームされ、そして、画素Ｐ３に対する結果の宛先は、レジスタＧ２５としてリネームされる。上述したように、一実施形態においては、宛先は、グループ内のそれぞれの画素に対して新しい宛先レジスタ番号を計算することによって、ハードウェアにおいてリネームされる。これらの結果に頼るその後の読み出し動作は、適切なグローバルレジスタに宛てられてもよい。すなわち、読み出しのようなその後の処理をプログラムするとき、宛先をエイリアスすることが、認識され、そして、そのプログラミングに考慮されてもよく、それによって、必要とされるグローバル値を得るために、適切なグローバルレジスタが、アクセスされる。
【００５３】
[0061]別の実施形態においては、ＡＬＵ演算の結果は、複数の宛先レジスタへ自動的にルーティングされる。そのような一実施形態においては、結果が書き込まれるべきレジスタは、以下のようにして計算される。すなわち、（ｒ＃＋（Ｐ＃）×（Ｎ／Ｍ））ｍｏｄＮ。したがって、例えば、レジスタＧ２１への書き込みは、レジスタＧ５、Ｇ１３、Ｇ２１およびＧ２９への書き込みに変換される。
【００５４】
[0062]要するに、本発明の実施形態によれば、画素シェーダは、メモリ（例えば、グローバルレジスタＧ０〜Ｇ３１に）にグローバル値を書き込んでもよい。与えられた画素を処理するときにどのグローバルレジスタに書き込むかを制御することによって、その後の処理に必要とされるかもしれないグローバル値は、上書きされるのを防止される（当然ながら、グローバルレジスタ内のデータが適切に上書きされることは、依然として、可能であり、本発明の実施形態は、この種の書き込みが発生するのを妨げるものではない）。グローバルレジスタをここで説明されるように使用することは、レジスタの数をそれ相応に増加させることなく、プログラミングの柔軟性を向上させる。したがって、本発明の実施形態は、携帯端末またはその他の電池式携帯機器に関連する寸法および電力の制約範囲内において、迅速で効率的なグラフィックス処理を助長する。
【００５５】
[0063]図８は、本発明の一実施形態によるグラフィックスプロセッサユニットパイプラインにおいて画素データを処理するためにコンピュータによって実施される方法の例のフローチャート８００である。具体的なステップがフローチャートにおいて説明されるが、そのようなステップは、例として示されるものである。すなわち、本発明の実施形態は、その他の様々なステップまたはフローチャートに説明されるステップの変形を実行するのにきわめて都合のよいものである。フローチャートにおけるステップは、示される順序と異なる順序で実行されてもよい。
【００５６】
[0064]ブロック８１０において、第１の複数の画素に対応するグローバル値が、グラフィックスパイプラインの論理演算ステージにおいてＡＬＵによってアクセスされてもよいグローバルレジスタにロードされる。ブロック８２０において、グローバル値が、グローバルレジスタから読み出される。いずれのグローバルレジスタも読み出されるかもしれない候補である。ブロック８３０において、画素の第１のグループ内に存在する第１の画素に対応する画素データ（例えば、第１の行の画素データ）が、ＡＬＵによって、選択されたグローバル値を用いて処理される。
【００５７】
[0065]ブロック８４０において、処理の結果が、選択された１つかまたは複数のグローバルレジスタに書き込まれる。書き込まれるかもしれないグローバルレジスタ（１つかまたは複数）は、ブロック８３０において処理された画素に関連するレジスタである。すなわち、グローバル値は、グローバルレジスタのいずれかから読み出されてもよいが、グローバル値は、画素番号に依存して、ある特定のグローバルレジスタにしか書き込まれない。
【００５８】
[0066]一実施形態においては、処理結果に対応する宛先を特定する命令が、アクセスされる。そのような一実施形態においては、命令は、画素の第１のグループ内に存在するそれぞれの画素に対して同じ宛先を特定する。しかにながら、結果は、選択された１つかまたは複数のグローバルレジスタに自動的にルーティングされる。一実施形態においては、これは、上述したような画素番号に基づいて結果に対する新しい１つかまたは複数の宛先を自動的に計算することによって、実現される。
【００５９】
[0067]グローバルレジスタ内のグローバル値は、必ずしも上書きされるとは限らないので、グローバル値は、第２の行の画素データ、第２の画素および／または第２のグループの画素を処理するためにその後に使用されてもよい。
【００６０】
[0068]本発明の具体的な実施形態に関するこれまでの記述は、解説および説明のために提供されたものである。これらの記述は、本発明を完全に網羅しようとするものではなく、あるいは、開示された形態そのものに本発明を限定しようとするものではなく、上述の教示に基づいて、多くの変更および変形が、可能である。例えば、本発明の実施形態は、図２のＧＰＵ１１０とは形態または機能が異なるＧＰＵ上で実施されてもよい。実施形態は、本発明の原理および本発明の実際の応用を最も良く説明し、それによって、その他の当業者が本発明と考えられる特定の使用方法に適合された様々な変更を備えた様々な実施形態とを最良に利用するのを可能にするように、選択および記述された。本発明の範囲は、添付の特許請求の範囲およびそれらと等価なものによって規定される。
【図面の簡単な説明】
【００６１】
【図１】本発明の一実施形態によるコンピュータシステムのコンポーネントを示すブロック図である。
【図２】本発明の一実施形態によるグラフィックス処理ユニット（ＧＰＵ）のコンポーネントを示すブロック図である。
【図３】本発明の一実施形態によるＧＰＵパイプラインにおけるステージを示すブロック図である。
【図４】本発明の一実施形態による一連の行の画素データを示す図である。
【図５】本発明の一実施形態によるＧＰＵにおける論理演算ステージのブロック図である。
【図６】本発明の一実施形態による論理演算ステージにおいて読み出されかつ書き込まれるグローバル値を示すデータフロー図である。
【図７】本発明の一実施形態による論理演算ユニットから出力される画素データを示す図である。
【図８】本発明の一実施形態による画素データを処理するためにコンピュータによって実施される方法のフローチャートである。
【符号の説明】
【００６２】
１００…コンピュータシステム、１０１…ＣＰＵ、１１０…ＧＰＵ、１１２…ディスプレイ、１１４…ローカルグラフィックスメモリ、１１５…メモリ、２１０…グラフィックスパイプライン、２２０…プログラムシーケンサ、２３０…ＡＬＵ、２４０…データ書き込みコンポーネント、２５０…フラグメントデータキャッシュ、２６０…共通入力、３１０…ラスタライザ、３３０…データフェッチステージ、５１０…デシリアライザ、５２０…グローバルレジスタ、５５０…シリアライザ。
【図１】
0004765126.tif 000002
【図２】
0004765126.tif 000003
【図３】
0004765126.tif 000004
【図４】
0004765126.tif 000005
【図５】
0004765126.tif 000006
【図６】
0004765126.tif 000007
【図７】
0004765126.tif 000008
【図８】
0004765126.tif 000009