(57)【要約】【課題】グラフィックスＡＰＩからのシリアル化プログラムが、単一プログラム用の手続き型シェーダの命令制限を越えるアルゴリズムをサポート可能とすること。【解決手段】コンピュータグラフィックスに関連して中間ターゲット（複数）、すなわち、他の目的用のプログラム間でのデータの共用も可能にし、自動的にアクセス可能な中間メモリバッファ（複数）がビデオメモリ内に提供されて使用される。バッファのサイズすなわち中間ターゲットに格納されるデータ量は、グラフィックスデータに関して変化する解像度用に可変的に設定可能である。単一のプログラムは、このバッファ内に後で使用可能で、同じプログラムの拡張部および／または他のプログラムによって、所望される場合何度でも再使用される中間データを生成し、現在のグラフィックスチップの速度を維持しながら、シェーディングプログラムについてかなりのフレキシビリティと複雑さを可能にする。【選択図】　　　　図４
2004054891.tif 000002
【特許請求の範囲】
【請求項１】
グラフィックス・システム内で中間メモリ・ターゲットを提供および使用するための方法であって、
専門化された機能を実行するようにグラフィックス・ハードウェアの少なくとも１つの構成要素をプログラミングするために、プログラム命令セットを前記少なくとも１つの構成要素に伝送すること、および
（Ａ）中間メモリ・ターゲットからデータをグラフィックス・ハードウェアの前記少なくとも１つの構成要素に入力すること、および（Ｂ）グラフィックス・ハードウェアの前記少なくとも１つの構成要素から中間メモリ・ターゲットにデータを出力すること、のうちの１つ
を備えることを特徴とする方法。
【請求項２】
第２の専門化された機能を実行するようにグラフィックス・ハードウェアの前記少なくとも１つの構成要素をプログラミングするために、第２のプログラム命令セットを前記少なくとも１つの構成要素に伝送すること、および
中間メモリ・ターゲットからの前記データを、前記少なくとも１つの構成要素への入力として再使用することをさらに含む
ことを特徴とする請求項１に記載の方法。
【請求項３】
前記中間メモリ・ターゲットは、ビデオ・メモリの一部であることを特徴とする請求項１に記載の方法。
【請求項４】
前記中間メモリ・ターゲット内のデータは、持続することを特徴とする請求項１に記載の方法。
【請求項５】
前記中間メモリ・ターゲットの解像度は、可変的に設定されることを特徴とする請求項１に記載の方法。
【請求項６】
前記少なくとも１つの構成要素は、手続き型シェーダを含むことを特徴とする請求項１に記載の方法。
【請求項７】
前記手続き型シェーダは、頂点シェーダおよびピクセル・シェーダのうちの１つであることを特徴とする請求項６に記載の方法。
【請求項８】
第１の中間メモリ・ターゲット内のデータは、第２の中間メモリ・ターゲット内のデータとは異なる種類および量のピクセル・データを表すことを特徴とする請求項１に記載の方法。
【請求項９】
請求項１の方法を提供するための、オペレーティング・システム、ドライバ・コード、アプリケーション・プログラミング・インターフェース、ツール・キット、およびコプロセス・デバイスのうちの少なくとも１つ。
【請求項１０】
請求項１に記載の方法を実行するための、コンピュータ実行可能命令を搬送する被変調データ信号。
【請求項１１】
請求項１に記載の方法を実行する手段を備えたコンピューティング・デバイス。
【請求項１２】
グラフィックス・システム内の少なくとも１つのハードウェア構成要素を介して、少なくとも１つの中間メモリ・ターゲットとインターフェースするためのコンピュータ実行可能モジュールを備えるアプリケーション・プログラミング・インターフェースであって、前記モジュールは、
専門化された機能を実行するように前記少なくとも１つのハードウェア構成要素をプログラミングするために、プログラム命令セットを前記少なくとも１つのハードウェア構成要素に伝送することを備える方法を実行し、前記専門化された機能は、
（Ａ）中間メモリ・ターゲットからデータを前記少なくとも１つのハードウェア構成要素に入力すること、および（Ｂ）前記少なくとも１つのハードウェア構成要素から中間メモリ・ターゲットにデータを出力すること、のうちの１つを含む
ことを特徴とするアプリケーション・プログラミング・インターフェース。
【請求項１３】
専門化された機能を実行するように前記少なくとも１つのハードウェア構成要素をプログラミングするために、第２のプログラム命令セットを前記少なくとも１つのハードウェア構成要素に伝送することをさらに含み、前記専門化された機能は、
中間メモリ・ターゲットからの前記データを、前記少なくとも１つのハードウェア構成要素への入力として再使用することを含む
ことを特徴とする請求項１２に記載のアプリケーション・プログラミング・インターフェース。
【請求項１４】
前記中間メモリ・ターゲットは、ビデオ・メモリの一部であることを特徴とする請求項１２に記載のアプリケーション・プログラミング・インターフェース。
【請求項１５】
前記中間メモリ・ターゲット内のデータは、持続することを特徴とする請求項１２に記載のアプリケーション・プログラミング・インターフェース。
【請求項１６】
前記中間メモリ・ターゲットの解像度は、可変的に設定されることを特徴とする請求項１２に記載のアプリケーション・プログラミング・インターフェース。
【請求項１７】
前記少なくとも１つの構成要素は、手続き型シェーダを含むことを特徴とする請求項１２に記載のアプリケーション・プログラミング・インターフェース。
【請求項１８】
前記手続き型シェーダは、頂点シェーダおよびピクセル・シェーダのうちの１つであることを特徴とする請求項１７に記載のアプリケーション・プログラミング・インターフェース。
【請求項１９】
第１の中間メモリ・ターゲット内のデータは、第２の中間メモリ・ターゲット内のデータとは異なる種類および量のピクセル・データを表すことを特徴とする請求項１２に記載のアプリケーション・プログラミング・インターフェース。
【請求項２０】
少なくとも１つのコンピュータ実行可能モジュールを格納した中間メモリ・ターゲットとインターフェースするためのコンピュータ読取り可能媒体であって、
専門化された機能を実行するように少なくとも１つのハードウェア構成要素をプログラミングするために、プログラム命令セットを前記少なくとも１つのハードウェア構成要素に伝送することを備え、前記専門化された機能は、
（Ａ）中間メモリ・ターゲットからデータを前記少なくとも１つのハードウェア構成要素に入力すること、および（Ｂ）前記少なくとも１つのハードウェア構成要素から中間メモリ・ターゲットにデータを出力すること、のうちの１つを含む
方法を実行するためのコンピュータ実行可能命令を備えることを特徴とするコンピュータ読取り可能媒体。
【請求項２１】
専門化された機能を実行するように前記少なくとも１つのハードウェア構成要素をプログラミングするために、第２のプログラム命令セットを前記少なくとも１つのハードウェア構成要素に伝送することをさらに含み、前記専門化された機能は、
中間メモリ・ターゲットからの前記データを、前記少なくとも１つのハードウェア構成要素への入力として再使用することを含む
ことを特徴とする請求項２０に記載のコンピュータ読取り可能媒体。
【請求項２２】
前記中間メモリ・ターゲットは、ビデオ・メモリの一部であることを特徴とする請求項２０に記載のコンピュータ読取り可能媒体。
【請求項２３】
前記中間メモリ・ターゲット内のデータは、持続することを特徴とする請求項２０に記載のコンピュータ読取り可能媒体。
【請求項２４】
前記中間メモリ・ターゲットの解像度は、可変的に設定されることを特徴とする請求項２０に記載のコンピュータ読取り可能媒体。
【請求項２５】
前記少なくとも１つの構成要素は、手続き型シェーダを含むことを特徴とする請求項２０に記載のコンピュータ読取り可能媒体。
【請求項２６】
前記手続き型シェーダは、頂点シェーダおよびピクセル・シェーダのうちの１つであることを特徴とする請求項２５に記載のコンピュータ読取り可能媒体。
【請求項２７】
第１の中間メモリ・ターゲット内のデータは、第２の中間メモリ・ターゲット内のデータとは異なる種類および量のピクセル・データを表すことを特徴とする請求項２０に記載のコンピュータ読取り可能媒体。
【請求項２８】
前記モジュールは、アプリケーション・プログラミング・インターフェース（ＡＰＩ）、ドライブ・コード、オペレーティング・システム、およびアプリケーションのうち少なくとも１つに含まれることを特徴とする、請求項２０に記載のコンピュータ読取り可能媒体。
【請求項２９】
中間メモリ・ターゲットに関連して使用するためのコプロセス・デバイスであって、
専門化された機能を実行するように前記コプロセス・デバイスの少なくとも１つの構成要素をプログラミングするために、前記少なくとも１つの構成要素へのプログラム命令セットを受け取る入力構成要素を備え、前記専門化された機能は、
（Ａ）中間メモリ・ターゲットからデータを前記少なくとも１つの構成要素に入力すること、および（Ｂ）前記少なくとも１つの構成要素から中間メモリ・ターゲットにデータを出力すること、のうちの１つを含む
ことを特徴とするコプロセス・デバイス。
【請求項３０】
前記入力構成要素は、専門化された機能を実行するように前記少なくとも１つの構成要素をプログラミングするために、第２のプログラム命令セットを受け取り、前記専門化された機能は、
中間メモリ・ターゲットからの前記データを、前記少なくとも１つのハードウェア構成要素への入力として再使用することを含む
ことを特徴とする請求項２９に記載のコプロセス・デバイス。
【請求項３１】
前記中間メモリ・ターゲットは、ビデオ・メモリの一部であることを特徴とする請求項２９に記載のコプロセス・デバイス。
【請求項３２】
前記中間メモリ・ターゲット内のデータは、持続することを特徴とする請求項２９に記載のコプロセス・デバイス。
【請求項３３】
前記中間メモリ・ターゲットの解像度は、可変的に設定されることを特徴とする請求項２９に記載のコプロセス・デバイス。
【請求項３４】
前記コプロセス・デバイスの前記少なくとも１つの構成要素は、手続き型シェーダを含むことを特徴とする請求項２９に記載のコプロセス・デバイス。
【請求項３５】
前記手続き型シェーダは、頂点シェーダおよびピクセル・シェーダのうちの１つであることを特徴とする請求項３２に記載のコプロセス・デバイス。
【請求項３６】
第１の中間メモリ・ターゲット内のデータは、第２の中間メモリ・ターゲット内のデータとは異なる種類および量のピクセル・データを表すことを特徴とする請求項２９に記載のコプロセス・デバイス。
【請求項３７】
前記コプロセス・デバイスは、少なくとも１つのグラフィックス処理ユニット（ＧＰＵ）を含むことを特徴とする請求項２９に記載のコプロセス・デバイス。
【請求項３８】
ビデオ・メモリで中間メモリ・ターゲット・データ構造を使用するための方法であって、
頂点シェーダおよびピクセル・シェーダのうち少なくとも１つの第１のプログラムに関連して、前記頂点シェーダおよびピクセル・シェーダのうち少なくとも１つから出力されたデータを、前記中間メモリ・ターゲット・データ構造が受け取ること、
前記頂点シェーダおよびピクセル・シェーダのうち少なくとも１つの第２のプログラムに関連して、前記中間メモリ・ターゲット・データ構造のデータを入力すること
を備えることを特徴とする方法。
【請求項３９】
前記第１および第２のプログラムは、専門化された機能を実行するように前記頂点シェーダおよびピクセル・シェーダのうち少なくとも１つをプログラミングすることを特徴とする請求項３８に記載の方法。
【請求項４０】
グラフィックス・システム内の少なくとも１つのハードウェア構成要素を介して、少なくとも１つの中間メモリ・ターゲットとインターフェースするためのコンピュータ実行可能モジュールを備えるコンピュータ読取り可能媒体であって、前記モジュールは、
専門化された機能を実行するように少なくとも１つのハードウェア構成要素をプログラミングするために、プログラム命令セットを前記少なくとも１つのハードウェア構成要素に伝送する手段を備え、前記専門化された機能は、
（Ａ）中間メモリ・ターゲットからデータを前記少なくとも１つのハードウェア構成要素に入力すること、および（Ｂ）前記少なくとも１つのハードウェア構成要素から中間メモリ・ターゲットにデータを出力すること、のうちの１つを含む
ことを特徴とするコンピュータ読取り可能媒体。
【請求項４１】
グラフィックス・システム内で中間メモリ・ターゲットを使用するシステムであって、
専門化された機能を実行するようにグラフィックス・ハードウェアの少なくとも１つの構成要素をプログラミングするために、プログラム命令セットを前記少なくとも１つの構成要素に伝送する手段と、
（Ａ）中間メモリ・ターゲットからデータを前記グラフィックス・ハードウェアの少なくとも１つの構成要素に入力する手段、および（Ｂ）前記グラフィックス・ハードウェアの少なくとも１つの構成要素から中間メモリ・ターゲットにデータを出力する手段、のうちの１つを備える
ことを特徴とするシステム。
【請求項４２】
第２の専門化された機能を実行するように前記グラフィックス・ハードウェアの少なくとも１つの構成要素をプログラミングするために、第２のプログラム命令セットを前記少なくとも１つの構成要素に伝送する手段と、
中間メモリ・ターゲットからの前記データを、前記少なくとも１つの構成要素への入力として再使用する手段とをさらに含む
ことを特徴とする請求項４１に記載のシステム。
【請求項４３】
グラフィックス・システム内の少なくとも１つのハードウェア構成要素を介して、少なくとも１つの中間メモリ・ターゲットとインターフェースするためのコンピュータ実行可能モジュールを備えるアプリケーション・プログラミング・インターフェースであって、前記モジュールは、
専門化された機能を実行するように少なくとも１つのハードウェア構成要素をプログラミングするために、プログラム命令セットを前記少なくとも１つのハードウェア構成要素に伝送する手段を備え、前記専門化された機能は、
（Ａ）中間メモリ・ターゲットからデータを前記少なくとも１つのハードウェア構成要素に入力すること、および（Ｂ）前記少なくとも１つのハードウェア構成要素から中間メモリ・ターゲットにデータを出力すること、のうちの１つを含む
ことを特徴とするアプリケーション・プログラミング・インターフェース。
【請求項４４】
中間メモリ・ターゲットに関連して使用するためのコプロセス・デバイスであって、
専門化された機能を実行するように前記コプロセス・デバイスの少なくとも１つの構成要素をプログラミングするために、前記少なくとも１つの構成要素へのプログラム命令セットを受け取る手段を備え、前記専門化された機能は、
（Ａ）中間メモリ・ターゲットからのデータを前記少なくとも１つの構成要素に入力すること、および（Ｂ）前記少なくとも１つの構成要素から中間メモリ・ターゲットにデータを出力することのうちの１つを含む
ことを特徴とするコプロセス・デバイス。
【請求項４５】
前記受け取る手段は、専門化された機能を実行するために前記少なくとも１つの構成要素をプログラミングする第２のプログラム命令セットを受け取り、前記専門化された機能は、
中間メモリ・ターゲットからの前記データを、前記少なくとも１つのハードウェア構成要素への入力として再使用することを含む
ことを特徴とする請求項４４に記載のコプロセス・デバイス。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンピュータ・グラフィックスに関して中間メモリ・ターゲットを提供するためのシステムおよび方法に関する。より詳細には、本発明は、ピクセル・シェーダ（ｓｈａｄｅｒ）および頂点シェーダなどの手続き型シェーダに関して使用する中間メモリ・ターゲットを提供するためのシステムおよび方法に関する。
【０００２】
【従来の技術】
本特許文書の開示の一部には、著作権保護の対象となる材料が含まれる可能性がある。著作権所有者は、特許文書または特許開示がＰａｔｅｎｔ　ａｎｄ　Ｔｒａｄｅｍａｒｋ　Ｏｆｆｉｃｅの特許ファイルまたは記録に掲載されている場合は、これをいかなる人がファクシミリ複写しようとも異議を唱えるものではないが、それ以外の場合にはすべての著作権を留保する。通知Ｃｏｐｙｒｉｇｈｔ（Ｃ）２００２，Ｍｉｃｒｏｓｏｆｔ　Ｃｏｒｐ．を本文書に適用するものとする。
【０００３】
３次元（３−Ｄ）グラフィックスのレンダリングおよび表示は、一般に多くの計算およびコンピュータ処理を必然的に含む。たとえば、３−Ｄオブジェクトをレンダリングするために、レンダリングされるオブジェクトを定義する複数の座標ポイントすなわち複数の頂点（ｖｅｒｔｉｃｅｓ）のセットが形成される。レンダリングされるべき、および表示されるべきオブジェクトの面を定義する多角形（ｐｏｌｙｇｏｎｓ）を形成するように、複数の頂点を線で結ぶことができる。オブジェクトを定義する複数の頂点が形成されると、その複数の頂点をオブジェクトまたは参照のモデル・フレームから参照のワールド・フレーム（ｗｏｒｌｄ　ｆｒａｍｅ）に変換し、最終的にはモニタなどの平坦なディスプレイ・デバイス上に表示可能な２−Ｄ座標に変換することができる。この方法を使用して、各頂点は、回転、スケーリング、または表示可能領域に入らないための消去およびクリッピング、さまざまなライティング・スキームおよびソースによるライティング、カラー化（ｃｏｌｏｒｉｚｅｄ）、その他の方法による変換、シェーディングなどの処理が実行されることがある。３−Ｄオブジェクトのレンダリングおよび表示に必要なこのプロセスは、コンピュータ処理的に集中する傾向があり、多数の頂点を必然的に含む可能性がある。
【０００４】
図１に示されるように、通常、複雑な３−Ｄオブジェクトまたはその一部は、３−Ｄオブジェクトの近似幾何形状を表す隣接する三角形（「メッシュ」）の集まりによって、または２次元（２−Ｄ）の表面空間での幾何形状マップまたは表面によって、表すことができる。メッシュは、三角形の頂点の位置を介して指定することができる。１つまたは複数のテクスチャー・マップをその表面にマッピングすることができ、テクスチャー・マッピング・プロセスに従ってテクスチャー化された表面を作成することができる。この点に関して、表面全体にわたってテクスチャー化される信号（ｓｉｇｎａｌｓ）は、非常に一般的なものとすることができ、最終カラーおよび／またはポイント・サンプルに関連付けられた他の値を生成する、シェーダ手続きなどの、変換メカニズムに入力可能ないかなる種類の中間結果をも指定することができる。
【０００５】
テクスチャー・サンプリングの後、ディスプレイ・デバイスの画素（ピクセル）を使用してレンダリングする前に、または表示以外の何らかの目的でどこかにデータを出力する前に、シェーディングのアルゴリズムおよび技法などのさらなる変換を、テクスチャー化された表面に任意選択で適用することができる。コンピュータ・グラフィックスにおけるイメージは、典型的には離散値の２−Ｄアレイ（グレイ・スケール）、または離散値の３つの２−Ｄアレイ（カラー）として表される。標準（ｘ，ｙ，ｚ）の直交座標系を使用して、表面を、メッシュの頂点ごとに（ｘ，ｙ，ｚ）座標を備えたメッシュ（たとえば三角形メッシュ）として指定するか、または、時に表面パラメータ化ドメインと呼ばれることのある２Ｄ（ｕ，ｖ）座標系を介して、（ｘ，ｙ，ｚ）座標が直線イメージ（ｒｅｃｔｉｌｉｎｅａｒ　ｉｍａｇｅ）として指定される幾何形状マップとして指定する、ことができる。テクスチャー・マップも（ｕ，ｖ）座標系を使用して指定することができる。
【０００６】
信号（ｓｉｇｎａｌｓ）が表面に貼り付けられている表面パラメータ化ドメインでのポイント・サンプルは、その幾何形状を含み、テクスチャー化されたメッシュまたは幾何形状マップから生成することができる。これらのサンプルは、様々なコンピュータ処理を使用して変換し、およびシェーディングすることができる。この変換およびシェーディング処理が終わると、ポイント・サンプルは（ａ）位置情報、すなわちイメージ平面内のどこにポイントがマッピングされるかを示すイメージ・アドレスと、（ｂ）位置情報によって示された位置にあるサンプルのカラーを示すテクスチャー・カラーまたはグレイ・スケール情報とを含む。隠れ面消去を可能にするポイント・サンプルの深さ情報、重み、またはポイント・サンプルに関する任意の他の有用な情報などの他の情報も、含むことができる。変換およびテクスチャー化された表面は、２−Ｄピクセル・イメージ空間（ｘ，ｙ）での表示によってレンダリングされる前に、フレーム・バッファに配置される。この時点で、白黒のディスプレイ・デバイスの場合、フレーム・バッファ内にある表面の何らかの関数に従って、２−Ｄイメージ空間における各（ｘ，ｙ）ピクセル位置にグレイ値が割り当てられる。典型的なカラー・ディスプレイ・デバイスの場合、２−Ｄイメージ空間における各（ｘ，ｙ）ピクセル位置には、赤、緑、および青（ＲＧＢ）の値が割り当てられる。ＲＧＢ以外の様々なカラー・フォーマットも存在することに留意されたい。開始から終了まで様々なバリエーションはあるが、グラフィックスの大量の頂点およびピクセル・データを高速処理するための上記の手段が、グラフィックス・パイプラインとして知られるものである。
【０００７】
コンピュータ・グラフィックス業界およびグラフィックス・パイプラインは、ここ数年間、特に爆発的な成長を見せている。たとえば、現行世代のコンピュータ・ゲームは、よりリアルな様式の３次元（３−Ｄ）グラフィックスに、増加傾向を示しながら、移行しつつある。同時に、再生スピード（ｓｐｅｅｄ　ｏｆ　ｐｌａｙ）もますます高速化していく。この組み合せが、比較的安価なシステムで３−Ｄグラフィックスを高速でレンダリングするという真の要求に拍車を掛けている。
【０００８】
早くも１９７０年代には、３−Ｄレンダリング・システムはパラメータに従ってオブジェクトの「外観（ａｐｐｅａｒａｎｃｅ）」を記述することができた。これらの方法およびその後の方法は、表面の位置および向きに基づいたオブジェクトの知覚カラー（ｐｅｒｃｅｉｖｅｄ　ｃｏｌｏｒ）およびそれを照らす光源をパラメータ化することを提供する。そのように実行すると、オブジェクトの外観がそれらから算出される。さらにパラメータは、オブジェクトの材料の拡散カラー（ｄｉｆｆｕｓｅ　ｃｏｌｏｒ）、鏡面反射係数（ｓｐｅｃｕｌａｒ　ｒｅｆｌｅｃｔｉｏｎ　ｃｏｅｆｆｉｃｉｅｎｔ）、鏡面カラー（ｓｐｅｃｕｌａｒ　ｃｏｌｏｒ）、反射率（ｒｅｆｌｅｃｔｉｖｉｔｙ）、および透過性などの値を含む。こうしたパラメータは、まとめて、オブジェクトのシェーディング・パラメータと呼ばれている。
【０００９】
初期のシステムは、シェーディング・パラメータに単一の値があるのみとしたため、これにより、シェーディング・パラメータは、オブジェクトの表面全体にわたって一定かつ均一のままであった。その後のシステムでは、オブジェクトの様々な部分で異なる値を有することのできる、非均一パラメータ（インスタンスに関する透過性）を使用することができるようになった。オブジェクト表面の様々な部分でこれらの非均一パラメータによって得られる値を記述するために、手続き型（ｐｒｏｃｅｄｕｒａｌ）シェーディングおよびテクスチャー・マッピングという２つの卓越した独特の技法が使用されてきた。テクスチャー・マッピングはピクセル・ベースであり、解像度に依存する。
【００１０】
手続き型シェーディングとは、１−Ｄ、２−Ｄ、または３−Ｄ空間のいずれかのポイントで、この空間での関数（手続き型シェーダと呼ばれることが多い）をシェーディング・パラメータ空間に定義することにより、材料の外観を記述するものである。オブジェクトはオリジナルの１−Ｄ、２−Ｄ、または３−Ｄ空間に「浸され（ｉｍｍｅｒｓｅｄ）」、オブジェクト表面の所与のポイントのシェーディング・パラメータ値は、このポイントの手続き型シェーディング関数の結果として定義される。たとえば、木、大理石、または他の天然材料の外観を模造する手続き型シェーダが開発されており、文献上では見つけることができる。
【００１１】
コンピュータ・システムにおけるグラフィックス・データのレンダリングは、リソースの集中プロセスの集合である。グラフィックス・データ構造に関連付けられたカラーなどのあるプリミティブに関する値を決定するために使用されるシェーディング・プロセス、すなわち専門化されたグラフィックス・データ構造（ｓｐｅｃｉａｌｉｚｅｄ　ｇｒａｐｈｉｃｓ　ｄａｔａ　ｓｔｒｕｃｔｕｒｅ）のセットに基づいて複雑なアルゴリズムを実行するプロセスは、こうしたコンピュータ処理の集中する複雑なプロセスの典型的な例である。一般に、シェーディング・プロセスはある程度正規化されてきている。シェーダで動作するように設計されたソース・コードをアプリケーションに渡すことによって、シェーダは、複雑なビデオ・グラフィックスの効率的な描画を容易にするために、アプリケーションが作成し／使用することが可能なオブジェクトとなる。こうしたシェーダの例が、頂点シェーダおよびピクセル・シェーダである。
【００１２】
専用のハードウェア・チップで現在のように実装される以前に、頂点シェーダおよびピクセル・シェーダは、時として全体的にまたは大部分がソフトウェア・コードとして実装され、時として、ハードウェアとそのハードウェアを制御するためのソフトウェアとのより固定した組み合せとして実装されることがあった。しばしばこれらの実装には、ＣＰＵ、またはシステムのＣＰＵを使用するエミュレートされた存在が含まれた。たとえばハードウェアでの実装では、シェーディング・タスクに必要な処理機能を実行するために、ＣＰＵチップがその設計に直接組み込まれた。標準的な処理チップが提供する機能の範囲により、ＣＰＵはシェーディング・プロセスに多くのフレキシビリティを加えるが、ＣＰＵを組み込むことで、専門化されたシェーディング・プロセスにはオーバヘッドも加えられる。ただし、今日のような最先端のハードウェアは無いので、選択の余地はほとんど皆無であった。
【００１３】
今日では、ハードウェア技術の進歩により、以前実装されたソフトウェアの機能を専門化されたハードウェアに移入する機能が容易になった。その結果、今日のピクセル・シェーダおよび頂点シェーダは、専門化されたプログラム可能なハードウェア・チップとして実装される。今日の頂点およびピクセル・シェーダ・チップのハードウェア設計は高度に専門化されているため、過去のＣＰＵハードウェア実装のようには動作しない。
【００１４】
専門化用途３−ＤグラフィックスＡＰＩが開発され、今日の頂点およびピクセル・シェーダの専門化機能（ｓｐｅｃｉａｌｉｚｅｄ　ｆｕｎｃｔｉｏｎａｌｉｔｙ）を公表している。この点に関して、開発者は、専門化された挙動を実行するように頂点シェーダを効果的にプログラミングする命令を、頂点シェーダにダウンロードすることができる。たとえばＡＰＩは、頂点シェーダにおけるレジスタ数の増加数に関連付けられた機能、たとえば、レジスタ・レベルでの浮動小数点数に関して専門化された頂点シェーディング機能を公表している。さらに、超高速頂点シェーダに浮動小数点数の小数部分のみを戻させる命令セットを実装することもできる。頂点シェーダの命令カウント制限を越えないと仮定すれば、これらの命令をダウンロードすることにより、様々な機能が達成可能である。
【００１５】
同様にピクセル・シェーダに関して、専門化されたピクセル・シェーディング機能は、命令をピクセル・シェーダにダウンロードすることによって達成可能である。たとえば、ピクセル・シェーダ内で線形補間メカニズムを提供する機能が公表されている。さらに、ピクセル・シェーダに合わせて調整された命令セットに関連して、多くの異なるオペレーション修飾子の機能が開発者に公表されている。たとえば、ネゲート（ｎｅｇａｔｅ）、再マッピング、バイアシング（ｂｉａｓｉｎｇ）、および他の機能は、効率的なピクセル・シェーディングが望ましい多くのグラフィックス・アプリケーションにとって非常に有用であり、しかもそれらはその命令の修飾子として最もよく表される単一の命令の一部として実行される。手短に言えば、上記の機能は、多くのグラフィックス・オペレーションにとって有利であり、それらの機能をすでに専門化されたピクセルおよび頂点シェーダの命令セットに組み込むことは、開発の容易さおよび性能の向上という点からの大きい価値を付加する。したがって、ピクセル・シェーダの命令カウント制限を越えないと仮定すれば、これらの命令をダウンロードすることにより、様々な機能が達成可能である。
【００１６】
米国特許出願第０９／８０１０７９号は、ローカル・レジスタを有する頂点シェーダおよびピクセル・シェーダのハードウェア実装と通信するこうした例示的な３次元（３−Ｄ）ＡＰＩを提供するものである。頂点シェーダに関して、この中では、オンチップ・レジスタ・インデックスの実行が可能なＡＰＩ通信について記載されており、ＡＰＩ通信は、入力の小数部分を出力する、レジスタ・レベルでオンチップで実装される専門化機能用にも、提供される。ピクセル・シェーダに関して、ＡＰＩ通信は、線形補間機能を実行するレジスタ・レベルでのオンチップで実装される専門化機能用に提供され、さらにＡＰＩ通信は、ネゲート、補完、再マッピング、バイアシング、スケーリング、およびサチュレーティング（ｓａｔｕｒａｔｉｎｇ）を含む修飾機能を実行する、レジスタ・レベルでオンチップで実装される、専門化修飾子用にも、提供される。そのＡＰＩ通信は、頂点シェーダおよびピクセル・シェーダ・チップのオペレーションの詳細については開発者に隠しているが、非常に有用なオンチップのグラフィカル・アルゴリズム要素については開発者に公表しているので有利である。
【００１７】
米国特許出願第０９／７９６５７７号は、３−Ｄ　ＡＰＩについても記載しており、この３−Ｄ　ＡＰＩは、概念上はソフトウェア・インターフェースの下または内部にあるメカニズムで、開発者が手続き型シェーダおよびＧＰＵに命令をダウンロードできるようにするメカニズムを介して、手続き型シェーダと共に使用するための独特のアルゴリズム要素を開発者に公表している。たとえば、こうした３−Ｄ　ＡＰＩは、改善された性能特性向けの３−Ｄチップに、複数のオペレーションをダウンロード可能にしている。これらの３−Ｄ　ＡＰＩは、ホスト処理装置の処理からカスタム・グラフィックス・コードを除去し、こうしたプログラム可能およびダウンロード可能な機能をグラフィックス・チップに配置するために、フレキシブルなオンチップ処理および制限されたオンチップ・メモリを含めることによって、こうしたプログラム可能な機能の処理を開始する最先端の３−Ｄグラフィックス・チップの有利性を利用する。こうしたＡＰＩは、開発者によって作成されたプログラミング要素またはアルゴリズム要素をチップにダウンロードできるようにし、それによって、改善された性能レベルでそれらのアルゴリズムを実行するようにチップをプログラミングするようにする。これに関して、開発者が３−Ｄチップにダウンロード可能なルーチンを作成することができる場合には、３−Ｄ　ＡＰＩに関連してアルゴリズム要素（開発者が作成したものではないが、すでに開発者向けにプログラミングされているルーチン）も提供されている。同様に、開発者はこれらの事前にパッケージングされたＡＰＩアルゴリズムを、改善された性能向けのプログラム可能３−Ｄチップにダウンロードすることができる。３−Ｄアルゴリズム要素をダウンロードする機能は、開発の容易さに加えて、改善された性能、より優れた制御を提供する。
【００１８】
したがって、頂点ごとおよびピクセルごとのプログラム可能オペレーションの導入が、現代のグラフィック・ハードウェアにおいてさらに広がってきている。この一般的なプログラムを可能とする能力（ｐｒｏｇｒａｍｍａｂｉｌｉｔｙ）により、高い性能レベルでの高度な創造的アルゴリズムに、大きな可能性が与えられる。ただし、達成可能なものにはある程度の制限がある。典型的には、図２Ａに示されるように、頂点シェーダおよびピクセル・シェーダで現在のレンダリング・パイプラインを使用して、頂点についての何らかのオペレーションを実行するために幾何形状データストリームＳＧＤが頂点シェーダ２００に入力され、その後、ラスタライザ２１０が幾何形状データをピクセル・データにラスタ化して、ピクセル・データ・ストリームＳＰＤ１を出力する。頂点シェーダ２００は、専門化された機能（ｓｐｅｃｉａｌｉｚｅｄ　ｆｕｎｃｔｉｏｎ）を実行するために頂点シェーダ２００をプログラミングする命令を受け取ることができるが、頂点シェーダ命令にはサイズおよび複雑さの制限がある。同様に、ピクセル・シェーダ２２０は任意選択で、ピクセル・データ・ストリームＳＰＤ２を出力するデータに対して１つまたは複数の変換を実行することができる。ピクセル・シェーダ２２０は、専門化された機能を実行するためにピクセル・シェーダ２２０をプログラミングする命令も受け取ることができるが、ピクセル・シェーダ命令にはサイズおよび複雑さの制限がある。したがって、今日のＡＰＩおよび対応するハードウェアの制限の１つは、ほとんどのハードウェアが非常に制限された命令カウントを有することである。この制限された命令カウントは、ＡＰＩを使用する開発者による最も高度なアルゴリズムの一部の実装を妨げる。さらに現在のプログラム可能ハードウェアには、別々のプログラム間でデータを交換するための非常に制限されたメカニズムがあり、すなわち、第１のピクセル・シェーダ・プログラムは第２のピクセル・シェーダ・プログラムから出力されたデータを再使用することができない。
【００１９】
さらに、図２Ａに示されるように、ピクセルは、一般的にイメージ空間の２−Ｄグリッド内にあるポイントであり、それらに関連付けられたグレイ・スケール値またはカラー値を有すると考えられるが、現代のグラフィックスは、表示されたイメージに関連するか否かにかかわらず、ピクセル・エンジン・パイプライン内のピクセルを、任意の２−Ｄアレイ内にあるポイントに関連付けられた任意の集合的データと、みなす。たとえば図２Ａには、赤用のバケット、緑用のバケット、および青用のバケットを有するピクセルが示されているが、この通りである必要はなく、ピクセルは任意数のバケットおよび対応する値を有することができる。したがって、２−Ｄアレイのピクセル・データを生成するにはかなりのフレキシビリティがあり、ライティング効果、重み、ｚバッファ情報などに関するパラメータ値を含むことができる。図２Ｃに示されるように、今日のグラフィックス・パイプラインに伴う問題は、別々のピクセル・セットが出力可能なフレキシビリティに関する。ピクセル・エンジン２３０は、任意の種類のピクセル・データを出力することができる。すなわち出力としてストリーミングされるピクセルＰ１、Ｐ２、Ｐ３、Ｐ４、からＰＮまでは、ピクセルＰ１、Ｐ２、Ｐ３、Ｐ４、からＰＮまでを定義するバケットの種類および数に関してかなりのフレキシビリティを呈することができるが、それにもかかわらず、Ｐ１、Ｐ２、Ｐ３、Ｐ４、からＰＮまでにはすべて同じバケットがなければならない。したがって、Ｐ１がＲ、Ｇ、Ｂデータを含む場合はＰ２、Ｐ３、Ｐ４、からＰＮまでも同様となり、一部はライティング用に使用可能であり一部は厳密にカラー用に使用可能であるといった、出力ピクセル・データの様々なセットを定義するためのフレキシビリティがない。さらに現在では、レンダリング・ターゲットの解像度はラスタ化プロセスに一致して事前に決定される、すなわち、レンダリング・プロセスがレンダリング・ターゲット内に配置可能なサンプルの量を出力する、そこで、レンダリング・ターゲットの解像度、すなわちレンダリング・ターゲットに関連して格納できるサンプルの量は、可変的に制御されることが望ましい。
【００２０】
【発明が解決しようとする課題】
本発明の一目的は、命令カウントにおける制限、出力形式の制限、およびプログラム間でのデータ共用の欠如による、現在のグラフィックス・パイプライン・アーキテクチャ、ＡＰＩ、およびハードウェアに関しての現在のプログラム可能性の欠点を克服するシステムおよび方法を提供することにある。
【００２１】
【課題を解決するための手段】
前述の内容に鑑みて、本発明はコンピュータ・システムにおけるコンピュータ・グラフィックスに関して中間ターゲットを提供するためのシステムおよび方法を提供する。様々な実施形態において、本発明は、グラフィックスＡＰＩからのシリアル化プログラムが、単一プログラム用の手続き型シェーダの命令制限を越えるアルゴリズムをサポートできるようにするために、ビデオ・メモリ内に中間メモリ・バッファを提供し、これを使用する。中間バッファは他の目的用のプログラム間でのデータの共用も可能にするものであり、自動的にアクセス可能である。バッファのサイズ、すなわち中間ターゲットに格納されるデータの量は、グラフィックス・データに関して変化する解像度用に可変的に設定することができる。これに関して、単一のプログラムは後で使用可能な中間データを生成し、現在のグラフィックス・チップの速度を維持しながら、同じプログラムの拡張および／または任意数の他のプログラムによって、所望なように任意の回数だけ再使用される。
【００２２】
本発明の他の特徴および実施形態については、以下で説明する。
【００２３】
本発明に従って中間メモリ・ターゲットを提供するためのシステムおよび方法について、添付の図面を参照しながらさらに説明する。
【００２４】
【発明の実施の形態】
（概要）
前述のように、本発明は、開発者がそれによって手続き型シェーダの機能をプログラミングすることができる、低水準シェーディング言語などの、シェーディング言語で使用するための複数の中間ターゲット循環を使用可能にするものである。本発明に従った中間ターゲットの再循環、を持たないグラフィックス・プラットフォームは、ピクセルごとおよび頂点ごとのレベルで動作するプログラムのサイズおよび複雑さで制限される。本発明のシステムおよび方法は、一般にプログラム可能なグラフィックス・パイプラインの展開に関連して、プログラム可能な機能の使用を抽象化し、および簡略化する高水準言語の作成を可能にする。さらに本発明は、ハードウェア・アクセラレーションを使用して非リアルタイム・レンダリングを可能にするプログラムで、仮想的には長さに制限のないプログラムを作成することに使用することもできる。バッファのサイズ、すなわち中間ターゲット内に格納されるデータの量は、グラフィックス・データの解像度の変化に対して可変的に設定することができる。したがって、本発明に従った非リアルタイム・レンダリング・アプリケーション用の無制限のハードウェア加速再循環が使用可能であることは、グラフィックス・プラットフォームの速度および性能を向上させる。
【００２５】
（ネットワーク環境および分散環境の例）
当分野の通常の技術者であれば、コンピュータあるいは他のクライアントまたはサーバ・デバイスが、コンピュータ・ネットワークの一部として、または分散コンピューティング環境内に配置可能であることが理解できよう。この点に関して、本発明は、本発明の中間メモリ・ターゲットに関連して使用可能な、任意数のメモリまたは記憶ユニットを有する任意のコンピュータ・システム、ならびに任意数の記憶ユニットまたはボリュームにわたって行われる任意数のアプリケーションおよびプロセス、に関係するものである。本発明は、リモートまたはローカルの記憶域を有する、ネットワーク環境または分散コンピューティング環境で配置された、サーバ・コンピュータおよびクライアント・コンピュータを備えた環境に適用可能である。本発明は、プログラミング言語機能、リモートまたはローカルのサービスに関連して情報を生成、受信、および送信するための解釈（ｉｎｔｅｒｐｒｅｔａｔｉｏｎ）および実行機能を有する、スタンドアローン型コンピューティング・デバイスにも適用可能である。
【００２６】
分散コンピューティングは、コンピューティング・デバイスとシステムとの間での直接交換により、コンピュータ・リソースおよびサービスの共用を容易にする。これらのリソースおよびサービスには、情報の交換、キャッシュ記憶、およびファイルのディスク記憶が含まれる。分散コンピューティングは、ネットワーク接続性を利用し、クライアントがクライアント自身の集合的なパワーを企業全体の利益とするために活用できるようにするものである。この点に関して、様々なデバイスが、本発明の中間メモリ・ターゲットに影響を与える可能性のあるアプリケーション、オブジェクト、またはリソースを有することができる。
【００２７】
図３Ａは、例示的なネットワーク・コンピューティングまたは分散コンピューティングの環境を示す概略図である。分散コンピューティング環境は、コンピューティング・オブジェクト１０ａ、１０ｂなどと、コンピューティング・オブジェクトまたはデバイス１１０ａ、１１０ｂ、１１０ｃなどとを備える。これらのオブジェクトは、プログラム、メソッド、データ記憶域、プログラム可能論理などを備えることができる。オブジェクトは、ＰＤＡ、テレビジョン、ＭＰ３プレーヤ、テレビジョン、パーソナル・コンピュータなどの同じかまたは異なるデバイスの部分を備えることができる。各オブジェクトは、通信ネットワーク１４を介して他のオブジェクトと通信可能である。このネットワークは、それ自体が図３Ａのシステムにサービスを提供する他のコンピューティング・オブジェクトおよびコンピューティング・デバイスを備えることができる。本発明の一側面によれば、１０ａ、１０ｂなど、または１１０ａ、１１０ｂ、１１０ｃなどの各オブジェクトは、本発明の中間メモリ・ターゲットの使用を要求するために、ＡＰＩまたは他のオブジェクトを使用できるアプリケーションを備えることができる。
【００２８】
分散コンピューティング・アーキテクチャでは、従来からクライアントとして単独で使用することのできた複数のコンピュータがそれらコンピュータ間で直接通信し、ネットワークにとってどんな役割が最も効率的であるかを想定して、クライアントおよびサーバのどちらの役割も果たすことが可能である。これにより、サーバにかかる負荷が軽減され、すべてのクライアントが他のクライアントで使用可能なリソースにアクセスできるようになり、それによって、ネットワーク全体の機能および効率が向上する。したがって本発明に従って中間ターゲットを使用するサービスを、ネットワーク全体にとって効率的な方法で働くクライアントとサーバの間で分散させることができる。
【００２９】
分散コンピューティングは、ビジネスが多様な地理的境界を越えて、サービスおよび機能をより効率良く送達するのを助けることができる。さらに、分散コンピューティングは、ネットワーク・キャッシング・メカニズムとしての働きをしながら、データが消費されるポイントの近くまでデータを移動させることができる。さらに分散コンピューティングは、コンピューティング・ネットワークが知的エージェントを使用して共に動的に作業できるようにする。エージェントはピア・コンピュータ上に常駐し、様々な種類の情報を、前方あるいは後方に通信する。エージェントは、他のピア・システムに代わってタスクを開始することもできる。たとえば、知的エージェントは、ネットワーク上のタスクに優先順位を付けることに使用されることができ、知的エージェントは、トラフィック・フローを変更し、ファイルをローカルに検索し、またはウィルスなどの異常な挙動を特定してこれがネットワークに影響を及ぼす前に停止させる。他のすべての種類のサービスも同様に考えることができる。グラフィカル・オブジェクト、テクスチャー・マップ、シェーディング・データなどは、実際には、物理的に１つまたは複数の場所に配置される可能性があるため、本明細書に記載された中間ターゲットを使用するサービスを分散させる機能は、こうしたシステムで非常に実用的である。
【００３０】
１１０ｃなどのオブジェクトを、他のコンピューティング・デバイス１０ａ、１０ｂなど、または１１０ａ、１１０ｂなどのホストとして働かせることができることも理解されたい。したがって、示された物理的環境はコンピュータなどの接続されたデバイスを示しているが、これは単なる例示的なものであって、代わりに物理的環境は、ＰＤＡ、テレビジョン、ＭＰ３プレーヤ、などの様々なデジタル・デバイス、ＣＯＭオブジェクトなどのインターフェースのようなソフトウェア・オブジェクトを備えるように示すかまたは記述することができる。
【００３１】
分散コンピューティング環境をサポートするシステム、構成要素、およびネットワーク構成には様々なものがある。たとえばコンピューティング・システムは、有線または無線システムによって、ローカル・ネットワークまたは広範囲に分散されたネットワークによって、相互に接続することができる。現在では多くのネットワークがインターネットに結合されており、このインターネットは、広範囲に分散されたコンピューティングにインフラストラクチャを提供し、多くの異なるネットワークを包含している。
【００３２】
ホーム・ネットワーキング環境では、電力線、データ（無線および有線の両方）、音声（たとえば電話）、およびエンターテイメント媒体などの、それぞれが固有のプロトコルをサポートすることが可能な、少なくとも４つの本質的に異なるネットワーク移送媒体（ｔｒａｎｓｐｏｒｔ　ｍｅｄｉａ）がある。照明スイッチおよび電化製品などのほとんどの家庭用制御デバイスは、接続に電力線を使用することができる。データ・サービスは、ブロード・バンド（たとえばＤＳＬまたはケーブル・モデムのいずれか）として家庭に入ることが可能であり、無線（たとえばＨｏｍｅＲＦまたは８０２．１１ｂ）または有線（たとえばＨｏｍｅＰＮＡ、Ｃａｔ５、電力線でもよい）のいずれかの接続を使用して、家庭内でアクセス可能である。音声トラフィックは、有線（たとえばＣａｔ　３）または無線（たとえば携帯電話）のいずれかとして家庭に入り、Ｃａｔ　３配線を使用して家庭内で配信させることができる。エンターテイメント媒体または他のグラフィカル・データは、衛星またはケーブルのいずれかを介して、家庭に入ることが可能であり、典型的には同軸ケーブルを使用して家庭内で分散される。ＩＥＥＥ　１３９４およびＤＶＩは、媒体デバイスのクラスタ用のデジタル相互接続としても出現している。これらのネットワーク環境およびプロトコル標準として出現することのできるその他の環境は、インターネットを介して外部世界と接続可能なイントラネットを形成するために、すべて相互に接続することができる。つまり、データの記憶および伝送用に様々な異なるソースが存在し、したがって進歩を続けるコンピューティング・デバイスは、本発明に従って中間ターゲットの中間結果を使用するプログラム・オブジェクトに付帯するデータで、アクセスまたは使用されるデータなどのデータ、を共用する方法を必要とすることになる。
【００３３】
インターネットは、一般に、コンピュータ・ネットワーキングの分野でよく知られたプロトコルのＴＣＰ／ＩＰスイート（ｓｕｉｔｅ　組ソフト）を使用するネットワークおよびゲートウェイの集まりと呼ばれる。ＴＣＰ／ＩＰは「Ｔｒａｎｓｐｏｒｔ　Ｃｏｎｔｒｏｌ　Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｆａｃｅ　Ｐｒｏｇｒａｍ」の頭字語である。インターネットは、ユーザがネットワークを介して対話し情報を共有することのできるネットワーキング・プロトコルを実行するコンピュータによって相互接続され、地理的に分散されたリモート・コンピュータ・ネットワークのシステムとして記述することができる。こうした広範にわたる情報の共有により、インターネットなどのリモート・ネットワークは、オープン・システム内にさらに一般的に展開され、このオープン・システムによって、専門化されたオペレーションまたはサービスを、本質的に制約なしに、実行するソフトウェア・アプリケーションを、開発者が設計できるようになってきた。
【００３４】
したがって、ネットワーク・インフラストラクチャは、クライアント／サーバ、ピアツーピア、またはハイブリッド・アーキテクチャなどのネットワーク・トポロジのホストを使用可能にする。「クライアント」とは、関係しない他のクラスまたはグループのサービスを使用する、クラスまたはグループのメンバのことである。したがって、コンピューティングでは、クライアントはプロセス、すなわちおおまかに言えば、他のプログラムによって提供されるサービスを要求する命令またはタスクのセットである。クライアント・プロセスは、他のプログラムまたはサービスそれ自体についてどんな作業の詳細も「知る」必要なしに、要求されたサービスを使用する。クライアント／サーバ・アーキテクチャ、具体的に言えばネットワーク化システムでは、クライアントは通常、他のコンピュータ、たとえばサーバによって提供される共用ネットワーク・リソースにアクセスするコンピュータである。図３Ａの例では、コンピュータ１１０ａ、１１０ｂなどをクライアントとみなし、コンピュータ１０ａ、１０ｂなどをサーバとみなすことが可能であり、サーバ１０ａ、１０ｂなどはデータを維持し、このデータがその後クライアント・コンピュータ１１０ａ、１１０ｂなどで複製される。
【００３５】
サーバは、典型的には、インターネットなどのリモート・ネットワークを通してアクセス可能なリモート・コンピュータ・システムである。クライアント・プロセスが第１のコンピュータ・システムでアクティブであり、サーバ・プロセスが第２のコンピュータ・システムでアクティブであって、通信媒体を介して相互に通信し、それによって分散された機能を提供し、複数のクライアントがサーバの情報収集機能を使用することができる。
【００３６】
クライアントおよびサーバは、プロトコル層によって提供される機能を使用して相互に通信する。たとえばハイパー・テキスト転送プロトコル（ＨＴＴＰ）は、Ｗｏｒｌｄ　Ｗｉｄｅ　Ｗｅｂ（ＷＷＷ）と共に使用される一般的なプロトコルである。典型的には、Ｕｎｉｖｅｒｓａｌ　Ｒｅｓｏｕｒｃｅ　Ｌｏｃａｔｏｒ（ＵＲＬ）などのコンピュータ・ネットワーク・アドレスまたはインターネット・プロトコル（ＩＰ）アドレスは、サーバまたはクライアント・コンピュータを相互に識別するのに使用される。ネットワーク・アドレスはＵＲＬアドレスと称することができる。たとえば、通信は通信媒体を介して提供することができる。具体的に言えば、クライアントおよびサーバは、大容量通信用のＴＣＰ／ＩＰ接続を介して相互に結合することができる。
【００３７】
したがって図３Ａは、本発明が実施可能な、サーバがネットワーク／バスを介してクライアント・コンピュータと通信する、例示的なネットワーク環境または分散環境を示す図である。より詳細には、いくつかのサーバ１０ａ、１０ｂなどは、通信ネットワーク／バス１４を介して相互接続され、この通信ネットワーク／バス１４は、本発明に従った、ポータブル・コンピュータ、ハンドヘルド・コンピュータ、シン（ｔｈｉｎ）クライアント、ネットワーク化電化製品、またはＶＣＲ、ＴＶ、オーブン、照明、ヒータなどの他のデバイスなど、いくつかのクライアントまたはリモート・コンピューティング・デバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどを備えた、ＬＡＮ、ＷＡＮ、イントラネット、インターネットなどであってよい。したがって本発明は、それに関連してグラフィカル・オブジェクトを処理することが望ましい、任意のコンピューティング・デバイスに適用することができることが企図されている。
【００３８】
通信ネットワーク／バス１４がインターネットであるネットワーク環境では、たとえばサーバ１０ａ、１０ｂなどは、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどがＨＴＴＰなどのいくつかの知られたプロトコルを介して通信するＷｅｂサーバであってよい。サーバ１０ａ、１０ｂなどは、クライアント１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどとして働くこともでき、このことは分散コンピューティング環境の特徴とすることができる。通信は、適切であれば有線または無線であってよい。クライアント・デバイス１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなどは、通信ネットワーク／バス１４を介して通信可能であってもなくてもよく、これらは、それに関連付けられた独立した通信を有することができる。たとえば、ＴＶまたはＶＣＲの場合、その制御へのネットワーク化された態様であってもなくてもよい。各クライアント・コンピュータ１１０ａ、１１０ｂ、１１０ｃ、１１０ｄ、１１０ｅなど、およびサーバ・コンピュータ１０ａ、１０ｂなどは、様々なアプリケーション・プログラム・モジュールまたはオブジェクト１３５を装備することが可能であり、様々なタイプの記憶要素またはオブジェクトへの接続またはアクセスを装備することが可能であって、これを横切ってファイルを格納するか、またはこれにファイルの一部をダウンロードまたは移行することができる。任意のコンピュータ１０ａ、１０ｂ、１１０ａ、１１０ｂなどは、グラフィックス・オブジェクトまたは中間グラフィックス・オブジェクトならびに本発明に従って処理されたデータを格納するためのデータベースまたはメモリ２０などのような、本発明に従ったデータベース２０または他の記憶要素の保守およびさら更新に応動することができる。したがって本発明は、クライアント・コンピュータ１１０ａ、１１０ｂなどおよび他の同様のデバイスおよびデータベース２０と対話することが可能であり、コンピュータ・ネットワーク／バス１４およびサーバ・コンピュータ１０ａ、１０ｂなどにアクセスしこれらと対話することが可能な、クライアント・コンピュータ１１０ａ、１１０ｂなどを有するコンピュータ・ネットワーク環境で使用することが可能である。
【００３９】
（例示的コンピューティング・デバイス）
図３Ｂおよび以下の考察は、本発明が実施可能な適切なコンピューティング環境の簡潔な一般的説明を提供することを意図するものである。ただし、ハンドヘルド、ポータブル、および他のコンピューティング・デバイスならびにすべての種類のコンピューティング・オブジェクトが、本発明に関連して使用するように企図されることを理解されたい。以下では汎用コンピュータが記述されているが、これは一例であって、本発明はネットワーク／バスを使用した相互操作性および対話（ｉｎｔｅｒｏｐｅｒａｂｉｌｉｔｙ　ａｎｄ　ｉｎｔｅｒａｃｔｉｏｎ）を備えるシン・クライアントを使用して実施することができる。したがって本発明は、非常に少ないかまたは最低のクライアント・リソースが包含されているネットワーク・ホスト・サービス（ｎｅｔｗｏｒｋｅｄ　ｈｏｓｔｅｄ　ｓｅｒｖｉｃｅｓ）の環境、たとえば、電化製品に配置されたオブジェクトなどの、クライアント・デバイスが単にネットワーク／バスへのインターフェースとして働くネットワーク環境、で実施可能である。本質的には、データが格納可能であるかまたはデータの取出しが可能などの場所も、本発明のグラフィックス・パイプライン技法のオペレーションにとって、望ましいかまたは適切な環境を備えている。
【００４０】
必須ではないが、本発明は、デバイスまたはオブジェクトに関するサービスの開発者が使用するために、オペレーティング・システムを介して実施することができ、かつ／または、本発明の中間ターゲットと関連して動作するアプリケーション・ソフトウェアに含めることができる。本発明は、本発明の中間ターゲットと対話するための頂点シェーダおよびピクセル・シェーダの設計も同様に含む。ソフトウェアは、クライアント・ワークステーション、サーバまたは他のデバイスなどの１つまたは複数のコンピュータによって実行される、プログラム・モジュールなどのコンピュータ実行可能命令の一般的なコンテキストで記述することができる。一般にプログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実施する、ルーチン、プログラム、オブジェクト、構成要素、データ構造などを含む。典型的には、プログラム・モジュールの機能は、様々な実施形態で所望なように組み合わせるかまたは分散させることができる。さらに、当分野の技術者であれば、本発明が他のコンピュータ・システム構成でも実施可能であることを理解されよう。本発明で使用するのに適切な他のよく知られたコンピューティング・システム、環境、および／または構成には、パーソナル・コンピュータ（ＰＣ）、現金自動預け払い機、サーバ・コンピュータ、ハンドヘルドまたはラップトップ・デバイス、マルチ・プロセッサ・システム、マイクロ・プロセッサ・ベース・システム、プログラム可能大衆消費電子製品、ネットワークＰＣ、電化製品、照明、環境制御要素、ミニ・コンピュータ、メインフレーム・コンピュータなどが含まれるが、これらに限定されるものではない。本発明は、通信ネットワーク／バスまたは他のデータ伝送媒体を介してリンクされたリモート処理デバイスによってタスクが実行される分散コンピューティング環境でも実施可能である。分散コンピューティング環境では、プログラム・モジュールを、メモリ記憶デバイスを含むローカルおよびリモートの両方のコンピュータ記憶媒体に配置することが可能であり、交代で、クライアント・ノードがサーバ・ノードとしての挙動を示すことができる。
【００４１】
したがって、図３Ｂは、本発明が実装可能な適切なコンピューティング・システム環境１００の例を示す図であって、上記で明らかにしているが、コンピューティング・システム環境１００は適切なコンピューティング環境の一例に過ぎず、本発明の使用または機能の範囲に関しての何らかの制限を提案するように意図されたものではない。さらにコンピューティング環境１００は、例示的オペレーティング環境１００に示された任意の一構成要素または構成要素の組み合せに関する任意の依存性または要件を有するものとしても解釈されるべきではない。
【００４２】
図３Ｂを参照すると、本発明を実装する例示的システムは、コンピュータ１１０の形式の汎用コンピューティング・デバイスを含む。コンピュータ１１０の構成要素は、限定されないが、処理ユニット１２０、システム・メモリ１３０、およびシステム・メモリを含む様々なシステム構成要素を処理ユニット１２０に結合するシステム・バス１２１を含むことができるシステム・バス１２１は、メモリ・バスまたはメモリ制御装置、周辺バス、および様々なバス・アーキテクチャのうちのいずれかを使用するローカル・バスを含む、いくつかのタイプのバス・アーキテクチャのうちいずれかであることができる。例を挙げると、限定されないが、こうしたアーキテクチャには、Ｉｎｄｕｓｔｒｙ　Ｓｔａｎｄａｒｄ　Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＳＡ）バス、Ｍｉｃｒｏ　Ｃｈａｎｎｅｌ　Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ＶｉｄｅｏＥｌｅｃｔｒｏｎｉｃｓ　Ｓｔａｎｄａｒｄｓ　Ａｓｓｏｃｉａｔｉｏｎ（ＶＥＳＡ）ローカル・バス、およびＰｅｒｉｐｈｅｒａｌ　Ｃｏｍｐｏｎｅｎｔ　Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＰＣＩ）バス（メザニン・バスとしても知られる）が含まれる。
【００４３】
コンピュータ１１０は、典型的には様々なコンピュータ読取り可能媒体を含む。コンピュータ読取り可能媒体は、コンピュータ１１０がアクセス可能な任意の使用可能媒体であることができ、揮発性および不揮発性、ならびに取外し可能および取外し不可能な、両方の媒体を含む。例を挙げると、限定されないが、コンピュータ読取り可能媒体はコンピュータ記憶媒体および通信媒体を備えることができる。コンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラム・モジュール、または他のデータなどの情報を格納するための任意の方法または技術で実装された、揮発性および不揮発性、ならびに取外し可能および取外し不可能な、両方の媒体を含む。コンピュータ記憶媒体は、限定されないが、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリまたは他のメモリ技術、ＣＤＲＯＭ、デジタル汎用ディスク（ＤＶＤ）または他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置または他の磁気記憶デバイス、あるいは所望の情報の格納に使用可能でありコンピュータ１１０がアクセス可能な任意の他の媒体を含む。通信媒体は、典型的には、コンピュータ読取り可能命令、データ構造、プログラム・モジュール、または他のデータを、搬送波のような被変調データ信号中に、または他の移送メカニズム中に包含し、任意の情報送達媒体（ｉｎｆｏｒｍａｔｉｏｎ　ｄｅｌｉｖｅｒｙ　ｍｅｄｉａ）を含む。「被変調データ信号」という語は、その特徴のうち１つまたは複数が、その信号中に情報を符号化するような態様で、設定または変更された信号を意味する。例を挙げると、通信媒体は、限定されないが、有線ネットワークまたは直接有線接続などの有線媒体、および音波、ＲＦ、赤外線、および他の無線媒体などの無線媒体を含む。上記の任意の組み合せも、コンピュータ読取り可能媒体の範囲に含まれるものとする。
【００４４】
システム・メモリ１３０は、読取り専用メモリ（ＲＯＭ）１３１およびランダム・アクセス・メモリ（ＲＡＭ）１３２などの、揮発性および／または不揮発性メモリの形のコンピュータ記憶媒体を含む。起動時などにコンピュータ１１０内の要素間で情報を転送するのを助ける基本ルーチンを含む基本入力／出力システム１３３（ＢＩＯＳ）は、典型的にはＲＯＭ　１３１に格納される。ＲＡＭ　１３２は、典型的には即時アクセス可能かつ／または処理ユニット１２０上で現在動作中の、データおよび／またはプログラム・モジュールを収容する。例を挙げると、限定されないが、図３Ｂには、オペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラム・モジュール１３６、およびプログラム・データ１３７が示されている。
【００４５】
コンピュータ１１０は、他の取外し可能／取外し不可能、揮発性／不揮発性のコンピュータ記憶媒体も含むことができる。単なる例に過ぎないが、図３Ｂには、取外し不可能な不揮発性磁気媒体から読み取るかまたはこれに書き込むハードディスク・ドライブ１４１、取外し可能の不揮発性磁気ディスク１５２から読み取るかまたはこれに書き込む磁気ディスク・ドライブ１５１、およびＣＤ　ＲＯＭまたは他の光学式媒体などの取外し可能の不揮発性光ディスク１５６から読み取るかまたはこれに書き込む光ディスク・ドライブ１５５が示されている。例示的オペレーティング環境で使用可能な他の取外し可能／取外し不可能、揮発性／不揮発性のコンピュータ記憶媒体は、磁気テープ・カセット、フラッシュ・メモリ・カード、デジタル汎用ディスク、デジタル・ビデオ・テープ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭなどを含むが、これらに限定されるものではない。ハードディスク・ドライブ１４１は、典型的にはインターフェース１４０などの取外し不可能なメモリ・インターフェースを介して、システム・バス１２１に接続され、磁気ディスク・ドライブ１５１および光ディスク・ドライブ１５５は、典型的にはインターフェース１５０などの取外し不可能なメモリ・インターフェースによって、システム・バス１２１に接続される。
【００４６】
前述の、および図３Ｂに示されたドライブおよびその関連付けられたコンピュータ記憶媒体は、コンピュータ読取り可能命令、データ構造、プログラム・モジュール、およびコンピュータ１１０に関する他のデータの記憶装置を提供する。たとえば図３Ｂでは、ハードディスク・ドライブ１４１はオペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラム・モジュール１４６、およびプログラム・データ１４７を格納しているように示されている。これらの構成要素は、オペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラム・モジュール１３６、およびプログラム・データ１３７と同じであってもこれらと異なってもよいことに留意されたい。オペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラム・モジュール１４６、およびプログラム・データ１４７には、少なくともこれらが異なるコピーであることを示すために、ここでは異なる番号が与えられている。ユーザは、キーボード１６２および一般にはマウス、トラック・ボール、またはタッチパッドと呼ばれるポインティング・デバイス１６１などの入力デバイスを介して、コンピュータ１１０にコマンドおよび情報を入力することができる。他の入力デバイス（図示せず）は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送用パラボラ・アンテナ、スキャナなどを含むことができる。これらおよび他の入力デバイスは、システム・バス１２１に結合されたユーザ入力インターフェース１６０を介して処理ユニット１２０に接続されることが多いが、パラレル・ポート、ゲームポート、またはユニバーサル・シリアル・ポート（ＵＳＢ）などの他のインターフェースおよびバス構造によって接続することができる。Ｎｏｒｔｈｂｒｉｄｇｅなどのグラフィックス・インターフェース１８２も、システム・バス１２１に接続することができる。Ｎｏｒｔｈｂｒｉｄｇｅは、ＣＰＵまたはホスト処理ユニット１２０と通信するチップ・セットであり、高速グラフィックス・ポート（ＡＧＰ）通信の役目を負う。１つまたは複数のグラフィックス処理ユニット（ＧＰＵ）１８４は、グラフィックス・インターフェース１８２と通信することができる。これに関して、ＧＰＵ　１８４は一般にレジスタ記憶装置などのオンチップ・メモリ記憶装置を含み、ＧＰＵ　１８４は本発明の中間ターゲットが実施可能なビデオ・メモリ１８６と通信する。ただし、ＧＰＵ　１８４は、コプロセッサ（ｃｏｐｒｏｃｅｓｓｏｒ）の一例であって、様々なコプロセス・デバイスをコンピュータ１１０に含めることが可能であり、ピクセル・シェーダおよび頂点シェーダなどのさまざまな手続き型シェーダを含むことが可能である。モニタ１９１または他のタイプのディスプレイ・デバイスも、ビデオ・メモリ１８６と通信可能なビデオ・インターフェース１９０などのインターフェースを介して、システム・バス１２１に接続される。モニタ１９１に加え、コンピュータは、出力周辺インターフェース１９５を介して接続可能なスピーカ１９７およびプリンタ１９６などの他の周辺出力デバイスを含むこともできる。
【００４７】
コンピュータ１１０は、リモート・コンピュータ１８０などの１つまたは複数のリモート・コンピュータへの論理接続を使用して、ネットワーク環境または分散環境で動作可能である。リモート・コンピュータ１８０は、パーソナル・コンピュータ、サーバ、ルータ、ネットワークＰＣ、ピア・デバイス、または他の共通ネットワーク・ノードであってよく、図３Ｂにはメモリ記憶デバイス１８１のみが示されているが、典型的にはコンピュータ１１０に関して上記で述べた要素の多くまたはすべてを含む。図３Ｂに示された論理接続は、ローカルエリア・ネットワーク（ＬＡＮ）１７１およびワイドエリア・ネットワーク（ＷＡＮ）１７３を含むが、他のネットワーク／バスも含むことができる。こうしたネットワーキング環境は、家庭、オフィス、企業全体のコンピュータ・ネットワーク、イントラネット、およびインターネットで一般的なものである。
【００４８】
ＬＡＮネットワーキング環境で使用される場合、コンピュータ１１０はネットワーク・インターフェースまたはアダプタ１７０を介してＬＡＮ　１７１に接続される。ＷＡＮネットワーキング環境で使用される場合、コンピュータ１１０は典型的にはモデム１７２、またはインターネットなどのＷＡＮ　１７３を介して通信を確立するための他の手段を含む。モデム１７２は内蔵または外付けであってよく、ユーザ入力インターフェース１６０または適切なメカニズムを介してシステム・バス１２１に接続することができる。ネットワーク環境では、コンピュータ１１０に関して図示されたプログラム・モジュールまたはその一部を、リモート・メモリ記憶デバイス内に格納することができる。例を挙げると、限定されないが、図３Ｂにはリモート・アプリケーション・プログラム１８５がメモリ・デバイス１８１に常駐するとして示されているが、これに限定されるものではない。図示されたネットワーク接続は例示的なものであって、コンピュータ間に通信リンクを確立する他の手段も使用可能であることを理解されよう。
【００４９】
（例示的分散コンピューティング・フレームワークまたはアーキテクチャ）
様々な分散コンピューティング・フレームワークが、パーソナル・コンピューティングおよびインターネットの集合状態を考慮して、これまで開発されてきており、現在も開発中である。個人ユーザにもビジネス・ユーザにも同様に、シームレスに相互運用可能であって、Ｗｅｂ使用可能なアプリケーションおよびコンピューティング・デバイス用のインターフェースが与えられ、このインターフェースは、コンピューティング・アクティビティをますますＷｅｂブラウザまたはネットワーク指向にしている。
【００５０】
たとえば、ＭＩＣＲＯＳＯＦＴ（登録商標）の．ＮＥＴプラットフォームには、サーバ、Ｗｅｂベースデータ記憶装置およびダウンロード可能なデバイス・ソフトウェアなどのビルディング・ブロック・サービスが含まれる。一般にその．ＮＥＴプラットフォームは（１）全領域のコンピューティング・デバイスを一緒に機能させて、それらすべてのユーザ情報を自動的に更新し、および同期させる機能、（２）ＨＴＭＬよりもＸＭＬを多く使用することによって可能なＷｅｂサイトに対する対話機能を向上させること、（３）電子メールまたはソフトウェアなどの様々なアプリケーションを管理するための、カスタマイズされたアクセスならびに製品およびサービスの中央起点からユーザへの送達を特徴付ける、たとえばＯｆｆｉｃｅ．ＮＥＴなどの、オンライン・サービス、（４）効率を上げ、情報へのアクセスを容易にする集中型データ記憶ならびにユーザおよびデバイス間での情報の同期化、（５）電子メール、ファックス、および電話などの様々な通信媒体を統合する機能、（６）開発者向けの、生産性を向上させプログラミング・エラー数を減少させる、再使用可能モジュールを作成する機能、および（７）多くの他のクロス・プラットフォーム統合機能も、同様に提供する。
【００５１】
本明細書の例示的実施形態は、コンピューティング・デバイス上に常駐するソフトウェアに関連して記載されているが、本発明の１つまたは複数の部分は、オペレーティング・システム、アプリケーション・プログラミング・インターフェース（ＡＰＩ）、またはコプロセッサと要求側オブジェクトとの間の「仲介」オブジェクトを介して実施することも可能であり、その結果、制御可能テクスチャー・サンプリング・サービスが、．ＮＥＴのすべての言語およびサービスによって実行される、またはこれらでサポートされる、またはこれらを介してアクセスされることが可能であり、他の分散コンピューティング・フレームワークにおいても同様である。さらに、本発明の他の側面は、手続き型シェーダがＡＰＩからのプログラムを受け取り、それらを様々な中間ターゲットに変換できるようにするグラフィックス・アーキテクチャに加えて、ビデオ・メモリに常駐する中間ターゲットそれ自体に存在する。
【００５２】
（複数の中間ターゲット循環（Ｍｕｌｔｉｐｌｅ　Ｉｎｔｅｒｍｅｄｉａｔｅ　Ｔａｒｇｅｔ　Ｃｉｒｃｕｌａｔｉｏｎ））
本発明のシステムおよび方法は、一般的にプログラム可能なグラフィック・パイプラインの展開に関連して、プログラム可能機能（ｐｒｏｇｒａｍｍａｂｌｅ　ｃａｐａｂｉｌｉｔｙ）の使用を抽象し、および簡略化するために、高水準言語の作成（ｃｒｅａｔｉｏｎ）を可能にする。したがって本発明は、グラフィックス・ハードウェアによって非常に高い性能レベルで達成される以外に、開発者によって表現可能グラフィックス技法がより広範囲にわたることを可能にするプラットフォームを与える。
【００５３】
本発明に従った中間ターゲットの再循環、を持たないグラフィックス・プラットフォームは、同様の結果を達成するためにはデータ上に追加のパスが必要であるという点で、ピクセルごとおよび頂点ごとのレベルで動作するプログラムのサイズおよび複雑さについて、性能の面から、制限される。たとえば、ライティング効果または同様の変換を実施するあるプログラムは、関連するプログラムの複雑さおよび／または長さが原因で、本発明なしでは非リアルタイム・グラフィックスに限定される。図４に示されるように、比較的複雑なシェーダ・プログラムＳＰは、関連するハードウェアたとえばピクセル・シェーダの最大命令制限を越えているため、本発明によって支援されていない開発者は、リアルタイム要求に応えられるほど高速でない可能性のあるホスト処理装置による変換実施を押し付けられる。本発明により可変的にサイズが設定可能な中間ターゲットＭＲＴ１およびＭＲＴ２を使用することによって、開発者は実際にプログラムＳＰをＳＰＰ１、ＳＰＰ１、およびＳＰＰ３の部分に、実質上、細分することが可能であり、それらはすべて個々にハードウェアの命令制限を越えないものであるが、中間結果を出力し、中間結果を再使用することによってＳＰの機能を集合的に実行する。たとえば、ＳＰＰ１が中間結果を中間ターゲットＭＲＴ１に出力し、これがプログラム部分ＳＰＰ２への入力の役割を果たし、次にＳＰＰ２が中間結果を中間ターゲットＭＲＴ２に出力し、これがプログラム部分ＳＰＰ３への入力の役割を果たし、次にＳＰＰ３が所望の変換済みデータを出力する。したがって、本発明を使用して、ハードウェア加速を使用して非リアルタイム・レンダリングを可能にする、仮想的には長さに制限のないプログラムを作成することができる。したがって、本発明に従った非リアルタイム・レンダリング・アプリケーション用の無制限のハードウェア加速再循環機能（ｕｎｌｉｍｉｔｅｄ　ｈａｒｄｗａｒｅ　ａｃｃｅｌｅｒａｔｅｄ　ｒｅｃｉｒｃｕｌａｔｉｏｎ　）により、グラフィックス・プラットフォームの速度および性能が向上する。
【００５４】
さらに、ＭＲＴ内のデータを何回でも入力として任意のプログラムへ再循環させる機能は反復オペレーションを意味し、再計算なしでの中間データの再使用は、任意のプログラムが達成することができる。さらに中間ターゲット内のデータ・フォーマットは、ＭＲＴ１は赤、緑、青のカラー・データを含むが、ＭＲＴ２はカラーにはまったく無関係のデータ、たとえば位置について複雑な関数で実行しなければならないデータ、または重みを含むことができるように、開発者によって設定される。また前述のように、バッファのサイズ、すなわち中間ターゲットに格納されるデータ量は、グラフィックス・データの変化する解像度に合わせて可変的に設定することもできる。
【００５５】
本明細書で使用される場合、本発明の複数再循環ターゲット（ｍｕｌｔｉｐｌｅ　ｒｅｃｉｒｃｕｌａｔｉｏｎ　ｔａｒｇｅｔｓ）（ＭＲＴｓ）はバッファとして使用されるテクスチャーである。バッファは、一般に「ピクセル・シェーダ」と呼ばれるピクセルごとのプログラムへの入力とそれからの出力として使用することができる。単一のピクセル・シェーダ・プログラムは、レンダリング・ターゲットとして現れる他の任意数のＭＲＴに出力する一方で、任意数のこれらＭＲＴからテクスチャーの形で同時に入力することが可能である。これら別個のバッファの数はハードウェアによってのみ制限され、ビデオ・メモリのサイズ、したがってこれらのバッファはかなりの数が可能である。
【００５６】
本発明の例示的構成要素には、（１）テクスチャーをサンプリングし、任意の最終的なオプション・フレーム・バッファの出力に加えて複数のレンダリング・ターゲットに出力する機能を有する、ピクセル・シェーダ・プログラムと、（２）出力用のレンダリング・ターゲットまたは入力用のテクスチャーとしてピクセル・シェーダ・プログラムにバインド可能な再循環バッファとが含まれる。
【００５７】
（無制限の実施形態）
次に、本発明の上記の構成要素を使用する本発明の無制限なソフトウェア実施について述べる。これに関して、本発明はハードウェアにおける変形形態に対処するために、ＭＲＴを少なくとも２つの形で表す。この実施にはＭＥＴ（Ｍｕｌｔｉ−Ｅｌｅｍｅｎｔ　Ｔｅｘｔｕｒｅ）形式として記述した形式、およびＭＲＴ形式として記述した形式が含まれる。ＭＥＴ形式はより単純な形式である。ＭＥＴの場合、一般にカラー要素に関連付けられた中間の４つの構成要素出力が、インタリーブ様式で単一の表面に書き込まれる。ＭＲＴの場合、個々のカラー要素を個々の表面に別々にバインドすることができる。これらの表面は、ピクセル・シェーダ・プログラムによって表現される技法に最適な何らかの方法で、各カラー要素についてフォーマットが変わることがある。
【００５８】
（無制限のＭＥＴ　ＡＰＩ）
ＭＥＴ　ＡＰＩでは、従来のテクスチャーは単一要素テクスチャーであるとみなされ、アプリケーションはピクセル・シェーダから同時にテクスチャーの複数の要素に書き込むことが可能であるため、次のレンダリング・パスでは、アプリケーションはそれら要素のうち１つまたは複数を単一の要素テクスチャーとして、すなわちピクセル・シェーダへの入力として使用することができる。これらの追加要素は、後のパスでアプリケーションが使用することになる中間結果用の一時記憶装置としてみなすことができる。
【００５９】
ＭＥＴの例示的な無制限の使用法が、図５の擬似コードのフローチャートに示されている。５００では、アプリケーションがＭＥＴフォーマットの可用性をチェックすることによって、中間ターゲットのサポートを発見する。５１０では、アプリケーションがＣｒｅａｔｅＳｕｒｆａｃｅ関数を呼び出すことによって、ＭＥＴ表面を作成する。５２０では、アプリケーションがＳｅｔＲｅｎｄｅｒＴａｒｇｅｔ関数の呼出しを介して、ＭＥＴをＲｅｎｄｅｒＴａｒｇｅｔとして設定する。ピクセル・シェーダ２３０は移動命令を使用して表面に出力する。５３０では、ＭＥＴ表面を特定の段階（ｐａｒｔｉｃｕｌａｒ　ｓｔａｇｅ）に設定するためにＳｅｔＴｅｘｔｕｒｅ関数が呼び出される。他のテクスチャー同様、同じ表面を一度に複数の段階に設定することができる。５４０では、Ｄ３ＤＳＡＭＰ＿ＥＬＥＭＥＮＴＩＮＤＥＸ変数をサンプラがサンプリングするＭＥＴテクスチャーの適切な要素番号に設定するために、ＳｅｔＳａｍｐｌｅｒＳｔａｔｅ関数が呼び出され、それによってサンプラ状態のデフォルト値は非ＭＥＴテクスチャーが動作することを意味する０となる。ＶａｌｉｄａｔｅＤｅｖｉｃｅ関数呼出しによって、たとえばＭＥＴが２要素幅しかない場合にサンプラが４番目の要素からのサンプリングを要求した場合など、この状態が不適切な番号に設定されていることが報告される。
【００６０】
次に、ＭＥＴ機能をサポートする無制限ＡＰＩについて述べる。以下に示すような、フォーマットのインタリーブ性を表現する表面フォーマットがある。
2004054891.tif 000003
【００６１】
（無制限の複数レンダリング・ターゲット（Ｍｕｌｔｉｐｌｅ　Ｒｅｎｄｅｒ　Ｔａｒｇｅｔｓ）（ＭＲＴ）ＡＰＩ）
多くの実施では、本明細書ではＭＲＴと呼ばれる、制限の少ない形式のＭＥＴをサポートしている。こうした緩和の１つが、別個に作成可能な複数のレンダリング・ターゲットを有する機能である。これらのレンダリングは、異なるフォーマットを有することができる。現在、一部の３−ＤグラフィックスＡＰＩは、既存のＳｅｔＲｅｎｄｅｒＴａｒｇｅｔ　ＡＰＩを介して設定可能な単一のレンダリング・ターゲットをサポートしている。本発明によれば、このＡＰＩのエントリ・ポイントは、複数のレンダリング・ターゲットがデバイス内で同時に存在できるように拡張されている。新しいキャップがこの機能を表す。
【００６２】
以下のｏＣｎレジスタは、（ａ）ｏＣ０：カラー０（要素０）、（ｂ）ｏＣ１：カラー１（要素１）、（ｃ）ｏＣ２：カラー２（要素２）、（ｄ）ｏＣ３：カラー３（要素３）、および（ｅ）ｏＤｅｐｔｈ：深さステンシル・バッファに対する深さテストのための新しい深さ値、という、ＭＥＴテクスチャーの例示的な異なる要素を表すものである。移動命令を使用してｏＣｘレジスタに書き込むことができる。
【００６３】
ＭＲＴ　ＡＰＩに関する例示的な無制限擬似コードは、以下の通りである。
2004054891.tif 000004
以下には、構成要素全体を移動するための例示的擬似コード記述が含まれる。
2004054891.tif 000005
【００６４】
（中間ターゲットの例示的使用）
図６は、本発明の中間ターゲットを使用すると、従来技術のピクセル・エンジン技法とは異なり、変化する情報バケットを備えた複数の中間ターゲットをピクセル・エンジンからの出力として作成できることを示す図である。さらに、中間ターゲットのデータは無期限に保存可能であるため、後で再使用することができる。たとえば、ピクセルＰ１からＰＮがピクセルのＲ、Ｇ、およびＢ値を格納し、これらを中間ターゲットＩＴ１に配置することができる。ピクセルＰＷからＰＸがライティング値を格納し、これらを中間ターゲットＩＴ２に配置することが可能であって、ピクセルＰＹからＰＺが何らかの他の中間結果を格納し、これらを中間ターゲットＩＴ３に配置することが可能である。中間ターゲットＩＴ１、ＩＴ２、およびＩＴ３それぞれにあるデータは、同じかまたは異なるプログラム、あるいはプログラムの部分によって再使用可能であるため、様々な複雑なシェーディング効果が達成できる。ハードウェア、たとえば頂点シェーダおよびピクセル・シェーダを含むグラフィックス・チップは、ＡＰＩを介し、開発者の仕様に従って中間ターゲットへ出力または中間ターゲットから入力する。
【００６５】
本発明に従って達成可能なより複雑なオペレーションの一例として、図７では、ある時間持続され、第１のプログラムパス１への入力が要求されている中間ターゲットＭＲＴ１を示しており、パス１はＭＲＴ１を入力として受け取り、中間ターゲットＭＲＴ２に出力する。その後、またはその前に、プログラムパス２はＭＲＴ１を入力として受け取り、中間ターゲットＭＲＴ３に出力する。さらに、プログラムパス３は入力なしで中間ターゲットＭＲＴ４に出力する。最後にプログラムパス４は、ＭＲＴ２、ＭＲＴ３、およびＭＲＴ４をハードウェアへの入力として受け取る何からのオペレーションを実行する。いくつかのＭＲＴが、いくつかのピクセル・プログラムは、より複雑な様式で中間データを共用できるようにするために、使用される。これは、ＭＲＴの寿命（持続期間）が完全に開発者の制御にかかっていることを示すものである。
【００６６】
言い換えれば、プログラムはパス１で開始される。データは（他のプログラムよりはいくらか早く作成された）ＭＲＴ１から読み取られる。パス１は何らかのプログラムに従ったアルゴリズムを実行し、ＭＲＴ２を生成する。パス２は再度ＭＲＴ１を使用して、ＭＲＴ３を生成するために異なるアルゴリズムを実行する。パス３は、入力なしでアルゴリズムを使用してＭＲＴ４を生成する。パス４（最終パス）は、ＭＲＴ２、ＭＲＴ３、およびＭＲＴ４からのデータを組み合わせて、最終的に、従来技術の制限を備えたグラフィックス・ハードウェアで達成することが可能であった場合よりもはるかに複雑なシェーディング効果の、正しいカラー・データをフレーム・バッファに送信する。
【００６７】
本発明を実施するには複数の方法がある。その１つが、たとえばＧＰＵなどのコプロセッサが、本発明の機能を実行するために事前に作成され、本明細書に記載されたような複数の中間ターゲットに適切なコマンドを受け取る実装を提供することである。本発明の他の実装には、適切なＡＰＩ、ツール・キット、ドライバ・コード、オペレーティング・システム、スタンドアローン型またはダウンロード可能なソフトウェア・オブジェクトなどが含まれ、これによってアプリケーションおよびサービスは中間ターゲットを使用してより複雑な機能を達成することができる。本発明は、ＡＰＩ（または他のソフトウェア・オブジェクト）、グラフィックス・チップ、およびビデオ・メモリの見地からの本発明の使用を企図する。したがって、本明細書に記載された本発明の様々な実装には、全体をハードウェアで実装、一部をハードウェアで一部をソフトウェアで実装、ならびにソフトウェアで実装、という態様がある。
【００６８】
前述のように、本発明の例示的実施形態について、様々なコンピューティング・デバイスおよびネットワーク・アーキテクチャに関連して述べてきたが、基礎となる概念は、単純でない方法で手続き型シェーダをプログラムすることが望ましい、いかなるコンピューティング・デバイスまたはシステムにも適用可能である。したがって、本発明に従って手続き型シェーダの改善されたプログラム性を提供するための技法を、様々なアプリケーションおよびデバイスに適用することができる。たとえば、本発明のアルゴリズムおよびハードウェア実装は、コンピューティング・デバイスのオペレーティング・システムに適用可能であり、デバイス上の別のオブジェクトとして、他のオブジェクトの一部として、サーバからのダウンロード可能オブジェクトとして、デバイスまたはオブジェクトとネットワークとの間の「仲介」として、分散オブジェクトとして、ハードウェアとして、メモリ内で、以上のいずれかの組み合せなどで提供される。例示的プログラミング言語、名前、および例は、本明細書では様々な選択肢の代表として選択されており、これらの言語、名前、および例が限定的なものであることは意図していない。当分野の通常の技術者であれば、本発明のＡＰＩによって達成される機能と同一、同様、または同等の機能を達成するオブジェクト・コードを提供するには、多くの方法があることを理解されよう。
【００６９】
本明細書に記載された様々な技法は、ハードウェアまたはソフトウェアに関連して、あるいは適切であればその両方の組み合せに関連して、実装可能である。したがって、本発明の方法および装置、またはその一定の態様または部分は、フロッピィ・ディスケット、ＣＤ−ＲＯＭ、ハード・ドライブ、または任意の他のマシン読取り可能記憶媒体などの、実体のある媒体で具体化されるプログラム・コード（すなわち命令）の形を取ることが可能であって、プログラム・コードがコンピュータなどのマシンにロードされ実行されると、そのマシンが本発明を実施するための装置となる。プログラム・コードがプログラム可能コンピュータで実行される場合、コンピューティング・デバイスは一般に、処理装置、処理装置による読取りが可能な記憶媒体（揮発性および不揮発性のメモリおよび／または記憶要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含むことになる。たとえばデータ処理ＡＰＩなどを介して本発明の中間ターゲット・サービスを使用することのできる１つまたは複数のプログラムは、コンピュータ・システムと通信するために、高水準の手続き型またはオブジェクト指向のプログラミング言語で実装されることが好ましい。ただしプログラムは、所望であればアセンブリまたはマシン言語で実装することができる。いずれの場合も、言語はコンパイル済みまたは解釈済み言語であって、ハードウェア実装と組み合わせることができる。
【００７０】
本発明の方法および装置は、電気配線またはケーブル、光ファイバ、あるいは任意の他の伝送形式などの何らかの伝送媒体を介して伝送される、プログラム・コードの形で具体化される通信を介して実施することも可能であり、プログラム・コードが受け取られ、ＥＰＲＯＭ、ゲートアレイ、プログラム可能論理デバイス（ＰＬＤ）、クライアント・コンピュータ、ビデオ・レコーダなどのマシンにロードされ実行されると、前述の例示的実施形態で説明したような単一の処理機能を有する受け取り側マシンが、本発明を実施するための装置となる。汎用処理装置で実施される場合、プログラム・コードは処理装置と合同で本発明の機能を呼び出すように動作する固有の装置を提供する。さらに、本発明に関連して使用される任意の記憶技法は、常にハードウェアおよびソフトウェアの組み合せであってよい。
【００７１】
以上、本発明について、様々な図の好ましい実施形態と共に説明してきたが、他の同様の実施形態が使用可能であり、あるいは本発明と同じ機能を実行するために、記載された実施形態を逸脱することなくこれらを修正および追加することが可能であることを理解されよう。たとえば、本発明の例示的なネットワーク環境について、ピアツーピア・ネットワーク環境などのネットワーク環境のコンテキストで説明したが、当分野の技術者であれば、本発明がそれらに限定されるものでなく、本明細書に記載された方法が、有線であろうと無線であろうと、ゲーム・コンソール、ハンドヘルド・コンピュータ、ポータブル・コンピュータなどのどんなコンピューティング・デバイスまたは環境にも適用可能であり、通信ネットワークを介して接続され、ネットワークをまたがって対話する、いくつものこうしたコンピューティング・デバイスにも適用可能であることを理解されよう。さらに、特に無線ネットワーク・デバイスの数が激増し続けるに従い、ハンドヘルド・デバイスのオペレーティング・システムおよび他のアプリケーション特有のオペレーティング・システムを含む、様々なコンピュータ・プラットフォームが企図されることを強調したい。さらに本発明は、複数の処理チップまたはデバイス内で、またはこれらにまたがって実施可能であり、記憶装置も同様に複数のデバイスにまたがって実行可能である。したがって本発明は、任意の単一の実施形態に限定されるものではなく、むしろ、特許請求の範囲に従った幅および範囲内で解釈されるものである。
【図面の簡単な説明】
【図１】コンピュータ・グラフィックス・システムにおけるグラフィックス・パイプラインのプロセスを示す概略図である。
【図２Ａ】従来技術のグラフィックス・パイプラインに伴う様々な制限および問題を示す図である。
【図２Ｂ】従来技術のグラフィックス・パイプラインに伴う様々な制限および問題を示す図である。
【図２Ｃ】従来技術のグラフィックス・パイプラインに伴う様々な制限および問題を示す図である。
【図３Ａ】本発明が実施可能な様々なコンピューティング・デバイスを有する例示的ネットワーク環境を示す構成図である。
【図３Ｂ】本発明が実施可能な制限のないコンピューティング・デバイスの例を示す構成図である。
【図４】ハードウェア命令カウント制限を回避するための本発明の中間メモリ・ターゲットの使用例を示す図である。
【図５】本発明に従ったＡＰＩの使用を示す例示的な流れ図である。
【図６】本発明の中間メモリ・ターゲットの例示的態様を示す構成図である。
【図７】本発明に従い、ハードウェアによっていくつかのプログラム・パスを備える複雑な機能を達成するための、中間メモリ・ターゲットの使用例を示す図である。
【図１】
2004054891.tif 000006
【図２Ａ】
2004054891.tif 000007
【図２Ｂ】
2004054891.tif 000008
【図２Ｃ】
2004054891.tif 000009
【図３Ａ】
2004054891.tif 000010
【図３Ｂ】
2004054891.tif 000011
【図４】
2004054891.tif 000012
【図５】
2004054891.tif 000013
【図６】
2004054891.tif 000014
【図７】
2004054891.tif 000015