(57)【要約】【課題】  待ち時間の長いストレージリソースから高解像度ミップマップが取り出される間に使用される低解像度テクスチャマップデータの見栄えを良くする。【解決手段】  待ち時間の長いストレージリソースから高解像度の非常駐ミップマップを取り出し常駐ミップマップに変換する間、物理メモリ内の低解像度ミップマップを外挿し外挿テクスチャ値の生成に使用されるマルチスレッドグラフィックスプロセッサを構成する。外挿テクスチャ値は、一時的に使用不可能な高解像度ミップマップレベルのテクスチャデータに代えて低解像度ミップマップレベルのものを使用した場合に比べてより鮮明な改善された画像を提供する。外挿拡大又は縮小テクスチャフィルタリングの使用時を決定するため、外挿しきい値ＬＯＤを用いる。そのＬＯＤの使用により、上述した変換時に外挿フィルタリングから内挿フィルタリングの使用へ円滑に移行することが可能である。【選択図】  図２Ａ
2008305408.tif 000002
【特許請求の範囲】
【請求項１】
テクスチャマップの非常駐ミップマップレベルを前記テクスチャマップの常駐ミップマップレベルに変換する方法であって、
画像を表示向けにレンダリングすることに用いるために前記非常駐ミップマップレベルを常駐ミップマップレベルに変換する要求を受け取るステップと、
前記非常駐ミップマップレベルを非常駐メモリストレージから常駐メモリストレージにコピーすることを開始するステップと、
前記非常駐ミップマップレベルを前記コピーすることが完了した時点で、前記画像の、フィルタリングされたテクセル値の生成に使用される外挿しきい値詳細レベル（ＬＯＤ）値を更新するステップとを含む方法。
【請求項２】
ｄｅｌｔａＬＯＤ重みペアによって外挿フィルタを表す重みテーブルをロードするステップをさらに含み、前記重みテーブル内の各エントリが、外挿重み及び対応するｄｅｌｔａＬＯＤ値を含む、請求項１に記載の方法。
【請求項３】
前記重みテーブルが、外挿縮小テクスチャフィルタ用の外挿フィルタを表し、
外挿拡大テクスチャフィルタ用の外挿フィルタを表す追加重みテーブルをロードするステップをさらに含む、請求項２に記載の方法。
【請求項４】
前記テクスチャマップの理想ミップマップに対応する理想ＬＯＤを計算するステップと、
前記理想ＬＯＤと前記外挿しきい値ＬＯＤとの差であるｄｅｌｔａＬＯＤを計算するステップと、
前記ｄｅｌｔａＬＯＤに基づいて外挿重みを決定するステップとをさらに含む、請求項１に記載の方法。
【請求項５】
前記外挿重みと、前記外挿しきい値ＬＯＤの整数部分に等しい詳細レベルを有するミップマップからのテクセル値と、低解像度の常駐ミップマップレベルからのテクセル値と、を用いて、前記画像の、フィルタリングされたテクセル値を計算するステップをさらに含む、請求項４に記載の方法。
【請求項６】
前記更新するステップが、外挿フィルタリングの使用から内挿フィルタリングの使用へ円滑に移行して前記フィルタリングされたテクセル値を生成するために、前記非常駐ミップマップレベルのＬＯＤ以上である最終値に達するまで、前記外挿しきい値ＬＯＤを連続的にデクリメントするステップを含む、請求項１に記載の方法。
【請求項７】
テクスチャマップの非常駐ミップマップレベルを前記テクスチャマップの常駐ミップマップレベルに変換するようにコンピュータシステムを制御する命令を収容するコンピュータ可読媒体であって、
画像を表示向けにレンダリングすることに用いるために前記非常駐ミップマップレベルを常駐ミップマップレベルに変換する要求を受け取るステップと、
前記非常駐ミップマップレベルを非常駐メモリストレージから常駐メモリストレージにコピーすることを開始するステップと、
前記非常駐ミップマップレベルを前記コピーすることが完了した時点で、前記画像の、フィルタリングされたテクセル値の生成に使用される外挿しきい値詳細レベル（ＬＯＤ）値を更新するステップとを含むコンピュータ可読媒体。
【請求項８】
ｄｅｌｔａＬＯＤ重みペアによって外挿フィルタを表す重みテーブルをロードするステップをさらに含み、前記重みテーブル内の各エントリが、外挿重み及び対応するｄｅｌｔａＬＯＤ値を含む、請求項７に記載のコンピュータ可読媒体。
【請求項９】
前記重みテーブルが、外挿縮小テクスチャフィルタ用の外挿フィルタを表し、
外挿拡大テクスチャフィルタ用の外挿フィルタを表す追加重みテーブルをロードするステップをさらに含む、請求項８に記載のコンピュータ可読媒体。
【請求項１０】
前記テクスチャマップの理想ミップマップに対応する理想ＬＯＤを計算するステップと、
前記理想ＬＯＤと前記外挿しきい値ＬＯＤとの差であるｄｅｌｔａＬＯＤを計算するステップと、
前記ｄｅｌｔａＬＯＤに基づいて外挿重みを決定するステップと、
前記外挿重みと、前記外挿しきい値ＬＯＤの整数部分に等しい詳細レベルを有するミップマップからのテクセル値と、低解像度の常駐ミップマップレベルからのテクセル値とを用いて、前記画像の、フィルタリングされたテクセル値を計算するステップとをさらに含む、請求項７に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【発明の分野】
【０００１】
[0001]本発明は、一般に、テクスチャマッピングに関し、より具体的には、使用可能でないミップマップの代わりに外挿を用いてテクスチャマップ値を計算することに関する。
【関連技術の説明】
【０００２】
[0002]仮想メモリの使用がますます一般的になってきたため、グラフィック処理中にアクセス可能なテクスチャマップの数が、従来の方法でテクスチャマップが格納される物理メモリ（ローカルメモリ又はシステムメモリ）の量によって制限されることはなくなった。テクスチャデータは、ディスクドライブ、ＣＤドライブ、さらにはリモートサーバなど、アクセス待ち時間が物理メモリより長い、他のストレージリソースに格納されることが可能である。そのテクスチャデータは、処理中に、必要に応じて取り出される。しかしながら、テクスチャデータを物理メモリから取り出す場合と異なり、テクスチャデータが他のストレージリソースから取り出される時間の間は、画質が損なわれる。
【０００３】
[0003]テクスチャの高解像度ミップマップを他のストレージリソースに格納することは、それらのミップマップが大きいことから、特に有利である。高解像度ミップマップが他のストレージリソースから取り出される間に、テクスチャの低解像度ミップマップを物理メモリに格納して、画像生成に使用することが可能である。その結果、テクスチャマップデータは、ぼやけて表示された後、高解像度ミップマップが物理メモリ内で使用可能になった時点で、鮮明に表示される。
【０００４】
[0004]したがって、当該技術分野において必要とされるのは、待ち時間の長いストレージリソースから高解像度ミップマップが取り出される間に使用される低解像度テクスチャマップデータの見栄えを良くするシステム及び方法である。さらに、待ち時間の長いストレージリソースから高解像度ミップマップが取り出された後、外挿フィルタリングの使用から内挿フィルタリングの使用への移行が円滑に行われて、フィルタリングされたテクセル値が生成されることが望ましい。
【発明の概要】
【０００５】
[0005]待ち時間の長いストレージリソースから高解像度ミップマップを取り出して、その高解像度ミップマップを非常駐ミップマップから常駐ミップマップに変換する間に、物理メモリに格納されている低解像度ミップマップを外挿して外挿テクスチャ値を生成するように、マルチスレッドグラフィックスプロセッサを構成する。外挿テクスチャ値は、高解像度ミップマップレベルのテクスチャデータの代わりに低解像度ミップマップレベルのテクスチャデータを使用した場合に比べて、より鮮明に見える、改善された画像を提供する。非常駐詳細レベルミップマップが常駐であったとすればフィルタリングにより生成されるであろう、高められたコントラスト及び詳細を近似するために、２つの常駐詳細レベルミップマップを外挿するミップマップフィルタを用いて、フィルタリングされたテクスチャ値を生成する。
【０００６】
[0006]外挿拡大又は縮小テクスチャフィルタリングをいつ使用するかを決定するために、外挿しきい値ＬＯＤを用いる。外挿しきい値ＬＯＤを用いることにより、非常駐ミップマップを常駐ミップマップに変換する際に、外挿フィルタリングの使用から内挿フィルタリングの使用へ円滑に移行することが可能である。理想ミップマップのＬＯＤと外挿しきい値ＬＯＤ（最高解像度の常駐ミップマップのＬＯＤ以上の値）との差であるｄｅｌｔａＬＯＤ（詳細レベル）を計算する。（アクセス待ち時間が短い）物理メモリには常駐ミップマップを格納し、対照的に、アクセス待ち時間が長いストレージリソースには非常駐ミップマップを格納する。ｄｅｌｔａＬＯＤは、高解像度ミップマップテクスチャデータの代わりに使用される外挿テクスチャ値を生成するために用いられる外挿重み値を決定するために用いられる。
【０００７】
[0007]非常駐ミップマップレベルのテクスチャマップを常駐ミップマップレベルのテクスチャマップに変換する、本発明の方法の各種実施形態は、画像を表示向けにレンダリングすることに用いるために非常駐ミップマップレベルを常駐ミップマップレベルに変換する要求を受け取るステップと、非常駐ミップマップレベルを非常駐メモリストレージから常駐メモリストレージにコピーすることを開始するステップと、非常駐ミップマップレベルをコピーすることが完了した時点で、画像の、フィルタリングされたテクセル値の生成に使用される外挿しきい値詳細レベル（ＬＯＤ）値を更新するステップとを含む。
【０００８】
[0008]本発明の上述の特徴の詳細な理解を可能にするために、上記で簡単にまとめた本発明の、より具体的な説明を、複数の実施形態を参照して行う。それらのいくつかは、添付図面に図示されている。しかしながら、添付図面は、本発明の典型的な実施形態のみを例示したものであり、したがって、本発明の範囲を限定するものと見なされてはならないことに留意されたい。これは、本発明が、他の同等に効果的な実施形態も含みうるからである。
【詳細な説明】
【０００９】
[0019]以下の説明では、本発明がより十分に理解されるように、多数の具体的詳細を示す。しかしながら、それらの具体的詳細が１つ以上なくても本発明が実施可能であることは、当業者にとっては、自明であろう。他の事例では、本発明が不明瞭になるのを防ぐために、よく知られた特徴については説明しない。
【００１０】
[0020]図１は、本発明の１つ又は複数の態様による、ＬＯＤを変化させる、テクスチャ画像のミップマップの概念図を示す。各ミップマップは、テクスチャ画像に対して、特定の解像度又は詳細レベル（ＬＯＤ）に対応する事前フィルタリングが施されたものであり、ＬＯＤ０ミップマップ１１０は、最高解像度を有し、ＬＯＤＮミップマップ１９０は、最低解像度を有する（すなわち、ＬＯＤの添え字が大きくなるにつれて、対応するミップレベルの解像度が低くなっていく）。仮想メモリマッピングを用いて、物理メモリで使用可能なアドレス空間より大きなアドレス空間を表した場合は、アドレス指定可能なテクスチャデータのすべてが物理メモリに常駐しているわけではない。図１に示されるように、ＬＯＤ０ミップマップ１１０、ＬＯＤ１ミップマップ１２０、及びＬＯＤ２ミップマップ１３０は、物理メモリには格納されず、したがって、非常駐ミップマップ１００である。ＬＯＤ３ミップマップ１５０、ＬＯＤ４ミップマップ１６０、及びＬＯＤＮミップマップ１９０を含む常駐ミップマップ１４０は、物理メモリに格納され、したがって、これらのミップマップに格納されたテクスチャデータは、短い待ち時間でアクセスされることが可能である。
【００１１】
[0021]ソフトウェアアプリケーションが、要求されるすべてのミップマップがメモリに常駐している詳細レベルのテクスチャフィルタリングを要求すると、テクスチャ装置は、要求されたミップマップからテクセルをフェッチし、その常駐ミップマップレベルからフェッチされたテクセルとテクセルとの間で内挿された値を生成するフィルタを適用する（これは、当該技術分野の最新段階において一般的である）。ソフトウェアアプリケーションが、物理メモリからページアウトされたミップマップレベル（すなわち、非常駐ミップマップ）にアクセスしようとすると、本発明の実施形態は、それに最も近い２つの常駐ミップマップからテクセルをフェッチし、その常駐ミップマップレベルからフェッチされたテクセルからの外挿値を生成するフィルタを適用する。外挿テクスチャ値は、非常駐ミップマップが物理メモリにページインされて常駐ミップマップになるまで、画像を生成するために計算及び使用される。
【００１２】
[0022]例えば、テクスチャマッピングのために計算されたＬＯＤがＬＯＤ２であって、ＬＯＤ２ミップマップ１３０が非常駐である場合は、図２Ａと併せて説明されるように、常駐ミップマップであるＬＯＤ３ミップマップ１５０及びＬＯＤ４ミップマップ１６０を用いて、外挿テクスチャ値が計算される。非常駐ＬＯＤ（ＬＯＤ２など）に対する外挿テクスチャ値は、外挿縮小フィルタを用いて計算される。縮小フィルタは、ピクセルに対するテクセルの比率が１未満の場合に使用される。ＬＯＤ２が常駐ＬＯＤミップマップに変換された後、外挿フィルタから従来の内挿フィルタへ１フレーム以内に切り替えるのではなく、フィルタ重みを調節することにより、複数のフレームにわたってＬＯＤ２テクセルを段階的に導入して、円滑な視覚的移行が行われるようにすることが可能である。計算されたＬＯＤがＬＯＤ０未満の場合（すなわち、ＬＯＤ０より解像度が高い場合）、外挿テクスチャ値は、外挿拡大フィルタを用いて計算される。拡大フィルタは、ピクセルに対するテクセルの比率が１を超える場合に使用される。
【００１３】
[0023]従来のシステムでは、計算されたＬＯＤがゼロ未満の場合（すなわち、所望のテクスチャ解像度がＬＯＤ０より高い場合）は、テクスチャルックアップの鮮明度を上げるために「アンシャープマスキング」又は「シャーペンテクスチャ」として当業者に知られている手法が用いられ、これは、ＬＯＤ０とＬＯＤ１との間を外挿して、ＬＯＤ０から低周波成分の寄与を引き去ることによってなされる。本発明はさらに、ゼロ未満である計算されたＬＯＤに対するテクセル値を生成するために外挿（拡大外挿）を用いるが、新しい外挿フィルタのタイプ、例えば、外挿ミップマップリニア（extrapolated mipmapped linear）及び外挿ミップマップ最近傍フィルタ(extrapolated mipmapped nearest-neighbor)）を用いる。さらに、ＬＯＤ０未満のＬＯＤ値に対してだけでなく、任意の非常駐テクスチャに対してテクスチャ値を計算するために、縮小外挿が行われる。
【００１４】
[0024]図２Ａは、本発明の１つ又は複数の態様による、非常駐ミップマップレベル（非常駐ミップマップ１００など）に対して外挿テクスチャ値を生成する方法ステップのフロー図である。ステップ２００で、本方法は、当業者に知られている手法を用いて、理想ＬＯＤを計算する。理想ＬＯＤの整数部分は、適用されるテクスチャの解像度に最も良く適合するミップマップレベルに対応する。ステップ２１０で、本方法は、理想ＬＯＤミップマップが非常駐ミップマップかどうかを決定し、非常駐でない場合、理想ＬＯＤミップマップは常駐であり、ステップ２２５で、微粒ミップマップ及び粗粒ミップマップからテクセルを読み出す。ステップ２１０の詳細については、図２Ｂと併せて説明する。
【００１５】
[0025]従来、微粒ミップマップは、理想ＬＯＤミップマップの整数部分に対応し、粗粒ミップマップは、その整数部分＋１のＬＯＤミップマップに対応する。フィルタタイプが外挿ミップマップリニアの場合、本方法は、ステップ２２８で、微粒ミップマップ及び粗粒ミップマップについてバイリニアにフィルタリングされたテクセル値を計算し、次に、理想ＬＯＤの小数部分を用いて、バイリニアにフィルタリングされたテクセル値の間を内挿して、フィルタリングされたテクセル値を生成する。フィルタタイプが外挿ミップマップ最近傍の場合は、最も近いテクセル値を微粒ミップマップ及び粗粒ミップマップから選択して、２点サンプリングされたテクセル値を生成する。次に、理想ＬＯＤの小数部分を用いて、２点サンプリングされたテクセル値をバイリニアに内挿して、フィルタリングされたテクセル値を生成する。ステップ２２５及び２２８は、従来のテクスチャマップフィルタリング手法を用いて実施される。
【００１６】
[0026]本方法が、ステップ２１０で、理想ＬＯＤミップマップが非常駐ミップマップであると決定した場合、本方法は、ステップ２３０で、テクスチャのための１つ又は複数のミップマップを物理メモリにページインしなければならないこと、並びに、画像生成に用いるために、それらのミップマップを非常駐ミップマップから常駐ミップマップに変換しなければならないことを、デバイスドライバに知らせる。ステップ２１０で、本方法は、理想ＬＯＤがゼロ未満であってＬＯＤ０ミップマップが常駐でない場合（これは、ピクセルに対するテクセルの比率が１を超えていて、外挿拡大フィルタの使用が必要であることを示す）に、理想ＬＯＤミップマップが非常駐であると決定することが可能である。理想ＬＯＤがゼロを超えていて、理想ＬＯＤから最高常駐ミップマップを差し引いたものがゼロ未満である場合（これは、ピクセルに対するテクセルの比率が１未満であることを示す）には、外挿縮小フィルタを使用しなければならない。理想ＬＯＤがＬＯＤ０に等しい場合は、外挿拡大フィルタを用いることが可能である。
【００１７】
[0027]ステップ２３５で、本方法は、理想ＬＯＤと外挿しきい値ＬＯＤ（最高解像度の常駐ミップマップのＬＯＤ以上の値）との差であるｄｅｌｔａＬＯＤを計算する（すなわち、ｄｅｌｔａＬＯＤ＝理想ＬＯＤ−外挿しきい値ＬＯＤ）。例えば、図１を参照すると、理想ＬＯＤが（ＬＯＤ１ミップマップ１２０に対応する）ＬＯＤ１の場合、ｄｅｌｔａＬＯＤは−２である。これは、外挿しきい値ＬＯＤが、（ＬＯＤ３ミップマップ１５０に対応する）ＬＯＤ３であるためである。なお、理想ＬＯＤ及び外挿しきい値ＬＯＤが小数成分を有する可能性があるため、ｄｅｌｔａＬＯＤも小数成分を有する可能性がある。
【００１８】
[0028]ステップ２４０で、本方法は、ｄｅｌｔａＬＯＤを用いて外挿重みを決定する。ｄｅｌｔａＬＯＤ値に対応する外挿重み値がテーブルに格納される。本発明のいくつかの実施形態では、このテーブルは、外挿重み値の決定に用いる関数を指定するようにプログラムされることが可能である。本発明のいくつかの実施形態は、最大６４個の（ＬＯＤ，重み）ペアが、ＬＯＤが減っていく順にテーブルにロードされることを可能にする。デフォルトでは、このテーブルは、６ペア｛（０，０），（−１，０．２５），（−２，０．５），（−４，１．１２５），（−８，２．０），（−１６，３．０）｝を収容する。
【００１９】
[0029]テーブル（０）の最後のエントリである−１６に満たないｄｅｌｔａＬＯＤが与えられた場合、外挿重みは、テーブルの最後のエントリの重み（３．０）、すなわち、３になる。ｄｅｌｔａＬＯＤがゼロには満たないものの、アプリケーションによって指定されたテーブルの第１のエントリを超えている場合は、そのテーブルの第１のエントリの重みが外挿重みになる。テーブル内の２つのＬＯＤ値、すなわち、低い値（ＬＯＤ＝−４，重み＝１．１２５）と高い値（ＬＯＤ＝−８，重み＝２．０）との間に入るｄｅｌｔａＬＯＤ値−５が与えられた場合、外挿重みは、次のようにリニア内挿される。
ｗｅｉｇｈｔｌｏｗ＊（ＬＯＤｈｉｇｈ−ｄｅｌｔａＬＯＤ）／（ＬＯＤｈｉｇｈ−ＬＯＤｌｏｗ）＋
ｗｅｉｇｈｔｈｉｇｈ＊（ｄｅｌｔａＬＯＤ−ＬＯＤｌｏｗ）／（ＬＯＤｈｉｇｈ−ＬＯＤｌｏｗ）  （式１）
この外挿重みをステップ２５０で用いて、粗粒ＬＯＤミップマップ及び微粒ＬＯＤミップマップから読み出されたテクセルから、フィルタリングされたテクセルを生成する。
【００２０】
[0030]指定されたフィルタタイプが外挿ミップマップリニアである場合、本方法は、ステップ２４５で、粗粒ＬＯＤミップマップから４個のテクセルを読み出し、微粒ＬＯＤミップマップから４個のテクセルを読み出す。指定されたフィルタタイプが外挿ミップマップ最近傍である場合に、本方法は、微粒ＬＯＤミップマップから１個のテクセルを読み出し、粗粒ＬＯＤミップマップから１個のテクセルを読み出す。微粒ＬＯＤミップマップは、その詳細レベルが、切り詰められた外挿しきい値ＬＯＤ（外挿しきい値ＬＯＤの整数部分）に等しいミップマップであり、粗粒ＬＯＤミップマップは、ＬＯＤが微粒ＬＯＤ＋１に等しい低解像度常駐ミップマップである。
【００２１】
[0031]フィルタタイプが外挿ミップマップリニアである場合、本方法は、ステップ２５０で、テクスチャマップ座標の小数部分を用いて、粗粒ＬＯＤミップマップ及び微粒ＬＯＤミップマップから読み出されたテクセルをバイリニアに内挿して、テクセル値Ｔｆｉｎｅ及びＴｃｏａｒｓｅを生成する。フィルタタイプが外挿ミップマップ最近傍である場合、本方法は、微粒ＬＯＤミップマップから読み出されたテクセルをＴｆｉｎｅとして及び粗粒ＬＯＤミップマップから読み出されたテクセルをＴｃｏａｒｓｅとして提供する。次に、ステップ２５０で、本方法は、Ｔｆｉｎｅ、Ｔｃｏａｒｓｅを用いて外挿テクセル値を計算し、次式を用いて外挿重みＷを計算する。
Ｔｆｉｎｅ＊（１．０＋Ｗ）−Ｔｃｏａｒｓｅ＊Ｗ  （式２）
外挿テクセル値を、追加の外挿テクセル値と組み合わせて、異方性テクスチャマッピング又は他のフィルタリングされたテクスチャ関数のためのフィルタリングされたテクセル値を生成することが可能である。次に、外挿テクセル値を用いて、保存及び／又は表示されるレンダリング画像を生成する。
【００２２】
[0032]図２Ｂは、本発明の１つ又は複数の態様による、理想ＬＯＤに対応するミップマップが常駐かどうかを決定する、図２Ａの方法ステップ２１０のフロー図である。本方法は、ステップ２１２で、理想ＬＯＤがゼロ未満（すなわち、ＬＯＤ０より低い）かどうかを決定し、ゼロ未満であれば、ステップ２１４で、ＬＯＤ０ミップマップが常駐ミップマップかどうかを決定する。ステップ２１４で、本方法が、ＬＯＤ０ミップマップが常駐であることを決定した場合は、ステップ２１６で拡大テクスチャフィルタ用に指定されたフィルタタイプが、ステップ２２８で用いられる。ステップ２１４で、本方法が、ＬＯＤ０ミップマップが常駐でないことを決定した場合は、ステップ２１７で、外挿拡大テクスチャフィルタ用に指定されたフィルタタイプがステップ２５０で用いられる。
【００２３】
[0033]ステップ２１２で本方法が、理想ＬＯＤがゼロ未満でないことを決定した場合、本方法は、ステップ２１８で、理想ＬＯＤが外挿しきい値ＬＯＤ以上かどうかを決定する。ステップ２１８で本方法が、理想ＬＯＤミップマップが外挿しきい値ＬＯＤ以上であると決定した場合は、ステップ２２０で、縮小テクスチャフィルタ用に指定されたフィルタタイプが使用されて、ステップ２２８で、内挿により、フィルタリングされたテクセル値が計算される。そうでない場合は、ステップ２２１で、外挿縮小テクスチャフィルタ用に指定されたフィルタタイプが使用されて、ステップ２５０で、外挿により、フィルタリングされたテクセル値が計算される。
【００２４】
[0034]図２Ｃは、本発明の１つ又は複数の態様による、常駐ミップマップからテクセル値を外挿しなければならないかどうかを決定する方法ステップのフロー図である。述語又は条件コードを用いて、グラフィックスデータの処理に用いられるシェーダプログラムを構成することにより、ピクセルシェーダプログラムにおける後続の分岐動作を決定することが可能である。命令によって指定されるシェーダプログラム述部又は条件コードが第１の値を有する場合に１つのパスが実行され、そのシェーダプログラム述部又は条件コードが別の値を有する場合に別のパスが実行される、条件付き実行パスを含めるために、述語付き命令又は条件付き命令を用いることが可能である。ステップ２００、２１０、及び２３０は、図２Ａと併せて説明されたように実行される。ステップ２６５で、本方法は、理想ＬＯＤに対応するミップマップが非常駐ミップマップであることを示すように、シェーダプログラム条件値（述語又は条件コード）を設定する。本発明の他の実施形態では、本方法はさらに、ｄｅｌｔａＬＯＤをシェーダプログラム条件値として計算し、保存する。ステップ２７０で、シェーダプログラム命令を実行し、内挿テクセル値又は外挿テクセル値を計算する。具体的には、デフォルトの条件値が用いられた場合に、シェーダプログラムは、従来の内挿を実施する第１の命令セットを実行して、内挿テクセル値を生成する。シェーダプログラム条件値が、理想ミップマップが非常駐ミップマップであることを示した場合は、別の命令セットを実行して、外挿テクセル値を生成する。
【００２５】
システムの概要
[0035]図３は、本発明の１つ又は複数の態様を実装するために構成されたコンピュータシステムを示すブロック図である。図３は、本発明の一実施形態によるコンピュータシステム３００のブロック図である。コンピュータシステム３００は、メモリブリッジ３０５を含むバスパスを介して通信する中央処理装置（ＣＰＵ）３０２及びシステムメモリ３０４を含む。本発明のいくつかの実施形態では、システムメモリ３０４に格納されるテクスチャデータ（常駐ミップマップ３２５など）が、確定的待ち時間を経て並列処理サブシステム３１２に供給されることが可能な点で、「常駐」と見なされる。本発明の他の実施形態では、システムメモリ３０４に格納されるテクスチャデータが、妥当な待ち時間を経て並列処理サブシステム３１２に供給されることが可能でない点で、「非常駐」と見なされる。インタラクティブなフレームレートをサポートするためには、待ち時間が妥当でなければならない。
【００２６】
[0036]システムメモリ３０４はさらに、データ（ミップマップなど）のロケーションを指定する命令ストリームとプログラム命令とを並列処理サブシステム３１２に供給するように構成されたデバイスドライバ３２２を含む。プログラム命令及びデータは、ソフトウェアアプリケーションによって生成され、システムメモリ３０４、又はシステム３００の他のデバイスの中のメモリに格納されることが可能である。デバイスドライバ３２２は、ＣＰＵ  ３０２によって実行され、並列処理サブシステム３１２によって実行される命令を、並列処理サブシステム３１２の固有の機能に基づいて変換する。それらの命令は、アプリケーションプログラミングインターフェース（ＡＰＩ）によって指定されることが可能であり、このＡＰＩは、Ｄｉｒｅｃｔ３ＤやＯｐｅｎＧＬのような従来のグラフィックスＡＰＩであってよい。
【００２７】
[0037]メモリブリッジ３０５は、例えば、Ｎｏｒｔｈｂｒｉｄｇｅチップであってよく、バス又は他の通信パス３０６（例えば、ＨｙｐｅｒＴｒａｎｓｐｏｒｔリンク）を介して、Ｉ／Ｏ（入出力）ブリッジ３０７に接続される。Ｉ／Ｏブリッジ３０７は、例えば、Ｓｏｕｔｈｂｒｉｄｇｅチップであってよく、１つ又は複数のユーザ入力デバイス３０８（例えば、キーボード、マウス）からユーザ入力を受け取り、その入力を、パス３０６及びメモリブリッジ３０５を介してＣＰＵ  ３０２に転送する。並列処理サブシステム３１２は、バス又は他の通信パス３１３（例えば、ＰＣＩ  Ｅｘｐｒｅｓｓ、Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ、又はＨｙｐｅｒＴｒａｎｓｐｏｒｔリンク）を介してメモリブリッジ３０５と結合され、一実施形態では、並列処理サブシステム３１２は、ピクセルをディスプレイデバイス３１０（例えば、従来のＣＲＴ又はＬＣＤ方式のモニタ）に配信するグラフィックスサブシステムである。Ｉ／Ｏブリッジ３０７には、システムディスク３１４も接続されている。一部のミップマップ（特に、より多くのストレージ空間を必要とする高解像度レベル）が、ディスク３１４、又はリモートサーバ上のディスク、ＣＤドライブ、ＤＶＤドライブなどの、待ち時間の長いストレージに格納される。これらのミップマップ（非常駐ミップマップ３３５など）は、必要に応じて、待ち時間の短いメモリストレージにロードされて、インタラクティブレンダリング中に並列処理サブシステム３１２によってアクセスされることが可能な常駐ミップマップになる。
【００２８】
[0038]スイッチ３１６が、Ｉ／Ｏブリッジ３０７と、他のコンポーネント（ネットワークアダプタ３１８や各種アドインカード３２０及び３２１など）との間の接続を与える。他のコンポーネント（明示的には図示されていないが、ＵＳＢ又は他のポート接続、ＣＤドライブ、ＤＶＤドライブ、フィルム記録デバイス、その他を含む）を、Ｉ／Ｏブリッジ３０７に接続することも可能である。図３の各種コンポーネントを相互接続する通信パスは、任意の好適なプロトコル（ＰＣＩ  （Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）、ＰＣＩ  Ｅｘｐｒｅｓｓ（ＰＣＩ−Ｅ）、ＡＧＰ（Ａｃｃｅｌｅｒａｔｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ）、ＨｙｐｅｒＴｒａｎｓｐｏｒｔ、又は他の任意のバス又はポイントツーポイント通信プロトコル）を用いて実装されることが可能であり、当該技術分野において知られているように、異なるデバイス同士の接続には、異なるプロトコルを用いることが可能である。
【００２９】
[0039]並列処理サブシステム３１２の一実施形態を図４に示す。並列処理サブシステム３１２は、１つ又は複数の並列処理装置（ＰＰＵ）４０２を含み、各ＰＰＵは、ローカル並列処理（ＰＰ）メモリ４０４と結合されている。一般に、並列処理サブシステムは、Ｕ個のＰＰＵを含む（Ｕ≧１）（ここでは、類似オブジェクトの複数のインスタンスを、オブジェクトを識別する参照符号と、必要に応じて、インスタンスを識別する括弧付き番号とで表す）。ＰＰＵ  ４０２及びＰＰメモリ４０４は、１つ又は複数の集積回路素子（プログラマブルプロセッサ、特定用途向け集積回路（ＡＳＩＣ）、メモリ素子など）を用いて実装されることが可能である。
【００３０】
[0040]ＰＰＵ  ４０２（０）について詳細に示されるように、各ＰＰＵ  ４０２は、通信パス３１３を介してシステム３００の他の部分と通信するホストインターフェース４０６を含み、通信パス３１３はメモリブリッジ３０５に接続される（又は一代替実施形態では、ＣＰＵ  ３０２に直接接続される）。一実施形態では、通信パス３１３は、ＰＣＩ−Ｅリンクであり、その場合は、当該技術分野において知られているように、各ＰＰＵ  ４０２に専用レーンが割り当てられる。他の通信パスを用いることも可能である。ホストインターフェース４０６は、通信パス３１３に送信するパケット（又は他の信号）を生成し、また、通信パス３１３からすべての着信パケット（又は他の信号）を受け取って、ＰＰＵ  ４０２の適切なコンポーネントに転送する。例えば、タスク処理に関連するコマンドは、フロントエンド装置４１２に転送されることが可能であり、メモリ操作（例えば、ＰＰメモリ４０４の読み書き）に関連するコマンドは、メモリインターフェース４１４に転送されることが可能である。ホストインターフェース４０６、フロントエンド装置４１２、及びメモリインターフェース４１４は、おおむね従来型の設計であってよいので、詳細な説明は、本発明にとって重要でないため、省略する。
【００３１】
[0041]各ＰＰＵ  ４０２は、有利なことに、高度に並列である処理装置を実装する。ＰＰＵ  ４０２（０）について詳細に示されるように、ＰＰＵ  ４０２は、Ｃ個のコア４０８を含む（Ｃ≧１）。各処理コア４０８は、多数（例えば、数十又は数百）のスレッドを同時に実行することが可能であり、この場合、各スレッドはプログラムのインスタンスである。マルチスレッド処理コア４０８の一実施形態を以下に示す。コア４０８は、実行すべき処理タスクを、作業配分装置４１０を介して受け取り、作業配分装置４１０は、処理タスクを定義するコマンドをフロントエンド装置４１２から受け取る。作業配分装置４１０は、作業を配分する様々なアルゴリズムを実装することが可能である。例えば、一実施形態では、作業配分装置４１０は、各コア４０８から、そのコアが、新しい処理タスクを受け入れるのに十分なリソースを有するかどうかを示す「実行可能」信号を受け取る。新しい処理タスクが到着すると、作業配分装置４１０は、そのタスクを、実行可能信号を表明しているコア４０８に割り当てる。実行可能信号をアサートしているコア４０８がない場合、作業配分装置４１０は、実行可能信号がコア４０８によって表明されるまで、その新しい処理タスクを保留する。当業者であれば、他のアルゴリズムも使用可能であること、並びに、作業配分装置４１０が着信処理タスクを配分する具体的な方法が本発明にとっては重要でないことを理解されよう。
【００３２】
[0042]コア４０８は、様々な外部メモリ素子の読み書きを行うために、メモリインターフェース４１４と通信する。一実施形態では、メモリインターフェース４１４は、ローカルＰＰメモリ４０４との通信、並びにホストインターフェース４０６との接続に適合されたインターフェースを含み、これによって、コアが、システムメモリ３０４又は他の、ＰＰＵ  ４０２に対してローカルでないメモリ（システムディスク３１４を含む）と通信することを可能にする。メモリインターフェース４１４は、おおむね従来型の設計であってよいので、詳細な説明は省略する。
【００３３】
[0043]コア４０８は、様々なアプリケーションに関連する処理タスクを実行するようにプログラムされることが可能であり、そのようなアプリケーションとして、リニア及び非リニアデータ変換、ビデオ及び／又はオーディオデータのフィルタリング、モデリング操作（例えば、物理法則を適用して、オブジェクトの位置、速度、及び他の属性を決定する）、画像レンダリング操作（例えば、頂点シェーダ、ジオメトリシェーダ、及び／又はピクセルシェーダなどのプログラム）などがあり、これらに限定されない。ＰＰＵ  ４０２は、常駐ミップマップ４２５のようなデータをシステムメモリ３０４及び／又はローカルＰＰメモリ４０４から内部（オンチップ）メモリに転送し、そのデータを処理し、結果データをシステムメモリ３０４及び／又はローカルＰＰメモリ４０４に書き戻すことが可能であり、書き戻されたデータは、他のシステムコンポーネント（例えば、ＣＰＵ  ３０２又は別の並列処理サブシステム３１２など）によってアクセスされることが可能である。
【００３４】
[0044]図３を再度参照すると、いくつかの実施形態では、並列処理サブシステム３１２内のいくつか又はすべてのＰＰＵ  ４０２が、メモリブリッジ３０５及びバス３１３を介してＣＰＵ  ３０２及び／又はシステムメモリ３０４から供給されたグラフィックスデータからピクセルデータを生成すること、（例えば、従来型のフレームバッファ及びミップマップを含むグラフィックスメモリとして使用可能な）ローカルＰＰメモリ４０４と対話して、ピクセルデータを保存及び更新すること、ピクセルデータをディスプレイデバイス３１０に配信することなどに関連する各種タスクを実行するように構成されることが可能な、レンダリングパイプラインを有するグラフィックスプロセッサである。いくつかの実施形態では、ＰＰサブシステム３１２は、グラフィックスプロセッサとして動作する１つ又は複数のＰＰＵ  ４０２と、汎用計算に用いられる１つ又は複数の他のＰＰＵ  ４０２とを含むことが可能である。これらのＰＰＵは、同一であっても異なっていてもよく、各ＰＰＵは、それぞれの専用のＰＰメモリデバイスを持っていてもよく、専用ＰＰメモリデバイスを持っていなくてもよい。
【００３５】
[0045]稼働中は、ＣＰＵ  ３０２がシステム３００のマスタプロセッサであり、他のシステムコンポーネントの動作を制御及び調整する。具体的には、ＣＰＵ  ３０２が、ＰＰＵ  ４０２の動作を制御するコマンドを発行する。いくつかの実施形態では、ＣＰＵ  ３０２が、各ＰＰＵ  ４０２に対するコマンドのストリームを（図３には明示的に図示されていない）プッシュバッファに書き込む。プッシュバッファは、システムメモリ３０４、ＰＰメモリ４０４、又は別の、ＣＰＵ  ３０２及びＰＰＵ  ４０２の両方からのアクセスが可能なストレージロケーションに配置されることが可能である。ＰＰＵ  ４０２は、ＣＰＵ  ３０２の動作とは非同期に、プッシュバッファからコマンドストリームを読み出し、コマンドを実行する。
【００３６】
[0046]ここで示されたシステムは例示的であること、並びに変形形態及び修正形態が可能であることを理解されたい。ブリッジの数及び配列を含む接続トポロジは、必要に応じて修正されることが可能である。例えば、いくつかの実施形態では、システムメモリ３０４は、ブリッジを介してではなく、直接ＣＰＵ３０２に接続され、他のデバイスは、メモリブリッジ３０５及びＣＰＵ  ３０２を介してシステムメモリ３０４と通信する。他の代替トポロジでは、並列処理サブシステム３１２が、メモリブリッジ３０５ではなく、Ｉ／Ｏブリッジ３０７に接続されるか、直接ＣＰＵ  ３０２に接続される。さらに別の実施形態では、Ｉ／Ｏブリッジ３０７とメモリブリッジ３０５とを、シングルチップに一体化することが可能である。ここで示された具体的なコンポーネントはオプションであって、例えば、任意の数のアドインカード又はペリフェラルデバイスをサポートすることが可能である。いくつかの実施形態では、スイッチ３１６がなく、ネットワークアダプタ３１８及びアドインカード３２０、３２１がＩ／Ｏブリッジ３０７に直接接続される。
【００３７】
[0047]ＰＰＵ  ４０２とシステム３００の他の部分との接続も変更可能である。いくつかの実施形態では、ＰＰシステム３１２は、システム３００の拡張スロットに挿入可能なアドインカードとして実装される。他の実施形態では、ＰＰＵ  ４０２は、シングルチップ上で、バスブリッジ（メモリブリッジ３０５やＩ／Ｏブリッジ３０７など）と一体化されることが可能である。さらに別の実施形態では、ＰＰＵ  ４０２のいくつか又はすべての要素が、シングルチップ上でＣＰＵ  ３０２と一体化されることが可能である。
【００３８】
[0048]ＰＰＵは、ローカルメモリがまったくない場合も含めて、任意の量のローカルＰＰメモリを与えられることが可能であり、ローカルメモリとシステムメモリとを任意の組み合わせで使用することが可能である。例えば、ＰＰＵ  ４０２は、ユニファイドメモリアーキテクチャ（ＵＭＡ）実施形態におけるグラフィックスプロセッサであることが可能であり、そのような実施形態では、専用グラフィックス（ＰＰ）メモリがほとんど又はまったく与えられず、ＰＰＵ  ４０２は、常駐ミップマップ３２５を格納するために、システムメモリを排他的若しくはほぼ排他的に使用する。ＵＭＡ実施形態では、ＰＰＵは、ブリッジチップ又はプロセッサチップと一体化されるか、ＰＰＵとシステムメモリとを、例えば、ブリッジチップを介して接続する高速リンク（例えば、ＰＣＩ−Ｅ）を有するディスクリートチップとして与えられることが可能である。
【００３９】
[0049]前述のように、並列処理サブシステムには、任意の数のＰＰＵを含めることが可能である。例えば、単一アドインカード上に複数のＰＰＵを設けたり、複数のアドインカードを通信パス３１３に接続したり、ＰＰＵのうちの１つ又は複数をブリッジチップに一体化したりすることが可能である。マルチＰＰＵシステム内のＰＰＵは、同一であっても、互いに異なっていてもよい。例えば、異なるＰＰＵは、コアの数、ローカルＰＰメモリの量、その他が異なっていてよい。複数のＰＰＵが存在する場合、それらは、並列稼動することにより、単一ＰＰＵの場合に可能なスループットより高いスループットでデータを処理することが可能である。
【００４０】
[0050]１つ又は複数のＰＰＵを組み込んだシステムは、デスクトップ、ラップトップ、ハンドヘルドなどのパーソナルコンピュータ、サーバ、ワークステーション、ゲームコンソール、埋め込みシステムなどを始めとする、様々な構成及びフォームファクタで実装されることが可能である。
【００４１】
コアの概要
[0051]図５は、本発明の１つ又は複数の態様による、図４の並列処理サブシステム３１２の並列処理装置４２０のブロック図である。ＰＰＵ  ４０２は、多数のスレッドを並列に実行するように構成された、１つ又は複数のコア４０８を含む。ここで、「スレッド」という用語は、特定の入力データセットに対して実行される、特定プログラムのインスタンスを意味する。いくつかの実施形態では、複数の独立した命令装置を設けずに多数のスレッドの並列実行をサポートするために、単一命令複数データ（ＳＩＭＤ）命令発行手法を用いる。
【００４２】
[0052]一実施形態では、各コア４０８は、単一の命令装置５１２からＳＩＭＤ命令を受け取るように構成された、Ｐ個（例えば、８個、１６個など）の並列処理エンジン５０２のアレイを含む。各処理エンジン５０２は、有利なことに、機能装置(functional unit)（例えば、算術論理装置など）の同一セットを含む。機能装置は、パイプライン化されることが可能であり、これによって、当該技術分野において知られているように、前の命令が完了する前に新しい命令を発行することが可能になる。機能装置は、任意の組み合わせで与えられることが可能である。一実施形態では、機能装置は様々な演算をサポートし、例えば、整数及び浮動小数点の演算（例えば、加算及び乗算）、比較演算、ブール演算（ＡＮＤ、ＯＲ、ＸＯＲ）、ビットシフト、各種代数関数（例えば、面補間、三角関数、指数関数、対数関数など）の計算などをサポートする。同じ機能装置ハードウェアを活用して異なる演算を実行することが可能である。
【００４３】
[0053]各処理エンジン５０２は、そのローカル入力データ、中間結果、その他を、ローカルレジスタファイル（ＬＲＦ）５０４内のスペースに格納する。一実施形態では、ローカルレジスタファイル５０４は、物理的又は論理的にＰ個のレーンに分割され、各レーンはいくつかのエントリを有する（各エントリは、例えば、３２ビットワードを格納することが可能である）。各処理エンジン５０２に１つのレーンが割り当てられ、異なるレーンの対応するエントリを、同じプログラムを実行する異なるスレッドのデータで埋めることによって、ＳＩＭＤ実行を推進することが可能である。いくつかの実施形態では、各処理エンジン５０２は、各自に割り当てられたレーンにあるＬＲＦエントリにしかアクセスできない。ローカルレジスタファイル５０４内のエントリの総数は、有利なことに、処理エンジン５０２の１つにつき複数の同時スレッドをサポートするのに十分な大きさである。
【００４４】
[0054]各処理エンジン５０２はさらに、コア４０８内のすべての処理エンジン５０２の間で共有されるオンチップ共有メモリ５０６にアクセスできる。共有メモリ５０６は、所望の大きさであってよく、いくつかの実施形態では、任意の処理エンジン５０２が共有メモリ５０６の、待ち時間が均等に短い（例えば、ローカルレジスタファイル５０４へのアクセスと同等である）任意のロケーションで読み書きを行うことが可能である。いくつかの実施形態では、共有メモリ５０６は、共有レジスタファイルとして実装され、他の実施形態では、共有メモリ５０６は、共有キャッシュメモリを用いて実装されることが可能である。
【００４５】
[0055]共有メモリ５０６に加えて、いくつかの実施形態はさらに、追加オンチップパラメータメモリ及び／又はキャッシュ５０８を与えることが可能であり、これは、例えば、従来型のＲＡＭ又はキャッシュとして実装可能である。パラメータメモリ／キャッシュ５０８は、例えば、複数のスレッドで必要になる可能性がある状態パラメータ及び／又は他のデータ（例えば、各種の定数）を保持するために用いられることが可能である。処理エンジン５０２はさらに、メモリインターフェース４１４を介してオフチップ「グローバル」メモリ５２０にアクセスすることが可能であり、グローバルメモリ５２０としては、例えば、ＰＰメモリ４０４及び／又はシステムメモリ３０４が可能であり、システムメモリ３０４は、前述のように、ホストインターフェース４０６を介してメモリインターフェース４１４からアクセス可能である。
【００４６】
[0056]ＰＰＵ  ４０２の外部にある任意のメモリをグローバルメモリ５２０として用いることが可能であることを理解されたい。図５に示されるように、グローバルメモリ５２０は、ＰＰメモリ４０４、システムメモリ３０４、及びシステムディスク３１４を含む。前述のように、常駐ミップマップ３２５及び４２５のような、グローバルメモリ５２０に格納されたテクスチャデータは、常駐テクスチャデータと見なされ、非常駐ミップマップ３３５のような、グローバルメモリ５２０に格納された他のテクスチャデータは、非常駐テクスチャデータと見なされる。非常駐テクスチャデータがシステムディスク３１４からシステムメモリ３０４又はＰＰメモリ４０４にコピーされると、そのテクスチャデータは常駐テクスチャデータになる。図３のＣＰＵ  ３０２で実行されるドライバプログラムを用いて、どのミップマップが常駐ミップマップであり、どのミップマップが非常駐ミップマップであるかを指定することが可能である。本発明の他の実施形態では、ミップマップが常駐であるか非常駐であるかを、テクセルアドレスの少なくとも一部分に基づいて決定する。任意の処理エンジン５０２がグローバルメモリ５２０にアクセスすることを可能にする相互接続（明示的には図示されていない）を介して、処理エンジン５０２をメモリインターフェース４１４と結合することが可能である。
【００４７】
[0057]一実施形態では、各処理エンジン５０２が、マルチスレッド化され、最大でＧ個（例えば、２４個）のスレッドを同時に実行することが可能であり、これは、例えば、各スレッドに関連付けられた現在の状態情報を、ローカルレジスタファイル５０４内の、そのエンジンに割り当てられたレーンの異なる部分に保持することによって可能である。処理エンジン５０２は、有利なことに、異なるスレッドからの命令を、効率を損なうことなく、任意のシーケンスにおいて発行できるように、１つのスレッドから別のスレッドへの切り替えを素早く行うように設計される。
【００４８】
[0058]命令装置５１２は、任意の処理サイクルにおいて、同じ命令（ＩＮＳＴＲ）がＰ個の処理エンジン５０２のすべてに発行されるように構成される。したがって、単一クロックサイクルのレベルでは、コア４０８は、ＰウェイのＳＩＭＤマイクロアーキテクチャを実装する。各処理エンジン５０２もマルチスレッド化されて最大でＧ個のスレッドを同時にサポートするので、コア４０８は、この実施形態では、最大でＰ＊Ｇ個のスレッドを同時に実行することが可能である。例えば、Ｐ＝１６且つＧ＝２４であれば、コア４０８は、最大で５８４個の同時スレッドをサポートする。
【００４９】
[0059]命令装置５１２は、同じ命令をＰ個の処理エンジン５０２のすべてに並列に発行するので、コア４０８は、有利なことに、スレッドを「ＳＩＭＤスレッドグループ」のかたちで処理するために使用される。本明細書で用いられる「ＳＩＭＤスレッドグループ」は、同じプログラムが異なる入力データに対して実行される、最大でＰ個のスレッドのグループを意味し、このグループの１つのスレッドが各処理エンジン５０２に割り当てられる。ＳＩＭＤスレッドグループが含みうるスレッドの数はＰ個より少なくてよく、その場合は、処理エンジン５０２のいくつかが、そのＳＩＭＤスレッドグループが処理されているサイクルの間、アイドル状態になる。ＳＩＭＤスレッドグループが含みうるスレッドの数はＰ個より多くてもよく、その場合は、連続する複数のクロックサイクルにわたって処理が行われる。各処理エンジン５０２は最大でＧ個のスレッドを同時にサポートできるので、コア４０８内では、どの時点においても、最大でＧ個のＳＩＭＤスレッドグループが実行されていることが可能である。
【００５０】
[0060]各クロックサイクルにおいて、１つの命令が、Ｇ個のＳＩＭＤスレッドグループのうちの選択された１つを構成するＰ個のスレッドのすべてに発行される。どのスレッドが現在アクティブかを示すために、関連するスレッドに対応する「アクティブマスク」を命令に含めることが可能である。処理エンジン５０２は、アクティブマスクをコンテキスト識別子として用いて、例えば、命令の実行時に、ローカルレジスタファイル５０４内の、自身に割り当てられたレーンのどの部分を使用しなければならないかを決定する。したがって、所与のサイクルにおいて、コア４０８内のすべての処理エンジン５０２が、同じ命令を、同じＳＩＭＤスレッドグループ内の異なるスレッドについて実行していることになる（インスタンスによっては、ＳＩＭＤスレッドグループ内のいくつかのスレッドが（例えば、条件付き命令又は述語付き命令、プログラム内の分岐における逸脱などの理由により）一時的にアイドル状態になる場合がある）。
【００５１】
[0061]コア４０８の動作は、有利なことに、コアインターフェース５０３を介して制御される。いくつかの実施形態では、コアインターフェース５０３は、処理すべきデータ（例えば、プリミティブデータ、頂点データ、及び／又はピクセルデータ）並びに状態パラメータと、そのデータをどのように処理すべきか（例えば、どのプログラムを実行すべきか）を定義するコマンドとを、作業配分装置４１０から受け取る。スレッド又はＳＩＭＤスレッドグループは、他のスレッド、又は固定機能装置（三角形ラスタライザなど）によって起動されることが可能である。コアインターフェース５０３は、処理すべきデータを共有メモリ５０６にロードし、パラメータをパラメータメモリ５０８にロードすることが可能である。コアインターフェース５０３はまた、命令装置５１２内の新しいスレッド又はＳＩＭＤスレッドグループのそれぞれを初期化し、次に、それらのスレッドの実行を開始するように命令装置５１２に合図することが可能である。スレッド又はＳＩＭＤスレッドグループの実行が完了したら、コア４０８は、有利なことに、コアインターフェース５０３に通知する。次にコアインターフェース５０３は、他の処理（例えば、共有メモリ５０６から出力データを取り出す処理、及び／又は追加のスレッド又はＳＩＭＤスレッドグループの実行に備えてコア４０８を準備する処理）を開始することが可能である。
【００５２】
[0062]ここで説明されたコアアーキテクチャは例示的であること、並びに変形形態及び修正形態が可能であることを理解されたい。任意の数の処理エンジンを含めることが可能である。いくつかの実施形態では、各処理エンジンは、各自のローカルレジスタファイルを有し、スレッドごとのローカルレジスタファイルエントリの割り当ては、固定であることも、要望通りに設定可能であることも可能である。さらに、図示されているコア４０８は１つだけであるが、ＰＰＵ  ４０２は、任意の数のコア４０８を含むことが可能であり、有利なことに、これらのコア４０８の設計は互いに同一であり、これは、実行動作が、個々の処理タスクをどのコア４０８が受け取ったかに依存しないようにするためである。各コア４０８は、有利なことに、他のコア４０８とは独立に動作し、専用の処理エンジン、共有メモリなどを有する。
【００５３】
スレッドアレイと協調型スレッドアレイ
[0063]いくつかの実施形態では、図５のマルチスレッド処理コア４０８は、スレッドアレイを用いて汎用計算を実行することが可能である。本明細書で用いられる「スレッドアレイ」は、出力データセットを生成するために、入力データセットに対して同じプログラムを同時に実行する、いくつか（ｎ０個）のスレッドからなるグループである。スレッドアレイ内の各スレッドには、そのスレッドの実行中にそのスレッドにアクセス可能な固有のスレッド識別子（「スレッドＩＤ」）が割り当てられる。スレッドＩＤは、スレッドの処理動作の様々な態様を制御する。例えば、スレッドＩＤを用いて、スレッドが処理すべきは入力データセットのどの部分かを決定することが可能であり、及び／又は、スレッドが生成又は書き込みすべきは出力データセットのどの部分かを決定することが可能である。
【００５４】
[0064]いくつかの実施形態では、スレッドアレイは、「協調型」スレッドアレイ（ＣＴＡ）である。他のタイプのスレッドアレイと同様に、ＣＴＡは、出力データセットを生成するために、入力データセットに対して同じプログラム（ここでは「ＣＴＡプログラム」と呼ぶ）を同時に実行する、複数のスレッドのグループである。ＣＴＡでは、スレッドは、スレッドＩＤに依存する形式でデータを互いに共有することにより、協調することが可能である。例えば、ＣＴＡでは、あるスレッドがデータを生成し、別のスレッドがそのデータを消費することが可能である。いくつかの実施形態では、消費側スレッドがデータにアクセスしようとする前に生成側スレッドによってそのデータが実際に生成されたことを確認するために、ＣＴＡプログラムコードの、データを共有すべきポイントに同期命令を挿入することが可能である。ＣＴＡのスレッド間でデータ共有があるとすれば、その規模は、ＣＴＡプログラムによって決定される。したがって、ＣＴＡを使用する個々のアプリケーションにおいては、ＣＴＡのスレッドは、ＣＴＡプログラムに応じて、実際にデータを互いに共有することも共有しないことも可能であることを理解されたい。
【００５５】
[0065]いくつかの実施形態では、ＣＴＡ内のスレッドが、図５の共有メモリ５０６を用いて、同じＣＴＡ内の他のスレッドと、入力データ及び／又は中間結果を共有する。例えば、ＣＴＡプログラムは、特定のデータが書き込まれるべき、共有メモリ５０６内のアドレスを計算する命令を含むことが可能であり、このアドレスは、スレッドＩＤの関数である。各スレッドは、各自のスレッドＩＤを用いてその関数を計算し、対応するロケーションに書き込みを行う。このアドレス関数は、有利なことに、異なるスレッドが異なるロケーションに書き込みを行うように定義され、この関数が確定的である限り、どのスレッドによって書き込まれるロケーションでも予測可能である。ＣＴＡプログラムはさらに、データが読み出されるべき、共有メモリ５０６内のアドレスを計算する命令を含むことが可能であり、このアドレスは、スレッドＩＤの関数である。適切な関数を定義し、同期手法を導入することにより、ＣＴＡの１つのスレッドが共有メモリ５０６内の所与のロケーションにデータを書き込み、同じＣＴＡの別のスレッドがそのロケーションからデータを読み出すことが、予測可能な様式で可能である。したがって、任意の所望のパターンのスレッド間データ共有をサポートすることが可能であり、ＣＴＡ内の任意のスレッドが、同じＣＴＡ内の他の任意のスレッドとデータを共有することが可能である。
【００５６】
[0066]ＣＴＡ（又は他のタイプのスレッドアレイ）は、データ並列分解に適した計算を実行するために、有利に用いられる。本明細書で用いられる「データ並列分解」は、出力データを生成するために、入力データに対して同じアルゴリズムを複数回並列に実行することによって計算問題が解かれる任意の状況を含み、例えば、データ並列分解のよくある事例の１つは、出力データセットの異なる部分を生成するために、入力データセットの異なる部分に対して同じ処理アルゴリズムを適用することを含む。データ並列分解に適する問題として、例えば、行列代数、任意の次元数のリニア及び／又は非リニア変換（例えば、高速フーリエ変換）、任意の次元数の畳み込みフィルタを含む様々なフィルタリングアルゴリズム、複数次元の分離可能フィルタなどがある。入力データセットの各部分に適用されるべき処理アルゴリズムは、ＣＴＡプログラム内で指定され、ＣＴＡ内の各スレッドは、入力データセットの１つの部分に対して同じＣＴＡプログラムを実行する。ＣＴＡプログラムは、広い範囲の数学演算及び論理演算を用いてアルゴリズムを実装することが可能であり、条件付き実行パス又は分岐実行パスと、直接メモリアクセス及び／又は間接メモリアクセスとを含むことが可能である。図２Ｂと併せて既に説明されたように、グラフィックスデータの処理に用いられるシェーダプログラムを、述語付き命令又は条件付き命令を用いる条件付き実行パスを含むように構成することが可能である。例えば、フィルタリングされたテクセル値を生成するために外挿を行う命令をシェーダプログラムに実行させる述語コード又は条件コードが、計算されたｄｅｌｔａＬＯＤ値に基づいて決定される。述語コード又は条件コードが別の値の場合、シェーダプログラムは、フィルタリングされたテクセル値を生成するために、従来の内挿を行う命令を実行する。
【００５７】
[0067]一実施形態では、図３のＣＰＵ  ３０２で実行されるドライバプログラムが、ＣＴＡを定義するコマンドをメモリ（例えば、システムメモリ３０４）内の（明示的に図示されていない）プッシュバッファに書き込み、そこからＰＰＵ  ４０２がコマンドを読み出す。これらのコマンドは、有利なことに、状態パラメータに関連付けられ、状態パラメータは、ＣＴＡ内のスレッドの数、ＣＴＡを用いて処理されるべき入力データセット（このミップマップはテクスチャ用として常駐している）の、グローバルメモリ５２０内のロケーション、実行されるべきＣＴＡプログラムの、グローバルメモリ５２０内のロケーション、出力データが書き込まれるべき、グローバルメモリ５２０内のロケーションなどである。状態パラメータは、コマンドとともにプッシュバッファに書き込まれてよい。コアインターフェース５０３は、コマンドに対する応答として、状態パラメータをコア４０８（例えば、パラメータメモリ５０８）にロードし、次に、ＣＴＡパラメータで指定された数のスレッドが起動されるまで、スレッドの起動を開始する。一実施形態では、コアインターフェース５０３は、各スレッドが起動されたときに、それらのスレッドにスレッドＩＤを順次割り当てる。より一般的には、ＣＴＡ内のすべてのスレッドが同じコア４０８において同じプログラムを実行するので、有効な各スレッドＩＤが１つのスレッドにのみ割り当てられる限り、任意のスレッドに任意のスレッドＩＤを割り当てることが可能である。任意の固有の識別子（数値識別子を含み、これに限定されない）を、スレッドＩＤとして用いることが可能である。一実施形態では、ＣＴＡがある数（ｎ０）のスレッドを含む場合、スレッドＩＤは、単純に、０からｎ０−１までの連続した（一次元の）インデックス値である。他の実施形態では、多次元インデックス方式を用いることが可能である。データ共有が、スレッドＩＤの参照によって制御される限り、処理エンジンに対するスレッドの個々の割り当ては、ＣＴＡ実行の結果に影響しないことに注意されたい。したがって、ＣＴＡプログラムは、それが実行される特定のハードウェアに依存しないことが可能である。
【００５８】
グラフィックスパイプラインのアーキテクチャ
[0068]図６Ａは、本発明の１つ又は複数の態様による、グラフィックス処理パイプライン６００の概念図である。図４のＰＰＵ  ４０２は、グラフィックス処理パイプライン６００を形成するように構成されることが可能である。例えば、コア４０８が、頂点処理装置６４４、ジオメトリ処理装置６４８、及びフラグメント処理装置６６０の機能を実行するように構成されることが可能である。データアセンブラ６４２、プリミティブアセンブラ６４６、ラスタライザ６５５、及びラスタ演算装置６６５の機能もコア４０８によって実行されることが可能であり、或いは、ホストインターフェース４０６によって実行されることが可能である。
【００５９】
[0069]データアセンブラ６４２は、高次曲面、プリミティブ、その他の頂点データを収集し、その頂点データを頂点処理装置６４４に出力する。頂点処理装置６４４は、頂点シェーダプログラムを実行して、頂点データを、頂点シェーダプログラムで指定されるように変換するように構成されるプログラマブル実行装置である。例えば、頂点処理装置６４４は、頂点データを、オブジェクトベースの座標表現（オブジェクト空間）から、ワールド空間又は正規化装置座標（ＮＤＣ）空間のような、代替ベースの座標系に変換するようにプログラムされることが可能である。頂点処理装置６４４は、ＰＰメモリ４０４に格納されたデータを、頂点データの処理に使用するために、メモリインターフェース４１４を介して読み出すことが可能である。
【００６０】
[0070]プリミティブアセンブラ６４６は、頂点処理装置６４４から、処理された頂点データを受け取り、ジオメトリ処理装置６４８での処理に使用されるグラフィックスプリミティブ（例えば、点、線、三角形など）を構築する。ジオメトリ処理装置６４８は、ジオメトリシェーダプログラムを実行して、プリミティブアセンブラ６４６から受け取ったグラフィックスプリミティブを、ジオメトリシェーダプログラムで指定されるように変換するように構成されるプログラマブル実行装置である。例えば、ジオメトリ処理装置６４８は、グラフィックスプリミティブを１つ又は複数の新しいグラフィックスプリミティブに細分し、それらの新しいグラフィックスプリミティブのラスタライズに使用されるパラメータ（平面方程式の係数など）を計算するように、プログラムされることが可能である。ジオメトリ処理装置６４８は、それらのパラメータ及び新しいグラフィックスプリミティブをラスタライザ６５５に出力する。ジオメトリ処理装置６４８は、ＰＰメモリ４０４に格納されたデータを、ジオメトリデータの処理に使用するために、メモリインターフェース４１４を介して読み出すことが可能である。
【００６１】
[0071]ラスタライザ６５５は、その新しいグラフィックスプリミティブをスキャンコンバートして、フラグメント及びカバレージデータを、フラグメント処理装置６６０に出力する。フラグメント処理装置６６０は、フラグメントシェーダプログラムを実行して、ラスタライザ６５５から受け取ったフラグメントを、フラグメントシェーダプログラムで指定されるように変換するように構成されるプログラマブル実行装置である。例えば、フラグメント処理装置６６０及びテクスチャ装置６１０は、パースペクティブコレクション、テクスチャマッピング、ミップマップ外挿、シェーディング、ブレンディングなどのような操作を実行して、ラスタ演算装置６５５に出力されるシェーディングされたフラグメントを生成するように、プログラムされることが可能である。フラグメント処理装置６６０及びテクスチャ装置６１０はまた、（例えば、バイリニア、トリリニア、異方性などの）テクスチャフィルタリング操作を実行するようにプログラムされることも可能である。
【００６２】
[0072]フラグメント処理装置６６０は、ＰＰメモリ４０４に格納されたデータを、フラグメントデータの処理に使用するために、メモリインターフェース４１４を介して読み出すことが可能である。メモリインターフェース４１４は、グラフィックスメモリに格納されているデータの読み出し要求を生成し、圧縮データがあれば圧縮解除する。ラスタ演算装置６６５は、固定機能装置であって、オプションで前方及び後方面クリッピング及びラスタ演算（ステンシルやＺテストなど）を実行し、ピクセルデータを、グラフィックスメモリに格納される処理済みグラフィックスデータとして出力する。処理済みグラフィックスデータは、ディスプレイデバイス３１０での表示に備えてグラフィックスメモリに格納されることが可能である。
【００６３】
テクスチャ装置
[0073]図６Ｂは、本発明の１つ又は複数の態様による、図６Ａのテクスチャ装置６１０のブロック図である。テクスチャ装置６１０は、ＬＯＤ装置６１５、テクスチャサンプラ装置６２０、アドレス生成装置６２５、及びフィルタ装置６３０を含む。テクスチャ装置６１０は、テクスチャマップ識別子及びテクスチャマップ座標（例えば、ｓ、ｔなど）を含むフラグメントデータを、処理のために受け取る。テクスチャマップ座標は、ＬＯＤ装置６１５によって、当業者に知られている、理想ＬＯＤを決定する手法（図２Ａ及び２Ｃのステップ２００）を用いて処理される。
【００６４】
[0074]アプリケーションは、各テクスチャフィルタのフィルタタイプを、テクスチャ画像状態データ構造体のメンバとして指定する。テクスチャフィルタは、当該技術分野の最新段階において一般的な（拡大及び縮小）フィルタと、２つの新しいテクスチャフィルタ（外挿拡大及び外挿縮小）とを含む。フィルタタイプは、当該技術分野の最新段階において一般的なタイプ（最近傍、リニア、最近傍ミップフィルタリング付きミップマップ最近傍、リニアミップフィルタリング付きミップマップ最近傍、最近傍ミップフィルタリング付きミップマップリニア、リニアミップフィルタリング付きミップマップリニア、透過性黒（transparent black）など）を含む。透過性黒フィルタタイプは、フィルタリングを行わず、単純にＲ＝Ｇ＝Ｂ＝Ａ＝０を返す。これは、述語値又は条件コードが代替アクションをシェーダプログラムに行わせる場合に有用である。ＯｐｅｎＧＬグラフィックスＡＰＩ（アプリケーションプログラミングインターフェース）の場合、これらのフィルタタイプは、ＧＬ＿ＮＥＡＲＥＳＴ、ＧＬ＿ＬＩＮＥＡＲ、ＧＬ＿ＮＥＡＲＥＳＴ＿ＭＩＰＭＡＰ＿ＮＥＡＲＥＳＴ、ＧＬ＿ＮＥＡＲＥＳＴ＿ＭＩＰＭＡＰ＿ＬＩＮＥＡＲ、ＧＬ＿ＬＩＮＥＡＲ＿ＭＩＰＭＡＰ＿ＮＥＡＲＥＳＴ、ＧＬ＿ＬＩＮＥＡＲ＿ＭＩＰＭＡＰ＿ＬＩＮＥＡＲという名前である。外挿拡大フィルタ及び外挿縮小フィルタの画質向上のために指定されることが可能な、さらなる新しいフィルタタイプが、外挿ミップマップ最近傍及び外挿ミップマップリニアである。
【００６５】
[0075]デバイスドライバ３２２は、ＬＯＤが常駐又は非常駐ミップマップに対応するかどうかを決定するために必要な情報を、ＬＯＤ装置６１５に提供する。この情報は、外挿しきい値ＬＯＤであって、テクスチャ画像データ構造体に格納され、ＬＯＤ装置６１５に提供される。本発明の好ましい実施形態では、外挿しきい値ＬＯＤは、テクスチャ画像データ構造体に格納され、（端数ビットを含む）詳細レベルを表す実数であり、これを下回ると、外挿拡大フィルタリング又は外挿縮小フィルタリングが選択される。外挿しきい値ＬＯＤは、新しいミップマップレベルが非常駐ミップマップから常駐ミップマップに変換される際に、ドライバ３２２が、新しい常駐ミップマップ解像度に急に切り替えるのではなく、外挿フィルタリングから内挿フィルタリングに円滑に移行することを可能にする。本発明の代替実施形態では、外挿しきい値ＬＯＤは、テクスチャ画像データ構造体に格納されている最低ＬＯＤの常駐ミップマップレベルを表す整数値である。
【００６６】
[0076]ＬＯＤ装置６１５は、（図２Ａ、２Ｂ、及び２Ｃの）ステップ２１０を実行するが、これは、テクスチャ画像をサンプリング及びフィルタリングするために、理想ＬＯＤと外挿しきい値ＬＯＤとを比較して、どのテクスチャフィルタ（例えば、拡大、縮小、外挿拡大、又は外挿縮小）がテクスチャサンプラ装置６２０によって用いられるかを選択することによって行われる。ＬＯＤ装置６１５は、テクスチャフィルタ、選択されたテクスチャフィルタタイプ、理想ＬＯＤ、テクスチャマップ座標、及び他の、当該技術分野の最新段階において一般的なサンプリングパラメータを、テクスチャサンプラ装置６２０に渡す。さらに、ＬＯＤ装置６１５は、テクスチャフィルタタイプ及びテクスチャマップ識別子を、アドレス生成装置６２５に出力する。
【００６７】
[0077]ＬＯＤ装置６１５が、外挿縮小テクスチャフィルタ又は外挿拡大テクスチャフィルタ用に指定されたテクスチャフィルタタイプを選択した場合、ＬＯＤ装置６１５は、アプリケーションが、非常駐ミップマップレベルからのテクセルのフィルタリングを要求したことを、（図４の）ホストインターフェース４０６を介して（図３の）デバイスドライバ３２２に通知し、要求されたミップマップレベルを指定する。デバイスドライバ３２２は、図７と併せて説明される、非常駐ミップマップの、常駐ミップマップへの変換を開始する。
【００６８】
[0078]選択されたテクスチャフィルタが外挿拡大又は外挿縮小である場合、テクスチャサンプラ装置６２０は、理想ＬＯＤと外挿しきい値ＬＯＤとの差を計算することにより、ｄｅｌｔａＬＯＤを計算する（図２Ａ及び２Ｃのステップ２３５）。次にテクスチャサンプラ装置６２０は、外挿重みを、ｄｅｌｔａＬＯＤの関数として計算する。
【００６９】
[0079]本発明の一実施形態では、テクスチャサンプラ装置６２０は、（ＬＯＤ，重み）ペアが、ＬＯＤが減っていく順（正から負）に格納された重みテーブル６２７を含む。ｄｅｌｔａＬＯＤが重みテーブル６２７内の最低ＬＯＤ値に満たない場合は、最低ＬＯＤを有する、テーブル内のエントリからの重み値が、外挿重みとして選択される。ｄｅｌｔａＬＯＤが重みテーブル６２７内の最大ＬＯＤ値より大きい場合は、最高ＬＯＤを有する、テーブル内のエントリからの重み値が、外挿重みとして選択される。ｄｅｌｔａＬＯＤが重みテーブル６２７内のエントリのＬＯＤ値と等しい場合は、そのエントリの重み値が外挿重みとして選択される。本発明のいくつかの実施形態では、ｄｅｌｔａＬＯＤが重みテーブル６２７の２つのエントリの間である場合、２つの最も近い重み値を用いたリニア内挿によって、外挿重みが計算される。本発明の他の実施形態では、ｄｅｌｔａＬＯＤが重みテーブル６２７の隣接する２つのエントリのＬＯＤ値の間である場合、外挿重みは、Ｃａｔｍｕｌｌ−Ｒｏｍ３次スプライン、又は他の任意の、最先端の当業者に知られている内挿スプラインを用いて計算される。
【００７０】
[0080]本発明のいくつかの実施形態では、重みテーブル６２７の内容は静的である。本発明の他の実施形態では、デバイスドライバ３２２が、アプリケーションプログラムで指定される外挿フィルタに従って、重みテーブル６２７をロードする。本発明の他の実施形態では、デバイスドライバ３２２が、重みテーブル６２７（又は、外挿拡大又は外挿縮小のための独立した重みテーブル）を、テクスチャサンプラデータ構造体にロードする。テクスチャサンプラデータ構造体は、ＰＰＵ  ４０２内のレジスタに格納されてよく、また、ＰＰメモリ４０４に格納されて、ＰＰＵ  ４０２内でキャッシュされてもよい。
【００７１】
[0081]理想ＬＯＤが常駐ミップマップレベルに対応する場合、テクスチャサンプラ装置６２０は、微粒（及び、必要に応じて、粗粒）ミップマップレベルを選択し、選択されたテクスチャフィルタタイプを用いて、選択されたミップマップレベルのピクセルフットプリントをサンプリングし、当業者に知られている手法を用いて内挿テクセル値を生成する。ＬＯＤ重みは、理想ＬＯＤの小数部分に対応する。理想ＬＯＤが非常駐ミップマップレベルに対応する場合、テクスチャサンプラ装置６２０は、外挿しきい値（通常は、最低ＬＯＤの常駐ミップマップレベル及び最高解像度の常駐ミップマップレベル）を切り詰めて、外挿しきい値の整数部分を生成する。整数部分は、微粒ミップマップレベルＬＯＤ（ＬＯＤｆｉｎｅ）であり、微粒ミップマップレベル＋１（通常は、２番目に低いＬＯＤの常駐ミップマップレベル及び次に最も高い解像度の常駐ミップマップレベル）は、粗粒ミップマップレベルＬＯＤ（ＬＯＤｃｏａｒｓｅ）である。
【００７２】
[0082]フィルタタイプが外挿ミップマップ最近傍である場合、テクスチャサンプラ装置６２０は、テクスチャ空間においてピクセルフットプリントをサンプリングして、（最低常駐ミップマップ及び最低常駐ミップマップ＋１に対応する）ミップレベルＬＯＤｆｉｎｅ及びＬＯＤｃｏａｒｓｅの最近傍サンプルを、アドレス生成装置６２５に出力する。フィルタタイプが外挿ミップマップリニアである場合、テクスチャサンプラ装置６２０は、テクスチャ空間においてピクセルフットプリントをサンプリングして、（最低常駐ミップマップ及び最低ミップマップ＋１に対応する）ミップレベルＬＯＤｆｉｎｅ及びＬＯＤｃｏａｒｓｅのサンプルを、アドレス生成装置６２５に出力する。テクスチャサンプラ装置６２０は、フィルタタイプが外挿ミップマップリニア又は外挿ミップマップ最近傍の場合に、１＋外挿重みを、ＬＯＤｆｉｎｅミップレベルをサンプルするためのＬＯＤ重みとして用い、１−外挿重みを、ＬＯＤｃｏａｒｓｅミップレベルをサンプルするためのＬＯＤ重みとして用いる。
【００７３】
[0083]選択されたフィルタタイプ、ＬＯＤ重み、異方性重み、微粒ミップマップＬＯＤレベル（ＬＯＤｆｉｎｅ）、粗粒ミップマップＬＯＤレベル（ＬＯＤｃｏａｒｓｅ）、及び（テクスチャマップ座標及び選択されたフィルタタイプに対応する）サンプルが、テクスチャサンプラ装置６２０によって、アドレス生成装置６２５に出力される。アドレス生成装置６２５は、当業者に知られている手法により、選択されたフィルタタイプに従い、各テクセルについてｕｖ重み（バイリニア又は最近傍）を生成する。サンプルのフィルタタイプが外挿ミップマップリニアの場合は、アドレス生成装置６２５が、各サンプル内のテクセルについてバイリニア（ｕ，ｖ）重みを計算する。サンプルのフィルタタイプが外挿ミップマップ最近傍の場合は、アドレス生成装置６２５が、各サンプル内のテクセルについて最近傍重みを計算する。アドレス生成装置６２５は、サンプル、テクスチャマップ識別子、ＬＯＤｆｉｎｅ、及びＬＯＤｃｏａｒｓｅを用いて、常駐ミップマップからテクセルを読み出すアドレスを決定する。仮想メモリアドレス指定を行う場合は、テクセルの読み出しに必要な物理アドレスを決定するために、追加のアドレス変換をメモリインターフェース４１４によって行うことが可能である。
【００７４】
[0084]本発明の一実施形態では、ミップマップから読み出されたテクセルの変倍に用いられる各テクセル重みは、そのテクセルのミップレベルのＬＯＤ重みと、そのフットプリントの異方性フィルタ重み（異方性重み）と、ｕｖ重みとの組み合わせである。アドレス生成装置６２５は、ＬＯＤ重みと異方性重みとテクセルｕｖ重みとを掛け合わせることによってテクセル重みを計算し、その結果をテクスチャフィルタ装置６３０に伝える。テクセルは、フィルタ装置６３０に返され、アドレス生成装置６２５で計算されたテクセル重みによって変倍される。
【００７５】
[0085]フィルタ重みの合計が１になる、本発明の実施形態では、フィルタ装置６３０が、変倍されたテクセル値を、テクスチャ色アキュムレータレジスタに蓄積する。最後のピクセルの最後のテクセルが重み付け及び蓄積されると、テクスチャ装置６１０は、テクスチャ色アキュムレータレジスタの内容を、フラグメント処理装置６６０に返す。フィルタ重みの合計が１にならない、本発明の実施形態では、フィルタ装置６３０は、変倍されたテクセル値をテクスチャ色アキュムレータレジスタに蓄積し、テクセル重みをテクスチャ重みアキュムレータレジスタに蓄積する。最後のテクセルが重み付けされると共に蓄積されると、フィルタ装置６３０は、色アキュムレータレジスタの内容を重みアキュムレータレジスタの内容で除算し、結果として得られるフィルタリングされたテクスチャ値を、フラグメント処理装置６６０に返す。
【００７６】
[0086]テクスチャ装置６１０は、ピクセルシェーダプログラムが条件付き実行パスを選択するために有利にアクセス可能である様式で、ピクセルごとの状態情報を返すように構成されることが可能である。本発明の一実施形態では、テクスチャ装置６１０は、ピクセルをテクスチャ化する動作が、テクスチャ装置６１０が外挿フィルタリングを用いることを必要とし、結果として得られた値によって、ピクセルシェーダプログラム内の後続の分岐動作を決定するために用いられることが可能な述語又は条件コードが設定されたかどうかを、ピクセル単位で伝達することが可能である。シェーダプログラムは、条件付きで、同じテクスチャからの追加テクスチャ読み出しを用いて非常駐ミップマップのテクセルを処理して３次フィルタリングを行うか、人工的細部を追加するために他のテクスチャからのテクスチャ読み出しを発行するか、他の操作を行うことが可能である。
【００７７】
[0087]図７は、本発明の１つ又は複数の態様による、非常駐ミップマップレベルを常駐ミップマップレベルに変換する方法ステップのフロー図である。ステップ７００で、デバイスドライバ３２２が、非常駐ミップマップを常駐ミップマップに変換する要求を受け取る。ステップ７１０で、デバイスドライバ３２２が、非常駐ミップマップを、テクスチャ装置６１０によってアクセス可能な常駐メモリ（ＰＰメモリ４０４など）にコピーすることを開始する。ステップ７２０で、デバイスドライバ３２２が、変換が完了したかどうか、すなわち、ミップマップがコピーされたかどうかを判定し、完了していない場合は、ステップ７２０を繰り返す。本発明のいくつかの実施形態では、非常駐ミップマップのコピーが完了したことを確認するために、最高解像度の常駐ミップマップレベルが変更されたタイミングをリソースマネージャが表示することが可能である。
【００７８】
[0088]ミップマップがコピーされると、ステップ７３０で、デバイスドライバ３２２が、外挿しきい値ＬＯＤを更新する。本発明のいくつかの実施形態では、外挿しきい値は、最低常駐ミップマップレベルの値と等しくなるように更新される。本発明の他の実施形態では、外挿しきい値ＬＯＤは、非常駐ミップマップレベルが常駐ミップマップレベルに変換される際に、新しい常駐ミップマップ解像度に急に切り替わるのではなく、外挿フィルタリングから内挿フィルタリングに円滑に移行するように、数フレームにわたって減らされる。例えば、外挿しきい値ＬＯＤが３．０であって、最低常駐ミップマップレベルが２．０であるとすれば、外挿しきい値ＬＯＤを、２．０に達するまで、０．１ずつ連続的に減らすことが可能である。ステップ７４０で、デバイスドライバ３２２が、外挿しきい値ＬＯＤが最終値に達したかどうかを判定し、達していない場合は、ステップ７３０を繰り返す。達した場合は、ステップ７５０で、非常駐ミップマップレベルから常駐ミップマップレベルへの変換を完了する。
【００７９】
[0089]外挿フィルタリングが有効であって、フィルタリングに必要なテクセルが非常駐ミップマップレベルから供給される場合、外挿フィルタリングを用いて生成されたテクセルは、理想ミップレベルと常駐ミップレベルとの差に比例してより鮮明に表示される改善された画像を提供する。この画像は、高解像度ミップマップテクスチャデータの代わりに低解像度ミップマップテクスチャデータを用いた場合に比べ、より適切な詳細レベルを伝達する。並列処理サブシステム３１２は、高解像度ミップマップ（例えば、非常駐ミップマップ３２５及び３３５）が非常駐メモリ（例えば、システムディスク３１４、システムメモリ３０４など）から取り出される間に、複数のスレッドを処理することと並行して、常駐ミップマップから詳細を外挿することにより、外挿テクスチャ値を生成するように構成される。
【００８０】
[0090]本発明の一実施形態は、コンピュータシステムとともに使用されるプログラム製品として実施されることが可能である。プログラム製品のプログラムは、（本明細書に記載の方法を含む）各実施形態の機能を定義し、様々なコンピュータ可読ストレージ媒体に収容されることが可能である。例示的なコンピュータ可読ストレージ媒体としては、（ｉ）情報が永続的に格納される書き込み不可能なストレージ媒体（例えば、ＣＤ−ＲＯＭドライブによって可読なＣＤ−ＲＯＭディスク、フラッシュメモリ、ＲＯＭチップ、又は任意のタイプの固体不揮発性半導体メモリのような、コンピュータ内の読み出し専用メモリデバイス）、及び（ｉｉ）変更可能な情報が格納される書き込み可能なストレージ媒体（例えば、ディスケットドライブ内のフロッピーディスク、又はハードディスクドライブ、又は任意のタイプの固体ランダムアクセス半導体メモリ）があるが、これらには限定されない。
【００８１】
[0091]ここまで、特定の実施形態に関して、本発明を説明してきた。しかしながら、当業者であれば理解されるように、添付の請求項において示される、本発明のより広い趣旨及び範囲から逸脱することなく、様々な修正及び変更を、その実施形態に施すことが可能である。したがって、先述の説明及び図面は、限定的ではなく例示的であると見なされるべきである。
【図面の簡単な説明】
【００８２】
【図１】本発明の１つ又は複数の態様による、詳細レベル（ＬＯＤ）を変化させる、テクスチャのミップマップの概念図である。
【図２Ａ】本発明の１つ又は複数の態様による、非常駐ミップマップレベルに対して外挿テクスチャ値を生成する方法ステップのフロー図である。
【図２Ｂ】本発明の１つ又は複数の態様による、理想ＬＯＤに対応するミップマップが常駐かどうかを決定する、図２Ａの方法ステップ２１０のフロー図である。
【図２Ｃ】本発明の１つ又は複数の態様による、常駐ミップマップレベルからテクスチャマップ値を外挿しなければならないかどうかを決定する方法ステップのフロー図である。
【図３】本発明の１つ又は複数の態様を実装するために構成されたコンピュータシステムを示すブロック図である。
【図４】本発明の１つ又は複数の態様による、図３のコンピュータシステムの並列処理サブシステムのブロック図である。
【図５】本発明の１つ又は複数の態様による、図４の並列処理サブシステムの並列処理装置のブロック図である。
【図６Ａ】本発明の１つ又は複数の態様による、グラフィックス処理パイプラインの概念図である。
【図６Ｂ】本発明の１つ又は複数の態様による、図６Ａのテクスチャ装置のブロック図である。
【図７】本発明の１つ又は複数の態様による、非常駐ミップマップレベルを常駐ミップマップレベルに変換する方法ステップのフロー図である。
【符号の説明】
【００８３】
１００…非常駐ミップマップ、１１０…ＬＯＤ０ミップマップ、１２０…ＬＯＤ１ミップマップ、１３０…ＬＯＤ２ミップマップ、１４０…常駐ミップマップ、１５０…ＬＯＤ３ミップマップ、１６０…ＬＯＤ４ミップマップ、１９０…ＬＯＤＮミップマップ、
３００…システム、３０４…システムメモリ、３０５…メモリブリッジ、３０６…通信パス、３０７…Ｉ／Ｏブリッジ、３０８…入力デバイス、３１０…ディスプレイデバイス、３１２…並列処理サブシステム、３１３…通信パス、３１４…システムディスク、３１６…スイッチ、３１８…ネットワークアダプタ、３２０…アドインカード、３２１…アドインカード、３２２…デバイスドライバ、３２５…常駐ミップマップ、３３５…非常駐ミップマップ、４０４…ＰＰメモリ、４０６…ホストインターフェース、４０８…コア、４１０…作業配分装置、４１２…フロントエンド、４１４…メモリインターフェース、４２５…常駐ミップマップ、５０２（０）…処理エンジン０、５０２（１）…処理エンジン１、５０２（Ｐ−１）…処理エンジンＰ−１、５０３…コアインターフェース、５０４…ローカルレジスタファイル、５０６…共有メモリ、５０８…パラメータメモリ、５１２…命令装置、５２０…グローバルメモリ、６００…グラフィックス処理パイプライン、６１０…テクスチャ装置、６１５…ＬＯＤ装置、６２０…テクスチャサンプラ装置、６２５…アドレス生成装置、６２７…重みテーブル、６３０…フィルタ装置、６４２…データアセンブラ、６４４…頂点処理装置、６４６…プリミティブアセンブラ、６４８…ジオメトリ処理装置、６５５…ラスタライザ、６６０…フラグメント処理装置、６６５…ラスタ演算装置。
【図１】
2008305408.tif 000003
【図２Ａ】
2008305408.tif 000004
【図２Ｂ】
2008305408.tif 000005
【図２Ｃ】
2008305408.tif 000006
【図３】
2008305408.tif 000007
【図４】
2008305408.tif 000008
【図５】
2008305408.tif 000009
【図６Ａ】
2008305408.tif 000010
【図６Ｂ】
2008305408.tif 000011
【図７】
2008305408.tif 000012
【外国語明細書】
2008305408000001.pdf