(57)【特許請求の範囲】
【請求項１】
ＧＰＵ上で動作するコンピュート・シェーダでグラフィックス・プリミティブ情報の組に対応するデータを取り込むこと、
仮想オブジェクトの前記グラフィックス・プリミティブ情報の組をＧＰＵ上で動作するコンピュート・シェーダで処理してプリミティブ情報の修正された組を生成すること、
ＧＰＵ上で動作する前記コンピュート・シェーダで前記プリミティブ情報の修正された組に対応するデータを明示的に書き込むことによって前記プリミティブ情報の修正された組をＧＰＵ上で動作する頂点シェーダに渡すこと、および
前記頂点シェーダで前記プリミティブ情報の修正された組に頂点シェーディングを行うこと、を含み、
前記コンピュート・シェーダはＧＰＵキャッシュを通してリング・バッファに書き込むように構成され、前記頂点シェーダは前記ＧＰＵキャッシュを通して前記リング・バッファから読み出すように構成され、前記プリミティブ情報の修正された組に対応するデータは前記コンピュート・シェーダによって前記リング・バッファおよび前記ＧＰＵキャッシュに書き込まれた少なくともスキニングされた頂点データであり、前記頂点シェーダは前記スキニングされた頂点データにアクセスするコンピュータ・グラフィックス処理方法。
【請求項２】
前記グラフィックス・プリミティブ情報の組をＧＰＵ上で動作するコンピュート・シェーダで処理することが、前記組の位置計算を行って前記仮想オブジェクトのプリミティブ情報の１つまたは複数の項目が省略されたプリミティブ情報の組を生成することを含む、請求項１に記載の方法。
【請求項３】
前記プリミティブ情報が１つまたは複数の多角形を代表する情報を含む、請求項２に記載の方法。
【請求項４】
前記プリミティブ情報の１つまたは複数の省略された項目が、１つまたは複数の背面を向いた多角形に対応するインデックスを含む、請求項３に記載の方法。
【請求項５】
前記プリミティブ情報の１つまたは複数の省略された項目が、１つまたは複数の画面外の多角形に対応するインデックスを含む、請求項３に記載の方法。
【請求項６】
前記プリミティブ情報の１つまたは複数の省略された項目が、１つまたは複数のゼロ・ピクセルの多角形に対応するインデックスを含む、請求項３に記載の方法。
【請求項７】
仮想オブジェクトのグラフィックス・プリミティブ情報の組の前記処理が、多角形の組のインデックス・テーブルを間引きしてディスプレイに現れない多角形を除去することを含む、請求項３に記載の方法。
【請求項８】
一回目に、頂点シェーダ命令をコンパイルして前記コンピュート・シェーダを生成すること、二回目に、前記頂点シェーダ命令をコンパイルして前記頂点シェーダを生成すること、をさらに含む、請求項１に記載の方法。
【請求項９】
前記プリミティブ情報の修正された組を頂点シェーダへ前記渡すことが、前記プリミティブ情報の修正された組をリング・バッファを通して渡すことを含む、請求項１に記載の方法。
【請求項１０】
前記頂点シェーダが、前記コンピュート・シェーダにより行われた前記グラフィックス・プリミティブ情報のいかなる処理も繰り返さない、請求項１に記載の方法。
【請求項１１】
グラフィックス処理ユニット（ＧＰＵ）であって、ＧＰＵ上で動作するコンピュート・シェーダでグラフィックス・プリミティブ情報の組に対応するデータを取り込み、仮想オブジェクトの前記グラフィックス・プリミティブ情報の組を前記ＧＰＵ上で動作するコンピュート・シェーダで処理してプリミティブ情報の修正された組を生成し、ＧＰＵ上で動作する前記コンピュート・シェーダで前記プリミティブ情報の修正された組に対応するデータを明示的に書き込むことによって前記プリミティブ情報の修正された組を前記ＧＰＵ上で動作する頂点シェーダに渡し、前記頂点シェーダで前記プリミティブ情報の修正された組の頂点シェーディングを行うように構成された前記ＧＰＵを含み、前記コンピュート・シェーダはＧＰＵキャッシュを通してリング・バッファに書き込むように構成され、前記頂点シェーダは前記ＧＰＵキャッシュを通して前記リング・バッファから読み出すように構成され、前記プリミティブ情報の修正された組に対応するデータは前記コンピュート・シェーダによって前記リング・バッファおよび前記ＧＰＵキャッシュに書き込まれた少なくともスキニングされた頂点データであり、前記頂点シェーダは前記スキニングされた頂点データにアクセスする、コンピュータ・グラフィックス・システム。
【請求項１２】
前記グラフィックス・プリミティブ情報の組をＧＰＵ上で動作するコンピュート・シェーダで処理することが、前記組の位置計算を行って前記仮想オブジェクトのプリミティブ情報の１つまたは複数の項目が省略されたプリミティブ情報の組を生成することを含む、請求項１１に記載のシステム。
【請求項１３】
前記プリミティブ情報が１つまたは複数の多角形を代表する情報を含む、請求項１２に記載のシステム。
【請求項１４】
前記多角形が三角形である、請求項１３に記載のシステム。
【請求項１５】
前記プリミティブ情報の１つまたは複数の省略された項目が、１つまたは複数の背面を向いた多角形に対応するインデックスを含む、請求項１３に記載のシステム。
【請求項１６】
前記プリミティブ情報の１つまたは複数の省略された項目が、１つまたは複数の画面外の多角形に対応するインデックスを含む、請求項１３に記載のシステム。
【請求項１７】
前記プリミティブ情報の１つまたは複数の省略された項目が、１つまたは複数のゼロ・ピクセルの多角形に対応するインデックスを含む、請求項１３に記載のシステム。
【請求項１８】
仮想オブジェクトのグラフィックス・プリミティブ情報の組の前記処理が、多角形の組のインデックス・テーブルを間引きしてディスプレイに現れない多角形を除去することを含む、請求項１３に記載のシステム。
【請求項１９】
中央演算装置（ＣＰＵ）をさらに含み、前記ＣＰＵが、一回目に、頂点シェーダ命令をコンパイルして前記コンピュート・シェーダを生成し、二回目に、前記頂点シェーダ命令をコンパイルして前記頂点シェーダを生成するように構成されている、請求項１１に記載のシステム。
【請求項２０】
前記ＧＰＵがさらにリング・バッファを含み、前記ＧＰＵがプリミティブ情報の修正された組をリング・バッファを通して前記コンピュート・シェーダから前記頂点シェーダに渡すように構成されている、請求項１１に記載のシステム。
【請求項２１】
前記システムが、埋め込みシステム、携帯電話、パーソナル・コンピュータ、タブレット型コンピュータ、ポータブル・ゲーム・デバイス、ワークステーション及びゲーム機である、請求項１１に記載のシステム。
【請求項２２】
コンピュータ読取り可能な命令が格納された非一時的コンピュータ読取り可能な媒体であって、前記コンピュータ読取り可能な命令は、実行された時に、グラフィックス処理方法を実施するように構成され、前記グラフィックス処理方法は、
ＧＰＵ上で動作するコンピュート・シェーダでグラフィックス・プリミティブ情報の組に対応するデータを取り込むこと、
仮想オブジェクトのグラフィックス・プリミティブ情報の組をＧＰＵ上で動作するコンピュート・シェーダで処理してプリミティブ情報の修正された組を生成すること、
ＧＰＵ上で動作する前記コンピュート・シェーダで前記プリミティブ情報の修正された組に対応するデータを明示的に書き込むことによって前記プリミティブ情報の修正された組をＧＰＵ上で動作する頂点シェーダに渡すこと、および
前記頂点シェーダで前記プリミティブ情報の修正された組に頂点シェーディングを行うことを含み、前記コンピュート・シェーダはＧＰＵキャッシュを通してリング・バッファに書き込むように構成され、前記頂点シェーダは前記ＧＰＵキャッシュを通して前記リング・バッファから読み出すように構成され、前記プリミティブ情報の修正された組に対応するデータは前記コンピュート・シェーダによって前記リング・バッファおよび前記ＧＰＵキャッシュに書き込まれた少なくともスキニングされた頂点データであり、前記頂点シェーダは前記スキニングされた頂点データにアクセスする、媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示の態様は、コンピュータ・グラフィックスに関する。特に、本開示は、グラフィックス・プロセッシング・ユニットにおけるコンピュート・シェーダ及び頂点シェーダの使用に関する。
【背景技術】
【０００２】
グラフィックス処理は、一般的に、２つのプロセッサ、中央処理装置（ＣＰＵ）とグラフィックス・プロセッシング・ユニット（ＧＰＵ）との協調を含む。ＧＰＵは、ディスプレイへの出力を意図したフレーム・バッファ内での像生成を加速するように設計された特化した電子回路である。ＧＰＵは、埋め込みシステム、携帯電話、パーソナル・コンピュータ、タブレット型コンピュータ、ポータブル・ゲーム・デバイス、ワークステーション及びゲーム機で使用される。ＧＰＵは、一般的に、コンピュータ・グラフィックスの操作が効率的になるように設計されている。ＧＰＵは、しばしば、大量のデータの処理が並列でなされる場合に、アルゴリズム用の汎用のＣＰＵに比べてＧＰＵをより有効にする高度な並列処理アーキテクチャを有している。
【０００３】
ＣＰＵは、ＧＰＵにコマンドを送って特別なグラフィックス処理タスクを実行すること、例えば、画像の前のフレームに対して変えた特別なテクスチャをレンダリングすることができる。これらの描画コマンドは、特定のアプリケーションの仮想環境の状態に対応するグラフィックス・レンダリング・コマンドを出すためにＣＰＵによりグラフィックス・アプリケーション・インターフェース（ＡＰＩ）を用いて調整され得る。
【０００４】
特別なプログラムに対するテクスチャをレンダリングするために、ＧＰＵは、「グラフィックス・パイプライン」における一連の処理タスクを行って仮想環境のビジュアルをディスプレイ上にレンダリング可能な像に変換することができる。典型的なグラフィックス・パイプラインは、あるレンダリング演算またはシェーディング演算を仮想空間の仮想物体上で行うこと、場面内の仮想物体を変換及びラスタ化して出力ディスプレイに適したピクセル・データ作ること、及び、レンダリングされた像をディスプレイ上に出力する前にピクセル（またはフラグメント）上で行われる追加のレンダリング・タスクを含むことができる。
【０００５】
画像の仮想オブジェクトは、しばしば、形状が既知のプリミティブに関して仮想空間に記述される。これらのプリミティブは、ともに仮想現場内でオブジェクトの形状を形成する。例えば、レンダリングされる三次元の仮想世界のオブジェクトは、立体内のそれらの座標に関して頂点が定義された一連の別個の三角形プリミティブに縮小され得、それによってこれらの多角形がオブジェクトの表面を形成する。各多角形は、与えられた多角形と他の多角形を区別するためにグラフィックス処理システムが使用可能な関連するインデックスを有することができる。同様に、各頂点は、与えられた頂点と他の頂点を区別するために使用可能な関連するインデックスを有することができる。グラフィックス・パイプラインは、これらのプリミティブ上である演算を行って仮想現場に対するビジュアルを生成し、このデータをディスプレイのピクセルによる再生に適した二次元のフォーマットに変換することができる。本明細書で使用するとき、グラフィックス・プリミティブ情報（または、単に「プリミティブ情報」）という用語は、グラフィックス・プリミティブを代表するデータのことを言う。かかるデータは、限定はされないが、頂点情報（例えば、頂点の位置または頂点のインデックスを表示するデータ）ならびに多角形情報（例えば、多角形インデックス及び特別な多角形に特別なインデックスを関連付ける情報）を含む。
【０００６】
ＧＰＵは、シェーダとして一般に知られているプログラムを実施することによってグラフィックス・パイプラインのレンダリング・タスクを行なうことができる。典型的なグラフィックス・パイプラインは、プリミティブのある特性を頂点単位で操作することができる頂点シェーダ、ならびに、グラフィックス・パイプライン内の頂点シェーダから下流で作動し、ディスプレイにピクセル・データを送信する前にピクセル単位である値を操作することができるピクセル・シェーダ（「フラグメント・シェーダ」としても知られている）を含むことができる。このパイプラインはまた、パイプラインの様々な段階で、頂点シェーダの出力を用いて新たなプリミティブの組を生成する幾何シェーダ、ならびに、ＧＰＵにより実施されて他のある一般的な計算タスクを行うことができるコンピュート・シェーダ（ＣＳ）などの他のシェーダも含むことができる。
【０００７】
仮想オブジェクトを形成する多角形の多くが共通の頂点を共有することができるので、シェーダ・プログラムは、どの座標がどの三角形に属するのかを識別するインデックス・バッファと共に別個の頂点の座標を定義する頂点バッファを利用することができる。インデックス・バッファは、頂点バッファに定義されたそれらの対応する頂点によって描画オブジェクトを識別するインデックス・テーブルを含むことができる。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
レンダリングされる任意の特別な画像では、仮想世界のオブジェクトは、背面を向いた三角形及び画面外の三角形などの、画像の視界から隠された多くの多角形を含むことができる。さらに、画像内の仮想オブジェクトは、サイズが非常に小さいのでディスプレイ上でレンダリングするためのピクセル中心を有さないゼロ・ピクセル三角形を含むことができる。かかる多角形をグラフィックス・パイプラインから取り除いてグラフィックス・パイプラインを迅速化することは有益である。
【０００９】
本開示が現れるのはこの背景においてである。
【課題を解決するための手段】
【００１０】
本発明の態様によれば、コンピュータ・グラフィックス処理方法は、仮想オブジェクトのグラフィックス・プリミティブの組をＧＰＵ上で動作するコンピュート・シェーダで処理してプリミティブ情報の修正された組を生成すること、プリミティブ情報の修正された組をＧＰＵ上で動作する頂点シェーダに渡すこと、プリミティブ情報の修正された組に頂点シェーダで頂点シェーディングを行うことを含むことができる。
【００１１】
本開示の前述の態様は、仮想オブジェクトのグラフィックス・プリミティブの組をＧＰＵ上で動作するコンピュート・シェーダで処理してプリミティブ情報の修正された組を生成し、プリミティブ情報の修正された組をＧＰＵ上で動作する頂点シェーダに渡し、プリミティブ情報の修正された組に頂点シェーダで頂点シェーディングを行うように構成されたグラフィック処理装置（ＧＰＵ）を有するコンピュータ・グラフィックス・システムを用いて実施することができる。
【００１２】
本開示の前述の態様は、コンピュータ読取り可能な命令が埋め込まれた非一時的コンピュータ読取り可能な媒体を用いて実施することができる。コンピュータ読取り可能な命令は、実行された時に、前述のグラフィックス処理方法を実施するように構成することができる。
【００１３】
ある実装形態では、グラフィックス・プリミティブ情報の組の処理には、この組の位置計算を行ってプリミティブ情報の縮小された組を生成することが含まれ、プリミティブ情報の縮小された組は仮想オブジェクトのプリミティブ情報の１つまたは複数の項目を省略する。ある実装形態では、プリミティブ情報は１つまたは複数の多角形を代表する情報を含むことができる。かかる実装形態のいくつかでは、１つまたは複数の省略されたプリミティブ情報は、１つまたは複数の背面を向いた多角形、またはより多くの画面外の多角形、またはゼロ・ピクセル多角形、に対応するインデックスを含むことができる。かかる実装形態のいくつかでは、グラフィックス・プリミティブ情報の組の処理は、多角形の組のインデックス・テーブルを間引きしてディスプレイに現れない多角形を除去することを含む
【００１４】
ある実装形態では、この方法はさらに、一回目に、頂点シェーダ命令をコンパイルしてコンピュート・シェーダを生成すること、二回目に、この頂点シェーダ命令をコンパイルして頂点シェーダを生成することを含むことができる。
【００１５】
ある実装形態では、プリミティブ情報の修正された組を、リング・バッファを通して頂点シェーダに渡すことができる。
【００１６】
ある実装形態では、頂点シェーダは、コンピュート・シェーダによって行なわれたグラフィックス・プリミティブ情報のいかなる処理も繰り返さない。
【図面の簡単な説明】
【００１７】
本開示の教示は、添付図面と共に以下の詳細な説明を考慮することにより容易に理解することができる。
【図１Ａ】従来のグラフィックス処理実装のブロック・ダイヤグラムである。
【図１Ｂ】本開示の態様によるグラフィックス処理を示すブロック・ダイヤグラムである。
【図２】本開示の態様によるグラフィックス処理システムの一部のブロック・ダイヤグラムである。
【図３】本開示の態様によるグラフィックス処理システムのブロック・ダイヤグラムである。
【発明を実施するための形態】
【００１８】
以下の詳細な説明は例示する目的で多くの具体的な詳細を含んでいるが、当業者なら誰でも以下の詳細に対する多くの変形及び変更が本発明の範囲内であることを認識するであろう。従って、下記で説明された本発明の例示的な実施例は、請求項に係る発明に対する一般性を損なうことなく、かつ請求項に係る発明を限定することなく、以下で記述される。
【００１９】
序
図１Ａに示すように、従来のグラフィックス処理は、一般的にＣＰＵ及びＧＰＵを有したシステム１００で実施される。ＣＰＵは、一般的に、ＧＰＵのシェーダ入力を作製するグラフィックス・アプリケーション・プログラム・インターフェース（ＡＰＩ）１０２を実装する。一般に、ＣＰＵは、ＧＰＵによりレンダリングされるオブジェクトを作り出す頂点に関するデータを得、レンダリングされる前にこのデータにいくつかの処理を行うことができる。かかる処理は、インデックス・テーブルを間引きすることを含むことができる。このタイプの操作は、オブジェクトを作り出す多角形（例えば、三角形）の組を分析してレンダリングされる必要のない多角形かどうかを判断することを伴う。組の各多角形は、多角形を識別するインデックスによって識別することができる。各多角形はさらに、それぞれが対応するインデックスを有することができる頂点の組、ならびに、座標の組（例えば、ｘ、ｙ、ｚ、ｗ）座標によって特徴付けることができる。頂点は、２Ｄ空間または３Ｄ空間内の点を記述するデータ構造である。ディスプレイ・オブジェクトは平らな表面（例えば、三角形）のアレイからなり、頂点は、表面の隅の位置及び他の属性を定義する。頂点は、位置だけでなくオブジェクトを正確にレンダリングするために使用される他のグラフィカルな属性にも関連することができる。かかる属性には、限定はされないが、頂点での色、頂点での表面の反射率、頂点での表面に適用されるテクスチャの座標、及び頂点の位置での近似曲面の法線が含まれ得る。この法線は、ランバートの余弦則を用いるフラット・シェーディングの光源に対する表面の向き、またはフォン・シェーディングで曲面を模倣する各頂点の向きを決定するのに使用することができる。頂点シェーダ１０４は、頂点シェーディングを行なう際にこれらのプロパティを使用することができる。頂点シェーダ１０４は、一般的に、仮想空間内の各頂点の３Ｄ位置をそれがスクリーン上に現れる２Ｄ座標に変換する（Ｚバッファの深さ値と同様）。
【００２０】
グラフィックスＡＰＩは、オブジェクトを作り上げる多角形のインデックスをオブジェクトが格納することができるインデックス・テーブルを生成することができる。例として、グラフィックスＡＰＩによって実行される間引き操作は、多角形のうちのどれが背面を向くかまたは画面から外れる（すなわち、最終画像に見ることができない）か、ピクセルを含まないか、あるいは、エッジ上で見えるので面積がゼロであるのかを判断することができる。かかる多角形のインデックスをインデックス・テーブルから取り除いて、さらなる処理のためにＧＰＵに送られる間引きされたインデックス・テーブルを作ることができる。特に、ＧＰＵ上で動作する頂点シェーダ１０４は、間引きされたインデックス・テーブルの多角形それぞれの座標をディスプレイ上にレンダリングするために３Ｄグローバル座標から２Ｄローカル座標に変換することができる。その後、生じた頂点シェーダ出力１０５を、生じた多角形をピクセルで満たすフラグメント・シェーダ１０６に送ることができる。頂点シェーダは、一般的に、ＧＰＵに与えられた各頂点に対して一度実行される。ＧＰＵハードウェアは、一般的に、限られた数の頂点シェーダのインスタンスを実装することができる。
【００２１】
インデックス・テーブルをＣＰＵで間引くことは、処理能力の点でＧＰＵに比較してＣＰＵハードウェアが比較的強力な場合にうまく機能する。しかし、ＧＰＵハードウェアがより有能になるにつれて、インデックスの間引きのようなタスクをＧＰＵ上で行うことが望ましくなるはずである。最新のＧＰＵは、並行処理を高度に実施することができ、この能力を利用してグラフィックス・パイプラインのボトルネックを縮小することが有利になるはずである。
【００２２】
方法
本開示の態様によれば、従来ＣＰＵによって行われていた。グラフィックス・パイプラインのある部分をＧＰＵ上で動作するコンピュート・シェーダを用いて行うことができる。
【００２３】
図１Ｂの方法１００Ｂに示すように、本開示の態様によれば、グラフィックス・プリミティブ情報１０３'の組の処理をＧＰＵ上で動作するコンピュート・シェーダ１０１によって行うことができ、得られたプリミティブ情報の修正された組１０５'をＧＰＵ上で動作する頂点シェーダ１０４にコンピュート・シェーダが行ったいかなる処理も頂点シェーダに繰り返させることなく渡すことができる。これは、ＣＰＵでプリミティブ情報の修正された組を作製する処理を行わなければならないのを回避し、それによって、ＣＰＵとＧＰＵ間のデータ移動に関連するボトルネックを回避する。頂点シェーダ１０４は、生じた多角形をピクセルで満たすフラグメント・シェーダ１０６に送ることができる出力１０７を作製することができる。
【００２４】
本開示のある態様によれば、グラフィックスＡＰＩ１０２は、１１２で示されるような頂点シェーダを起動することができる。グラフィックスＡＰＩは、ＧＰＵと離れた別個のＣＰＵ上で動作することができる。頂点シェーダの起動は、コンピュート・シェーダ１０１を生成するためにコンパイラ１１４ｃによって一回コンパイルされ、頂点シェーダ１０４を生成するためにコンパイラ１１４ｖによって二回目のコンパイルをされ得る。
【００２５】
コンピュート・シェーダは、ＧＰＵ上で動作して任意の計算を行なうことができるシェーダ・ステージである。コンピュート・シェーダは、レンダリングを行うことができるはずであるが、一般に、多角形及びピクセルを描画することに直接関係しないタスクに使用される。コンピュート・シェーダは、他のすべてのシェーダ・ステージとは、他のステージ（例えば、頂点シェーダ及びピクセル・シェーダ）が内臓のまたはユーザ定義のものでよい明確に定義された入出力値の組であるという点で、異なって動作する。シェーダ・ステージが実行される頻度はそのステージの性質によって指定される。例えば、頂点シェーダは、入力頂点当り一回実行される（いくつかの実行は、キャッシングを介してスキップされ得るが）。フラグメント（またはピクセル）シェーダの実行は、ラスタ化プロセスから生成されたフラグメントによって規定される。
【００２６】
対照的に、コンピュート・シェーダは、大変抽象的なデータ「空間」上で動作する。各コンピュート・シェーダは、空間が意味するものを決定する。コンピュート・シェーダの実行の数は、コンピュート操作を実行するのに使用される機能によって規定される。その結果、一度に実行することができるコンピュート・シェーダ・インスタンスの数はほとんど無制限である。最も重要なことは、コンピュート・シェーダは、ユーザ定義の入力及び出力を全く有していないことである。内蔵の入力のみが、実行の「空間」内で、特別なコンピュート・シェーダの起動がどこに存在するかを規定する。
【００２７】
したがって、コンピュート・シェーダが入力としていくつかの値を取りたいならば、テクスチャ・アクセス、任意の画像ロード、シェーダ記憶ブロック、または他の形のインターフェースを介したそのデータの取り込みはシェーダ自身の責務である。同様に、コンピュート・シェーダが実際に何かを計算する予定であれば、シェーダは、画像またはシェーダ記憶ブロックに明示的に書き込まなければならない。
【００２８】
これらの特性のために、コンピュート・シェーダを用いて、以前はＣＰＵ上で行なわれたＧＰＵ上でのインデックスの間引きのようなタスクを実行することができる。本開示の態様によれば、これは、図２に示されるように実行することができる。
【００２９】
図２では、ＧＰＵ２００は、コンピュート・シェーダ２０２及び頂点シェーダ２０４を動作させるように構成することができる。コンピュート・シェーダ２０２は、ＧＰＵの外部のソース（例えばＣＰＵ（図示せず））から受け取った入力データ上で作動することができる。コンピュート・シェーダ２０２によって生成された出力は、さらなる処理のために頂点シェーダ２０４に渡され得る。
【００３０】
ある実装形態では、データは、１つまたは複数のリング・バッファ２１０を介してコンピュート・シェーダから頂点シェーダに渡され得る。このタイプのバッファは、あたかも端末相互間で接続されているかのように構成された単一のサイズ固定のバッファを使用する。バッファが一杯で新たなデータがこのバッファに追加されるときは、既存のデータが上書きされる。しかし、リング・バッファが十分に大きく、コンピュート・シェーダと頂点シェーダの動作が十分に同期されているならば、頂点シェーダは、コンピュート・シェーダによって書き込まれたデータが上書きされる前にアクセスすることができる。リング・バッファ２１０は、同じメモリを再使用し、必要な期間のみインデックス・データを格納する。リング・バッファ２１０内のデータが頂点シェーダ２０４に渡されるとすぐに、このデータは上書きされ得る。
【００３１】
２つ以上のリング・バッファがバッファされるデータのタイプに応じて存在し得ることが注目される。例えば、インデックス・データをインデックス・リング・バッファＩＲＢ内でバッファリングし、頂点データを別個の検出された頂点リング・バッファＶＲＢ内でバッファリングすることができる。リング・バッファ２１０は、メモリ２０６にマッピングすることができる。コンピュート・シェーダ２０２は・インデックス・リング・バッファＩＲＢを通してインデックス・データを書き込み、頂点リング・バッファＶＲＢを通して頂点データを書き込むことができる。
【００３２】
リング・バッファ２１０は、ＧＰＵキャッシュ２０８に最初に座しているリング・バッファへのメモリ書込みにマッピングされる。もし、頂点シェーダ２０４が、データがＧＰＵキャッシュ２０８に入るにつれて、データの上書きの前及びＧＰＵ２０４上で動
作する他のプロセスはキャッシュ内にスペースを必要とするのでこれらのプロセスがデータを洗い流す前に、データを読み取ることができるならば、データはコンピュート・シェーダ２０２からリング・バッファ２１０に入るであろう、そしてリング・バッファ２１０を出て頂点シェーダ２０４に行くであろう。リング・バッファ２１０によるかかるデータの書き込みと読み出しのサイクルの多くはデータを一度もメモリ２０６に書き込むことなく行うことができる。システムが動いた後にだけ、リング・バッファ２１０内の少量のデータがメモリ２０６内に追いやられる。したがって、コンピュート・シェーダ２０２から頂点シェーダ２０４に渡されるデータに必要な唯一のメモリ・バンド幅は、当該のリング・バッファ２１０のサイズである。例としてであって、限定するものではないが、インデックス・リング・バッファＩＲＢのサイズは、コンピュート・シェーダ２０２から頂点シェーダ２０４に渡されているインデックス・データのサイズの合計よりはるかに小さくなることができる。例えば、間引きされたインデックス・テーブルのインデックス・データの合計量は、約１ＭＢとなり得るが、インデックス・リング・バッファＩＲＢのサイズはわずか４８ＫＢでよい。したがって、ＧＰＵ２００は、コンピュート・シェーダ２０２で間引きを実行するためにわずか４８ＫＢのメモリ・バンド幅を必要とするだけである。それに反して、もし、頂点シェーダ２０４が動作する前にコンピュート・シェーダ２０２が長時間動作するならば、頂点シェーダ２０４がインデックスを使用するグラフィッククス・タスクを動かすまで１ＭＢのインデックスのすべてを保持するために１ＭＢのスペースが必要になるはずである。リング・バッファ２１０との密結合システムを用いることによって、インデックス・データのメモリ・フットプリントを大きく低減させることができる。
【００３３】
インデックス・リング・バッファ２１０へのアクセスは、コンピュート・シェーダ２０２と頂点シェーダ２０４の動作を密に結合するために、同期されるべきである。かかる同期には、データが頂点プロセッサ２０４に使用される前に洗い流されたりまたは上書きされたりしないことを保証することが伴われる。同期の速度は、必要なリング・バッファ２１０のサイズを決定する。一般に、同期が速くなるほど要求されるリング・バッファのサイズはより小さくなる。さらに、同期があまりに多くのオーバーヘッドを必要とするならば、ボトルネックがＧＰＵに導入される恐れがある。同期を実行するために、ＧＰＵ２００のハードウェアはリング・バッファ２１０へのアクセスを制御してデータが頂点シェーダ２０４に必要とされる前にリング・バッファから廃棄されるのを防ぐように構成され得る。
【００３４】
ＧＰＵ２００が使用され得るいくつかの方法がある。例えば、上で述べたように、コンピュート・シェーダ２０２は多角形の間引き（例えば、三角形の間引き）を実行するように構成され得る。かかる事例では、間引きされたインデックス・データは、インデックス・リング・バッファＩＲＢを介して頂点シェーダまで通って渡されることができる。頂点の三次元の位置が多角形の間引きプロセスの一部として生成されることが注目される。一旦、頂点の位置がコンピュート・シェーダ２０２によって計算されたならば、それらの位置は頂点リング・バッファＶＲＢに格納され得、頂点シェーダがそれらを再計算する必要がないように頂点シェーダまで通って渡されることができる。
【００３５】
上述したように、ＧＰＵ２００は、インデックス・データと同様に頂点データも渡すように構成することができる。このように、本開示の態様の実装は、コンピュート・シェーダを用いた間引きされたインデックス・テーブルの生成を伴うものに限定されない。コンピュート・シェーダ２０２を実装することができるはずの操作の例には、基本的な物理学シミュレーションと密接に関連する頂点変換が含まれる。かかる例の１つは、コンピュータ・ゲームまたはビデオ・ゲームに共通の操作である頂点のスキニングとして知られている。スキニング操作では、頂点シェーダに渡される頂点の位置は、「ボーン」と呼ばれる基本的な構造に何らかの方法で結び付けられる。このボーンは、拘束（例えば、ジョイント）された骨格の構成があると見なされ得る。ボーンの動きはＣＰＵ上で動作する物理学シミュレーションによって決定することができる。頂点は、対応する変換マトリックスによって１つまたは複数のボーンに「スキニングされた」と言われる。一般に、ボーン当り１つのローカル変換マトリックスが存在し得る。各頂点は、各基準に対していくつかの異なる重量のボーンを参照することができる。頂点位置を計算するために、頂点は、各影響するボーンの変換マトリックスによって別々に変換され、その後この別々の結果が重量に基づいてブレンドされ（付け加えられ）て頂点の最終位置が決定され得る。
【００３６】
通常は、コンピュート・シェーダは、スキニング作業を行って頂点位置を決定し、その後、対応する多角形のインデックス・データを書き上げて、そのデータを頂点シェーダに渡さなければならなかった。その後、頂点シェーダはすべてのスキニング作業を再度行っていた。しかし、本開示の態様によれば、リング・バッファ２１０を用いてコンピュート・シェーダ２０２からのスキニングされた頂点データを頂点シェーダに頂点計算を再度行わせる必要なく頂点シェーダ２０４に渡すことができる。コンピュート・シェーダ２０２は、ただ、頂点リング・バッファＶＲＢを介してスキニングされた頂点データを頂点シェーダに渡すはずである。
【００３７】
本開示の態様は、上で論じた構成を実装するように構成されたグラフィックス処理システムを含む。例としてであって、限定するものではないが、図３は本開示の態様によるグラフィックス処理を実行するために用いることができるコンピュータ・システム３００のブロック・ダイヤグラムを示す。本開示の態様によれば、システム４００は、埋め込みシステム、携帯電話、パーソナル・コンピュータ、タブレット型コンピュータ、ポータブル・ゲーム・デバイス、ワークステーション、ゲーム機などでよい。
【００３８】
システム３００は一般に、中央演算処理装置（ＣＰＵ）３０２、グラフィックス処理装置（ＧＰＵ）３０４、及びＣＰＵとＧＰＵの両方にアクセス可能なメモリ３０８を含むことができる。ＣＰＵ３０２及びＧＰＵ３０４は、それぞれ、１つまたは複数のプロセッサ・コア（例えば、単一のコア、２つのコア、４つのコア、８つのコア、またはそれ以上）を含むことができる。メモリ３０８は、アドレス可能なメモリ（例えば、ＲＡＭ、ＤＲＡＭなど）を提供する集積回路の形態でよい。
【００３９】
例としてであって、限定するものではないが、ＣＰＵ３０２及びＧＰＵ３０４は、データ・バス３０９を用いてメモリ３０８にアクセスすることができる。ある場合には、システム３００が２つ以上の異なるバスを含むことが有益になり得る。メモリ３０８は、ＣＰＵ３０２及びＧＰＵ３０４がアクセスすることができるデータを含むことができる。ＧＰＵ３０４は、並列にグラフィックス処理タスクを行なうように構成された複数のコンピュート・ユニットを含むことができる。各コンピュート・ユニットは、ローカルデータ・シェアなどのそれ自身の専用ローカル・メモリ・ストアを含むこができる。
【００４０】
ＣＰＵは、グラフィックスを利用するアプリケーション、コンパイラ及びグラフィックスＡＰＩを含むことができるＣＰＵコード３０３Ｃを実行するように構成することができる。グラフィックスＡＰＩは、ＧＰＵによって実行されたプログラムに描画コマンドを出すように構成することができる。ＣＰＵコード３０３Ｃはまた、物理学シミュレーション及び他の機能も実装することができる。ＧＰＵは、図２に関して上記で論じたように動作するように構成することができる。特に、ＧＰＵは、上記で論じたようなコンピュート・シェーダＣＳ及び頂点シェーダＶＳを実装することができるＧＰＵコード３０３Ｇを実行することができる。コンピュート・シェーダＣＳと頂点シェーダＶＳ間のデータ引渡しを促進するために、システムは、インデックス・リング・バッファＩＲＢ及び頂点リング・バッファＶＲＢを含むことができる１つまたは複数のリング・バッファ３０５を含むことができる。ＧＰＵコード３０３Ｇはまた、ピクセル・シェーダまたは幾何シェーダなどの他のタイプのシェーダ（図示せず）を任意選択で実装することもできる。各コンピュート・ユニットは、ローカルデータ・シェアなどのそれ自身の専用ローカル・メモリ・ストアを含むこができる。
【００４１】
システム３００はまた、例えば、バス３０９を介してシステムの他のコンポーネントと通信することができる周知のサポート機能３１０を含むこともできる。かかるサポート機能は、限定はされないが、入出力（Ｉ／Ｏ）素子３１１、電源（Ｐ／Ｓ）３１２、クロック（ＣＬＫ）３１３、及びキャッシュ３１４を含むことができる。ＧＰＵ３０４は、キャッシュ３１４に加えて自身のＧＰＵキャッシュ３１４Ｇを含むことができ、ＧＰＵ３０４上で動作するプログラムがＧＰＵキャッシュ３１４Ｇを通して読み出すかまたは書き込むことができるように構成することができる。特に、システムは、ＧＰＵ上で動作するコンピュート・シェーダがＧＰＵキャッシュを通してメモリまたはバッファに書き込むことができ、頂点シェーダがＧＰＵキャッシュ３１４Ｇを通してメモリまたはバッファから読み出すことができるように構成することができる。
【００４２】
システム３００は、任意選択で、プログラム及び／またはデータを格納するためにディスク・ドライブ、ＣＤ−ＲＯＭドライブ、フラッシュ・メモリー、テープ・ドライブなどの大容量記憶装置３１５を含むことができる。システム３００はまた、任意選択で、システム３００とユーザとの間の相互作用を促進するために表示装置３０６およびユーザ・インターフェース・ユニット３１８を含むことができる。表示装置３０６は、フラット・パネル・ディスプレー、ブラウン管（ＣＲＴ）スクリーン、または文章、数字、グラフィカル・シンボルあるいは画像を表示することができる他のデバイスの形態であり得る。ユーザ・インターフェース３１８は、グラフィカル・ユーザー・インターフェース（ＧＵＩ）と併用して使用することができるキーボード、マウス、ジョイスティック、ライトペン、ゲーム・コントローラまたは他のデバイスを含むことができる。システム３００はまた、デバイスがネットワーク３２２全体にわたって他のデバイスと通信可能にするネットワーク・インターフェイス３２０も含むこともできる。ネットワーク３２２は、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）、インターネットなどの広域ネットワーク、ブルートゥース（登録商標）・ネットワークなどのパーソナル・エリア・ネットワークまたは他のタイプのネットワークでよい。これらのコンポーネントは、ハードウェア、ソフトウェア、またはファームウェア、あるいはこれらの２つ以上のいくつかの組み合わせで実装することができる。
【００４３】
上記は、本発明の好ましい実施形態の完全な説明であるが、様々な代替形態、修正形態及び等価形態を使用可能である。したがって、本発明の範囲は上記の説明に関して決められるべきではなく、等価形態の全範囲と併せて添付の請求項に関して決められるべきである。本明細書で説明した任意の構成は好ましいか否かにかかわらず、本明細書で説明した任意の他の構成と好ましいか否かにかかわらず組み合わせることができる。請求項において、不定冠詞「Ａ」または「Ａｎ」は、他に明示的に述べられている場合を除き、冠詞に続く１つまたは複数の項目の数を指す。添付の請求項は、与えられた請求項にフレーズ「ための方法」を用いてミーンズ・プラス・ファンクションの限定が明記されていなければ、かかる限定を含むものと解釈すべきではない。
【図１Ａ】
0006309620.tif 000002
【図１Ｂ】
0006309620.tif 000003
【図２】
0006309620.tif 000004
【図３】
0006309620.tif 000005