(57)【特許請求の範囲】
【請求項１】
グラフィックスアプリケーションプログラミングインターフェース（ＡＰＩ）を介して、グラフィックス処理装置（ＧＰＵ）の複数の共通コア要素によって実行される１つまたは複数の作業項目を指定するステップであって、各共通コア要素は動的に構成されるサブ要素を含み、かつ、前記共通コア要素に対する前記サブ要素の構成が、頂点、ピクセルおよびプリミティブのうちの１つを処理するために、前記共通コア要素を特化するように構成された、ステップと、
入力アセンブラにより、前記ＡＰＩの出力を受け取るステップと、
前記１つまたは複数の作業項目に基づいて、前記入力アセンブラが、前記複数の共通コア要素のための最適な構成を、頂点を処理するように構成された共通コア要素と、ピクセルを処理するように構成された共通コア要素と、プリミティブを処理するように構成された共通コア要素の少なくとも１つの組合せに決定するステップと、
前記複数の共通コア要素は、前記ＧＰＵに対する資源需要に従い、前記複数の共通コア要素の動的最適化により、頂点、ピクセルまたはプリミティブの処理に関して前記共通コア要素を特化するか否かを決定するために、入力アセンブラから入力を受け取るステップと、
頂点、ピクセルまたはプリミティブの処理に関して一度構成され、同一アルゴリズムの反復演算により、頂点、ピクセルおよびプリミティブの１つの前記処理を実行するための、共通コア要素をプログラムするソフトウェアプログラムを共通コア要素にダウンロードするステップと、
を含むことを特徴とするグラフィックスパイプラインを動的に構成する方法。
【請求項２】
前記指定するステップは、実行される少なくとも１つのタスクと、該少なくとも１つのタスクが実行されるグラフィックスデータとを指定するステップを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記決定するステップは、頂点、ピクセルおよびプリミティブを処理するために、複数の共通コア要素を、それぞれ頂点シェーダ、ピクセルシェーダまたは幾何学シェーダとして動的に構成するステップを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記動的に構成可能なサブ要素は、入力ゲート、レジスタ記憶、処理装置サブ要素、および出力ゲートを含むことを特徴とする請求項１に記載の方法。
【請求項５】
前記ダウンロードするステップは、プログラムを共通コア要素にダウンロードし、前記共通コア要素の前記構成に応じて、前記頂点、ピクセルまたはプリミティブに対する浮動小数点および整数計算がＩＥＥＥの標準に完全に準拠しているアルゴリズム要素を計算するステップを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記ダウンロードするステップは、ストリーム出力を可能にする命令をダウンロードするステップを含み、前記共通コア要素で計算される情報は、ラスタ化可能なフレームバッファメモリに記憶される前に、データ取得が可能なビデオメモリに任意選択で出力されることを特徴とする請求項１に記載の方法。
【請求項７】
頂点、ピクセルおよびプリミティブの１つを含むグラフィックスデータに索引付けすることにより、前記１つまたは複数の作業項目をスケジュール設定するステップをさらに備えたことを特徴とする請求項１に記載の方法。
【請求項８】
請求項１から７のいずれかに記載の方法を実行するコンピュータ実行可能な命令を記録するコンピュータ読取り可能な媒体。
【請求項９】
それぞれの共通コア要素のサブ要素の構成が、頂点、ピクセルおよびプリミティブの１つを処理するために前記共通コア要素を特化するような、動的に構成可能な前記サブ要素を含む、複数の共通コア要素を備えたことを特徴とするグラフィックス処理装置（ＧＰＵ）であって、
前記複数の共通コア要素のうちの１つまたは複数が、頂点、ピクセルまたはプリミティブの処理に関して一度構成され、同一アルゴリズムの反復演算により、頂点、ピクセルおよびプリミティブの１つの前記処理を実行するように前記共通コア要素をプログラムする入力としてソフトウェアプログラムを受け取るように構成されており、かつ、
前記複数の共通コア要素が、前記ＧＰＵに対する資源需要に従い、前記複数の共通コア要素の動的最適化により、頂点、ピクセルまたはプリミティブの処理に関して前記共通コア要素を特化するか否かを決定するために、入力アセンブラから入力を受け取るように構成されている、
ことを特徴とするグラフィックス処理装置。
【請求項１０】
前記複数の共通コア要素は、グラフィックス処理装置によって処理される作業項目に対して最適に定義された動的資源の要求に従い、頂点、ピクセルおよびプリミティブを処理するための、頂点シェーダ、ピクセルシェーダ、または幾何学シェーダの任意の組合せとして構成可能であることを特徴とする請求項９に記載のグラフィックス処理装置。
【請求項１１】
前記動的に構成可能なサブ要素は、入力ゲート、レジスタ記憶、処理装置サブ要素、および出力ゲートを含むことを特徴とする請求項９に記載のグラフィックス処理装置。
【請求項１２】
前記入力アセンブラから受け取った前記入力は、前記複数の共通コア要素の各々の入力ゲート、レジスタ記憶、処理装置サブ要素および出力ゲートの内部構成を定義することを特徴とする請求項９に記載のグラフィックス処理装置。
【請求項１３】
前記複数の共通コア要素の１つまたは複数の共通コア要素は、入力アセンブラによって索引付けされる、演算される作業データを受け取ることを特徴とする請求項９に記載のグラフィックス処理装置。
【請求項１４】
前記複数の共通コア要素の１つまたは複数の共通コア要素は、ストリーム出力を含み、前記１つまたは複数の共通コア要素で計算される情報は、ラスタ化可能なフレームバッファメモリに記憶される前に、データ取得が可能なビデオメモリに任意選択で出力されることを特徴とする請求項９に記載のグラフィックス処理装置。
【請求項１５】
前記複数の共通コア要素の各々は、前記ソフトウェアプログラムの受け取りをサポートし、関連付けられた共通コア要素をプログラムして、前記頂点、ピクセルまたはプリミティブに対する浮動小数点および整数計算がＩＥＥＥの標準に完全に準拠しているアルゴリズム要素を計算することを特徴とする請求項９に記載のグラフィックス処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ハードウェアが新規かつ改善された機能をグラフィックパイプラインに追加するために開発された、ソフトウェアを使用する拡張グラフィックパイプラインを可能にするグラフィック処理装置（ＧＰＵ）に関する。
【背景技術】
【０００２】
コンピュータシステムは、グラフィカルオブジェクトを表示画面上に表示するために一般的に使用される。３次元（３−Ｄ）コンピュータグラフィックスの目的は、一般に、１つまたは複数のオブジェクトを３次元で現実的に表現する、コンピュータ画面上の２次元（２−Ｄ）画像を作成することである。現実世界では、物体は、実際の高さと実際の幅と実際の奥行きとを持って３次元を占有している。写真は、３−Ｄ空間の２−Ｄ表現の一例である。基本となる画像が、通常、３−Ｄ幾何学形状および表面テクスチャでモデリングされること以外、３−Ｄコンピュータグラフィックは、一般に、３−Ｄ世界をコンピュータ画面の２−Ｄ空間に表現する点で、写真に類似している。
【０００３】
３−Ｄコンピュータグラフィックスによって作成された画像は、ビデオ娯楽ゲームから航空機の飛行シミュレーションに至る広範囲の用途において、所与の時点における個人の視界を現実的な方法で表現するために用いられる。３−Ｄコンピュータグラフィックスのよく知られた例としては、ターミネータＩＩ、ジュラシックパーク、トイストーリーなどのようなハリウッド映画の特殊効果がある。
【０００４】
ここ数年の間に特に急成長を遂げた産業として、コンピュータゲーム産業が挙げられる。現世代のコンピュータゲームは、３−Ｄグラフィックス技術をますます旺盛に用いている。同時に、プレイ速度はさらに高速化している。これらが組み合わさって、比較的安価なシステムにおいて、３−Ｄグラフィックスの迅速かつ柔軟なレンダリングが真に求められるようになってきている。
【０００５】
３−Ｄコンピュータグラフィック表現を作成するために、通常、描かれるオブジェクトは、コンピュータ内で数学的モデルとして表現される。例を挙げると、３−Ｄモデルは、例えば幅、高さ、奥行きにそれぞれ対応するｘ、ｙ、およびｚ軸からなる座標系内の幾何学的な点（ｇｅｏｍｅｔｒｉｃ  ｐｏｉｎｔｓ）で構成することができる。オブジェクトは、頂点と呼ばれる、一連の点によって定義される。点すなわち頂点の位置は、そのｘ、ｙ、およびｚ座標（または他の座標系）によって定義される。グラフィックス用語では、１つの頂点は点であり、２つの頂点は線または線セグメントであり、３つの頂点は、３つすべてが「プリミティブ」である場合は三角形を定義する。これらの点が３つ以上接続されると、三角形を最も単純なポリゴンとする、１つのポリゴンが形成される。
【０００６】
画面上で３次元（３−Ｄ）グラフィックスをレンダリングして表示するには、通常、多くの計算および演算を行う。単純なグラフィックスシステムでは、そのような計算は、中央処理装置（ＣＰＵ）とグラフィック処理装置（ＧＰＵ）により、あるレベルの協調または共用処理に従って行われる。例示のシナリオでは、命令が処理され、いくつかの初期計算がＣＰＵで行われた後、レンダリングされるオブジェクトを定義する一組の座標点または頂点は、グラフィックスパイプラインでＧＰＵによってさらに処理されるために、ビデオメモリに記憶される。テッセレータは、表現されているオブジェクトの表面を効果的にカバーするよう設計された所定のアルゴリズム（テッセレーションとして知られる）に従いグラフィックスデータを複数の単純なポリゴンに分解することができる。現在、大部分のグラフィックスパイプラインでは、データは、その後、ＧＰＵに提供された命令に応じて、１つまたは複数のプロシージャルシェーダによる演算を受けることができる。
【０００７】
プロシージャルシェーダは、グラフィックスデータに対して特化した演算を実行するための、ＧＰＵの特化した処理サブユニットである。プロシージャルシェーダの一例は、一般に頂点を演算する頂点シェーダである。例えば、頂点シェーダは、位置、色、およびテクスチャ座標の演算を個々の頂点に適用することができる。頂点シェーダは、固定の、またはプログラム可能な関数演算を、グラフィックスパイプラインのビデオメモリで指定された頂点のストリームに対して実行する。頂点シェーダは、追加の幾何学形状（複数の頂点）を生成することはできないが、ホストから頂点シェーダにダウンロードされたプログラムを介して、アルゴリズム変換用に指定された頂点を演算することはできる。
【０００８】
頂点シェーダの後段に一般に置かれる、プロシージャルシェーダの別の例がピクセルシェーダである。例えば、頂点シェーダの出力は、ピクセルシェーダが演算するピクセル全域を定義する非プロシージャルシェーダユニットである、セットアップエンジンと呼ばれるプログラム不可能なユニットを通過することができる。ピクセル全域は次いで、個々のピクセルを演算するピクセルシェーダによって演算することができる。ピクセルシェーダから出力値がフレームバッファに送信され、そこで出力値は画面に表示されるのを待つか、またはホストシステムによる取り出しを待つ。３−Ｄ幾何学形状は一般に、三角形（３つの頂点の集合）と一致するが、現在では、そのような三角形（３つの関連する頂点の集合）、線セグメント、または線のどれか（２つの関連する頂点の集合）を直接演算するプロシージャルシェーダはない。
【０００９】
プログラム可能な場合、「シェーダ」はシェーディングを実行するＧＰＵのハードウェアサブユニットを意味する場合がある。また「シェーダ」は、シェーディングを実行するためにシェーダ（ハードウェア）によって使用される、メモリ、例えばレジスタ記憶に後でロードされる、ＧＰＵにダウンロードされる一組の命令またはトークンを意味する場合があるので、「シェーダ」という用語は誤用されることに留意されたい。この用語は、協働する両者を意味する場合もある。したがって、本明細書ではこの語を一般的にはどちらの意味にでも使用する場合があるので、「サブユニット」という用語もシェーダという用語に関連して使用される場合には、両方の意味を含むものと解釈されるべきだが、この用語は、シェーディングに関連付けられた処理を実行するＧＰＵのサブユニットを意味するものと解釈されるべきである。
【００１０】
今日のグラフィックスアーキテクチャにおける「フレームバッファ」という用語は、グラフィック処理装置のセットアップエンジンまたはピクセル処理装置の出力のためだけに確保された、ビデオメモリの事前に分割され、事前に割り当てられ、事前に定義された部分を一般に意味しない。フレームバッファは、一般にラスタ化および／またはデジタル／アナログコンバータ（ＤＡＣ）出力処理に関して使用されるいかなるメモリ（一般に、ＧＰＵとの相互運用に含まれるビデオメモリ）を意味するということにも留意されたい。この点で、ラスタ化という用語がより一般的に使用される場合があるが、グラフィックスパイプラインのピクセル処理またはセットアップエンジン処理に関して実行される処理は、一般にラスタ化と呼ばれる。一方、スキャン出力またはＤＡＣ出力は、フレームバッファの内容に基づいて、信号をモニタまたはＬＣＤに送る処理である。
【００１１】
今日、フレームバッファの値を、画面への表示以外の目的に使用することができるが、その用途は限られている。例えば、その値を保存、印刷、更なる変換などのためにピクセルシェーダまたは頂点シェーダが演算した後で、ホストのアプリケーションに戻すことが望まれる場合がある。このような場合、これらの値は、「技術的」には読み取ることができる。しかし、表示するために画像をバッファリングするだけの限定された部分ではなく、ビデオメモリにある値をも取り出すことは、ホストメモリ、ＣＰＵ、および特定のグラフィックスハードウェアとの使用のためにビデオメモリを構成する方法に関する上級知識の協調を必要とする非常に困難なタスクである。フレームバッファではなく、ビデオメモリのいかなる部分でも読み取られる場合、これは特に当てはまる。実際には不可能ではないが、テッセレータ、頂点シェーダ、およびピクセルシェーダによる出力のために使用されるビデオメモリの中間記憶を読み取ることは容易なことではない。場合によっては、テッセレータ、頂点シェーダ、およびピクセルシェーダの出力は、ビデオメモリに到達しない場合があるが、その代わり、複数のＧＰＵグラフィックス処理の段階（例えば、頂点シェーダからの出力は、一般に、ビデオメモリに到達せずに、事前に定義された経路を介してピクセルシェーダに送られる）間で使用するために特化したデータ経路に限定することができる。ＧＰＵ演算は、特化されたアーキテクチャに従って非常に高速に行われるので、現在のグラフィックスパイプラインの中間ビデオメモリ記憶の読み取りは、ラスタ化または他の演算のためにその出力がフレームバッファに到達するまで実現不能である。
【００１２】
従来型システムの中にあるピクセルシェーダの出力を取り出すフレームバッファメモリには、ＧＰＵによって処理された画像のようなグラフィックスデータを保存する（または演算する）ために、ホストＣＰＵによって周知の方法でアクセスすることができる。しかし、このデータは、依然として、そのような更なる演算のためにアクセスされ、ホストＣＰＵに取り出され、戻される必要がある。図１Ｂは、グラフィックスパイプラインによるデータに対する更なる演算を達成するために、フレームバッファメモリからデータの出力に対して何を行う必要があるかを示す。ＧＰＵ演算として表現される１周期のパイプライン処理の演算の後、およびホストＣＰＵにフレームバッファから値を取り出して戻した後、ホストＣＰＵは、それ以上のいかなる処理のためにでも、グラフィックスパイプラインを通して値を送って、戻すよう協調する。したがって、当技術分野で望まれる２つの主要な事柄は、（１）頂点シェーダまたはピクセルシェーダのようなサブコンポーネントから出力されたデータを、フレームバッファメモリに到達する前にグラフィックスパイプライン内で再利用、すなわち再処理する機能と、（２）ホスト資源およびメモリに関係せずに反復的に上記機能を行う機能である。
【００１３】
図１Ａに示すように、コンピューティングシステムは、ホストＣＰＵとグラフィックスハードウェアの間で分割される。ＣＰＵは、グラフィックＡＰＩを使用することを必要とするアプリケーションおよびサービスによる、グラフィックＡＰＩの呼び出しの実施に役立つ。従来、アプリケーションおよびドライバはＣＰＵ側に置かれており、それらのソースからの情報はモニタに表示されるように送られる。まず、情報は、ＡＰＩに従ってＣＰＵによってパッケージされ、ＣＰＵからＧＰＵに送られる。次いで、アプリケーションからの情報は、頂点シェーダによってアクセスされるまでメモリで待機する。頂点シェーダがその演算と判断すると、頂点シェーダから出力された情報が、ピクセルシェーダによってアクセスされるまでは特別なデータ経路を通してピクセルシェーダに出力され（出力をビデオメモリに置くことは、一般的に非常に遅い）、頂点シェーダはアイドル状態のままであるか、またはさらなるデータの処理を続ける。ピクセルシェーダがその演算を完了すると、情報は、ディスプレイにスキャンアウトされるフレームバッファに置かれるか、または更なる演算のためにホストに戻される。
【００１４】
今日の頂点およびピクセルシェーダの特化した機能を開示する特化した３−ＤグラフィックスＡＰＩが開発された。この点について、開発者は、頂点シェーダを効果的にプログラミングし、特化された挙動を実行する頂点シェーダユニットに命令または小さいプログラムをダウンロードすることができる。例えば、ＡＰＩは、頂点シェーダのより多くのレジスタに関連付けられた機能、例えばレジスタレベルにおける浮動小数点数に関する特化した頂点シェーダ機能を公開する。さらに、超高速頂点シェーダに浮動小数点数の一部のみを戻させる１つの命令群を実施することが可能である。命令が頂点シェーダの制限を考慮し、関連付けられたレジスタ記憶以上に超過しないならば、それらの命令をダウンロードすることによって様々な機能を達成することができる。
【００１５】
最も顕著なことは、頂点シェーダの段階の機能が、変換、照明、また場合によってはテクスチャ変換のためのものであることである。基本的に、変換は、頂点がどこにいつ表示されるべきかに関するデータである位置データを取り、それをモニタ、すなわち２次元画面空間用のデータに変換することである。従来、頂点変換処理は、修正せずに位置データを渡すか、または行列を使用してそのデータを修正する。頂点シェーダの段階は、通常、変換関数、照明関数、およびいくつかのテクスチャ関数を実行することに限られる。
【００１６】
ゲームがグラフィックスの細部の水準を高めるにつれ、ポリゴン密度が増し、照明および他の頂点シェーダ技術は頂点処理ステップとしてさらに重要性を増す。静的照明は、高品質であるがために照明の一般的な形式となっているが、これは、通常、頂点シェーダで計算され、テクスチャとして記憶される。静的照明は、すべての照明情報をテクスチャに置くので、頂点ごとの命令が前もって与えられない場合だけは、実行時にその情報を修正し、動的照明を可能にすることは困難である。場合によっては、頂点シェーダは、頂点座標からテクスチャ座標への行列変換を適用する。これは、通常、球体および立方体の反映マッピングおよびテクスチャアニメーションのために行われる。
【００１７】
典型的な照明の種類は、位置、方向性、またはスポットライトを含む頂点シェーダによって実行される。このような照明を追加するために、大部分が行列演算である数学的計算が、アプリケーションで定義された照明の種類を反映するように頂点を変更する。様々な照明があるが、これらは、通常、日光や街路灯のような光源が様々な特性を有する現実性を模倣する。これらの照明は、頂点シェーダの段階が計算するための複数の組合せを作成する位置、方向性、またはスポットライトであってよい。
【００１８】
したがって、頂点シェーダを使用して実行される幾何学的処理には、データに適用する各種変換、頂点に対する照明環境、およびテクスチャ変換のための素材が含まれる。固定関数とプログラム可能な頂点シェーダは、どちらも一般に、パイプラインにおけるその段階中にそれらの方法で機能する。アプリケーションがそれらの領域で処理される情報をさらに多く有する場合、頂点シェーダには障害が生じ、グラフィックスパイプラインの他のコンポーネントはアイドル状態のままとなる。
【００１９】
ピクセルシェーダに対して、特化されたピクセルシェーディング機能は、ピクセルシェーダに命令をダウンロードすることによって獲得することができる。例えば、線形補間機構をピクセルシェーダに提供する機能が公開される。さらに、多くの異なる演算修飾子の機能が、ピクセルシェーダに合わせた命令群と共に開発者に公開される。例えば、否定する機能、再マッピングする機能、バイアスをかける機能、および他の機能は、効率よいピクセルシェーディングが望ましい多くのグラフィックスアプリケーションには非常に役立つが、それら機能は単一命令の一部として実行されるので、それらはその命令に対する修飾子として表現することが最善である。すなわち、上記の機能はグラフィックス演算に有利であり、既に特化されたピクセルおよび頂点シェーダ命令群へのそれらの関数の組み込みは、開発が容易になり、および性能が改善する点で多大な付加価値を生む。したがって、ピクセルシェーダの命令回数の限度および他のハードウェア制限を超えないならば、それらの命令をダウンロードすることによって様々な機能を獲得することができる。
【００２０】
ピクセルシェーダはいくつかの行列演算（例えば、照明に対するベクトル変換）を実行するが、ピクセルシェーダの機能を、頂点を変換するために頂点シェーダによって実行されるさらに複雑な行列演算とは対照的に、多少簡素な数学的計算機能を有するとみなすことが有用な場合がある。この場合、各頂点は、処理を必要とする多くの値によって表されることができる。ピクセルシェーダに関与する数学は、浮動小数点演算に類似しており、それらの計算は、ピクセルをシェーディングし、反射率、光沢、凹凸を作成する。情報がピクセルシェーダを通過する際に実行することができる計算数は限られている。これらの限度があるため、一部の情報は、各ピクセルに対して複数のテクスチャを作成するためにマルチパス演算を必要とする。また、各パスは、パイプラインの複数のクロック周期を含む。
【００２１】
頂点シェーダは所与の頂点に対する行列を計算し、ピクセルシェーダは大部分の浮動小数点演算を計算する。プログラマーが、画面表示の値ではなく頂点の数学的変換を確認しようとする場合がある。この時点で、プログラマーは、上記のように非常に扱いの難しいフレームバッファからメモリを読み取る必要がある。
【００２２】
ピクセルシェーダおよび頂点シェーダは、ピクセルおよび頂点に対して演算することができる。グラフィックスプログラミングにおいて、プリミティブは、いかなる所与の３次元グラフィックでもそこから作成される基本的な形状である。常に使用され、定義されるプリミティブには、頂点、線、および三角形が含まれる。今日、ピクセルシェーダと頂点シェーダは、頂点に対して所与の命令により演算することができる。シェーダがプログラム可能な場合であっても、シェーダは、プリミティブとして頂点または点に対して演算することしかできない。
【００２３】
ピクセルシェーダまたは頂点シェーダの特定シェーダがグラフィックスパイプラインで演算する場合、各段階で行われる演算に起因する一定の障害がある。プログラマーが各頂点に対して各シェーダに送られる命令を制限するか、釣り合いをとるよう努めるならば、これらの障害を解決することができる。しかし、ゲームのような込み入った３−Ｄ表示のためにグラフィックスを設計する場合、命令数の釣り合いを取ることは多大なタスクとなる。ほとんどのプログラマーは、グラフィックスが所与のプログラムで目に見えて遅くなるまで、いかなる種類の最適化をも実施しない。プログラマーが使用できる最適化された方式においてさえ、グラフィックスサブシステムに要求される各種タスクに関する相違があるというだけの理由で、ハードウェアは情報が通過するのを待機しながらアイドル状態のまま使用されない。さらに、いかなるグラフィックスプログラムでも最適化するために、プログラマーは、まず障害の原因を特定する必要があるが、これは退屈なタスクである場合がある。したがって、実行が必要とされるタスクに対してデータのコア処理が自動的に合わされるように、グラフィックスサブシステムのコアを動的に再構成することができることが望ましい。
【００２４】
したがって、コンピュータシステムにおけるグラフィックスデータのレンダリングは、資源集約処理の集合である。シェーディングの処理、すなわち、グラフィックスデータ構造に関連付けられた、色などのような特定のプリミティブに関する値を特定するために使用される、特化されたグラフィックスデータ構造の１つ以上の集合に対して複雑なアルゴリズムを実行する処理の例として、このような計算集約的で複雑な処理がある。一般に、シェーディングの処理は、ある一定の程度に対して正規化されてきた。シェーダと共に動作するよう設計されたソースコードをアプリケーションに渡すことにより、シェーダは、アプリケーションが作成／利用できるオブジェクトになり、複雑なビデオグラフィックスを効率よく描くことを容易にする。頂点シェーダおよびピクセルシェーダは、そのようなシェーダの例である。
【００２５】
したがって、プログラム可能な演算を頂点単位およびピクセル単位で導入することは、最近のグラフィックスハードウェアでは広く行われるようになってきた。この一般的なプログラム可能性により、性能水準は高いが創造性の限られたアルゴリズムが潜在するようになった。しかし、これら指摘した点の他に、今日、達成できることにはある程度の限度がある。通常、頂点のいくつかの演算を実行するために、現在では、頂点シェーダおよびピクセルシェーダでパイプラインをレンダリングすることによって、幾何学データのストリームが頂点シェーダに入力される。この結果、その幾何学データはピクセルデータに変換され、ピクセルデータのストリームを出力する。頂点シェーダは、特化された機能を実行するように頂点シェーダをプログラムする命令を受け取ることができるが、頂点シェーダ命令のサイズおよび複雑性には限度がある。同様に、ピクセルシェーダは、任意選択でデータに対して１つまたは複数の変換を実行し、ピクセルデータのストリームを出力することができる。同様に、ピクセルシェーダも、特化された機能を実行するようにピクセルシェーダをプログラムする命令を受け取ることができるが、ピクセルシェーダ命令のサイズおよび複雑性には限度がある。
【発明の開示】
【発明が解決しようとする課題】
【００２６】
従来、プログラマーは、頂点シェーダとピクセルシェーダを常用している。現在のプログラム可能なハードウェアは、ある程度限られたプログラム可能な機構を有するが、それによってプログラマーは、値がラスタ化される前のパイプラインの終わりに到達しないうちに値の再利用を指定できるわけではない。プログラマーは、シェーダの１つまたは複数での障害を回避するために、グラフィックスパイプラインの様々なコンポーネントの使用の釣り合いを取るよう努めることはできるが、グラフィックスハードウェアは固定されている。一部の特化されたハードウェアは、特化されたタスクに対するプロシージャルシェーダの特化された組合せおよび構成を有する特化されたタスクのために構築されているが、このハードウェアを他のタスクに対して再構成することはできない。したがって、それらの特化されたタスク以外のタスクを実行し、複数のシェーダのうちの１つだけのための命令によって情報が特に修正される必要がある場合、その修正は、恐らくは許容範囲を超えるほどにアプリケーションに依存して、待機する必要があることがある。さらに、頂点に対してシェーダは演算することができるが、プログラマーは、他のプリミティブに対して直接作用するグラフィックスＡＰＩ演算によってそのように指定することはできない。すなわち、頂点を例外として、プログラマーは、グラフィックスパイプラインでの処理のためにプリミティブとして任意にプリミティブをパッケージすることはできない。
【００２７】
テッセレーションは、通常、ギャップまたはオーバーラップなしに境界の付けられた幾何学領域を、１つまたは数種の合同な平面図でカバーすることを伴う、グラフィックスパイプラインの開始時に行われる処理である。既存のテッセレータは、少数の制御点の頂点に基づいて新しい頂点のグリッドを作成するために、いくつかの基本的なアルゴリズムを実施する。この処理は、事前に固定されたアルゴリズムに基づいており、パイプラインの初期段階に限定される。したがってこの処理は、プロシージャルシェーダによる処理後にパイプラインの中間で追加の任意の幾何学を作成するようにプログラムすることはできない。その上、頂点がテッセレータによって一度生成されると、パイプラインには頂点を生成できる場所がなくなる。すなわち、従来の頂点シェーダは、頂点を受け取り、処理し、出力することができるが、新しい頂点を生成することはできない。
【００２８】
したがって、命令数の制限、出力形式における制限、およびパイプライン内のデータ共用の欠如に起因する、現在のグラフィックスパイプラインアーキテクチャ、ＡＰＩおよびハードウェアに関する現在のプログラム可能性の欠点を克服するシステムおよび方法を実装することが望ましい。
【課題を解決するための手段】
【００２９】
上記で特定された当技術分野の欠点を考慮して、本発明は、ピクセルシェーダ、頂点シェーダ、または幾何学シェーダとして機能することのできる共通コアを有することにより、グラフィックスパイプラインでのハードウェアの使用を最適化するためのシステムおよび方法を提供する。ここで、幾何学シェーダは、頂点または他の中間形式にデータを変換せずに、グラフィックスデータに対してより直接的に演算することができるように、三角形を含むいかなるプリミティブに対しても入力および出力として演算することのできるプログラム可能なシェーダである。さらに、本発明によれば、テッセレーション段階でも、または幾何学シェーダによっても、パイプライン内で新しい頂点を生成することができる。一実施形態では、テッセレータは、プロシージャルシェーダがグラフィックスデータに対して演算した後にプログラム可能にパイプライン内で幾何学形状を生成するために使用することができる。幾何学シェーダは、グラフィックス形状およびパイプライン内で適用される効果の実行中に変更を達成するために、プログラム可能な方法で既存の幾何学形状を補うために使用することができる。
【００３０】
共通コアは、ピクセルシェーダ、頂点シェーダ、または幾何学シェーダのようにプログラム可能または動的に構成可能である点で優れている。したがってグラフィックスパイプラインは、特定アプリケーションに対する計算の必要性の最適化に基づいて、すべてのピクセルシェーダ、すべての頂点シェーダ、またはすべての幾何学シェーダ、もしくはシェーダの組合せを使用することができる。共通のコアは、ホストによるグラフィックスパイプラインに対する需要により、動的に構成（および再構成）することができる。
【００３１】
幾何学シェーダに関して、ストリーム出力を介して、本発明のグラフィックスＡＰＩおよび関連付けられたハードウェアは、アプリケーション開発者がパイプラインによる再利用のためにビデオメモリを読み取り、データを再パッケージングする際にＣＰＵの支援を伴わず、グラフィックスパイプライン内で一度データをプログラム可能に再循環させることを可能にする。一実施形態では、本発明は、ＧＰＵに達する作業項目のスケジュール設定を支援するグラフィックスパイプラインを入力するすべてのプリミティブに対する独自の索引と、ＩＥＥＥ標準に準拠する浮動小数点および整数計算の正確性とを含む。幾何学シェーダは、ＧＰＵが処理中のグラフィックスデータのストリームの隣接プリミティブまたはピクセルに関する情報も処理することができる。
【００３２】
本発明の他の利点および特性を以下で説明する。
【発明を実施するための最良の形態】
【００３３】
本発明の実施形態にかかる、拡張グラフィックスパイプラインのためのシステムおよび方法を、添付の図面を参照してさらに説明する。
【００３４】
（概要）
上記のように、本発明は、ピクセルシェーダ、頂点シェーダ、および幾何学シェーダに対する動的に構成可能な共通シェーダコアによって、現在のハードウェアにさらに高い機能を追加することにより、グラフィックスパイプラインを拡張する。異なるシェーダに対する同一ハードウェアユニットが再構成によって負荷の平衡を提供するか、またはシェーダが必要ない場合はパイプラインの一部としてシェーダを使用不可にし、したがって活動状態のままである段階に対して資源を解放するので、共通シェーダコアは簡素化された最適化を可能にする。本発明は、点、線、および三角形を含むプリミティブに対して演算することができる。また本発明は、数の限定された事前設定モードのうちの１つで演算するテッセレータにより、または比較的任意にはプログラム可能な幾何学シェーダにより、新しい幾何学形状をパイプライン内で生成することのできる、幾何学シェーダを導入する点において優れている。本発明の別の実施形態は、プリミティブデータをパイプラインのどこかで再利用するためにバッファにストリームアウトすることができ、パイプライン内で反復的にプログラム可能なアルゴリズムのアプリケーションを可能にするストリーム出力を含む。追加の特性には、グラフィックスパイプラインを通過し、グラフィックスパイプライン内で正確な整数および浮動小数点計算を実行する、各プリミティブに対して独自の索引が含まれる。
【００３５】
（ネットワーク接続し、分散した環境例）
当業者ならば、本発明が、コンピュータネットワークの一部として、もしくは分散型コンピューティング環境において配置することができ、いかなるコンピュータまたは他のクライアントもしくはサーバ装置と共にでも実装することができることを理解できよう。この点で、本発明は、任意の数のメモリまたは記憶ユニットを有するいかなるコンピュータシステムまたは環境、および本発明による拡張グラフィックスパイプラインの限定されない実施態様に対する処理と共に用いられることができる、任意の数の記憶ユニットまたはボリューム全体にわたって行われる任意の数のアプリケーションおよび処理に関する。本発明は、ネットワーク環境に配置されたサーバコンピュータおよびクライアントコンピュータ、または遠隔記憶またはローカル記憶を有する分散型コンピューティング環境を有する環境に適用することができる。本発明は、遠隔サービスまたはローカルサービスに伴う情報を生成し、受信し、送信するためのプログラミング言語機能、インタプリテーション機能および実行機能を有するスタンドアロンのコンピューティング装置にも適用することができる。ゲーム環境では、グラフィックスパイプラインは、特にネットワークまたは分散型コンピューティング環境で動作するこれらのコンピューティング装置に関し、したがって本発明による拡張グラフィックスパイプライン技術は、これらの環境に非常に大きな有効性をもって適用することができる。
【００３６】
分散型コンピューティングは、コンピューティング装置とシステムの間で交換することによりコンピュータ資源およびサービスの共用を提供する。これらの資源およびサービスは、情報交換、ファイルのキャッシュ記憶およびディスク記憶を含む。分散型コンピューティングは、ネットワークへの接続性を利用し、クライアントがそれらの収集力を利用して企業全体を利することを可能にする。この点で、様々な装置が、本発明のグラフィックスパイプライン処理に関与する、アプリケーション、オブジェクトまたは資源を有することができる。
【００３７】
図２Ａは、ネットワーク接続された、または分散型のコンピューティング環境例の略図を提供する。この分散型コンピューティング環境は、コンピューティングオブジェクト１０ａ、１０ｂなど、およびコンピューティングオブジェクトまたは装置１１０ａ、１１０ｂ、１１０ｃなどを含む。これらのオブジェクトは、プログラム、メソッド、データストア、プログラム可能な論理などを含むことができる。オブジェクトは、ＰＤＡ、オーディオ／ビデオ装置、ＭＰ３プレーヤ、パーソナルコンピュータなどのような同じ装置または異なる装置の一部を含むことができる。各オブジェクトは、通信ネットワーク１４により別のオブジェクトと通信することができる。このネットワークは、それ自体が図２Ａのシステムにサービスを提供する他のコンピューティングオブジェクトおよびコンピューティング装置を含むことができ、それ自体が複数の相互接続されたネットワークを表すことができる。本発明の一態様によれば、各オブジェクト１０ａ、１０ｂなど、または１１０ａ、１１０ｂ、１１０ｃなどは、本発明によるグラフィックスパイプライン処理の利用を要求するために、ＡＰＩを利用するアプリケーションまたは他のオブジェクト、ソフトウェア、ファームウェア、および／またはハードウェアを含むことができる。
【００３８】
１１０ｃのようなオブジェクトが、別のコンピューティング装置１０ａ、１０ｂなど、または１１０ａ、１１０ｂなどでホストされることができることも理解することができるだろう。したがって、図示した物理環境は、接続された装置をコンピュータとして示すことができるが、このような図面は例示にすぎず、代わりに、この物理環境を、ＰＤＡ、テレビジョン、ＭＰ３プレーヤなどのような各種デジタル装置と、インターフェース、ＣＯＭオブジェクトなどのようなソフトウェアオブジェクトとを含むように図示し説明することもできる。
【００３９】
分散型コンピューティング環境をサポートする、各種システム、コンポーネントおよびネットワーク構成がある。例えば、複数のコンピューティングシステムを、ローカルネットワークまたは広域分散型ネットワークによって、有線または無線システムにより１つに接続することができる。現在、ネットワークの多くは、広域に分散されたコンピューティングのための基盤を提供し、多くの異なるネットワークを含むインターネットに結合される。本発明による拡張グラフィックスパイプラインに付随する通信例に対して、それら基盤のどれでも使用することができる。
【００４０】
ホームネットワーク接続環境では、それぞれが独自のプロトコルをサポートすることのできる電線、データ（無線と有線の両方）、音声（例えば、電話）、および娯楽メディアのような、少なくとも４つの分離したネットワーク転送媒体がある。照明スイッチおよび照明機器のような大部分の家庭用制御装置は、接続のために電線を使用することができる。データサービスは、ブロードバンド（例えば、ＤＳＬまたはケーブルモデム）として家庭に導入される場合があり、無線接続（例えば、ＨｏｍｅＲＦまたは８０２．１１Ｂ）または有線接続（例えば、Ｈｏｍｅ  ＰＮＡ、Ｃａｔ  ５、Ｅｔｈｅｒｎｅｔ（登録商標）、および電線）を使用して家庭内でアクセス可能である。音声トラフィックは、有線（例えば、Ｃａｔ  ３）または無線（例えば、携帯電話）として家庭に導入される場合があり、Ｃａｔ  ３線を使用して家庭内で分散することができる。娯楽メディアまたは他のグラフィカルデータは、衛星放送またはケーブルを介して家庭に導入される場合があり、通常は、同軸ケーブルを使用して家庭内で分散される。ＩＥＥＥ  １３９４およびＤＶＩは、数群のメディア装置に対するデジタル相互接続でもある。これらネットワーク環境のすべておよびプロトコル標準として登場する可能性のある他のネットワーク環境は、インターネットにより外界に接続することのできる、イントラネットのようなネットワークを形成するために相互接続することができる。すなわち、データの記憶および送信、したがって転送のために様々な分離したソースが存在するが、コンピューティング装置は、本発明による拡張グラフィックスパイプラインを利用するプログラムオブジェクトに起こることのある、アクセスされ、利用されるデータのようにデータを共有するいくつかの方法を要求する。
【００４１】
インターネットは、コンピュータネットワーク接続の分野では周知のプロトコルのＴＣＰ／ＩＰスイートを利用する、ネットワークとゲートウェイとの集合の総称である。ＴＣＰ／ＩＰは、「伝送制御プロトコル／インターネットプロトコル」の略語である。インターネットは、ユーザが１つ以上のネットワークを介して対話し情報を共有することを可能にする、ネットワーク接続プロトコルを実行するコンピュータによって相互接続された、地理的に分散して存在する遠隔コンピュータネットワークのシステムとして説明することができる。このような広域の情報共有があるために、インターネットのような遠隔ネットワークは、特化された演算またはサービスを基本的に制約なしに実行するため、開発者がソフトウェアアプリケーションを設計することのできるオープンシステムへとさらに全体的に進化した。
【００４２】
したがって、ネットワーク基盤は、クライアント／サーバ、ピアツーピア、またはハイブリッドアーキテクチャのようなネットワークトポロジのホストを可能にする。「クライアント」は、関連しない別のクラスまたはグループのサービスを使用する１つのクラスまたはグループのメンバーである。したがって、コンピューティングにおいて、クライアントは、別のプログラムによるサービスの提供を必要とする１つの処理、すなわち概して一組の命令またはタスクである。クライアント処理は、他のプログラムまたはそのサービス自体に関するいかなる作業の詳細をも「知る」ことを必要とせずに、要求したサービスを利用する。クライアント／サーバアーキテクチャにおいて、特にネットワーク接続されたシステムでは、クライアントは、一般に、別のコンピュータ、例えばサーバが提供する共有ネットワーク資源にアクセスするコンピュータである。図２Ａの例では、コンピュータ１１０ａ、１１０ｂなどはクライアントとみなすことができ、コンピュータ１０ａ、１０ｂなどはサーバとみなすことができる。ここで、サーバ１０ａ、１０ｂなどはデータを維持するが、そのデータは次にクライアントコンピュータ１１０ａ、１１０ｂなどで複製される。いかなるコンピュータでも、その状況によって、クライアント、サーバ、またはこの両方とみなすことができる。これらコンピューティング装置のどれでも、本発明の拡張グラフィックスパイプラインの実施態様に特有のグラフィックスプログラミング技術に関与する場合のあるデータの処理、またはサービスもしくはタスクの要求を行うことができる。
【００４３】
サーバは、通常、インターネットのような遠隔またはローカルネットワークを介してアクセス可能な、遠隔コンピュータシステムである。クライアント処理は、第１のコンピュータシステムで活動状態にあってよく、サーバ処理は、第２のコンピュータシステムで活動状態にあってよい。この場合、クライアント処理とサーバ処理は通信媒体を介して相互に通信し、したがって分散機能を提供し、複数のクライアントがサーバの情報収集機能を利用することを可能にする。拡張グラフィックスパイプラインのグラフィックスプログラミング技術に従って利用されるいかなるソフトウェアオブジェクトでも、複数のコンピューティング装置またはオブジェクト全体に分散することができる。
【００４４】
１つ以上のクライアントと１つ以上のサーバとは、１つ以上のプロトコル層が提供する機能を利用して相互に通信する。例えば、ハイパーテキスト転送プロトコル（ＨＴＴＰ）は、ワールドワイドウェブ（ＷＷＷ）または「ウェブ」に関して使用される共通プロトコルである。通常、サーバコンピュータまたはクライアントコンピュータを相互に特定するために、ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレスのようなコンピュータネットワークアドレスまたはＵＲＬ（Ｕｎｉｖｅｒｓａｌ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）のような他のリファレンスを使用することができる。このネットワークアドレスは、ＵＲＬアドレスとして参照することができる。通信媒体を介して通信を提供することができ、例えば１つ以上のクライアントと１つ以上のサーバを、大容量通信用の１つ以上のＴＣＰ／ＩＰ接続を介して相互に連結することができる。
【００４５】
したがって、図２Ａは、本発明を利用することのできる、ネットワーク／バスを介してサーバがクライアントコンピュータと通信する、ネットワーク接続された、または分散型の環境例を示す。より詳細には、複数のサーバ１０ａ、１０ｂなどは、本発明により、ＬＡＮ、ＷＡＮ、イントラネット、インターネットなどの通信ネットワーク／バス１４を介して、携帯型コンピュータ、ハンドヘルドコンピュータ、シンクライアント、ネットワーク接続された機器、またはＶＣＲ、テレビ、オーブン、照明、ヒータなどのような複数のクライアントまたは遠隔コンピューティング装置１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどと相互接続される。したがって、本発明は、本発明の拡張グラフィックスパイプラインを利用するグラフィックスインターフェースを実装することが望ましいものと共に、いかなるコンピューティング装置にも適用することができるとみなされる。
【００４６】
通信ネットワーク／バス１４がインターネットであるネットワーク環境では、例えばサーバ１０ａ、１０ｂなどは、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどがＨＴＴＰのような複数の周知のプロトコルのどれかによって通信するウェブサーバであってよい。サーバ１０ａ、１０ｂなどは、分散型コンピューティング環境の特徴である場合があるように、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどとして機能することもできる。通信は、適切ならば、無線であっても有線であってもよい。クライアント装置１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどは、通信ネットワーク／バス１４を介して通信してもしなくてもよく、独立した通信をそれに関連付けることができる。例えば、テレビまたはＶＣＲの場合、その制御に、ネットワーク接続された態様があってもなくてもよい。各クライアントコンピュータ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなど、およびサーバコンピュータ１０ａ、１０ｂなどは、様々なアプリケーションプログラムモジュールまたはオブジェクト１３５、および様々なタイプの記憶素子またはオブジェクトに対する接続またはアクセスを装備することができ、これらを介してファイルまたはデータストリームを記憶することができ、またはファイルまたはデータストリームの１つ以上の部分をこれらにダウンロードし、送信し、移行させることができる。コンピュータ１０ａ、１０ｂ、１１０ａ、１１０ｂなどの１つまたは複数のどれでも、データベース２０、または本発明によって処理されるデータを記憶するためのデータベースまたはメモリ２０のような他の記憶素子の維持および更新を担当することができる。したがって、本発明は、コンピュータネットワーク／バス１４にアクセスし、対話することのできるクライアントコンピュータ１１０ａ、１１０ｂなど、およびクライアントコンピュータ１１０ａ、１１０ｂなどおよび他の類似の装置と対話することのできるサーバコンピュータ１０ａ、１０ｂなど、およびデータベース２０を有する、コンピュータネットワーク環境で用いられることができる。
【００４７】
（コンピューティング装置例）
図２Ｂおよび以下の解説は、本発明を実施することのできる適切なコンピューティング環境の簡単な概説を提供することを目的とする。しかし、各種のハンドヘルド、携帯型、および他のコンピューティング装置およびコンピューティングオブジェクトは、本発明との使用、すなわちＧＰＵがコンピューティング環境に存在する任意の場所における使用を考慮することを理解されたい。以下では汎用コンピュータを説明するが、これは一例であって、本発明は、ネットワーク／バスの相互運用可能性および対話を有するシンクライアントでも実施することができる。したがって、本発明は、非常に少数の、または最小限のクライアント資源に関与するネットワーク接続されたホストサービスの環境、例えば、クライアント装置が機器内に配置されたオブジェクトのようなネットワーク／バスに対するインターフェースとしてのみ機能するなどのネットワーク接続された環境で実施することができる。基本的に、データを記憶することができ、そこからデータを取り出すか、または別のコンピュータにそこからデータを送信することのできる場所ならどこでも、本発明によるグラフィックス最適化技術の演算のために望ましい、または適切な環境である。
【００４８】
必須ではないが、本発明は、装置またはオブジェクト用のサービスの開発者が使用するために、オペレーティングシステムを介して実施し、かつ／または本発明のグラフィックスパイプライン用のグラフィックスプログラミング技術と共に動作するアプリケーションソフトウェアに含めることができる。ソフトウェアを、クライアントワークステーション、サーバ、または他の装置のような１つまたは複数のコンピュータによって実行中の、プログラムモジュールのようなコンピュータ実行可能な命令の一般的な状況で説明することができる。一般に、プログラムモジュールは、特定のタスクを実行し、または特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含む。通常、プログラムモジュールの機能は、様々な実施形態で、必要に応じて組み合わせ、または分散することができる。さらに、当業者ならば、本発明を、他のコンピュータシステム構成およびプロトコルで実行することができることを理解するだろう。本発明と共に使用するのに適することのできる他の周知のコンピューティングシステム、環境、および／または構成には、限定ではないが、パーソナルコンピュータ（ＰＣ）、現金自動預け払い機、サーバコンピュータ、ハンドヘルド装置またはラップトップ装置、マルチプロセッサシステム、マイクロプロセッサベースのシステム、プログラム可能な家庭用電化製品、ネットワークＰＣ、機器、照明、環境制御エレメント、ミニコンピュータ、メインフレームコンピュータなどが含まれる。本発明は、通信ネットワーク／バスまたは他のデータ伝送媒体を介してリンクされる遠隔処理装置でタスクが実行される、分散型コンピューティング環境でも実施することができる。分散型コンピューティング環境では、プログラムモジュールは、メモリ記憶装置を含めてローカルおよび遠隔コンピュータ記憶媒体に置くことができ、クライアントノードはサーバノードとして振舞うことができる。
【００４９】
図２Ｂはしたがって、本発明を実施することのできる適切なコンピューティングシステム環境１００の一例を示す。ただし、これは、上記で明らかにしたように、コンピューティングシステム環境１００は、適切なコンピューティング環境の一例に過ぎず、本発明の用途または機能の範囲に対するいかなる限定も示すことを目的とするものではない。また、コンピューティング環境１００は、動作環境例１００で示されるどのコンポーネントまたはコンポーネントのどのような組合せにも依存したり、これを必要としたりするものと解釈されるべきではない。
【００５０】
図２Ｂを参照すると、本発明を実施するためのシステム例は、コンピュータ１１０の形式の汎用コンピューティング装置を含む。コンピュータ１１０のコンポーネントは、限定はしないが、処理装置１２０、システムメモリ１３０、およびシステムメモリを含む様々なシステムコンポーネントを処理装置１２０に連結するシステムバス１２１を含む。システムバス１２１は、様々なバスアーキテクチャを使用する、メモリバスまたはメモリコントローラ、周辺バス、およびローカルバスを含めて各種バス構造のどれであってもよい。限定ではなく一例として、このようなアーキテクチャは、ＩＳＡ（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅｓ）バス、ＭＣＡ（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ）バス、ＥＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ）バス、ＶＥＳＡ（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ）ローカルバス、および（メザニンバスとして知られる）ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスを含む。
【００５１】
コンピュータ１１０は、通常、様々なコンピュータ読取り可能な媒体を含む。コンピュータ読取り可能な媒体は、コンピュータ１１０によってアクセスすることのできる任意の入手可能な媒体であってよく、揮発性および不揮発性媒体、取り外し可能および固定の媒体の両方を含む。限定ではなく一例として、コンピュータ読取り可能な媒体は、コンピュータ記憶媒体と通信媒体を含むことができる。コンピュータ記憶媒体は、コンピュータ読取り可能な命令、データ構造、プログラムモジュールまたは他のデータのような情報の記憶のために、任意の方法または技術においても実施される揮発性および不揮発性、ならびに取り外し可能および固定の媒体を含む。コンピュータ記憶媒体は、限定ではないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリまたは他のメモリ技術、ＣＤＲＯＭ、デジタル多用途ディスク（ＤＶＤ）または他の光ディスク記憶、磁気カセット、磁気テープ、磁気ディスク記憶または他の磁気記憶装置、または所望の情報を記憶するために使用することができ、コンピュータ１１０によってアクセス可能な任意の他の媒体を含む。通信媒体は、通常、コンピュータ読取り可能な命令、データ構造、プログラムモジュール、もしくは搬送波または他の搬送機構のような変調されたデータ信号形式の他のデータを実施し、いかなる情報配信媒体をも含む。「変調されたデータ信号」という用語は、その特徴の１つまたは複数を、情報を信号に符号化するような方法で設定または変更させた信号を意味する。限定ではなく一例として、通信媒体は、有線ネットワークまたは直接配線接続のような有線媒体と、アコースティック、ＲＦ、赤外線および他の無線媒体のような無線媒体とを含む。上記のどの組合せでも、コンピュータ読取り可能な媒体の範囲に含まれるべきである。
【００５２】
システムメモリ１３０は、読み出し専用メモリ（ＲＯＭ）１３１およびランダムアクセスメモリ（ＲＡＭ）１３２のような、揮発性および／または不揮発性メモリの形式のコンピュータ記憶媒体を含む。起動時などにコンピュータ１１０内の素子間で情報を転送することに役立つ基本ルーチンを含む、基本入出力システム１３３（ＢＩＯＳ）は、通常、ＲＯＭ  １３１に記憶される。ＲＡＭ  １３２は、通常、処理装置１２０に直接アクセス可能であり、かつ／または処理装置１２０が現在動作中の、データおよび／またはプログラムモジュールを含む。限定ではなく一例として、図２Ｂは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７を示す。
【００５３】
コンピュータ１１０は、他の取り外し可能／固定の、揮発性／不揮発性コンピュータ記憶媒体を含むこともできる。一例としてのみ、図２Ｂは、固定の不揮発性磁気媒体から読み取り／書き込むハードディスクドライブ１４１、取り外し可能な不揮発性磁気ディスク１５２から読み取り／書き込む磁気ディスクドライブ１５１、ＣＤ−ＲＯＭまたは他の光媒体のような取り外し可能な不揮発性光ディスク１５６から読み取り／書き込む光ディスクドライブ１５５を示す。この動作環境例で使用することができる他の取り外し可能／固定の揮発性／不揮発性コンピュータ記憶媒体は、限定ではないが、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、デジタルビデオテープ、固体ＲＡＭ、固体ＲＯＭなどを含む。ハードディスクドライブ１４１は、通常、インターフェース１４０のような固定のメモリインターフェースを介してシステムバス１２１に接続され、磁気ディスクドライブ１５１および光ディスクドライブ１５５は、通常、インターフェース１５０のような取り外し可能なメモリインターフェースによってシステムバス１２１に接続される。
【００５４】
上記で解説し、図２Ｂに示したドライブおよびそれらの関連付けられたコンピュータ記憶媒体は、コンピュータ読取り可能な命令、データ構造、プログラムモジュール、および他のデータの記憶域をコンピュータ１１０に提供する。図２Ｂでは、例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６およびプログラムデータ１４７を記憶するように示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、およびプログラムデータ１３７と同じであっても、異なってもよいということに留意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、およびプログラムデータ１４７には、それらが少なくとも別々のものであることを示すために別の参照番号を付した。ユーザは、コンピュータ１１０に、キーボード１６２および一般にマウス、トラックボールまたはタッチパッドと呼ばれるポインティングデバイス１６１のような入力装置によってコマンドおよび情報を入力することができる。他の入力装置（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信用アンテナ、スキャナなどを含むことができる。これらおよび他の入力装置は、システムバス１２１に連結されたユーザ入力インターフェース１６０を介して処理装置１２０に接続されることがよくあるが、パラレルポート、ゲームポートまたはユニバーサルシリアルバス（ＵＳＢ）のような他のインターフェースおよびバス構造によって接続することもできる。ノースブリッジのようなグラフィックスインターフェース１８２も、システムバス１２１に接続することができる。ノースブリッジは、ＣＰＵまたはホスト処理装置１２０と通信するチップセットであり、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  ＧｒａｐｈｉｃｓＰｒｏｔ）通信を担当する。１つまたは複数のグラフィックス処理装置（ＧＰＵ）１８４は、グラフィックスインターフェース１８２と通信することができる。この点で、ＧＰＵ  １８４は、一般に、レジスタ記憶のようなオンチップメモリ記憶を含み、ＧＰＵ  １８４はビデオメモリ１８６と通信する。この場合、本発明の用途の可変性が影響している場合がある。しかし、ＧＰＵ  １８４は、コプロセッサの一例であり、したがって様々なコプロセッシング装置をコンピュータ１１０に含めることができ、様々なコプロセッシング装置はピクセルシェーダおよび頂点シェーダのような様々なプロシージャルシェーダを含むことができる。モニタ１９１または他の種類の表示装置も、ビデオメモリ１８６と通信することのできるビデオインターフェース１９０のようなインターフェースを介してシステムバス１２１に接続される。モニタ１９１に加え、コンピュータは、出力周辺インターフェース１９５を介して接続することのできるスピーカ１９７およびプリンタ１９６のような、他の周辺出力装置も含むことができる。
【００５５】
コンピュータ１１０は、論理接続を使用して、遠隔コンピュータ１８０のような１つまたは複数の遠隔コンピュータに、ネットワーク接続された、または分散された環境で動作することができる。遠隔コンピュータ１８０は、パーソナルコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア装置または他の共通ネットワークノードであってよく、図２Ｂにはメモリ記憶装置１８１しか示さないが、通常は、コンピュータ１１０に関して上記で説明した要素の多く、またはすべてを含む。図２Ｂに示した論理接続は、ローカルエリアネットワーク（ＬＡＮ）１７１および広域ネットワーク（ＷＡＮ）１７３を含むが、他のネットワーク／バスを含むこともできる。このようなネットワーク接続環境は、家庭、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットでは一般的である。
【００５６】
ＬＡＮネットワーク接続環境で使用される場合、コンピュータ１１０は、ネットワークインターフェースまたはアダプタ１７０を介してＬＡＮ  １７１に接続される。ＷＡＮネットワーク接続環境で使用される場合、コンピュータ１１０は、通常、モデム１７２またはインターネットのようなＷＡＮ  １７３を介して通信を確立するための他の手段を含む。内蔵であっても外付けであってもよいモデム１７２を、ユーザ入力インターフェース１６０または他の適切な機構を介してシステムバス１２１に接続することができる。ネットワーク接続環境では、コンピュータ１１０に関して示したプログラムモジュールまたはその一部を、遠隔メモリ記憶装置に記憶することができる。限定ではなく一例として、図２Ｂは、遠隔アプリケーションプログラム１８５がメモリ記憶装置１８１に常駐するように示す。図示したネットワーク接続は一例であり、コンピュータ間に通信リンクを確立する他の手段を使用することができることが理解されよう。
【００５７】
（分散型コンピューティングフレームワークまたはアーキテクチャ例）
様々な分散型コンピューティングフレームワークが、パーソナルコンピューティングおよびインターネットの集中に鑑みて開発されている。個人ユーザおよびビジネスユーザにはどちらにも、アプリケーションおよびコンピューティング装置に対してシームレスに相互運用可能でありウェブ対応インターフェースが提供されており、コンピューティング動作をますますウェブブラウザまたはネットワーク指向にする。
【００５８】
例えば、ＭＩＣＲＯＳＯＦＴ（登録商標）社の管理するコードプラットフォーム、すなわち．ＮＥＴは、サーバ、ウェブベースのデータ記憶およびダウンロード可能な装置ソフトウェアのようなビルディングブロックサービスを含む。一般に、．ＮＥＴプラットフォームは、（１）コンピューティング装置の範囲全体を協調させ、ユーザ情報を自動的に更新させ、それらすべてに対して同期を取る機能、（２）ＨＴＭＬではなくＸＭＬをより多く使用することによって可能となる、ウェブページに対するさらに優れた対話機能、（３）例えば電子メールまたはＯｆｆｉｃｅ．ＮＥＴのようなソフトウェアのような様々なアプリケーションの管理に関して、カスタマイズされたアクセスと中央開始点からユーザへの製品およびサービスの提供とを特徴とするオンラインサービス、（４）ユーザと装置の間での情報へのアクセスならびに情報の同期の効率および容易性を高める、集中化したデータ記憶、（５）電子メール、ファックス、および電話のような様々な通信媒体を統合する機能、（６）開発者に対して、再利用可能なモジュールを作成し、したがって生産性を高め、プログラミングエラー数を低減する機能、および（７）多くの他のプラットフォーム横断および言語統合機能を提供する。
【００５９】
本発明のいくつかの実施形態をコンピューティング装置に常駐するソフトウェアに関連して説明したが、メソッドが．ＮＥＴコードのような管理コードによって可能となり、他の分散型コンピューティングフレームワークにある言語およびサービスのすべてに含まれ、サポートされ、これによってアクセスすることができるように、本発明の１つまたは複数の部分を、オペレーティングシステム、アプリケーションプログラミングインターフェース（ＡＰＩ）または「ミドルマン」オブジェクト、制御オブジェクト、ハードウェア、ファームウェア、中間言語命令またはオブジェクトなどを介して実施することもできる。
【００６０】
（拡張グラフィックスパイプラインを提供するためのシステムおよび方法）
本発明の背景技術および概要で説明したように、本発明は、資源の使用を最適化し、グラフィックスパイプライン内の作業負荷の均衡をとり、ＩＥＥＥ準拠の整数または浮動小数点値による計算情報へのアクセスを可能にし、付加的なプログラム可能性を提供する、グラフィックスパイプラインに関するシステムおよび方法を導入することにより、グラフィックス処理技術の最新技術を改善する。本発明は、幾何学処理およびプログラム可能シェーダを対象とする。拡張グラフィックスパイプラインは、すべてのシェーダへの共通のコアと、パイプラインで行われる計算に対するストリーム出力と、プリミティブのプログラミングならびに新しい幾何学形状の生成を可能にする幾何学シェーダとの導入を含む。
【００６１】
図３Ａは、グラフィックス処理装置（ＧＰＵ）１８４’を含む、ビデオカードのようなグラフィックスサブユニット例と、関連付けられたグラフィックスパイプライン１８４’−１のハードウェア構成例とを示す。グラフィックスパイプライン１８４’−１の一実施形態は、図に示すように、頂点シェーダ１８４’−１ａ１および１８４’−１ａ２のような共通コア要素１８４’−１ａの複数のインスタンス、関連付けられたストリーム出力１８４’−２を有する幾何学シェーダ１８４’−１ａ３、およびピクセルシェーダ１８４’−１ａ４を含む。この実施形態は、ＧＰＵ１８４’の外にデータを第１の共通コア１８４’−ｌａ１に送信する入力アセンブラを含む。図に示すように、この実施形態の第１の共通コアは、頂点シェーダとして構成される。次いでデータはテッセレータ１８４’−１ｂに送信され、テッセレータ１８４’−１ｂはデータに対するテッセレーションを実行する。テッセレータ１８４’−１ｂに続いて、パイプラインには別の共通コアがある。これは、データに対する事後テッセレーションの頂点シェーディングを実行するために使用することができる。この実施形態では、テッセレータのステップは任意選択である。第２の共通コアの後には、幾何学シェーダ１８４’−１ａ３として構成された第３の共通コアが続く。幾何学シェーダは、１つのプリミティブを取り、１つもしくは複数のプリミティブを出力し、または出力しない。出力されたプリミティブは、頂点またはピクセルシェーダのどちらかよりも多くのデータを含むことができる。第３の共通コアの後に、ストリーム出力１８４’−２があるが、これは、この地点に到達したプリミティブを１つまたは複数の出力バッファにストリームアウトすることができる。サンプルを提供する目的で、ストリーム出力が図３Ａに含まれる。パイプラインの次のコンポーネントは、ラスタライザ１８４’−１ｃである。この正規の関数は、クリッピング、透視図分割、視点または鋏の選択および実施を含むことができる。ラスタライザの後には、第４の共通コア１８４’−１ａが続く。これは、１つのピクセルを取り、そのピクセルを定位置に出力する、ピクセルシェーダとして機能する。データに対してすべての関数を実行した後、データがモニタ１９１に表示される。
【００６２】
共通コア、幾何学シェーダ、ストリーム出力、および本発明のパイプライン内で新しい幾何学形状を生成する機能によって反映されるような本発明のさらなる実施形態を、以下でさらに詳細に説明する。
【００６３】
（パイプラインのシェーダのための共通シェーダコア）
背景技術で説明した通り、特定コンポーネントが特定タスクに要求され、それがパイプラインのそのエリアにおける障害に繋がる可能性がある場合、グラフィックスパイプラインの異なるコンポーネントの需要に起因する資源競合問題が発生することがある。現行のグラフィックスパイプラインは、パイプラインで最も有効に資源を使用するために、プログラマーによる最適化を必要とする。しかし、最高の最適化方式によってさえも、従来技術においてハードウェア自体は固定されており、したがって、ピクセルシェーダまたは頂点シェーダがアイドル状態のままである時間がある。例えば、計算が多量の行列演算を伴い、頂点シェーダが、そのような値を十分な速度で計算できない場合などである。したがって、ピクセルシェーダがアイドル状態にある間に、頂点シェーダによる過剰処理に起因した障害がパイプラインで発生する場合、またはその反対の場合がある。本発明によれば、ピクセルシェーダを頂点シェーダとして機能するように再構成することができる場合は複数のシェーダが相互に機能することができるので、グラフィックスチップの基礎的資源を、グラフィックスチップに求められるタスクに対して最適化することができる。さらに、上記のように、本発明は、本明細書で幾何学シェーダと称する新しいクラスのシェーダを導入するが、これは別の特化された一組の処理機能を提供する。したがって、本発明の提供する共通コアは、頂点シェーダ、ピクセルシェーダ、および幾何学シェーダのどれにでも構成することができる。
【００６４】
一実施形態では、ＧＰＵは、異なる段階にオンデマンドでスケジュール設定できる、ユニット１８４’−ｌａのファームを含む。この負荷平衡は、プログラマーがすべての段階を利用することについて気を使う必要がないことを意味している。どの段階でも、動的に使用可能または使用不可能にすることができ、構成または再構成することができ、したがって活動状態にある段階のために資源を解放または再特化することができる。共通コアは、その構成に応じて、頂点シェーダ段階、幾何学シェーダ段階、およびピクセルシェーダ段階を実行することができる。
【００６５】
図４Ａは、内部共通コア１８４’−１ａの一実施形態を示す。入力データが前段階によって供給されるが、この前段階はパイプラインのどこでもよい。入力レジスタ５００は、共通コアを実行すべき段階に応じて、動的索引付け可能な配列または２次元（２Ｄ）配列であってよい。シェーダコード５１０にデータが送信され、コードがすべてのベクトル浮動小数点および整数演算を処理し、メモリが演算を取り出し、または抽出する。
【００６６】
シェーダコアは、サンプラ５１３、テクスチャ５１４、および定数バッファ５１５から情報を受け取る。サンプラ５１３は、テクスチャの抽出方法を定義する。しかし、メモリはフィルタリングなしに読み取ることもできるので、サンプラはすべての実施形態に必須のものではない。サンプラオブジェクトは静的に作成されるので、これは、ハードウェアが、（サンプラオブジェクトがそれらの定義を維持し、変更されないので）パイプラインの変更を追跡したり消去したりすることを必要とせずに、パイプライン実行中に複数のサンプラのリファレンスを維持することを可能にする。テクスチャ５１４はシェーダコアと協働して、テクスチャ抽出を提供する。この特定の実施形態では、許可された資源だけが、テクセル単位で単一要素形式を含む。シェーダコアは、定数バッファ５１５から定数を受け取る。この実施形態では、定数バッファは、アクセスの待ち時間をより短く、更新をより頻繁にするよう最適化される１次元（１Ｄ）テクスチャのように機能する。シェーダコード５００はまた、一時レジスタ５１１とサブルーチン戻りアドレススタック５１２との２種類の通信方法を有する。一時レジスタ５１１は一時記憶として機能する。一実施形態では、レジスタは、一時記憶の制限までは必要とされる、任意のサイズおよび量のいかなる索引付け不可能または索引付け可能な配列でも保持することができる。サブルーチン戻りアドレススタック５１２は、この特定の一実施形態では、高さが固定されている。さらに、スタックは、直接シェーダアクセスから隠されており、戻りアドレスのみを透過的に記憶する。これは、反復アルゴリズムの定義の許可もする。
【００６７】
コードがシェーダコード５１０を通過した後、データは出力レジスタ５２０に移動する。出力レジスタ５２０は、この一実施形態では、４つのベクトル出力の動的索引付け可能な配列から構成される。さらに、一部の段階は、追加の特化された出力を有することができる。次いでデータは、パイプラインに応じて、次のシェーダ段階にストリーム出力として出力されるか、またはレンダリング段階に出力される。
【００６８】
列挙したデータ構造は、１次元配列から２次元配列またはリストに変更することができる。すべてのデータ構造は、ＧＰＵのサイズおよび記憶機能に応じて変更することができる。ＧＰＵ内において、動的割り当てと空間保護のための情報に対する圧縮アルゴリズムのアプリケーションとのために、記憶制限および固定された高さに対する変更が行われる可能性がある。サンプラおよび定数バッファは、テクスチャのように振舞うことができるが、資源が変更された場合、これらコンポーネントの定義を修正することができる。テクスチャが再定義された場合、サンプラと定数バッファのどちらも変更することができ、テクスチャ関数のみに限定されるものではない。さらに、すべてのデータ構造は、速度および用途のために新しい最適化アルゴリズムを実施することができる。本明細書に記載した様々な実施形態は、頂点シェーダ、ピクセルシェーダ、および幾何学シェーダの機能を提供するために動的に構成することのできる、共通コアを使用したグラフィックスパイプラインの例にすぎない。
【００６９】
（プリミティブに対して演算する幾何学シェーダ）
今日、一組の入手可能なグラフィックスＡＰＩによりグラフィックスアプリケーションを開発する際、グラフィックスのプログラマーは、一般に、一組のアルゴリズム要素が演算すべき一組の頂点を指定する。情報を指定すると、図１Ａに示すように、データはグラフィックスパイプラインに送信され、各頂点が頂点シェーダとピクセルシェーダとを通してストリーミングする。頂点シェーダとピクセルシェーダとに対する入力構造に適合したいかなるデータでも指定することができるが、頂点シェーダは、頂点に対する演算に対して一般に適しており、および使用され、ピクセルシェーダは、ピクセルに対する演算に対して一般に適しており、および使用される。
【００７０】
この点において、従来のシェーダ（すなわち、頂点シェーダ）が頂点の入力、演算、および出力の可能性に関して限定されるのに対して、本発明による幾何学シェーダは、頂点、線、または三角形のいずれかを含む各種「プリミティブ」入力を取ることができる、グラフィックスサブシステムのＧＰＵに対する新しい種類のシェーダである。対照的に、頂点のストリームに対する演算に加え、本発明の幾何学シェーダは、本発明のグラフィックスアーキテクチャによるさらなる演算のために、パイプライン内の入力としてプリミティブを受け取り、パイプライン内のプリミティブを出力して、線（２つの頂点の組）および三角形（３つの三角形の組）を規定するプリミティブに対して演算することができる。
【００７１】
本発明によるプリミティブ処理のさらなる一態様は、幾何学シェーダが、それ自体によってだけでなく、いくつかの付加的な周辺の頂点の状況においても、プリミティブ全体に対する動作を可能にする。ポリラインの１つの線セグメントは、例えば、そのセグメントの前後の頂点を読み取る機能によって処理することができる。この機構は一般的であるが（グラフィックスデータは「グラフィックスの」データである必要はなく、ＧＰＵによる処理のために定義されるいかなるデータであってもよい）、プリミティブの隣接頂点を処理するためにこの機能を頻繁に使用することは、幾何学シェーダが、３Ｄ幾何学空間の周辺の点に関する情報を現行の計算で考慮できるということである。
【００７２】
図４Ｂでは、ＴＶ０、ＴＶ１、ＴＶ２、ＬＶ０、およびＬＶ１を入力データとして、幾何学シェーダの機能の一実施形態を示す。出力データは、接頭部ＡＶで示される追加点を含むことができる。したがって幾何学シェーダは、任意選択で隣接頂点のような隣接プリミティブを処理して、１つのプリミティブを取り入れ、複数のプリミティブを出力することができる。出力のいくつかの例は、三角形ストリップのようなトポロジー、線ストリップ、または点リストを含む。この限定されない実施形態では、幾何学シェーダからの出力は、レンダリングのためにラスタライザに、かつ／またはストリーム出力のためにバッファに向かう。
【００７３】
この概念を図４Ｃにさらに示す。本発明によれば、任意選択で、グラフィックスパイプラインによって処理されるグラフィックスデータのデータにも、索引を割り当てることができる。索引データの前に、別個のメモリが、パイプラインを通過中のデータと共に使用するために索引情報を取り込んでおく必要がある。この従来の方式（処理中の索引およびグラフィックスデータの同期）に伴う同期の問題に加え、明らかな速度の関与もある。索引情報の生成は高速だが、ビデオメモリへの索引情報の書込みと、ストリーミンググラフィックスデータと共に使用されるビデオメモリからの読み取りに、非常に時間がかかる。
【００７４】
したがって、本発明によれば、入力アセンブラＩＡは、１つ以上の共通コアによって演算されるグラフィックスデータを、いかなる任意選択の隣接情報（プリミティブまたはデータのストリームの周辺に関する情報）と共に出力し、対応する索引のストリームを、グラフィックスデータが表す各要素（プリミティブ、データ点、ピクセル値など）に対して生成することができる。一実施形態では、索引は０から始まり、データの新しい要素ごとに１つずつ増すが、いかなる索引値でも開始索引値として使用することができる。さらに、一部の用途には、順序付けて索引を生成しても有用でない場合があるので、常識的に考えれば、本発明は、独自の識別情報（ＩＤ）値をグラフィックスデータ要素単位で生成し、その値は順序付けなくてもよい、もしくは順序付ける必要はない。
【００７５】
索引に対する機能は幅広く、用途の範囲は無数である。例えば、幾何学インスタンシングの場合、ツリーを定義するグラフィックスデータとツリーのために位置を記述する別の表とを有するメモリの第１のエリアを有する場合がある。パイプラインによって処理される回数または索引に基づいて、ＧＰＵは、ツリーのバリエーションを表によって定義された位置に置くために、ビデオメモリの複数の部分を取り出すことができる。本発明は、データを処理しながら、ビデオメモリアドレス指定方式の一部として索引値を使用することを可能にする。すなわち索引は、処理するためのビデオメモリの複数の部分をどこで、いつ取り出すか（かつ／または、どこに、いつ書き込むか）を示すことができる。別の例として、異なるアルゴリズムを三角形のストリームの中の三角形に３つおきに適用し、そのアルゴリズムをそのストリームの中の三角形に対して７つおきに２回実行すると有用な場合がある。プリミティブを索引付けする機能は、この機能を厳密に可能にする。したがってシェーダにダウンロードされたプログラムは、ビデオメモリに取り出すか、または書き込み、かつグラフィックスデータを処理しながら、グラフィックスデータに関連付けられた索引値をプログラム可能に使用することができる。
【００７６】
（フレームバッファのラスタ化前のメモリのストリーム出力）
背景技術で説明したように、今日のグラフィックスパイプラインによれば、パイプラインで実行中の計算の結果を確認するためにＧＰＵが使用するビデオメモリからの読み取りは、ほとんど不可能に近い。データがＧＰＵのプロシージャルシェーダによって処理される際、その実行中のデータを見つけ、抽出する方法の知識を有し、ビデオメモリから実際にそのデータを抽出することは、今日のアーキテクチャでは非常に困難なタスクである。図１Ｂは、プログラマーがグラフィックスパイプラインの出力、すなわちフレームバッファからデータの取り出しに着手し、さらなる処理のためにパイプラインにデータを戻すようホスト資源に関与する方法を示す。上記のように、このタスクは、プログラマーがフレームバッファまたはディスプレイからデータを取り出すことを要求する。一般に、パイプライン通過後のデータに対するさらなる処理が必要な場合、プログラマーは、情報がフレームバッファによって受け取られるのを待ち、さらなる処理を達成するためにＣＰＵの資源を費やす。
【００７７】
グラフィックスデータをパイプライン内で再循環する点に関する従来のグラフィックスパイプラインの欠点を考慮して、本発明は、データがパイプライン内にある状態で、プログラマーがパイプラインに「侵入する」ことを可能にする。この場合、「侵入」をオン／オフすることができる。オンにした場合、パイプラインは、ホストによる取り出しもしくは他の演算のためにメモリから読み取るか、または反復機能もしくはループ機能を実行するためにパイプラインに再循環してもよいデータの出力ストリームを含む。さらに、必要に応じて、同じデータがラスタライザに向かっている状態で情報をストリームアウトすることができる。これで、データのレンダリングが遅らされることはなくなり、またはデータに対して動作中の再帰アルゴリズム要素に基づいて、画像が変換を受ける際にその画像を表示することを可能にする。
【００７８】
図３Ｂは、本発明によるストリーム出力の一実施形態を示す。この実施形態では、幾何学シェーダ１８４−１ａ３として振舞う上記の共通コアが、データに対して計算または演算を実行し、ストリーム出力１８４’−２があり、したがって、オンにされると、そのデータは本発明によりバッファに書き込まれる。同図では、ストリーム出力が、シェーダ自体にデータを再循環しているように示される。このタイプの再循環は、例えば、プログラマーが所与のデータに対してマルチパス動作を実行しようとする場合に有用である。しかし、ＧＰＵにダウンロードされたプログラムが指定するように、データを再循環するためにストリーム出力を使用するには、他にもいくつか方法がある。データを再循環するもう１つの方法は、データを入力アセンブラに再度入力して、パイプラインを再度通過させることである。本発明のストリーム出力機能は任意選択であり、１つのアプリケーションは、パイプラインが、データをストリーム出力バッファに読み出さずに、データを単に通過させることを可能にするだけである。さらに、ストリーム出力バッファは、ストリームされたデータを記憶するために使用することができる、メモリタイプの一例である。マイクロプロセッサのキャッシュメモリのように、そのような機能のために異なるタイプのメモリを使用することができる場合がある。
【００７９】
最後に、メモリの空間は限られており、ストリーム出力は、バッファサイズに応じたデータ量を追跡する。一実施形態では、メモリ記憶空間が満杯の場合、シェーダは、出力データのすべてを記憶するために必要なバイト数を計数しながら、すべてのデータについてその計算を続ける。その計算によってどれだけのデータが生成されるか予測が付かないときには、これは有用であろう。グラフィックスのためにストリーム出力を使用することができるが、ストリーム出力はグラフィックスに限定されるわけではない。これはグラフィックスパイプラインの一拡張であるが、数学的計算のためにＧＰＵを使用することができ、ＧＰＵは、ＧＰＵとＣＰＵとの両方の処理力を使用することができる。ストリーム出力は、グラフィックスパイプラインのラスタ化関数を停止せずに、ＧＰＵにダウンロードされた特化したプログラムの柔軟を高め、開発者により高いプログラミング性を提供することによってパイプラインの機能を強化するだけなので、ストリーム出力の用途は広範囲にわたる。上述のように、本発明による共通コアの出力に侵入することができることによる非常に有用な結果としては、データを、プログラム可能にパイプラインの他の部分に再循環させることができるということである。すなわち、プログラマーは、データに対する反復演算を実行する（同一アルゴリズムにデータを反復的に再循環させる）か、または事前に固定された回数だけデータをループさせるプログラムを、ＧＰＵにダウンロードすることができる。
【００８０】
（パイプライン内における幾何学形状の生成）
上述のように、今日では、グラフィックスプログラマーは、一組の入手可能なグラフィックスＡＰＩによってグラフィックスアプリケーションを開発する際に、一般に、一組のアルゴリズム要素によって演算される一組の頂点を指定する。この情報を指定すると、図１Ａに示すように、そのデータは、グラフィックスパイプラインに送られ、各頂点は、固定された一組のＧＰＵサブユニット、例えばテッセレータ、１つ以上の頂点シェーダおよび１つ以上のピクセルシェーダなどを介してストリーミングされる。頂点シェーダおよびピクセルシェーダに対して入力構造に適合した任意のデータを指定することができる。但し、頂点シェーダは、頂点に対する演算に対して一般に適しており、および使用される。また、ピクセルシェーダは、ピクセルに対する演算に対して一般に適しており、および使用される。しかし、所定のアルゴリズムに従い、プロシージャルシェーディングの前に予め定められた制御点に基づく幾何学形状を生成することのできる固定された段階テッセレーション以外に、従来のパイプラインには、さらなる処理のために新しい頂点または幾何学形状を生成するために使用できるものはない。
【００８１】
さらに、１つまたは複数のプロシージャルシェーディング段階の後に本発明のテッセレータを使用してパイプライン内で生成された一組の制御点を受け取り、プログラムで演算して、グラフィックスＡＰＩによってダウンロードされたパイプラインを構成するプログラムに従い、任意の新しい数の幾何学形状点を生成することができる。これは、例えば粗いメッシュに対して粗い演算を実行し、後で形状のさらに現実的なモデルを必要とする付加的な演算のためにそのメッシュを精製することが望ましい場合には有用である。これまで、幾何学形状のテッセレータ生成は、パイプラインの開始段階に限定され、事前指定された制御点入力に対する事前に固定された演算に限定されていた。このような制限事項を考慮して、本発明は、任意でパイプライン内に制御点（テッセレータから上流）を生成して、テッセレータからの出力として下流で演算される付加的な幾何学形状を生成するテッセレータにこれらの制御点を出力するために、パイプラインの開始時点で１つ以上の共通コアを可能にする。
【００８２】
上述のように、プログラム可能だが作成できる新しい幾何学形状数に制約のある幾何学シェーダとは対照的に、固定された機能ではある（プログラム可能でない）が任意の量のデータを生成する（ｎ×ｎのメッシュ、ｎに制限はない）テッセレータとは異なり、新しい幾何学形状をより一般的でプログラム可能な方法で生成するために、本発明の幾何学形状シェーダを使用することもできる。
【００８３】
一部の計画では、本発明の幾何学形状シェーダは、単一頂点ではなくトポロジーを使用して出力頂点を作成することにより、プログラマーを支援する。アルゴリズムのいくつかの例には、点スプライトテッセレーション、太線テッセレーション、フィン生成、陰影分量生成、および複数のテクスチャ立体面に対する単一パスレンダリングが含まれる。点スプライトテッセレーションを実行するために、シェーダは、単一頂点を取って４つの頂点を生成するか、または１つの四辺形の４隅を表す２つの出力三角形を取る。太線テッセレーションの実行中に、シェーダは、図４ＢのＬＶ０およびＬＶ１のような２つの線頂点を受け取り、より太い線を表す四辺形のために４つの頂点を生成する。さらに、幾何学シェーダは、線終端点に対して額縁縫いを実行するために、隣接線頂点ＡＶ０およびＡＶ１を利用することができる。
【００８４】
幾何学形状シェーダは、ファー（ｆｕｒ）またはフィンを生成するためにも使用することができる。これは、ファーまたはフィンの生成には限定されず、単一トポロジーの第３の方向に追加されたいかなる追加頂点をも含む。例としては、幾何学形状を示すプリミティブが幾何学シェーダに供給され、幾何学シェーダがその形状を補うようにその幾何学形状を任意に成長させる、髪、鱗、草などが含まれる。したがって、例えば髪の場合、幾何学形状シェーダへの三角形入力に基づいて、幾何学形状シェーダは、髪を表現するいくつかの頂点を各頂点に追加することができる。幾何学形状シェーダへの三角形のストリームが、１つの頂点の付近に関する情報を含むため、その頂点の付近の幾何学形状の近似および特性（色、奥行きなど）を処理中に考慮することができるという利点がある。
【００８５】
現在、本発明の幾何学シェーダは、グラフィックスＡＰＩによって幾何学シェーダにダウンロードされたプログラムが指定するように、最大数の新しい任意の幾何学形状を生成することができるように限定される。しかし、以下でより詳細に定義されるストリーム出力によって可能となる本発明の反復機能と組み合わされた場合、本発明は、無制限に幾何学形状を任意に生成することを可能にする。例えば、幾何学形状シェーダが、だけを作成する場合、幾何学形状シェーダの用途のもう１つの例は、突出させるべきか否かを決定するために隣接情報が使用される、陰影度の生成を含む。さらに、アプリケーションは、フィンまたはファーのように一部の幾何学形状を生成し、陰影度をそこから突出させることを必要とする場合がある。このような場合、幾何学シェーダのマルチパス機能は、データストリームを出力し、それをストリーム出力の使用を循環させる機能の用途に用いられる。
【００８６】
図５に、アプリケーションがグラフィックスを呼び出し、本発明のアーキテクチャの上記の利点を達成する方法の流れ図を示す。ステップ５５０では、演算されるグラフィックスデータが指定される。上述のように、本発明によれば、任意の新しい分量の幾何学形状をパイプライン内で反復的にであっても生成することができるので、以前に比べて初期段階で指定する必要のあるグラフィックスデータは少なくてよい。ステップ５６０では、ＧＰＵが実行するプログラムをＧＰＵにダウンロードし、ＧＰＵによる演算のためのアルゴリズム要素を定義することができる。ステップ５７０では、入力アセンブラ（例えば、図３Ａを参照）は、ステップ５５０で指定されたグラフィックスデータとステップ５６０で指定されたプログラムとを自動的に取り込み、本発明による共通コアの構成を最適化する。したがって、頂点またはピクセルの計算が、ステップ５６０でＧＰＵに提供されるプログラム要素の指定とステップ５５０で指定されるグラフィックスデータとの一部として集約的である場合、本発明は、多くの頂点シェーダまたはピクセルシェーダを含むようにパイプラインコアをそれぞれ構成することができる。一方、三角形に対して複雑な演算が望ましい場合、入力アセンブラは、複数の幾何学シェーダを含むようにコアを再構成することができる。さらに、ストリーム出力機能、および事前および事後のテッセレーションプロシージャルシェーディング段階のような選択肢を追加することができる。ステップ５８０で、入力アセンブラは、グラフィックスパイプラインによる処理に指定された作業項目を参照し、その作業をコアに割り当てる。この段階で、パイプラインを通過するプリミティブに、例えばプリミティブ単位の索引またはピクセル単位の索引など、索引情報を追加することができる。
【００８７】
基本的に、実行するよう要求されたジョブに対して動的にカスタマイズすることができる、高度に特化された高速ハードウェアの利点を即座に確認することができる。これは、反復的プログラムをストリーム出力によって指定可能であること、コアを動的に再構成可能であること、頂点の付近に関して入力を同時に行いながら、その頂点に対して迅速に演算可能であること、パイプラインのどこにおいても新しい幾何学形状を任意に生成可能であること（幾何学形状の事前テッセレーション生成、幾何学形状のテッセレータ生成、および幾何学形状の事後テッセレーション生成）を含む。したがって、本発明の利点は、開発者の観点からはほとんど無制限である。開発者は、本発明によるグラフィックスデータに対して達成でき得る発想においてのみ制限される。
【００８８】
したがって、本発明の拡張グラフィックスパイプラインは、パイプラインに要求されるタスクに最も適した方法で、ピクセルシェーダ、幾何学シェーダ、および頂点シェーダを割り当てるように動的に構成可能な共通コアを含む。本発明は、いかなる点、線、および三角形のストリームに対しても演算することのできる、幾何学シェーダと称する新しいプロシージャルシェーダも含む。さらに、本発明は、テッセレータまたは幾何学形状シェーダによって、パイプライン内で新しい幾何学形状を生成する機能を含む。本発明は、グラフィックスデータに対してプログラム反復およびルーピングアルゴリズムを実行して、ラスタ化のためにデータがフレームバッファに到達する前にパイプライン内に侵入することのできるストリーム出力も含む。また、本発明は、グラフィックスパイプラインに入力され、またはグラフィックスパイプラインで作成されたすべてのプリミティブに索引付けする機能を含む。グラフィックスパイプラインは、ＩＥＥＥ標準に従い、すべての整数および浮動小数点計算を実行することもできる。
【００８９】
適切なＡＰＩ、ツールキット、ドライバコード、オペレーティングシステム、制御、スタンドアロンまたはダウンロード可能なソフトウェアオブジェクトなど、本発明の拡張グラフィックスパイプラインのシステムおよび方法を使用するためにアプリケーションおよびサービスを使用可能にする本発明の実施方法は複数ある。本発明は、ＡＰＩ（または他のソフトウェアオブジェクト）の観点から、また、本発明による共通コア、幾何学形状シェーダ、またはストリーム出力の技術を含めて、上記の技術のいずれかを受け取るソフトウェアオブジェクトまたはハードウェアオブジェクトの観点からの本発明の用途を意図する。したがって、本明細書に記載した本発明の様々な実施態様は、ハードウェアで全体的に、ハードウェアで部分的に、ソフトウェアで部分的に、またソフトウェアに複数の態様を有することができる。
【００９０】
上記の通り、本発明の実施形態を様々なコンピューティング装置およびネットワークアーキテクチャに関して説明したが、基本概念は、拡張グラフィックスパイプラインを有するＧＰＵを利用することが望ましい、いかなるコンピューティング装置またはシステムにでも適用することができる。例えば、装置上の別個のオブジェクトとして、別のオブジェクトの一部として、再利用可能な制御として、サーバからダウンロード可能なオブジェクトとして、装置またはオブジェクトとネットワークとの間の「ミドルマン」として、分散したオブジェクトとして、ハードウェアとして、メモリで、上記のどの組合せなどとして提供される、本発明の１つ以上のアルゴリズムおよびハードウェア実施態様を、コンピューティング装置のオペレーティングシステムに適用することができる。本明細書ではプログラミング言語例、名前、および実施例を様々な選択肢を示すものとして選択したが、これらの言語、名前、および実施例は限定を意図するものではない。当業者には、オブジェクトコード、本発明の様々な実施形態によって達成される同じ機能、類似の機能、等価の機能を達成するオブジェクトコードと命名法を提供するには無数の方法があることが理解されよう。
【００９１】
上記の通り、本明細書に記載の様々な技術は、ハードウェアまたはソフトウェア、あるいは適切ならばこれらの組合せで実施することができる。したがって、本発明の方法および装置、またはその特定の態様または部分は、フロッピー（登録商標）ディスケット、ＣＤ−ＲＯＭ、ハードドライブのような具体的なメディアや任意の他の機械読取り可能な記憶媒体に埋め込まれたプログラムコード（すなわち、命令）の形式を取ることができる。ここで、プログラムコードが、コンピュータのようなマシンにロードされ、実行された場合、そのマシンは本発明を実行する装置となる。プログラム可能なコンピュータに対するプログラムコードの実行の場合、コンピューティング装置は、一般に、プロセッサ、プロセッサによって読み取り可能な記憶媒体（揮発性および不揮発性メモリおよび／または記憶素子を含む）、少なくとも１つの入力装置、および少なくとも１つの出力装置を含む。本発明の拡張グラフィックスパイプライン技術を、例えばデータ処理ＡＰＩ、再利用可能な制御などによって実施または利用することのできる１つまたは複数のプログラムは、コンピュータシステムと通信するために、高レベルプロシージャルまたはオブジェクト指向プログラミング言語で実施されることが好ましい。しかし、必要に応じて、アセンブリまたは機械言語で１つ以上のプログラムを実施することができる。いずれの場合でも、その言語は、コンパイル言語であってもインタプリタ言語であってもよく、ハードウェア実施態様と組み合わせてもよい。
【００９２】
本発明の方法および装置は、電線またはケーブルにより、または光ファイバを介して、または伝送のいかなる他の形式によるなど、いくつかの伝送媒体を介して伝送される、プログラムコードの形式で実施される通信によっても実行することができる。ここで、プログラムコードが、ＥＰＲＯＭ、ゲート配列、プログラム可能な論理装置（ＰＬＤ）、クライアントコンピュータなどのようなマシンに受信され、ロードされ、そこで実行された場合、そのマシンは、本発明を実行するための装置となる。汎用プロセッサで実施する場合、本発明の機能を呼び起こすよう動作する独自の装置を提供するために、プログラムコードはプロセッサと組み合わされる。さらに、本発明と共に使用されるいかなる記憶技術でも、常にハードウェアとソフトウェアの組合せであってよい。
【００９３】
以上、本発明を様々な図面の好ましい実施形態に関して説明したが、本発明を逸脱せずに本発明の同じ機能を実行するように、他の類似の実施形態を使用し、または記載の実施形態に修正および追加を行うことができることを理解されたい。例えば、本発明のネットワーク環境例は、ピアツーピアネットワーク接続環境のようなネットワーク接続環境の状況で説明したが、当業者ならば、本発明がそれに限定されず、本願で記載したような方法は、有線か無線かに関わらず、ゲーミングコンソール、ハンドヘルドコンピュータ、携帯型コンピュータなどのようないかなるコンピューティング装置または環境にも適用することができ、また、通信ネットワークを介して接続され、ネットワークを介して対話するそのようなコンピューティング装置ならいくつにでも適用することができることが理解されよう。さらに、特に複数の無線ネットワーク接続装置が普及し続けるという理由から、ハンドヘルド装置オペレーティングシステムおよび他の特定用途向けオペレーティングシステムを含めて様々なコンピュータプラットフォームを意図することを強調すべきである。
【００９４】
実施形態は、本発明をグラフィックスパイプラインの状況で利用することを参照したが、本発明はそのように限定されるものではなく、第２の処理装置を提供するために実施することができる。例えば、プログラマーが、ＣＰＵを使用して別の関数を実行しながら、画面への表示をレンダリングし、数学的計算を処理しようとする場合、処理装置は、グラフィックス表示が最終結果に含まれるか否かとは関係なく、それらを完全に利用する必要がある。さらに、本発明は複数の処理チップまたは装置で、またはこれらを介して実施することができ、記憶は複数の装置全体で同様に行うことができる。したがって、本発明は、いかなる単一の実施形態にも限定されず、首記の特許請求の範囲の広さおよび範囲において解釈されるべきである。
【図面の簡単な説明】
【００９５】
【図１Ａ】グラフィックスパイプラインの従来の実施態様を示すブロック図である。
【図１Ｂ】マルチパス計算の従来の実施態様を示すブロック図である。
【図２Ａ】本発明を実施することのできる、様々なコンピューティング装置を有するネットワーク環境例を示すブロック図である。
【図２Ｂ】本発明の実施することのできる、限定されないコンピューティング装置例を示すブロック図である。
【図２Ｃ】本発明を実施することのできる、限定されないネットワーク接続遠隔コンピュータ例を示すブロック図である。
【図３Ａ】グラフィックスパイプラインでの、本発明のコンポーネントの限定されない実施態様を示すブロック図である。
【図３Ｂ】ストリーム出力機能を使用したマルチパス計算の限定されない実施態様を示すブロック図である。
【図４Ａ】共通コアのハードウェアコンポーネントおよびソフトウェアコンポーネントを示すブロック図である。
【図４Ｂ】単一トポグラフィーから複数の頂点を受け取り、出力することのできる幾何学シェーダの機能例を示す図である。
【図４Ｃ】本発明による、グラフィックスパイプラインに従い処理される、グラフィックスストリームの、プリミティブ単位またはピクセル索引値単位の生成を示す図である。
【図５】本発明のグラフィックスパイプラインの拡張機能を使用するための、限定されない流れ図例である。
【符号の説明】
【００９６】
１１０ａ  コンピューティングオブジェクトまたは装置
１２１  システムバス
１３５ａ〜ｅ  アプリケーションプログラムモジュールまたはオブジェクト
１４１  ハードディスクドライブ
１５１  磁気ディスクドライブ
１５５  光ディスクドライブ
１８１  メモリ記憶装置
１８４’−１ａ  共通コア要素
【図１Ａ】
0004766906.tif 000002
【図１Ｂ】
0004766906.tif 000003
【図２Ａ】
0004766906.tif 000004
【図２Ｂ】
0004766906.tif 000005
【図２Ｃ】
0004766906.tif 000006
【図３Ａ】
0004766906.tif 000007
【図３Ｂ】
0004766906.tif 000008
【図４Ａ】
0004766906.tif 000009
【図４Ｂ】
0004766906.tif 000010
【図４Ｃ】
0004766906.tif 000011
【図５】
0004766906.tif 000012